Sha256: d301d78be757384234151956c0beb8d78d2b4be135cd1153488f1409ba62022d

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

require 'seory/page_contents'
require 'seory/runtime'

module Seory
  module Dsl
    extend self

    def describe(&block)
      [].tap do |repositories|
        Descriptor.new(repositories).instance_exec(&block)
      end
    end

    def lookup(controller)
      page_contents = repositories.detect {|page| page.match?(controller) }
      Seory::Runtime.new(page_contents, controller)
    end

    class PageContentsBuilder
      def initialize(*conditions)
        @page_contents = PageContents.new(*conditions)
      end

      def build!(&block)
        instance_exec(&block)

        @page_contents
      end

      Seory::Runtime::CONTENTS.each do |name|
        define_method(name) do |val = nil, &block|
          @page_contents.define(name, val, &block)
        end
      end
    end

    class Descriptor
      def initialize(repositories)
        @repositories = repositories
      end

      def match(*conditions, &def_builder)
        @repositories << PageContentsBuilder.new(*conditions).build!(&def_builder)
      end

      def default(&def_builder)
        match(:default, &def_builder)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
seory-0.0.1 lib/seory/dsl.rb