module StubRequests::Concerns::Property::ClassMethods
Module
ClassMethods
provides class methods for {Property}
@author Mikael Henriksson <mikael@zoolutions.se>
Public Instance Methods
define_property(name, type, default)
click to toggle source
@api private
# File lib/stub_requests/concerns/property.rb, line 67 def define_property(name, type, default) property_reader(name, default) property_predicate(name) property_writer(name, type) set_property_default(name, default) set_property_defined(name, type, default) end
normalize_type(type, **options)
click to toggle source
@api private
# File lib/stub_requests/concerns/property.rb, line 59 def normalize_type(type, **options) type_array = Array(type) return type_array unless (default = options[:default]) type_array.concat([default.class]).flatten.uniq end
property(name, type:, **options)
click to toggle source
Define property methods for the name
@param [Symbol] name the name of the property @param [Object] type the expected type of the property @param [Hash<Symbol>] options a hash with options @option options [Object] :default a default value for the property
@return [void]
# File lib/stub_requests/concerns/property.rb, line 48 def property(name, type:, **options) type = normalize_type(type, options) default = options[:default] Validator.call(name, type, default, properties) Docile.dsl_eval(self) do define_property(name, type, default) end end
property_predicate(name)
click to toggle source
@api private
# File lib/stub_requests/concerns/property.rb, line 87 def property_predicate(name) silence_redefinition_of_method("#{name}?") redefine_method("#{name}?") do !!public_send(name) # rubocop:disable Style/DoubleNegation end end
property_reader(name, default)
click to toggle source
@api private
# File lib/stub_requests/concerns/property.rb, line 77 def property_reader(name, default) invar = "@#{name}" silence_redefinition_of_method(name.to_s) redefine_method(name) do instance_variable_set(invar, default) unless instance_variable_defined?(invar) instance_variable_get(invar) end end
property_writer(name, type)
click to toggle source
@api private
# File lib/stub_requests/concerns/property.rb, line 95 def property_writer(name, type) redefine_method("#{name}=") do |obj| validate! name: name, value: obj, type: type instance_variable_set("@#{name}", obj) end end
set_property_default(name, default)
click to toggle source
# File lib/stub_requests/concerns/property.rb, line 102 def set_property_default(name, default) instance_variable_set("@#{name}", default) end
set_property_defined(name, type, default)
click to toggle source
@api private
# File lib/stub_requests/concerns/property.rb, line 107 def set_property_defined(name, type, default) self.properties ||= {} properties[name] = { type: type, default: default } end