eitil 1.0.2 → 1.0.3.e.1

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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +0 -1
  3. data/eitil_core/README.md +60 -4
  4. data/eitil_core/lib/eitil_core/argument_helpers.rb +8 -0
  5. data/eitil_core/lib/eitil_core/argument_helpers/all_args_to_ivars_bang.rb +15 -0
  6. data/eitil_core/lib/eitil_core/argument_helpers/all_kwargs_to_ivars_bang.rb +15 -0
  7. data/eitil_core/lib/eitil_core/argument_helpers/args_to_h.rb +15 -0
  8. data/eitil_core/lib/eitil_core/argument_helpers/args_to_h_bang.rb +17 -0
  9. data/eitil_core/lib/eitil_core/argument_helpers/args_to_ivars_bang.rb +15 -0
  10. data/eitil_core/lib/eitil_core/float/safe_to_i.rb +3 -0
  11. data/eitil_core/lib/eitil_core/lookups.rb +2 -1
  12. data/eitil_core/lib/eitil_core/lookups/gem_path.rb +10 -0
  13. data/eitil_integrate/README.md +11 -0
  14. data/eitil_integrate/lib/eitil_integrate.rb +4 -0
  15. data/eitil_integrate/lib/eitil_integrate/application_exporter.rb +22 -0
  16. data/eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum.rb +10 -0
  17. data/eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/drop_data.rb +54 -0
  18. data/eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/format_data.rb +27 -0
  19. data/eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/initialize.rb +22 -0
  20. data/eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/present_data.rb +31 -0
  21. data/eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/reduce_data.rb +18 -0
  22. data/eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/sum_data.rb +56 -0
  23. data/eitil_integrate/lib/eitil_integrate/application_exporter/default_export.rb +43 -0
  24. data/eitil_integrate/lib/eitil_integrate/application_exporter/helpers.rb +50 -0
  25. data/eitil_integrate/lib/eitil_integrate/application_exporter/infos.rb +20 -0
  26. data/eitil_integrate/lib/eitil_integrate/application_exporter/initialize.rb +28 -0
  27. data/eitil_integrate/lib/eitil_integrate/application_exporter/lookups.rb +40 -0
  28. data/eitil_integrate/lib/eitil_integrate/application_exporter/selectors.rb +58 -0
  29. data/eitil_integrate/lib/eitil_integrate/application_exporter/setters.rb +27 -0
  30. data/eitil_integrate/lib/eitil_integrate/application_exporter/store_file.rb +34 -0
  31. data/eitil_integrate/lib/eitil_integrate/application_exporter/style_cells.rb +97 -0
  32. data/eitil_integrate/lib/eitil_integrate/application_exporter/validations.rb +28 -0
  33. data/eitil_integrate/lib/eitil_integrate/application_exporter/write_cells.rb +78 -0
  34. data/eitil_integrate/lib/eitil_integrate/application_exporter/write_messages.rb +18 -0
  35. data/eitil_support/lib/eitil_support/directory/lookups.rb +3 -0
  36. data/lib/eitil.rb +0 -1
  37. data/lib/eitil/all.rb +2 -3
  38. data/lib/eitil/railtie.rb +32 -1
  39. data/lib/eitil/version.rb +1 -1
  40. metadata +57 -5
  41. data/lib/eitil/engine.rb +0 -38
  42. data/lib/tasks/eitil_tasks.rake +0 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2f00d6cb9618a2ac3b44228369fbf6c0dc1a7c4e4f7b8f458fb74ab49d842d93
4
- data.tar.gz: c9b52d358edd18661a02c7961d30706b123f24708b48f864c842c8d6d5554d51
3
+ metadata.gz: 1872b8eec9fde6e3cc707f5d66eb6c595000b3d4bb1d57d100b5759b39167cc2
4
+ data.tar.gz: d4cc20f05567ae72bfd693efe75e559584308a16fdf3322f6de6f2bd13ab448d
5
5
  SHA512:
