Sha256: 65aae5333667389e94a408041e06c8aef3575c27f9a99910a3adcf5470726fc2

Contents?: true

Size: 969 Bytes

Versions: 4

Compression:

Stored size: 969 Bytes

Contents

module Flutterby
  class View
    attr_reader :node
    alias_method :page, :node

    def initialize(node)
      @node = node
    end

    def date_format(date, fmt)
      date.strftime(fmt)
    end

    def render(expr, *args)
      find(expr).render(*args)
    end

    def find(expr)
      node.find(expr) or raise "No node found for #{expr}"
    end

    class << self
      def for(file)
        # create a new view instance
        view = new(file)

        # walk the tree up to dynamically extend the view
        file.walk_down do |e|
          if view_node = e.sibling("_view.rb")
            case view_node.ext
            when "rb" then
              mod = Module.new
              mod.class_eval(view_node.source)
              view.extend mod
            else
              raise "Unknown view extension #{view_node.full_name}"
            end
          end
        end

        # return the finished view object
        view
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
flutterby-0.0.16 lib/flutterby/view.rb
flutterby-0.0.15 lib/flutterby/view.rb
flutterby-0.0.14 lib/flutterby/view.rb
flutterby-0.0.13 lib/flutterby/view.rb