eitil 1.4.1 → 2.0.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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -1
  3. data/eitil_integrate/lib/eitil_integrate/application_exporter/lookups.rb +1 -1
  4. data/lib/eitil/railtie.rb +2 -3
  5. data/lib/eitil/version.rb +1 -1
  6. data/spec/dummy_app/app/controllers/application_controller.rb +0 -2
  7. data/spec/dummy_app/app/controllers/users_controller.rb +0 -31
  8. data/spec/dummy_app/config/routes.rb +0 -5
  9. data/spec/dummy_app/db/test.sqlite3 +0 -0
  10. data/spec/spec_helper.rb +0 -2
  11. metadata +2 -27
  12. data/eitil_wrapper/README.md +0 -309
  13. data/eitil_wrapper/lib/eitil_wrapper/callbacks/helper_methods.rb +0 -118
  14. data/eitil_wrapper/lib/eitil_wrapper/callbacks.rb +0 -2
  15. data/eitil_wrapper/lib/eitil_wrapper/decorators/application_decorator.rb +0 -22
  16. data/eitil_wrapper/lib/eitil_wrapper/decorators/controller_decorator.rb +0 -72
  17. data/eitil_wrapper/lib/eitil_wrapper/decorators.rb +0 -3
  18. data/eitil_wrapper/lib/eitil_wrapper/jobs/new_job.rb +0 -34
  19. data/eitil_wrapper/lib/eitil_wrapper/jobs/new_job_now.rb +0 -37
  20. data/eitil_wrapper/lib/eitil_wrapper/jobs/single_method_job.rb +0 -11
  21. data/eitil_wrapper/lib/eitil_wrapper/jobs.rb +0 -4
  22. data/eitil_wrapper/lib/eitil_wrapper/railtie.rb +0 -94
  23. data/eitil_wrapper/lib/eitil_wrapper/records/default_calculators.rb +0 -104
  24. data/eitil_wrapper/lib/eitil_wrapper/records/default_scopes.rb +0 -95
  25. data/eitil_wrapper/lib/eitil_wrapper/records/default_sorts.rb +0 -81
  26. data/eitil_wrapper/lib/eitil_wrapper/records.rb +0 -4
  27. data/eitil_wrapper/lib/eitil_wrapper/request_logger/controller_mixin.rb +0 -48
  28. data/eitil_wrapper/lib/eitil_wrapper/request_logger/logger_job.rb +0 -17
  29. data/eitil_wrapper/lib/eitil_wrapper/request_logger.rb +0 -5
  30. data/eitil_wrapper/lib/eitil_wrapper/routes/extended_resources.rb +0 -40
  31. data/eitil_wrapper/lib/eitil_wrapper/routes.rb +0 -2
  32. data/eitil_wrapper/lib/eitil_wrapper.rb +0 -9
  33. data/spec/dummy_app/app/decorators/address_decorator.rb +0 -3
  34. data/spec/dummy_app/app/decorators/application_decorator.rb +0 -12
  35. data/spec/dummy_app/app/decorators/user_decorator.rb +0 -19
  36. data/spec/eitil_wrapper/decorators/decorators_spec.rb +0 -49
