eco-helpers 3.0.14 → 3.0.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +41 -2
  3. data/eco-helpers.gemspec +15 -14
  4. data/lib/eco/api/common/people/default_parsers/date_parser.rb +6 -0
  5. data/lib/eco/api/common/session/mailer/aws_provider.rb +85 -0
  6. data/lib/eco/api/common/session/mailer/provider_base.rb +61 -0
  7. data/lib/eco/api/common/session/mailer/sendgrid_provider.rb +117 -0
  8. data/lib/eco/api/common/session/mailer.rb +42 -71
  9. data/lib/eco/api/microcases/people_refresh.rb +1 -1
  10. data/lib/eco/api/session/batch/errors.rb +2 -2
  11. data/lib/eco/api/session/batch.rb +83 -37
  12. data/lib/eco/api/session/config/api.rb +96 -37
  13. data/lib/eco/api/session/config/apis/enviro_spaces.rb +106 -0
  14. data/lib/eco/api/session/config/apis/one_off.rb +94 -0
  15. data/lib/eco/api/session/config/apis/service_up.rb +37 -0
  16. data/lib/eco/api/session/config/apis/space_helpers.rb +41 -0
  17. data/lib/eco/api/session/config/apis.rb +81 -132
  18. data/lib/eco/api/session/config.rb +21 -3
  19. data/lib/eco/api/usecases/default_cases/samples/sftp_case.rb +1 -1
  20. data/lib/eco/api/usecases/graphql/helpers/base/error_handling.rb +19 -8
  21. data/lib/eco/api/usecases/graphql/helpers/base/graphql_env.rb +1 -0
  22. data/lib/eco/api/usecases/graphql/samples/location/command/dsl.rb +3 -7
  23. data/lib/eco/api/usecases/graphql/samples/location/command/service/tree_update.rb +6 -2
  24. data/lib/eco/cli/config/options_set.rb +10 -7
  25. data/lib/eco/cli/scripting/args_helpers.rb +18 -9
  26. data/lib/eco/cli_default/options.rb +8 -0
  27. data/lib/eco/cli_default/people.rb +3 -3
  28. data/lib/eco/language/basic_logger.rb +4 -2
  29. data/lib/eco/version.rb +1 -1
  30. metadata +37 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 660f0a85b269e559ec99381ea4f621dcf8495b4c9465594824ad30da872c0e75
4
- data.tar.gz: 3baf736b197cbf7784f116dacaa28f5d049acf8d62f15cdfe3669adcb3ae0b10
3
+ metadata.gz: baeb42abbb1d31497328afd4c813dec4acfebb598546ad55a4f1265a45dc89b5
4
+ data.tar.gz: 7d4c88626946b84e1ea22f3b27eb7570a9daa6d2962036e6fbf667b000dd5996
5
5
  SHA512:
6
- metadata.gz: ed21ee420598f8dc8d45895160475b37ebb5022219d9b6bd96ca9861faa8c03cb315db4a95626a24dd5f30627253661ed51c294792c050e99a8a9b3706610676
7
- data.tar.gz: d3800bad4334ec5bbfe5d0aa5dde65befc003b66a1abb6dbb104773c7cc6c3fcbe8da959fe239b6fd9b5cf48bea570703117ca804e6c4cf1394a37c0f90dca43
6
+ metadata.gz: 8af8fdbccacb57655756a01f0c30ff1d38c58e232f77fedc5aeb058cb7260ed1863834af1995d7268d355e09c00fedc671b4417f1f14d76c25c9609a038b47d3
7
+ data.tar.gz: c4daf6291086d8b15f5eb1606291e8161e0e0326b4f5ed8e917e95d09b9c1de7ff2665e44ec3ed35986d0cd07ec232dfe40822d0d32bbd12020f7290a9ce1405
data/CHANGELOG.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- ## [3.0.14] - 2024-09-xx
5
+ ## [3.0.17] - 2024-10-xx
6
6
 
7
7
  ### Added
8
8
 
@@ -10,7 +10,46 @@ All notable changes to this project will be documented in this file.
10
10
 
11
11
  ### Fixed
12
12
 
