Module: Attribute::Define
Instance Method Summary collapse
- #call(target_class, attr_name, visibility = nil, check: nil, &initialize_value) ⇒ Object
- #define_reader(target_class, attr_name, visibility, check, &initialize_value) ⇒ Object
- #define_writer(target_class, attr_name, visibility, check, &initialize_value) ⇒ Object
Instance Method Details
#call(target_class, attr_name, visibility = nil, check: nil, &initialize_value) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/attribute/define.rb', line 5 def call(target_class, attr_name, visibility=nil, check: nil, &initialize_value) visibility ||= :reader if [:reader, :accessor].include? visibility define_reader(target_class, attr_name, visibility, check, &initialize_value) end if [:writer, :accessor].include? visibility define_writer(target_class, attr_name, visibility, check, &initialize_value) end attr_name end |
#define_reader(target_class, attr_name, visibility, check, &initialize_value) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/attribute/define.rb', line 19 def define_reader(target_class, attr_name, visibility, check, &initialize_value) attr_name = :"#{attr_name}" unless attr_name.is_a? Symbol var_name = "@#{attr_name}" target_class.send :define_method, attr_name do defined = instance_variable_defined?(var_name) val = nil if defined val = instance_variable_get(var_name) else unless initialize_value.nil? val = initialize_value.() end instance_variable_set var_name, val end if check check.(val) end val end end |
#define_writer(target_class, attr_name, visibility, check, &initialize_value) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/attribute/define.rb', line 44 def define_writer(target_class, attr_name, visibility, check, &initialize_value) attr_name = :"#{attr_name}" unless attr_name.is_a? Symbol writer_name = :"#{attr_name}=" var_name = "@#{attr_name}" target_class.send :define_method, writer_name do |val| if check check.(val) end instance_variable_set var_name, val end end |