avo 0.5.0.beta8 → 0.5.0.beta13
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of avo might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +46 -50
- data/Gemfile.lock +3 -8
- data/Rakefile +14 -14
- data/app/components/avo/common/multiple_file_viewer_component.rb +1 -1
- data/app/components/avo/common/single_file_viewer_component.rb +1 -1
- data/app/components/avo/edit/field_wrapper_component.rb +3 -3
- data/app/components/avo/edit/fields/trix_field_component.html.erb +1 -1
- data/app/components/avo/index/field_wrapper_component.rb +1 -1
- data/app/components/avo/index/grid_item_component.rb +10 -9
- data/app/components/avo/index/resource_controls_component.rb +2 -2
- data/app/components/avo/panel_component.rb +7 -6
- data/app/components/avo/resource_component.rb +4 -3
- data/app/components/avo/show/field_wrapper_component.rb +3 -3
- data/app/components/avo/views/resource_edit_component.rb +4 -3
- data/app/components/avo/views/resource_index_component.rb +8 -7
- data/app/components/avo/views/resource_new_component.rb +4 -3
- data/app/components/avo/views/resource_show_component.rb +21 -21
- data/app/controllers/avo/actions_controller.rb +30 -29
- data/app/controllers/avo/application_controller.rb +113 -126
- data/app/controllers/avo/attachments_controller.rb +3 -3
- data/app/controllers/avo/base_controller.rb +81 -80
- data/app/controllers/avo/home_controller.rb +2 -2
- data/app/controllers/avo/relations_controller.rb +29 -28
- data/app/controllers/avo/resources_controller.rb +1 -1
- data/app/controllers/avo/search_controller.rb +20 -19
- data/app/helpers/avo/application_helper.rb +48 -42
- data/app/helpers/avo/resources_helper.rb +11 -11
- data/app/mailers/avo/application_mailer.rb +2 -2
- data/app/packs/entrypoints/application.js +9 -4
- data/app/packs/images/logo.png +0 -0
- data/app/packs/js/controllers/fields/code_field_controller.js +14 -14
- data/app/packs/js/controllers/filter_controller.js +9 -8
- data/app/packs/js/toastr.js +1 -0
- data/app/packs/stylesheets/components/code.css +0 -16
- data/avo.gemspec +30 -31
- data/bin/webpack +1 -0
- data/config/initializers/pagy.rb +1 -1
- data/config/routes.rb +12 -12
- data/config/spring.rb +5 -5
- data/config/webpack/base.js +3 -3
- data/config/webpacker.yml +32 -0
- data/db/factories.rb +3 -5
- data/lib/avo.rb +6 -6
- data/lib/avo/app.rb +18 -18
- data/lib/avo/base_action.rb +20 -20
- data/lib/avo/base_resource.rb +41 -45
- data/lib/avo/configuration.rb +16 -18
- data/lib/avo/engine.rb +18 -18
- data/lib/avo/fields/badge_field.rb +2 -2
- data/lib/avo/fields/base_field.rb +25 -26
- data/lib/avo/fields/belongs_to_field.rb +13 -12
- data/lib/avo/fields/boolean_field.rb +4 -4
- data/lib/avo/fields/boolean_group_field.rb +3 -3
- data/lib/avo/fields/code_field.rb +4 -4
- data/lib/avo/fields/country_field.rb +2 -2
- data/lib/avo/fields/currency_field.rb +3 -3
- data/lib/avo/fields/date_field.rb +3 -3
- data/lib/avo/fields/date_time_field.rb +2 -2
- data/lib/avo/fields/external_image_field.rb +2 -2
- data/lib/avo/fields/field_extensions/has_field_name.rb +2 -2
- data/lib/avo/fields/field_extensions/visible_in_different_views.rb +34 -33
- data/lib/avo/fields/file_field.rb +1 -1
- data/lib/avo/fields/files_field.rb +2 -2
- data/lib/avo/fields/gravatar_field.rb +9 -9
- data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -1
- data/lib/avo/fields/has_many_field.rb +1 -1
- data/lib/avo/fields/has_one_field.rb +2 -2
- data/lib/avo/fields/heading_field.rb +2 -2
- data/lib/avo/fields/hidden_field.rb +1 -1
- data/lib/avo/fields/id_field.rb +3 -3
- data/lib/avo/fields/key_value_field.rb +12 -12
- data/lib/avo/fields/markdown_field.rb +2 -2
- data/lib/avo/fields/number_field.rb +3 -3
- data/lib/avo/fields/password_field.rb +1 -1
- data/lib/avo/fields/select_field.rb +8 -12
- data/lib/avo/fields/status_field.rb +4 -4
- data/lib/avo/fields/text_field.rb +2 -2
- data/lib/avo/fields/textarea_field.rb +2 -2
- data/lib/avo/fields/trix_field.rb +1 -1
- data/lib/avo/fields_collector.rb +4 -5
- data/lib/avo/filters/base_filter.rb +6 -6
- data/lib/avo/filters/boolean_filter.rb +1 -1
- data/lib/avo/filters/select_filter.rb +1 -1
- data/lib/avo/licensing/h_q.rb +56 -55
- data/lib/avo/licensing/license.rb +5 -5
- data/lib/avo/licensing/license_manager.rb +4 -4
- data/lib/avo/licensing/null_license.rb +2 -2
- data/lib/avo/licensing/pro_license.rb +1 -1
- data/lib/avo/loaders/fields_loader.rb +4 -4
- data/lib/avo/services/authorization_service.rb +2 -2
- data/lib/avo/services/panel_service.rb +4 -4
- data/lib/avo/version.rb +1 -1
- data/lib/generators/avo/action_generator.rb +4 -4
- data/lib/generators/avo/controller_generator.rb +4 -4
- data/lib/generators/avo/filter_generator.rb +5 -5
- data/lib/generators/avo/install_generator.rb +8 -8
- data/lib/generators/avo/locales_generator.rb +5 -5
- data/lib/generators/avo/partials_generator.rb +4 -4
- data/lib/generators/avo/resource_generator.rb +5 -5
- data/lib/generators/avo/templates/action.tt +0 -4
- data/lib/generators/avo/templates/resource/resource.tt +3 -13
- data/lib/tasks/avo_tasks.rake +0 -60
- data/public/avo-packs/css/{application-5bb09ba4.css → application-9d115b7e.css} +124 -276
- data/public/avo-packs/css/application-9d115b7e.css.br +0 -0
- data/public/avo-packs/css/application-9d115b7e.css.gz +0 -0
- data/public/avo-packs/css/application-9d115b7e.css.map +1 -0
- data/public/avo-packs/css/application-9d115b7e.css.map.br +0 -0
- data/public/avo-packs/css/application-9d115b7e.css.map.gz +0 -0
- data/public/avo-packs/js/application-4751feac1bb0404b9c47.js +26 -0
- data/public/avo-packs/js/{application-86a3ea5a835b0c758203.js.LICENSE.txt → application-4751feac1bb0404b9c47.js.LICENSE.txt} +0 -0
- data/public/avo-packs/js/application-4751feac1bb0404b9c47.js.br +0 -0
- data/public/avo-packs/js/application-4751feac1bb0404b9c47.js.gz +0 -0
- data/public/avo-packs/js/application-4751feac1bb0404b9c47.js.map +1 -0
- data/public/avo-packs/js/application-4751feac1bb0404b9c47.js.map.br +0 -0
- data/public/avo-packs/js/application-4751feac1bb0404b9c47.js.map.gz +0 -0
- data/public/avo-packs/manifest.json +16 -16
- data/public/avo-packs/media/images/dadf2db36589607d107d.png +0 -0
- metadata +16 -31
- data/config/initializers/inline_svg.rb +0 -33
- data/public/avo-packs/css/application-5bb09ba4.css.br +0 -0
- data/public/avo-packs/css/application-5bb09ba4.css.gz +0 -0
- data/public/avo-packs/css/application-5bb09ba4.css.map +0 -1
- data/public/avo-packs/css/application-5bb09ba4.css.map.br +0 -0
- data/public/avo-packs/css/application-5bb09ba4.css.map.gz +0 -0
- data/public/avo-packs/js/application-86a3ea5a835b0c758203.js +0 -26
- data/public/avo-packs/js/application-86a3ea5a835b0c758203.js.br +0 -0
- data/public/avo-packs/js/application-86a3ea5a835b0c758203.js.gz +0 -0
- data/public/avo-packs/js/application-86a3ea5a835b0c758203.js.map +0 -1
- data/public/avo-packs/js/application-86a3ea5a835b0c758203.js.map.br +0 -0
- data/public/avo-packs/js/application-86a3ea5a835b0c758203.js.map.gz +0 -0
- data/public/avo-packs/media/images/f1b4befac91a3336db9a.png +0 -0
data/lib/avo.rb
CHANGED
@@ -1,20 +1,20 @@
|
|
1
|
-
require
|
2
|
-
require_relative
|
3
|
-
require_relative
|
1
|
+
require "zeitwerk"
|
2
|
+
require_relative "avo/version"
|
3
|
+
require_relative "avo/engine" if defined?(Rails)
|
4
4
|
|
5
5
|
loader = Zeitwerk::Loader.for_gem
|
6
6
|
loader.setup
|
7
7
|
|
8
8
|
module Avo
|
9
|
-
ROOT_PATH = Pathname.new(File.join(__dir__,
|
10
|
-
IN_DEVELOPMENT = ENV[
|
9
|
+
ROOT_PATH = Pathname.new(File.join(__dir__, ".."))
|
10
|
+
IN_DEVELOPMENT = ENV["AVO_IN_DEVELOPMENT"] == "1"
|
11
11
|
PACKED = !IN_DEVELOPMENT
|
12
12
|
|
13
13
|
class << self
|
14
14
|
def webpacker
|
15
15
|
@webpacker ||= ::Webpacker::Instance.new(
|
16
16
|
root_path: ROOT_PATH,
|
17
|
-
config_path: ROOT_PATH.join(
|
17
|
+
config_path: ROOT_PATH.join("config/webpacker.yml")
|
18
18
|
)
|
19
19
|
end
|
20
20
|
end
|
data/lib/avo/app.rb
CHANGED
@@ -15,10 +15,10 @@ module Avo
|
|
15
15
|
|
16
16
|
I18n.locale = Avo.configuration.language_code
|
17
17
|
|
18
|
-
if Rails.cache.
|
19
|
-
|
18
|
+
if Rails.cache.instance_of?(ActiveSupport::Cache::NullStore)
|
19
|
+
app[:cache_store] ||= ActiveSupport::Cache::MemoryStore.new
|
20
20
|
else
|
21
|
-
|
21
|
+
app[:cache_store] = Rails.cache
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -35,7 +35,7 @@ module Avo
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def cache_store
|
38
|
-
|
38
|
+
app[:cache_store]
|
39
39
|
end
|
40
40
|
|
41
41
|
# This method will find all fields available in the Avo::Fields namespace and add them to the fields class_variable array
|
@@ -47,23 +47,23 @@ module Avo
|
|
47
47
|
# Avo::Fields::DateTimeField -> date_time
|
48
48
|
def init_fields
|
49
49
|
Avo::Fields::BaseField.descendants.each do |class_name|
|
50
|
-
next if class_name.to_s ==
|
50
|
+
next if class_name.to_s == "BaseField"
|
51
51
|
|
52
|
-
if class_name.to_s.end_with?
|
52
|
+
if class_name.to_s.end_with? "Field"
|
53
53
|
load_field class_name.get_field_name, class_name
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
def load_field(method_name, klass)
|
59
|
-
|
59
|
+
fields.push(
|
60
60
|
name: method_name,
|
61
|
-
class: klass
|
61
|
+
class: klass
|
62
62
|
)
|
63
63
|
end
|
64
64
|
|
65
65
|
def init_resources
|
66
|
-
|
66
|
+
app[:resources] = BaseResource.descendants
|
67
67
|
.select do |resource|
|
68
68
|
resource != BaseResource
|
69
69
|
end
|
@@ -75,14 +75,14 @@ module Avo
|
|
75
75
|
end
|
76
76
|
|
77
77
|
def get_resources
|
78
|
-
|
78
|
+
app[:resources]
|
79
79
|
end
|
80
80
|
|
81
81
|
# Returns the Avo resource by camelized name
|
82
82
|
#
|
83
83
|
# get_resource_by_name('User') => UserResource
|
84
84
|
def get_resource(resource)
|
85
|
-
|
85
|
+
app[:resources].find do |available_resource|
|
86
86
|
"#{resource}Resource".safe_constantize == available_resource.class
|
87
87
|
end
|
88
88
|
end
|
@@ -91,7 +91,7 @@ module Avo
|
|
91
91
|
#
|
92
92
|
# get_resource_by_name('user') => UserResource
|
93
93
|
def get_resource_by_name(name)
|
94
|
-
|
94
|
+
get_resource name.singularize.camelize
|
95
95
|
end
|
96
96
|
|
97
97
|
# Returns the Avo resource by singular snake_cased name
|
@@ -110,7 +110,7 @@ module Avo
|
|
110
110
|
# get_resource_by_controller_name('users') => UserResource
|
111
111
|
def get_resource_by_controller_name(name)
|
112
112
|
get_resources.find do |resource|
|
113
|
-
resource.model_class.to_s.pluralize.underscore.
|
113
|
+
resource.model_class.to_s.pluralize.underscore.tr("/", "_") == name.to_s
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
@@ -124,7 +124,7 @@ module Avo
|
|
124
124
|
def get_available_resources(user = nil)
|
125
125
|
App.get_resources
|
126
126
|
.select do |resource|
|
127
|
-
Services::AuthorizationService.authorize user, resource.model, Avo.configuration.authorization_methods.stringify_keys[
|
127
|
+
Services::AuthorizationService.authorize user, resource.model, Avo.configuration.authorization_methods.stringify_keys["index"], raise_exception: false
|
128
128
|
end
|
129
129
|
.sort_by { |r| r.name }
|
130
130
|
end
|
@@ -139,17 +139,17 @@ module Avo
|
|
139
139
|
# We should eager load all the classes so we find all descendants
|
140
140
|
Rails.application.eager_load!
|
141
141
|
|
142
|
-
|
142
|
+
proc do
|
143
143
|
BaseResource.descendants
|
144
144
|
.select do |resource|
|
145
145
|
resource != :BaseResource
|
146
146
|
end
|
147
147
|
.map do |resource|
|
148
148
|
if resource.is_a? Class
|
149
|
-
if resource.model_class.present?
|
150
|
-
|
149
|
+
route_key = if resource.model_class.present?
|
150
|
+
resource.model_class.model_name.route_key
|
151
151
|
else
|
152
|
-
|
152
|
+
resource.to_s.underscore.gsub("_resource", "").downcase.pluralize.to_sym
|
153
153
|
end
|
154
154
|
|
155
155
|
resources route_key
|
data/lib/avo/base_action.rb
CHANGED
@@ -25,13 +25,13 @@ module Avo
|
|
25
25
|
self.class.resource = resource if resource.present?
|
26
26
|
self.class.user = user if user.present?
|
27
27
|
|
28
|
-
self.class.message ||= I18n.t(
|
29
|
-
self.class.confirm_button_label ||= I18n.t(
|
30
|
-
self.class.cancel_button_label ||= I18n.t(
|
28
|
+
self.class.message ||= I18n.t("avo.are_you_sure_you_want_to_run_this_option")
|
29
|
+
self.class.confirm_button_label ||= I18n.t("avo.run")
|
30
|
+
self.class.cancel_button_label ||= I18n.t("avo.cancel")
|
31
31
|
|
32
32
|
@response ||= {}
|
33
33
|
@response[:message_type] ||= :notice
|
34
|
-
@response[:message] ||= I18n.t(
|
34
|
+
@response[:message] ||= I18n.t("avo.action_ran_successfully")
|
35
35
|
end
|
36
36
|
|
37
37
|
def context
|
@@ -50,7 +50,7 @@ module Avo
|
|
50
50
|
get_field_definitions.map do |field|
|
51
51
|
field.hydrate(action: self, model: @model)
|
52
52
|
end
|
53
|
-
|
53
|
+
.select do |field|
|
54
54
|
field.visible?
|
55
55
|
end
|
56
56
|
end
|
@@ -59,7 +59,7 @@ module Avo
|
|
59
59
|
get_fields.map do |field|
|
60
60
|
[field.id, field.value]
|
61
61
|
end
|
62
|
-
|
62
|
+
.to_h
|
63
63
|
end
|
64
64
|
|
65
65
|
def handle_action(models:, fields:)
|
@@ -75,50 +75,50 @@ module Avo
|
|
75
75
|
processed_fields = {}
|
76
76
|
end
|
77
77
|
|
78
|
-
|
78
|
+
handle models: models, fields: processed_fields
|
79
79
|
|
80
80
|
self
|
81
81
|
end
|
82
82
|
|
83
83
|
def param_id
|
84
|
-
self.class.to_s.demodulize.underscore.
|
84
|
+
self.class.to_s.demodulize.underscore.tr "/", "_"
|
85
85
|
end
|
86
86
|
|
87
87
|
def succeed(text)
|
88
|
-
|
89
|
-
|
88
|
+
response[:message_type] = :notice
|
89
|
+
response[:message] = text
|
90
90
|
|
91
91
|
self
|
92
92
|
end
|
93
93
|
|
94
94
|
def fail(text)
|
95
|
-
|
96
|
-
|
95
|
+
response[:message_type] = :alert
|
96
|
+
response[:message] = text
|
97
97
|
|
98
98
|
self
|
99
99
|
end
|
100
100
|
|
101
101
|
def redirect_to(path = nil, &block)
|
102
|
-
|
103
|
-
if block.present?
|
104
|
-
|
102
|
+
response[:type] = :redirect
|
103
|
+
response[:path] = if block.present?
|
104
|
+
block
|
105
105
|
else
|
106
|
-
|
106
|
+
path
|
107
107
|
end
|
108
108
|
|
109
109
|
self
|
110
110
|
end
|
111
111
|
|
112
112
|
def reload
|
113
|
-
|
113
|
+
response[:type] = :reload
|
114
114
|
|
115
115
|
self
|
116
116
|
end
|
117
117
|
|
118
118
|
def download(path, filename)
|
119
|
-
|
120
|
-
|
121
|
-
|
119
|
+
response[:type] = :download
|
120
|
+
response[:path] = path
|
121
|
+
response[:filename] = filename
|
122
122
|
|
123
123
|
self
|
124
124
|
end
|
data/lib/avo/base_resource.rb
CHANGED
@@ -67,16 +67,16 @@ module Avo
|
|
67
67
|
|
68
68
|
def get_fields(panel: nil, reflection: nil)
|
69
69
|
fields = get_field_definitions.select do |field|
|
70
|
-
field.send("show_on_#{@view
|
70
|
+
field.send("show_on_#{@view}")
|
71
71
|
end
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
72
|
+
.select do |field|
|
73
|
+
field.visible?
|
74
|
+
end
|
75
|
+
.select do |field|
|
76
76
|
unless field.respond_to?(:foreign_key) &&
|
77
|
-
|
78
|
-
|
79
|
-
|
77
|
+
reflection.present? &&
|
78
|
+
reflection.respond_to?(:foreign_key) &&
|
79
|
+
reflection.foreign_key == field.foreign_key
|
80
80
|
true
|
81
81
|
end
|
82
82
|
end
|
@@ -87,11 +87,9 @@ module Avo
|
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
|
-
fields
|
90
|
+
fields.map do |field|
|
91
91
|
field.hydrate(model: @model, view: @view, resource: self)
|
92
92
|
end
|
93
|
-
|
94
|
-
fields
|
95
93
|
end
|
96
94
|
|
97
95
|
def get_grid_fields
|
@@ -117,24 +115,22 @@ module Avo
|
|
117
115
|
|
118
116
|
case @view
|
119
117
|
when :show
|
120
|
-
I18n.t(
|
118
|
+
I18n.t("avo.resource_details", item: name.downcase, title: model_title).upcase_first
|
121
119
|
when :edit
|
122
|
-
I18n.t(
|
120
|
+
I18n.t("avo.update_item", item: name.downcase, title: model_title).upcase_first
|
123
121
|
when :new
|
124
|
-
I18n.t(
|
122
|
+
I18n.t("avo.create_new_item", item: name.downcase).upcase_first
|
125
123
|
end
|
126
124
|
end
|
127
125
|
|
128
126
|
def panels
|
129
|
-
|
127
|
+
[
|
130
128
|
{
|
131
129
|
name: default_panel_name,
|
132
130
|
type: :fields,
|
133
|
-
in_panel: true
|
131
|
+
in_panel: true
|
134
132
|
}
|
135
133
|
]
|
136
|
-
|
137
|
-
panels
|
138
134
|
end
|
139
135
|
|
140
136
|
def model_class
|
@@ -142,7 +138,7 @@ module Avo
|
|
142
138
|
|
143
139
|
return @model.class if @model.present?
|
144
140
|
|
145
|
-
self.class.name.demodulize.chomp(
|
141
|
+
self.class.name.demodulize.chomp("Resource").safe_constantize
|
146
142
|
end
|
147
143
|
|
148
144
|
def model_title
|
@@ -156,7 +152,7 @@ module Avo
|
|
156
152
|
|
157
153
|
return I18n.t(@translation_key, count: 1).capitalize if @translation_key
|
158
154
|
|
159
|
-
self.class.name.demodulize.chomp(
|
155
|
+
self.class.name.demodulize.chomp("Resource").titlecase
|
160
156
|
end
|
161
157
|
|
162
158
|
def singular_name
|
@@ -191,7 +187,7 @@ module Avo
|
|
191
187
|
self.class.context
|
192
188
|
end
|
193
189
|
|
194
|
-
def query_search(
|
190
|
+
def query_search(via_resource_name:, via_resource_id:, user:, query: "")
|
195
191
|
# model_class = self.model
|
196
192
|
|
197
193
|
db_query = AuthorizationService.apply_policy(user, model_class)
|
@@ -199,18 +195,18 @@ module Avo
|
|
199
195
|
if via_resource_name.present?
|
200
196
|
related_model = App.get_resource_by_name(via_resource_name).model
|
201
197
|
|
202
|
-
db_query = related_model.find(via_resource_id).public_send(
|
198
|
+
db_query = related_model.find(via_resource_id).public_send(plural_name.downcase)
|
203
199
|
end
|
204
200
|
|
205
201
|
new_query = []
|
206
202
|
|
207
|
-
[
|
208
|
-
new_query.push
|
203
|
+
[search].flatten.each_with_index do |search_by, index|
|
204
|
+
new_query.push "or" if index != 0
|
209
205
|
|
210
206
|
new_query.push "text(#{search_by}) ILIKE '%#{query}%'"
|
211
207
|
end
|
212
208
|
|
213
|
-
db_query.where(new_query.join(
|
209
|
+
db_query.where(new_query.join(" "))
|
214
210
|
end
|
215
211
|
|
216
212
|
def attached_file_fields
|
@@ -221,7 +217,7 @@ module Avo
|
|
221
217
|
|
222
218
|
def fill_model(model, params)
|
223
219
|
# Map the received params to their actual fields
|
224
|
-
fields_by_database_id =
|
220
|
+
fields_by_database_id = get_field_definitions.map { |field| [field.database_id(model).to_s, field] }.to_h
|
225
221
|
|
226
222
|
params.each do |key, value|
|
227
223
|
field = fields_by_database_id[key]
|
@@ -239,16 +235,16 @@ module Avo
|
|
239
235
|
end
|
240
236
|
|
241
237
|
def file_hash
|
242
|
-
content_to_be_hashed =
|
238
|
+
content_to_be_hashed = ""
|
243
239
|
|
244
240
|
# resource file hash
|
245
|
-
resource_path = Rails.root.join(
|
241
|
+
resource_path = Rails.root.join("app", "avo", "resources", "#{self.class.name.underscore}_resource.rb").to_s
|
246
242
|
if File.file? resource_path
|
247
243
|
content_to_be_hashed += File.read(resource_path)
|
248
244
|
end
|
249
245
|
|
250
246
|
# policy file hash
|
251
|
-
policy_path = Rails.root.join(
|
247
|
+
policy_path = Rails.root.join("app", "policies", "#{self.class.name.underscore.gsub("_resource", "")}_policy.rb").to_s
|
252
248
|
if File.file? policy_path
|
253
249
|
content_to_be_hashed += File.read(policy_path)
|
254
250
|
end
|
@@ -258,9 +254,9 @@ module Avo
|
|
258
254
|
|
259
255
|
def cache_hash(parent_model)
|
260
256
|
if parent_model.present?
|
261
|
-
[
|
257
|
+
[model, file_hash, parent_model]
|
262
258
|
else
|
263
|
-
[
|
259
|
+
[model, file_hash]
|
264
260
|
end
|
265
261
|
end
|
266
262
|
|
@@ -270,24 +266,24 @@ module Avo
|
|
270
266
|
default_values = get_fields.select do |field|
|
271
267
|
!field.computed
|
272
268
|
end
|
273
|
-
|
274
|
-
|
275
|
-
|
269
|
+
.map do |field|
|
270
|
+
id = field.id
|
271
|
+
value = field.value
|
276
272
|
|
277
|
-
|
278
|
-
|
273
|
+
if field.respond_to? :foreign_key
|
274
|
+
id = field.foreign_key.to_sym
|
279
275
|
|
280
|
-
|
276
|
+
reflection = @model._reflections[@params[:via_relation]]
|
281
277
|
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
278
|
+
if reflection.present? && reflection.foreign_key.present?
|
279
|
+
value = @params[:via_resource_id]
|
280
|
+
end
|
281
|
+
end
|
286
282
|
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
283
|
+
[id, value]
|
284
|
+
end
|
285
|
+
.to_h
|
286
|
+
.select do |id, value|
|
291
287
|
value.present?
|
292
288
|
end
|
293
289
|
|
data/lib/avo/configuration.rb
CHANGED
@@ -21,27 +21,27 @@ module Avo
|
|
21
21
|
attr_accessor :context
|
22
22
|
|
23
23
|
def initialize
|
24
|
-
@root_path =
|
25
|
-
@app_name = Rails.application.class.to_s.split(
|
26
|
-
@timezone =
|
24
|
+
@root_path = "/avo"
|
25
|
+
@app_name = Rails.application.class.to_s.split("::").first.underscore.humanize(keep_id_suffix: true)
|
26
|
+
@timezone = "UTC"
|
27
27
|
@per_page = 24
|
28
28
|
@per_page_steps = [12, 24, 48, 72]
|
29
29
|
@via_per_page = 8
|
30
|
-
@locale =
|
31
|
-
@currency =
|
30
|
+
@locale = "en-US"
|
31
|
+
@currency = "USD"
|
32
32
|
@default_view_type = :table
|
33
|
-
@license =
|
33
|
+
@license = "community"
|
34
34
|
@license_key = nil
|
35
35
|
@current_user = proc {}
|
36
36
|
@authenticate = proc {}
|
37
37
|
@authorization_methods = {
|
38
|
-
index:
|
39
|
-
show:
|
40
|
-
edit:
|
41
|
-
new:
|
42
|
-
update:
|
43
|
-
create:
|
44
|
-
destroy:
|
38
|
+
index: "index?",
|
39
|
+
show: "show?",
|
40
|
+
edit: "edit?",
|
41
|
+
new: "new?",
|
42
|
+
update: "update?",
|
43
|
+
create: "create?",
|
44
|
+
destroy: "destroy?"
|
45
45
|
}
|
46
46
|
@id_links_to_resource = false
|
47
47
|
@full_width_container = false
|
@@ -55,11 +55,9 @@ module Avo
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def language_code
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
'en'
|
62
|
-
end
|
58
|
+
locale_tag.language.code
|
59
|
+
rescue
|
60
|
+
"en"
|
63
61
|
end
|
64
62
|
|
65
63
|
def current_user_method(&block)
|