remove swf asset conflicts (same parent id, body id), fix glitch in items with existing swf assets
This commit is contained in:
parent
3eee2633bd
commit
3b92bea537
1 changed files with 33 additions and 3 deletions
|
@ -5,6 +5,8 @@ class Item < ActiveRecord::Base
|
||||||
:conditions => {:swf_asset_type => SwfAssetType}
|
:conditions => {:swf_asset_type => SwfAssetType}
|
||||||
has_many :swf_assets, :through => :parent_swf_asset_relationships
|
has_many :swf_assets, :through => :parent_swf_asset_relationships
|
||||||
|
|
||||||
|
attr_writer :current_body_id
|
||||||
|
|
||||||
NCRarities = [0, 500]
|
NCRarities = [0, 500]
|
||||||
PaintbrushSetDescription = 'This item is part of a deluxe paint brush set!'
|
PaintbrushSetDescription = 'This item is part of a deluxe paint brush set!'
|
||||||
|
|
||||||
|
@ -109,6 +111,27 @@ class Item < ActiveRecord::Base
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def before_save
|
||||||
|
if @parent_swf_asset_relationships_to_update && @current_body_id
|
||||||
|
new_swf_asset_ids = @parent_swf_asset_relationships_to_update.map(&:swf_asset_id)
|
||||||
|
rels = ParentSwfAssetRelationship.arel_table
|
||||||
|
swf_assets = SwfAsset.arel_table
|
||||||
|
ids_to_delete = self.parent_swf_asset_relationships.
|
||||||
|
select(:id).
|
||||||
|
joins(:swf_asset).
|
||||||
|
where(rels[:swf_asset_id].in(new_swf_asset_ids).not).
|
||||||
|
where(swf_assets[:body_id].in([@current_body_id, 0])).
|
||||||
|
map(&:id)
|
||||||
|
unless ids_to_delete.empty?
|
||||||
|
ParentSwfAssetRelationship.
|
||||||
|
where(rels[:parent_id].eq(self.id)).
|
||||||
|
where(rels[:swf_asset_type].eq(SwfAssetType)).
|
||||||
|
where(rels[:swf_asset_id].in(ids_to_delete)).
|
||||||
|
delete_all
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def origin_registry_info=(info)
|
def origin_registry_info=(info)
|
||||||
# bear in mind that numbers from registries are floats
|
# bear in mind that numbers from registries are floats
|
||||||
self.species_support_ids = info[:species_support].map(&:to_i)
|
self.species_support_ids = info[:species_support].map(&:to_i)
|
||||||
|
@ -121,6 +144,11 @@ class Item < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def parent_swf_asset_relationships_to_update=(rels)
|
||||||
|
self.parent_swf_asset_relationships += rels
|
||||||
|
@parent_swf_asset_relationships_to_update = rels
|
||||||
|
end
|
||||||
|
|
||||||
def self.collection_from_pet_type_and_registries(pet_type, info_registry, asset_registry)
|
def self.collection_from_pet_type_and_registries(pet_type, info_registry, asset_registry)
|
||||||
# bear in mind that registries are arrays with many nil elements,
|
# bear in mind that registries are arrays with many nil elements,
|
||||||
# due to how the parser works
|
# due to how the parser works
|
||||||
|
@ -146,7 +174,8 @@ class Item < ActiveRecord::Base
|
||||||
asset_registry.each_with_index do |asset_data, index|
|
asset_registry.each_with_index do |asset_data, index|
|
||||||
swf_asset_ids << index if asset_data
|
swf_asset_ids << index if asset_data
|
||||||
end
|
end
|
||||||
existing_swf_assets = SwfAsset.find_all_by_id(swf_asset_ids)
|
existing_swf_assets = SwfAsset.find_all_by_id swf_asset_ids,
|
||||||
|
:conditions => {:type => SwfAssetType}
|
||||||
existing_swf_assets_by_id = {}
|
existing_swf_assets_by_id = {}
|
||||||
existing_swf_assets.each do |swf_asset|
|
existing_swf_assets.each do |swf_asset|
|
||||||
existing_swf_assets_by_id[swf_asset.id] = swf_asset
|
existing_swf_assets_by_id[swf_asset.id] = swf_asset
|
||||||
|
@ -163,8 +192,9 @@ class Item < ActiveRecord::Base
|
||||||
items[item_id] = item
|
items[item_id] = item
|
||||||
end
|
end
|
||||||
item.origin_registry_info = info_registry[item.id]
|
item.origin_registry_info = info_registry[item.id]
|
||||||
|
item.current_body_id = pet_type.body_id
|
||||||
swf_asset_id = asset_data[:asset_id].to_i
|
swf_asset_id = asset_data[:asset_id].to_i
|
||||||
swf_asset = existing_swf_assets[swf_asset_id]
|
swf_asset = existing_swf_assets_by_id[swf_asset_id]
|
||||||
unless swf_asset
|
unless swf_asset
|
||||||
swf_asset = SwfAsset.new
|
swf_asset = SwfAsset.new
|
||||||
swf_asset.id = swf_asset_id
|
swf_asset.id = swf_asset_id
|
||||||
|
@ -184,7 +214,7 @@ class Item < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
relationships_by_item_id.each do |item_id, relationships|
|
relationships_by_item_id.each do |item_id, relationships|
|
||||||
items[item_id].parent_swf_asset_relationships = relationships
|
items[item_id].parent_swf_asset_relationships_to_update = relationships
|
||||||
end
|
end
|
||||||
items.values
|
items.values
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue