Sha256: b9f34d813ce7c4c04ec33e68efcd9e3b7d46d1c3b22fad1a04008e60c7375275

Contents?: true

Size: 1.14 KB

Versions: 2

Compression:

Stored size: 1.14 KB

Contents

require 'seory'
require 'seory/condition'

module Seory
  class EmptyCondition < ::Seory::Error; end
  class AccessorNameTaken < ::Seory::Error; end

  class Page

    attr_reader :assign_name_accessors

    def initialize(*conditions, &block)
      @conditions  =
        if block_given?
          [Condition::Block.new(block)]
        elsif conditions.first == :default
          :default
        else
          conditions.map {|condition| Seory::Condition[condition] }
        end

      raise EmptyCondition if @conditions.blank?

      @contents, @assign_name_accessors = {}, []
    end

    def define(name, value = nil, &block)
      @contents[name] = block_given? ? block : value
    end

    def assign_reader(*assign_names)
      if (taken = Seory::CONTENTS & assign_names).size > 0
        raise AccessorNameTaken, taken.join(', ')
      end

      assign_name_accessors.concat(assign_names)
    end

    def content_for(name)
      @contents[name]
    end

    def match?(controller)
      return true if default?

      @conditions.any? {|condition| condition.match?(controller) }
    end

    def default?
      @conditions == :default
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
seory-0.2.0 lib/seory/page.rb
seory-0.1.0 lib/seory/page.rb