lib/materialist/materializer.rb in materialist-2.0.0 vs lib/materialist/materializer.rb in materialist-2.1.0
- old
+ new
@@ -78,10 +78,15 @@
def persist_to(klass)
__materialist_options[:model_class] = klass
end
+ def source_key(key, &url_parser_block)
+ __materialist_options[:source_key] = key
+ __materialist_options[:url_parser] = url_parser_block
+ end
+
def after_upsert(*method_array)
__materialist_options[:after_upsert] = method_array
end
def after_destroy(*method_array)
@@ -118,11 +123,11 @@
raise
end
def destroy
return unless materialize_self?
- model_class.find_by(source_url: url).tap do |entity|
+ model_class.find_by(source_lookup(url)).tap do |entity|
entity.destroy!.tap do |entity|
send_messages(after_destroy, entity) unless after_destroy.nil?
end if entity
end
end
@@ -134,11 +139,11 @@
def materialize_self?
options.include? :model_class
end
def upsert_record
- model_class.find_or_initialize_by(source_url: url).tap do |entity|
+ model_class.find_or_initialize_by(source_lookup(url)).tap do |entity|
entity.update_attributes attributes
entity.save!
end
end
@@ -172,9 +177,21 @@
options[:after_destroy]
end
def model_class
options.fetch(:model_class).to_s.camelize.constantize
+ end
+
+ def source_key
+ options.fetch(:source_key, :source_url)
+ end
+
+ def url_parser
+ options[:url_parser] || ->url { url }
+ end
+
+ def source_lookup(url)
+ @_source_lookup ||= { source_key => url_parser.call(url) }
end
def attributes
build_attributes root_resource, mapping
end