eitil 2.0.3 → 2.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -1
  3. data/lib/eitil/all.rb +0 -1
  4. data/lib/eitil/railtie.rb +1 -1
  5. data/lib/eitil/version.rb +1 -1
  6. data/spec/dummy_app/app/models/user.rb +0 -25
  7. data/spec/spec_helper.rb +0 -2
  8. metadata +2 -30
  9. data/eitil_integrate/README.md +0 -19
  10. data/eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/drop_data.rb +0 -63
  11. data/eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/format_data.rb +0 -30
  12. data/eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/initialize.rb +0 -22
  13. data/eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/present_data.rb +0 -31
  14. data/eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/reduce_data.rb +0 -18
  15. data/eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/sum_data.rb +0 -84
  16. data/eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum.rb +0 -10
  17. data/eitil_integrate/lib/eitil_integrate/application_exporter/default_export.rb +0 -44
  18. data/eitil_integrate/lib/eitil_integrate/application_exporter/helpers.rb +0 -50
  19. data/eitil_integrate/lib/eitil_integrate/application_exporter/infos.rb +0 -20
  20. data/eitil_integrate/lib/eitil_integrate/application_exporter/initialize.rb +0 -32
  21. data/eitil_integrate/lib/eitil_integrate/application_exporter/log_state.rb +0 -81
  22. data/eitil_integrate/lib/eitil_integrate/application_exporter/lookups.rb +0 -50
  23. data/eitil_integrate/lib/eitil_integrate/application_exporter/selectors.rb +0 -58
  24. data/eitil_integrate/lib/eitil_integrate/application_exporter/setters.rb +0 -27
  25. data/eitil_integrate/lib/eitil_integrate/application_exporter/store_file.rb +0 -34
  26. data/eitil_integrate/lib/eitil_integrate/application_exporter/style_cells.rb +0 -104
  27. data/eitil_integrate/lib/eitil_integrate/application_exporter/validations.rb +0 -28
  28. data/eitil_integrate/lib/eitil_integrate/application_exporter/write_cells.rb +0 -78
  29. data/eitil_integrate/lib/eitil_integrate/application_exporter/write_messages.rb +0 -18
  30. data/eitil_integrate/lib/eitil_integrate/application_exporter.rb +0 -23
  31. data/eitil_integrate/lib/eitil_integrate/railtie.rb +0 -7
  32. data/eitil_integrate/lib/eitil_integrate.rb +0 -4
  33. data/spec/eitil_wrapper/callbacks/helper_methods_spec.rb +0 -34
  34. data/spec/eitil_wrapper/jobs/single_method_job_spec.rb +0 -72
  35. data/spec/eitil_wrapper/routes/extended_resources_spec.rb +0 -16
  36. data/spec/eitil_wrapper/scopes/default_scopes_spec.rb +0 -154
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f5c9cca8a4db961ae507f9326d97344ccb4de0c92b6c5104b1736b37e10c8498
4
- data.tar.gz: 5ab03a4673c04380440686de8b702ab6e9f241240cdff749d1ddcf85a753c660
3
+ metadata.gz: 4beb8f9bfd939bb2015a9e742271f2f7df0ae8c69a640f243635ff2ad7f25fc9
4
+ data.tar.gz: 61c9cd613c6a365d62e75c768c6293534ce30deba2f4099d7b003f0d5c97991d
5
5
  SHA512:
6
- metadata.gz: 62c4d31b23148b143ec87613f8b7e102db21d44709904449c85d938ebfd8b4fe7997814ecb96921ca73964d02aa1354d5214c9534faa6c7ef204c47259f35275
7
- data.tar.gz: e7b017c534422ecd3b5f4e648def6197817094e7a40a313c4eaebe7794cffd183be51efe7670629044db372fe6a0e8d3c86c2587233b469df990a9b429c70146
6
+ metadata.gz: 9168dbc018c1f5a50fa3130fe44e8f9c13f2fd235c2148bdfce526439abf1a0e4d70688fbc040d6c5f72207559343b8f5e0f10f4c118cb930d2f27a1f5a4b76a
7
+ data.tar.gz: 945012264b1d857dfea4f1fc5a923da2d1239f57b4a915700ebfd917f389a6dba7481ba80c8088601927f9361a0bdb3a2a6f1f14300a2a8ee0ab9a59d75f10dc
data/README.md CHANGED
@@ -13,7 +13,6 @@ Our gem currently exists of five seperate layers (Railties), which can be integr
13
13
  - EitilCore, [docs](/eitil_core) > extends the core classes of Ruby and rails.
