Module: EnumArgs::ProxiedEnumerable

Defined in:
lib/enum_args/proxied_enumerable.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.on_enumerable_methods(on, &blk) ⇒ Object



39
40
41
42
43
# File 'lib/enum_args/proxied_enumerable.rb', line 39

def self.on_enumerable_methods(on, &blk)
  (Enumerable.instance_methods + [:each]).each do |m|
    on.send :define_method, m, &blk
  end
end

.prepended(base) ⇒ Object



33
34
35
36
37
# File 'lib/enum_args/proxied_enumerable.rb', line 33

def self.prepended(base)
  # including Enumerable is just so that obj#is_a? Enumerable returns true
  base.include Enumerable
  base.singleton_class.prepend ClassMethods
end

Instance Method Details

#initialize(*args, &blk) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/enum_args/proxied_enumerable.rb', line 49

def initialize(*args, &blk)
  klass = self.class
  name = klass.enum_args_accessor_method
  instance_variable_set(
    "@#{name}",
    EnumArgs::Proxy.new(self, klass.enum_args_method, *klass.enum_args_default_args,
                        using: klass.enum_args_default_using)
  )
  define_singleton_method(name) do
    instance_variable_get("@#{name}")
  end
  super
end