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
|
# File 'lib/apiql.rb', line 18
def model(klass)
define_method "#{klass.name.pluralize.underscore}" do |page = nil, page_size = 10|
authorize! :read, klass
if page.present?
{
total: klass.count,
items: klass.eager_load(eager_load).offset(page * page_size).limit(page_size)
}
else
klass.eager_load(eager_load).all
end
end
define_method "#{klass.name.underscore}" do |id|
item = klass.eager_load(eager_load).find(id)
authorize! :read, item
item
end
define_method "#{klass.name.underscore}.create" do |params|
authorize! :create, klass
klass_entity = "#{klass.name}::Entity".constantize
if klass_entity.respond_to?(:create_params, params)
params = klass_entity.send(:create_params, params)
elsif klass_entity.respond_to?(:params, params)
params = klass_entity.send(:params, params)
end
klass.create!(params)
end
define_method "#{klass.name.underscore}.update" do |id, params|
item = klass.find(id)
authorize! :update, item
klass_entity = "#{klass.name}::Entity".constantize
if klass_entity.respond_to?(:update_params, params)
params = klass_entity.send(:update_params, params)
elsif klass_entity.respond_to?(:params, params)
params = klass_entity.send(:params, params)
end
item.update!(params)
end
define_method "#{klass.name.underscore}.destroy" do |id|
item = klass.find(id)
authorize! :destroy, item
item.destroy!
end
end
|