Sha256: eb1123cb97bc8eb82d1a5202d8a8a11003ff31aeffe39c091a328720dadfcc5e

Contents?: true

Size: 1.94 KB

Versions: 7

Compression:

Stored size: 1.94 KB

Contents

# Quick 1-file dsl accessor
module Dslify
  module ClassMethods
    def default_options(hsh={})
      @default_dsl_options ||= hsh
    end
  end
  
  module InstanceMethods
    def default_dsl_options;self.class.default_options;end
    def dsl_options(hsh={})
      @dsl_options ||= default_dsl_options.merge(hsh)
    end
    alias :options :dsl_options
    def set_vars_from_options(h={}, contxt=self)
      h.each{|k,v| contxt.send k.to_sym, v }
    end
    def add_method(meth)
      # instance_eval <<-EOM        
      #   def #{meth}(n=nil)
      #     puts "called #{meth}(\#\{n\}) from \#\{self\}"
      #     n ? (__h[:#{meth}] = n) : __h[:#{meth}]
      #   end
      #   def #{meth}=(n)
      #     __h[:#{meth}] = n
      #   end
      # EOM
    end
    def method_missing(m,*a,&block)
      if block
        if a.empty?
          (a[0].class == self.class) ? a[0].instance_eval(&block) : super
        else
          inst = a[0]
          inst.instance_eval(&block)
          dsl_options[m] = inst
        end
      else
        if a.empty?          
          if dsl_options.has_key?(m)
            dsl_options[m]
          elsif m.to_s.index("?") == (m.to_s.length - 1)
            if options.has_key?(val = m.to_s.gsub(/\?/, '').to_sym)
              options[val] != false
            else
              false
            end
          else
            if self.class.superclass.respond_to?(:default_options) && self.class.superclass.default_options.has_key?(m)
              self.class.superclass.default_options[m]
            elsif ((respond_to? :parent) && (parent != self))
              parent.send m, *a, &block
            else
              super
            end
          end
        else
          clean_meth = m.to_s.gsub(/\=/,"").to_sym
          dsl_options[clean_meth] = (a.size > 1 ? a : a[0])
        end
      end
    end
  end
  
  def self.included(receiver)
    receiver.extend         ClassMethods
    receiver.send :include, InstanceMethods
  end
end

Version data entries

7 entries across 7 versions & 3 rubygems

Version Path
auser-dslify-0.0.5 lib/dslify/dslify.rb
auser-poolparty-1.1.1 vendor/gems/dslify/lib/dslify/dslify.rb
auser-poolparty-1.1.3 vendor/gems/dslify/lib/dslify/dslify.rb
auser-poolparty-1.1.4 vendor/gems/dslify/lib/dslify/dslify.rb
auser-poolparty-1.1.5 vendor/gems/dslify/lib/dslify/dslify.rb
fairchild-poolparty-1.1.3 vendor/gems/dslify/lib/dslify/dslify.rb
fairchild-poolparty-1.1.4 vendor/gems/dslify/lib/dslify/dslify.rb