tramway 0.1.2 → 0.1.3

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.
Files changed (177) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +12 -893
  4. data/Rakefile +8 -8
  5. data/app/components/tailwind_component.html.haml +0 -0
  6. data/app/components/tailwind_component.rb +6 -0
  7. data/app/components/tailwinds/navbar/button_component.html.haml +1 -0
  8. data/app/components/tailwinds/navbar/button_component.rb +14 -0
  9. data/config/routes.rb +0 -9
  10. data/lib/tasks/tramway_tasks.rake +5 -0
  11. data/lib/tramway/engine.rb +5 -10
  12. data/lib/tramway/version.rb +1 -1
  13. data/lib/tramway.rb +5 -140
  14. metadata +16 -545
  15. data/app/assets/config/tramway_core_manifest.js +0 -2
  16. data/app/assets/images/tramway/mona_lisa_from_prado.jpg +0 -0
  17. data/app/assets/images/tramway/mona_lisa_from_prado_square.jpg +0 -0
  18. data/app/assets/javascripts/bootstrap-datepicker-1.8.0.js +0 -2035
  19. data/app/assets/javascripts/bootstrap-datepicker-1.8.0.ru.min.js +0 -64
  20. data/app/assets/javascripts/ckeditor/config.js +0 -30
  21. data/app/assets/javascripts/ckeditor/plugins/image/dialogs/image.js +0 -1259
  22. data/app/assets/javascripts/ckeditor/plugins/image/icons/hidpi/image.png +0 -0
  23. data/app/assets/javascripts/ckeditor/plugins/image/icons/image.png +0 -0
  24. data/app/assets/javascripts/ckeditor/plugins/image/images/noimage.png +0 -0
  25. data/app/assets/javascripts/ckeditor/plugins/image/lang/en.js +0 -25
  26. data/app/assets/javascripts/ckeditor/plugins/image/lang/ru.js +0 -25
  27. data/app/assets/javascripts/ckeditor/plugins/image/plugin.js +0 -184
  28. data/app/assets/javascripts/ckeditor/plugins/youtube/images/icon-hdpi.png +0 -0
  29. data/app/assets/javascripts/ckeditor/plugins/youtube/images/icon.png +0 -0
  30. data/app/assets/javascripts/ckeditor/plugins/youtube/lang/en.js +0 -25
  31. data/app/assets/javascripts/ckeditor/plugins/youtube/lang/ru.js +0 -25
  32. data/app/assets/javascripts/ckeditor/plugins/youtube/plugin.js +0 -449
  33. data/app/assets/javascripts/tramway/application.js +0 -61
  34. data/app/assets/stylesheets/tramway/application.sass +0 -59
  35. data/app/controllers/tramway/application_controller.rb +0 -142
  36. data/app/controllers/tramway/concerns/auth_management.rb +0 -26
  37. data/app/controllers/tramway/concerns/filtering.rb +0 -43
  38. data/app/controllers/tramway/export/application_controller.rb +0 -5
  39. data/app/controllers/tramway/has_and_belongs_to_many_records_controller.rb +0 -26
  40. data/app/controllers/tramway/records_controller.rb +0 -86
  41. data/app/controllers/tramway/sessions_controller.rb +0 -49
  42. data/app/controllers/tramway/singletons_controller.rb +0 -48
  43. data/app/controllers/tramway/welcome_controller.rb +0 -17
  44. data/app/decorators/tramway/application_decorated_collection.rb +0 -15
  45. data/app/decorators/tramway/application_decorator.rb +0 -124
  46. data/app/decorators/tramway/associations/class_helper.rb +0 -45
  47. data/app/decorators/tramway/associations/object_helper.rb +0 -58
  48. data/app/decorators/tramway/attributes/view_helper.rb +0 -30
  49. data/app/decorators/tramway/concerns/attributes_decorator_helper.rb +0 -97
  50. data/app/decorators/tramway/concerns/table_builder.rb +0 -33
  51. data/app/decorators/tramway/default/values_helper.rb +0 -23
  52. data/app/decorators/tramway/delegating/class_helper.rb +0 -9
  53. data/app/decorators/tramway/user_decorator.rb +0 -49
  54. data/app/forms/admin/tramway/user_form.rb +0 -24
  55. data/app/forms/tramway/application_form.rb +0 -124
  56. data/app/forms/tramway/application_forms/association_class_helpers.rb +0 -7
  57. data/app/forms/tramway/application_forms/association_object_helpers.rb +0 -36
  58. data/app/forms/tramway/application_forms/constant_class_actions.rb +0 -7
  59. data/app/forms/tramway/application_forms/constant_object_actions.rb +0 -20
  60. data/app/forms/tramway/application_forms/frontend.rb +0 -12
  61. data/app/forms/tramway/application_forms/object_helpers.rb +0 -15
  62. data/app/forms/tramway/application_forms/properties_object_helper.rb +0 -16
  63. data/app/forms/tramway/application_forms/submit_helper.rb +0 -26
  64. data/app/forms/tramway/extendable_form.rb +0 -15
  65. data/app/forms/tramway/extendable_forms_helpers/class_builder.rb +0 -34
  66. data/app/forms/tramway/extendable_forms_helpers/ignored_properties_helper.rb +0 -11
  67. data/app/forms/tramway/extendable_forms_helpers/more_properties_helper.rb +0 -31
  68. data/app/forms/tramway/extendable_forms_helpers/properties_helper.rb +0 -16
  69. data/app/forms/tramway/extendable_forms_helpers/submit/class_helpers.rb +0 -18
  70. data/app/forms/tramway/extendable_forms_helpers/submit/object_helpers.rb +0 -21
  71. data/app/forms/tramway/extendable_forms_helpers/validators.rb +0 -40
  72. data/app/forms/tramway/extended_application_form.rb +0 -23
  73. data/app/forms/tramway/form_creator.rb +0 -7
  74. data/app/forms/tramway/session_form.rb +0 -26
  75. data/app/helpers/tramway/actions_helper.rb +0 -45
  76. data/app/helpers/tramway/additional_buttons_builder.rb +0 -12
  77. data/app/helpers/tramway/application_helper.rb +0 -27
  78. data/app/helpers/tramway/cases_helper.rb +0 -13
  79. data/app/helpers/tramway/copy_to_clipboard_helper.rb +0 -11
  80. data/app/helpers/tramway/focus_generator_helper.rb +0 -10
  81. data/app/helpers/tramway/frontend_helper.rb +0 -26
  82. data/app/helpers/tramway/inputs/associations_helper.rb +0 -30
  83. data/app/helpers/tramway/inputs/polymorphic_associations_helper.rb +0 -24
  84. data/app/helpers/tramway/inputs_helper.rb +0 -96
  85. data/app/helpers/tramway/model_helper.rb +0 -7
  86. data/app/helpers/tramway/navbar_helper.rb +0 -11
  87. data/app/helpers/tramway/records_helper.rb +0 -120
  88. data/app/helpers/tramway/russian_cases_helper.rb +0 -26
  89. data/app/helpers/tramway/singleton_helper.rb +0 -12
  90. data/app/helpers/tramway/state_machine_buttons_helper.rb +0 -61
  91. data/app/helpers/tramway/title_helper.rb +0 -25
  92. data/app/inputs/date_picker_input.rb +0 -4
  93. data/app/inputs/multiple_file_input.rb +0 -7
  94. data/app/models/tramway/application_record.rb +0 -62
  95. data/app/models/tramway/user.rb +0 -18
  96. data/app/uploaders/application_uploader.rb +0 -22
  97. data/app/uploaders/file_uploader.rb +0 -4
  98. data/app/uploaders/ico_uploader.rb +0 -7
  99. data/app/uploaders/image_defaults.rb +0 -14
  100. data/app/uploaders/photo_uploader.rb +0 -54
  101. data/app/views/layouts/tramway/application.html.haml +0 -32
  102. data/app/views/layouts/tramway/shared/_navbar.html.haml +0 -46
  103. data/app/views/tramway/404.haml +0 -1
  104. data/app/views/tramway/records/_form.html.haml +0 -22
  105. data/app/views/tramway/records/_list.html.haml +0 -38
  106. data/app/views/tramway/records/_search.html.haml +0 -34
  107. data/app/views/tramway/records/edit.html.haml +0 -1
  108. data/app/views/tramway/records/index.html.haml +0 -31
  109. data/app/views/tramway/records/new.html.haml +0 -1
  110. data/app/views/tramway/records/show.html.haml +0 -1
  111. data/app/views/tramway/sessions/new.html.haml +0 -9
  112. data/app/views/tramway/shared/_input.html.haml +0 -34
  113. data/app/views/tramway/shared/_input_extended.html.haml +0 -14
  114. data/app/views/tramway/shared/_messages.html.haml +0 -10
  115. data/app/views/tramway/shared/_show.html.haml +0 -35
  116. data/app/views/tramway/shared/errors/server_error.html.haml +0 -12
  117. data/app/views/tramway/shared/input_extended_types/_checkbox.html.haml +0 -1
  118. data/app/views/tramway/shared/input_extended_types/_select.html.haml +0 -16
  119. data/app/views/tramway/shared/input_extended_types/_simple.html.haml +0 -4
  120. data/app/views/tramway/shared/input_extended_types/_yes_no.html.haml +0 -4
  121. data/app/views/tramway/shared/show/_attribute_tr.html.haml +0 -9
  122. data/app/views/tramway/shared/show/associations/_habtm_row.html.haml +0 -14
  123. data/app/views/tramway/shared/show/associations/_list.html.haml +0 -21
  124. data/app/views/tramway/shared/show/associations/_row.html.haml +0 -19
  125. data/app/views/tramway/shared/show/associations/_table_row.html.haml +0 -21
  126. data/app/views/tramway/singletons/_form.html.haml +0 -15
  127. data/app/views/tramway/singletons/edit.html.haml +0 -1
  128. data/app/views/tramway/singletons/new.html.haml +0 -1
  129. data/app/views/tramway/singletons/show.html.haml +0 -1
  130. data/app/views/tramway/welcome/index.html.haml +0 -4
  131. data/config/initializers/assets.rb +0 -7
  132. data/config/initializers/ckeditor.rb +0 -9
  133. data/config/initializers/plurals.rb +0 -25
  134. data/config/locales/en/collections.yml +0 -4
  135. data/config/locales/en/date.yml +0 -16
  136. data/config/locales/en/dates.yml +0 -10
  137. data/config/locales/en/helpers.yml +0 -26
  138. data/config/locales/en/locale.yml +0 -11
  139. data/config/locales/en/messages.yml +0 -7
  140. data/config/locales/en/models.yml +0 -9
  141. data/config/locales/en/simple_form_extension.yml +0 -8
  142. data/config/locales/en/state_machines.yml +0 -8
  143. data/config/locales/ru/collections.yml +0 -4
  144. data/config/locales/ru/date.yml +0 -16
  145. data/config/locales/ru/dates.yml +0 -10
  146. data/config/locales/ru/helpers.yml +0 -30
  147. data/config/locales/ru/locale.yml +0 -6
  148. data/config/locales/ru/messages.yml +0 -7
  149. data/config/locales/ru/models.yml +0 -21
  150. data/config/locales/ru/simple_form_extension.yml +0 -8
  151. data/config/locales/ru/state_machines.yml +0 -8
  152. data/lib/string.rb +0 -18
  153. data/lib/tramway/application.rb +0 -10
  154. data/lib/tramway/class_name_helpers.rb +0 -15
  155. data/lib/tramway/collection.rb +0 -9
  156. data/lib/tramway/collections/helper.rb +0 -21
  157. data/lib/tramway/collections.rb +0 -4
  158. data/lib/tramway/error.rb +0 -32
  159. data/lib/tramway/forms.rb +0 -5
  160. data/lib/tramway/generators/install_generator.rb +0 -49
  161. data/lib/tramway/generators/model_generator.rb +0 -105
  162. data/lib/tramway/generators/templates/create_tramway_users.rb +0 -18
  163. data/lib/tramway/generators/templates/decorator.rb.erb +0 -56
  164. data/lib/tramway/generators/templates/form.rb.erb +0 -22
  165. data/lib/tramway/generators/templates/initializers/simple_form.rb +0 -23
  166. data/lib/tramway/generators/templates/initializers/simple_form_bootstrap.rb +0 -133
  167. data/lib/tramway/generators.rb +0 -6
  168. data/lib/tramway/navbar.rb +0 -44
  169. data/lib/tramway/notifications.rb +0 -12
  170. data/lib/tramway/record_routes_helper.rb +0 -23
  171. data/lib/tramway/records_models.rb +0 -60
  172. data/lib/tramway/singleton_models.rb +0 -32
  173. data/lib/tramway/spec/helpers/navbar_helper.rb +0 -7
  174. data/lib/tramway/spec/helpers/tramway_helpers.rb +0 -47
  175. data/lib/tramway/welcome_page_actions.rb +0 -5
  176. data/lib/tramway/yaml/errors.yml +0 -50
  177. data/lib/validators/presence_validator.rb +0 -9
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Tramway::Concerns::AuthManagement
4
- def sign_in(user)
5
- session[:tramway_user_id] = user.id
6
- end
7
-
8
- def sign_out
9
- session[:tramway_user_id] = nil
10
- end
11
-
12
- def signed_in?
13
- current_user
14
- end
15
-
16
- def authenticate_user!
17
- redirect_to Tramway::Engine.routes.url_helpers.new_session_path if !session_path? && !signed_in?
18
- end
19
-
20
- def current_user
21
- user = Tramway::User.find_by id: session[:tramway_user_id]
22
- return false unless user
23
-
24
- Tramway::UserDecorator.decorate user
25
- end
26
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Tramway::Concerns::Filtering
4
- def list_filtering(records)
5
- params[:list_filters]&.each do |filter, _value|
6
- case decorator_class.list_filters[filter.to_sym][:type]
7
- when :select
8
- records = list_filtering_select records, filter
9
- when :dates
10
- records = list_filtering_dates records, filter
11
- end
12
- end
13
-
14
- records
15
- end
16
-
17
- def list_filtering_select(records, filter)
18
- value.present? ? decorator_class.list_filters[filter.to_sym][:query].call(records, value) : records
19
- end
20
-
21
- def list_filtering_dates(records, filter)
22
- begin_date = date_filter :begin, filter
23
- end_date = date_filter :end, filter
24
- if begin_date.present? && end_date.present? && value.present?
25
- decorator_class.list_filters[filter.to_sym][:query].call(records, begin_date, end_date)
26
- else
27
- records
28
- end
29
- end
30
-
31
- def date_filter(type, filter)
32
- params[:list_filters][filter.to_sym]["#{type}_date".to_sym]
33
- end
34
-
35
- def filtering(records)
36
- if params[:filter].present?
37
- params[:filter] = JSON.parse params[:filter] if params[:filter].is_a? String
38
- records.ransack(params[:filter]).result(distinct: true)
39
- else
40
- records
41
- end
42
- end
43
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Tramway::Export::ApplicationController < Tramway::ApplicationController
4
- before_action :authenticate_admin!
5
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Tramway::HasAndBelongsToManyRecordsController < Tramway::ApplicationController
4
- def create
5
- base_object = model_class.find params[:object_id]
6
- @record_form = form_class.new base_object
7
- @sending_params = params[params[:model_class].underscore] || params[form_class.associated_as]
8
- redirect_to path
9
- end
10
-
11
- def destroy
12
- base_object = model_class.find params[:object_id]
13
- @record_form = params[:form].constantize.new base_object
14
- redirect_to path
15
- end
16
-
17
- private
18
-
19
- def path
20
- params[:redirect].present? ? params[:redirect] : record_path(base_object, model: base_object.class)
21
- end
22
-
23
- def form_class
24
- params[:form].constantize
25
- end
26
- end
@@ -1,86 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Tramway::RecordsController < Tramway::ApplicationController
4
- def index
5
- records = model_class.order(id: :desc).send scope
6
- records = full_text_search records
7
- records = filtering records
8
- records = list_filtering records
9
- records = records.public_send current_user_role_scope, current_user.id
10
- @records = decorator_class.decorate records.page params[:page]
11
- end
12
-
13
- def show
14
- @record = decorator_class.decorate model_class.find params[:id]
15
- end
16
-
17
- def new
18
- @record_form = admin_form_class.new model_class.new
19
- end
20
-
21
- def create
22
- @record_form = admin_form_class.new model_class.new
23
- if @record_form.submit params[attributes_key]
24
- redirect_to params[:redirect].present? ? params[:redirect] : record_path(@record_form.model)
25
- else
26
- render :new
27
- end
28
- end
29
-
30
- def edit
31
- @record_form = admin_form_class.new model_class.find params[:id]
32
- end
33
-
34
- def update
35
- @record_form = admin_form_class.new model_class.find params[:id]
36
- if state_event.present?
37
- if record_state_event?
38
- record_make_state_event!
39
- default_redirect
40
- end
41
- elsif @record_form.submit params[attributes_key]
42
- default_redirect
43
- else
44
- render :edit
45
- end
46
- end
47
-
48
- def destroy
49
- record = model_class.find params[:id]
50
- record.destroy
51
- redirect_to params[:redirect].present? ? params[:redirect] : records_path
52
- end
53
-
54
- private
55
-
56
- def default_redirect
57
- redirect_to params[:redirect].present? ? params[:redirect] : record_path(@record_form.model)
58
- end
59
-
60
- def record_state_event?
61
- @record_form.model.public_send("may_#{state_event}?")
62
- end
63
-
64
- def record_make_state_event!
65
- @record_form.model.send("#{state_event}!")
66
- end
67
-
68
- def state_event
69
- params[attributes_key][:aasm_event]
70
- end
71
-
72
- def scope
73
- params[:scope].present? ? params[:scope] : :all
74
- end
75
-
76
- def full_text_search(records)
77
- params[:search].present? ? records.full_text_search(params[:search]) : records
78
- end
79
-
80
- def attributes_key
81
- old_key_name = model_class.to_s.underscore
82
- actual_key_name = :record
83
-
84
- params[old_key_name].present? ? old_key_name : actual_key_name
85
- end
86
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # FIXME: configurate load_path
4
- load "#{Tramway.root}/app/controllers/tramway/concerns/auth_management.rb"
5
-
6
- class Tramway::SessionsController < Tramway::ApplicationController
7
- before_action :redirect_if_signed_in, except: :destroy
8
-
9
- # FIXME: should be included in Tramway::ApplicationController
10
- include Tramway::Concerns::AuthManagement
11
-
12
- def new
13
- @session_form = Tramway::SessionForm.new Tramway::User.new
14
- end
15
-
16
- def create
17
- @session_form = Tramway::SessionForm.new record
18
-
19
- if @session_form.validate params[:user]
20
- sign_in @session_form.model
21
- redirect_to root_path
22
- else
23
- render :new
24
- end
25
- end
26
-
27
- def destroy
28
- root_path = Tramway::Engine.routes.url_helpers.root_path
29
- sign_out
30
-
31
- redirect_to params[:redirect] || root_path
32
- end
33
-
34
- private
35
-
36
- def redirect_if_signed_in
37
- if params[:model].present? && signed_in? && request.env['PATH_INFO'] != Tramway.root_path_for(current_user.class)
38
- redirect_to Tramway.root_path_for(current_user.class)
39
- end
40
- end
41
-
42
- def record
43
- @record ||= params[:model].constantize.find_by email: params[:user][:email]
44
- end
45
-
46
- def root_path
47
- Tramway::Engine.routes.url_helpers.root_path[0..-2]
48
- end
49
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Tramway
4
- class SingletonsController < ApplicationController
5
- def show
6
- if model_class.first.present?
7
- @singleton = decorator_class.decorate model_class.first
8
- else
9
- @singleton_form = admin_form_class.new model_class.new
10
- render :new
11
- nil
12
- end
13
- end
14
-
15
- def edit
16
- @singleton_form = admin_form_class.new model_class.first
17
- end
18
-
19
- def create
20
- @singleton_form = admin_form_class.new model_class.new
21
- if @singleton_form.submit params[:singleton]
22
- redirect_to params[:redirect] || singleton_path(model: params[:model])
23
- else
24
- render :edit
25
- end
26
- end
27
-
28
- def update
29
- @singleton_form = admin_form_class.new model_class.first
30
- if @singleton_form.submit params[:singleton]
31
- redirect_to params[:redirect] || singleton_path(model: params[:model])
32
- else
33
- render :edit
34
- end
35
- end
36
- end
37
-
38
- private
39
-
40
- # FIXME: replace to module
41
- def singleton_path(*args, **options)
42
- super args, options.merge(model: params[:model])
43
- end
44
-
45
- def edit_singleton_path(*args, **options)
46
- super args, options.merge(model: params[:model])
47
- end
48
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # FIXME: configurate load_path
4
- load "#{Tramway.root}/app/controllers/tramway/concerns/auth_management.rb"
5
-
6
- class Tramway::WelcomeController < Tramway::ApplicationController
7
- skip_before_action :check_available!
8
-
9
- # FIXME: should be included in Tramway::ApplicationController
10
- include Tramway::Concerns::AuthManagement
11
-
12
- before_action :authenticate_user!
13
-
14
- def index
15
- instance_exec(&Tramway.welcome_page_actions) if Tramway.welcome_page_actions.present?
16
- end
17
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Tramway::ApplicationDecoratedCollection < Array
4
- def initialize(array, original_array)
5
- @original_array = original_array
6
- super(array)
7
- end
8
-
9
- attr_reader :original_array
10
-
11
- delegate :total_pages, to: :original_array
12
- delegate :total_count, to: :original_array
13
- delegate :current_page, to: :original_array
14
- delegate :limit_value, to: :original_array
15
- end
@@ -1,124 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'tramway/error'
4
- require 'tramway/class_name_helpers'
5
-
6
- class Tramway::ApplicationDecorator
7
- include ActionView::Helpers
8
- include ActionView::Context
9
- include FontAwesome5::Rails::IconHelper
10
- include Tramway::CopyToClipboardHelper
11
- include Tramway::Associations::ObjectHelper
12
- include Tramway::Attributes::ViewHelper
13
- include Tramway::Concerns::TableBuilder
14
- include Tramway::ClassNameHelpers
15
-
16
- def initialize(object)
17
- @object = object
18
- end
19
-
20
- def name
21
- object.try(:name) || object.try(:title) || title
22
- end
23
-
24
- def title
25
- Tramway::Error.raise_error(
26
- :tramway, :application_decorator, :title, :please_implement_title,
27
- class_name: self.class, object_class: object.class
28
- )
29
- end
30
-
31
- def present?
32
- object.present?
33
- end
34
-
35
- def render(view, **locals)
36
- view_name = view.split('/').map.with_index do |dir, index|
37
- if index == view.split('/').length - 1
38
- "_#{dir}"
39
- else
40
- dir
41
- end
42
- end.join('/')
43
- Haml::Engine.new(File.read("#{Rails.root}/app/views/#{view_name}.html.haml")).render(self, locals)
44
- end
45
-
46
- def listed_state_machines
47
- nil
48
- end
49
-
50
- delegate :id, to: :object
51
-
52
- class << self
53
- include Tramway::Associations::ClassHelper
54
- include Tramway::Delegating::ClassHelper
55
- include Tramway::Default::ValuesHelper
56
-
57
- def decorate(object_or_array)
58
- is_activerecord_relation = object_or_array.class.superclass == ActiveRecord::Relation
59
- is_activerecord_association_relation = object_or_array.class.to_s.include?('ActiveRecord_AssociationRelation')
60
- if is_activerecord_relation || is_activerecord_association_relation
61
- decorated_array = object_or_array.map do |obj|
62
- new obj
63
- end
64
- Tramway::ApplicationDecoratedCollection.new decorated_array, object_or_array
65
- else
66
- new object_or_array
67
- end
68
- end
69
-
70
- def model_class
71
- to_s.sub(/Decorator$/, '').constantize
72
- end
73
-
74
- def model_name
75
- model_class.try(:model_name)
76
- end
77
- end
78
-
79
- def link
80
- if object.try :file
81
- object.file.url
82
- else
83
- Tramway::Error.raise_error :tramway, :application_decorator, :link, :method_link_uses_file_attribute
84
- end
85
- end
86
-
87
- def additional_buttons
88
- { show: [], index: [] }
89
- end
90
-
91
- def public_path; end
92
-
93
- def model
94
- object
95
- end
96
-
97
- def associations(associations_type)
98
- object.class.reflect_on_all_associations(associations_type).map do |association|
99
- association unless association.name == :versions
100
- end.compact
101
- end
102
-
103
- include Tramway::Concerns::AttributesDecoratorHelper
104
-
105
- RESERVED_WORDS = ['fields'].freeze
106
-
107
- def attributes
108
- object.attributes.reduce({}) do |hash, attribute|
109
- if attribute[0].in? RESERVED_WORDS
110
- Tramway::Error.raise_error(
111
- :tramway, :application_decorator, :attributes, :method_is_reserved_word,
112
- attribute_name: attribute[0], class_name: self.class.name
113
- )
114
- end
115
- hash.merge! attribute[0] => build_viewable_value(object, attribute)
116
- end
117
- end
118
-
119
- protected
120
-
121
- attr_reader :object
122
-
123
- def association_class_name; end
124
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Tramway::Associations::ClassHelper
4
- def decorate_association(association_name, decorator: nil, as: nil, state_machines: [])
5
- @@decorated_associations ||= []
6
- @@decorated_associations << association_name
7
-
8
- define_main_association_method association_name, decorator
9
-
10
- define_method "#{association_name}_as" do
11
- as
12
- end
13
-
14
- define_method "#{association_name}_state_machines" do
15
- state_machines
16
- end
17
-
18
- define_method "add_#{association_name}_form" do
19
- add_association_form_class_name(object, association_name).new object
20
- end
21
- end
22
-
23
- def decorate_associations(*association_names)
24
- association_names.each do |association_name|
25
- decorate_association association_name
26
- end
27
- end
28
-
29
- def define_main_association_method(association_name, decorator)
30
- define_method association_name do
31
- association = object.class.reflect_on_association(association_name)
32
- type = association_type(association)
33
- return if association_has_one_without_object(object, association_name, type)
34
-
35
- check_association object, association_name, association
36
- decorator_class_name = decorator || decorator_class_name(class_name(association))
37
- case type
38
- when :has_many, :has_and_belongs_to_many
39
- associations_collection(object, association_name, decorator_class_name)
40
- when :belongs_to, :has_one
41
- decorator_class_name.decorate(association_object(object, association_name))
42
- end
43
- end
44
- end
45
- end
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Tramway::Associations::ObjectHelper
4
- def class_name(association)
5
- if association.polymorphic?
6
- object.send(association.name).class
7
- else
8
- unless association.options[:class_name]
9
- Tramway::Error.raise_error(
10
- :tramway, :associations, :object_helper, :please_specify_association_name,
11
- association_name: association.name, object_class: object.class,
12
- association_class_name: association.name.to_s.singularize.camelize
13
- )
14
- end
15
- association.options[:class_name]
16
- end
17
- end
18
-
19
- def check_association(object, association_name, association)
20
- return unless association.nil?
21
-
22
- Tramway::Error.raise_error(
23
- :tramway, :associations, :class_helper, :model_does_not_have_association,
24
- object_class: object.class, association_name:
25
- )
26
- end
27
-
28
- def association_type(association)
29
- association.class.to_s.split('::').last.sub(/Reflection$/, '').underscore.to_sym
30
- end
31
-
32
- def associations_collection(object, association_name, decorator_class_name)
33
- object.send(association_name).map do |association_object|
34
- decorator_class_name.decorate association_object
35
- end
36
- end
37
-
38
- def add_association_form_class_name(object, association_name)
39
- form_class = "Admin::#{object.class.to_s.pluralize}::Add#{association_name.to_s.camelize.singularize}Form"
40
-
41
- begin
42
- form_class.constantize
43
- rescue StandardError
44
- Tramway::Error.raise_error(
45
- :tramway, :associations, :object_helper, :habtm_add_class_not_defined,
46
- class: form_class, association_name:
47
- )
48
- end
49
- end
50
-
51
- def association_has_one_without_object(object, association_name, association_type)
52
- association_type == :has_one && object.send(association_name).nil?
53
- end
54
-
55
- def association_object(object, association_name)
56
- object.send association_name
57
- end
58
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Tramway::Attributes::ViewHelper
4
- def build_viewable_value(object, attribute)
5
- value = try(attribute[0]) ? send(attribute[0]) : object.send(attribute[0])
6
- return state_machine_view(object, attribute[0]) if state_machine? object, attribute[0]
7
-
8
- view_by_value object, value, attribute
9
- end
10
-
11
- def state_machine?(object, attribute_name)
12
- attribute_name.to_s.in? object.class.state_machines_names.map(&:to_s)
13
- end
14
-
15
- def view_by_value(object, value, attribute)
16
- if value.class.in? [ActiveSupport::TimeWithZone, DateTime, Time]
17
- datetime_view(attribute[1])
18
- elsif value.instance_of?(PhotoUploader)
19
- image_view(object.send(attribute[0]))
20
- elsif value.instance_of?(FileUploader)
21
- file_view(object.send(attribute[0]))
22
- elsif value.is_a? Enumerize::Value
23
- enumerize_view(value)
24
- elsif value.is_a? Hash
25
- yaml_view(value)
26
- else
27
- value
28
- end
29
- end
30
- end
@@ -1,97 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Tramway::Concerns::AttributesDecoratorHelper
4
- def date_view(value)
5
- I18n.l value.to_date if value
6
- end
7
-
8
- def datetime_view(value)
9
- I18n.l value if value
10
- end
11
-
12
- def state_machine_view(object, attribute_name)
13
- state = object.send(attribute_name)
14
- I18n.t("state_machines.#{object.class.model_name.to_s.underscore}.#{attribute_name}.states.#{state}")
15
- rescue StandardError
16
- object.aasm.human_state
17
- end
18
-
19
- BASE64_REGEXP = %r{^(?:[a-zA-Z0-9+/]{4})*(?:|(?:[a-zA-Z0-9+/]{3}=)|
20
- (?:[a-zA-Z0-9+/]{2}==)|(?:[a-zA-Z0-9+/]{1}===))$}x
21
-
22
- def image_view(original, thumb: nil, filename: nil)
23
- return unless original.present?
24
-
25
- filename ||= build_filename(original)
26
- content_tag(:div) do
27
- build_div_content src_original(original), src_thumb(original, thumb), filename || build_filename(original)
28
- end
29
- end
30
-
31
- def file_view(original, filename: nil)
32
- return unless original.present?
33
-
34
- filename ||= build_filename(original)
35
- content_tag(:div) do
36
- concat filename
37
- concat ' '
38
- concat download_button(filename:, original:) if filename
39
- end
40
- end
41
-
42
- def enumerize_view(value)
43
- value.text
44
- end
45
-
46
- def yaml_view(value)
47
- content_tag(:pre) { value.to_yaml }
48
- end
49
-
50
- private
51
-
52
- def src_thumb(original, thumb)
53
- thumb ||= original.is_a?(CarrierWave::Uploader::Base) ? original.small : nil
54
- if thumb.is_a?(CarrierWave::Uploader::Base)
55
- thumb.url
56
- elsif thumb&.match(BASE64_REGEXP)
57
- "data:image/jpeg;base64,#{thumb}"
58
- else
59
- thumb
60
- end
61
- end
62
-
63
- def src_original(original)
64
- case original
65
- when CarrierWave::Uploader::Base
66
- original.url
67
- when BASE64_REGEXP
68
- "data:image/jpeg;base64,#{original}"
69
- else
70
- original
71
- end
72
- end
73
-
74
- def build_filename(original)
75
- original.is_a?(CarrierWave::Uploader::Base) ? original.path&.split('/')&.last : nil
76
- end
77
-
78
- def build_div_content(original, thumb, filename)
79
- begin
80
- concat image_tag src_thumb(original, thumb) || src_original(original)
81
- rescue NoMethodError => e
82
- Tramway::Error.raise_error(
83
- :tramway, :concerns, :attributes_decorator_helper, :you_should_mount_photo_uploader,
84
- message: e.message, attribute_name:
85
- )
86
- end
87
- concat download_button(filename:, original:) if filename
88
- end
89
-
90
- def download_button(filename:, original:)
91
- link_to(fa_icon(:download), src_original(original), class: 'btn btn-success', download: filename)
92
- end
93
-
94
- def yes_no(boolean_attr)
95
- boolean_attr.to_s == 'true' ? I18n.t('helpers.yes') : I18n.t('helpers.no')
96
- end
97
- end