@@ -1,72 +0,0 @@
1
- module EitilWrapper
2
- module ControllerDecorator
3
-
4
- private
5
-
6
- def decorate(dec_item, dec_method: nil, dec_class: nil, **dec_kwargs)
7
- all_args_to_ivars binding
8
- set_ivars :dec_class, :decorator, :dec_method
9
- send_to_decorator
10
-
11
- rescue NameError => e
12
- puts "EitilWrapper::ControllerDecorator => rescuing uninitialised constant #{e.name}, returning the object's default JSON instead."
13
- return dec_item.as_json
14
- end
15
-
16
- def send_to_decorator
17
- @decorator.send(@dec_method, @dec_item)
18
-
19
- rescue NoMethodError => e
20
- inform_no_method_for_decorator_error
21
- @dec_item
22
- end
23
-
24
- def inform_no_method_for_decorator_error
25
- message = "Warning: NoMethodError for #{@dec_class}##{@dec_method}, returned @dec_item instead."
26
- Logger.new("#{Rails.root}/log/decorator_log.log").warn message
27
- warn message
28
- end
29
-
30
- def set_dec_method
31
- @dec_method = @dec_method || derived_dec_method || :base
32
- end
33
-
34
- def derived_dec_method
35
- return unless respond_to? :params
36
- return :app if @decorator.respond_to?(:app) && params["isMobile"]
37
- return :web if @decorator.respond_to?(:web) && params["isWeb"]
38
- end
39
-
40
- def set_dec_class
41
- @dec_class = @dec_class ? manual_set_dec_class : derived_dec_class
42
- end
43
-
44
- def manual_set_dec_class
45
- "#{@dec_class}Decorator".constantize
46
- end
47
-
48
- def derived_dec_class
49
- "#{@dec_item.class.name}Decorator".constantize
50
- end
51
-
52
- def set_decorator
53
- @dec_class.new **ivars
54
- end
55
-
56
- # Converts the controller_ivars, given in your main application's configuration,
57
- # into an hash. If no controller_ivars, continue with converting, in order to avoid
58
- # issues due to differing data types.
59
- def controller_ivars
60
- return {} unless Eitil.controller_ivars.any?
61
-
62
- Eitil.controller_ivars.map do |ivar|
63
- { ivar => instance_variable_get("@#{ivar.to_s}") }
64
- end.inject &:merge
65
- end
66
-
67
- def ivars
68
- @dec_kwargs.any? ? controller_ivars.merge(@dec_kwargs) : controller_ivars
69
- end
70
-
71
- end
72
- end
@@ -1,3 +0,0 @@
1
-
2
- require "eitil_wrapper/decorators/application_decorator"
3
- require "eitil_wrapper/decorators/controller_decorator"
@@ -1,34 +0,0 @@
1
-
2
- # require "eitil_wrapper/jobs/new_job"
3
-
4
- require "eitil_wrapper/jobs/single_method_job"
5
-
6
- Kernel.module_eval do
7
-
8
- # BEWARE: _self is currently not accepted in perform_later jobs due to serialization errors
9
-
10
- # The cases of 'id' and '_self' both handle instances, with the difference
11
- # being that 'id' works for objects that have a database record, while '_self'
12
- # works for non database supported instanes, such as an Exporter instance.
13
-
14
- def new_job(_method, *args, **kwargs)
15
-
16
- if instance_methods(false).include? _method
17
- define_method "#{_method}_job" do |_self = nil, *args, **kwargs|
18
-
19
- EitilWrapper::SingleMethodJob.perform_later(
20
- *args, _class: self.class.to_s, _method: _method.to_s, id: safe_send(:id), _self: self.to_json, **kwargs
21
- )
22
- end
23
-
24
- elsif singleton_methods(false).include? _method
25
- define_singleton_method "#{_method}_job" do |*args, **kwargs|
26
-
27
- EitilWrapper::SingleMethodJob.perform_later(
28
- *args, _class: to_s, _method: _method.to_s, **kwargs
29
- )
30
- end
31
- end
32
- end
33
-
34
- end
@@ -1,37 +0,0 @@
1
-
2
- # require "eitil_wrapper/jobs/new_job_now"
3
-
4
- require "eitil_wrapper/jobs/single_method_job"
5
-
6
- # BEWARE: This is an exact copy of the .new_job method, except for .perform_now instead of .perform_later and the method's name.
7
- # The reason for not using helper methods is to not unnecessarily fill and potentially fuck up the Kernel environment.
8
-
9
- Kernel.module_eval do
10
-
11
- # BEWARE: _self is currently not accepted in perform_later jobs due to serialization errors
12
-
13
- # The cases of 'id' and '_self' both handle instances, with the difference
14
- # being that 'id' works for objects that have a database record, while '_self'
15
- # works for non database supported instanes, such as an Exporter instance.
16
-
17
- def new_job_now(_method, *args, **kwargs)
18
-
19
- if instance_methods(false).include? _method
20
- define_method "#{_method}_job_now" do |_self = nil, *args, **kwargs|
21
-
22
- EitilWrapper::SingleMethodJob.perform_now(
23
- *args, _class: self.class.to_s, _method: _method.to_s, id: safe_send(:id), _self: self.to_json, **kwargs
24
- )
25
- end
26
-
27
- elsif singleton_methods(false).include? _method
28
- define_singleton_method "#{_method}_job_now" do |*args, **kwargs|
29
-
30
- EitilWrapper::SingleMethodJob.perform_now(
31
- *args, _class: to_s, _method: _method.to_s, **kwargs
32
- )
33
- end
34
- end
35
- end
36
-
37
- end
@@ -1,11 +0,0 @@
1
- # ISSUE: this code is currently defined eitil_wrapper/railtie.rb, since module inclusion
2
- # somehow leads to errors in the initialization process. Ideally, this code would be
3
- # defined in eitil_wrapper/jobs/single_method_job.rb and dispatched in eitil_wrapper/railtie.rb
4
-
5
- # require "eitil_wrapper/railtie" to run the dynamic dispatch as an init hook during boot
6
- require "eitil_wrapper/railtie"
7
-
8
- module EitilWrapper
9
- module CreateSingleMethodJob
10
- end
11
- end
@@ -1,4 +0,0 @@
1
-
2
- require "eitil_wrapper/jobs/new_job"
3
- require "eitil_wrapper/jobs/new_job_now"
4
- require "eitil_wrapper/jobs/single_method_job"
@@ -1,94 +0,0 @@
1
-
2
- module EitilWrapper
3
-
4
- class Railtie < Rails::Railtie
5
-
6
- # Dynamic dispatching after initialization of Rails classes.
7
-
8
- initializer "my_railtie.configure_rails_initialization", options: :after do |app|
9
-
10
- if Object.const_defined?('EitilWrapper::Records::DefaultCalculators')
11
- ::ApplicationRecord.send(:extend, EitilWrapper::Records::DefaultCalculators)
12
- end
13
-
14
- if Object.const_defined?('EitilWrapper::Records::DefaultScopes')
15
- ::ApplicationRecord.send(:extend, EitilWrapper::Records::DefaultScopes)
16
- end
17
-
18
- if Object.const_defined?('EitilWrapper::Records::DefaultSorts')
19
- ::ApplicationRecord.send(:extend, EitilWrapper::Records::DefaultSorts)
20
- end
21
-
22
- if Object.const_defined?('EitilWrapper::Callbacks::HelperMethods')
23
- ::ApplicationRecord.send(:extend, EitilWrapper::Callbacks::HelperMethods)
24
- end
25
-
26
- if Object.const_defined?('EitilWrapper::CreateSingleMethodJob')
27
-
28
- # ISSUE: this code is currently defined eitil_wrapper/railtie.rb, since module inclusion
29
- # somehow leads to errors in the initialization process. Ideally, this code would be
30
- # defined in eitil_wrapper/jobs/single_method_job.rb and dispatched in eitil_wrapper/railtie.rb
31
-
32
- # BEWARE: _self is currently not accepted in perform_later jobs due to serialization errors
33
-
34
- # BEWARE: The cases of 'id' and '_self' both handle instances, with the difference
35
- # being that 'id' works for objects that have a database record, while '_self'
36
- # works for non database supported instanes, such as an Exporter instance.
37
-
38
- module ::EitilWrapper
39
-
40
- class ::ApplicationJob < ActiveJob::Base
41
- end
42
-
43
- class SingleMethodJob < ::ApplicationJob
44
- def perform(*args, _class:, _method:, id: nil, _self: nil, **kwargs)
45
- object =
46
- if id
47
- _class.constantize.find(id)
48
- elsif _self
49
- _self
50
- else
51
- _class.constantize
52
- end
53
-
54
- if args.present? and kwargs.present?
55
- object.send _method, *args, **kwargs
56
-
57
- elsif args.present?
58
- object.send _method, *args
59
-
60
- elsif kwargs.present?
61
- object.send _method, **kwargs
62
-
63
- else
64
- object.send _method
65
- end
66
-
67
- end; end; end; end
68
-
69
-
70
- if Object.const_defined?('EitilWrapper::RequestLogger::CreateLoggerJob')
71
-
72
- module ::EitilWrapper
73
- module RequestLogger
74
- class LoggerJob < ::ApplicationJob
75
-
76
- def perform(logger_object)
77
-
78
- # set path for logger
79
- $request_logger_path ||= "#{Rails.root}/log/request_logger.log"
80
-
81
- # create logger, if not present
82
- if Dir[$request_logger_path].blank? || $request_logger.blank?
83
- $request_logger = Logger.new($request_logger_path)
84
- end
85
-
86
- # add logger_object to logger
87
- $request_logger.info(logger_object)
88
-
89
- end; end; end; end; end
90
-
91
- end
92
-
93
- end
94
- end
@@ -1,104 +0,0 @@
1
-
2
- # require "eitil_wrapper/records/default_calculators"
3
-
4
- # require "eitil_wrapper/railtie" to run the dynamic dispatch as an init hook during boot
5
- require "eitil_wrapper/railtie"
6
-
7
- module EitilWrapper
8
- module Records
9
- module DefaultCalculators
10
-
11
- Eitil::ApplicationRecordModules << self
12
-
13
- SharableNumberCalculators = -> (_class, column) {
14
- _class.eitil_calculator :"#{column}_max", -> { _class.maximum(column) }
15
- _class.eitil_calculator :"#{column}_min", -> { _class.minimum(column) }
16
- _class.eitil_calculator :"#{column}_sum", -> { _class.sum(column) }
17
- _class.eitil_calculator :"#{column}_avg", -> { _class.average(column) }
18
- }
19
-
20
- SharableIterableCalculators = -> (_class, column) {
21
- _class.eitil_calculator :"#{column}_sum", -> { _class.pluck(column).flatten!.uniq }
22
- _class.eitil_calculator :"#{column}_sum_i", -> { _class.pluck(column).flatten!.uniq.map(&:to_i) }
23
- _class.eitil_calculator :"#{column}_sum_f", -> { _class.pluck(column).flatten!.uniq.map(&:to_f) }
24
- _class.eitil_calculator :"#{column}_sum_d", -> { _class.pluck(column).flatten!.uniq.map(&:to_d) }
25
- }
26
-
27
- def inherited(subclass)
28
- super
29
- return if Eitil.skip_default_calculators_for_models.include?(subclass.to_s.to_sym)
30
-
31
- # Set the proper table_names for namespaced models. Without setting this,
32
- # Rails run into problems due to the fact that the first call to the model's
33
- # constant triggers this initializer first, and only thereafter the model file
34
- # which sets the correct table_name through a macro.
35
-
36
- namespaced_class = subclass.to_s.include?('::')
37
- subclass.table_name = subclass.to_s.gsub('::', '_').downcase.pluralize if namespaced_class
38
-
39
- subclass.use_eitil_calculators
40
-
41
- rescue => e
42
- puts "default calculators failed for class '#{subclass}' with expected table '#{subclass.table_name}' because of #{e.class} and '#{e.to_s.split(' ').first}'"
43
- end
44
-
45
- def use_eitil_calculators
46
- return if abstract_class?
47
-
48
- # text[] is postgresql's datatype for serialized arrays
49
- # numeric is postgresql's datatype for decimals
50
- # double precision is postgresql's datatype for floats
51
-
52
-
53
- %w[integer bigint double\ precision numeric].each do |_type|
54
- send :"create_eitil_#{_type.gsub(' ','_')}_calculators"
55
- end
56
-
57
- create_array_calculators
58
- end
59
-
60
- def eitil_calculator(_name, _proc)
61
- # skip calculator methods for primary and foreign key columns
62
- return if _name.to_s =~ /^id_[a-z]{1,}$/ || _name.to_s =~ /_id_[a-z]{1,}$/
63
-
64
- define_singleton_method(_name) { _proc.call } unless respond_to? _name
65
- end
66
-
67
- def calculator_columns_of_type(data_type)
68
- columns_hash.select { |column,v| v.sql_type == data_type }
69
- end
70
-
71
- def create_eitil_integer_calculators
72
- calculator_columns_of_type("integer")&.map do |column, object|
73
- SharableNumberCalculators.call self, column
74
- end
75
- end
76
-
77
- def create_eitil_bigint_calculators
78
- calculator_columns_of_type("bigint")&.map do |column, object|
79
- SharableNumberCalculators.call self, column
80
- end
81
- end
82
-
83
- def create_eitil_double_precision_calculators
84
- calculator_columns_of_type("double\ precision")&.map do |column, object|
85
- SharableNumberCalculators.call self, column
86
- end
87
- end
88
-
89
- def create_eitil_numeric_calculators
90
- calculator_columns_of_type("numeric")&.map do |column, object|
91
- SharableNumberCalculators.call self, column
92
- end
93
- end
94
-
95
- def create_array_calculators
96
- columns = columns_hash.select { |column,v| v.sql_type == "text" && v.default == "{}" }
97
- columns&.map do |column, object|
98
- SharableIterableCalculators.call self, column
99
- end
100
- end
101
-
102
- end
103
- end
104
- end
@@ -1,95 +0,0 @@
1
-
2
- # require "eitil_wrapper/records/default_scopes"
3
-
4
- # require "eitil_wrapper/railtie" to run the dynamic dispatch as an init hook during boot
5
- require "eitil_wrapper/railtie"
6
-
7
- module EitilWrapper
8
- module Records
9
- module DefaultScopes
10
-
11
- Eitil::ApplicationRecordModules << self
12
-
13
- SharableDateScopes = -> (_class, column) {
14
- _class.eitil_scope :"#{column}_today", -> { where("#{column} = ?", Date.today) }
15
- _class.eitil_scope :"#{column}_past", -> { where("#{column} < ?", Date.today) }
16
- _class.eitil_scope :"#{column}_future", -> { where("#{column} > ?", Date.today) }
17
-
18
- _class.eitil_scope :"#{column}_on_date", -> (date) { where("#{column} = ?", date) }
19
- _class.eitil_scope :"#{column}_before_date", -> (date) { where("#{column} = ?", date) }
20
- _class.eitil_scope :"#{column}_after_date", -> (date) { where("#{column} = ?", date) }
21
- _class.eitil_scope :"#{column}_between_dates", -> (from, till) { where("#{column} >= ? and #{column} <= ?", from, till) }
22
- }
23
-
24
- SharableNumScopes = -> (_class, column) {
25
- _class.eitil_scope :"#{column}_equal_to", -> (number) { where("#{column} = ?", number) }
26
- _class.eitil_scope :"#{column}_lower_than", -> (number) { where("#{column} = <", number) }
27
- _class.eitil_scope :"#{column}_higher_than", -> (number) { where("#{column} = >", number) }
28
- _class.eitil_scope :"#{column}_between", -> (min, max) { where("#{column} >= ? and #{column} <= ?", min, max) }
29
- }
30
-
31
- def inherited(subclass)
32
- super
33
- return if Eitil.skip_default_scopes_for_models.include?(subclass.to_s.to_sym)
34
-
35
- # Set the proper table_names for namespaced models. Without setting this,
36
- # Rails run into problems due to the fact that the first call to the model's
37
- # constant triggers this initializer first, and only thereafter the model file
38
- # which sets the correct table_name through a macro.
39
-
40
- namespaced_class = subclass.to_s.include?('::')
41
- subclass.table_name = subclass.to_s.gsub('::', '_').downcase.pluralize if namespaced_class
42
-
43
- subclass.use_eitil_scopes
44
-
45
- rescue => e
46
- puts "default scopes failed for class '#{subclass}' with expected table '#{subclass.table_name}' because of #{e.class} and '#{e.to_s.split(' ').first}'"
47
- end
48
-
49
- def use_eitil_scopes
50
- return if abstract_class?
51
- %i[boolean datetime date integer float].each { |_type| send :"create_eitil_#{_type}_scopes" }
52
- end
53
-
54
- def eitil_scope(_name, _proc)
55
- scope _name, _proc unless respond_to? _name
56
- end
57
-
58
- def columns_of_type(data_type)
59
- columns_hash.select { |column,v| v.sql_type_metadata.type == data_type }
60
- end
61
-
62
- def create_eitil_boolean_scopes
63
- columns_of_type(:boolean)&.map do |column, object|
64
- eitil_scope :"#{column}_true", -> { where(column => true) }
65
- eitil_scope :"#{column}_false", -> { where(column => [false, nil]) }
66
- end
67
- end
68
-
69
- def create_eitil_datetime_scopes
70
- columns_of_type(:datetime)&.map do |column, object|
71
- SharableDateScopes.call self, column
72
- end
73
- end
74
-
75
- def create_eitil_date_scopes
76
- columns_of_type(:date)&.map do |column, object|
77
- SharableDateScopes.call self, column
78
- end
79
- end
80
-
81
- def create_eitil_integer_scopes
82
- columns_of_type(:integer)&.map do |column, object|
83
- SharableNumScopes.call self, column
84
- end
85
- end
86
-
87
- def create_eitil_float_scopes
88
- columns_of_type(:float)&.map do |column, object|
89
- SharableNumScopes.call self, column
90
- end
91
- end
92
-
93
- end
94
- end
95
- end
@@ -1,81 +0,0 @@
1
-
2
- # require "eitil_wrapper/records/default_sorts"
3
-
4
- # require "eitil_wrapper/railtie" to run the dynamic dispatch as an init hook during boot
5
- require "eitil_wrapper/railtie"
6
-
7
-
8
- module EitilWrapper
9
- module Records
10
- module DefaultSorts
11
-
12
- Eitil::ApplicationRecordModules << self
13
-
14
- SharableDateSorts = -> (_class, column) {
15
- _class.eitil_sort :"#{column}_oldest_first", -> { _class.order("#{column} ASC") }
16
- _class.eitil_sort :"#{column}_newest_first", -> { _class.order("#{column} DESC") }
17
- }
18
-
19
- SharableNumSorts = -> (_class, column) {
20
- _class.eitil_sort :"#{column}_ascending", -> { _class.order("#{column} ASC") }
21
- _class.eitil_sort :"#{column}_descending", -> { _class.order("#{column} DESC") }
22
- }
23
-
24
- def inherited(subclass)
25
- super
26
- return if Eitil.skip_default_sorts_for_models.include?(subclass.to_s.to_sym)
27
-
28
- # Set the proper table_names for namespaced models. Without setting this,
29
- # Rails run into problems due to the fact that the first call to the model's
30
- # constant triggers this initializer first, and only thereafter the model file
31
- # which sets the correct table_name through a macro.
32
-
33
- namespaced_class = subclass.to_s.include?('::')
34
- subclass.table_name = subclass.to_s.gsub('::', '_').downcase.pluralize if namespaced_class
35
-
36
- subclass.use_eitil_sorts
37
-
38
- rescue => e
39
- puts "default sorts failed for class '#{subclass}' with expected table '#{subclass.table_name}' because of #{e.class} and '#{e.to_s.split(' ').first}'"
40
- end
41
-
42
- def use_eitil_sorts
43
- return if abstract_class?
44
- %i[datetime date integer float].each { |_type| send :"create_eitil_#{_type}_sorts" }
45
- end
46
-
47
- def eitil_sort(_name, _proc)
48
- define_singleton_method(_name) { _proc.call } unless respond_to? _name
49
- end
50
-
51
- def sort_columns_of_type(data_type)
52
- columns_hash.select { |column,v| v.sql_type_metadata.type == data_type }
53
- end
54
-
55
- def create_eitil_datetime_sorts
56
- columns_of_type(:datetime)&.map do |column, object|
57
- SharableDateSorts.call self, column
58
- end
59
- end
60
-
61
- def create_eitil_date_sorts
62
- columns_of_type(:date)&.map do |column, object|
63
- SharableDateSorts.call self, column
64
- end
65
- end
66
-
67
- def create_eitil_integer_sorts
68
- columns_of_type(:integer)&.map do |column, object|
69
- SharableNumSorts.call self, column
70
- end
71
- end
72
-
73
- def create_eitil_float_sorts
74
- columns_of_type(:float)&.map do |column, object|
75
- SharableNumSorts.call self, column
76
- end
77
- end
78
-
79
- end
80
- end
81
- end
@@ -1,4 +0,0 @@
1
-
2
- require "eitil_wrapper/records/default_scopes"
3
- require "eitil_wrapper/records/default_calculators"
4
- require "eitil_wrapper/records/default_sorts"
@@ -1,48 +0,0 @@
1
-
2
- # require "eitil_wrapper/request_logger/controller_mixin"
3
-
4
- require_relative "logger_job"
5
-
6
- module EitilWrapper
7
- module RequestLogger
8
- module ControllerMixin
9
-
10
- private
11
-
12
- def log_request
13
- $request_logger_path ||= "#{Rails.root}/log/request_logger.log"
14
- EitilWrapper::RequestLogger::LoggerJob.perform_later(request_logger_object)
15
- end
16
-
17
- def request_logger_object
18
-
19
- log_request = {
20
- path: request.env["REQUEST_PATH"],
21
- method: request.env["REQUEST_METHOD"],
22
- query_str: request.env["QUERY_STRING"],
23
- }
24
-
25
- log_params = {
26
- params: params.as_json
27
- }
28
-
29
- log_attributes = {
30
- time: Time.now.strftime("%Y-%m-%d %H:%M:%S")
31
- }
32
-
33
- log = {
34
- request: log_request,
35
- params: log_params,
36
- attributes: log_attributes
37
- }
38
-
39
- log_time = log_attributes[:time]
40
- log_strf = log.deep_symbolize_keys.to_s
41
- # log_strf may be hashed through eval(log_strf)
42
-
43
- return log_strf
44
- end
45
-
46
- end
47
- end
48
- end
@@ -1,17 +0,0 @@
1
-
2
- # require "eitil_wrapper/request_logger/logger_job"
3
-
4
- # require "eitil_wrapper/railtie" to run the dynamic dispatch as an init hook during boot
5
- require "eitil_wrapper/railtie"
6
-
7
- # ISSUE: this code is currently defined eitil_wrapper/railtie.rb, since module inclusion
8
- # somehow leads to errors in the initialization process. Ideally, this code would be
9
- # defined in eitil_wrapper/request_logger/logger_job.rb and dispatched in eitil_wrapper/railtie.rb
10
-
11
- module EitilWrapper
12
- module RequestLogger
13
- module CreateLoggerJob
14
-
15
- end
16
- end
17
- end
@@ -1,5 +0,0 @@
1
-
2
- # require "eitil_wrapper/request_logger"
3
-
4
- require_relative "request_logger/controller_mixin"
5
- require_relative "request_logger/logger_job"
@@ -1,40 +0,0 @@
1
- module EitilWrapper
2
- module ExtendedResources
3
-
4
- RESOURCEFUL_ACTIONS = %i$ index new create show edit update destroy $
5
-
6
- private
7
-
8
- def extended_resources(controller, **kwargs)
9
- all_args_to_ivars binding
10
-
11
- resources(controller, **resource_args) do
12
- extended_routes&.each { |route| send(route).call controller }
13
- yield if block_given?
14
- end
15
- end
16
-
17
- def resource_args
18
- duplicate = @kwargs.dup
19
- duplicate[:only] = resourceful_routes
20
- duplicate
21
- end
22
-
23
- def resourceful_routes
24
- @kwargs.dig(:only) - extended_routes
25
- end
26
-
27
- def extended_routes
28
- @kwargs.dig(:only) - RESOURCEFUL_ACTIONS
29
- end
30
-
31
- def new_route(verb, _method, action, scope)
32
- self.class.send :define_method, _method do
33
- -> (controller) { send(verb, _method, to: "#{controller}##{action}", on: scope) }
34
- end
35
- end
36
-
37
- end
38
- end
39
-
40
- ActionDispatch::Routing::Mapper.__send__ :include, EitilWrapper::ExtendedResources
@@ -1,2 +0,0 @@
1
-
2
- require "eitil_wrapper/routes/extended_resources"
@@ -1,9 +0,0 @@
1
-
2
- require "eitil_wrapper"
3
-
4
- require "eitil_wrapper/jobs"
5
- require "eitil_wrapper/records"
6
- require "eitil_wrapper/routes"
7
- require "eitil_wrapper/callbacks"
8
- require "eitil_wrapper/decorators"
9
- require "eitil_wrapper/request_logger"