Class: Class

Inherits:
Object
  • Object
show all
Defined in:
lib/coerced_attr_writer/core_ext/class.rb

Instance Method Summary collapse

Instance Method Details

#coerced_attr_writer(*attributes) ⇒ Object Also known as: attr_writer_with_coercion, coercible_attr_writer, coercable_attr_writer, attr_writer_coerced, coerced_setters, coerce_setters



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/coerced_attr_writer/core_ext/class.rb', line 2

def coerced_attr_writer(*attributes)
  setter_methods = _coerced_attr_writer_setters

  attributes.each do |attribute|
    java_setter_name = _coerced_setter_name(attribute)
    camel_writer_name = _coerced_camel_writer_name(attribute)
    coercion_type = "#{setter_methods[java_setter_name]}"      

    class_eval "      def \#{attribute}=(val)\n        unless val.is_a?(\#{coercion_type})\n          val = val.to_java(\#{coercion_type})\n        end\n\n        set_\#{attribute}(val)\n      end\n    RUBY\n\n    # Do not want to overwrite the first with the second\n    # if this is a simple setter\n    unless \"\#{attribute}\" == camel_writer_name\n      class_eval <<-RUBY, __FILE__, __LINE__ + 1\n        def \#{camel_writer_name}=(val)\n          unless val.is_a?(\#{coercion_type})\n            val = val.to_java(\#{coercion_type})\n          end\n\n          set_\#{attribute}(val)\n        end\n      RUBY\n    end\n  end\nend\n", __FILE__, __LINE__ + 1