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