6
- metadata.gz: 013e9004bbc5bb836c43c008ad749d55c05f9088268247d8519be72e28636735604cc8af8a3405848f88bc92cb902cad3bdd3af72d4907cb33fc2a9ec87dcde1
7
- data.tar.gz: af236edfe30a37449bbe255d18deffa75e196a7825eed2da9fc81d542f4e694c05931e139a4f40999ba63df1f25574a142d553669d7c2bde6c2b50d5ac8574f6
6
+ metadata.gz: 747044b67ccab759ecd85c6e58e03607fff0038bfe98aad4f66e6fa8680fd06ac4fbc59922339c4f25ff7e38bdd7dac6feccb00bc0abb806626c1ccdb1a54300
7
+ data.tar.gz: 165cb9650bbfe9639da5ac493d01ea728001df63515854a5483149a9ff182a0f40796385ec089bf39e72cfb844423d0fa06d94cf1e52e4d0b5addec33f102b64
data/Rakefile CHANGED
@@ -1,7 +1,6 @@
1
1
  require "bundler/setup"
2
2
 
3
3
  APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
4
- load "rails/tasks/engine.rake"
5
4
 
6
5
  load "rails/tasks/statistics.rake"
7
6
 
data/eitil_core/README.md CHANGED
@@ -76,11 +76,11 @@ all_args_to_ivars(binding)
76
76
 
77
77
 
78
78
  ```ruby
79
- # require "eitil_core/argument_helpers/args_to_ivars"
79
+ # require "eitil_core/argument_helpers/all_args_to_ivars_bang"
80
80
 
81
- args_to_ivars(binding, *local_vars)
82
- # sets specified keywords arguments of the method's local binding to instance variables
83
- # call as: all_args_to_ivars binding :user_id, :user_name
81
+ all_args_to_ivars!
82
+ # works the same as .all_args_to_ivars, except that passing the binding is no longer required
83
+ # production usage is discouraged by the creator of the supporting gem
84
84
  ```
85
85
 
86
86
 
@@ -94,6 +94,52 @@ all_kwargs_to_ivars(local_binding, namespace= :kwargs)
94
94
  ```
95
95
 
96
96
 
97
+ ```ruby
98
+ # require "eitil_core/argument_helpers/all_kwargs_to_ivars_bang"
99
+
100
+ all_kwargs_to_ivars!(namespace= :kwargs)
101
+ # works the same as .all_kwargs_to_ivars, except that passing the binding is no longer required
102
+ # production usage is discouraged by the creator of the supporting gem
103
+ ```
104
+
105
+
106
+ ```ruby
107
+ # require "eitil_core/argument_helpers/args_to_h"
108
+
109
+ args_to_h(binding, *local_vars)
110
+ # creates a hash, with a given local_var as keys and its value as value
111
+ # call as: args_to_h(binding, :username, :password)
112
+ # => { username: 'jurriaan', password: 'matz_is_nice' }
113
+ ```
114
+
115
+
116
+ ```ruby
117
+ # require "eitil_core/argument_helpers/args_to_h_bang"
118
+
119
+ args_to_h!(*local_vars)
120
+ # works the same as .args_to_h, except that passing the binding is no longer required
121
+ # production usage is discouraged by the creator of the supporting gem
122
+ ```
123
+
124
+
125
+ ```ruby
126
+ # require "eitil_core/argument_helpers/args_to_ivars"
127
+
128
+ args_to_ivars(binding, *local_vars)
129
+ # sets specified keywords arguments of the method's local binding to instance variables
130
+ # call as: all_args_to_ivars binding :user_id, :user_name
131
+ ```
132
+
133
+
134
+ ```ruby
135
+ # require "eitil_core/argument_helpers/args_to_ivars_bang"
136
+
137
+ args_to_ivars!(*local_vars)
138
+ # works the same as .args_to_ivars, except that passing the binding is no longer required
139
+ # production usage is discouraged by the creator of the supporting gem
140
+ ```
141
+
142
+
97
143
  ## Concerns
98
144
 
99
145
  ```ruby
