zone model in order to be able to include depth for swf_asset JSON

This commit is contained in:
Emi Matchu 2010-05-20 19:04:56 -04:00
parent 8baa09d633
commit a5866a19e3
6 changed files with 68 additions and 0 deletions

View file

@ -1,3 +1,23 @@
class SwfAsset < ActiveRecord::Base
set_inheritance_column 'inheritance_type'
belongs_to :zone
delegate :depth, :to => :zone
def local_url
uri = URI.parse(url)
uri.host = RemoteImpressHost
pieces = uri.path.split('/')
uri.path = "/assets/swf/outfit/#{pieces[2]}/#{pieces[4..7].join('/')}"
uri.to_s
end
def as_json
{
:id => id,
:depth => depth,
:local_url => local_url
}
end
end

3
app/models/zone.rb Normal file
View file

@ -0,0 +1,3 @@
class Zone < ActiveRecord::Base
set_inheritance_column 'inheritance_type'
end

View file

@ -27,3 +27,5 @@ OpenneoImpressItems::Application.configure do
# like if you have constraints or database-specific column types
# config.active_record.schema_format = :sql
end
RemoteImpressHost = 'impress.openneo.net'

View file

@ -0,0 +1,35 @@
require 'spec_helper'
describe SwfAsset do
it "belongs to a zone" do
zone = Factory.create :zone, :label => 'foo'
asset = Factory.create :swf_asset, :zone_id => 1
asset.zone_id.should == 1
asset.zone.id.should == 1
asset.zone.label.should == 'foo'
end
it "delegates depth to zone" do
zone = Factory.create :zone, :depth => 12
asset = Factory.create :swf_asset, :zone_id => 1
asset.depth.should == 12
end
it "converts neopets URL to impress URL" do
asset = Factory.create :swf_asset, :url => 'http://images.neopets.com/cp/items/swf/000/000/012/12211_9969430b3a.swf'
asset.local_url.should == 'http://impress.openneo.net/assets/swf/outfit/items/000/000/012/12211_9969430b3a.swf'
end
it "should contain id, depth, and local_url as JSON" do
zone = Factory.create :zone, :depth => 12
asset = Factory.create :swf_asset,
:id => 123,
:zone_id => 1,
:url => 'http://images.neopets.com/cp/items/swf/000/000/012/12211_9969430b3a.swf'
asset.as_json.should == {
:id => 123,
:depth => 12,
:local_url => 'http://impress.openneo.net/assets/swf/outfit/items/000/000/012/12211_9969430b3a.swf'
}
end
end

View file

@ -3,4 +3,6 @@ Factory.define :swf_asset do |s|
s.zone_id 0
s.zones_restrict ''
s.body_id 0
s.add_attribute :type, 'object'
s.sequence(:id) { |n| n }
end

6
test/factories/zone.rb Normal file
View file

@ -0,0 +1,6 @@
Factory.define :zone do |z|
z.label 'foo'
z.depth 1
z.add_attribute :type, 'FOO'
z.type_id 1
end