tramway-admin 1.26.1.3 → 1.27

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 478a7c86513ae6f6ad86450d01de8dbf2a4d94a546139c9ec45c6b9c9fe38095
4
- data.tar.gz: 44d0ac0409b9443cd633800f0daf9aa2693e892dcd9f460f8389c070ab152c25
3
+ metadata.gz: 60b354696526340affbff03705102d68483b44d47961a4a8670b7c31e83fcb44
4
+ data.tar.gz: 5eb95f5f0ff81ebf58943bf158fd95b72d45bf92fb001a656db86bcb746d82a5
5
5
  SHA512:
6
- metadata.gz: 35e5136e3916c892f3ad5f31a84d92ad95fb7fb1df0b14aaf646cab6a439461f011f945c633e3ca26bc62d06fc48da4524f26dfabd3e9d4b229e5d24e93929e1
7
- data.tar.gz: 63a20290bcbdf8fe72d511aa413f2b43a45e3f5b38579c0960b2a3e89ca8a912597dcc3077c0baf33dc6f1ac76bfb917b4ea3ea5bd07c3010745f0d359f87927
6
+ metadata.gz: ceb8b3016c5aa58f01e55841670dae17bb547ef05c4b82bf567ba624cc6a9221348fbc3542e61b02813a6beb5c7e9fc003cecd5ed1d5b0a3221f3b7d462470d8
7
+ data.tar.gz: b7783ff8430c982ae818c0bd8fb2e74ae91b90b3fab8d7bcfef083d6cd1c21b34731ec1be934aeb95fdb23c9e9cf2daa518b14a00eef2fbdd10998bf43cb3931
data/README.md CHANGED
@@ -202,6 +202,14 @@ To add notification to application, you need just set queries in initializers.
202
202
  end