@@ -203,6 +249,16 @@ all_methods(include_ancestors = true, grep: nil)
203
249
  ```
204
250
 
205
251
 
252
+ ```ruby
253
+ # require "eitil_core/lookups/gem_path"
254
+
255
+ Find.gem_path(gem_name)
256
+ # finds the root of an installed gem, allowing you to traverse its paths from there.
257
+ # call as: Find.gem_path("rails")
258
+ # => "/Users/jurriaanschrofer/.rvm/gems/ruby-2.6.5/gems/rails-5.2.3"
259
+ ```
260
+
261
+
206
262
  ## SafeExecutions
207
263
 
208
264
  ```ruby
@@ -1,5 +1,13 @@
1
1
  # require "eitil_core/arugment_helpers"
2
2
 
3
3
  require "eitil_core/argument_helpers/all_args_to_ivars"
4
+ require "eitil_core/argument_helpers/all_args_to_ivars_bang"
5
+
4
6
  require "eitil_core/argument_helpers/args_to_ivars"
7
+ require "eitil_core/argument_helpers/args_to_ivars_bang"
8
+
9
+ require "eitil_core/argument_helpers/args_to_h"
10
+ require "eitil_core/argument_helpers/args_to_h_bang"
11
+
5
12
  require "eitil_core/argument_helpers/all_kwargs_to_ivars"
13
+ require "eitil_core/argument_helpers/all_kwargs_to_ivars_bang"
@@ -0,0 +1,15 @@
1
+
2
+ # require "eitil_core/argument_helpers/all_args_to_ivars_bang"
3
+
4
+ require "eitil_core/lookups/gem_path"
5
+ require "#{Find.gem_path('binding_of_caller')}/lib/binding_of_caller/mri.rb"
6
+
7
+ Kernel.module_eval do
8
+
9
+ def all_args_to_ivars!
10
+ binding.of_caller(1).local_variables.each do |lvar|
11
+ instance_variable_set("@#{lvar}", binding.of_caller(2).local_variable_get(lvar))
12
+ end
13
+ end
14
+
15
+ end
@@ -0,0 +1,15 @@
1
+
2
+ # require "eitil_core/argument_helpers/all_kwargs_to_ivars_bang"
3
+
4
+ require "eitil_core/lookups/gem_path"
5
+ require "#{Find.gem_path('binding_of_caller')}/lib/binding_of_caller/mri.rb"
6
+
7
+ Kernel.module_eval do
8
+
9
+ def all_kwargs_to_ivars!(namespace=:kwargs)
10
+ binding.of_caller(1).local_variable_get(namespace).each do |name, value|
11
+ instance_variable_set "@#{name}", value
12
+ end
13
+ end
14
+
15
+ end
@@ -0,0 +1,15 @@
1
+
2
+ # require "eitil_core/argument_helpers/args_to_h"
3
+
4
+ Kernel.module_eval do
5
+
6
+ def args_to_h(local_binding, *local_vars)
7
+
8
+ local_vars.reject { |lvar| lvar == local_binding }
9
+ .reject { |lvar| lvar.to_s.starts_with?('_') }
10
+ .map { |lvar| { "#{lvar}": local_binding.local_variable_get(lvar) } }
11
+ .inject &:merge
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,17 @@
1
+
2
+ # require "eitil_core/argument_helpers/args_to_h_bang"
3
+
4
+ require "eitil_core/lookups/gem_path"
5
+ require "#{Find.gem_path('binding_of_caller')}/lib/binding_of_caller/mri.rb"
6
+
7
+ Kernel.module_eval do
8
+
9
+ def args_to_h!(*local_vars)
10
+
11
+ local_vars.reject { |lvar| lvar.to_s.starts_with?('_') }
12
+ .map { |lvar| { "#{lvar}": binding.of_caller(2).local_variable_get(lvar) } }
13
+ .inject &:merge
14
+
15
+ end
16
+
17
+ end
@@ -0,0 +1,15 @@
1
+
2
+ # require "eitil_core/argument_helpers/args_to_ivars_bang"
3
+
4
+ require "eitil_core/lookups/gem_path"
5
+ require "#{Find.gem_path('binding_of_caller')}/lib/binding_of_caller/mri.rb"
6
+
7
+ Kernel.module_eval do
8
+
9
+ def args_to_ivars!(*local_vars)
10
+ local_vars.each do |lvar|
11
+ instance_variable_set("@#{lvar}", binding.of_caller(2).local_variable_get(lvar))
12
+ end
13
+ end
14
+
15
+ end
@@ -1,3 +1,6 @@
1
+
2
+ # require "eitil_core/float/safe_to_i"
3
+
1
4
  class Float
