tramway-admin 1.19.0.2 → 1.20
Sign up to get free protection for your applications and to get access to all the features.
- 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
|