eitil 0.3.10 → 1.0.1.e.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +39 -331
  3. data/eitil_core/README.md +288 -0
  4. data/eitil_core/lib/eitil_core.rb +24 -0
  5. data/eitil_core/lib/eitil_core/application_controller.rb +2 -0
  6. data/eitil_core/lib/eitil_core/application_controller/slice_params.rb +14 -0
  7. data/eitil_core/lib/eitil_core/application_record.rb +4 -0
  8. data/eitil_core/lib/eitil_core/application_record/all_associations.rb +16 -0
  9. data/eitil_core/lib/eitil_core/application_record/find_by_like.rb +15 -0
  10. data/eitil_core/lib/eitil_core/application_record/where_like.rb +15 -0
  11. data/eitil_core/lib/eitil_core/argument_helpers.rb +5 -0
  12. data/eitil_core/lib/eitil_core/argument_helpers/all_args_to_ivars.rb +12 -0
  13. data/eitil_core/lib/eitil_core/argument_helpers/all_kwargs_to_ivars.rb +12 -0
  14. data/eitil_core/lib/eitil_core/argument_helpers/args_to_ivars.rb +12 -0
  15. data/eitil_core/lib/eitil_core/concerns.rb +2 -0
  16. data/{config/initializers/monkeys/module.rb → eitil_core/lib/eitil_core/concerns/include_concerns_of.rb} +3 -0
  17. data/eitil_core/lib/eitil_core/datetime.rb +2 -0
  18. data/{config/initializers/monkeys/date_time.rb → eitil_core/lib/eitil_core/datetime/prettify.rb} +3 -0
  19. data/eitil_core/lib/eitil_core/errors.rb +2 -0
  20. data/eitil_core/lib/eitil_core/errors/raise_error.rb +11 -0
  21. data/eitil_core/lib/eitil_core/float.rb +2 -0
  22. data/{config/initializers/monkeys/float.rb → eitil_core/lib/eitil_core/float/safe_to_i.rb} +0 -0
  23. data/eitil_core/lib/eitil_core/hash.rb +2 -0
  24. data/{config/initializers/monkeys/hash.rb → eitil_core/lib/eitil_core/hash/auto_dig.rb} +3 -0
  25. data/eitil_core/lib/eitil_core/lookups.rb +2 -0
  26. data/{config/initializers/monkeys/object.rb → eitil_core/lib/eitil_core/lookups/all_methods.rb} +3 -0
  27. data/eitil_core/lib/eitil_core/railtie.rb +37 -0
  28. data/eitil_core/lib/eitil_core/safe_executions.rb +3 -0
  29. data/eitil_core/lib/eitil_core/safe_executions/safe_call.rb +12 -0
  30. data/eitil_core/lib/eitil_core/safe_executions/safe_send.rb +12 -0
  31. data/eitil_core/lib/eitil_core/setters.rb +2 -0
  32. data/eitil_core/lib/eitil_core/setters/set_ivars.rb +12 -0
  33. data/eitil_core/lib/eitil_core/type_checkers.rb +2 -0
  34. data/{config/initializers/monkeys/string.rb → eitil_core/lib/eitil_core/type_checkers/is_num_or_nan.rb} +5 -5
  35. data/eitil_core/lib/eitil_core/validations.rb +2 -0
  36. data/eitil_core/lib/eitil_core/validations/run_validations.rb +10 -0
  37. data/eitil_integrate/README.md +8 -0
  38. data/eitil_integrate/lib/eitil_integrate.rb +0 -0
  39. data/eitil_integrate/lib/eitil_integrate/railtie.rb +10 -0
  40. data/eitil_store/README.md +16 -0
  41. data/eitil_store/lib/eitil_store.rb +4 -0
  42. data/eitil_store/lib/eitil_store/railtie.rb +10 -0
  43. data/eitil_store/lib/eitil_store/regex.rb +4 -0
  44. data/eitil_store/lib/eitil_store/regex/regex.rb +41 -0
  45. data/eitil_support/README.md +78 -0
  46. data/eitil_support/lib/eitil_support.rb +5 -0
  47. data/eitil_support/lib/eitil_support/directory.rb +2 -0
  48. data/eitil_support/lib/eitil_support/directory/lookups.rb +23 -0
  49. data/eitil_support/lib/eitil_support/railtie.rb +10 -0
  50. data/eitil_support/lib/eitil_support/stacktrace.rb +4 -0
  51. data/{app/models/eitil/stack_trace → eitil_support/lib/eitil_support/stacktrace}/audit.rb +2 -2
  52. data/{app/models/eitil/stack_trace → eitil_support/lib/eitil_support/stacktrace}/call.rb +1 -1
  53. data/{app/models/eitil/stack_trace → eitil_support/lib/eitil_support/stacktrace}/stack.rb +2 -2
  54. data/eitil_wrapper/README.md +181 -0
  55. data/eitil_wrapper/lib/eitil_wrapper.rb +7 -0
  56. data/eitil_wrapper/lib/eitil_wrapper/decorators.rb +3 -0
  57. data/{config/initializers/wrappers → eitil_wrapper/lib/eitil_wrapper}/decorators/application_decorator.rb +1 -1
  58. data/eitil_wrapper/lib/eitil_wrapper/decorators/controller_decorator.rb +60 -0
  59. data/eitil_wrapper/lib/eitil_wrapper/jobs.rb +4 -0
  60. data/eitil_wrapper/lib/eitil_wrapper/jobs/new_job.rb +34 -0
  61. data/eitil_wrapper/lib/eitil_wrapper/jobs/new_job_debugger.rb +37 -0
  62. data/eitil_wrapper/lib/eitil_wrapper/jobs/single_method_job.rb +8 -0
  63. data/eitil_wrapper/lib/eitil_wrapper/railtie.rb +49 -0
  64. data/eitil_wrapper/lib/eitil_wrapper/routes.rb +2 -0
  65. data/{config/initializers/wrappers → eitil_wrapper/lib/eitil_wrapper}/routes/extended_resources.rb +2 -2
  66. data/eitil_wrapper/lib/eitil_wrapper/scopes.rb +2 -0
  67. data/eitil_wrapper/lib/eitil_wrapper/scopes/default_scopes.rb +80 -0
  68. data/lib/eitil.rb +1 -1
  69. data/lib/eitil/all.rb +18 -0
  70. data/lib/eitil/engine.rb +24 -0
  71. data/lib/eitil/railtie.rb +6 -0
  72. data/lib/eitil/version.rb +3 -1
  73. metadata +82 -34
  74. data/app/controllers/eitil/application_controller.rb +0 -4
  75. data/app/jobs/eitil/application_job.rb +0 -4
  76. data/app/mailers/eitil/application_mailer.rb +0 -6
  77. data/app/models/eitil/application_record.rb +0 -5
  78. data/config/initializers/modules/dir.rb +0 -21
  79. data/config/initializers/monkeys/application_controller.rb +0 -14
  80. data/config/initializers/monkeys/application_record.rb +0 -30
  81. data/config/initializers/monkeys/kernel.rb +0 -48
  82. data/config/initializers/wrappers/decorators/controller_decorator.rb +0 -63
  83. data/config/initializers/wrappers/jobs/active_job_macros.rb +0 -52
  84. data/config/initializers/wrappers/jobs/single_method_job.rb +0 -24
  85. data/config/initializers/wrappers/scopes/default_scopes.rb +0 -83
  86. data/config/routes.rb +0 -2
