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.
- checksums.yaml +4 -4
- data/README.md +39 -331
- data/eitil_core/README.md +288 -0
- data/eitil_core/lib/eitil_core.rb +24 -0
- data/eitil_core/lib/eitil_core/application_controller.rb +2 -0
- data/eitil_core/lib/eitil_core/application_controller/slice_params.rb +14 -0
- data/eitil_core/lib/eitil_core/application_record.rb +4 -0
- data/eitil_core/lib/eitil_core/application_record/all_associations.rb +16 -0
- data/eitil_core/lib/eitil_core/application_record/find_by_like.rb +15 -0
- data/eitil_core/lib/eitil_core/application_record/where_like.rb +15 -0
- data/eitil_core/lib/eitil_core/argument_helpers.rb +5 -0
- data/eitil_core/lib/eitil_core/argument_helpers/all_args_to_ivars.rb +12 -0
- data/eitil_core/lib/eitil_core/argument_helpers/all_kwargs_to_ivars.rb +12 -0
- data/eitil_core/lib/eitil_core/argument_helpers/args_to_ivars.rb +12 -0
- data/eitil_core/lib/eitil_core/concerns.rb +2 -0
- data/{config/initializers/monkeys/module.rb → eitil_core/lib/eitil_core/concerns/include_concerns_of.rb} +3 -0
- data/eitil_core/lib/eitil_core/datetime.rb +2 -0
- data/{config/initializers/monkeys/date_time.rb → eitil_core/lib/eitil_core/datetime/prettify.rb} +3 -0
- data/eitil_core/lib/eitil_core/errors.rb +2 -0
- data/eitil_core/lib/eitil_core/errors/raise_error.rb +11 -0
- data/eitil_core/lib/eitil_core/float.rb +2 -0
- data/{config/initializers/monkeys/float.rb → eitil_core/lib/eitil_core/float/safe_to_i.rb} +0 -0
- data/eitil_core/lib/eitil_core/hash.rb +2 -0
- data/{config/initializers/monkeys/hash.rb → eitil_core/lib/eitil_core/hash/auto_dig.rb} +3 -0
- data/eitil_core/lib/eitil_core/lookups.rb +2 -0
- data/{config/initializers/monkeys/object.rb → eitil_core/lib/eitil_core/lookups/all_methods.rb} +3 -0
- data/eitil_core/lib/eitil_core/railtie.rb +37 -0
- data/eitil_core/lib/eitil_core/safe_executions.rb +3 -0
- data/eitil_core/lib/eitil_core/safe_executions/safe_call.rb +12 -0
- data/eitil_core/lib/eitil_core/safe_executions/safe_send.rb +12 -0
- data/eitil_core/lib/eitil_core/setters.rb +2 -0
- data/eitil_core/lib/eitil_core/setters/set_ivars.rb +12 -0
- data/eitil_core/lib/eitil_core/type_checkers.rb +2 -0
- data/{config/initializers/monkeys/string.rb → eitil_core/lib/eitil_core/type_checkers/is_num_or_nan.rb} +5 -5
- data/eitil_core/lib/eitil_core/validations.rb +2 -0
- data/eitil_core/lib/eitil_core/validations/run_validations.rb +10 -0
- data/eitil_integrate/README.md +8 -0
- data/eitil_integrate/lib/eitil_integrate.rb +0 -0
- data/eitil_integrate/lib/eitil_integrate/railtie.rb +10 -0
- data/eitil_store/README.md +16 -0
- data/eitil_store/lib/eitil_store.rb +4 -0
- data/eitil_store/lib/eitil_store/railtie.rb +10 -0
- data/eitil_store/lib/eitil_store/regex.rb +4 -0
- data/eitil_store/lib/eitil_store/regex/regex.rb +41 -0
- data/eitil_support/README.md +78 -0
- data/eitil_support/lib/eitil_support.rb +5 -0
- data/eitil_support/lib/eitil_support/directory.rb +2 -0
- data/eitil_support/lib/eitil_support/directory/lookups.rb +23 -0
- data/eitil_support/lib/eitil_support/railtie.rb +10 -0
- data/eitil_support/lib/eitil_support/stacktrace.rb +4 -0
- data/{app/models/eitil/stack_trace → eitil_support/lib/eitil_support/stacktrace}/audit.rb +2 -2
- data/{app/models/eitil/stack_trace → eitil_support/lib/eitil_support/stacktrace}/call.rb +1 -1
- data/{app/models/eitil/stack_trace → eitil_support/lib/eitil_support/stacktrace}/stack.rb +2 -2
- data/eitil_wrapper/README.md +181 -0
- data/eitil_wrapper/lib/eitil_wrapper.rb +7 -0
- data/eitil_wrapper/lib/eitil_wrapper/decorators.rb +3 -0
- data/{config/initializers/wrappers → eitil_wrapper/lib/eitil_wrapper}/decorators/application_decorator.rb +1 -1
- data/eitil_wrapper/lib/eitil_wrapper/decorators/controller_decorator.rb +60 -0
- data/eitil_wrapper/lib/eitil_wrapper/jobs.rb +4 -0
- data/eitil_wrapper/lib/eitil_wrapper/jobs/new_job.rb +34 -0
- data/eitil_wrapper/lib/eitil_wrapper/jobs/new_job_debugger.rb +37 -0
- data/eitil_wrapper/lib/eitil_wrapper/jobs/single_method_job.rb +8 -0
- data/eitil_wrapper/lib/eitil_wrapper/railtie.rb +49 -0
- data/eitil_wrapper/lib/eitil_wrapper/routes.rb +2 -0
- data/{config/initializers/wrappers → eitil_wrapper/lib/eitil_wrapper}/routes/extended_resources.rb +2 -2
- data/eitil_wrapper/lib/eitil_wrapper/scopes.rb +2 -0
- data/eitil_wrapper/lib/eitil_wrapper/scopes/default_scopes.rb +80 -0
- data/lib/eitil.rb +1 -1
- data/lib/eitil/all.rb +18 -0
- data/lib/eitil/engine.rb +24 -0
- data/lib/eitil/railtie.rb +6 -0
- data/lib/eitil/version.rb +3 -1
- metadata +82 -34
- data/app/controllers/eitil/application_controller.rb +0 -4
- data/app/jobs/eitil/application_job.rb +0 -4
- data/app/mailers/eitil/application_mailer.rb +0 -6
- data/app/models/eitil/application_record.rb +0 -5
- data/config/initializers/modules/dir.rb +0 -21
- data/config/initializers/monkeys/application_controller.rb +0 -14
- data/config/initializers/monkeys/application_record.rb +0 -30
- data/config/initializers/monkeys/kernel.rb +0 -48
- data/config/initializers/wrappers/decorators/controller_decorator.rb +0 -63
- data/config/initializers/wrappers/jobs/active_job_macros.rb +0 -52
- data/config/initializers/wrappers/jobs/single_method_job.rb +0 -24
- data/config/initializers/wrappers/scopes/default_scopes.rb +0 -83
- data/config/routes.rb +0 -2
@@ -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