Sha256: c80dc2d6f9a3205c89b799fc6ea966364f976fd0a25dfdb03d9955f065f99205

Contents?: true

Size: 1.68 KB

Versions: 2

Compression:

Stored size: 1.68 KB

Contents

module Formic
  class Base
    attr_reader   :page, :options
    attr_accessor :template, :content

    def self.default_template given_default_template
      @template = given_default_template
    end

    def self.template
      @template || self.superclass.template
    end

    def template
      return @template || self.class.template
    end

    def initialize page, *args, &block
      @page = page
      @options = {:class => []}

      _initialize *args, &block
      @options[:class].unshift( self.class.to_s.split('::').last.underscore )
      self.formics.unshift self
    end

    def to_s
      rendered = self.page.render :partial => self.template, :locals => {:element => self}
      self.formics.shift
      return rendered
    end

    def method_missing method, *args, &block
      _initialize *args, &block
      self.add_class(method.to_s)
      return self
    end

    def _initialize options={}, &block
      self.merge_options options
      @content = block if block_given?
      return self
    end

    def has_class? classname
      return self.options[:class].include? classname
    end

    def formics
      @page.instance_variable_set(:@formics, []) unless @page.instance_variable_get(:@formics)
      @page.instance_variable_get(:@formics)
    end

    def merge_options new_options
      classes = [@options[:class], new_options[:class]].reject {|element| element.nil?}
      classes = classes.flatten.join(' ').split(' ').uniq
      @options.merge!(new_options).merge!(:class => classes)
    end

    def add_class classname
      self.options[:class].push classname
    end

    def options
      @options[:class] = @options[:class].uniq
      return @options
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
formic-0.2.5 lib/formic/base.rb
formic-0.2.1 lib/formic/base.rb