forked from OpenNeo/impress
zones are now a static resource, like species and color. database table remains for compatibility with main PHP app
This commit is contained in:
parent
7f20dad9d6
commit
9671a02ecc
9 changed files with 269 additions and 41 deletions
|
@ -8,12 +8,12 @@ class SwfAssetsController < ApplicationController
|
||||||
@swf_assets = @swf_assets.fitting_body_id(params[:body_id])
|
@swf_assets = @swf_assets.fitting_body_id(params[:body_id])
|
||||||
else
|
else
|
||||||
@swf_assets = @swf_assets.fitting_standard_body_ids
|
@swf_assets = @swf_assets.fitting_standard_body_ids
|
||||||
json = @swf_assets.for_json.all.group_by(&:body_id)
|
json = @swf_assets.all.group_by(&:body_id)
|
||||||
end
|
end
|
||||||
elsif params[:pet_type_id]
|
elsif params[:pet_type_id]
|
||||||
@swf_assets = PetType.find(params[:pet_type_id]).pet_states.first.swf_assets
|
@swf_assets = PetType.find(params[:pet_type_id]).pet_states.first.swf_assets
|
||||||
end
|
end
|
||||||
json ||= @swf_assets.for_json.all
|
json ||= @swf_assets.all
|
||||||
render :json => json
|
render :json => json
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,31 +1,26 @@
|
||||||
class PetAttribute
|
class PetAttribute < StaticResource
|
||||||
attr_accessor :id, :name
|
|
||||||
|
|
||||||
def self.all
|
|
||||||
@objects
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.find(id)
|
|
||||||
@objects[id-1]
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.find_by_name(name)
|
def self.find_by_name(name)
|
||||||
@objects_by_name[name.downcase]
|
@objects_by_name[name.downcase]
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def self.data_source
|
||||||
|
"#{to_s.downcase.pluralize}.txt"
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.process_line(line)
|
||||||
|
name = line.chomp.downcase
|
||||||
|
@objects << @objects_by_name[name] = species = new
|
||||||
|
species.id = @objects.size
|
||||||
|
species.name = name
|
||||||
|
end
|
||||||
|
|
||||||
def self.fetch_objects!
|
def self.fetch_objects!
|
||||||
@objects = []
|
@objects = []
|
||||||
@objects_by_name = {}
|
@objects_by_name = {}
|
||||||
|
File.open(Rails.root.join('config', data_source)).each do |line|
|
||||||
filename = "#{to_s.downcase.pluralize}.txt"
|
process_line(line)
|
||||||
|
|
||||||
File.open(Rails.root.join('config', filename)).each do |line|
|
|
||||||
name = line.chomp.downcase
|
|
||||||
@objects << @objects_by_name[name] = species = new
|
|
||||||
species.id = @objects.size
|
|
||||||
species.name = name
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
11
app/models/static_resource.rb
Normal file
11
app/models/static_resource.rb
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
class StaticResource
|
||||||
|
attr_accessor :id, :name
|
||||||
|
|
||||||
|
def self.all
|
||||||
|
@objects
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.find(id)
|
||||||
|
@objects[id-1]
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,12 +1,8 @@
|
||||||
class SwfAsset < ActiveRecord::Base
|
class SwfAsset < ActiveRecord::Base
|
||||||
set_inheritance_column 'inheritance_type'
|
set_inheritance_column 'inheritance_type'
|
||||||
|
|
||||||
belongs_to :zone
|
|
||||||
|
|
||||||
delegate :depth, :to => :zone
|
delegate :depth, :to => :zone
|
||||||
|
|
||||||
scope :for_json, includes(:zone)
|
|
||||||
|
|
||||||
scope :fitting_body_id, lambda { |body_id|
|
scope :fitting_body_id, lambda { |body_id|
|
||||||
where(arel_table[:body_id].in([body_id, 0]))
|
where(arel_table[:body_id].in([body_id, 0]))
|
||||||
}
|
}
|
||||||
|
@ -33,4 +29,8 @@ class SwfAsset < ActiveRecord::Base
|
||||||
:zone_id => zone_id
|
:zone_id => zone_id
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def zone
|
||||||
|
@zone ||= Zone.find(zone_id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,3 +1,18 @@
|
||||||
class Zone < ActiveRecord::Base
|
class Zone < StaticResource
|
||||||
set_inheritance_column 'inheritance_type'
|
AttributeNames = ['id', 'label', 'depth']
|
||||||
|
|
||||||
|
attr_reader *AttributeNames
|
||||||
|
|
||||||
|
def initialize(attributes)
|
||||||
|
AttributeNames.each do |name|
|
||||||
|
instance_variable_set "@#{name}", attributes[name]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
n = 0
|
||||||
|
@objects = YAML.load_file(Rails.root.join('config', 'zones.yml')).map do |a|
|
||||||
|
a['id'] = (n += 1)
|
||||||
|
new(a)
|
||||||
|
end
|
||||||
|
n = nil
|
||||||
end
|
end
|
||||||
|
|
208
config/zones.yml
Normal file
208
config/zones.yml
Normal file
|
@ -0,0 +1,208 @@
|
||||||
|
- label: Music
|
||||||
|
depth: 1
|
||||||
|
type_id: 4
|
||||||
|
type: AUDIO_MUSIC
|
||||||
|
- label: Sound Effects
|
||||||
|
depth: 2
|
||||||
|
type_id: 4
|
||||||
|
type: AUDIO_SOUND_EFFECTS
|
||||||
|
- label: Background
|
||||||
|
depth: 3
|
||||||
|
type_id: 3
|
||||||
|
type: BACKGROUND
|
||||||
|
- label: Biology Effects
|
||||||
|
depth: 6
|
||||||
|
type_id: 1
|
||||||
|
type: BIO_EFFECTS
|
||||||
|
- label: Hind Biology
|
||||||
|
depth: 7
|
||||||
|
type_id: 1
|
||||||
|
type: BIO_HIND
|
||||||
|
- label: Markings
|
||||||
|
depth: 8
|
||||||
|
type_id: 2
|
||||||
|
type: TATTOO
|
||||||
|
- label: Hind Disease
|
||||||
|
depth: 9
|
||||||
|
type_id: 1
|
||||||
|
type: BIO_DISEASE_HIND
|
||||||
|
- label: Hind Cover
|
||||||
|
depth: 10
|
||||||
|
type_id: 2
|
||||||
|
type: COVER_HIND
|
||||||
|
- label: Hind Transient Biology
|
||||||
|
depth: 11
|
||||||
|
type_id: 1
|
||||||
|
type: TRANSIENT_BIO_HIND
|
||||||
|
- label: Hind Drippings
|
||||||
|
depth: 12
|
||||||
|
type_id: 1
|
||||||
|
type: BIO_DRIPPINGS_HIND
|
||||||
|
- label: Backpack
|
||||||
|
depth: 13
|
||||||
|
type_id: 2
|
||||||
|
type: BACKPACK
|
||||||
|
- label: Wings Transient Biology
|
||||||
|
depth: 14
|
||||||
|
type_id: 1
|
||||||
|
type: TRANSIENT_BIO_WINGS
|
||||||
|
- label: Wings
|
||||||
|
depth: 15
|
||||||
|
type_id: 2
|
||||||
|
type: WINGS
|
||||||
|
- label: Hair Back
|
||||||
|
depth: 17
|
||||||
|
type_id: 1
|
||||||
|
type: TRANSIENT_BIO_HAIR_BACK
|
||||||
|
- label: Body
|
||||||
|
depth: 18
|
||||||
|
type_id: 1
|
||||||
|
type: BIO_BODY
|
||||||
|
- label: Markings
|
||||||
|
depth: 19
|
||||||
|
type_id: 2
|
||||||
|
type: TATTOO
|
||||||
|
- label: Body Disease
|
||||||
|
depth: 20
|
||||||
|
type_id: 1
|
||||||
|
type: BIO_DISEASE_BODY
|
||||||
|
- label: Feet Transient Biology
|
||||||
|
depth: 21
|
||||||
|
type_id: 1
|
||||||
|
type: TRANSIENT_BIO_FEET
|
||||||
|
- label: Shoes
|
||||||
|
depth: 22
|
||||||
|
type_id: 2
|
||||||
|
type: SHOES
|
||||||
|
- label: Lower-body Transient Biology
|
||||||
|
depth: 23
|
||||||
|
type_id: 1
|
||||||
|
type: TRANSIENT_BIO_BODY_LOWER
|
||||||
|
- label: Trousers
|
||||||
|
depth: 24
|
||||||
|
type_id: 2
|
||||||
|
type: PANTS
|
||||||
|
- label: Upper-body Transient Biology
|
||||||
|
depth: 25
|
||||||
|
type_id: 1
|
||||||
|
type: TRANSIENT_BIO_BODY_UPPER
|
||||||
|
- label: Shirt/Dress
|
||||||
|
depth: 26
|
||||||
|
type_id: 2
|
||||||
|
type: SHIRT_DRESS
|
||||||
|
- label: Necklace
|
||||||
|
depth: 28
|
||||||
|
type_id: 2
|
||||||
|
type: NECKLACE
|
||||||
|
- label: Gloves
|
||||||
|
depth: 29
|
||||||
|
type_id: 2
|
||||||
|
type: COVER_HAND
|
||||||
|
- label: Jacket
|
||||||
|
depth: 30
|
||||||
|
type_id: 2
|
||||||
|
type: JACKET
|
||||||
|
- label: Collar
|
||||||
|
depth: 31
|
||||||
|
type_id: 2
|
||||||
|
type: COLLAR
|
||||||
|
- label: Body Drippings
|
||||||
|
depth: 32
|
||||||
|
type_id: 1
|
||||||
|
type: BIO_DRIPPINGS_BODY
|
||||||
|
- label: Ruff
|
||||||
|
depth: 33
|
||||||
|
type_id: 1
|
||||||
|
type: BIO_RUFF
|
||||||
|
- label: Head
|
||||||
|
depth: 34
|
||||||
|
type_id: 1
|
||||||
|
type: BIO_HEAD
|
||||||
|
- label: Markings
|
||||||
|
depth: 35
|
||||||
|
type_id: 2
|
||||||
|
type: TATTOO
|
||||||
|
- label: Head Disease
|
||||||
|
depth: 36
|
||||||
|
type_id: 1
|
||||||
|
type: BIO_DISEASE_HEAD
|
||||||
|
- label: Eyes
|
||||||
|
depth: 37
|
||||||
|
type_id: 1
|
||||||
|
type: BIO_EYES
|
||||||
|
- label: Mouth
|
||||||
|
depth: 38
|
||||||
|
type_id: 1
|
||||||
|
type: BIO_MOUTH
|
||||||
|
- label: Glasses
|
||||||
|
depth: 41
|
||||||
|
type_id: 2
|
||||||
|
type: GLASSES
|
||||||
|
- label: Earrings
|
||||||
|
depth: 39
|
||||||
|
type_id: 2
|
||||||
|
type: EARRING
|
||||||
|
- label: Hair Front
|
||||||
|
depth: 40
|
||||||
|
type_id: 1
|
||||||
|
type: TRANSIENT_BIO_HAIR_FRONT
|
||||||
|
- label: Head Transient Biology
|
||||||
|
depth: 42
|
||||||
|
type_id: 1
|
||||||
|
type: TRANSIENT_BIO_HEAD
|
||||||
|
- label: Head Drippings
|
||||||
|
depth: 43
|
||||||
|
type_id: 1
|
||||||
|
type: BIO_DRIPPINGS_HEAD
|
||||||
|
- label: Hat
|
||||||
|
depth: 44
|
||||||
|
type_id: 2
|
||||||
|
type: HAT
|
||||||
|
- label: Earrings
|
||||||
|
depth: 45
|
||||||
|
type_id: 2
|
||||||
|
type: EARRING
|
||||||
|
- label: Right-hand Item
|
||||||
|
depth: 46
|
||||||
|
type_id: 2
|
||||||
|
type: ITEM_RIGHT_HAND
|
||||||
|
- label: Left-hand Item
|
||||||
|
depth: 47
|
||||||
|
type_id: 2
|
||||||
|
type: ITEM_LEFT_HAND
|
||||||
|
- label: Higher Foreground Item
|
||||||
|
depth: 49
|
||||||
|
type_id: 3
|
||||||
|
type: ITEM_FOREGROUND_HIGHER
|
||||||
|
- label: Lower Foreground Item
|
||||||
|
depth: 50
|
||||||
|
type_id: 3
|
||||||
|
type: ITEM_FOREGROUND_LOWER
|
||||||
|
- label: Static
|
||||||
|
depth: 48
|
||||||
|
type_id: 3
|
||||||
|
type: STATIC
|
||||||
|
- label: Thought Bubble
|
||||||
|
depth: 51
|
||||||
|
type_id: 3
|
||||||
|
type: THOUGHT_BUBBLE
|
||||||
|
- label: Background Item
|
||||||
|
depth: 4
|
||||||
|
type_id: 3
|
||||||
|
type: ITEM_BACKGROUND
|
||||||
|
- label: Right-hand Item
|
||||||
|
depth: 5
|
||||||
|
type_id: 2
|
||||||
|
type: ITEM_RIGHT_HAND
|
||||||
|
- label: Hat
|
||||||
|
depth: 16
|
||||||
|
type_id: 2
|
||||||
|
type: HAT
|
||||||
|
- label: Belt
|
||||||
|
depth: 27
|
||||||
|
type_id: 2
|
||||||
|
type: BELT
|
||||||
|
- label: Foreground
|
||||||
|
depth: 52
|
||||||
|
type_id: 3
|
||||||
|
type: TOP_FOREGROUND
|
|
@ -2,17 +2,15 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe SwfAsset do
|
describe SwfAsset do
|
||||||
it "belongs to a zone" do
|
it "belongs to a zone" do
|
||||||
zone = Factory.create :zone, :label => 'foo'
|
|
||||||
asset = Factory.create :swf_asset, :zone_id => 1
|
asset = Factory.create :swf_asset, :zone_id => 1
|
||||||
asset.zone_id.should == 1
|
asset.zone_id.should == 1
|
||||||
asset.zone.id.should == 1
|
asset.zone.id.should == 1
|
||||||
asset.zone.label.should == 'foo'
|
asset.zone.label.should == 'Music'
|
||||||
end
|
end
|
||||||
|
|
||||||
it "delegates depth to zone" do
|
it "delegates depth to zone" do
|
||||||
zone = Factory.create :zone, :depth => 12
|
|
||||||
asset = Factory.create :swf_asset, :zone_id => 1
|
asset = Factory.create :swf_asset, :zone_id => 1
|
||||||
asset.depth.should == 12
|
asset.depth.should == 1
|
||||||
end
|
end
|
||||||
|
|
||||||
it "converts neopets URL to impress URL" do
|
it "converts neopets URL to impress URL" do
|
||||||
|
@ -21,18 +19,17 @@ describe SwfAsset do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should contain id, depth, zone ID, and local_url as JSON" do
|
it "should contain id, depth, zone ID, and local_url as JSON" do
|
||||||
zone = Factory.create :zone, :depth => 12
|
|
||||||
asset = Factory.create :swf_asset,
|
asset = Factory.create :swf_asset,
|
||||||
:id => 123,
|
:id => 123,
|
||||||
:zone_id => 1,
|
:zone_id => 4,
|
||||||
:body_id => 234,
|
:body_id => 234,
|
||||||
:url => 'http://images.neopets.com/cp/items/swf/000/000/012/12211_9969430b3a.swf'
|
:url => 'http://images.neopets.com/cp/items/swf/000/000/012/12211_9969430b3a.swf'
|
||||||
asset.as_json.should == {
|
asset.as_json.should == {
|
||||||
:id => 123,
|
:id => 123,
|
||||||
:depth => 12,
|
:depth => 6,
|
||||||
:body_id => 234,
|
:body_id => 234,
|
||||||
:local_url => 'http://impress.openneo.net/assets/swf/outfit/items/000/000/012/12211_9969430b3a.swf',
|
:local_url => 'http://impress.openneo.net/assets/swf/outfit/items/000/000/012/12211_9969430b3a.swf',
|
||||||
:zone_id => 1
|
:zone_id => 4
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
8
spec/models/zone_spec.rb
Normal file
8
spec/models/zone_spec.rb
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Zone do
|
||||||
|
specify "should find by id, report label" do
|
||||||
|
Zone.find(1).label.should == 'Music'
|
||||||
|
Zone.find(3).label.should == 'Background'
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,6 +0,0 @@
|
||||||
Factory.define :zone do |z|
|
|
||||||
z.label 'foo'
|
|
||||||
z.depth 1
|
|
||||||
z.add_attribute :type, 'FOO'
|
|
||||||
z.type_id 1
|
|
||||||
end
|
|
Loading…
Reference in a new issue