avm-tools 0.84.0 → 0.85.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6a742d3c0263c2512a52c5109e56336b275560ed7db3c94fe42792021c1762a
4
- data.tar.gz: 3efdf68bf27d110a3a17ea012b208b6a59b40a05158f360f018423917fc55089
3
+ metadata.gz: 9fe892c043aa5fed89006bb8f334e2bdb5994c1c2db3ee6a76ad362a82c8f644
4
+ data.tar.gz: 2acb25eb3be3deac7ebfdb28626d0caf71bfff9efb6d4c17bb18001c6d346bcb
5
5
  SHA512:
6
- metadata.gz: 1c1fcb15c0f44dc6a91081eed404f64e1a729fce4de417ada083f09b23149a7192b33d8ed67a4d087de84c161f43aca09b10dd9a51ec4c1ce645354c2cd62b96
7
- data.tar.gz: 04bae047386b129d906a5ed2f8663ba0c0c3019a48b0b63603ac431ad4cc17163b92bae642daa9785d3c8d8277e1643d65da5ff612815e1110ae0566a8258086
6
+ metadata.gz: aeffe8cb49bb3c5c5368b921c02f0ab3e135c1036f7e81512fbfee6fe4d6b72f5fd2448ae550b97b2df654dadc2e90f0a937f89397208e7c3ee92b3569524777
7
+ data.tar.gz: 7691b14f456391f2e1f3d015c6f90c88859f27abe5faf5460537471c5bc2eed4d9876c4a7794398ba319ab9a2558cfa8edf175c983217c0362a7692f42e6fbd7
@@ -8,6 +8,7 @@ module Avm
8
8
  module AutoValues
9
9
  module Database
10
10
  DEFAULT_HOSTNAME = '127.0.0.1'
11
+ DEFAULT_LIMIT = 5
11
12
  DEFAULT_PORTS = {
12
13
  'postgresql' => 5432,
13
14
  'mysql' => 3306,
@@ -15,6 +16,7 @@ module Avm
15
16
  'sqlserver' => 1433
16
17
  }.freeze
17
18
  DEFAULT_SYSTEM = 'postgresql'
19
+ DEFAULT_TIMEOUT = 5000
18
20
 
19
21
  def auto_database_name