14
14
  - EitilSupport, [docs](/eitil_support) > provides utility through stand-alone classes and modules.
15
15
  - EitilStore, [docs](/eitil_store) > stores data in containers, such as Regexp instances.
16
- - EitilIntegrate, [docs](/eitil_integrate) > provides seamless integrations with select gems and API's, through helper methods stored in PORO's.
17
16
 
18
17
 
19
18
 
data/lib/eitil/all.rb CHANGED
@@ -12,7 +12,6 @@ Eitil::Layers.each do |layer|
12
12
  rescue LoadError => e
13
13
  puts "failed to require #{layer} and #{layer}/railtie"
14
14
  puts "message: #{e.message}"
15
- # binding.pry
16
15
 
17
16
  end
18
17
  end
data/lib/eitil/railtie.rb CHANGED
@@ -6,7 +6,7 @@
6
6
  module Eitil
7
7
 
8
8
  Root = Gem.loaded_specs['eitil']&.full_gem_path
9
- Layers = %w( eitil_core eitil_support eitil_store eitil_integrate )
9
+ Layers = %w( eitil_core eitil_support eitil_store )
10
10
  ApplicationRecordModules = []
11
11
 
12
12
  end
data/lib/eitil/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Eitil
2
2
 
3
- VERSION = '2.0.3'
3
+ VERSION = '2.0.7'
4
4
 
5
5
  end
@@ -2,29 +2,4 @@ class User < ApplicationRecord
2
2
 
3
3
  has_one :address
4
4
 
5
- # ---
6
- # below are methods, used for testing EitilWrapper::Jobs
7
-
8
- def self.this_is_a_singleton_method(positional_value = nil, keyword_value: nil)
9
- "this is a singleton method"
10
- return positional_value if positional_value
11
- return keyword_value if keyword_value
12
- return nil
13
- end
14
-
15
- new_job :this_is_a_singleton_method
16
- new_job_now :this_is_a_singleton_method
17
-
18
- def this_is_an_instance_method(positional_value = nil, keyword_value: nil)
19
- "this is an instance method"
20
- return positional_value if positional_value
21
- return keyword_value if keyword_value
22
- return nil
23
- end
24
-
25
- new_job :this_is_an_instance_method
26
- new_job_now :this_is_an_instance_method
27
-
28
- # ---
29
-
30
5
  end
data/spec/spec_helper.rb CHANGED
@@ -7,12 +7,10 @@ require 'eitil'
7
7
  # Eventually implement specs for all layers.
8
8
 
9
9
  require "eitil_core/railtie"
10
- require "eitil_integrate/railtie"
11
10
  # require "eitil_store/railtie"
12
11
  # require "eitil_support/railtie"
13
12
 
14
13
  require "eitil_core"
15
- require "eitil_integrate"
16
14
  # require "eitil_store"
17
15
  # require "eitil_support"
18
16
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eitil
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jurriaan Schrofer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-19 00:00:00.000000000 Z
11
+ date: 2021-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -231,30 +231,6 @@ files:
231
231
  - eitil_core/lib/eitil_core/type_checkers/is_num_or_nan.rb
232
232
  - eitil_core/lib/eitil_core/validations.rb
233
233
  - eitil_core/lib/eitil_core/validations/run_validations.rb
234
- - eitil_integrate/README.md
235
- - eitil_integrate/lib/eitil_integrate.rb
236
- - eitil_integrate/lib/eitil_integrate/application_exporter.rb
237
- - eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum.rb
238
- - eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/drop_data.rb
239
- - eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/format_data.rb
240
- - eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/initialize.rb
241
- - eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/present_data.rb
242
- - eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/reduce_data.rb
243
- - eitil_integrate/lib/eitil_integrate/application_exporter/auto_sum/sum_data.rb
244
- - eitil_integrate/lib/eitil_integrate/application_exporter/default_export.rb
245
- - eitil_integrate/lib/eitil_integrate/application_exporter/helpers.rb
246
- - eitil_integrate/lib/eitil_integrate/application_exporter/infos.rb
247
- - eitil_integrate/lib/eitil_integrate/application_exporter/initialize.rb
248
- - eitil_integrate/lib/eitil_integrate/application_exporter/log_state.rb
249
- - eitil_integrate/lib/eitil_integrate/application_exporter/lookups.rb
250
- - eitil_integrate/lib/eitil_integrate/application_exporter/selectors.rb
251
- - eitil_integrate/lib/eitil_integrate/application_exporter/setters.rb
252
- - eitil_integrate/lib/eitil_integrate/application_exporter/store_file.rb
253
- - eitil_integrate/lib/eitil_integrate/application_exporter/style_cells.rb
254
- - eitil_integrate/lib/eitil_integrate/application_exporter/validations.rb
255
- - eitil_integrate/lib/eitil_integrate/application_exporter/write_cells.rb
256
- - eitil_integrate/lib/eitil_integrate/application_exporter/write_messages.rb
257
- - eitil_integrate/lib/eitil_integrate/railtie.rb
258
234
  - eitil_store/README.md
