Module: AttrExtras::Mixin

Defined in:
lib/attr_extras/explicit.rb

Overview

Separate module so that mixing in the methods doesn’t also mix in constants: thepugautomatic.com/2014/02/private-api/

Instance Method Summary collapse

Instance Method Details

#aattr_initialize(*names, &block) ⇒ Object Also known as: attr_accessor_initialize



56
57
58
59
# File 'lib/attr_extras/explicit.rb', line 56

def aattr_initialize(*names, &block)
  attr_initialize(*names, &block)
  attr_accessor(*Utils.flat_names(names))
end

#attr_id_query(*names) ⇒ Object



89
90
91
# File 'lib/attr_extras/explicit.rb', line 89

def attr_id_query(*names)
  AttrQuery.define_with_suffix(self, "_id", *names)
end

#attr_implement(*names) ⇒ Object



93
94
95
# File 'lib/attr_extras/explicit.rb', line 93

def attr_implement(*names)
  AttrImplement.new(self, names).apply
end

#attr_initialize(*names, &block) ⇒ Object



19
20
21
# File 'lib/attr_extras/explicit.rb', line 19

def attr_initialize(*names, &block)
  AttrInitialize.new(self, names, block).apply
end

#attr_private(*names) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/attr_extras/explicit.rb', line 23

def attr_private(*names)
  # Avoid warnings: https://github.com/barsoom/attr_extras/pull/31
  return unless names && names.any?

  attr_reader(*names)
  private(*names)
end

#attr_query(*names) ⇒ Object



85
86
87
# File 'lib/attr_extras/explicit.rb', line 85

def attr_query(*names)
  AttrQuery.define_with_suffix(self, "", *names)
end

#attr_value(*names) ⇒ Object



31
32
33
# File 'lib/attr_extras/explicit.rb', line 31

def attr_value(*names)
  AttrValue.new(self, *names).apply
end

#cattr_implement(*names) ⇒ Object



97
98
99
# File 'lib/attr_extras/explicit.rb', line 97

def cattr_implement(*names)
  AttrImplement.new(self.singleton_class, names).apply
end

#method_object(*names) ⇒ Object



81
82
83
# File 'lib/attr_extras/explicit.rb', line 81

def method_object(*names)
  static_facade :call, *names
end

#pattr_initialize(*names, &block) ⇒ Object Also known as: attr_private_initialize



35
36
37
38
# File 'lib/attr_extras/explicit.rb', line 35

def pattr_initialize(*names, &block)
  attr_initialize(*names, &block)
  attr_private(*Utils.flat_names(names))
end

#rattr_initialize(*names, &block) ⇒ Object Also known as: attr_reader_initialize



49
50
51
52
# File 'lib/attr_extras/explicit.rb', line 49

def rattr_initialize(*names, &block)
  attr_initialize(*names, &block)
  attr_reader(*Utils.flat_names(names))
end

#static_facade(method_name_or_names, *names) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/attr_extras/explicit.rb', line 63

def static_facade(method_name_or_names, *names)
  if names.any? { |name| name.is_a?(Array) }
    Array(method_name_or_names).each do |method_name|
      define_singleton_method(method_name) do |*args, **opts, &block|
        new(*args, **opts).public_send(method_name, &block)
      end
    end
  else
    Array(method_name_or_names).each do |method_name|
      define_singleton_method(method_name) do |*args, &block|
        new(*args).public_send(method_name, &block)
      end
    end
  end

  pattr_initialize(*names)
end

#vattr_initialize(*names, &block) ⇒ Object Also known as: attr_value_initialize



42
43
44
45
# File 'lib/attr_extras/explicit.rb', line 42

def vattr_initialize(*names, &block)
  attr_initialize(*names, &block)
  attr_value(*Utils.flat_names(names))
end