20
22
  inherited_entry_value(::Avm::Instances::EntryKeys::DATABASE_ID,
@@ -25,6 +27,10 @@ module Avm
25
27
  database_auto_common('hostname') || DEFAULT_HOSTNAME
26
28
  end
27
29
 
30
+ def auto_database_limit
31
+ database_auto_common('limit') || DEFAULT_LIMIT
32
+ end
33
+
28
34
  def auto_database_password
29
35
  database_auto_common('password')
30
36
  end
@@ -41,6 +47,10 @@ module Avm
41
47
  database_auto_common('system') || DEFAULT_SYSTEM
42
48
  end
43
49
 
50
+ def auto_database_timeout
51
+ database_auto_common('timeout') || DEFAULT_TIMEOUT
52
+ end
53
+
44
54
  private
45
55
 
46
56
  def database_auto_common(suffix)
@@ -41,7 +41,7 @@ module Avm
41
41
 
42
42
  {
43
43
  '' => %w[fs_path host_id source_instance_id],
44
- database: %w[id hostname name password port system username],
44
+ database: %w[id hostname limit name password port system timeout username],
45
45
  mailer: {
46
46
  '' => %w[id from reply_to],
47
47
  smtp: %w[address port domain username password authentication starttls_auto]
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avm
4
4
  module Tools
5
- VERSION = '0.84.0'
5
+ VERSION = '0.85.0'
6
6
  end
7
7
  end
@@ -1,12 +1,13 @@
1
1
  default: &default
2
2
  adapter: %%DATABASE.SYSTEM%%
3
- pool: 40
4
- timeout: 5000
3
+ pool: %%DATABASE.LIMIT%%
4
+ timeout: %%DATABASE.TIMEOUT%%
5
5
  encoding: unicode
6
6
  username: %%DATABASE.USERNAME%%
7
7
  password: %%DATABASE.PASSWORD%%
8
8
  host: %%DATABASE.HOSTNAME%%
9
9
  port: %%DATABASE.PORT%%
10
+ reconnect: true
10
11
 
11
12
  development: &development
12
13
  <<: *default
@@ -17,15 +17,25 @@ module EacRubyUtils
17
17
  end
18
18
 
19
19
  def run
20
- setup = self
21
20
  a_module.extend(::ActiveSupport::Concern)
22
- a_module.included do
23
- ::EacRubyUtils::CommonConcern::ClassSetup.new(setup, self, :include).run
24
- end
25
- a_module.prepended do
26
- ::EacRubyUtils::CommonConcern::ClassSetup.new(setup, self, :prepend).run
21
+ include_or_prepend(:included, :include)
22
+ include_or_prepend(:prepended, :prepend)
23
+ end
24
+
25
+ private
26
+
27
+ def include_or_prepend(module_method, class_setup_method)
28
+ setup = self
29
+ a_module.send(module_method, *a_module_method_args(module_method)) do
30
+ ::EacRubyUtils::CommonConcern::ClassSetup.new(setup, self, class_setup_method).run
27
31
  end
28
32
  end
33
+
34
+ def a_module_method_args(module_method)
35
+ method_arity = a_module.method(module_method).arity
36
+ method_arity = -method_arity - 1 if method_arity.negative?
37
+ method_arity.times.map { |_n| a_module }
38
+ end
29
39
  end
30
40
  end
31
41
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'active_support/callbacks'
4
4
  require 'eac_ruby_utils/arguments_consumer'
5
+ require 'eac_ruby_utils/common_constructor/class_initialize'
5
6
  require 'ostruct'
6
7
 
7
8
  module EacRubyUtils
@@ -76,111 +77,13 @@ module EacRubyUtils
76
77
  end
77
78
 
78
79
  def setup_class_initialize(klass)
79
- common_constructor = self
80
80
  klass.include(::ActiveSupport::Callbacks)
81
81
  klass.define_callbacks :initialize
82
- klass.send(:define_method, :initialize) do |*args|
83
- Initialize.new(common_constructor, args, self).run
84
- super(*SuperArgs.new(common_constructor, args, self).result)
85
- end
82
+ ::EacRubyUtils::CommonConstructor::ClassInitialize.new(self, klass).run
86
83
  end
87
84
 
88
85
  def super_args
89
86
  options[:super_args]
90
87
  end
91
-
92
- class Initialize
93
- attr_reader :common_constructor, :args, :object
94
-
95
- def initialize(common_constructor, args, object)
96
- @common_constructor = common_constructor
97
- @args = args
98
- @object = object
99
- end
100
-
101
- def run
102
- validate_args_count
103
- object.run_callbacks :initialize do
104
- object_attributes_set
105
- object_after_callback
106
- end
107
- end
108
-
109
- private
110
-
111
- def arg_value(arg_name)
112
- arg_index = common_constructor.args.index(arg_name)
113
- if arg_index < args.count
114
- args[arg_index]
115
- else
116
- common_constructor.default_values[arg_index - common_constructor.args_count_min]
117
- end
118
- end
119
-
120
- def object_after_callback
121
- return unless common_constructor.after_set_block
122
-
123
- object.instance_eval(&common_constructor.after_set_block)
124
- end
125
-
126
- def object_attributes_set
127
- common_constructor.args.each do |arg_name|
128
- object.send("#{arg_name}=", arg_value(arg_name))
129
- end
130
- end
131
-
132
- def validate_args_count
133
- return if common_constructor.args_count.include?(args.count)
134
-
135
- raise ArgumentError, "#{object.class}.initialize: wrong number of arguments" \
136
- " (given #{args.count}, expected #{common_constructor.args_count})"
137
- end
138
- end
139
-
140
- class SuperArgs
141
- attr_reader :common_constructor, :args, :object
142
-
143
- def initialize(common_constructor, args, object)
144
- @common_constructor = common_constructor
145
- @args = args
146
- @object = object
147
- end
148
-
149
- def auto_result
150
- r = []
151
- sub_args.each do |name, value|
152
- i = super_arg_index(name)
153
- r[i] = value if i
154
- end
155
- r
156
- end
157
-
158
- def result
159
- result_from_options || auto_result
160
- end
161
-
162
- def result_from_options
163
- return unless common_constructor.super_args
164
-
165
- object.instance_exec(&common_constructor.super_args)
166
- end
167
-
168
- def sub_args
169
- common_constructor.args.each_with_index.map do |name, index|
170
- [name, args[index]]
171
- end.to_h
172
- end
173
-
174
- def super_arg_index(name)
175
- super_method.parameters.each_with_index do |arg, index|
176
- return index if arg[1] == name
177
- end
178
- nil
179
- end
180
-
181
- def super_method
182
- object.class.superclass ? object.class.superclass.instance_method(:initialize) : nil
183
- end
184
- end
185
88
  end
186
89
  end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/common_constructor/instance_initialize'
4
+ require 'eac_ruby_utils/common_constructor/super_args'
5
+
6
+ module EacRubyUtils
7
+ class CommonConstructor
8
+ class ClassInitialize
9
+ attr_reader :common_constructor, :klass
10
+
11
+ def initialize(common_constructor, klass)
12
+ @common_constructor = common_constructor
13
+ @klass = klass
14
+ end
15
+
16
+ def run
17
+ class_initialize = self
18
+ klass.send(:define_method, :initialize) do |*args|
19
+ ::EacRubyUtils::CommonConstructor::InstanceInitialize.new(
20
+ class_initialize.common_constructor, args, self
21
+ ).run
22
+ super(*::EacRubyUtils::CommonConstructor::SuperArgs.new(
23
+ class_initialize, args, self
24
+ ).result)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRubyUtils
4
+ class CommonConstructor
5
+ class InstanceInitialize
6
+ attr_reader :common_constructor, :args, :object
7
+
8
+ def initialize(common_constructor, args, object)
9
+ @common_constructor = common_constructor
10
+ @args = args
11
+ @object = object
12
+ end
13
+
14
+ def run
15
+ validate_args_count
16
+ object.run_callbacks :initialize do
17
+ object_attributes_set
18
+ object_after_callback
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def arg_value(arg_name)
25
+ arg_index = common_constructor.args.index(arg_name)
26
+ if arg_index < args.count
27
+ args[arg_index]
28
+ else
29
+ common_constructor.default_values[arg_index - common_constructor.args_count_min]
30
+ end
31
+ end
32
+
33
+ def object_after_callback
34
+ return unless common_constructor.after_set_block
35
+
36
+ object.instance_eval(&common_constructor.after_set_block)
37
+ end
38
+
39
+ def object_attributes_set
40
+ common_constructor.args.each do |arg_name|
41
+ object.send("#{arg_name}=", arg_value(arg_name))
42
+ end
43
+ end
44
+
45
+ def validate_args_count
46
+ return if common_constructor.args_count.include?(args.count)
47
+
48
+ raise ArgumentError, "#{object.class}.initialize: wrong number of arguments" \
49
+ " (given #{args.count}, expected #{common_constructor.args_count})"
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/module/delegation'
4
+
5
+ module EacRubyUtils
6
+ class CommonConstructor
7
+ class SuperArgs
8
+ attr_reader :class_initialize, :args, :object
9
+ delegate :common_constructor, to: :class_initialize
10
+
11
+ def initialize(class_initialize, args, object)
12
+ @class_initialize = class_initialize
13
+ @args = args
14
+ @object = object
15
+ end
16
+
17
+ def auto_result
18
+ r = []
19
+ sub_args.each do |name, value|
20
+ i = super_arg_index(name)
21
+ r[i] = value if i
22
+ end
23
+ r
24
+ end
25
+
26
+ def result
27
+ result_from_options || auto_result
28
+ end
29
+
30
+ def result_from_options
31
+ return unless common_constructor.super_args
32
+
33
+ object.instance_exec(&common_constructor.super_args)
34
+ end
35
+
36
+ def sub_args
37
+ common_constructor.args.each_with_index.map do |name, index|
38
+ [name, args[index]]
39
+ end.to_h
40
+ end
41
+
42
+ def super_arg_index(name)
43
+ super_method.parameters.each_with_index do |arg, index|
44
+ return index if arg[1] == name
45
+ end
46
+ nil
47
+ end
48
+
49
+ def super_method
50
+ class_initialize.klass.superclass&.instance_method(:initialize)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -38,7 +38,7 @@ module EacRubyUtils
38
38
  def run_with_subcommand
39
39
  if subcommand_name
40
40
  check_valid_subcommand
41
- subcommand.run
41
+ subcommand_run
42
42
  else
43
43
  run_without_subcommand
44
44
  end
@@ -52,6 +52,15 @@ module EacRubyUtils
52
52
  )
53
53
  end
54
54
 
55
+ def subcommand_run
56
+ if !subcommand.is_a?(::EacRubyUtils::Console::DocoptRunner) &&
57
+ subcommand.respond_to?(:run_run)
58
+ subcommand.run_run
59
+ else
60
+ subcommand.run
61
+ end
62
+ end
63
+
55
64
  def target_doc
56
65
  super.gsub(SUBCOMMANDS_MACRO,
57
66
  "#{target_doc_subcommand_arg} [#{SUBCOMMAND_ARGS_ARG}...]") +
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyUtils
4
- VERSION = '0.56.0'
4
+ VERSION = '0.56.2'
5
5
  end
@@ -19,7 +19,7 @@ RSpec.describe ::EacRubyUtils::CommonConcern do
19
19
 
20
20
  module InstanceMethods # rubocop:disable RSpec/LeakyConstantDeclaration
21
21
  def my_instance_method
22
- 'instance'
22
+ 'from_module'
23
23
  end
24
24
  end
25
25
  end
@@ -31,8 +31,8 @@ RSpec.describe ::EacRubyUtils::CommonConcern do
31
31
  attr_accessor :valor
32
32
  end
33
33
 
34
- def method1
35
- 'from_stub_module'
34
+ def my_instance_method
35
+ 'from_class'
36
36
  end
37
37
  end
38
38
  end
@@ -48,7 +48,17 @@ RSpec.describe ::EacRubyUtils::CommonConcern do
48
48
  stub_class.include stub_module
49
49
  end
50
50
 
51
- it { expect(stub_class_instance.my_instance_method).to eq('instance') }
51
+ it { expect(stub_class_instance.my_instance_method).to eq('from_class') }
52
+ it { expect(stub_class_instance.class.my_class_method).to eq('class') }
53
+ it { expect(stub_class_instance.class.valor).to eq('changed') }
54
+ end
55
+
56
+ context 'when prepended' do
57
+ before do
58
+ stub_class.prepend stub_module
59
+ end
60
+
61
+ it { expect(stub_class_instance.my_instance_method).to eq('from_module') }
52
62
  it { expect(stub_class_instance.class.my_class_method).to eq('class') }
53
63
  it { expect(stub_class_instance.class.valor).to eq('changed') }
54
64
  end
@@ -92,4 +92,34 @@ RSpec.describe ::EacRubyUtils::CommonConstructor do
92
92
  end
93
93
  end
94
94
  end
95
+
96
+ context 'with class hierarchy mixed with and without common_constructor' do
97
+ let(:klass_0) do
98
+ described_class.new(:a_param).setup_class(::Class.new)
99
+ end
100
+
101
+ let(:klass_1) do
102
+ ::Class.new(klass_0) do
103
+ def initialize(a_param)
104
+ super(a_param)
105
+ end
106
+ end
107
+ end
108
+
109
+ let(:klass_2) do
110
+ ::Class.new(klass_1)
111
+ end
112
+
113
+ let(:klass_3) do
114
+ described_class.new(:a_param).setup_class(::Class.new(klass_2))
115
+ end
116
+
117
+ 4.times.each do |i|
118
+ context "wit #{i}-th class" do
119
+ let(:class_instance) { send("klass_#{i}").new(:a) }
120
+
121
+ it { expect(class_instance.a_param).to eq(:a) }
122
+ end
123
+ end
124
+ end
95
125
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avm-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.84.0
4
+ version: 0.85.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esquilo Azul Company
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-25 00:00:00.000000000 Z
11
+ date: 2020-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aranha-parsers
@@ -920,6 +920,9 @@ files:
920
920
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/common_concern/class_setup.rb
921
921
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/common_concern/module_setup.rb
922
922
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/common_constructor.rb
923
+ - vendor/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/class_initialize.rb
924
+ - vendor/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
925
+ - vendor/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/super_args.rb
923
926
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/configs.rb
924
927
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/configs/base.rb
925
928
  - vendor/eac_ruby_utils/lib/eac_ruby_utils/configs/file.rb