Module: MiniObject::Injectable

Included in:
Box, Inline
Defined in:
lib/mini_object/injectable.rb

Constant Summary collapse

NULL =
Object.new

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.getsetter_definition_for(name, default_block) ⇒ Object



14
15
16
17
18
19
20
21
22
# File 'lib/mini_object/injectable.rb', line 14

def self.getsetter_definition_for name, default_block
  lambda do |value = NULL, &block|
  if value == NULL && block == nil
    get_attribute name, default_block
  else
    set_attribute name, value, block
  end
  end
end

.included(klass) ⇒ Object



10
11
12
# File 'lib/mini_object/injectable.rb', line 10

def self.included klass
  klass.extend self
end

.setter_definition_for(name) ⇒ Object



24
25
26
27
28
# File 'lib/mini_object/injectable.rb', line 24

def self.setter_definition_for name
  lambda do |value|
    set_attribute name, value
  end
end

Instance Method Details

#attr_injectable(name, &block) ⇒ Object



37
38
39
40
41
# File 'lib/mini_object/injectable.rb', line 37

def attr_injectable name, &block
  define_method name, &Injectable.getsetter_definition_for(name, block)
  define_method "#{name}=", &Injectable.setter_definition_for(name)
  instance_variable_set("@#{name}_default_proc", block) if block
end

#attributes=(attrs) ⇒ Object



43
44
45
46
47
# File 'lib/mini_object/injectable.rb', line 43

def attributes= attrs
  attrs.each do |k,v|
    public_send "#{k}=", v
  end
end

#cattr_injectable(name, &block) ⇒ Object



30
31
32
33
34
35
# File 'lib/mini_object/injectable.rb', line 30

def cattr_injectable name, &block
  define_singleton_method name, &Injectable.getsetter_definition_for(name, block)
  define_singleton_method "#{name}=", &Injectable.setter_definition_for(name)
  define_method name, -> { self.class.public_send name }
  send(name, &block) if block
end

#initialize(&block) ⇒ Object



5
6
7
8
# File 'lib/mini_object/injectable.rb', line 5

def initialize &block
  super
  block.call self if block
end