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.2.0"

Instance Method Summary collapse

Instance Method Details

#initialize_with_args(*attributes) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/smart_init/main.rb', line 38

def initialize_with_args *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

#initialize_with_hash(*attributes) ⇒ Object Also known as: initialize_with



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/smart_init/main.rb', line 8

def initialize_with_hash *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|
    unless parameters.first.is_a?(Hash)
      raise ArgumentError, "invalid input, expected hash of attributes"
    end

    required_attrs.each do |required_attr|
      unless parameters.first.has_key?(required_attr)
        raise ArgumentError, "missing required attribute #{required_attr}"
      end
    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).compact)
  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