ocg 1.3.1 → 1.4.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 +4 -4
- data/README.md +4 -7
- data/lib/ocg/main.rb +4 -4
- data/lib/ocg/operator/abstract.rb +10 -0
- data/lib/ocg/operator/and.rb +20 -10
- data/lib/ocg/operator/mix.rb +8 -6
- data/lib/ocg/operator/or.rb +5 -5
- data/lib/ocg/options.rb +10 -4
- data/lib/ocg/validation.rb +0 -1
- data/lib/ocg/version.rb +1 -1
- metadata +25 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0fa3d1a73808ebe1197e76243c66e4d00b0220c4bbe398e2fcf11e1f58c0f243
|
4
|
+
data.tar.gz: 8709140dacba810330d6ec2b4889002e0a432a1acd4e5af3767ed3a91cded7a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 374148f48f17496aa4d6c572c6e091d08f12b79a8bc1172c2605cb91d30bc1e9a70bda8591fc28e96b1445895c17c930f9dff0b96e5c0460a98d3ed67a9e8b3a
|
7
|
+
data.tar.gz: 1f403b651a77e2b905543008ba198ddbf6ac6eb02dac413de5aab076458d2386815b6c6baf42b77025790273d108e0ba3b13649c7a56ea49e2940dd6245f9a04
|
data/README.md
CHANGED
@@ -6,6 +6,8 @@
|
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
9
|
+
Operating systems: GNU/Linux, OSX, FreeBSD, Windows.
|
10
|
+
|
9
11
|
```sh
|
10
12
|
gem install ocg
|
11
13
|
```
|
@@ -65,7 +67,7 @@ It will provide all possible option combinations.
|
|
65
67
|
| `dup` | returns generator duplicate |
|
66
68
|
| `clone` | returns generator clone |
|
67
69
|
|
68
|
-
Generator is responsible to any method from [`Enumerable`](https://ruby-doc.org/core-3.0.
|
70
|
+
Generator is responsible to any method from [`Enumerable`](https://ruby-doc.org/core-3.0.1/Enumerable.html).
|
69
71
|
Enumerator will be provided using generator duplicate.
|
70
72
|
So enumerable api is separated from bare metal api (`reset`, `next`, `last`, `started?`, `finished?`).
|
71
73
|
|
@@ -80,7 +82,7 @@ Options should be prepared in the following form:
|
|
80
82
|
}
|
81
83
|
```
|
82
84
|
|
83
|
-
Options hash
|
85
|
+
Options hash may be empty.
|
84
86
|
`option_name` can be any valid hash key.
|
85
87
|
`option_values` should be convertable to array using `to_a`.
|
86
88
|
`option_values` should not be empty.
|
@@ -159,15 +161,10 @@ complete_generator = almost_complete_generator.mix(
|
|
159
161
|
)
|
160
162
|
```
|
161
163
|
|
162
|
-
## Operating systems
|
163
|
-
|
164
|
-
GNU/Linux, FreeBSD, OSX, Windows (MinGW).
|
165
|
-
|
166
164
|
## CI
|
167
165
|
|
168
166
|
Please visit [scripts/test-images](scripts/test-images).
|
169
167
|
See universal test script [scripts/ci_test.sh](scripts/ci_test.sh) for CI.
|
170
|
-
You can run this script using many native and cross images.
|
171
168
|
|
172
169
|
## License
|
173
170
|
|
data/lib/ocg/main.rb
CHANGED
@@ -17,7 +17,7 @@ class OCG
|
|
17
17
|
|
18
18
|
def_delegators :@generator, *DELEGATORS
|
19
19
|
|
20
|
-
def initialize(generator_or_options)
|
20
|
+
def initialize(generator_or_options = {})
|
21
21
|
@generator = self.class.prepare_generator generator_or_options
|
22
22
|
end
|
23
23
|
|
@@ -27,15 +27,15 @@ class OCG
|
|
27
27
|
Options.new generator_or_options
|
28
28
|
end
|
29
29
|
|
30
|
-
def and(generator_or_options)
|
30
|
+
def and(generator_or_options = {})
|
31
31
|
Operator::AND.new self, generator_or_options
|
32
32
|
end
|
33
33
|
|
34
|
-
def mix(generator_or_options)
|
34
|
+
def mix(generator_or_options = {})
|
35
35
|
Operator::MIX.new self, generator_or_options
|
36
36
|
end
|
37
37
|
|
38
|
-
def or(generator_or_options)
|
38
|
+
def or(generator_or_options = {})
|
39
39
|
Operator::OR.new self, generator_or_options
|
40
40
|
end
|
41
41
|
|
@@ -22,6 +22,16 @@ class OCG
|
|
22
22
|
nil
|
23
23
|
end
|
24
24
|
|
25
|
+
protected def merge_results(left, right)
|
26
|
+
if left.nil?
|
27
|
+
right
|
28
|
+
elsif right.nil?
|
29
|
+
left
|
30
|
+
else
|
31
|
+
left.merge right
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
25
35
|
# :nocov:
|
26
36
|
def next
|
27
37
|
raise NotImplementedError, "\"next\" is not implemented"
|
data/lib/ocg/operator/and.rb
CHANGED
@@ -11,21 +11,22 @@ class OCG
|
|
11
11
|
|
12
12
|
if @right_generator.finished?
|
13
13
|
@right_generator.reset
|
14
|
-
@left_generator.next
|
14
|
+
left = @left_generator.next
|
15
15
|
else
|
16
|
-
|
17
|
-
|
18
|
-
left_last.merge @right_generator.next
|
16
|
+
left = @left_generator.last
|
17
|
+
left = @left_generator.next if left.nil?
|
19
18
|
end
|
19
|
+
|
20
|
+
right = @right_generator.next
|
21
|
+
|
22
|
+
merge_results left, right
|
20
23
|
end
|
21
24
|
|
22
25
|
def last
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
return nil if left_last.nil? || right_last.nil?
|
26
|
+
left = @left_generator.last
|
27
|
+
right = @right_generator.last
|
27
28
|
|
28
|
-
|
29
|
+
merge_results left, right
|
29
30
|
end
|
30
31
|
|
31
32
|
def started?
|
@@ -37,7 +38,16 @@ class OCG
|
|
37
38
|
end
|
38
39
|
|
39
40
|
def length
|
40
|
-
@left_generator.length
|
41
|
+
left_length = @left_generator.length
|
42
|
+
right_length = @right_generator.length
|
43
|
+
|
44
|
+
if left_length.zero?
|
45
|
+
right_length
|
46
|
+
elsif right_length.zero?
|
47
|
+
left_length
|
48
|
+
else
|
49
|
+
left_length * right_length
|
50
|
+
end
|
41
51
|
end
|
42
52
|
end
|
43
53
|
end
|
data/lib/ocg/operator/mix.rb
CHANGED
@@ -32,16 +32,18 @@ class OCG
|
|
32
32
|
|
33
33
|
@left_generator.reset if @left_generator.finished?
|
34
34
|
@right_generator.reset if @right_generator.finished?
|
35
|
-
|
35
|
+
|
36
|
+
left = @left_generator.next
|
37
|
+
right = @right_generator.next
|
38
|
+
|
39
|
+
merge_results left, right
|
36
40
|
end
|
37
41
|
|
38
42
|
def last
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
return nil if left_last.nil? || right_last.nil?
|
43
|
+
left = @left_generator.last
|
44
|
+
right = @right_generator.last
|
43
45
|
|
44
|
-
|
46
|
+
merge_results left, right
|
45
47
|
end
|
46
48
|
|
47
49
|
def started?
|
data/lib/ocg/operator/or.rb
CHANGED
@@ -17,13 +17,13 @@ class OCG
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def last
|
20
|
-
|
21
|
-
|
20
|
+
left = @left_generator.last
|
21
|
+
right = @right_generator.last
|
22
22
|
|
23
|
-
if
|
24
|
-
|
23
|
+
if right.nil?
|
24
|
+
left
|
25
25
|
else
|
26
|
-
|
26
|
+
right
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
data/lib/ocg/options.rb
CHANGED
@@ -21,7 +21,7 @@ class OCG
|
|
21
21
|
|
22
22
|
reset_value_indexes
|
23
23
|
|
24
|
-
@is_finished =
|
24
|
+
@is_finished = length.zero?
|
25
25
|
end
|
26
26
|
|
27
27
|
protected def reset_value_indexes
|
@@ -36,7 +36,7 @@ class OCG
|
|
36
36
|
# If state is finished than all value indexes are already zero.
|
37
37
|
reset_value_indexes unless @is_finished
|
38
38
|
|
39
|
-
@is_finished =
|
39
|
+
@is_finished = length.zero?
|
40
40
|
|
41
41
|
nil
|
42
42
|
end
|
@@ -44,7 +44,7 @@ class OCG
|
|
44
44
|
def next
|
45
45
|
return nil if @is_finished
|
46
46
|
|
47
|
-
@last_options =
|
47
|
+
@last_options = @value_indexes.map { |name, value_index| [name, @options[name][value_index]] }.to_h
|
48
48
|
|
49
49
|
@is_finished = @keys.all? do |name|
|
50
50
|
values = @options[name]
|
@@ -76,7 +76,13 @@ class OCG
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def length
|
79
|
-
@options.reduce(
|
79
|
+
@options.reduce(0) do |length, (_name, values)|
|
80
|
+
if length.zero?
|
81
|
+
values.length
|
82
|
+
else
|
83
|
+
length * values.length
|
84
|
+
end
|
85
|
+
end
|
80
86
|
end
|
81
87
|
end
|
82
88
|
end
|
data/lib/ocg/validation.rb
CHANGED
@@ -7,7 +7,6 @@ class OCG
|
|
7
7
|
module Validation
|
8
8
|
def self.validate_options(options)
|
9
9
|
raise ValidateError, "invalid options hash" unless options.is_a? ::Hash
|
10
|
-
raise ValidateError, "options should not be empty" if options.empty?
|
11
10
|
|
12
11
|
options.each do |_name, values|
|
13
12
|
raise ValidateError, "option values should respond to \"to_a\"" unless values.respond_to? :to_a
|
data/lib/ocg/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ocg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Aladjev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: codecov
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: minitest
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,56 +72,56 @@ dependencies:
|
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '1.
|
75
|
+
version: '1.22'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '1.
|
82
|
+
version: '1.22'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rubocop-minitest
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0.
|
89
|
+
version: '0.15'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0.
|
96
|
+
version: '0.15'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rubocop-performance
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: '1.
|
103
|
+
version: '1.11'
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: '1.
|
110
|
+
version: '1.11'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: rubocop-rake
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - "~>"
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: '0.
|
117
|
+
version: '0.6'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
122
|
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version: '0.
|
124
|
+
version: '0.6'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: simplecov
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -161,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
175
|
- !ruby/object:Gem::Version
|
162
176
|
version: '0'
|
163
177
|
requirements: []
|
164
|
-
rubygems_version: 3.2.
|
178
|
+
rubygems_version: 3.2.22
|
165
179
|
signing_key:
|
166
180
|
specification_version: 4
|
167
181
|
summary: Option combination generator.
|