module DefDsl::So
def shallow_constants who
(who.constants - who.superclass.constants).map { |name| * = name.to_s.underscore, who.const_get(name) }
end
def define_dsl! who, constants=shallow_constants(who) # …
# constants = constants.nil?? shallow_constants(who) : constants_info(constants) return if who.included_modules.include? So who.send :include, So constants.each do |mini, const| #next if who.included_modules.include? So #who.send :include, So next if const.included_modules.include? So const.send :include, So #who.send :include, So define_dsl! const if const.is_a? Class meth = const.instance_eval { @dsl } || mini who.class_eval do define_method(meth) do |*a,&b| so [mini,meth],*a,&b end end # const.send :include, So if const.is_a? Module # or even class # who.send :include, So if who.is_a? Module # or even class if who.class == Module who.send :module_function, meth who.send :module_function, :so who.send :module_function, :so1 who.send :module_function, :so2 end end
end
Public Class Methods
included(target)
click to toggle source
# File lib/def_dsl.rb, line 215 def self.included target if target.class == Module # class.superclass for meta_module... target.send :module_function, :so target.send :module_function, :so1 target.send :module_function, :so2 end end
Public Instance Methods
feed_block(&block)
click to toggle source
# File lib/def_dsl.rb, line 181 def feed_block &block instance_eval &block end
so(klass_name=nil,*a,&b)
click to toggle source
# File lib/def_dsl.rb, line 185 def so klass_name=nil,*a,&b return @so if klass_name.nil? klass_name, label = if klass_name.is_a? Array klass_name.map &:to_sym else [klass_name.to_sym, klass_name.to_sym] end if self.class == Module klass = self.const_get(klass_name.to_s.camelize) else klass = self.class.const_get(klass_name.to_s.camelize) end obj = klass.new(*a) #,&b) # obj.instance_eval &b if b obj.feed_block &b if b (@so ||= {}).tap { |h| h[label] = h[label] ? [h[label], obj].flatten(1) : obj } end
so1(name)
click to toggle source
# File lib/def_dsl.rb, line 205 def so1(name) value = @so[name] value.is_a?(Array) ? value.last : value end
so2(name)
click to toggle source
# File lib/def_dsl.rb, line 209 def so2(name) return [] unless @so.key? name value = @so[name] value.is_a?(Array) ? value : [value] end