2
5
 
3
6
  # converts a float to an integer, only when no decimal values are lost.
@@ -1,2 +1,3 @@
1
1
 
2
- require "eitil_core/lookups/all_methods"
2
+ require "eitil_core/lookups/all_methods"
3
+ require "eitil_core/lookups/gem_path"
@@ -0,0 +1,10 @@
1
+
2
+ # require "eitil_core/lookups/gem_path"
3
+
4
+ module Find
5
+
6
+ def self.gem_path(gem_name)
7
+ Gem.loaded_specs[gem_name].full_gem_path
8
+ end
9
+
10
+ end
@@ -6,3 +6,14 @@
6
6
  EitilIntegrate provides seamless integrations with select gems and API's, through helper methods stored in PORO's.
7
7
 
8
8
 
9
+ ## EitilIntegrate::RubyXL::ApplicationExporter
10
+
11
+ ```ruby
12
+
13
+ require "eitil_integrate/application_exporter"
14
+
15
+ ```
16
+
17
+ EitilIntegrate::RubyXL::ApplicationExporter provides an extensive wrapper around the RubyXL gem, and can be used by setting it as the superclass of your application's exporter classes.
18
+
19
+ Since the functionality is diverse and changing, you can best look at the source code files for the options and methods.
@@ -0,0 +1,4 @@
1
+
2
+ # require "eitil_integrate"
3
+
4
+ require "eitil_integrate/application_exporter"
@@ -0,0 +1,22 @@
1
+ # require "eitil_integrate/application_exporter"
2
+
3
+ # base file, which is required by all others
4
+ require_relative "application_exporter/initialize"
5
+
6
+ # temp file, with methods that should, at some point, moved elsewhere
7
+ require_relative "application_exporter/helpers"
8
+
9
+ # files split by theme and purpose, feel free to cherry-pick
10
+ require_relative "application_exporter/default_export"
11
+ require_relative "application_exporter/validations"
12
+ require_relative "application_exporter/write_cells"
13
+ require_relative "application_exporter/write_messages"
14
+ require_relative "application_exporter/style_cells"
15
+ require_relative "application_exporter/store_file"
16
+ require_relative "application_exporter/setters"
17
+ require_relative "application_exporter/selectors"
18
+ require_relative "application_exporter/lookups"
19
+ require_relative "application_exporter/infos"
20
+
21
+ # the AutoSum module, which is a seperately functioning module (service)
22
+ require_relative "application_exporter/auto_sum"
@@ -0,0 +1,10 @@
1
+
2
+ # require "eitil_integrate/application_exporter/auto_sum"
3
+
4
+ require_relative "auto_sum/initialize"
5
+
6
+ require_relative "auto_sum/drop_data"
7
+ require_relative "auto_sum/format_data"
8
+ require_relative "auto_sum/reduce_data"
9
+ require_relative "auto_sum/sum_data"
10
+ require_relative "auto_sum/present_data"
@@ -0,0 +1,54 @@
1
+
2
+ # require "eitil_integrate/application_exporter/auto_sum/drop_data"
3
+
4
+ module EitilIntegrate::RubyXL
5
+ module AutoSum
6
+ class << self
7
+
8
+ def drop_data
9
+ # since excel layout consistency requires stringified values, we first need
10
+ # to convert strings back to floats.
11
+ try_float_conversion
12
+
13
+ # after the required conversions, drop all values that should not be accepted.
14
+ drop_nil_values
15
+ drop_empty_values
16
+ drop_non_accepted_values
17
+ end
18
+
19
+ def try_float_conversion
20
+ @hash.transform_values! { |array| array.map { |item| item.is_num? ? item.to_f : item } }
21
+ end
22
+
23
+ def drop_nil_values
24
+ @hash.transform_values! &:compact
25
+ end
26
+
27
+ def drop_empty_values
28
+ @hash.transform_values! { |array| array.reject { |item| item.safe_send :empty? } }
29
+ end
30
+
31
+ def drop_non_accepted_values
32
+ @hash.transform_values! { |array| array.reject { |item| !accepted_value? item } }
33
+ end
34
+
35
+ def accepted_value?(value)
36
+ @value = value
37
+ value_is_a_int || value_is_a_float || value_is_a_time_string
38
+ end
39
+
40
+ def value_is_a_int
41
+ @value.is_a? Integer
42
+ end
43
+
44
+ def value_is_a_float
45
+ @value.is_a? Float
46
+ end
47
+
48
+ def value_is_a_time_string
49
+ @value.scan(/\d{2}:\d{2}:\d{2}/).first || @value.scan(/\d{2}:\d{2}/).first
50
+ end
51
+
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,27 @@
1
+
2
+ # require "eitil_integrate/application_exporter/auto_sum/format_data"
3
+
4
+ module EitilIntegrate::RubyXL
5
+ module AutoSum
6
+ class << self
7
+
8
+ def format_data
9
+ format_time_strings
10
+ format_ints_to_floats
11
+ end
12
+
13
+ def format_time_strings
14
+ @hash.transform_values! { |array| array.map { |item| incomplete_time_string?(item) ? "#{item}:00" : item } }
15
+ end
16
+
17
+ def incomplete_time_string?(string)
18
+ string.is_a?(String) && string.length == 5 && string.scan(/\d{2}:\d{2}/)
19
+ end
20
+
21
+ def format_ints_to_floats
22
+ @hash.transform_values! { |array| array.map { |item| item.is_a?(Integer) ? item.to_f : item } }
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,22 @@
1
+
2
+ # require "eitil_integrate/application_exporter/auto_sum/initialize"
3
+
4
+ module EitilIntegrate::RubyXL
5
+ module AutoSum
6
+ class << self
7
+
8
+ def perform(hashed_excel)
9
+ @hash = hashed_excel
10
+
11
+ drop_data
12
+ format_data
13
+ reduce_data
14
+ sum_data
15
+ present_data
16
+
17
+ @hash
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,31 @@
1
+
2
+ # require "eitil_integrate/application_exporter/auto_sum/present_data"
3
+
4
+ module EitilIntegrate::RubyXL
5
+ module AutoSum
6
+ class << self
7
+
8
+ # As final step, prepare the data for the excel file, according to formatting requirements.
9
+
10
+ def present_data
11
+ transform_floats_to_integers
12
+ transform_values_to_strings
13
+ set_title
14
+ end
15
+
16
+ def transform_floats_to_integers
17
+ @hash.transform_values! { |value| value.is_a?(Float) ? value.safe_to_i.round(3) : value }
18
+ end
19
+
20
+ def transform_values_to_strings
21
+ @hash.transform_values! { |value| value&.to_s }
22
+ end
23
+
24
+ def set_title
25
+ # @hash[0] = 'Totaal' unless @hash[0]
26
+ @hash[0] = 'Totaal'
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,18 @@
1
+
2
+ # require "eitil_integrate/application_exporter/auto_sum/reduce_data"
3
+
4
+ module EitilIntegrate::RubyXL
5
+ module AutoSum
6
+ class << self
7
+
8
+ def reduce_data
9
+ drop_multi_class_arrays
10
+ end
11
+
12
+ def drop_multi_class_arrays
13
+ @hash.transform_values! { |array| array.map(&:class).uniq.length == 1 ? array : [] }
14
+ end
15
+
16
+ end
17
+ end
18
+ end