eac_tools 0.66.0 → 0.67.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +32 -32
- data/lib/eac_tools/version.rb +1 -1
- data/sub/avm/avm.gemspec +2 -2
- data/sub/avm/lib/avm/data/clearer.rb +8 -6
- data/sub/avm/lib/avm/data/package/base_performer.rb +38 -0
- data/sub/avm/lib/avm/data/package/clear.rb +3 -4
- data/sub/avm/lib/avm/data/performer.rb +49 -0
- data/sub/avm/lib/avm/instances/base/subcommand_parent.rb +5 -5
- data/sub/avm/lib/avm/instances/runner.rb +1 -1
- data/sub/avm/lib/avm/scms/auto_commit/for_file.rb +12 -2
- data/sub/avm/lib/avm/sources/runner.rb +2 -0
- data/sub/avm/lib/avm/version.rb +1 -1
- data/sub/avm-eac_ubuntu_base0/avm-eac_ubuntu_base0.gemspec +3 -3
- data/sub/avm-eac_ubuntu_base0/lib/avm/eac_ubuntu_base0/runners/base.rb +2 -0
- data/sub/avm-eac_ubuntu_base0/lib/avm/eac_ubuntu_base0/version.rb +1 -1
- data/sub/avm-eac_webapp_base0/avm-eac_webapp_base0.gemspec +3 -3
- data/sub/avm-eac_webapp_base0/lib/avm/eac_webapp_base0/file_formats/provider.rb +2 -2
- data/sub/avm-eac_webapp_base0/lib/avm/eac_webapp_base0/version.rb +1 -1
- data/sub/avm-git/avm-git.gemspec +2 -2
- data/sub/avm-git/lib/avm/git/scms/git/commit_dirty.rb +35 -0
- data/sub/avm-git/lib/avm/git/scms/git/commits.rb +0 -14
- data/sub/avm-git/lib/avm/git/scms/git/run_commit.rb +1 -1
- data/sub/avm-git/lib/avm/git/scms/git_sub_base/changed_file.rb +21 -0
- data/sub/avm-git/lib/avm/git/scms/git_sub_base/commit.rb +1 -3
- data/sub/avm-git/lib/avm/git/scms/git_sub_base.rb +8 -1
- data/sub/avm-git/lib/avm/git/version.rb +1 -1
- data/sub/avm-tools/avm-tools.gemspec +2 -2
- data/sub/avm-tools/lib/avm/tools/runner/instance/data/clear.rb +1 -1
- data/sub/avm-tools/lib/avm/tools/runner/instance/data/unit/dump.rb +2 -2
- data/sub/avm-tools/lib/avm/tools/runner/instance/data/unit/load.rb +1 -1
- data/sub/avm-tools/lib/avm/tools/runner/instance/data/unit.rb +2 -5
- data/sub/avm-tools/lib/avm/tools/runner/instance/data.rb +2 -0
- data/sub/avm-tools/lib/avm/tools/runner_with/include_exclude.rb +23 -0
- data/sub/avm-tools/lib/avm/tools/runner_with/instance_data_clear.rb +11 -1
- data/sub/avm-tools/lib/avm/tools/version.rb +1 -1
- data/sub/eac_cli/eac_cli.gemspec +1 -1
- data/sub/eac_cli/lib/eac_cli/definition/alternative.rb +11 -7
- data/sub/eac_cli/lib/eac_cli/definition/base_option/initialize_args_parser.rb +2 -1
- data/sub/eac_cli/lib/eac_cli/definition/base_option.rb +1 -1
- data/sub/eac_cli/lib/eac_cli/definition/boolean_option.rb +2 -1
- data/sub/eac_cli/lib/eac_cli/definition/error.rb +8 -0
- data/sub/eac_cli/lib/eac_cli/runner/after_class_methods.rb +6 -1
- data/sub/eac_cli/lib/eac_cli/runner/context.rb +22 -3
- data/sub/eac_cli/lib/eac_cli/runner/context_responders/base.rb +24 -0
- data/sub/eac_cli/lib/eac_cli/runner/context_responders/parent.rb +27 -0
- data/sub/eac_cli/lib/eac_cli/runner/context_responders/runner.rb +20 -0
- data/sub/eac_cli/lib/eac_cli/runner/context_responders/runner_missing_method.rb +32 -0
- data/sub/eac_cli/lib/eac_cli/runner/context_responders/set.rb +44 -0
- data/sub/eac_cli/lib/eac_cli/runner/context_responders.rb +11 -0
- data/sub/eac_cli/lib/eac_cli/runner/for_context.rb +40 -0
- data/sub/eac_cli/lib/eac_cli/runner/instance_methods.rb +5 -3
- data/sub/eac_cli/lib/eac_cli/runner.rb +1 -0
- data/sub/eac_cli/lib/eac_cli/version.rb +1 -1
- data/sub/eac_cli/spec/lib/eac_cli/runner/for_context_spec.rb +79 -0
- data/sub/eac_cli/spec/lib/eac_cli/runner_with/subcommands_spec.rb +1 -0
- data/sub/eac_ruby_base0/eac_ruby_base0.gemspec +3 -3
- data/sub/eac_ruby_base0/lib/eac_ruby_base0/runner/contexts.rb +52 -0
- data/sub/eac_ruby_base0/lib/eac_ruby_base0/runner/prepend.rb +17 -4
- data/sub/eac_ruby_base0/lib/eac_ruby_base0/runner.rb +1 -39
- data/sub/eac_ruby_base0/lib/eac_ruby_base0/version.rb +1 -1
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_abstract.rb +17 -6
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_immutable/array_accessor.rb +25 -0
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb +57 -0
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/{immutable → acts_as_immutable}/boolean_accessor.rb +3 -3
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/{immutable → acts_as_immutable}/class_methods.rb +2 -2
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/{immutable → acts_as_immutable}/common_accessor.rb +5 -5
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/{immutable/array_accessor.rb → acts_as_immutable/enumerable_accessor.rb} +11 -8
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/{immutable → acts_as_immutable}/hash_accessor.rb +5 -5
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/{immutable → acts_as_immutable}/instance_methods.rb +1 -1
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_immutable/set_accessor.rb +25 -0
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/{immutable.rb → acts_as_immutable.rb} +1 -1
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/enumerables_methods.rb +42 -0
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/module_ancestors_variable/base.rb +34 -0
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/module_ancestors_variable/hash.rb +20 -0
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/module_ancestors_variable/set.rb +19 -0
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/module_ancestors_variable.rb +9 -0
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/acts_as_immutable.rb +10 -0
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/module/immutable.rb +3 -2
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/object/debug.rb +9 -0
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/unimplemented_method_error.rb +6 -0
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
- data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/acts_as_abstract_spec.rb +73 -7
- data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/{immutable → acts_as_immutable}/array_accessor_spec.rb +11 -3
- data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/acts_as_immutable/common_accessor_spec.rb +57 -0
- data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/{immutable → acts_as_immutable}/hash_accessor_spec.rb +3 -3
- data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/acts_as_immutable/set_accessor_spec.rb +43 -0
- data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/enumerables_methods_spec.rb +50 -0
- data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/module_ancestors_variable/hash_spec.rb +57 -0
- data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/module_ancestors_variable/set_spec.rb +57 -0
- metadata +57 -22
- data/sub/eac_ruby_utils/lib/eac_ruby_utils/immutable/base_accessor.rb +0 -23
@@ -1,28 +1,94 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'eac_ruby_utils/acts_as_abstract'
|
4
|
+
require 'eac_ruby_utils/unimplemented_method_error'
|
4
5
|
|
5
|
-
RSpec.describe(::EacRubyUtils::ActsAsAbstract) do
|
6
|
+
::RSpec.describe(::EacRubyUtils::ActsAsAbstract) do
|
6
7
|
let(:base_class) do
|
7
8
|
the_module = described_class
|
8
9
|
::Class.new do
|
9
10
|
include the_module
|
10
11
|
|
11
12
|
abstract_methods :method1, :method2
|
13
|
+
|
14
|
+
def method3
|
15
|
+
'base result'
|
16
|
+
end
|
12
17
|
end
|
13
18
|
end
|
14
|
-
let(:base_instance) { base_class.new }
|
15
19
|
let(:sub_class) do
|
16
20
|
::Class.new(base_class) do
|
17
21
|
def method1
|
18
22
|
'a result'
|
19
23
|
end
|
24
|
+
|
25
|
+
def method4
|
26
|
+
'sub result'
|
27
|
+
end
|
20
28
|
end
|
21
29
|
end
|
22
|
-
let(:sub_instance) { sub_class.new }
|
23
30
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
31
|
+
class << self
|
32
|
+
def specs_for_target(test_target, instances_hash)
|
33
|
+
describe "\##{test_target}" do # rubocop:disable RSpec/EmptyExampleGroup
|
34
|
+
specs_for_instances(test_target, instances_hash)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def specs_for_instances(test_target, instances_hash)
|
39
|
+
instances_hash.each do |instance_name, expected_values|
|
40
|
+
context "when instance is \"#{instance_name}\"" do # rubocop:disable RSpec/EmptyExampleGroup
|
41
|
+
let(:instance) { send("#{instance_name}_class").new }
|
42
|
+
|
43
|
+
specs_for_methods_values(test_target, expected_values)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def specs_for_methods_values(test_target, expected_values)
|
49
|
+
expected_values.each_with_index do |expected_value, method_index|
|
50
|
+
method_name = "method#{method_index + 1}"
|
51
|
+
context "when method is \"#{method_name}\"" do # rubocop:disable RSpec/EmptyExampleGroup
|
52
|
+
send("specs_for_#{test_target}", method_name, expected_value)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def specs_for_abstract_method(method_name, expected_value)
|
58
|
+
it { expect(instance.abstract_method?(method_name)).to eq(expected_value) }
|
59
|
+
end
|
60
|
+
|
61
|
+
def specs_for_method_missing(method_name, expected_value)
|
62
|
+
if expected_value.is_a?(::Class) && expected_value < ::Exception
|
63
|
+
it do
|
64
|
+
expect { instance.send(method_name) }.to raise_error(expected_value)
|
65
|
+
end
|
66
|
+
else
|
67
|
+
it do
|
68
|
+
expect(instance.send(method_name)).to eq(expected_value)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def specs_for_respond_to_missing(method_name, expected_value)
|
74
|
+
it { expect(instance.respond_to?(method_name)).to eq(expected_value) }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
{
|
78
|
+
abstract_method: {
|
79
|
+
base: [true, true, false, false],
|
80
|
+
sub: [false, true, false, false]
|
81
|
+
},
|
82
|
+
method_missing: {
|
83
|
+
base: [::EacRubyUtils::UnimplementedMethodError, ::EacRubyUtils::UnimplementedMethodError,
|
84
|
+
'base result', ::NoMethodError],
|
85
|
+
sub: ['a result', ::EacRubyUtils::UnimplementedMethodError, 'base result', 'sub result']
|
86
|
+
},
|
87
|
+
respond_to_missing: {
|
88
|
+
base: [true, true, true, false],
|
89
|
+
sub: [true, true, true, true]
|
90
|
+
}
|
91
|
+
}.each do |test_target, instances_hash|
|
92
|
+
specs_for_target(test_target, instances_hash)
|
93
|
+
end
|
28
94
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'eac_ruby_utils/
|
3
|
+
require 'eac_ruby_utils/acts_as_immutable'
|
4
4
|
|
5
|
-
::RSpec.describe ::EacRubyUtils::
|
5
|
+
::RSpec.describe ::EacRubyUtils::ActsAsImmutable::ArrayAccessor do
|
6
6
|
let(:stub_class) do
|
7
7
|
::Class.new do
|
8
|
-
include ::EacRubyUtils::
|
8
|
+
include ::EacRubyUtils::ActsAsImmutable
|
9
9
|
|
10
10
|
immutable_accessor :array_attr, type: :array
|
11
11
|
end
|
@@ -31,5 +31,13 @@ require 'eac_ruby_utils/immutable'
|
|
31
31
|
it { expect(change2_instance.object_id).not_to eq(change1_instance.object_id) }
|
32
32
|
it { expect(change2_instance.array_attrs).to eq(%w[B]) }
|
33
33
|
end
|
34
|
+
|
35
|
+
context 'when array_attrs sets for a non array' do
|
36
|
+
let(:change2_instance) { initial_instance.array_attrs('B') }
|
37
|
+
|
38
|
+
it { expect(change2_instance).to be_a(initial_instance.class) }
|
39
|
+
it { expect(change2_instance.object_id).not_to eq(change1_instance.object_id) }
|
40
|
+
it { expect(change2_instance.array_attrs).to eq(%w[B]) }
|
41
|
+
end
|
34
42
|
end
|
35
43
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/acts_as_immutable'
|
4
|
+
|
5
|
+
::RSpec.describe ::EacRubyUtils::ActsAsImmutable::CommonAccessor do
|
6
|
+
let(:stub_class) do
|
7
|
+
::Class.new do
|
8
|
+
include ::EacRubyUtils::ActsAsImmutable
|
9
|
+
|
10
|
+
immutable_accessor :attr1, :attr2, :attr3
|
11
|
+
|
12
|
+
def attr1_get_filter(value)
|
13
|
+
value || 'DEFAULT'
|
14
|
+
end
|
15
|
+
|
16
|
+
def attr2_set_filter(value)
|
17
|
+
"#{value}_FILTERED"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:initial_instance) { stub_class.new }
|
23
|
+
|
24
|
+
it { expect(initial_instance.attr1).to eq('DEFAULT') }
|
25
|
+
it { expect(initial_instance.attr2).to eq(nil) }
|
26
|
+
it { expect(initial_instance.attr3).to eq(nil) }
|
27
|
+
|
28
|
+
context 'when attr1 is set' do
|
29
|
+
let(:change1_instance) { initial_instance.attr1('A') }
|
30
|
+
|
31
|
+
it { expect(change1_instance).to be_a(initial_instance.class) }
|
32
|
+
it { expect(change1_instance.object_id).not_to eq(initial_instance.object_id) }
|
33
|
+
it { expect(change1_instance.attr1).to eq('A') }
|
34
|
+
it { expect(change1_instance.attr2).to eq(nil) }
|
35
|
+
it { expect(change1_instance.attr3).to eq(nil) }
|
36
|
+
|
37
|
+
context 'when attr2 is set' do
|
38
|
+
let(:change2_instance) { change1_instance.attr2('B') }
|
39
|
+
|
40
|
+
it { expect(change2_instance).to be_a(change1_instance.class) }
|
41
|
+
it { expect(change2_instance.object_id).not_to eq(change1_instance.object_id) }
|
42
|
+
it { expect(change2_instance.attr1).to eq('A') }
|
43
|
+
it { expect(change2_instance.attr2).to eq('B_FILTERED') }
|
44
|
+
it { expect(change2_instance.attr3).to eq(nil) }
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'when attr3 is set' do
|
48
|
+
let(:change2_instance) { change1_instance.attr3('C') }
|
49
|
+
|
50
|
+
it { expect(change2_instance).to be_a(change1_instance.class) }
|
51
|
+
it { expect(change2_instance.object_id).not_to eq(change1_instance.object_id) }
|
52
|
+
it { expect(change2_instance.attr1).to eq('A') }
|
53
|
+
it { expect(change2_instance.attr2).to eq(nil) }
|
54
|
+
it { expect(change2_instance.attr3).to eq('C') }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'eac_ruby_utils/
|
3
|
+
require 'eac_ruby_utils/acts_as_immutable'
|
4
4
|
|
5
|
-
::RSpec.describe ::EacRubyUtils::
|
5
|
+
::RSpec.describe ::EacRubyUtils::ActsAsImmutable::HashAccessor do
|
6
6
|
let(:stub_class) do
|
7
7
|
::Class.new do
|
8
|
-
include ::EacRubyUtils::
|
8
|
+
include ::EacRubyUtils::ActsAsImmutable
|
9
9
|
|
10
10
|
immutable_accessor :the_hash, type: :hash
|
11
11
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/acts_as_immutable'
|
4
|
+
|
5
|
+
::RSpec.describe ::EacRubyUtils::ActsAsImmutable::SetAccessor do
|
6
|
+
let(:stub_class) do
|
7
|
+
::Class.new do
|
8
|
+
include ::EacRubyUtils::ActsAsImmutable
|
9
|
+
|
10
|
+
immutable_accessor :array_attr, type: :set
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:initial_instance) { stub_class.new }
|
15
|
+
|
16
|
+
it do
|
17
|
+
expect(initial_instance.array_attrs).to eq(::Set.new)
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when array_attr pushs for' do
|
21
|
+
let(:change1_instance) { initial_instance.array_attr('A') }
|
22
|
+
|
23
|
+
it { expect(change1_instance).to be_a(initial_instance.class) }
|
24
|
+
it { expect(change1_instance.object_id).not_to eq(initial_instance.object_id) }
|
25
|
+
it { expect(change1_instance.array_attrs).to eq(::Set.new(%w[A])) }
|
26
|
+
|
27
|
+
context 'when array_attrs sets for' do
|
28
|
+
let(:change2_instance) { initial_instance.array_attrs(%w[B]) }
|
29
|
+
|
30
|
+
it { expect(change2_instance).to be_a(initial_instance.class) }
|
31
|
+
it { expect(change2_instance.object_id).not_to eq(change1_instance.object_id) }
|
32
|
+
it { expect(change2_instance.array_attrs).to eq(::Set.new(%w[B])) }
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when array_attrs push for a repetead value' do
|
36
|
+
let(:change2_instance) { initial_instance.array_attr('A') }
|
37
|
+
|
38
|
+
it { expect(change2_instance).to be_a(initial_instance.class) }
|
39
|
+
it { expect(change2_instance.object_id).not_to eq(change1_instance.object_id) }
|
40
|
+
it { expect(change2_instance.array_attrs).to eq(::Set.new(%w[A])) }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/enumerables_methods'
|
4
|
+
|
5
|
+
::RSpec.describe ::EacRubyUtils::EnumerablesMethods do
|
6
|
+
describe '#write_method?' do
|
7
|
+
it do
|
8
|
+
expect(described_class).to be_write_method(:'[]=')
|
9
|
+
end
|
10
|
+
|
11
|
+
it do
|
12
|
+
expect(described_class).not_to be_write_method(:'!=')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
[
|
17
|
+
[:enumerable, %i[drop lazy sort], []],
|
18
|
+
[:hash, %i[\[\] <= compact slice to_h values],
|
19
|
+
%i[\[\]= compact! delete default= keep_if shift]],
|
20
|
+
[:set, %i[<= include?], %i[<< add clear collect! divide delete keep_if merge reset subtract]]
|
21
|
+
].each do |test_values|
|
22
|
+
klass_underscore, read_methods, write_methods = test_values
|
23
|
+
|
24
|
+
context "when class/module is #{klass_underscore}" do
|
25
|
+
let(:const_prefix) { klass_underscore.to_s.upcase }
|
26
|
+
let(:const_all) { "#{const_prefix}_METHODS" }
|
27
|
+
let(:const_read) { "#{const_prefix}_READ_METHODS" }
|
28
|
+
let(:const_write) { "#{const_prefix}_WRITE_METHODS" }
|
29
|
+
let(:actual_all) { described_class.const_get(const_all) }
|
30
|
+
let(:actual_read) { described_class.const_get(const_read) }
|
31
|
+
let(:actual_write) { described_class.const_get(const_write) }
|
32
|
+
|
33
|
+
read_methods.each do |method_name|
|
34
|
+
context "when method is \"#{method_name}\"" do
|
35
|
+
it { expect(actual_all).to include(method_name) }
|
36
|
+
it { expect(actual_read).to include(method_name) }
|
37
|
+
it { expect(actual_write).not_to include(method_name) }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
write_methods.each do |method_name|
|
42
|
+
context "when method is \"#{method_name}\"" do
|
43
|
+
it { expect(actual_all).to include(method_name) }
|
44
|
+
it { expect(actual_read).not_to include(method_name) }
|
45
|
+
it { expect(actual_write).to include(method_name) }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/module_ancestors_variable/hash'
|
4
|
+
|
5
|
+
::RSpec.describe(::EacRubyUtils::ModuleAncestorsVariable::Hash) do
|
6
|
+
let(:included_module) do
|
7
|
+
::Module.new do
|
8
|
+
def self.included(base)
|
9
|
+
base.extend(ClassMethods)
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods # rubocop:disable RSpec/LeakyConstantDeclaration
|
13
|
+
def hash_variable
|
14
|
+
@hash_variable ||= ::EacRubyUtils::ModuleAncestorsVariable::Hash.new(self, __method__)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:super_class) do
|
21
|
+
r = ::Class.new
|
22
|
+
r.include included_module
|
23
|
+
r
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:sub_class) do
|
27
|
+
::Class.new(super_class)
|
28
|
+
end
|
29
|
+
|
30
|
+
it { expect(super_class.hash_variable).to be_a(described_class) }
|
31
|
+
it { expect(super_class.hash_variable.self_variable).to eq(::Hash.new) }
|
32
|
+
it { expect(super_class.hash_variable.ancestors_variable).to eq(::Hash.new) }
|
33
|
+
it { expect(super_class.hash_variable.to_h).to eq(::Hash.new) }
|
34
|
+
|
35
|
+
it { expect(sub_class.hash_variable).to be_a(described_class) }
|
36
|
+
it { expect(sub_class.hash_variable.self_variable).to eq(::Hash.new) }
|
37
|
+
it { expect(sub_class.hash_variable.ancestors_variable).to eq(::Hash.new) }
|
38
|
+
it { expect(sub_class.hash_variable.to_h).to eq(::Hash.new) }
|
39
|
+
|
40
|
+
context 'when super class is changed' do
|
41
|
+
before do
|
42
|
+
super_class.hash_variable[:by_super] = 1
|
43
|
+
end
|
44
|
+
|
45
|
+
it { expect(super_class.hash_variable.to_h).to eq({ by_super: 1 }) }
|
46
|
+
it { expect(sub_class.hash_variable.to_h).to eq({ by_super: 1 }) }
|
47
|
+
|
48
|
+
context 'when sub class is changed' do
|
49
|
+
before do
|
50
|
+
sub_class.hash_variable[:by_sub] = 2
|
51
|
+
end
|
52
|
+
|
53
|
+
it { expect(super_class.hash_variable.to_h).to eq({ by_super: 1 }) }
|
54
|
+
it { expect(sub_class.hash_variable.to_h).to eq({ by_super: 1, by_sub: 2 }) }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/module_ancestors_variable/set'
|
4
|
+
|
5
|
+
::RSpec.describe(::EacRubyUtils::ModuleAncestorsVariable::Set) do
|
6
|
+
let(:included_module) do
|
7
|
+
::Module.new do
|
8
|
+
def self.included(base)
|
9
|
+
base.extend(ClassMethods)
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods # rubocop:disable RSpec/LeakyConstantDeclaration
|
13
|
+
def set_variable
|
14
|
+
@set_variable ||= ::EacRubyUtils::ModuleAncestorsVariable::Set.new(self, __method__)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:super_class) do
|
21
|
+
r = ::Class.new
|
22
|
+
r.include included_module
|
23
|
+
r
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:sub_class) do
|
27
|
+
::Class.new(super_class)
|
28
|
+
end
|
29
|
+
|
30
|
+
it { expect(super_class.set_variable).to be_a(described_class) }
|
31
|
+
it { expect(super_class.set_variable.self_variable).to eq(::Set.new) }
|
32
|
+
it { expect(super_class.set_variable.ancestors_variable).to eq(::Set.new) }
|
33
|
+
it { expect(super_class.set_variable.to_set).to eq(::Set.new) }
|
34
|
+
|
35
|
+
it { expect(sub_class.set_variable).to be_a(described_class) }
|
36
|
+
it { expect(sub_class.set_variable.self_variable).to eq(::Set.new) }
|
37
|
+
it { expect(sub_class.set_variable.ancestors_variable).to eq(::Set.new) }
|
38
|
+
it { expect(sub_class.set_variable.to_set).to eq(::Set.new) }
|
39
|
+
|
40
|
+
context 'when super class is changed' do
|
41
|
+
before do
|
42
|
+
super_class.set_variable << 1
|
43
|
+
end
|
44
|
+
|
45
|
+
it { expect(super_class.set_variable.to_set).to eq(::Set.new([1])) }
|
46
|
+
it { expect(sub_class.set_variable.to_set).to eq(::Set.new([1])) }
|
47
|
+
|
48
|
+
context 'when sub class is changed' do
|
49
|
+
before do
|
50
|
+
sub_class.set_variable << 2
|
51
|
+
end
|
52
|
+
|
53
|
+
it { expect(super_class.set_variable.to_set).to eq(::Set.new([1])) }
|
54
|
+
it { expect(sub_class.set_variable.to_set).to eq(::Set.new([1, 2])) }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|