Class: Heimdallr::ResourceImplementation

Inherits:
Object
  • Object
show all
Defined in:
lib/heimdallr/resource_implementation.rb

Defined Under Namespace

Classes: ResourceLoader

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(controller, options) ⇒ ResourceImplementation

Returns a new instance of ResourceImplementation.



28
29
30
31
# File 'lib/heimdallr/resource_implementation.rb', line 28

def initialize(controller, options)
  @controller = controller
  @options = options
end

Class Method Details

.add_before_filter(controller_class, method, options) ⇒ Object



3
4
5
6
7
8
9
10
11
12
# File 'lib/heimdallr/resource_implementation.rb', line 3

def self.add_before_filter(controller_class, method, options)
  options, filter_options = Heimdallr::ResourceImplementation.prepare_options controller_class, options
  controller_class.send :own_heimdallr_options=, options

  controller_class.class_eval do
    before_filter filter_options do |controller|
      Heimdallr::ResourceImplementation.new(controller, options).send method
    end
  end
end

.prepare_options(controller_class, options) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/heimdallr/resource_implementation.rb', line 14

def self.prepare_options(controller_class, options)
  options = options.dup
  options[:resource] ||= controller_class.name.sub(/Controller$/, '').singularize.underscore

  filter_keys = [:only, :except]

  filter_options = filter_keys.inject({}) do |hash, key|
    hash[key] = options.delete key if options.has_key? key
    hash
  end

  [options, filter_options]
end

Instance Method Details

#authorize_resource(resource) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/heimdallr/resource_implementation.rb', line 43

def authorize_resource(resource)
  case @controller.params[:action]
  when 'new', 'create'
    raise Heimdallr::AccessDenied, "Cannot create model" unless resource.creatable?
    resource.assign_attributes resource.reflect_on_security[:restrictions].fixtures[:create]

  when 'edit', 'update'
    raise Heimdallr::AccessDenied, "Cannot update model" unless resource.modifiable?
    resource.assign_attributes resource.reflect_on_security[:restrictions].fixtures[:update]

  when 'destroy'
    raise Heimdallr::AccessDenied, "Cannot delete model" unless resource.destroyable?
  end
end

#load_and_authorize_resourceObject



37
38
39
40
41
# File 'lib/heimdallr/resource_implementation.rb', line 37

def load_and_authorize_resource
  resource = ResourceLoader.new(@controller, @options, :restricted => true).load
  authorize_resource resource unless @controller.send :skip_authorization_check?
  resource
end

#load_resourceObject



33
34
35
# File 'lib/heimdallr/resource_implementation.rb', line 33

def load_resource
  ResourceLoader.new(@controller, @options).load
end