forked from OpenNeo/impress
move species supported images for item show into pet_type method
This commit is contained in:
parent
f6dce65dfb
commit
66c43e220a
10 changed files with 92 additions and 12 deletions
|
@ -1,11 +1,14 @@
|
||||||
module ItemsHelper
|
module ItemsHelper
|
||||||
StandardSpeciesImageFormat = 'http://pets.neopets.com/cp/%s/1/1.png'
|
StandardSpeciesImageFormat = 'http://pets.neopets.com/cp/%s/1/1.png'
|
||||||
|
|
||||||
def standard_species_images
|
def standard_species_images(species_list)
|
||||||
colors = Species::StandardColors
|
colors = Color::Basic
|
||||||
raw(Species.all.inject('') do |html, species|
|
pet_type = PetType.new
|
||||||
|
raw(species_list.inject('') do |html, species|
|
||||||
color = colors[rand(colors.size)]
|
color = colors[rand(colors.size)]
|
||||||
src = sprintf(StandardSpeciesImageFormat, species.hash_for_color(color))
|
pet_type.species = species
|
||||||
|
pet_type.color = color
|
||||||
|
src = sprintf(StandardSpeciesImageFormat, pet_type.image_hash)
|
||||||
html + image_tag(src, 'data-color' => color, 'data-species' => species.name)
|
html + image_tag(src, 'data-color' => color, 'data-species' => species.name)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
class Color < PetAttribute
|
class Color < PetAttribute
|
||||||
fetch_objects!
|
fetch_objects!
|
||||||
|
|
||||||
|
Basic = %w(blue green red yellow).map { |name| find_by_name(name) }
|
||||||
end
|
end
|
||||||
|
|
|
@ -22,6 +22,10 @@ class Item < ActiveRecord::Base
|
||||||
write_attribute('species_support_ids', replacement)
|
write_attribute('species_support_ids', replacement)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def supported_species
|
||||||
|
@supported_species ||= species_support_ids.empty? ? Species.all : species_support_ids.map { |id| Species.find(id) }
|
||||||
|
end
|
||||||
|
|
||||||
def self.search(query)
|
def self.search(query)
|
||||||
raise ArgumentError, "Please provide a search query" unless query
|
raise ArgumentError, "Please provide a search query" unless query
|
||||||
query = query.strip
|
query = query.strip
|
||||||
|
|
|
@ -1,5 +1,39 @@
|
||||||
class PetType < ActiveRecord::Base
|
class PetType < ActiveRecord::Base
|
||||||
|
BasicHashes = YAML::load_file(Rails.root.join('config', 'basic_type_hashes.yml'))
|
||||||
|
|
||||||
def as_json(options={})
|
def as_json(options={})
|
||||||
{:id => id, :body_id => body_id}
|
{:id => id, :body_id => body_id}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def color_id=(new_color_id)
|
||||||
|
@color = nil
|
||||||
|
write_attribute('color_id', new_color_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
def color=(new_color)
|
||||||
|
@color = new_color
|
||||||
|
write_attribute('color_id', @color.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
def color
|
||||||
|
@color ||= Color.find(color_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
def species_id=(new_species_id)
|
||||||
|
@species = nil
|
||||||
|
write_attribute('species_id', new_species_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
def species=(new_species)
|
||||||
|
@species = new_species
|
||||||
|
write_attribute('species_id', @species.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
def species
|
||||||
|
@species ||= Species.find(species_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
def image_hash
|
||||||
|
BasicHashes[species.name][color.name]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,10 +1,3 @@
|
||||||
class Species < PetAttribute
|
class Species < PetAttribute
|
||||||
fetch_objects!
|
fetch_objects!
|
||||||
|
|
||||||
StandardColors = %w(blue green yellow red)
|
|
||||||
StandardHashes = YAML::load_file(Rails.root.join('config', 'standard_type_hashes.yml'))
|
|
||||||
|
|
||||||
def hash_for_color(color)
|
|
||||||
StandardHashes[name][color]
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
%h3 Preview
|
%h3 Preview
|
||||||
|
|
||||||
#item-preview
|
#item-preview
|
||||||
#item-preview-species= standard_species_images
|
#item-preview-species= standard_species_images(@item.supported_species)
|
||||||
#item-preview-swf
|
#item-preview-swf
|
||||||
Javascript and Flash are required to preview wearables. Sorry!
|
Javascript and Flash are required to preview wearables. Sorry!
|
||||||
|
|
||||||
|
|
|
@ -15,4 +15,8 @@ describe Color do
|
||||||
Color.find_by_name('Alien').id.should == 1
|
Color.find_by_name('Alien').id.should == 1
|
||||||
Color.find_by_name('alien').id.should == 1
|
Color.find_by_name('alien').id.should == 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
specify "class should have list of basic colors" do
|
||||||
|
Color::Basic.map { |c| c.name }.should == ['blue', 'green', 'red', 'yellow']
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,6 +13,16 @@ describe Item do
|
||||||
@item.species_support_ids.should == [4, 5, 6]
|
@item.species_support_ids.should == [4, 5, 6]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
specify "should provide list of supported species objects" do
|
||||||
|
@item.species_support_ids = [1, 2, 3]
|
||||||
|
@item.supported_species.map { |s| s.name }.should == ['acara', 'aisha', 'blumaroo']
|
||||||
|
end
|
||||||
|
|
||||||
|
specify "should provide all species if no support ids" do
|
||||||
|
@item.species_support_ids = ''
|
||||||
|
@item.supported_species.count.should be > 0
|
||||||
|
end
|
||||||
|
|
||||||
specify "should have many swf_assets through parent_swf_asset_relationships" do
|
specify "should have many swf_assets through parent_swf_asset_relationships" do
|
||||||
3.times do |n|
|
3.times do |n|
|
||||||
swf_asset = Factory.create :swf_asset, :id => n, :url => "http://images.neopets.com/#{n}.swf", :type => 'object'
|
swf_asset = Factory.create :swf_asset, :id => n, :url => "http://images.neopets.com/#{n}.swf", :type => 'object'
|
||||||
|
|
|
@ -6,5 +6,35 @@ describe PetType do
|
||||||
pet_type = PetType.create :color_id => 2, :species_id => 3, :body_id => 4
|
pet_type = PetType.create :color_id => 2, :species_id => 3, :body_id => 4
|
||||||
pet_type.as_json.should == {:id => 1, :body_id => 4}
|
pet_type.as_json.should == {:id => 1, :body_id => 4}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
specify "should allow setting species object" do
|
||||||
|
pet_type = PetType.new
|
||||||
|
pet_type.species = Species.find(1)
|
||||||
|
pet_type.species_id.should == 1
|
||||||
|
pet_type.species.id.should == 1
|
||||||
|
pet_type.species.name.should == 'acara'
|
||||||
|
end
|
||||||
|
|
||||||
|
specify "should allow setting color object" do
|
||||||
|
pet_type = PetType.new
|
||||||
|
pet_type.color = Color.find(1)
|
||||||
|
pet_type.color_id.should == 1
|
||||||
|
pet_type.color.id.should == 1
|
||||||
|
pet_type.color.name.should == 'alien'
|
||||||
|
end
|
||||||
|
|
||||||
|
specify "should return image hash if a basic color" do
|
||||||
|
blue = Color.find_by_name('blue')
|
||||||
|
acara = Species.find_by_name('acara')
|
||||||
|
pet_type = PetType.new :color => blue, :species => acara
|
||||||
|
pet_type.image_hash.should == 'mnbztxxn'
|
||||||
|
end
|
||||||
|
|
||||||
|
specify "should return nil if not a basic color" do
|
||||||
|
asparagus = Color.find_by_name('asparagus')
|
||||||
|
acara = Species.find_by_name('acara')
|
||||||
|
pet_type = PetType.new :color => asparagus, :species => acara
|
||||||
|
pet_type.image_hash.should be nil
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue