pakyow-presenter/lib/presenter/view_composer.rb in pakyow-presenter-0.8.0 vs pakyow-presenter/lib/presenter/view_composer.rb in pakyow-presenter-0.9.0

- old
+ new

@@ -10,11 +10,10 @@ extend Forwardable def_delegators :template, :title, :title= def_delegators :parts, :scope, :prop - attr_accessor :context attr_reader :store, :path, :page, :partials def initialize(store, path = nil, opts = {}, &block) @store = store @path = path @@ -33,60 +32,38 @@ @partials = includes(opts.fetch(:includes)) rescue @partials = store.partials(path) unless path.nil? end - @partials.each do |name, partial| - partial.composer = self - end - instance_exec(&block) if block_given? end def initialize_copy(original) super %w[store path page template partials view].each do |ivar| value = original.instance_variable_get("@#{ivar}") + next if value.nil? if value.is_a?(Hash) dup_value = {} value.each_pair { |key, value| dup_value[key] = value.dup } else dup_value = value.dup end self.instance_variable_set("@#{ivar}", dup_value) end - - # update composer reference for partials - @partials.each do |name, partial| - partial.composer = self - end - - # update composer reference for page - @page.composer = self end - def precompose! - @view = build_view - clean! - end - def view - if dirty? - @view = build_view - clean! - end - - return @view + build_view end alias_method :composed, :view def template(template = nil) if template.nil? - @template.context = context return @template end self.template = template return self @@ -97,73 +74,51 @@ # get template by name template = @store.template(template) end @template = template - dirty! return self end def page=(page) unless page.is_a?(Page) # get page by name page = @store.page(page) end - page.composer = self @page = page - dirty! return self end def includes(partial_map) - dirty! - @partials.merge!(remap_partials(partial_map)) end def partials=(partial_map) - dirty! @partials.merge!(remap_partials(partial_map)) end def partial(name) partial = @partials[name] - partial.context = context return partial end def container(name) container = @page.container(name) - container.context = context return container end - def dirty? - @dirty - end - - def dirty! - @dirty = true - end - def parts parts = ViewCollection.new - parts.context = @context - parts.composer = self parts << @template @page.each_container do |name, container| parts << container end partials.each_pair do |name, partial| parts << partial end return parts end private - - def clean! - @dirty = false - end def build_view raise MissingTemplate, "No template provided to view composer" if @template.nil? raise MissingPage, "No page provided to view composer" if @page.nil?