Module: Consul::Power::ClassMethods

Includes:
DynamicAccess::ClassMethods
Defined in:
lib/consul/power.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from DynamicAccess::ClassMethods

#for_model, #for_record, #include_model!, #include_model?, #include_record!, #include_record?

Instance Attribute Details

#currentObject

Returns the value of attribute current.



72
73
74
# File 'lib/consul/power.rb', line 72

def current
  @current
end

Instance Method Details

#context_count_name(name) ⇒ Object



64
65
66
# File 'lib/consul/power.rb', line 64

def context_count_name(name)
  "#{name}_context_count"
end

#define_power(name, &block) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/consul/power.rb', line 92

def define_power(name, &block)
  name = name.to_s
  if name.ends_with?('?')
    name_without_suffix = name.chop
    define_query_and_bang_methods(name_without_suffix, &block)
  else
    define_method(name, &block)
    define_query_and_bang_methods(name) { |*args| default_include_power?(name, *args) }
    if name.singularize != name
      define_query_and_bang_methods(name.singularize) { |*args| default_include_object?(name, *args) }
    end
    ids_method = power_ids_name(name)
    define_method(ids_method) { |*args| default_power_ids(name, *args) }
    memoize ids_method
  end
  name
end

#define_query_and_bang_methods(name, &query) ⇒ Object



85
86
87
88
89
90
# File 'lib/consul/power.rb', line 85

def define_query_and_bang_methods(name, &query)
  query_method = "#{name}?"
  bang_method = "#{name}!"
  define_method(query_method, &query)
  define_method(bang_method) { |*args| send(query_method, *args) or powerless!(name, *args) }
end

#power(*names, &block) ⇒ Object



58
59
60
61
62
# File 'lib/consul/power.rb', line 58

def power(*names, &block)
  names.each do |name|
    define_power(name, &block)
  end
end

#power_ids_name(name) ⇒ Object



68
69
70
# File 'lib/consul/power.rb', line 68

def power_ids_name(name)
  "#{name.to_s.singularize}_ids"
end

#with_power(inner_power, &block) ⇒ Object



74
75
76
77
78
79
80
81
82
83
# File 'lib/consul/power.rb', line 74

def with_power(inner_power, &block)
  unless inner_power.is_a?(self)
    inner_power = new(inner_power)
  end
  old_power = current
  self.current = inner_power
  block.call
ensure
  self.current = old_power
end