Module: SmartInit

Included in:
Base
Defined in:
lib/smart_init.rb,
lib/smart_init/main.rb,
lib/smart_init/version.rb

Defined Under Namespace

Classes: Base

Constant Summary collapse

VERSION =
"3.0.0"

Instance Method Summary collapse

Instance Method Details

#initialize_with(*attributes) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/smart_init/main.rb', line 8

def initialize_with *attributes
  required_attrs = attributes.select { |attr| attr.is_a?(Symbol) }
  default_value_attrs = attributes.select { |attr| attr.is_a?(Hash) }.first || {}

  define_method :initialize do |*parameters|
    if required_attrs.count > parameters.first.count
      raise ArgumentError, "wrong number of arguments (given #{parameters.count}, expected at least #{required_attrs.count})"
    end

    (required_attrs + default_value_attrs.keys).each do |attribute|
      value = parameters.first[attribute] || default_value_attrs[attribute]
      instance_variable_set("@#{attribute}", value)
    end
  end

  instance_eval do
    private

    attr_reader *(required_attrs + default_value_attrs.keys)
  end
end

#initialize_with_v1(*attributes) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/smart_init/main.rb', line 30

def initialize_with_v1 *attributes
  define_method :initialize do |*parameters|
    if attributes.count != parameters.count
      raise ArgumentError, "wrong number of arguments (given #{parameters.count}, expected #{attributes.count})"
    end

    attributes.zip(parameters).each do |pair|
      name = pair[0]
      value = pair[1]
      instance_variable_set("@#{name}", value)
    end
  end

  instance_eval do
    private

    attr_reader *attributes
  end
end

#is_callableObject



2
3
4
5
6
# File 'lib/smart_init/main.rb', line 2

def is_callable
  define_singleton_method :call do |*parameters|
    new(*parameters).call
  end
end