Sha256: f0e3b4fb1525bc5e98c0df4a4337d64198001f57eb3b6c7cde150d7fed00761f

Contents?: true

Size: 876 Bytes

Versions: 11

Compression:

Stored size: 876 Bytes

Contents

module Refinery
  class BasePresenter

    DEFAULT_FIELDS = {
      :title              => proc { |p| (p.model.class.name.titleize if p.model.present?) },
      :path               => proc { |p| p.title },
      :browser_title      => nil,
      :meta_description   => nil,
      :meta_keywords      => nil
    }

    attr_reader :model

    def initialize(obj)
      @model = obj
    end

    def method_missing(method, *args)
      if @model.respond_to? method
        @model.send method
      elsif DEFAULT_FIELDS.has_key? method
        (value = DEFAULT_FIELDS[method]).is_a?(Proc) ? value.call(self) : value
      else
        raise NoMethodError.new("#{self.class.name} doesn't know #{method}. Define or delegate it.", method)
      end
    end

    def respond_to?(method)
      super || @model.respond_to?(method) || DEFAULT_FIELDS.has_key?(method)
    end

  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
refinerycms-core-2.0.10 lib/refinery/base_presenter.rb
refinerycms-core-2.0.9 lib/refinery/base_presenter.rb
refinerycms-core-2.0.8 lib/refinery/base_presenter.rb
refinerycms-core-2.0.7 lib/refinery/base_presenter.rb
refinerycms-core-2.0.6 lib/refinery/base_presenter.rb
refinerycms-core-2.0.5 lib/refinery/base_presenter.rb
refinerycms-core-2.0.4 lib/refinery/base_presenter.rb
refinerycms-core-2.0.3 lib/refinery/base_presenter.rb
refinerycms-core-2.0.2 lib/refinery/base_presenter.rb
refinerycms-core-2.0.1 lib/refinery/base_presenter.rb
refinerycms-core-2.0.0 lib/refinery/base_presenter.rb