13
- - sftp errors
13
+ ## [3.0.16] - 2024-10-15
14
+
15
+ ### Added
16
+
17
+ ### Changed
18
+
19
+ - `Eco::API::Session::Batch#launch_batch`
20
+ - Made benchmarking consistent on last batch
21
+ - upgrade `ecoportal-api` core gem
22
+
23
+ ### Fixed
24
+
25
+ ## [3.0.15] - 2024-10-01
26
+
27
+ ### Added
28
+
29
+ - Support for **api** credential **spaces** (i.e. `uat`, etc.)
30
+ - `Eco::API::Session::Config::Api`
31
+ - `Eco::API::Session::Config::Apis`
32
+
33
+ ### Changed
34
+
35
+ - moved default mailer provider to `SendGrid`
36
+ - upgrade core **gem** `ecoportal-api`
37
+ - chain `-batch-mode`
38
+ - `Eco::API::Session::Batch` print actual error message.
39
+ - `Eco::API::UseCases::GraphQL::Helpers::Base::ErrorHandling` to treat `exit` as its own category `exiting?`
40
+ - **Added** `exception?` method which is `true` if there was an `exception` or an `exit`
41
+ - `Eco::API::Session::Config#add_api`: added chaining capability via `add_space` method
42
+ - In a block it will use same params as root definition
43
+ - As a chained command, it will only define a new `space` for that enviro `name`
44
+
45
+ ### Fixed
46
+
47
+ - `SCR#get_arg` when the option can be invoked in multiple ways
48
+ - `Eco::API::Session::Batch#offer_retry_on`
49
+ - Remove repetitive backtrace
50
+ - `Eco::API::UseCases::GraphQL::Samples::Location::Command::Service::TreeUpdate#email_digest` to include a bit of backtrace when there is an exception
51
+ - `Eco::API::UseCases::GraphQL::Samples::Location::Command::DSL#inputs`
52
+ - Moved **:error** `log` to only capture request errors alone.
14
53
 
15
54
  ## [3.0.13] - 2024-09-10
16
55
 