203
203
  ```
204
204
 
205
+ **NOTE:** Proc with `current_user` argument is expecting. If you don't need `current_user`, just name do something like that:
206
+
207
+ ```ruby
208
+ ::Tramway::Admin.set_notificable_queries new_participants: -> (_current_user) do
209
+ # some code which does not need current_user
210
+ end
211
+ ```
212
+
205
213
  ## Admin Main Page management
206
214
 
207
215
  Start page of admin panel contains only `application.name` by default. To manage it just set `Tramway::Admin.welcome_page_actions` with some lambda and set `@content` variable with HTML.
@@ -21,7 +21,7 @@ module Tramway
21
21
  protected
22
22
 
23
23
  def check_available!
24
- raise 'Model is not available' unless model_given?
24
+ raise 'Model or Form is not available' if !model_given? && !form_given?
25
25
  end
26
26
 
27
27
  def check_available_scope!
@@ -68,7 +68,7 @@ module Tramway
68
68
  include Tramway::ClassNameHelpers
69
69
 
70
70
  def model_class
71
- model_class_name(params[:model])
71
+ model_class_name(params[:model] || params[:form])
72
72
  end
73
73
 
74
74
  def decorator_class
@@ -83,6 +83,10 @@ module Tramway
83
83
  available_models_given? || singleton_models_given?
84
84
  end
85
85
 
86
+ def form_given?
87
+ Tramway::Admin.forms.include? params[:form].underscore.sub(/^admin\//, '').sub(/_form$/, '')
88
+ end
89
+
86
90
  def available_scope_given?
87
91
  params[:scope].present? && params[:scope].in?(decorator_class.collections.map(&:to_s))
88
92
  end
@@ -0,0 +1,21 @@
1
+ class Tramway::Admin::HasAndBelongsToManyRecordsController < ::Tramway::Admin::ApplicationController
2
+ def create
3
+ base_object = params[:model_class].constantize.find params[:object_id]
4
+ record_form = params[:form].constantize.new base_object
5
+ if record_form.submit params[params[:model_class].underscore]
6
+ redirect_to params[:redirect].present? ? params[:redirect] : record_path(base_object, model: base_object.class)
7
+ else
8
+ redirect_to params[:redirect].present? ? params[:redirect] : record_path(base_object, model: base_object.class)
9
+ end
10
+ end
11
+
12
+ def destroy
13
+ base_object = params[:model_class].constantize.find params[:object_id]
14
+ record_form = params[:form].constantize.new base_object
15
+ if record_form.submit params[:id]
16
+ redirect_to params[:redirect].present? ? params[:redirect] : record_path(base_object, model: base_object.class)
17
+ else
18
+ redirect_to params[:redirect].present? ? params[:redirect] : record_path(base_object, model: base_object.class)
19
+ end
20
+ end
21
+ end
@@ -4,6 +4,6 @@ class Tramway::Admin::WelcomeController < Tramway::Admin::ApplicationController
4
4
  skip_before_action :check_available!
5
5
 
6
6
  def index
7
- self.instance_exec(&::Tramway::Admin.welcome_page_actions) if ::Tramway::Admin.welcome_page_actions.present?
7
+ instance_exec(&::Tramway::Admin.welcome_page_actions) if ::Tramway::Admin.welcome_page_actions.present?
8
8
  end
9
9
  end
@@ -0,0 +1,15 @@
1
+ module Tramway::Admin::ActionsHelper
2
+ def destroy_is_available?(association_object, main_object)
3
+ ::Tramway::Admin.action_is_available?(
4
+ association_object,
5
+ project: (@application_engine || @application.name),
6
+ model: association_object.model.class,
7
+ role: current_user.role,
8
+ action: :destroy
9
+ )
10
+ end
11
+
12
+ def habtm_destroy_is_available?(association_object, main_object)
13
+ ::Tramway::Admin.forms.include?("#{main_object.model.class.to_s.underscore.pluralize}/remove_#{association_object.model.class.to_s.underscore}")
14
+ end
15
+ end
@@ -14,6 +14,7 @@ module Tramway
14
14
  include ::Tramway::Admin::NavbarHelper
15
15
  include ::Tramway::Admin::InputsHelper
16
16
  include ::Tramway::Admin::FocusGeneratorHelper
17
+ include ::Tramway::Admin::ActionsHelper
17
18
  include ::Tramway::Collections::Helper
18
19
  include ::Tramway::Core::CopyToClipboardHelper
19
20
 
@@ -26,6 +26,8 @@
26
26
  - object.attributes.each do |attribute_name, value|
27
27
  = render 'tramway/admin/shared/show/attribute_tr', attribute_name: attribute_name, value: value, object: object
28
28
  - object.associations(:has_one).each do |association|
29
- = render 'tramway/admin/shared/show/associations', object: object, association: association
29
+ = render 'tramway/admin/shared/show/associations/row', object: object, association: association
30
30
  - object.associations(:has_many).each do |association|
31
- = render 'tramway/admin/shared/show/associations', object: object, association: association
31
+ = render 'tramway/admin/shared/show/associations/row', object: object, association: association
32
+ - object.associations(:has_and_belongs_to_many).each do |association|
33
+ = render 'tramway/admin/shared/show/associations/habtm_row', object: object, association: association
@@ -0,0 +1,11 @@
1
+ - if object.class.show_associations.map(&:to_s).include? association.name.to_s
2
+ %tr
3
+ %td
4
+ = model_class.human_attribute_name association.name
5
+ %hr
6
+ - association_form = object.send("add_#{association.name}_form")
7
+ = simple_form_for association_form, url: { controller: :has_and_belongs_to_many_records, action: :create, form: association_form.class, model_class: model_class, object_id: object.id }, method: :post do |f|
8
+ = f.association association_form.associations.first, label: false
9
+ = f.button :submit, "#{I18n.t('helpers.actions.add')} #{model_class.human_attribute_name(association.name).singularize.downcase}", class: 'btn-success'
10
+ %td{ colspan: 2 }
11
+ = render 'tramway/admin/shared/show/associations/list', object: object, association: association
@@ -0,0 +1,18 @@
1
+ - association_state_machines = object.send("#{association.name}_state_machines")
2
+ %table.table.table-striped.table-bordered
3
+ - object.send(association.name)&.each do |association_object|
4
+ %tr{ id: "#{association.name}_#{association_object.id}" }
5
+ %td
6
+ = association_object.id
7
+ %td
8
+ = link_to association_object.name, record_path(association_object.id, model: association.options[:class_name])
9
+ %td
10
+ - association_state_machines.each do |state_method|
11
+ = state_events_buttons association_object, state_method: state_method, model_param_name: :record, controller: 'tramway/admin/records', action: :update, parameters: { redirect: current_model_record_path(object.id), model: association_object.class.model_name }, button_options: { class: :smart_button }
12
+ %td
13
+ - if destroy_is_available? association_object, object
14
+ = delete_button url: record_path(association_object.id, model: association.options[:class_name], redirect: current_model_record_path(object.id)), button_options: { class: 'btn btn-xs btn-danger delete' } do
15
+ = fa_icon 'trash-alt'
16
+ - if habtm_destroy_is_available? association_object, object
17
+ = delete_button url: has_and_belongs_to_many_record_path(association_object.id, model_class: object.model.class, object_id: object.id, form: "Admin::#{object.model.class.to_s.pluralize}::Remove#{association_object.model.class.to_s}Form", redirect: current_model_record_path(object.id)), button_options: { class: 'btn btn-xs btn-danger delete' } do
18
+ = fa_icon 'trash-alt'
@@ -0,0 +1,8 @@
1
+ - if object.class.show_associations.map(&:to_s).include? association.name.to_s
2
+ %tr
3
+ %td
4
+ = model_class.human_attribute_name association.name
5
+ %hr
6
+ = link_to "#{I18n.t('helpers.actions.add')} #{model_class.human_attribute_name(association.name).singularize.downcase}", new_associated_record_path(association: association, object: object, as: object.send("#{association.name}_as")), class: 'btn btn-primary'
7
+ %td{ colspan: 2 }
8
+ = render 'tramway/admin/shared/show/associations/list', object: object, association: association
data/config/routes.rb CHANGED
@@ -8,4 +8,5 @@ Tramway::Admin::Engine.routes.draw do
8
8
 
9
9
  resources :records
10
10
  resource :singleton, only: %i[new create show edit update]
11
+ resources :has_and_belongs_to_many_records, only: [ :create, :destroy]
11
12
  end
data/lib/tramway/admin.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require 'tramway/admin/engine'
4
4
  require 'tramway/admin/singleton_models'
5
5
  require 'tramway/admin/records_models'
6
+ require 'tramway/admin/forms'
6
7
  require 'tramway/admin/additional_buttons'
7
8
  require 'tramway/admin/notifications'
8
9
  require 'tramway/admin/welcome_page_actions'
@@ -17,6 +18,7 @@ module Tramway
17
18
  include ::Tramway::Admin::RecordsModels
18
19
  include ::Tramway::Admin::SingletonModels
19
20
  include ::Tramway::Admin::AdditionalButtons
21
+ include ::Tramway::Admin::Forms
20
22
  include ::Tramway::Admin::Notifications
21
23
  include ::Tramway::Admin::WelcomePageActions
22
24
  include ::Tramway::Admin::Navbar
@@ -55,7 +57,7 @@ module Tramway
55
57
  return false unless availability.present?
56
58
  return true if availability.is_a? Symbol
57
59
 
58
- return availability.values.first.call record
60
+ availability.values.first.call record
59
61
  end
60
62
 
61
63
  def select_actions(project:, role:, model:)
@@ -0,0 +1,3 @@
1
+ module Tramway::Admin::Forms
2
+ attr_accessor :forms
3
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Tramway::Admin::Navbar
2
4
  def navbar_structure(*links)
3
5
  @navbar_structure ||= links
@@ -7,7 +7,7 @@ module Tramway::Admin::RecordsModels
7
7
  @available_models[project][role] ||= {}
8
8
  models.each do |model|
9
9
  if model.class == Class
10
- @available_models[project][role].merge! model => [ :index, :show, :update, :create, :destroy ]
10
+ @available_models[project][role].merge! model => %i[index show update create destroy]
11
11
  elsif model.class == Hash
12
12
  @available_models[project][role].merge! model
13
13
  end
@@ -7,7 +7,7 @@ module Tramway::Admin::SingletonModels
7
7
  @singleton_models[project][role] ||= {}
8
8
  models.each do |model|
9
9
  if model.class == Class
10
- @singleton_models[project][role].merge! model => [ :index, :show, :update, :create, :destroy ]
10
+ @singleton_models[project][role].merge! model => %i[index show update create destroy]
11
11
  elsif model.class == Hash
12
12
  @singleton_models[project][role].merge! model
13
13
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Tramway
4
4
  module Admin
5
- VERSION = '1.26.1.3'
5
+ VERSION = '1.27'
6
6
  end
7
7
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Tramway
2
4
  module Admin
3
5
  module WelcomePageActions
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.26.1.3
4
+ version: '1.27'
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-03-05 00:00:00.000000000 Z
11
+ date: 2020-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bootstrap-kaminari-views
@@ -181,10 +181,12 @@ files:
181
181
  - app/assets/javascripts/tramway/admin/focus.js
182
182
  - app/assets/stylesheets/tramway/admin/application.sass
183
183
  - app/controllers/tramway/admin/application_controller.rb
184
+ - app/controllers/tramway/admin/has_and_belongs_to_many_records_controller.rb
184
185
  - app/controllers/tramway/admin/records_controller.rb
185
186
  - app/controllers/tramway/admin/singletons_controller.rb
186
187
  - app/controllers/tramway/admin/welcome_controller.rb
187
188
  - app/controllers/tramway/export/application_controller.rb
189
+ - app/helpers/tramway/admin/actions_helper.rb
188
190
  - app/helpers/tramway/admin/additional_buttons_builder.rb
189
191
  - app/helpers/tramway/admin/application_helper.rb
190
192
  - app/helpers/tramway/admin/cases_helper.rb
@@ -209,8 +211,10 @@ files:
209
211
  - app/views/tramway/admin/shared/_input.html.haml
210
212
  - app/views/tramway/admin/shared/_show.html.haml
211
213
  - app/views/tramway/admin/shared/errors/server_error.html.haml
212
- - app/views/tramway/admin/shared/show/_associations.html.haml
213
214
  - app/views/tramway/admin/shared/show/_attribute_tr.html.haml
215
+ - app/views/tramway/admin/shared/show/associations/_habtm_row.html.haml
216
+ - app/views/tramway/admin/shared/show/associations/_list.html.haml
217
+ - app/views/tramway/admin/shared/show/associations/_row.html.haml
214
218
  - app/views/tramway/admin/singletons/_form.html.haml
215
219
  - app/views/tramway/admin/singletons/edit.html.haml
216
220
  - app/views/tramway/admin/singletons/new.html.haml
@@ -229,6 +233,7 @@ files:
229
233
  - lib/tramway/admin.rb
230
234
  - lib/tramway/admin/additional_buttons.rb
231
235
  - lib/tramway/admin/engine.rb
236
+ - lib/tramway/admin/forms.rb
232
237
  - lib/tramway/admin/navbar.rb
233
238
  - lib/tramway/admin/notifications.rb
234
239
  - lib/tramway/admin/record_routes_helper.rb
@@ -1,22 +0,0 @@
1
- - if object.class.show_associations.map(&:to_s).include? association.name.to_s
2
- %tr
3
- %td
4
- = model_class.human_attribute_name association.name
5
- %hr
6
- = link_to "#{I18n.t('helpers.actions.add')} #{model_class.human_attribute_name(association.name).singularize.downcase}", new_associated_record_path(association: association, object: object, as: object.send("#{association.name}_as")), class: 'btn btn-primary'
7
- - association_state_machines = object.send("#{association.name}_state_machines")
8
- %td{ colspan: 2 }
9
- %table.table.table-striped.table-bordered
10
- - object.send(association.name)&.each do |association_object|
11
- %tr{ id: "#{association.name}_#{association_object.id}" }
12
- %td
13
- = association_object.id
14
- %td
15
- = link_to association_object.name, record_path(association_object.id, model: association.options[:class_name])
16
- %td
17
- - association_state_machines.each do |state_method|
18
- = state_events_buttons association_object, state_method: state_method, model_param_name: :record, controller: 'tramway/admin/records', action: :update, parameters: { redirect: current_model_record_path(object.id), model: association_object.class.model_name }, button_options: { class: :smart_button }
19
- %td
20
- - if ::Tramway::Admin.action_is_available?(association_object, project: (@application_engine || @application.name), model: association_object.model.class, role: current_user.role, action: :destroy)
21
- = delete_button url: record_path(association_object.id, model: association.options[:class_name], redirect: current_model_record_path(object.id)), button_options: { class: 'btn btn-xs btn-danger delete' } do
22
- = fa_icon 'trash-alt'