Class: AdminBits::AdminResource

Inherits:
Object
  • Object
show all
Defined in:
lib/admin_bits/admin_resource.rb

Defined Under Namespace

Classes: Paginator, PathHandler

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, resource, options, action_name, request_params = {}) ⇒ AdminResource

Returns a new instance of AdminResource.



5
6
7
8
9
10
11
12
13
14
15
# File 'lib/admin_bits/admin_resource.rb', line 5

def initialize(name, resource, options, action_name, request_params = {})
  @resource       = resource
  @options        = options
  @request_params = request_params
  @action_name    = action_name
  @name           = name

  raise ":path must be provided" unless @options[:path]

  sanitize_params
end

Instance Attribute Details

#action_nameObject (readonly)

Returns the value of attribute action_name.



3
4
5
# File 'lib/admin_bits/admin_resource.rb', line 3

def action_name
  @action_name
end

#nameObject (readonly)

Returns the value of attribute name.



3
4
5
# File 'lib/admin_bits/admin_resource.rb', line 3

def name
  @name
end

#optionsObject (readonly)

Returns the value of attribute options.



3
4
5
# File 'lib/admin_bits/admin_resource.rb', line 3

def options
  @options
end

#request_paramsObject (readonly)

Returns the value of attribute request_params.



3
4
5
# File 'lib/admin_bits/admin_resource.rb', line 3

def request_params
  @request_params
end

#resourceObject (readonly)

Returns the value of attribute resource.



3
4
5
# File 'lib/admin_bits/admin_resource.rb', line 3

def resource
  @resource
end

Instance Method Details

#convert_mapping(mapping) ⇒ Object



87
88
89
90
91
92
93
94
# File 'lib/admin_bits/admin_resource.rb', line 87

def convert_mapping(mapping)
  # Check if mapping was provided
  raise "No order mapping specified for '#{order}'" if mapping.blank?
  # Convert to array in order to simplify processing
  mapping = [mapping] if mapping.is_a?(String)
  # Convert to SQL form
  mapping.map {|m| "#{m} #{get_direction}"}.join(", ")
end

#default_ascObject



32
33
34
# File 'lib/admin_bits/admin_resource.rb', line 32

def default_asc
  options[:default_direction] == :asc ? "true" : "false"
end

#default_orderObject



28
29
30
# File 'lib/admin_bits/admin_resource.rb', line 28

def default_order
  options[:default_order].to_s
end

#filter_paramsObject



36
37
38
# File 'lib/admin_bits/admin_resource.rb', line 36

def filter_params
  (request_params[:filters] || {}).with_indifferent_access
end

#filtered_resourceObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/admin_bits/admin_resource.rb', line 40

def filtered_resource
  return_scope = resource

  (options[:filters] || {}).each_pair do |scope_name, args|
    if args.is_a?(Array)
      args = args.map {|a| filter_params[a] }

      return_scope = return_scope.send(scope_name, *args)
    else
      return_scope = return_scope.instance_exec filter_params, &args
    end
  end

  return_scope
end

#get_directionObject



83
84
85
# File 'lib/admin_bits/admin_resource.rb', line 83

def get_direction
  request_params[:asc] != "true" ? "DESC" : "ASC"
end

#get_orderObject



73
74
75
76
77
78
79
80
81
# File 'lib/admin_bits/admin_resource.rb', line 73

def get_order
  order = request_params[:order]

  if order.blank?
    nil
  else
    convert_mapping(options[:ordering][order.to_sym])
  end
end

#get_pageObject



69
70
71
# File 'lib/admin_bits/admin_resource.rb', line 69

def get_page
  request_params[:page]
end

#original_urlObject



61
62
63
# File 'lib/admin_bits/admin_resource.rb', line 61

def original_url
  PathHandler.new(options[:path], request_params).path
end

#outputObject



56
57
58
59
# File 'lib/admin_bits/admin_resource.rb', line 56

def output
  # Paginator.new(filtered_resource.order(get_order), get_page).call
  filtered_resource.order(get_order).page(get_page)
end

#sanitize_paramsObject



17
18
19
20
21
22
23
24
25
26
# File 'lib/admin_bits/admin_resource.rb', line 17

def sanitize_params
  @request_params = request_params.
    with_indifferent_access.
    reject do |k,v|
      ["action", "controller", "commit"].include?(k) || v.blank?
    end

  request_params[:order] ||= default_order
  request_params[:asc]   ||= default_asc
end

#url(params = {}) ⇒ Object



65
66
67
# File 'lib/admin_bits/admin_resource.rb', line 65

def url(params = {})
  PathHandler.new(options[:path], request_params).with_params(params)
end