Sha256: 0bbc75b22ce7aae0bb940327a748a18c1032a57fe597514c8b4536ccf43d375f
Contents?: true
Size: 1.37 KB
Versions: 2
Compression:
Stored size: 1.37 KB
Contents
module Consul module Power def self.included(base) base.extend ActiveSupport::Memoizable base.extend ClassMethods end def include?(name, *args) args = args.dup record = args.shift power_value = send(name) if record.nil? || boolean_or_nil?(power_value) !!power_value else power_ids_name = self.class.power_ids_name(name) send(power_ids_name, *args).include?(record.id) end end def include!(*args) include?(*args) or raise Consul::Powerless.new("No power to #{args.inspect}") end private def boolean_or_nil?(value) [TrueClass, FalseClass, NilClass].include?(value.class) end module ClassMethods def power(name, &block) define_method(name, &block) define_method("#{name.to_s}?") { |*args| include?(name, *args) } define_method("#{name.to_s}!") { |*args| include!(name, *args) } define_method("#{name.to_s.singularize}?") { |*args| include?(name, *args) } define_method("#{name.to_s.singularize}!") { |*args| include!(name, *args) } ids_method = power_ids_name(name) define_method(ids_method) { |*args| send(name, *args).scoped(:select => 'id').collect(&:id) } memoize ids_method name end def power_ids_name(name) "#{name.to_s.singularize}_ids" end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
consul-0.1.1 | lib/consul/power.rb |
consul-0.1.0 | lib/consul/power.rb |