87 lines
2.7 KiB
Ruby
87 lines
2.7 KiB
Ruby
# module Locomotive
|
|
# module Import
|
|
# class AssetCollections < Base
|
|
#
|
|
# def process
|
|
# asset_collections = database['site']['asset_collections']
|
|
#
|
|
# return if asset_collections.nil?
|
|
#
|
|
# asset_collections.each do |name, attributes|
|
|
# self.log "slug = #{attributes['slug']}"
|
|
#
|
|
# asset_collection = site.asset_collections.where(:slug => attributes['slug']).first
|
|
#
|
|
# asset_collection ||= self.build_asset_collection(attributes.merge(:name => name))
|
|
#
|
|
# self.add_or_update_fields(asset_collection, attributes['fields'])
|
|
#
|
|
# if options[:samples] && attributes['assets']
|
|
# self.insert_samples(asset_collection, attributes['assets'])
|
|
# end
|
|
#
|
|
# asset_collection.save!
|
|
#
|
|
# site.reload
|
|
# end
|
|
# end
|
|
#
|
|
# protected
|
|
#
|
|
# def build_asset_collection(data)
|
|
# attributes = { :internal => false }.merge(data)
|
|
#
|
|
# attributes.delete_if { |name, value| %w{fields assets}.include?(name) }
|
|
#
|
|
# site.asset_collections.build(attributes)
|
|
# end
|
|
#
|
|
# def add_or_update_fields(asset_collection, fields)
|
|
# return if fields.blank?
|
|
#
|
|
# fields.each_with_index do |data, position|
|
|
# name, data = data.keys.first, data.values.first
|
|
#
|
|
# attributes = { :_alias => name, :label => name.humanize, :kind => 'string', :position => position }.merge(data).symbolize_keys
|
|
#
|
|
# field = asset_collection.asset_custom_fields.detect { |f| f._alias == attributes[:_alias] }
|
|
#
|
|
# field ||= asset_collection.asset_custom_fields.build(attributes)
|
|
#
|
|
# field.send(:set_unique_name!) if field.new_record?
|
|
#
|
|
# field.attributes = attributes
|
|
# end
|
|
# end
|
|
#
|
|
# def insert_samples(asset_collection, assets)
|
|
# assets.each_with_index do |data, position|
|
|
# value, attributes = data.is_a?(Array) ? [data.first, data.last] : [data.keys.first, data.values.first]
|
|
#
|
|
# url = attributes.delete('url')
|
|
#
|
|
# # build with default attributes
|
|
# asset = asset_collection.assets.build(:name => value, :position => position, :source => self.open_sample_asset(url))
|
|
#
|
|
# attributes.each do |name, value|
|
|
# field = asset_collection.asset_custom_fields.detect { |f| f._alias == name }
|
|
#
|
|
# value = (case field.kind.downcase
|
|
# when 'file' then self.open_sample_asset(value)
|
|
# when 'boolean' then Boolean.set(value)
|
|
# else
|
|
# value
|
|
# end)
|
|
#
|
|
# asset.send("#{name}=", value)
|
|
# end
|
|
#
|
|
# asset.save
|
|
#
|
|
# self.log "insert asset '#{asset.name}'"
|
|
# end
|
|
# end
|
|
#
|
|
# end
|
|
# end
|
|
# end |