259
235
  - eitil_store/lib/eitil_store.rb
260
236
  - eitil_store/lib/eitil_store/array.rb
@@ -419,10 +395,6 @@ files:
419
395
  - spec/eitil_core/type_checkers/is_num_or_nan_spec.rb
420
396
  - spec/eitil_integrate/application_exporter/auto_sum_spec.rb
421
397
  - spec/eitil_integrate/application_exporter/initialize_spec.rb
422
- - spec/eitil_wrapper/callbacks/helper_methods_spec.rb
423
- - spec/eitil_wrapper/jobs/single_method_job_spec.rb
424
- - spec/eitil_wrapper/routes/extended_resources_spec.rb
425
- - spec/eitil_wrapper/scopes/default_scopes_spec.rb
426
398
  - spec/spec_helper.rb
427
399
  homepage: https://github.com/eitje-app/eitil_engine
428
400
  licenses:
@@ -1,19 +0,0 @@
1
-
2
-
3
-
4
- # EitilIntegrate
5
-
6
- EitilIntegrate provides seamless integrations with select gems and API's, through helper methods stored in PORO's.
7
-
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.
@@ -1,63 +0,0 @@
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? ? to_float(item) : 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! do |array|
29
- array.reject { |item| item.respond_to?(:empty?) && item.empty? }
30
- end
31
- end
32
-
33
- def drop_non_accepted_values
34
- @hash.transform_values! { |array| array.reject { |item| !accepted_value? item } }
35
- end
36
-
37
- def accepted_value?(value)
38
- @value = value
39
- value_is_a_int || value_is_a_float || value_is_a_time_string
40
- end
41
-
42
- def to_float(object)
43
- # Implemented a new to_float method, which replaces .to_f, because "7.5".to_f
44
- # would correctly return 7.5, but "7,5" would incorrectly return 7.0.
45
- object.is_a?(String) ? object.gsub(',','.').to_f : object.to_f
46
- end
47
-
48
- def value_is_a_int
49
- @value.is_a? Integer
50
- end
51
-
52
- def value_is_a_float
53
- @value.is_a? Float
54
- end
55
-
56
- def value_is_a_time_string
57
- ( @value.scan(/^[A-Za-z]+/).blank? && @value.scan(/\d{2}:\d{2}:\d{2}/).first ) ||
58
- ( @value.scan(/^[A-Za-z]+/).blank? && @value.scan(/\d{2}:\d{2}/).first )
59
- end
60
-
61
- end
62
- end
63
- end
@@ -1,30 +0,0 @@
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
- # outcommented method in favour of AutoSum#chronic_sum_array: no longer accept days, since the method excepts
14
- # either hh:mm or hh:mm:ss
15
-
16
- # def format_time_strings
17
- # @hash.transform_values! { |array| array.map { |item| incomplete_time_string?(item) ? "#{item}:00" : item } }
18
- # end
19
-
20
- def incomplete_time_string?(string)
21
- string.is_a?(String) && string.length == 5 && string.scan(/\d{2}:\d{2}/)
22
- end
23
-
24
- def format_ints_to_floats
25
- @hash.transform_values! { |array| array.map { |item| item.is_a?(Integer) ? item.to_f : item } }
26
- end
27
-
28
- end
29
- end
30
- end
@@ -1,22 +0,0 @@
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
@@ -1,31 +0,0 @@
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
@@ -1,18 +0,0 @@
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
@@ -1,84 +0,0 @@
1
-
2
- # require "eitil_integrate/application_exporter/auto_sum/sum_data"
3
-
4
- module EitilIntegrate::RubyXL
5
- module AutoSum
6
- class << self
7
-
8
- # Reduce values and alter data structure.
9
-
10
- def sum_data
11
- sum_floats
12
- sum_time_strings
13
- unpack_arrays
14
- end
15
-
16
- def sum_floats
17
- @hash.transform_values! { |array| float_array?(array) ? [array.sum] : array }
18
- end
19
-
20
- def sum_time_strings
21
- @hash.transform_values! { |array| time_string_array?(array) ? chronic_sum_array(array) : array }
22
- end
23
-
24
- def chronic_sum_array(array)
25
-
26
- #total minutes, hours and days
27
- tm, th, td = [0]*3
28
-
29
- array.each do |time_string|
30
-
31
- # add empty 0's, to avoid defining nil values when time values are absent
32
- h, m, s = *time_string.split(':').map(&:to_i), *[0]*3
33
- tm += m; th += h
34
-
35
- end
36
-
37
- # ALERT: the outcomment below is made to skip formatting days at all, so that
38
- # – following eitje business logic – we currently only return an hh:mm notation
39
-
40
- # # parsing times into maxes (60 m, 24 h, ∞ days)
41
- # th += tm / 60
42
- # tm = tm % 60
43
- # td += th / 24
44
- # th = th % 24
45
-
46
- # # formatting strings
47
- # sd = td.to_s
48
-
49
- sh = th.to_s.rjust(2,'0')
50
- sm = tm.to_s.rjust(2,'0')
51
-
52
- if sm.to_i >= 60
53
- sh = ( sh.to_i + (sm.to_i / 60 )).to_s
54
- sm = ( sm.to_i % 60 ).to_s
55
- end
56
-
57
- # ALERT: the outcomment below is made to skip formatting days at all, so that
58
- # – following eitje business logic – we currently only return an hh:mm notation
59
-
60
- # [[sd, sh, sm].join(':')]
61
- [[sh, sm].join(':')]
62
- end
63
-
64
- def format_time(time)
65
- time.to_s.length == 1 ? "0#{time}" : time.to_s
66
- end
67
-
68
- def float_array?(array)
69
- return false if array.empty?
70
- array.all? { |item| item.is_a?(Float) }
71
- end
72
-
73
- def time_string_array?(array)
74
- return false if array.empty?
75
- array.all? { |item| item.is_a?(String) && item.scan(/\d{2}:\d{2}:\d{2}/) }
76
- end
77
-
78
- def unpack_arrays
79
- @hash.transform_values! { |array| array.empty? ? nil : array.first }
80
- end
81
-
82
- end
83
- end
84
- end
@@ -1,10 +0,0 @@
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"
@@ -1,44 +0,0 @@
1
-
2
- # require "eitil_integrate/application_exporter/default_export"
3
-
4
- require "eitil_integrate/application_exporter/initialize"
5
-
6
- module EitilIntegrate::RubyXL
7
- class ApplicationExporter
8
-
9
- # The #create_file method is taken out of #export, to be overwritten by
10
- # exports variants that want to loop over objects and call it multiple times.
11
- # => e.g. the context of multiple Environment for a single Organisation
12
-
13
- def export
14
- prepare_export
15
- create_file
16
- process_export
17
- end
18
-
19
- private
20
-
21
- def prepare_export
22
- validate_args_presence
23
- validate_args_value
24
- end
25
-
26
- def create_file
27
- name_sheet
28
- set_data
29
- validate_data
30
- fill_messages
31
- fill_header
32
- fill_file
33
- end
34
-
35
- def process_export
36
- style_file
37
- log_state
38
- save_file
39
- end
40
-
41
- alias_method :base_create_file, :create_file
42
-
43
- end
44
- end
@@ -1,50 +0,0 @@
1
-
2
- # require "eitil_integrate/application_exporter/helpers"
3
-
4
- require "eitil_integrate/application_exporter/initialize"
5
-
6
- module EitilIntegrate::RubyXL
7
- class ApplicationExporter
8
-
9
- def array_to_indexed_hash(array)
10
- array = array_nils_substituted(array)
11
- array = array_values_strf(array)
12
- array.flatten.map.with_index { |item, index| { "#{index}": item } }.inject &:merge
13
- end
14
-
15
- def array_nils_substituted(array)
16
- array.map { |value| value || '' }
17
- end
18
-
19
- def array_values_strf(array)
20
- array.map &:to_s
21
- end
22
-
23
- def sanitize_int(integer)
24
- (integer.nan? || integer.infinite?) ? 0 : integer
25
- end
26
-
27
- def pretty_date_range
28
- date_range.to_s.gsub '..', ' – '
29
- end
30
-
31
- def strf_date_range
32
- date_range.map &:to_s
33
- end
34
-
35
- def double_digit_time(time)
36
- time.to_s.length == 1 ? "0#{time}" : time.to_s
37
- end
38
-
39
- def format_minutes(minutes)
40
- hours = double_digit_time(minutes / 60)
41
- minutes = double_digit_time(minutes % 60)
42
- "#{hours}:#{minutes}"
43
- end
44
-
45
- def name_sheet(name='Worksheet')
46
- sheet.sheet_name = name
47
- end
48
-
49
- end
50
- end
@@ -1,20 +0,0 @@
1
-
2
- # require "eitil_integrate/application_exporter/infos"
3
-
4
- require "eitil_integrate/application_exporter/initialize"
5
-
6
- module EitilIntegrate::RubyXL
7
- class ApplicationExporter
8
- class << self
9
-
10
- attr_accessor :info
11
-
12
- def set_info(_h)
13
- @info ||= {}
14
- k, v = *_h.first
15
- @info[k] = v
16
- end
17
-
18
- end
19
- end
20
- end
@@ -1,32 +0,0 @@
1
-
2
- # require "eitil_integrate/application_exporter/initialize"
3
-
4
- require "eitil_core/setters/set_ivars"
5
- require "eitil_core/argument_helpers/all_kwargs_to_ivars"
6
- require "action_view"
7
- require "rubyXL"
8
-
9
- module EitilIntegrate
10
- module RubyXL
11
- class ApplicationExporter
12
-
13
- include ActionView::Helpers::NumberHelper
14
-
15
- attr_accessor :book, :sheet, :x, :y, :start_date, :end_date, :date_range, :write_log
16
-
17
- def initialize(attributes={})
18
-
19
- @start_date ||= attributes[:start_date]
20
- @end_date ||= attributes[:end_date]
21
-
22
- set_ivars :start_date, :end_date, :date_range
23
-
24
- @book = ::RubyXL::Workbook.new
25
- @sheet = @book.worksheets[0]
26
- @x ||= 0
27
- @y ||= 0
28
- end
29
-
30
- end
31
- end
32
- end
@@ -1,81 +0,0 @@
1
-
2
- # require "eitil_integrate/application_exporter/log_state"
3
-
4
- module EitilIntegrate::RubyXL
5
- class ApplicationExporter
6
-
7
- private
8
-
9
- def log_state
10
-
11
- return unless write_log == true
12
-
13
- # create_log_sheet
14
- book.add_worksheet('log')
15
-
16
- # manage sheets
17
- previous_sheet = @sheet.sheet_name
18
- @sheet = @book["log"]
19
-
20
- # manage coordinates
21
- previous_x = @x
22
- @x = 0
23
-
24
- # log everything we want to log
25
- report_state
26
-
27
- # style logs
28
- base_style_first_x_columns_width 1, 40
29
- style_first_column_bold
30
-
31
- # restore what was previously active
32
- @sheet = @book[previous_sheet]
33
- @x = previous_x
34
-
35
- end
36
-
37
- def report_state
38
- instance_variables.each do |ivar|
39
-
40
- variable_name = ivar.to_s
41
- variable_value = format_value(instance_variable_get(ivar))
42
-
43
- array_to_row [variable_name, variable_value]
44
-
45
- end
46
- end
47
-
48
- # formatting the values to a human readably format is important, because otherwise Excel warns
49
- # users on safety when opening the file.
50
- def format_value(value)
51
- value_class = value.class
52
-
53
- if value_class == Hash
54
- value.map {|k,v| "#{k.to_s.split('_').map(&:capitalize).join(' ')}: #{v}"}.join(' // ')
55
-
56
- elsif value_class == Array && value.all? { |item| item.class.superclass == ApplicationRecord }
57
- "#{value.class} #{value.map(&:id).join(', ')}"
58
-
59
- elsif value_class.superclass == ApplicationRecord
60
- "#{value.class} ##{value.id}"
61
-
62
- elsif value_class.superclass == ActiveRecord::Relation
63
- "#{value.class.to_s.split('::').first} #{value.ids.to_s.delete('[]')}"
64
-
65
- elsif value_class.superclass == ActiveRecord::Associations::CollectionProxy
66
- "#{value.class.to_s.split('::').first} #{value.ids.to_s.delete('[]')}"
67
-
68
- elsif value_class == RubyXL::Workbook
69
- value_class.name
70
-
71
- elsif value_class == RubyXL::Worksheet
72
- value_class.name
73
-
74
- else
75
- value.to_s
76
-
77
- end
78
- end
79
-
80
- end
81
- end