@@ -1,6 +0,0 @@
1
- module Eitil
2
- class ApplicationMailer < ActionMailer::Base
3
- default from: 'from@example.com'
4
- layout 'mailer'
5
- end
6
- end
@@ -1,5 +0,0 @@
1
- module Eitil
2
- class ApplicationRecord < ActiveRecord::Base
3
- self.abstract_class = true
4
- end
5
- end
@@ -1,21 +0,0 @@
1
- module Eitil::Dir
2
- class << self
3
-
4
- def contents(directory='app')
5
- Dir[File.join(directory, '**', '*')]
6
- end
7
-
8
- def files(directory='app')
9
- contents(directory).select { |file| File.file?(file) }
10
- end
11
-
12
- def subdirs(directory='app')
13
- contents(directory).select { |file| File.directory?(file) }
14
- end
15
-
16
- def lines(directory='app')
17
- files(directory).map { |file| File.open(file).count }.sum
18
- end
19
-
20
- end
21
- end
@@ -1,14 +0,0 @@
1
- module ApplicationControllerMonkey
2
- extend ActiveSupport::Concern
3
- included do
4
-
5
- private
6
-
7
- def slice_params(*args)
8
- params.slice(*args).as_json.symbolize_keys
9
- end
10
-
11
- end
12
- end
13
-
14
- ApplicationController.send :include, ApplicationControllerMonkey
@@ -1,30 +0,0 @@
1
- require "#{Eitil::Engine.root.to_s}/config/initializers/wrappers/scopes/default_scopes.rb"
2
-
3
- module ApplicationRecordMonkey
4
- extend ActiveSupport::Concern
5
- included do
6
-
7
- class << self
8
-
9
- def all_associations
10
- reflect_on_all_associations.map do |assoc|
11
- { assoc.name => assoc.association_class.to_s.demodulize }
12
- end.inject &:merge
13
- end
14
-
15
- def where_like(_hash)
16
- column, like = _hash.first
17
- where("LOWER(#{column}) LIKE ?", "%#{like.downcase}%")
18
- end
19
-
20
- def find_by_like(_hash)
21
- column, like = _hash.first
22
- find_by("LOWER(#{column}) LIKE ?", "%#{like.downcase}%")
23
- end
24
-
25
- end
26
-
27
- end
28
- end
29
-
30
- ApplicationRecord.send :include, ApplicationRecordMonkey
@@ -1,48 +0,0 @@
1
- Kernel.module_eval do
2
-
3
- def all_args_to_ivars(local_binding)
4
- local_binding.local_variables.each do |lvar|
5
- instance_variable_set("@#{lvar}", local_binding.local_variable_get(lvar))
6
- end
7
- end
8
-
9
- def args_to_ivars(local_binding, *local_vars)
10
- local_vars.each do |lvar|
11
- instance_variable_set("@#{lvar}", local_binding.local_variable_get(lvar))
12
- end
13
- end
14
-
15
- def all_kwargs_to_ivars(local_binding, namespace=:kwargs)
16
- local_binding.local_variable_get(namespace).each do |name, value|
17
- instance_variable_set "@#{name}", value
18
- end
19
- end
20
-
21
- def set_ivars(*ivars)
22
- ivars.each do |ivar|
23
- instance_variable_set("@#{ivar}", send("set_#{ivar}"))
24
- end
25
- end
26
-
27
- def run_validations(*validations)
28
- validations.each { |v| eval "validate_#{v}" }
29
- end
30
-
31
- def safe_call(*args, return_value: nil, &block)
32
- block.call self, *args
33
- rescue
34
- return_value
35
- end
36
-
37
- def safe_send(method, *args, return_value: nil)
38
- self.send method, *args
39
- rescue
40
- return_value
41
- end
42
-
43
- def raise_error(_class_name, message = nil)
44
- Object.const_set(_class_name, Class.new(StandardError)) unless Object.const_defined?(_class_name)
45
- raise _class_name.constantize.new message
46
- end
47
-
48
- end
@@ -1,63 +0,0 @@
1
- module Eitil
2
- module ControllerDecorator
3
- extend ActiveSupport::Concern
4
- included do
5
-
6
- private
7
-
8
- def decorate(dec_item, dec_method: nil, dec_class: nil, **dec_kwargs)
9
- all_args_to_ivars binding
10
- set_ivars :dec_class, :dec_method, :decorator
11
- send_to_decorator
12
- end
13
-
14
- def send_to_decorator
15
- @dec_kwargs.any? ? @decorator.send(@dec_method, @dec_item, @dec_kwargs)
16
- : @decorator.send(@dec_method, @dec_item)
17
-
18
- rescue NoMethodError => e
19
- inform_no_method_for_decorator_error
20
- @dec_item
21
- end
22
-
23
- def inform_no_method_for_decorator_error
24
- message = "Warning: NoMethodError for #{@dec_class}.#{@dec_method}, returned @dec_item instead."
25
- Logger.new("#{Rails.root}/log/decorator_log.log").warn message
26
- warn message
27
- end
28
-
29
- def set_dec_method
30
- @dec_method = @dec_method || derived_dec_method || :base
31
- end
32
-
33
- def derived_dec_method
34
- return unless respond_to? :params
35
- return :app if params["isMobile"]
36
- return :web if params["isWeb"]
37
- end
38
-
39
- def set_dec_class
40
- @dec_class = @dec_class ? manual_set_dec_class : derived_dec_class
41
- end
42
-
43
- def manual_set_dec_class
44
- "#{@dec_class}Decorator".constantize
45
- end
46
-
47
- def derived_dec_class
48
- "#{@dec_item.class.name}Decorator".constantize
49
- end
50
-
51
- def set_decorator
52
- @decorator = @dec_class.new controller_ivars
53
- end
54
-
55
- def controller_ivars
56
- eval(Eitil.get_controller_ivars_method).map do |ivar|
57
- { ivar => instance_variable_get("@#{ivar.to_s}") }
58
- end.inject &:merge
59
- end
60
-
61
- end
62
- end
63
- end
@@ -1,52 +0,0 @@
1
- Kernel.module_eval do
2
-
3
- # BEWARE: _self is currently not accepted in perform_later jobs due to serialization errors
4
-
5
- # The cases of 'id' and '_self' both handle instances, with the difference
6
- # being that 'id' works for objects that have a database record, while '_self'
7
- # works for non database supported instanes, such as an Exporter instance.
8
-
9
- def new_job(_method, *args, **kwargs)
10
-
11
- if instance_methods(false).include? _method
12
- define_method "#{_method}_job" do |_self = nil, *args, **kwargs|
13
-
14
- Eitil::SingleMethodJob.perform_later(
15
- *args, _class: self.class.to_s, _method: _method.to_s, id: safe_send(:id), _self: self.to_json, **kwargs
16
- )
17
- end
18
-
19
- elsif singleton_methods(false).include? _method
20
- define_singleton_method "#{_method}_job" do |*args, **kwargs|
21
-
22
- Eitil::SingleMethodJob.perform_later(
23
- *args, _class: to_s, _method: _method.to_s, **kwargs
24
- )
25
- end
26
- end
27
- end
28
-
29
- # BEWARE: This is an exact copy of the above method, except for .perform_now instead of .perform_later and the method's name.
30
- # The reason for not using helper methods is to not unnecessarily fill and potentially fuck up the Kernel environment.
31
-
32
- def new_job_debugger(_method, *args, **kwargs)
33
-
34
- if instance_methods(false).include? _method
35
- define_method "#{_method}_job_debugger" do |_self = nil, *args, **kwargs|
36
-
37
- Eitil::SingleMethodJob.perform_now(
38
- *args, _class: self.class.to_s, _method: _method.to_s, id: safe_send(:id), _self: self.to_json, **kwargs
39
- )
40
- end
41
-
42
- elsif singleton_methods(false).include? _method
43
- define_singleton_method "#{_method}_job_debugger" do |*args, **kwargs|
44
-
45
- Eitil::SingleMethodJob.perform_now(
46
- *args, _class: to_s, _method: _method.to_s, **kwargs
47
- )
48
- end
49
- end
50
- end
51
-
52
- end
@@ -1,24 +0,0 @@
1
- module Eitil
2
- class SingleMethodJob < ApplicationJob
3
- queue_as :default
4
-
5
- # BEWARE: _self is currently not accepted in perform_later jobs due to serialization errors
6
-
7
- # The cases of 'id' and '_self' both handle instances, with the difference
8
- # being that 'id' works for objects that have a database record, while '_self'
9
- # works for non database supported instanes, such as an Exporter instance.
10
-
11
- def perform(*args, _class:, _method:, id: nil, _self: nil, **kwargs)
12
- object =
13
- if id
14
- _class.constantize.find(id)
15
- elsif _self
16
- _self
17
- else
18
- _class.constantize
19
- end
20
-
21
- object.send _method, *args, **kwargs
22
- end
23
- end
24
- end
@@ -1,83 +0,0 @@
1
- module Eitil
2
- module DefaultScopes
3
- extend ActiveSupport::Concern
4
- included do
5
- class << self
6
-
7
- SharableDateScopes = -> (_class, column) {
8
- _class.eitil_scope :"#{column}_today", -> { where("#{column} = ?", Date.today) }
9
- _class.eitil_scope :"#{column}_past", -> { where("#{column} < ?", Date.today) }
10
- _class.eitil_scope :"#{column}_future", -> { where("#{column} > ?", Date.today) }
11
-
12
- _class.eitil_scope :"#{column}_on_date", -> (date) { where("#{column} = ?", date) }
13
- _class.eitil_scope :"#{column}_before_date", -> (date) { where("#{column} = ?", date) }
14
- _class.eitil_scope :"#{column}_after_date", -> (date) { where("#{column} = ?", date) }
15
- _class.eitil_scope :"#{column}_between_dates", -> (from, till) { where("#{column} >= ? and #{column} <= ?", from, till) }
16
-
17
- _class.eitil_scope :"#{column}_oldest_first", -> { order("#{column} ASC") }
18
- _class.eitil_scope :"#{column}_newest_first", -> { order("#{column} DESC") }
19
- }
20
-
21
- SharableNumScopes = -> (_class, column) {
22
- _class.eitil_scope :"#{column}_equal_to", -> (number) { where("#{column} = ?", number) }
23
- _class.eitil_scope :"#{column}_lower_than", -> (number) { where("#{column} = <", number) }
24
- _class.eitil_scope :"#{column}_higher_than", -> (number) { where("#{column} = >", number) }
25
- _class.eitil_scope :"#{column}_between", -> (min, max) { where("#{column} >= ? and #{column} <= ?", min, max) }
26
-
27
- _class.eitil_scope :"#{column}_ascending", -> { order("#{column} ASC") }
28
- _class.eitil_scope :"#{column}_descending", -> { order("#{column} DESC") }
29
- }
30
-
31
- def inherited(subclass)
32
- super
33
- subclass.use_eitil_scopes
34
- end
35
-
36
- def use_eitil_scopes
37
- return if abstract_class?
38
- %i[boolean datetime date integer float].each { |_type| send :"create_eitil_#{_type}_scopes" }
39
- end
40
-
41
- def eitil_scope(_name, _proc)
42
- scope _name, _proc unless respond_to? _name
43
- end
44
-
45
- def columns_of_type(data_type)
46
- columns_hash.select { |column,v| v.sql_type_metadata.type == data_type }
47
- end
48
-
49
- def create_eitil_boolean_scopes
50
- columns_of_type(:boolean)&.map do |column, object|
51
- eitil_scope :"#{column}_true", -> { where(column => true) }
52
- eitil_scope :"#{column}_false", -> { where(column => [false, nil]) }
53
- end
54
- end
55
-
56
- def create_eitil_datetime_scopes
57
- columns_of_type(:datetime)&.map do |column, object|
58
- SharableDateScopes.call self, column
59
- end
60
- end
61
-
62
- def create_eitil_date_scopes
63
- columns_of_type(:date)&.map do |column, object|
64
- SharableDateScopes.call self, column
65
- end
66
- end
67
-
68
- def create_eitil_integer_scopes
69
- columns_of_type(:integer)&.map do |column, object|
70
- SharableNumScopes.call self, column
71
- end
72
- end
73
-
74
- def create_eitil_float_scopes
75
- columns_of_type(:float)&.map do |column, object|
76
- SharableNumScopes.call self, column
77
- end
78
- end
79
-
80
- end
81
- end
82
- end
83
- end
data/config/routes.rb DELETED
@@ -1,2 +0,0 @@
1
- Eitil::Engine.routes.draw do
2
- end