Class: CanPlay::ResourceOverride

Inherits:
AbstractResource show all
Defined in:
lib/can_play/resource.rb

Class Method Summary collapse

Methods inherited from AbstractResource

set_method, set_module_name

Methods included from ClassMethods

#add_resource, #collection, #group, #limit, #member

Class Method Details

.add_resource(group, verb, object, type, behavior, opts) ⇒ Object



134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/can_play/resource.rb', line 134

def self.add_resource(group, verb, object, type, behavior, opts)
  code = self.uniq_override_code
  super(group, verb, object, type, behavior, opts) and return if code.blank?
  name     = "#{verb}_#{group.name}"
  resource = ResourcePermission.new(
    my_module_name: my_module_name,
    name:        name,
    group:       group,
    verb:        verb,
    object:      object,
    type:        type,
    behavior:    behavior,
    opts:        opts
  )
  CanPlay.override_resources[code] ||= []
  CanPlay.override_resources[code].keep_if { |i| i.name != name }
  CanPlay.override_resources[code] << resource
end

.inherited(base) ⇒ Object



121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/can_play/resource.rb', line 121

def self.inherited(base)
  super
  base.class_eval do
    raise 'class name set error' unless base.name.end_with?('ResourceOverride')
    clazz_name = base.name.gsub(/ResourceOverride$/, '')
    clazz = clazz_name.constantize rescue nil
    singleton_attr_accessor :current_group, :temp_current_group
    if clazz && clazz.is_a?(Module)
      base.group clazz
    end
  end
end

.limit(name = nil, &block) ⇒ Object



153
154
155
156
157
158
159
160
161
# File 'lib/can_play/resource.rb', line 153

def self.limit(name=nil, &block)
  clazz = self
  wrap_block = Proc.new do |*args|
    clazz::OnlyInstance.only.instance_exec(*args, &block)
  end
  method_name = name ? "#{name}_evaluate_in_#{code}_scope" : "#{current_group.name}_evaluate_in_#{self.uniq_override_code}_scope"

  CanPlay::Power.power(method_name, &wrap_block)
end

.set_override_code(str) ⇒ Object



115
116
117
# File 'lib/can_play/resource.rb', line 115

def self.set_override_code(str)
  self.uniq_override_code = str
end