data/eco-helpers.gemspec CHANGED
@@ -2,14 +2,14 @@
2
2
  lib = File.expand_path('lib', __dir__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
- require "./lib/eco/version"
5
+ require './lib/eco/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = "eco-helpers"
8
+ spec.name = 'eco-helpers'
9
9
  spec.version = Eco::VERSION
10
10
  spec.platform = Gem::Platform::RUBY
11
- spec.authors = ["Oscar Segura"]
12
- spec.email = ["oscar@ecoportal.co.nz"]
11
+ spec.authors = ['Oscar Segura']
12
+ spec.email = ['oscar@ecoportal.co.nz']
13
13
 
14
14
  spec.summary = "eco-helpers to manage people api cases"
15
15
  spec.homepage = "https://www.ecoportal.com"
@@ -25,14 +25,14 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  #spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
27
27
  #spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
28
- spec.require_paths = ["lib"]
28
+ spec.require_paths = ['lib']
29
29
 
30
- spec.add_development_dependency "rake", ">= 13.0.3", "< 14"
31
- spec.add_development_dependency "redcarpet", ">= 3.6.0", "< 4"
32
- spec.add_development_dependency "rspec", ">= 3.12.0", "< 4"
33
- spec.add_development_dependency "rubocop", "~> 1"
34
- spec.add_development_dependency "rubocop-rake", "~> 0"
35
- spec.add_development_dependency "yard", ">= 0.9.34", "< 1"
30
+ spec.add_development_dependency 'rake', '>= 13.0.3', '< 14'
31
+ spec.add_development_dependency 'redcarpet', '>= 3.6.0', '< 4'
32
+ spec.add_development_dependency 'rspec', '>= 3.12.0', '< 4'
33
+ spec.add_development_dependency 'rubocop', '~> 1'
34
+ spec.add_development_dependency 'rubocop-rake', '~> 0'
35
+ spec.add_development_dependency 'yard', '~> 0.9'
36
36
 
37
37
  spec.add_dependency 'amatch', '>= 0.4.1', '< 0.5'
38
38
  spec.add_dependency 'aws-sdk-s3', '>= 1.142.0', '< 2'
@@ -40,9 +40,9 @@ Gem::Specification.new do |spec|
40
40
  spec.add_dependency 'bcrypt_pbkdf', '~> 1.0'
41
41
  spec.add_dependency 'docx', '>= 0.8.0', '< 0.9'
42
42
  spec.add_dependency 'dotenv', '~> 3'
43
- spec.add_dependency 'ecoportal-api', '~> 0.10'
44
- spec.add_dependency 'ecoportal-api-graphql', '~> 0.4', '>= 0.4.1'
45
- spec.add_dependency 'ecoportal-api-v2', '~> 2.0', '>= 2.0.9'
43
+ spec.add_dependency 'ecoportal-api', '~> 0.10', '>= 0.10.4'
44
+ spec.add_dependency 'ecoportal-api-graphql', '~> 0.4', '>= 0.4.2'
45
+ spec.add_dependency 'ecoportal-api-v2', '~> 2.0', '>= 2.0.10'
46
46
  spec.add_dependency 'ed25519', '~> 1.2'
47
47
  spec.add_dependency 'fast_excel', '>= 0.5.0', '< 0.6'
48
48
  spec.add_dependency 'fuzzy_match', '>= 2.1.0', '< 2.2'
@@ -54,6 +54,7 @@ Gem::Specification.new do |spec|
54
54
  spec.add_dependency 'roo', '>= 2.10.1', '< 2.11'
55
55
  spec.add_dependency 'roo-xls', '>= 1.2.0', '< 1.3'
56
56
  spec.add_dependency 'rubyzip', '>= 2.3.2', '< 2.4'
57
+ spec.add_dependency 'sendgrid-ruby', '~> 6.7.0'
57
58
  end
58
59
 
59
60
  # rubocop:enable Gemspec/DevelopmentDependencies
@@ -34,6 +34,7 @@ class Eco::API::Common::People::DefaultParsers::DateParser < Eco::API::Common::L
34
34
  return nil if blank?(value)
35
35
  return value if value.is_a?(String)
36
36
  return nil unless [Date, Time].any? {|type| value.is_a?(type)}
37
+
37
38
  value&.strftime('%Y-%m-%d')
38
39
  rescue TypeError, Date::Error
39
40
  nil
@@ -42,6 +43,7 @@ class Eco::API::Common::People::DefaultParsers::DateParser < Eco::API::Common::L
42
43
  def date?(value)
43
44
  return true if value.nil?
44
45
  return true if value.to_s.strip.empty?
46
+
45
47
  Date.parse(value)
46
48
  true
47
49
  rescue TypeError, Date::Error
@@ -51,11 +53,13 @@ class Eco::API::Common::People::DefaultParsers::DateParser < Eco::API::Common::L
51
53
  def valid_range?(date)
52
54
  return true if date.nil?
53
55
  return false unless min_date <= date
56
+
54
57
  max_date >= date
55
58
  end
56
59
 
57
60
  def wrong!(value, attr:, desc: "Can't make a date out of")
58
61
  return if wrong(attr).key?(value)
62
+
59
63
  wrong(attr)[value] = value
60
64
  log(:warn) { "#{desc} '#{value}' for '#{attr}'" }
61
65
  nil
@@ -64,6 +68,7 @@ class Eco::API::Common::People::DefaultParsers::DateParser < Eco::API::Common::L
64
68
  def wrong(attr = nil)
65
69
  @wrong ||= {}
66
70
  return @wrong if attr.nil?
71
+
67
72
  @wrong[attr] ||= {}
68
73
  end
69
74
 
@@ -78,6 +83,7 @@ class Eco::API::Common::People::DefaultParsers::DateParser < Eco::API::Common::L
78
83
  def blank?(value)
79
84
  return true if value.nil?
80
85
  return true if value.to_s.strip.empty?
86
+
81
87
  false
82
88
  end
83
89
  end
@@ -0,0 +1,85 @@
1
+ # rubocop:disable Naming/MethodParameterName
2
+ module Eco
3
+ module API
4
+ module Common
5
+ module Session
6
+ class Mailer
7
+ class AwsProvider < ProviderBase
8
+ def send_mail(subject:, body:, to: nil, cc: nil, bcc: nil)
9
+ ses.send_email(
10
+ destination: fetch_destination(to: to, cc: cc, bcc: bcc),
11
+ source: fetch_from,
12
+ message: {
13
+ subject: {
14
+ charset: "UTF-8",
15
+ data: subject
16
+ },
17
+ body: {
18
+ # NOTE: (html) will let you send html instead
19
+ # you can use both at once if you like
20
+ text: {
21
+ charset: "UTF-8",
22
+ data: body
23
+ }
24
+ }
25
+ }
26
+ )
27
+ end
28
+
29
+ # @return [Boolean] whether or not the mailer is configured for usage.
30
+ def configured?
31
+ fetch_access_key_id && fetch_secret_access_key && fetch_region
32
+ end
33
+
34
+ private
35
+
36
+ def credentials
37
+ @credentials ||= {
38
+ id: 'AWS_ACCESS_KEY_ID',
39
+ key: 'AWS_SECRET_ACCESS_KEY'
40
+ }
41
+ end
42
+
43
+ def ses
44
+ require 'aws-sdk-ses'
45
+ @ses ||= Aws::SES::Client.new(
46
+ access_key_id: fetch_access_key_id,
47
+ secret_access_key: fetch_secret_access_key,
48
+ region: fetch_region
49
+ )
50
+ rescue StandardError => err
51
+ log(:error) {
52
+ "Trying to send an email with wrong email configuration: #{err}"
53
+ }
54
+ end
55
+
56
+ def fetch_destination(to: nil, cc: nil, bcc: nil)
57
+ {
58
+ to_addresses: [fetch_to(to)].flatten.compact.uniq
59
+ }.tap do |dest|
60
+ cc = [cc].flatten.compact.uniq
61
+ bcc = [bcc].flatten.compact.uniq
62
+ dest.merge!(cc_addresses: cc) unless cc.empty?
63
+ dest.merge!(bcc_addresses: bcc) unless bcc.empty?
64
+ end
65
+ end
66
+
67
+ def fetch_region
68
+ config.mailer.region || ENV['AWS_REGION']
69
+ end
70
+
71
+ def fetch_server
72
+ config.mailer.server
73
+ end
74
+
75
+ def fetch_message_id_domain
76
+ config.mailer.message_id_domain
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+ # rubocop:enable Naming/MethodParameterName
@@ -0,0 +1,61 @@
1
+ module Eco
2
+ module API
3
+ module Common
4
+ module Session
5
+ class Mailer
6
+ class ProviderBase
7
+ class << self
8
+ def to_desc(to: nil, cc: nil, bcc: nil)
9
+ cc_to = [cc].flatten.compact.uniq
10
+ bcc_to = [bcc].flatten.compact.uniq
11
+ { to_addresses: [to].flatten.compact.uniq }.tap do |dest|
12
+ dest.merge!(cc_addresses: cc_to) unless cc_to.empty?
13
+ dest.merge!(bcc_addresses: bcc_to) unless bcc_to.empty?
14
+ end
15
+ end
16
+ end
17
+
18
+ include Eco::Language::AuxiliarLogger
19
+
20
+ attr_reader :config
21
+
22
+ def initialize(config, logger:)
23
+ @config = config
24
+ @logger = logger
25
+ end
26
+
27
+ def send_mail(subject:, body:, to: nil, cc: nil, bcc: nil) # rubocop:disable Lint/UnusedMethodArgument
28
+ raise "You must implement this method"
29
+ end
30
+
31
+ def fetch_to(value = nil)
32
+ value || config.mailer.to
33
+ end
34
+
35
+ private
36
+
37
+ def credentials
38
+ raise "You must implement this method"
39
+ end
40
+
41
+ def fetch_from(value = nil)
42
+ value || config.mailer.from
43
+ end
44
+
45
+ def fetch_access_key_id
46
+ env_mail(:id) || config.mailer.access_key_id
47
+ end
48
+
49
+ def fetch_secret_access_key
50
+ env_mail(:key) || config.mailer.secret_access_key
51
+ end
52
+
53
+ def env_mail(prop)
54
+ ENV[credentials[prop]]
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,117 @@
1
+ # rubocop:disable Naming/MethodParameterName
2
+ module Eco
3
+ module API
4
+ module Common
5
+ module Session
6
+ class Mailer
7
+ class SendgridProvider < ProviderBase
8
+ def send_mail(subject:, body:, to: nil, cc: nil, bcc: nil)
9
+ return false unless sendgrid
10
+
11
+ data = to_data(
12
+ subject: subject,
13
+ body: body,
14
+ to: to,
15
+ cc: cc,
16
+ bcc: bcc
17
+ )
18
+
19
+ mailer._("send").post(request_body: data)
20
+ end
21
+
22
+ def fetch_to(value = nil)
23
+ emails = [super].flatten.compact
24
+ to_email_model(emails)
25
+ end
26
+
27
+ # @return [Boolean] whether or not the mailer is configured for usage.
28
+ def configured?
29
+ fetch_secret_access_key
30
+ end
31
+
32
+ private
33
+
34
+ def credentials
35
+ @credentials ||= {
36
+ id: 'SENDGRID_ACCESS_ID',
37
+ key: 'SENDGRID_ACCESS_KEY'
38
+ }
39
+ end
40
+
41
+ def to_data(subject:, body:, to: nil, cc: nil, bcc: nil)
42
+ {
43
+ "personalizations" => [
44
+ {
45
+ "to" => fetch_to(to).flatten,
46
+ "subject" => subject
47
+ }.tap do |pers|
48
+ merge_if('cc', cc, target: pers)
49
+ merge_if('bcc', bcc, target: pers)
50
+ end
51
+ ],
52
+ "from" => fetch_from,
53
+ "content" => [
54
+ {
55
+ "type" => "text/plain",
56
+ "value" => body
57
+ }
58
+ ]
59
+ }
60
+ end
61
+
62
+ def mailer
63
+ @mailer ||= sendgrid&.client&.mail
64
+ end
65
+
66
+ def sendgrid
67
+ require 'sendgrid-ruby'
68
+ extend(::SendGrid) unless is_a?(SendGrid)
69
+
70
+ @sendgrid ||= SendGrid::API.new(
71
+ api_key: fetch_secret_access_key
72
+ )
73
+ rescue StandardError => err
74
+ log(:error) {
75
+ "Trying to send an email with wrong email configuration: #{err}"
76
+ }
77
+ nil
78
+ end
79
+
80
+ def to_email_model(value)
81
+ case value
82
+ when Array
83
+ value.map do |val|
84
+ to_email_model(val)
85
+ end.compact
86
+ else
87
+ return if value.to_s.strip.empty?
88
+
89
+ {
90
+ "email" => value
91
+ }
92
+ end
93
+ end
94
+
95
+ def merge_if(key, data, target: {})
96
+ return if data.to_s.strip.empty?
97
+
98
+ key_data = to_email_model(data)
99
+
100
+ return if key_data.nil?
101
+ return if key_data.empty?
102
+
103
+ target.merge!({key.to_s => key_data})
104
+ end
105
+
106
+ def fetch_from(value = nil)
107
+ email = [super].flatten.compact.first
108
+ to_email_model(email)
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+
117
+ # rubocop:enable Naming/MethodParameterName
@@ -1,4 +1,8 @@
1
1
  # rubocop:disable Naming/MethodParameterName
2
+
3
+ require_relative 'mailer/provider_base'
4
+ require_relative 'mailer/aws_provider'
5
+ require_relative 'mailer/sendgrid_provider'
2
6
  module Eco
3
7
  module API
4
8
  module Common
@@ -6,12 +10,17 @@ module Eco
6
10
  class Mailer
7
11
  include Eco::Language::AuxiliarLogger
8
12
 
13
+ DEFAULT_PROVIDER = :sendgrid
14
+
15
+ attr_reader :provider
16
+
9
17
  # @param enviro [Eco::API::Common::Session::Environment]
10
- def initialize(enviro:)
18
+ def initialize(enviro:, provider: DEFAULT_PROVIDER)
11
19
  msg = "Required Environment object (enviro:). Given: #{enviro.class}"
12
20
  raise msg if enviro && !enviro.is_a?(Eco::API::Common::Session::Environment)
13
21
 
14
- @enviro = enviro
22
+ @enviro = enviro
23
+ @provider = provider || DEFAULT_PROVIDER
15
24
  end
16
25
 
17
26
  # Sends an email
@@ -19,25 +28,27 @@ module Eco
19
28
  # @param subject [String] subject of the email
20
29
  # @param body [String] `html` or plain text message
21
30
  def mail(subject:, body:, to: nil, cc: nil, bcc: nil)
22
- ses.send_email(
23
- destination: fetch_destination(to: to, cc: cc, bcc: bcc),
24
- source: fetch_from,
25
- message: {
26
- subject: {
27
- charset: "UTF-8",
28
- data: subject,
29
- },
30
- body: {
31
- # NOTE: (html) will let you send html instead
32
- # you can use both at once if you like
33
- text: {
34
- charset: "UTF-8",
35
- data: body
36
- }
37
- }
38
- }
31
+ return false unless (serv = service)
32
+
33
+ unless serv.configured?
34
+ msg = "Mailer: You are missing configuration parameters "
35
+ msg << "for '#{provider}'. Review your .env file"
36
+ log(:error) { msg }
37
+ return false
38
+ end
39
+
40
+ serv.send_mail(
41
+ subject: subject,
42
+ body: body,
43
+ to: to,
44
+ cc: cc,
45
+ bcc: bcc
39
46
  ).tap do |response|
40
- msg = "Sent email (MessageId: #{response.message_id}) to #{fetch_destination(to: to, cc: cc, bcc: bcc)}"
47
+ next unless response
48
+
49
+ to_addr = serv.fetch_to(to)
50
+ # msg = "Sent email (MessageId: #{response.message_id}) to #{fetch_destination(to: to, cc: cc, bcc: bcc)}"
51
+ msg = "Sent email #{ProviderBase.to_desc(to: to_addr, cc: cc, bcc: bcc)}"
41
52
  puts msg
42
53
  log(:debug) { msg }
43
54
  end
@@ -45,21 +56,18 @@ module Eco
45
56
 
46
57
  private
47
58
 
48
- def ses
49
- require 'aws-sdk-ses'
50
- begin
51
- @ses ||= Aws::SES::Client.new(
52
- access_key_id: fetch_access_key_id,
53
- secret_access_key: fetch_secret_access_key,
54
- region: fetch_region
55
- )
56
- rescue StandardError => err
57
- log(:error) {
58
- "Trying to send an email with wrong email configuration: #{err}"
59
- }
59
+ def service
60
+ case provider
61
+ when :aws
62
+ AwsProvider.new(config, logger: logger)
63
+ when :sendgrid
64
+ SendgridProvider.new(config, logger: logger)
65
+ else
66
+ msg = "Unknown mail provider '#{provider}'"
67
+ puts msg
68
+ log(:debug) { msg }
69
+ nil
60
70
  end
61
-
62
- @ses
63
71
  end
64
72
 
65
73
  def logger
@@ -69,43 +77,6 @@ module Eco
69
77
  def config
70
78
  @enviro.config || {}
71
79
  end
72
-
73
- def fetch_destination(to: nil, cc: nil, bcc: nil)
74
- cc_to = [cc].flatten.compact.uniq
75
- bcc_to = [bcc].flatten.compact.uniq
76
- { to_addresses: [fetch_to(to)].flatten }.tap do |dest|
77
- dest.merge!(cc_addresses: cc_to) unless cc_to.empty?
78
- dest.merge!(bcc_addresses: bcc_to) unless bcc_to.empty?
79
- end
80
- end
81
-
82
- def fetch_to(value = nil)
83
- value || config.mailer.to
84
- end
85
-
86
- def fetch_from(value = nil)
87
- value || config.mailer.from
88
- end
89
-
90
- def fetch_access_key_id
91
- config.mailer.access_key_id || ENV['AWS_ACCESS_KEY_ID']
92
- end
93
-
94
- def fetch_secret_access_key
95
- config.mailer.secret_access_key || ENV['AWS_SECRET_ACCESS_KEY']
96
- end
97
-
98
- def fetch_region
99
- config.mailer.region || ENV['AWS_REGION']
100
- end
101
-
102
- def fetch_server
103
- config.mailer.server
104
- end
105
-
106
- def fetch_message_id_domain
107
- config.mailer.message_id_domain
108
- end
109
80
  end
110
81
  end
111
82
  end
@@ -25,7 +25,7 @@ module Eco
25
25
 
26
26
  created = people.length - ini
27
27
  msg = "Going to refresh #{people.length} people with server data"
28
- msg += " (including #{created} that were created)" if created.positive?
28
+ msg << " (including #{created} that were created)" if created.positive?
29
29
  log(:info) { msg }
30
30
 
31
31
  start = Time.now
@@ -116,7 +116,7 @@ module Eco
116
116
  msgs = strs
117
117
 
118
118
  if msgs.empty?
119
- "There were no errors for the current batch '#{method}'!! ;)"
119
+ "There were no errors for the current batch '#{method}'!! ;) "
120
120
  else
121
121
  "There were #{msgs.length} errors:\n" + msgs.join("\n")
122
122
  end
@@ -127,7 +127,7 @@ module Eco
127
127
 
128
128
  if msgs.empty?
129
129
  log(:info) {
130
- "There were no errors for the current batch '#{method}'!! ;)"
130
+ "There were no errors for the current batch '#{method}'!! ;) "
131
131
  }
132
132
  else
133
133
  msg = "There were #{msgs.length} errors:\n"