sinclair 1.9.0 → 1.10.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.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/README.md +2 -2
  4. data/config/yardstick.yml +7 -1
  5. data/lib/sinclair/configurable.rb +2 -0
  6. data/lib/sinclair/equals_checker.rb +2 -0
  7. data/lib/sinclair/matchers/add_class_method.rb +27 -36
  8. data/lib/sinclair/matchers/add_instance_method.rb +59 -59
  9. data/lib/sinclair/matchers/add_method.rb +33 -35
  10. data/lib/sinclair/matchers/change_class_method.rb +22 -16
  11. data/lib/sinclair/matchers/change_instance_method.rb +46 -16
  12. data/lib/sinclair/matchers.rb +2 -8
  13. data/lib/sinclair/method_builder/call_method_builder.rb +49 -0
  14. data/lib/sinclair/method_builder.rb +4 -1
  15. data/lib/sinclair/method_definition/call_definition.rb +52 -0
  16. data/lib/sinclair/method_definition/string_definition.rb +0 -2
  17. data/lib/sinclair/method_definition.rb +40 -24
  18. data/lib/sinclair/method_definitions.rb +21 -1
  19. data/lib/sinclair/options/builder.rb +8 -0
  20. data/lib/sinclair/options.rb +1 -13
  21. data/lib/sinclair/version.rb +1 -1
  22. data/spec/integration/yard/sinclair/matchers/change_class_method_spec.rb +24 -0
  23. data/spec/integration/yard/sinclair/matchers/change_instance_method_spec.rb +40 -0
  24. data/spec/lib/sinclair/method_builder/call_method_builder_spec.rb +76 -0
  25. data/spec/lib/sinclair/method_builder_spec.rb +63 -20
  26. data/spec/lib/sinclair/method_definition/call_definition_spec.rb +36 -0
  27. data/spec/lib/sinclair/method_definition_spec.rb +64 -0
  28. data/spec/lib/sinclair/method_definitions_spec.rb +79 -0
  29. data/spec/lib/sinclair/options/builder_spec.rb +13 -0
  30. data/spec/lib/sinclair/options/class_methods_spec.rb +23 -8
  31. data/spec/support/shared_examples/attribute_accessor.rb +103 -0
  32. metadata +9 -2
@@ -27,11 +27,26 @@ describe Sinclair::Options::ClassMethods do
27
27
  .to([:invalid])
28
28
  end
29
29
 
30
+ context 'when the added fild makes an object different' do
31
+ let(:options1_hash) { { timeout: 10 } }
32
+ let(:options2_hash) { { timeout: 11 } }
33
+
34
+ before do
35
+ klass.skip_validation
36
+ end
37
+
38
+ it 'adds the field to == check' do
39
+ expect { klass.send(:with_options, :timeout) }
40
+ .to change { klass.new(options1_hash) == klass.new(options2_hash) }
41
+ .from(true).to(false)
42
+ end
43
+ end
44
+
30
45
  it do
31
46
  expect { klass.send(:with_options, :timeout, 'retries') }
32
47
  .not_to change {
33
- Sinclair::Options.invalid_options_in(%i[timeout retries invalid])
34
- }
48
+ Sinclair::Options.invalid_options_in(%i[timeout retries invalid])
49
+ }
35
50
  end
36
51
 
37
52
  context 'when when calling method after building' do
@@ -46,8 +61,8 @@ describe Sinclair::Options::ClassMethods do
46
61
  it do
47
62
  expect { klass.send(:with_options, :timeout, :retries) }
48
63
  .not_to change {
49
- klass.invalid_options_in(%i[timeout retries invalid])
50
- }
64
+ klass.invalid_options_in(%i[timeout retries invalid])
65
+ }
51
66
  end
52
67
  end
53
68
  end
@@ -90,16 +105,16 @@ describe Sinclair::Options::ClassMethods do
90
105
  it do
91
106
  expect { klass.send(:with_options, 'protocol', port: 443) }
92
107
  .to change {
93
- klass.invalid_options_in(test_keys)
94
- }.from(%i[protocol port invalid])
108
+ klass.invalid_options_in(test_keys)
109
+ }.from(%i[protocol port invalid])
95
110
  .to([:invalid])
96
111
  end
97
112
 
98
113
  it do
99
114
  expect { klass.send(:with_options, 'protocol', port: 443) }
100
115
  .not_to change {
101
- super_class.invalid_options_in(%i[protocol port])
102
- }
116
+ super_class.invalid_options_in(%i[protocol port])
117
+ }
103
118
  end
104
119
 
