class Indexers::Dsl::Api
Public Class Methods
new(args=[], parent={}, &block)
click to toggle source
# File lib/indexers/dsl/api.rb, line 5 def initialize(args=[], parent={}, &block) @parent = parent instance_exec *args, &block end
Public Instance Methods
method_missing(name, *args, &block)
click to toggle source
# File lib/indexers/dsl/api.rb, line 10 def method_missing(name, *args, &block) options = args.extract_options! name = name.to_sym if block_given? add_block name, args, options, &block elsif args.size > 0 add_argument name, args, options elsif options.any? add_options name, options else add_empty name end end
to_h()
click to toggle source
# File lib/indexers/dsl/api.rb, line 24 def to_h @parent end
Private Instance Methods
add_argument(name, args, options)
click to toggle source
# File lib/indexers/dsl/api.rb, line 56 def add_argument(name, args, options) case @parent when Array @parent << { name => args.first } when Hash @parent[name] = args.first end end
add_block(name, args, options, &block)
click to toggle source
# File lib/indexers/dsl/api.rb, line 30 def add_block(name, args, options, &block) case args.first when String,Symbol child = {} node = { args.first.to_sym => child } when Enumerable,ActiveRecord::Relation child = node = [] else child = node = {} end case @parent when Array @parent << options.merge(name => node) when Hash @parent[name] = node end case args.first when Enumerable,ActiveRecord::Relation args.first.each do |arg| continue [arg], child, &block end else continue [], child, &block end end
add_empty(name)
click to toggle source
# File lib/indexers/dsl/api.rb, line 79 def add_empty(name) case @parent when Array @parent << { name => {} } when Hash @parent[name] = {} end end
add_options(name, options)
click to toggle source
# File lib/indexers/dsl/api.rb, line 65 def add_options(name, options) options.symbolize_keys! case @parent when Array @parent << { name => options } when Hash if @parent.has_key?(name) @parent[name].merge! options else @parent[name] = options end end end
continue(args, parent, &block)
click to toggle source
# File lib/indexers/dsl/api.rb, line 88 def continue(args, parent, &block) self.class.new args, parent, &block end