Module: Attribute::Define

Extended by:
Define
Included in:
Define
Defined in:
lib/attribute/define.rb

Instance Method Summary collapse

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