105
120
  context 'when overriding a method' do
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ shared_examples 'a method builder that adds attribute reader' do
4
+ let(:klass) { Class.new }
5
+ let(:instance) { klass.new }
6
+ let(:value) { Random.rand(10..20) }
7
+ let(:method_name) { :the_method }
8
+ let(:attributes) { [method_name] }
9
+
10
+ context 'when type is instance' do
11
+ let(:type) { Sinclair::MethodBuilder::INSTANCE_METHOD }
12
+
13
+ it do
14
+ expect { builder.build }
15
+ .to add_method(method_name).to(instance)
16
+ end
17
+
18
+ context 'when the method is built' do
19
+ before do
20
+ builder.build
21
+ instance.instance_variable_set("@#{method_name}", value)
22
+ end
23
+
24
+ it 'returns the value of the instance variable' do
25
+ expect(instance.the_method).to eq(value)
26
+ end
27
+ end
28
+ end
29
+
30
+ context 'when type is class' do
31
+ let(:type) { Sinclair::MethodBuilder::CLASS_METHOD }
32
+
33
+ it do
34
+ expect { builder.build }
35
+ .to add_class_method(method_name).to(klass)
36
+ end
37
+
38
+ context 'when the method is built' do
39
+ before do
40
+ builder.build
41
+ klass.instance_variable_set("@#{method_name}", value)
42
+ end
43
+
44
+ it 'returns the value of the instance variable' do
45
+ expect(klass.the_method).to eq(value)
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ shared_examples 'a method builder that adds attribute writer' do
52
+ let(:klass) { Class.new }
53
+ let(:instance) { klass.new }
54
+ let(:value) { Random.rand }
55
+ let(:method_name) { :the_method }
56
+ let(:attributes) { [method_name] }
57
+
58
+ context 'when type is instance' do
59
+ let(:type) { Sinclair::MethodBuilder::INSTANCE_METHOD }
60
+
61
+ it do
62
+ expect { builder.build }
63
+ .to add_method("#{method_name}=").to(instance)
64
+ end
65
+
66
+ context 'when the method is built' do
67
+ let(:value) { Random.rand(10..20) }
68
+
69
+ before do
70
+ builder.build
71
+ end
72
+
73
+ it 'change the instance variable' do
74
+ expect { instance.the_method = value }
75
+ .to change { instance.instance_variable_get("@#{method_name}") }
76
+ .from(nil).to(value)
77
+ end
78
+ end
79
+ end
80
+
81
+ context 'when type is class' do
82
+ let(:type) { Sinclair::MethodBuilder::CLASS_METHOD }
83
+
84
+ it do
85
+ expect { builder.build }
86
+ .to add_class_method("#{method_name}=").to(klass)
87
+ end
88
+
89
+ context 'when the method is built' do
90
+ let(:value) { Random.rand(10..20) }
91
+
92
+ before do
93
+ builder.build
94
+ end
95
+
96
+ it 'change the instance variable' do
97
+ expect { klass.the_method = value }
98
+ .to change { klass.instance_variable_get("@#{method_name}") }
99
+ .from(nil).to(value)
100
+ end
101
+ end
102
+ end
103
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinclair
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 1.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - DarthJee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-12 00:00:00.000000000 Z
11
+ date: 2023-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -302,10 +302,12 @@ files:
302
302
  - lib/sinclair/method_builder.rb
303
303
  - lib/sinclair/method_builder/base.rb
304
304
  - lib/sinclair/method_builder/block_method_builder.rb
305
+ - lib/sinclair/method_builder/call_method_builder.rb
305
306
  - lib/sinclair/method_builder/string_method_builder.rb
306
307
  - lib/sinclair/method_definition.rb
307
308
  - lib/sinclair/method_definition/block_definition.rb
308
309
  - lib/sinclair/method_definition/block_helper.rb
310
+ - lib/sinclair/method_definition/call_definition.rb
309
311
  - lib/sinclair/method_definition/string_definition.rb
310
312
  - lib/sinclair/method_definitions.rb
311
313
  - lib/sinclair/options.rb
@@ -337,6 +339,8 @@ files:
337
339
  - spec/integration/yard/sinclair/matchers/add_class_method_to_spec.rb
338
340
  - spec/integration/yard/sinclair/matchers/add_instance_method_spec.rb
339
341
  - spec/integration/yard/sinclair/matchers/add_instance_method_to_spec.rb
342
+ - spec/integration/yard/sinclair/matchers/change_class_method_spec.rb
343
+ - spec/integration/yard/sinclair/matchers/change_instance_method_spec.rb
340
344
  - spec/integration/yard/sinclair/options_parser_spec.rb
341
345
  - spec/integration/yard/sinclair/options_spec.rb
342
346
  - spec/integration/yard/sinclair_spec.rb
@@ -362,10 +366,12 @@ files:
362
366
  - spec/lib/sinclair/matchers/change_instance_method_spec.rb
363
367
  - spec/lib/sinclair/matchers_spec.rb
364
368
  - spec/lib/sinclair/method_builder/block_method_builder_spec.rb
369
+ - spec/lib/sinclair/method_builder/call_method_builder_spec.rb
365
370
  - spec/lib/sinclair/method_builder/string_method_builder_spec.rb
366
371
  - spec/lib/sinclair/method_builder_spec.rb
367
372
  - spec/lib/sinclair/method_definition/block_definition_spec.rb
368
373
  - spec/lib/sinclair/method_definition/block_helper_spec.rb
374
+ - spec/lib/sinclair/method_definition/call_definition_spec.rb
369
375
  - spec/lib/sinclair/method_definition/string_definition_spec.rb
370
376
  - spec/lib/sinclair/method_definition_spec.rb
371
377
  - spec/lib/sinclair/method_definitions_spec.rb
@@ -413,6 +419,7 @@ files:
413
419
  - spec/support/models/service_client.rb
414
420
  - spec/support/models/validator_builder.rb
415
421
  - spec/support/sample_model.rb
422
+ - spec/support/shared_examples/attribute_accessor.rb
416
423
  - spec/support/shared_examples/class_method_definition.rb
417
424
  - spec/support/shared_examples/config.rb
418
425
  - spec/support/shared_examples/config_factory.rb