lib/alephant/publisher/models/writer.rb in alephant-publisher-0.1.0 vs lib/alephant/publisher/models/writer.rb in alephant-publisher-0.1.3

- old
+ new

@@ -1,15 +1,19 @@ -require 'crimp' +require 'alephant/cache' +require 'alephant/views' +require 'alephant/renderer' +require 'alephant/lookup' +require 'alephant/publisher/models/write_operation' +require 'alephant/publisher/models/render_mapper' + module Alephant module Publisher class Writer attr_reader :mapper, :cache def initialize(opts) - @renderer_id = opts[:renderer_id] - @cache = Cache.new( opts[:s3_bucket_id], opts[:s3_object_path] ) @@ -17,35 +21,54 @@ opts[:renderer_id], opts[:view_path] ) @lookup_table_name = opts[:lookup_table_name] + + @renderer_id = opts[:renderer_id] + + @write_opts = { + :sequencer_opts => { + :table_name => opts[:sequencer_table_name], + :id_path => opts[:sequence_id_path] + }, + :msg_vary_path => opts[:msg_vary_id_path], + :renderer_id => opts[:renderer_id] + } end - def write(data, version = nil) - lookup = Lookup.create(@lookup_table_name) + def write(msg) + write_op = WriteOperation.new(msg, @write_opts) - mapper.generate(data).each do |id, r| - store(id, r.render, data[:options], version, lookup) + write_op.batch_sequencer.sequence(msg) do |msg| + mapper.generate(write_op.data).each do |component_id, renderer| + write_component(write_op, component_id, renderer) + end end - - lookup.batch_process end private - def store(id, content, options, version, lookup) - location = location_for( - id, - Crimp.signature(options), - version - ) + def write_component(write_op, component_id, renderer) + location = location_for(component_id, write_op.options, write_op.version) + component_sequencer = write_op.sequencer_for(component_id, write_op.options) + component_sequencer.sequence(write_op.msg) do |msg| + store(component_id, renderer.render, write_op.options, location) + end + end + + def store(component_id, content, options, location) cache.put(location, content) - lookup.batch_write(options, location, id) + lookup_for(component_id).write(options, location) end - def location_for(component_id, options_hash, version = nil) + def lookup_for(id) + Lookup.create(@lookup_table_name, id) + end + + def location_for(component_id, options, version = nil) + options_hash = Crimp.signature(options) base_name = "#{@renderer_id}/#{component_id}/#{options_hash}" version ? "#{base_name}/#{version}" : base_name end end