avo 0.5.0.beta9 → 0.5.0.beta10
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 +47 -48
- data/Gemfile.lock +1 -1
- 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/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 -7
- 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/avo.gemspec +31 -31
- data/config/initializers/inline_svg.rb +1 -1
- data/config/initializers/pagy.rb +1 -1
- data/config/routes.rb +12 -12
- data/config/spring.rb +5 -5
- 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 +24 -25
- 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/tasks/avo_tasks.rake +52 -53
- data/public/avo-packs/css/{application-38e7e91b.css → application-4e16d6a6.css} +4 -4
- data/public/avo-packs/css/application-4e16d6a6.css.br +0 -0
- data/public/avo-packs/css/{application-38e7e91b.css.gz → application-4e16d6a6.css.gz} +0 -0
- data/public/avo-packs/css/{application-38e7e91b.css.map → application-4e16d6a6.css.map} +1 -1
- data/public/avo-packs/css/application-4e16d6a6.css.map.br +0 -0
- data/public/avo-packs/css/application-4e16d6a6.css.map.gz +0 -0
- data/public/avo-packs/js/{application-2b90fe889f7d6df1ad92.js → application-8eb130a4688f2c667703.js} +4 -4
- data/public/avo-packs/js/{application-2b90fe889f7d6df1ad92.js.LICENSE.txt → application-8eb130a4688f2c667703.js.LICENSE.txt} +0 -0
- data/public/avo-packs/js/application-8eb130a4688f2c667703.js.br +0 -0
- data/public/avo-packs/js/application-8eb130a4688f2c667703.js.gz +0 -0
- data/public/avo-packs/js/application-8eb130a4688f2c667703.js.map +1 -0
- data/public/avo-packs/js/application-8eb130a4688f2c667703.js.map.br +0 -0
- data/public/avo-packs/js/application-8eb130a4688f2c667703.js.map.gz +0 -0
- data/public/avo-packs/manifest.json +15 -15
- metadata +15 -15
- data/public/avo-packs/css/application-38e7e91b.css.br +0 -0
- data/public/avo-packs/css/application-38e7e91b.css.map.br +0 -0
- data/public/avo-packs/css/application-38e7e91b.css.map.gz +0 -0
- data/public/avo-packs/js/application-2b90fe889f7d6df1ad92.js.br +0 -0
- data/public/avo-packs/js/application-2b90fe889f7d6df1ad92.js.gz +0 -0
- data/public/avo-packs/js/application-2b90fe889f7d6df1ad92.js.map +0 -1
- data/public/avo-packs/js/application-2b90fe889f7d6df1ad92.js.map.br +0 -0
- data/public/avo-packs/js/application-2b90fe889f7d6df1ad92.js.map.gz +0 -0
@@ -1,21 +1,23 @@
|
|
1
|
-
|
1
|
+
// eslint-disable-next-line import/no-extraneous-dependencies
|
2
2
|
import 'core-js/stable'
|
3
|
+
// eslint-disable-next-line import/no-extraneous-dependencies
|
4
|
+
import 'regenerator-runtime/runtime'
|
3
5
|
import 'trix'
|
4
6
|
import * as Mousetrap from 'mousetrap'
|
5
7
|
import { Application } from 'stimulus'
|
6
8
|
import { Turbo } from '@hotwired/turbo-rails'
|
7
9
|
import { definitionsFromContext } from 'stimulus/webpack-helpers'
|
10
|
+
import Rails from '@rails/ujs'
|
8
11
|
import tippy from 'tippy.js'
|
9
|
-
import Rails from '@rails/ujs';
|
10
|
-
|
11
|
-
Rails.start();
|
12
|
-
|
13
|
-
window.Turbolinks = Turbo
|
14
12
|
|
15
13
|
// Toastr alerts
|
16
14
|
import '../js/toastr'
|
17
15
|
|
18
|
-
|
16
|
+
Rails.start()
|
17
|
+
|
18
|
+
window.Turbolinks = Turbo
|
19
|
+
|
20
|
+
Mousetrap.bind('r r r', () => Turbo.visit(window.location.href, { action: 'replace' }))
|
19
21
|
|
20
22
|
const application = Application.start()
|
21
23
|
|
@@ -1,20 +1,20 @@
|
|
1
|
+
import 'codemirror/mode/css/css'
|
2
|
+
|
3
|
+
import 'codemirror/mode/dockerfile/dockerfile'
|
4
|
+
import 'codemirror/mode/htmlmixed/htmlmixed'
|
5
|
+
import 'codemirror/mode/javascript/javascript'
|
6
|
+
import 'codemirror/mode/markdown/markdown'
|
7
|
+
import 'codemirror/mode/nginx/nginx'
|
8
|
+
import 'codemirror/mode/php/php'
|
9
|
+
import 'codemirror/mode/ruby/ruby'
|
10
|
+
import 'codemirror/mode/sass/sass'
|
11
|
+
import 'codemirror/mode/shell/shell'
|
12
|
+
import 'codemirror/mode/sql/sql'
|
13
|
+
import 'codemirror/mode/vue/vue'
|
14
|
+
import 'codemirror/mode/xml/xml'
|
1
15
|
import { Controller } from 'stimulus'
|
2
16
|
import { castBoolean } from '@/js/helpers/cast_boolean'
|
3
17
|
import CodeMirror from 'codemirror'
|
4
|
-
import 'codemirror/mode/css/css.js'
|
5
|
-
import 'codemirror/mode/css/css.js'
|
6
|
-
import 'codemirror/mode/dockerfile/dockerfile.js'
|
7
|
-
import 'codemirror/mode/htmlmixed/htmlmixed.js'
|
8
|
-
import 'codemirror/mode/javascript/javascript.js'
|
9
|
-
import 'codemirror/mode/markdown/markdown.js'
|
10
|
-
import 'codemirror/mode/nginx/nginx.js'
|
11
|
-
import 'codemirror/mode/php/php.js'
|
12
|
-
import 'codemirror/mode/ruby/ruby.js'
|
13
|
-
import 'codemirror/mode/sass/sass.js'
|
14
|
-
import 'codemirror/mode/shell/shell.js'
|
15
|
-
import 'codemirror/mode/sql/sql.js'
|
16
|
-
import 'codemirror/mode/vue/vue.js'
|
17
|
-
import 'codemirror/mode/xml/xml.js'
|
18
18
|
|
19
19
|
export default class extends Controller {
|
20
20
|
static targets = ['element']
|
@@ -36,13 +36,14 @@ export default class extends Controller {
|
|
36
36
|
filters[filterClass] = value
|
37
37
|
|
38
38
|
const filtered = Object.keys(filters)
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
return obj;
|
43
|
-
}, {});
|
39
|
+
.filter((key) => filters[key] !== '')
|
40
|
+
.reduce((obj, key) => {
|
41
|
+
obj[key] = filters[key]
|
44
42
|
|
45
|
-
|
43
|
+
return obj
|
44
|
+
}, {})
|
45
|
+
|
46
|
+
let encodedFilters
|
46
47
|
|
47
48
|
if (filtered && Object.keys(filtered).length > 0) {
|
48
49
|
encodedFilters = btoa(JSON.stringify(filtered))
|
@@ -55,9 +56,9 @@ export default class extends Controller {
|
|
55
56
|
}
|
56
57
|
|
57
58
|
if (encodedFilters) {
|
58
|
-
query
|
59
|
+
query.filters = encodedFilters
|
59
60
|
} else {
|
60
|
-
delete query
|
61
|
+
delete query.filters
|
61
62
|
}
|
62
63
|
|
63
64
|
url.query(query)
|
data/app/packs/js/toastr.js
CHANGED
@@ -4,6 +4,7 @@ toastr.options.showDuration = 400
|
|
4
4
|
toastr.options.hideDuration = 400
|
5
5
|
toastr.options.closeButton = true
|
6
6
|
toastr.options.positionClass = 'toast-bottom-right'
|
7
|
+
// eslint-disable-next-line max-len
|
7
8
|
toastr.options.closeHtml = '<button class="mt-2 mr-1"><svg class="w-4 h-4 text-gray-700" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" /></svg></button>'
|
8
9
|
|
9
10
|
window.toastr = toastr
|
data/avo.gemspec
CHANGED
@@ -1,47 +1,47 @@
|
|
1
|
-
$:.push File.expand_path(
|
1
|
+
$:.push File.expand_path("lib", __dir__)
|
2
2
|
|
3
3
|
# Maintain your gem's version:
|
4
|
-
require
|
4
|
+
require "avo/version"
|
5
5
|
|
6
6
|
# Describe your gem and declare its dependencies:
|
7
7
|
Gem::Specification.new do |spec|
|
8
|
-
spec.name
|
9
|
-
spec.version
|
10
|
-
spec.authors
|
11
|
-
spec.email
|
12
|
-
spec.homepage
|
13
|
-
spec.summary
|
14
|
-
spec.description =
|
15
|
-
spec.license
|
8
|
+
spec.name = "avo"
|
9
|
+
spec.version = Avo::VERSION
|
10
|
+
spec.authors = ["Adrian Marin", "Mihai Marin"]
|
11
|
+
spec.email = ["avo@avohq.io"]
|
12
|
+
spec.homepage = "https://avohq.io"
|
13
|
+
spec.summary = "Configuration-based, no-maintenance, extendable Ruby on Rails admin."
|
14
|
+
spec.description = "Avo is a beautiful next-generation framework that empowers you, the developer, to create fantastic admin panels for your Ruby on Rails apps with the flexibility to fit your needs as you grow."
|
15
|
+
spec.license = "Commercial"
|
16
16
|
|
17
17
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
18
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
19
19
|
if spec.respond_to?(:metadata)
|
20
|
-
spec.metadata[
|
21
|
-
spec.metadata[
|
22
|
-
spec.metadata[
|
23
|
-
spec.metadata[
|
24
|
-
spec.metadata[
|
20
|
+
spec.metadata["bug_tracker_uri"] = "https://github.com/avo-hq/avo/issues"
|
21
|
+
spec.metadata["changelog_uri"] = "https://avohq.io/releases"
|
22
|
+
spec.metadata["documentation_uri"] = "https://docs.avohq.io"
|
23
|
+
spec.metadata["homepage_uri"] = "https://avohq.io"
|
24
|
+
spec.metadata["source_code_uri"] = "https://github.com/avo-hq/avo"
|
25
25
|
else
|
26
|
-
raise
|
27
|
-
|
26
|
+
raise "RubyGems 2.0 or newer is required to protect against " \
|
27
|
+
"public gem pushes."
|
28
28
|
end
|
29
29
|
|
30
30
|
spec.post_install_message = "Thank you for using Avo! Docs are available at https://docs.avohq.io"
|
31
31
|
|
32
|
-
spec.files = Dir[
|
32
|
+
spec.files = Dir["{bin,app,config,db,lib,public}/**/*", "MIT-LICENSE", "Rakefile", "README.md", "avo.gemspec", "Gemfile", "Gemfile.lock"]
|
33
33
|
|
34
|
-
spec.add_dependency
|
35
|
-
spec.add_dependency
|
36
|
-
spec.add_dependency
|
37
|
-
spec.add_dependency
|
38
|
-
spec.add_dependency
|
39
|
-
spec.add_dependency
|
40
|
-
spec.add_dependency
|
41
|
-
spec.add_dependency
|
42
|
-
spec.add_dependency
|
43
|
-
spec.add_dependency
|
44
|
-
spec.add_dependency
|
45
|
-
spec.add_dependency
|
46
|
-
spec.add_dependency
|
34
|
+
spec.add_dependency "rails", ">= 6.0"
|
35
|
+
spec.add_dependency "pagy"
|
36
|
+
spec.add_dependency "zeitwerk"
|
37
|
+
spec.add_dependency "inline_svg"
|
38
|
+
spec.add_dependency "webpacker"
|
39
|
+
spec.add_dependency "countries"
|
40
|
+
spec.add_dependency "pundit"
|
41
|
+
spec.add_dependency "httparty"
|
42
|
+
spec.add_dependency "active_link_to"
|
43
|
+
spec.add_dependency "image_processing"
|
44
|
+
spec.add_dependency "view_component"
|
45
|
+
spec.add_dependency "hotwire-rails"
|
46
|
+
spec.add_dependency "addressable"
|
47
47
|
end
|
@@ -25,7 +25,7 @@ module InlineSvg
|
|
25
25
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
26
26
|
|
27
27
|
http.request(Net::HTTP::Get.new(file_path)).body
|
28
|
-
rescue
|
28
|
+
rescue => e
|
29
29
|
Rails.logger.error "[inline_svg] Error fetching #{@filename} from webpack-dev-server: #{e}"
|
30
30
|
raise
|
31
31
|
end
|
data/config/initializers/pagy.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require
|
1
|
+
require "pagy/extras/trim"
|
data/config/routes.rb
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
Avo::Engine.routes.draw do
|
2
|
-
root
|
2
|
+
root "home#index"
|
3
3
|
|
4
|
-
get
|
4
|
+
get "resources", to: redirect("/avo")
|
5
5
|
|
6
|
-
scope
|
6
|
+
scope "resources", as: "resources" do
|
7
7
|
# Attachments
|
8
|
-
get
|
9
|
-
delete
|
8
|
+
get "/:resource_name/:id/active_storage_attachments/:attachment_name/:signed_attachment_id", to: "attachments#show"
|
9
|
+
delete "/:resource_name/:id/active_storage_attachments/:attachment_name/:signed_attachment_id", to: "attachments#destroy"
|
10
10
|
|
11
11
|
# Actions
|
12
|
-
get
|
13
|
-
post
|
12
|
+
get "/:resource_name(/:id)/actions/:action_id", to: "actions#show"
|
13
|
+
post "/:resource_name(/:id)/actions/:action_id", to: "actions#handle"
|
14
14
|
|
15
15
|
# Generate resource routes as below:
|
16
16
|
# resources :posts
|
17
17
|
instance_eval(&Avo::App.draw_routes)
|
18
18
|
|
19
19
|
# Relations
|
20
|
-
get
|
21
|
-
get
|
22
|
-
get
|
23
|
-
post
|
24
|
-
delete
|
20
|
+
get "/:resource_name/:id/:related_name/new", to: "relations#new"
|
21
|
+
get "/:resource_name/:id/:related_name/", to: "relations#index"
|
22
|
+
get "/:resource_name/:id/:related_name/:related_id", to: "relations#show"
|
23
|
+
post "/:resource_name/:id/:related_name", to: "relations#create"
|
24
|
+
delete "/:resource_name/:id/:related_name/:related_id", to: "relations#destroy"
|
25
25
|
end
|
26
26
|
|
27
27
|
# get '/avo-api/search', to: 'search#index'
|
data/config/spring.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
Spring.application_root =
|
1
|
+
Spring.application_root = "./spec/dummy"
|
2
2
|
Spring.watch(
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
".ruby-version",
|
4
|
+
".rbenv-vars",
|
5
|
+
"tmp/restart.txt",
|
6
|
+
"tmp/caching-dev.txt"
|
7
7
|
)
|
data/db/factories.rb
CHANGED
@@ -4,7 +4,7 @@ FactoryBot.define do
|
|
4
4
|
last_name { Faker::Name.last_name }
|
5
5
|
email { Faker::Internet.email }
|
6
6
|
password { Faker::Internet.password }
|
7
|
-
roles { {
|
7
|
+
roles { {admin: false, manager: [true, false].sample, writer: [true, false].sample} }
|
8
8
|
birthday { Faker::Date.birthday(min_age: 18, max_age: 65) }
|
9
9
|
custom_css { ".header {\n color: red;\n}" }
|
10
10
|
end
|
@@ -22,8 +22,6 @@ FactoryBot.define do
|
|
22
22
|
published_at do
|
23
23
|
if [false, true].sample
|
24
24
|
Time.now - rand(10...365).days
|
25
|
-
else
|
26
|
-
nil
|
27
25
|
end
|
28
26
|
end
|
29
27
|
end
|
@@ -31,12 +29,12 @@ FactoryBot.define do
|
|
31
29
|
factory :project do
|
32
30
|
name { Faker::App.name }
|
33
31
|
status { [:closed, :rejected, :failed, :loading, :running, :waiting].sample }
|
34
|
-
stage { [
|
32
|
+
stage { ["Discovery", "Idea", "Done", "On hold", "Cancelled"].sample }
|
35
33
|
budget { Faker::Number.decimal(l_digits: 4) }
|
36
34
|
country { Faker::Address.country_code }
|
37
35
|
description { Faker::Markdown.sandwich(sentences: 5) }
|
38
36
|
users_required { Faker::Number.between(from: 10, to: 100) }
|
39
37
|
started_at { Time.now - rand(10...365).days }
|
40
|
-
meta { [{
|
38
|
+
meta { [{foo: "bar", hey: "hi"}, {bar: "baz"}, {hoho: "hohoho"}].sample }
|
41
39
|
end
|
42
40
|
end
|
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
|