module ExtendIt::Dsl::DslMethods
Public Instance Methods
dsl_accessor(*names, default: nil, variable: nil, &setter)
click to toggle source
# File lib/extend_it/dsl.rb, line 77 def dsl_accessor(*names, default: nil, variable: nil, &setter) names = names.ensure_array(:flatten, :compact, :uniq) variable = nil if names.size != 1 variable = variable.ensure_symbol(name_of: :local) names.each do |name| name = name.ensure_symbol(name_of: :getter) || next setter_name = name.ensure_symbol(name_of: :setter) || next define_method setter_name do |*args| obj = if setter.nil? args.first || default else dsl_receiver.instance_exec(*args, &setter) end dsl_set(variable || name, obj) end define_method name do |*args, &block| obj = send(setter_name, *args) obj.dsl_eval(&block) if !block.nil? && obj.is_a?(Dsl) obj end end end
dsl_block(*names, variable: nil)
click to toggle source
# File lib/extend_it/dsl.rb, line 122 def dsl_block(*names, variable: nil) names = names.ensure_array(:flatten, :compact, :uniq) variable = nil if names.size != 1 variable = variable.ensure_symbol(name_of: :local) names.each do |name| name = name.ensure_symbol(name_of: :getter) || next define_method name do |&block| return if block.nil? dsl_set(variable || name, block) end end end
dsl_boolean(*names, default: true, variable: nil)
click to toggle source
# File lib/extend_it/dsl.rb, line 103 def dsl_boolean(*names, default: true, variable: nil) default = default == true names = names.ensure_array(:flatten, :compact, :uniq) variable = nil if names.size != 1 variable = variable.ensure_symbol(name_of: :local) names.each do |name| name = name.ensure_symbol(name_of: :getter) || next setter_name = name.ensure_symbol(name_of: :setter) || next define_method name do |value = nil| send(setter_name, value.nil? ? default : value) end define_method setter_name do |value = default| dsl_set(variable || name, value == true) end end end
dsl_hash_of_objects(hash_name, variable: nil, single: nil, &creator)
click to toggle source
# File lib/extend_it/dsl.rb, line 150 def dsl_hash_of_objects(hash_name, variable: nil, single: nil, &creator) unless block_given? fail( ArgumentError, '`dsl_hash_of_objects` requires creator block to be present' ) end hash_name = hash_name.ensure_symbol!(name_of: :local) variable = variable.ensure_symbol(name_of: :local) unless single.nil? single = single.ensure_symbol!(name_of: :local) define_method single do |name, **opts, &block| name = name.ensure_symbol unless name.nil? hash = dsl_get(variable || hash_name, {}) obj = hash[name] ||= dsl_receiver.instance_exec(name, **opts, &creator) obj.dsl_eval(&block) if !block.nil? && obj.is_a?(Dsl) end end end define_method hash_name do |*names, **opts, &block| hash = dsl_get(variable || hash_name, {}) names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq) Dsl.expand_asterisk(names, hash.keys).each do |name| obj = hash[name] ||= dsl_receiver.instance_exec(name, **opts, &creator) obj.dsl_eval(&block) if !block.nil? && obj.is_a?(Dsl) end end dsl_use_hash(hash_name, variable: variable) end
dsl_use_hash(hash_name, variable: nil)
click to toggle source
# File lib/extend_it/dsl.rb, line 135 def dsl_use_hash(hash_name, variable: nil) hash_name = hash_name.ensure_symbol!(name_of: :local) variable = variable.ensure_symbol(name_of: :local) define_method "use_#{hash_name}" do |*names, except: nil| hash = dsl_get(variable || hash_name, {}) keys = hash.keys names = names.ensure_array(:flatten, :ensure_symbol, :compact, :uniq) names = Dsl.expand_asterisk(names, keys) names = names.empty? ? keys : names & keys names -= except.ensure_array(:flatten, :ensure_symbol, :compact, make: true) hash.replace(Hash[names.map { |n| [n, hash[n]] }]) end end