-
Notifications
You must be signed in to change notification settings - Fork 172
/
builder.rb
116 lines (92 loc) · 2.9 KB
/
builder.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
module Trestle
class Resource
class Builder < Admin::Builder
self.admin_class = Resource
self.controller = -> { ResourceController }
def adapter(&block)
klass = admin.adapter_class
klass.class_eval(&block) if block_given?
klass
end
def adapter=(adapter)
admin.adapter_class = adapter
end
def remove_action(*actions)
actions.each do |action|
controller.remove_possible_method(action.to_sym)
admin.actions.delete(action.to_sym)
end
end
def collection(&block)
admin.define_adapter_method(:collection, &block)
end
def find_instance(&block)
admin.define_adapter_method(:find_instance, &block)
end
alias instance find_instance
def build_instance(&block)
admin.define_adapter_method(:build_instance, &block)
end
def update_instance(&block)
admin.define_adapter_method(:update_instance, &block)
end
def save_instance(&block)
admin.define_adapter_method(:save_instance, &block)
end
def delete_instance(&block)
admin.define_adapter_method(:delete_instance, &block)
end
def to_param(&block)
admin.define_adapter_method(:to_param, &block)
end
def params(&block)
admin.define_adapter_method(:permitted_params, &block)
end
def decorator(decorator)
admin.decorator = decorator
end
def decorate_collection(&block)
admin.define_adapter_method(:decorate_collection, &block)
end
def merge_scopes(&block)
admin.define_adapter_method(:merge_scopes, &block)
end
def sort(&block)
admin.define_adapter_method(:sort, &block)
end
def sort_column(column, &block)
admin.column_sorts[column.to_sym] = block
end
def paginate(options={}, &block)
admin.pagination_options = admin.pagination_options.merge(options)
admin.define_adapter_method(:paginate, &block)
end
def count(&block)
admin.define_adapter_method(:count, &block)
end
def scopes(options={}, &block)
admin.scopes.options.merge!(options)
admin.scopes.append(&block) if block_given?
end
def scope(name, scope=nil, options={}, &block)
scopes do
scope(name, scope, options, &block)
end
end
def return_to(options={}, &block)
actions = options.key?(:on) ? Array(options[:on]) : [:create, :update, :destroy]
actions.each do |action|
admin.return_locations[action.to_sym] = block
end
end
protected
def normalize_table_options(name, options)
if name.is_a?(Hash)
# Default index table
name, options = :index, name.reverse_merge(sortable: true)
end
[name, options.reverse_merge(admin: admin)]
end
end
end
end