Module: OptStruct
- Defined in:
- lib/opt_struct.rb,
lib/opt_struct/version.rb,
lib/opt_struct/class_methods.rb,
lib/opt_struct/module_methods.rb,
lib/opt_struct/instance_methods.rb
Defined Under Namespace
Modules: ClassMethods, InstanceMethods, ModuleMethods
Constant Summary
collapse
- RESERVED_WORDS =
[
:class, :options,
*OptStruct::InstanceMethods.instance_methods,
*OptStruct::InstanceMethods.protected_instance_methods,
*OptStruct::InstanceMethods.private_instance_methods,
].freeze
- DEFAULT =
Default value object allows us to distinguish unspecified defaults from nil
Object.new
- VERSION =
"1.5.0"
Class Method Summary
collapse
Class Method Details
._inject_struct(target, source, args = [], **defaults, &callback) ⇒ Object
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/opt_struct.rb', line 17
def self._inject_struct(target, source, args = [], **defaults, &callback)
structs = Array(source.instance_variable_get(:@_opt_structs)).dup
if args.any? || defaults.any? || block_given?
structs << [args, defaults, callback]
end
target.instance_variable_set(:@_opt_structs, structs)
if target.is_a?(Class)
target.instance_exec do
extend ClassMethods
attr_reader :options
include InstanceMethods
end
structs.each do |s_args, s_defaults, s_callback|
target.expect_arguments *s_args if s_args.any?
target.options **s_defaults if s_defaults.any?
target.class_exec(&s_callback) if s_callback
end
else
target.singleton_class.prepend ModuleMethods
end
target
end
|
.build(*args, **defaults, &callback) ⇒ Object
54
55
56
|
# File 'lib/opt_struct.rb', line 54
def self.build(*args, **defaults, &callback)
_inject_struct(Module.new, self, args.map(&:to_sym), **defaults, &callback)
end
|
.included(klass) ⇒ Object
40
41
42
43
|
# File 'lib/opt_struct.rb', line 40
def self.included(klass)
_inject_struct(klass, self)
super(klass)
end
|
.new(*args, **defaults, &callback) ⇒ Object
50
51
52
|
# File 'lib/opt_struct.rb', line 50
def self.new(*args, **defaults, &callback)
_inject_struct(Class.new, self, args.map(&:to_sym), **defaults, &callback)
end
|
.prepended(klass) ⇒ Object
45
46
47
48
|
# File 'lib/opt_struct.rb', line 45
def self.prepended(klass)
_inject_struct(klass, self)
super(klass)
end
|