tramway-admin 1.19.0.2 → 1.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/controllers/tramway/admin/application_controller.rb +5 -2
- data/app/controllers/tramway/admin/records_controller.rb +1 -0
- data/app/views/layouts/tramway/admin/shared/_navbar.html.haml +2 -2
- data/lib/tramway/admin.rb +8 -64
- data/lib/tramway/admin/additional_buttons.rb +11 -0
- data/lib/tramway/admin/records_models.rb +39 -0
- data/lib/tramway/admin/singleton_models.rb +22 -0
- data/lib/tramway/admin/version.rb +1 -1
- metadata +18 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 702d94df42264ec7071d530f1ebc90de8ac9aaf381509476b1cb0b3b4761bdfb
|
4
|
+
data.tar.gz: ba7ef0a0220664b4db23509cd29a445cc29c7c7ac39a6ab799a8fe43370fa38c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 007abdd45e940b99aca62a1b0ef3ec6106d9be2a039f2f4a426adb510edd6efb8915ddda257d6d0939edb672427982a6df36b637c7f90b11a7442a768a544dd7
|
7
|
+
data.tar.gz: 60e457aad9172456e90dc276588cd9b80179facd370441e550349c678eba13d108be043a4fa62e63ff2a96523e67a470b5ddd3af4c87e7d12d519b76dff85bf2
|
@@ -31,7 +31,9 @@ module Tramway
|
|
31
31
|
|
32
32
|
def collections_counts
|
33
33
|
@counts = decorator_class.collections.reduce({}) do |hash, collection|
|
34
|
-
|
34
|
+
records = model_class.active.send(collection)
|
35
|
+
records = records.send "#{current_user.role}_scope", current_user.id unless current_user.role.admin?
|
36
|
+
hash.merge! collection => records.count
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
@@ -88,7 +90,8 @@ module Tramway
|
|
88
90
|
end
|
89
91
|
|
90
92
|
def available_models_given?
|
91
|
-
|
93
|
+
models = ::Tramway::Admin.available_models(role: current_user.role)
|
94
|
+
models.any? && params[:model].in?(models.map(&:to_s))
|
92
95
|
end
|
93
96
|
|
94
97
|
def singleton_models_given?
|
@@ -6,6 +6,7 @@ class Tramway::Admin::RecordsController < ::Tramway::Admin::ApplicationControlle
|
|
6
6
|
records = model_class.active.order(id: :desc).send scope
|
7
7
|
records = records.full_text_search params[:search] if params[:search]
|
8
8
|
records = records.ransack(params[:filter]).result if params[:filter].present?
|
9
|
+
records = records.send "#{current_user.role}_scope", current_user.id unless current_user.role.admin?
|
9
10
|
@records = decorator_class.decorate records.page params[:page]
|
10
11
|
end
|
11
12
|
|
@@ -9,9 +9,9 @@
|
|
9
9
|
.navbar-collapse.collapse#navbar
|
10
10
|
- if signed_in?
|
11
11
|
%ul.navbar-nav
|
12
|
-
- ::Tramway::Admin.singleton_models_for(@application_engine || @application.name)&.each do |model|
|
12
|
+
- ::Tramway::Admin.singleton_models_for(@application_engine || @application.name, role: current_user.role)&.each do |model|
|
13
13
|
= model_menu_item model: model, route: ::Tramway::Admin::Engine.routes.url_helpers.singleton_path(model: model)
|
14
|
-
- ::Tramway::Admin.available_models_for(@application_engine || @application.name)&.each do |model|
|
14
|
+
- ::Tramway::Admin.available_models_for(@application_engine || @application.name, role: current_user.role)&.each do |model|
|
15
15
|
= model_menu_item model: model, route: ::Tramway::Admin::Engine.routes.url_helpers.records_path(model: model, scope: decorator_class(model).collections.first)
|
16
16
|
%ul.nav.navbar-nav.ml-auto
|
17
17
|
- if signed_in?
|
data/lib/tramway/admin.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'tramway/admin/engine'
|
4
|
+
require 'tramway/admin/singleton_models'
|
5
|
+
require 'tramway/admin/records_models'
|
6
|
+
require 'tramway/admin/additional_buttons'
|
4
7
|
require 'tramway/error'
|
5
8
|
|
6
9
|
module Tramway
|
@@ -8,69 +11,10 @@ module Tramway
|
|
8
11
|
|
9
12
|
module Admin
|
10
13
|
class << self
|
11
|
-
def set_available_models(*models, project:)
|
12
|
-
@available_models ||= {}
|
13
|
-
@available_models[project] ||= []
|
14
|
-
@available_models[project] += models
|
15
|
-
end
|
16
|
-
|
17
|
-
def available_models_for(project)
|
18
|
-
if project_is_engine?(project)
|
19
|
-
get_models_by_key(@available_models, project) + engine_class(project).dependencies.map do |dependency|
|
20
|
-
if @available_models[dependency].present?
|
21
|
-
@available_models[dependency]
|
22
|
-
else
|
23
|
-
error = Tramway::Error.new(
|
24
|
-
plugin: :admin,
|
25
|
-
method: :available_models_for,
|
26
|
-
message: "There is no dependency `#{dependency}` for plugin: #{project}. Please, check file `tramway-#{project}/lib/tramway/#{project}/#{project}.rb`"
|
27
|
-
)
|
28
|
-
raise error
|
29
|
-
end
|
30
|
-
end.flatten.compact
|
31
|
-
else
|
32
|
-
get_models_by_key(@available_models, project)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def available_models
|
37
|
-
if @available_models
|
38
|
-
@available_models.values.flatten
|
39
|
-
else
|
40
|
-
error = Tramway::Error.new(plugin: :admin, method: :available_models, message: 'List of available_models is empty. You should add some of them using `::Tramway::Admin.set_available_models(*list_of_classes, project: :your_project_name)` in `config/initializers/tramway.rb`')
|
41
|
-
raise error.message
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def set_singleton_models(*models, project:)
|
46
|
-
@singleton_models ||= {}
|
47
|
-
@singleton_models[project] ||= []
|
48
|
-
@singleton_models[project] += models
|
49
|
-
end
|
50
14
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
@singleton_models[dependency]
|
55
|
-
end.flatten.compact
|
56
|
-
else
|
57
|
-
get_models_by_key(@singleton_models, project)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def singleton_models
|
62
|
-
@singleton_models&.values&.flatten || []
|
63
|
-
end
|
64
|
-
|
65
|
-
def set_additional_buttons(buttons, project:)
|
66
|
-
@additional_buttons ||= {}
|
67
|
-
@additional_buttons[project] ||= {}
|
68
|
-
@additional_buttons[project].merge! buttons
|
69
|
-
end
|
70
|
-
|
71
|
-
def additional_buttons(view: nil, record: nil, project: nil)
|
72
|
-
@additional_buttons&.dig record, view
|
73
|
-
end
|
15
|
+
include ::Tramway::Admin::RecordsModels
|
16
|
+
include ::Tramway::Admin::SingletonModels
|
17
|
+
include ::Tramway::Admin::AdditionalButtons
|
74
18
|
|
75
19
|
attr_reader :customized_admin_navbar
|
76
20
|
|
@@ -83,8 +27,8 @@ module Tramway
|
|
83
27
|
engine_class(project)
|
84
28
|
end
|
85
29
|
|
86
|
-
def get_models_by_key(checked_models, project)
|
87
|
-
checked_models && checked_models != [] && checked_models[project
|
30
|
+
def get_models_by_key(checked_models, project, role)
|
31
|
+
checked_models && checked_models != [] && checked_models[project][role] || []
|
88
32
|
end
|
89
33
|
|
90
34
|
def set_notificable_queries(**queries)
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Tramway::Admin::AdditionalButtons
|
2
|
+
def set_additional_buttons(buttons, project:)
|
3
|
+
@additional_buttons ||= {}
|
4
|
+
@additional_buttons[project] ||= {}
|
5
|
+
@additional_buttons[project].merge! buttons
|
6
|
+
end
|
7
|
+
|
8
|
+
def additional_buttons(view: nil, record: nil, project: nil)
|
9
|
+
@additional_buttons&.dig record, view
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Tramway::Admin::RecordsModels
|
2
|
+
def set_available_models(*models, project:, role: :admin)
|
3
|
+
@available_models ||= {}
|
4
|
+
@available_models[project] ||= {}
|
5
|
+
@available_models[project][role] ||= []
|
6
|
+
@available_models[project][role] += models
|
7
|
+
@available_models = @available_models.with_indifferent_access
|
8
|
+
end
|
9
|
+
|
10
|
+
def available_models_for(project, role: :admin)
|
11
|
+
models = get_models_by_key(@available_models, project, role)
|
12
|
+
if project_is_engine?(project)
|
13
|
+
models += engine_class(project).dependencies.map do |dependency|
|
14
|
+
if @available_models[dependency].present?
|
15
|
+
@available_models[dependency]
|
16
|
+
else
|
17
|
+
error = Tramway::Error.new(
|
18
|
+
plugin: :admin,
|
19
|
+
method: :available_models_for,
|
20
|
+
message: "There is no dependency `#{dependency}` for plugin: #{project}. Please, check file `tramway-#{project}/lib/tramway/#{project}/#{project}.rb`"
|
21
|
+
)
|
22
|
+
raise error
|
23
|
+
end
|
24
|
+
end.flatten.compact
|
25
|
+
end
|
26
|
+
models
|
27
|
+
end
|
28
|
+
|
29
|
+
def available_models(role:)
|
30
|
+
if @available_models
|
31
|
+
@available_models.map do |projects|
|
32
|
+
projects[1][role]
|
33
|
+
end.flatten
|
34
|
+
else
|
35
|
+
error = Tramway::Error.new(plugin: :admin, method: :available_models, message: 'List of available_models is empty. You should add some of them using `::Tramway::Admin.set_available_models(*list_of_classes, project: :your_project_name)` in `config/initializers/tramway.rb`')
|
36
|
+
raise error.message
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Tramway::Admin::SingletonModels
|
2
|
+
def set_singleton_models(*models, project:, role: :admin)
|
3
|
+
@singleton_models ||= {}
|
4
|
+
@singleton_models[project] ||= {}
|
5
|
+
@singleton_models[project][role] ||= []
|
6
|
+
@singleton_models[project][role] += models
|
7
|
+
end
|
8
|
+
|
9
|
+
def singleton_models_for(project, role: :admin)
|
10
|
+
models = get_models_by_key(@singleton_models, project, role)
|
11
|
+
if project_is_engine?(project)
|
12
|
+
models += engine_class(project).dependencies.map do |dependency|
|
13
|
+
@singleton_models[dependency]
|
14
|
+
end.flatten.compact
|
15
|
+
end
|
16
|
+
models
|
17
|
+
end
|
18
|
+
|
19
|
+
def singleton_models
|
20
|
+
@singleton_models&.values&.flatten || []
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tramway-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: '1.20'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pavel Kalashnikov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-01-
|
11
|
+
date: 2020-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bootstrap-kaminari-views
|
@@ -28,20 +28,20 @@ dependencies:
|
|
28
28
|
name: copyright_mafa
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.1.2
|
34
|
-
- - "
|
34
|
+
- - "~>"
|
35
35
|
- !ruby/object:Gem::Version
|
36
36
|
version: 0.1.2
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
|
-
- - "
|
41
|
+
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: 0.1.2
|
44
|
-
- - "
|
44
|
+
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 0.1.2
|
47
47
|
- !ruby/object:Gem::Dependency
|
@@ -68,20 +68,20 @@ dependencies:
|
|
68
68
|
name: kaminari
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
70
70
|
requirements:
|
71
|
-
- - "
|
71
|
+
- - ">="
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: 1.1.1
|
74
|
-
- - "
|
74
|
+
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: 1.1.1
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - "
|
81
|
+
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: 1.1.1
|
84
|
-
- - "
|
84
|
+
- - "~>"
|
85
85
|
- !ruby/object:Gem::Version
|
86
86
|
version: 1.1.1
|
87
87
|
- !ruby/object:Gem::Dependency
|
@@ -116,20 +116,20 @@ dependencies:
|
|
116
116
|
name: state_machine_buttons
|
117
117
|
requirement: !ruby/object:Gem::Requirement
|
118
118
|
requirements:
|
119
|
-
- - "
|
119
|
+
- - ">="
|
120
120
|
- !ruby/object:Gem::Version
|
121
121
|
version: 0.4.1
|
122
|
-
- - "
|
122
|
+
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: 0.4.1
|
125
125
|
type: :runtime
|
126
126
|
prerelease: false
|
127
127
|
version_requirements: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: 0.4.1
|
132
|
-
- - "
|
132
|
+
- - "~>"
|
133
133
|
- !ruby/object:Gem::Version
|
134
134
|
version: 0.4.1
|
135
135
|
description: Engine for admin
|
@@ -268,8 +268,11 @@ files:
|
|
268
268
|
- config/routes.rb
|
269
269
|
- lib/tasks/tramway/admin_tasks.rake
|
270
270
|
- lib/tramway/admin.rb
|
271
|
+
- lib/tramway/admin/additional_buttons.rb
|
271
272
|
- lib/tramway/admin/engine.rb
|
272
273
|
- lib/tramway/admin/record_routes_helper.rb
|
274
|
+
- lib/tramway/admin/records_models.rb
|
275
|
+
- lib/tramway/admin/singleton_models.rb
|
273
276
|
- lib/tramway/admin/version.rb
|
274
277
|
homepage: https://github.com/kalashnikovisme/tramway-dev
|
275
278
|
licenses:
|
@@ -290,7 +293,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
290
293
|
- !ruby/object:Gem::Version
|
291
294
|
version: '0'
|
292
295
|
requirements: []
|
293
|
-
rubygems_version: 3.
|
296
|
+
rubygems_version: 3.0.3
|
294
297
|
signing_key:
|
295
298
|
specification_version: 4
|
296
299
|
summary: Engine for admin
|