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.
- checksums.yaml +4 -4
- data/MIT-LICENSE +1 -1
- data/README.md +12 -893
- data/Rakefile +8 -8
- data/app/components/tailwind_component.html.haml +0 -0
- data/app/components/tailwind_component.rb +6 -0
- data/app/components/tailwinds/navbar/button_component.html.haml +1 -0
- data/app/components/tailwinds/navbar/button_component.rb +14 -0
- data/config/routes.rb +0 -9
- data/lib/tasks/tramway_tasks.rake +5 -0
- data/lib/tramway/engine.rb +5 -10
- data/lib/tramway/version.rb +1 -1
- data/lib/tramway.rb +5 -140
- metadata +16 -545
- data/app/assets/config/tramway_core_manifest.js +0 -2
- data/app/assets/images/tramway/mona_lisa_from_prado.jpg +0 -0
- data/app/assets/images/tramway/mona_lisa_from_prado_square.jpg +0 -0
- data/app/assets/javascripts/bootstrap-datepicker-1.8.0.js +0 -2035
- data/app/assets/javascripts/bootstrap-datepicker-1.8.0.ru.min.js +0 -64
- data/app/assets/javascripts/ckeditor/config.js +0 -30
- data/app/assets/javascripts/ckeditor/plugins/image/dialogs/image.js +0 -1259
- data/app/assets/javascripts/ckeditor/plugins/image/icons/hidpi/image.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/image/icons/image.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/image/images/noimage.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/image/lang/en.js +0 -25
- data/app/assets/javascripts/ckeditor/plugins/image/lang/ru.js +0 -25
- data/app/assets/javascripts/ckeditor/plugins/image/plugin.js +0 -184
- data/app/assets/javascripts/ckeditor/plugins/youtube/images/icon-hdpi.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/youtube/images/icon.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/youtube/lang/en.js +0 -25
- data/app/assets/javascripts/ckeditor/plugins/youtube/lang/ru.js +0 -25
- data/app/assets/javascripts/ckeditor/plugins/youtube/plugin.js +0 -449
- data/app/assets/javascripts/tramway/application.js +0 -61
- data/app/assets/stylesheets/tramway/application.sass +0 -59
- data/app/controllers/tramway/application_controller.rb +0 -142
- data/app/controllers/tramway/concerns/auth_management.rb +0 -26
- data/app/controllers/tramway/concerns/filtering.rb +0 -43
- data/app/controllers/tramway/export/application_controller.rb +0 -5
- data/app/controllers/tramway/has_and_belongs_to_many_records_controller.rb +0 -26
- data/app/controllers/tramway/records_controller.rb +0 -86
- data/app/controllers/tramway/sessions_controller.rb +0 -49
- data/app/controllers/tramway/singletons_controller.rb +0 -48
- data/app/controllers/tramway/welcome_controller.rb +0 -17
- data/app/decorators/tramway/application_decorated_collection.rb +0 -15
- data/app/decorators/tramway/application_decorator.rb +0 -124
- data/app/decorators/tramway/associations/class_helper.rb +0 -45
- data/app/decorators/tramway/associations/object_helper.rb +0 -58
- data/app/decorators/tramway/attributes/view_helper.rb +0 -30
- data/app/decorators/tramway/concerns/attributes_decorator_helper.rb +0 -97
- data/app/decorators/tramway/concerns/table_builder.rb +0 -33
- data/app/decorators/tramway/default/values_helper.rb +0 -23
- data/app/decorators/tramway/delegating/class_helper.rb +0 -9
- data/app/decorators/tramway/user_decorator.rb +0 -49
- data/app/forms/admin/tramway/user_form.rb +0 -24
- data/app/forms/tramway/application_form.rb +0 -124
- data/app/forms/tramway/application_forms/association_class_helpers.rb +0 -7
- data/app/forms/tramway/application_forms/association_object_helpers.rb +0 -36
- data/app/forms/tramway/application_forms/constant_class_actions.rb +0 -7
- data/app/forms/tramway/application_forms/constant_object_actions.rb +0 -20
- data/app/forms/tramway/application_forms/frontend.rb +0 -12
- data/app/forms/tramway/application_forms/object_helpers.rb +0 -15
- data/app/forms/tramway/application_forms/properties_object_helper.rb +0 -16
- data/app/forms/tramway/application_forms/submit_helper.rb +0 -26
- data/app/forms/tramway/extendable_form.rb +0 -15
- data/app/forms/tramway/extendable_forms_helpers/class_builder.rb +0 -34
- data/app/forms/tramway/extendable_forms_helpers/ignored_properties_helper.rb +0 -11
- data/app/forms/tramway/extendable_forms_helpers/more_properties_helper.rb +0 -31
- data/app/forms/tramway/extendable_forms_helpers/properties_helper.rb +0 -16
- data/app/forms/tramway/extendable_forms_helpers/submit/class_helpers.rb +0 -18
- data/app/forms/tramway/extendable_forms_helpers/submit/object_helpers.rb +0 -21
- data/app/forms/tramway/extendable_forms_helpers/validators.rb +0 -40
- data/app/forms/tramway/extended_application_form.rb +0 -23
- data/app/forms/tramway/form_creator.rb +0 -7
- data/app/forms/tramway/session_form.rb +0 -26
- data/app/helpers/tramway/actions_helper.rb +0 -45
- data/app/helpers/tramway/additional_buttons_builder.rb +0 -12
- data/app/helpers/tramway/application_helper.rb +0 -27
- data/app/helpers/tramway/cases_helper.rb +0 -13
- data/app/helpers/tramway/copy_to_clipboard_helper.rb +0 -11
- data/app/helpers/tramway/focus_generator_helper.rb +0 -10
- data/app/helpers/tramway/frontend_helper.rb +0 -26
- data/app/helpers/tramway/inputs/associations_helper.rb +0 -30
- data/app/helpers/tramway/inputs/polymorphic_associations_helper.rb +0 -24
- data/app/helpers/tramway/inputs_helper.rb +0 -96
- data/app/helpers/tramway/model_helper.rb +0 -7
- data/app/helpers/tramway/navbar_helper.rb +0 -11
- data/app/helpers/tramway/records_helper.rb +0 -120
- data/app/helpers/tramway/russian_cases_helper.rb +0 -26
- data/app/helpers/tramway/singleton_helper.rb +0 -12
- data/app/helpers/tramway/state_machine_buttons_helper.rb +0 -61
- data/app/helpers/tramway/title_helper.rb +0 -25
- data/app/inputs/date_picker_input.rb +0 -4
- data/app/inputs/multiple_file_input.rb +0 -7
- data/app/models/tramway/application_record.rb +0 -62
- data/app/models/tramway/user.rb +0 -18
- data/app/uploaders/application_uploader.rb +0 -22
- data/app/uploaders/file_uploader.rb +0 -4
- data/app/uploaders/ico_uploader.rb +0 -7
- data/app/uploaders/image_defaults.rb +0 -14
- data/app/uploaders/photo_uploader.rb +0 -54
- data/app/views/layouts/tramway/application.html.haml +0 -32
- data/app/views/layouts/tramway/shared/_navbar.html.haml +0 -46
- data/app/views/tramway/404.haml +0 -1
- data/app/views/tramway/records/_form.html.haml +0 -22
- data/app/views/tramway/records/_list.html.haml +0 -38
- data/app/views/tramway/records/_search.html.haml +0 -34
- data/app/views/tramway/records/edit.html.haml +0 -1
- data/app/views/tramway/records/index.html.haml +0 -31
- data/app/views/tramway/records/new.html.haml +0 -1
- data/app/views/tramway/records/show.html.haml +0 -1
- data/app/views/tramway/sessions/new.html.haml +0 -9
- data/app/views/tramway/shared/_input.html.haml +0 -34
- data/app/views/tramway/shared/_input_extended.html.haml +0 -14
- data/app/views/tramway/shared/_messages.html.haml +0 -10
- data/app/views/tramway/shared/_show.html.haml +0 -35
- data/app/views/tramway/shared/errors/server_error.html.haml +0 -12
- data/app/views/tramway/shared/input_extended_types/_checkbox.html.haml +0 -1
- data/app/views/tramway/shared/input_extended_types/_select.html.haml +0 -16
- data/app/views/tramway/shared/input_extended_types/_simple.html.haml +0 -4
- data/app/views/tramway/shared/input_extended_types/_yes_no.html.haml +0 -4
- data/app/views/tramway/shared/show/_attribute_tr.html.haml +0 -9
- data/app/views/tramway/shared/show/associations/_habtm_row.html.haml +0 -14
- data/app/views/tramway/shared/show/associations/_list.html.haml +0 -21
- data/app/views/tramway/shared/show/associations/_row.html.haml +0 -19
- data/app/views/tramway/shared/show/associations/_table_row.html.haml +0 -21
- data/app/views/tramway/singletons/_form.html.haml +0 -15
- data/app/views/tramway/singletons/edit.html.haml +0 -1
- data/app/views/tramway/singletons/new.html.haml +0 -1
- data/app/views/tramway/singletons/show.html.haml +0 -1
- data/app/views/tramway/welcome/index.html.haml +0 -4
- data/config/initializers/assets.rb +0 -7
- data/config/initializers/ckeditor.rb +0 -9
- data/config/initializers/plurals.rb +0 -25
- data/config/locales/en/collections.yml +0 -4
- data/config/locales/en/date.yml +0 -16
- data/config/locales/en/dates.yml +0 -10
- data/config/locales/en/helpers.yml +0 -26
- data/config/locales/en/locale.yml +0 -11
- data/config/locales/en/messages.yml +0 -7
- data/config/locales/en/models.yml +0 -9
- data/config/locales/en/simple_form_extension.yml +0 -8
- data/config/locales/en/state_machines.yml +0 -8
- data/config/locales/ru/collections.yml +0 -4
- data/config/locales/ru/date.yml +0 -16
- data/config/locales/ru/dates.yml +0 -10
- data/config/locales/ru/helpers.yml +0 -30
- data/config/locales/ru/locale.yml +0 -6
- data/config/locales/ru/messages.yml +0 -7
- data/config/locales/ru/models.yml +0 -21
- data/config/locales/ru/simple_form_extension.yml +0 -8
- data/config/locales/ru/state_machines.yml +0 -8
- data/lib/string.rb +0 -18
- data/lib/tramway/application.rb +0 -10
- data/lib/tramway/class_name_helpers.rb +0 -15
- data/lib/tramway/collection.rb +0 -9
- data/lib/tramway/collections/helper.rb +0 -21
- data/lib/tramway/collections.rb +0 -4
- data/lib/tramway/error.rb +0 -32
- data/lib/tramway/forms.rb +0 -5
- data/lib/tramway/generators/install_generator.rb +0 -49
- data/lib/tramway/generators/model_generator.rb +0 -105
- data/lib/tramway/generators/templates/create_tramway_users.rb +0 -18
- data/lib/tramway/generators/templates/decorator.rb.erb +0 -56
- data/lib/tramway/generators/templates/form.rb.erb +0 -22
- data/lib/tramway/generators/templates/initializers/simple_form.rb +0 -23
- data/lib/tramway/generators/templates/initializers/simple_form_bootstrap.rb +0 -133
- data/lib/tramway/generators.rb +0 -6
- data/lib/tramway/navbar.rb +0 -44
- data/lib/tramway/notifications.rb +0 -12
- data/lib/tramway/record_routes_helper.rb +0 -23
- data/lib/tramway/records_models.rb +0 -60
- data/lib/tramway/singleton_models.rb +0 -32
- data/lib/tramway/spec/helpers/navbar_helper.rb +0 -7
- data/lib/tramway/spec/helpers/tramway_helpers.rb +0 -47
- data/lib/tramway/welcome_page_actions.rb +0 -5
- data/lib/tramway/yaml/errors.yml +0 -50
- data/lib/validators/presence_validator.rb +0 -9
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Tramway::Concerns::TableBuilder
|
|
4
|
-
def table(**options, &block)
|
|
5
|
-
content_tag(:table, class: 'table table-bordered table-striped', **options) do
|
|
6
|
-
yield if block
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def thead(**options, &block)
|
|
11
|
-
content_tag(:thead, **options) do
|
|
12
|
-
yield if block
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def th(**options, &block)
|
|
17
|
-
content_tag(:th, **options) do
|
|
18
|
-
yield if block
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def td(**options, &block)
|
|
23
|
-
content_tag(:td, **options) do
|
|
24
|
-
yield if block
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def tr(**options, &block)
|
|
29
|
-
content_tag(:tr, **options) do
|
|
30
|
-
yield if block
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Tramway::Default::ValuesHelper
|
|
4
|
-
def collections
|
|
5
|
-
[:all]
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def list_attributes
|
|
9
|
-
[]
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def show_attributes
|
|
13
|
-
[]
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def show_associations
|
|
17
|
-
[]
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def list_filters
|
|
21
|
-
{}
|
|
22
|
-
end
|
|
23
|
-
end
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Tramway::UserDecorator < Tramway::ApplicationDecorator
|
|
4
|
-
class << self
|
|
5
|
-
def collections
|
|
6
|
-
[:all]
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def list_attributes
|
|
10
|
-
[:email]
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def show_attributes
|
|
14
|
-
%i[email first_name last_name phone role created_at updated_at credential_text]
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
if defined? Tramway::Conference
|
|
18
|
-
def show_associations
|
|
19
|
-
[:social_networks]
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
decorate_association :social_networks, as: :record if defined? Tramway::Conference
|
|
25
|
-
|
|
26
|
-
delegate_attributes :first_name, :last_name, :email, :phone, :role, :created_at, :updated_at, :admin?
|
|
27
|
-
|
|
28
|
-
def name
|
|
29
|
-
"#{object&.first_name} #{object&.last_name}"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def credential_text
|
|
33
|
-
content_tag(:pre) do
|
|
34
|
-
id = "credential_text_#{object.id}"
|
|
35
|
-
|
|
36
|
-
concat(content_tag(:span, id:) do
|
|
37
|
-
text = "URL: #{ENV['PROJECT_URL']}\n"
|
|
38
|
-
text += "Email: #{object.email}\n"
|
|
39
|
-
"#{text}Password: "
|
|
40
|
-
end)
|
|
41
|
-
|
|
42
|
-
concat(content_tag(:br))
|
|
43
|
-
|
|
44
|
-
concat copy_to_clipboard id
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
alias title name
|
|
49
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Admin::Tramway::UserForm < ::Tramway::ApplicationForm
|
|
4
|
-
self.model_class = Tramway::User
|
|
5
|
-
|
|
6
|
-
properties :email, :password, :first_name, :last_name, :role, :phone
|
|
7
|
-
|
|
8
|
-
# fix me
|
|
9
|
-
unless model_class.columns_hash['project_id'].present?
|
|
10
|
-
validates :email, email: true, uniqueness: true,
|
|
11
|
-
on: :destroy
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def initialize(object)
|
|
15
|
-
super(object).tap do
|
|
16
|
-
form_properties email: :string,
|
|
17
|
-
password: :string,
|
|
18
|
-
first_name: :string,
|
|
19
|
-
last_name: :string,
|
|
20
|
-
phone: :string,
|
|
21
|
-
role: :default
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Tramway::ApplicationForm
|
|
4
|
-
include Tramway::ApplicationForms::AssociationObjectHelpers
|
|
5
|
-
include Tramway::ApplicationForms::ConstantObjectActions
|
|
6
|
-
include Tramway::ApplicationForms::PropertiesObjectHelper
|
|
7
|
-
include Tramway::ApplicationForms::ObjectHelpers
|
|
8
|
-
include Tramway::ApplicationForms::SubmitHelper
|
|
9
|
-
|
|
10
|
-
attr_accessor :submit_message
|
|
11
|
-
|
|
12
|
-
def initialize(object = nil)
|
|
13
|
-
tap do
|
|
14
|
-
@object = object
|
|
15
|
-
@@model_class = object.class
|
|
16
|
-
@@enumerized_attributes = object.class.try :enumerized_attributes
|
|
17
|
-
@@associations ||= []
|
|
18
|
-
|
|
19
|
-
self.class.full_class_name_associations&.each do |association, class_name|
|
|
20
|
-
define_association_method association, class_name
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
delegating object
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def model_name
|
|
28
|
-
@@model_class.model_name
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def associations
|
|
32
|
-
@@associations
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
class << self
|
|
36
|
-
include Tramway::ApplicationForms::AssociationClassHelpers
|
|
37
|
-
include Tramway::ApplicationForms::ConstantClassActions
|
|
38
|
-
include Tramway::ApplicationForms::Frontend
|
|
39
|
-
|
|
40
|
-
delegate :defined_enums, to: :model_class
|
|
41
|
-
|
|
42
|
-
def properties(*props)
|
|
43
|
-
props.each { |prop| property prop }
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def property(prop)
|
|
47
|
-
@@properties ||= []
|
|
48
|
-
@@properties << prop
|
|
49
|
-
delegate prop, to: :model
|
|
50
|
-
define_method("#{prop}=") do |value|
|
|
51
|
-
model.send "#{prop}=", value
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def association(property)
|
|
56
|
-
properties property
|
|
57
|
-
@@associations = ((defined?(@@associations) && @@associations) || []) + [property]
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def full_class_name_associations
|
|
61
|
-
@@associations&.reduce({}) do |hash, association|
|
|
62
|
-
options = @@model_class.reflect_on_all_associations(:belongs_to).select do |a|
|
|
63
|
-
a.name == association.to_sym
|
|
64
|
-
end.first&.options
|
|
65
|
-
add_polymorphic_association hash, association, options
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def add_polymorphic_association(hash, association, options)
|
|
70
|
-
if options&.dig(:polymorphic)
|
|
71
|
-
hash.merge association => @@model_class.send("#{association}_type").values
|
|
72
|
-
elsif options
|
|
73
|
-
hash.merge(association => (options[:class_name] || association.to_s.camelize).constantize)
|
|
74
|
-
else
|
|
75
|
-
hash
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def full_class_name_association(association_name)
|
|
80
|
-
full_class_name_associations[association_name]
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def reflect_on_association(*args)
|
|
84
|
-
@@model_class.reflect_on_association(*args)
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def enumerized_attributes
|
|
88
|
-
@@enumerized_attributes
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def model_class
|
|
92
|
-
if defined?(@@model_class) && @@model_class
|
|
93
|
-
@@model_class
|
|
94
|
-
else
|
|
95
|
-
model_class_name ||= name.to_s.sub(/Form$/, '')
|
|
96
|
-
begin
|
|
97
|
-
@@model_class = model_class_name.constantize
|
|
98
|
-
rescue StandardError
|
|
99
|
-
Tramway::Error.raise_error :tramway, :application_form, :model_class, :there_is_not_model_class,
|
|
100
|
-
name:, model_class_name:
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
def model_class=(name)
|
|
106
|
-
@@model_class = name
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def validates(attribute, **options)
|
|
110
|
-
if !defined?(@@model_class) || @@model_class.nil?
|
|
111
|
-
Tramway::Error.raise_error(:tramway, :application_form, :validates, :you_need_to_set_model_class)
|
|
112
|
-
end
|
|
113
|
-
@@model_class.validates attribute, **options
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
private
|
|
118
|
-
|
|
119
|
-
def collecting_associations_errors
|
|
120
|
-
@@associations.each do |association|
|
|
121
|
-
model.send("#{association}=", send(association)) if errors.details[association] == [{ error: :blank }]
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Tramway::ApplicationForms::AssociationObjectHelpers
|
|
4
|
-
def define_association_method(association, class_name)
|
|
5
|
-
if class_name.is_a? Array
|
|
6
|
-
define_polymorphic_association association
|
|
7
|
-
else
|
|
8
|
-
self.class.send(:define_method, "#{association}=") do |value|
|
|
9
|
-
model.send "#{association}_id=", value
|
|
10
|
-
model.send "#{association}=", class_name.find(value)
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def define_polymorphic_association(association)
|
|
16
|
-
self.class.send(:define_method, "#{association}=") do |value|
|
|
17
|
-
if value.present?
|
|
18
|
-
if association_class(value).nil?
|
|
19
|
-
Tramway::Error.raise_error :tramway, :application_form, :initialize, :polymorphic_class_is_nil,
|
|
20
|
-
association_name: association
|
|
21
|
-
else
|
|
22
|
-
model.send "#{association}=", association_class(value).find(value.split('_')[-1])
|
|
23
|
-
send "#{association}_type=", association_class(value).to_s
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
private
|
|
30
|
-
|
|
31
|
-
def association_class(value)
|
|
32
|
-
association_class_object = value.split('_')[0..-2].join('_').camelize
|
|
33
|
-
association_class_object = association_class_object.constantize if association_class_object.is_a? String
|
|
34
|
-
association_class_object
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Tramway::ApplicationForms::ConstantObjectActions
|
|
4
|
-
def delegating(object)
|
|
5
|
-
%i[to_key errors].each { |method| self.class.send(:define_method, method) { object.send method } }
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def build_errors; end
|
|
9
|
-
|
|
10
|
-
def attributes
|
|
11
|
-
properties.reduce({}) do |hash, property|
|
|
12
|
-
value = if model.respond_to? :values
|
|
13
|
-
model.values[property.first.to_s]
|
|
14
|
-
else
|
|
15
|
-
model.send(property.first.to_s)
|
|
16
|
-
end
|
|
17
|
-
hash.merge! property.first => value
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Tramway::ApplicationForms::PropertiesObjectHelper
|
|
4
|
-
def form_properties(**args)
|
|
5
|
-
@form_properties = args
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def properties
|
|
9
|
-
@form_properties ||= {}
|
|
10
|
-
yaml_config_file_path = Rails.root.join('app', 'forms', "#{self.class.name.underscore}.yml")
|
|
11
|
-
|
|
12
|
-
return @form_properties unless File.exist? yaml_config_file_path
|
|
13
|
-
|
|
14
|
-
@form_properties.deep_merge YAML.load_file(yaml_config_file_path).deep_symbolize_keys
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Tramway::ApplicationForms::SubmitHelper
|
|
4
|
-
def submit(params)
|
|
5
|
-
if params
|
|
6
|
-
params.each { |key, value| send("#{key}=", value) }
|
|
7
|
-
result = save
|
|
8
|
-
result.tap do
|
|
9
|
-
collecting_associations_errors unless result
|
|
10
|
-
end
|
|
11
|
-
else
|
|
12
|
-
Tramway::Error.raise_error(:application_form, :submit, :params_should_not_be_nil)
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def save
|
|
17
|
-
model.save
|
|
18
|
-
rescue ArgumentError => e
|
|
19
|
-
Tramway::Error.raise_error :tramway, :application_form, :save, :argument_error, message: e.message
|
|
20
|
-
rescue StandardError => e
|
|
21
|
-
raise e unless e.try :name
|
|
22
|
-
|
|
23
|
-
Tramway::Error.raise_error :tramway, :application_form, :save, :looks_like_you_have_method,
|
|
24
|
-
method_name: e.name.to_s.gsub('=', ''), model_class: model.class, class_name: self.class
|
|
25
|
-
end
|
|
26
|
-
end
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Tramway::ExtendableForm
|
|
4
|
-
class << self
|
|
5
|
-
include Tramway::ExtendableFormsHelpers::ClassBuilder
|
|
6
|
-
|
|
7
|
-
def new(name, simple_properties: {}, **more_properties)
|
|
8
|
-
if Object.const_defined? name
|
|
9
|
-
name.constantize
|
|
10
|
-
else
|
|
11
|
-
build_form_class name, simple_properties, more_properties
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Tramway::ExtendableFormsHelpers::ClassBuilder
|
|
4
|
-
def build_form_class(name, simple_properties, more_properties)
|
|
5
|
-
Object.const_set(name, Class.new(::Tramway::ApplicationForm) do
|
|
6
|
-
properties(*simple_properties.keys) if simple_properties.keys.any?
|
|
7
|
-
|
|
8
|
-
include Tramway::ExtendableFormsHelpers::Submit::ObjectHelpers
|
|
9
|
-
include Tramway::ExtendableFormsHelpers::Validators
|
|
10
|
-
extend Tramway::ExtendableFormsHelpers::Submit::ClassHelpers
|
|
11
|
-
extend Tramway::ExtendableFormsHelpers::PropertiesHelper
|
|
12
|
-
extend Tramway::ExtendableFormsHelpers::MorePropertiesHelper
|
|
13
|
-
extend Tramway::ExtendableFormsHelpers::IgnoredPropertiesHelper
|
|
14
|
-
|
|
15
|
-
define_submit_method simple_properties, more_properties
|
|
16
|
-
define_properties_method simple_properties, more_properties
|
|
17
|
-
define_ignored_properties_method
|
|
18
|
-
|
|
19
|
-
more_properties.each do |property|
|
|
20
|
-
define_property_method property[0]
|
|
21
|
-
|
|
22
|
-
case property[1][:object].field_type
|
|
23
|
-
when 'file'
|
|
24
|
-
field = property[1][:object]
|
|
25
|
-
define_file_property_assignment_method property, field
|
|
26
|
-
else
|
|
27
|
-
# next unless property[1][:validates].present?
|
|
28
|
-
|
|
29
|
-
define_assignment_method property
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end)
|
|
33
|
-
end
|
|
34
|
-
end
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Tramway::ExtendableFormsHelpers::IgnoredPropertiesHelper
|
|
4
|
-
def define_ignored_properties_method
|
|
5
|
-
define_method :jsonb_ignored_properties do |properties|
|
|
6
|
-
properties.map do |property|
|
|
7
|
-
property[0].to_s if property[1][:object].field_type == 'file'
|
|
8
|
-
end.compact
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Tramway::ExtendableFormsHelpers::MorePropertiesHelper
|
|
4
|
-
def define_property_method(property_name)
|
|
5
|
-
define_method property_name do
|
|
6
|
-
model.values[property_name] if model.values
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def define_assignment_method(property)
|
|
11
|
-
define_method "#{property[0]}=" do |value|
|
|
12
|
-
if property[1][:validates].present?
|
|
13
|
-
property[1][:validates].each do |pair|
|
|
14
|
-
make_validates property[0], pair, value
|
|
15
|
-
end
|
|
16
|
-
else
|
|
17
|
-
model.values.merge property[0] => value
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def define_file_property_assignment_method(property, field)
|
|
23
|
-
define_method "#{property[0]}=" do |value|
|
|
24
|
-
file_instance = property[1][:association_model].find_or_create_by(
|
|
25
|
-
"#{model.class.name.underscore}_id" => model.id, "#{field.class.name.underscore}_id" => field.id
|
|
26
|
-
)
|
|
27
|
-
file_instance.file = value
|
|
28
|
-
file_instance.save!
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Tramway::ExtendableFormsHelpers::PropertiesHelper
|
|
4
|
-
def define_properties_method(simple_properties, more_properties)
|
|
5
|
-
define_method 'properties' do
|
|
6
|
-
hash = simple_properties.each_with_object({}) do |property, h|
|
|
7
|
-
h.merge! property[0] => property[1] unless model.class.state_machines_names.include?(property[0])
|
|
8
|
-
end
|
|
9
|
-
more_properties.reduce(hash) do |h, property|
|
|
10
|
-
h.merge! property[0] => {
|
|
11
|
-
extended_form_property: property[1][:object]
|
|
12
|
-
}
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Tramway::ExtendableFormsHelpers::Submit::ClassHelpers
|
|
4
|
-
def define_submit_method(simple_properties, more_properties)
|
|
5
|
-
define_method 'submit' do |params|
|
|
6
|
-
model.values ||= {}
|
|
7
|
-
extended_params = extended(simple_properties, more_properties, params)
|
|
8
|
-
every_attribute_set params
|
|
9
|
-
model.values = extended_params.reduce(model.values) do |hash, (key, value)|
|
|
10
|
-
hash.merge! key => value
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
return unless model.errors.empty?
|
|
14
|
-
|
|
15
|
-
save_in_submit params
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Tramway::ExtendableFormsHelpers::Submit::ObjectHelpers
|
|
4
|
-
def extended(simple_properties, more_properties, params)
|
|
5
|
-
params.except(*simple_properties.keys).except(*jsonb_ignored_properties(more_properties)).permit!.to_h
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def every_attribute_set(params)
|
|
9
|
-
params.each do |key, value|
|
|
10
|
-
method_name = "#{key}="
|
|
11
|
-
send(method_name, value) if respond_to?(method_name)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def save_in_submit(_params)
|
|
16
|
-
result = save
|
|
17
|
-
result.tap do
|
|
18
|
-
collecting_associations_errors unless result
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Tramway::ExtendableFormsHelpers::Validators
|
|
4
|
-
def make_validates(property_name, validation, value)
|
|
5
|
-
case validation[0].to_s
|
|
6
|
-
when 'presence'
|
|
7
|
-
presence_validator property_name, validation, value
|
|
8
|
-
when 'inclusion'
|
|
9
|
-
inclusion_validator property_name, validation, value
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def presence_validator(property_name, validation, value)
|
|
14
|
-
validator_object = PresenceValidator.new(attributes: :not_blank)
|
|
15
|
-
return if validation[1] == 'false'
|
|
16
|
-
return if validation[1] == 'true' && validator_object.send(:valid?, value)
|
|
17
|
-
|
|
18
|
-
model.errors.add(
|
|
19
|
-
property_name,
|
|
20
|
-
I18n.t(
|
|
21
|
-
"activerecord.errors.models.#{model.class.name.underscore}.attributes.default.#{validation[0]}",
|
|
22
|
-
value:
|
|
23
|
-
)
|
|
24
|
-
)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def inclusion_validator(property_name, validation, value)
|
|
28
|
-
in_array = validation[1][:in]
|
|
29
|
-
|
|
30
|
-
return if value.in? in_array
|
|
31
|
-
|
|
32
|
-
model.errors.add(
|
|
33
|
-
property_name,
|
|
34
|
-
I18n.t(
|
|
35
|
-
"activerecord.errors.models.#{model.class.name.underscore}.attributes.default.#{validation[0]}",
|
|
36
|
-
value:
|
|
37
|
-
)
|
|
38
|
-
)
|
|
39
|
-
end
|
|
40
|
-
end
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Tramway::ExtendedApplicationForm < Tramway::ApplicationForm
|
|
4
|
-
class << self
|
|
5
|
-
def properties(*args)
|
|
6
|
-
@@extendable_properties ||= []
|
|
7
|
-
@@extendable_properties += args
|
|
8
|
-
super(*args)
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def initialize(model)
|
|
13
|
-
@@extendable_properties.each do |prop|
|
|
14
|
-
next if model.respond_to? prop
|
|
15
|
-
|
|
16
|
-
model.class.define_method prop do
|
|
17
|
-
end
|
|
18
|
-
model.class.define_method "#{prop}=" do |value|
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
super
|
|
22
|
-
end
|
|
23
|
-
end
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Tramway::SessionForm < Tramway::ApplicationForm
|
|
4
|
-
properties :email
|
|
5
|
-
attr_accessor :password
|
|
6
|
-
|
|
7
|
-
def initialize(object)
|
|
8
|
-
object = Tramway::User.new unless object.present?
|
|
9
|
-
|
|
10
|
-
super
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def validate(params)
|
|
14
|
-
(add_wrong_email_or_password_error && return) if model.new_record?
|
|
15
|
-
|
|
16
|
-
(!model.new_record? && model.authenticate(params[:password])).tap do |result|
|
|
17
|
-
add_wrong_email_or_password_error unless result
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
private
|
|
22
|
-
|
|
23
|
-
def add_wrong_email_or_password_error
|
|
24
|
-
errors.add(:email, I18n.t('errors.wrong_email_or_password'))
|
|
25
|
-
end
|
|
26
|
-
end
|