module ExtendIt::Dsl::ClassMethods
Public Class Methods
new(receiver)
click to toggle source
# File lib/extend_it/dsl.rb, line 36 def initialize(receiver) if receiver.nil? || receiver.frozen? fail(ArgumentError, 'DSL receiver should be non-frozen object') end @dsl_receiver = receiver end
Public Instance Methods
dsl(&block)
click to toggle source
# File lib/extend_it/dsl.rb, line 29 def dsl(&block) if @dsl.nil? parent = superclass.respond_to?(:dsl) ? [superclass.dsl] : [] end @dsl ||= Class.new(*parent) do extend DslMethods def initialize(receiver) if receiver.nil? || receiver.frozen? fail(ArgumentError, 'DSL receiver should be non-frozen object') end @dsl_receiver = receiver end private attr_reader :dsl_receiver def dsl_get(var_name, default = nil) var_name = var_name.ensure_symbol!(name_of: :instance_variable) if default.nil? && !block_given? fail(ArgumentError, '`default` or block should be specified') end if dsl_receiver.instance_variable_defined?(var_name) dsl_receiver.instance_variable_get(var_name) else default = yield if block_given? dsl_receiver.instance_variable_set(var_name, default) end end def dsl_set(var_name, value) var_name = var_name.ensure_symbol!(name_of: :instance_variable) setter_name = var_name.ensure_symbol!(name_of: :setter) if dsl_receiver.respond_to?(setter_name) dsl_receiver.send(setter_name, value) else dsl_receiver.instance_variable_set(var_name, value) end end end @dsl.class_eval(&block) if block_given? @dsl end
dsl_get(var_name, default = nil) { || ... }
click to toggle source
# File lib/extend_it/dsl.rb, line 47 def dsl_get(var_name, default = nil) var_name = var_name.ensure_symbol!(name_of: :instance_variable) if default.nil? && !block_given? fail(ArgumentError, '`default` or block should be specified') end if dsl_receiver.instance_variable_defined?(var_name) dsl_receiver.instance_variable_get(var_name) else default = yield if block_given? dsl_receiver.instance_variable_set(var_name, default) end end
dsl_set(var_name, value)
click to toggle source
# File lib/extend_it/dsl.rb, line 60 def dsl_set(var_name, value) var_name = var_name.ensure_symbol!(name_of: :instance_variable) setter_name = var_name.ensure_symbol!(name_of: :setter) if dsl_receiver.respond_to?(setter_name) dsl_receiver.send(setter_name, value) else dsl_receiver.instance_variable_set(var_name, value) end end