ocg 1.4.2 → 1.4.3

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: 5203959948fc9159061ecbc0218e4f5bf2024d73d448db2d24f345f26143a17c
4
- data.tar.gz: 71c6d13b14b86e219a464b18f7c83d7095ace6bbdfe5f1a2aa49687e352f67fe
3
+ metadata.gz: 45e7d61cdd0972c7916e79ea804cfed5c6cdf03abc8748a250026d21f2af3301
4
+ data.tar.gz: 692aff9f1133bc0498ee29a4d14f827cd87d60f0d5a91747a6dc110ec30ad018
5
5
  SHA512:
6
- metadata.gz: 49674ba90890c919316d77d6cab1acf213df64acad0793e754d863b9390d99c66da6f3e49e313db83b136372161d496ebcf46cb0ae30392be2d86305982f3fad
7
- data.tar.gz: 8ec4f446b6b875c5a34dded0d61a5a043ae2568775efc0fb08380bc5035f8e6b7e760d72d60e6590d94010928f573bd4e6bffccb08ff9b5b9c24d0e24fcbd269
6
+ metadata.gz: 7543c7ae5777f111d5bd962437c5febffc0b23ea3310063be99a1319ab6523e23a67f7e58222fc4e694905d0e027eb9edd88784545ab7e2bab0e783d56a3c3f6
7
+ data.tar.gz: 30a95c0daf0cb9794a7827f16f3f701b589e01b4841d6a95cdacea0de208a362c8792a7c80c37a727808ea6acfe7b14449ad33a6b00a49990edd0a73b7e94252
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Option combination generator
2
2
 
3
- | AppVeyor | Circle | Github Actions | Codecov | Gem |
4
- | :------: | :----: | :------------: | :-----: | :-: |
5
- | [![AppVeyor test status](https://ci.appveyor.com/api/projects/status/github/andrew-aladev/ocg?branch=master&svg=true)](https://ci.appveyor.com/project/andrew-aladev/ocg/branch/master) | [![Circle test status](https://circleci.com/gh/andrew-aladev/ocg/tree/master.svg?style=shield)](https://circleci.com/gh/andrew-aladev/ocg/tree/master) | [![Github Actions test status](https://github.com/andrew-aladev/ocg/workflows/test/badge.svg?branch=master)](https://github.com/andrew-aladev/ocg/actions) | [![Codecov](https://codecov.io/gh/andrew-aladev/ocg/branch/master/graph/badge.svg)](https://codecov.io/gh/andrew-aladev/ocg) | [![Gem](https://img.shields.io/gem/v/ocg.svg)](https://rubygems.org/gems/ocg) |
3
+ | AppVeyor | Jenkins | Github Actions | Codecov | Gem |
4
+ | :------: | :-----: | :------------: | :-----: | :-: |
5
+ | [![AppVeyor test status](https://ci.appveyor.com/api/projects/status/github/andrew-aladev/ocg?branch=master&svg=true)](https://ci.appveyor.com/project/andrew-aladev/ocg/branch/master) | [![Jenkins test status](http://37.187.122.190:58182/buildStatus/icon?job=ocg)](http://37.187.122.190:58182/job/ocg) | [![Github Actions test status](https://github.com/andrew-aladev/ocg/workflows/test/badge.svg?branch=master)](https://github.com/andrew-aladev/ocg/actions) | [![Codecov](https://codecov.io/gh/andrew-aladev/ocg/branch/master/graph/badge.svg)](https://codecov.io/gh/andrew-aladev/ocg) | [![Gem](https://img.shields.io/gem/v/ocg.svg)](https://rubygems.org/gems/ocg) |
6
6
 
7
7
  ## Installation
8
8
 
9
- Operating systems: GNU/Linux, OSX, FreeBSD, Windows.
9
+ Operating systems: GNU/Linux, OSX, FreeBSD.
10
10
 
11
11
  ```sh
12
12
  gem install ocg
@@ -50,6 +50,8 @@ It will populate all option combinations.
50
50
 
51
51
  ## Docs
52
52
 
53
+ Please review [rdoc generated docs](https://andrew-aladev.github.io/ocg).
54
+
53
55
  `OCG.new options` will prepare a generator.
54
56
  It will provide all possible option combinations.
55
57
 
data/lib/ocg/copyable.rb CHANGED
@@ -2,9 +2,11 @@
2
2
  # Copyright (c) 2019 AUTHORS, MIT License.
3
3
 
4
4
  class OCG
5
+ # OCG::Copyable module.
5
6
  module Copyable
6
7
  VARIABLES_TO_COPY = [].freeze
7
8
 
9
+ # Initializes copy of +source+ object using +VARIABLES_TO_COPY+ keys.
8
10
  def initialize_copy(source)
9
11
  self.class::VARIABLES_TO_COPY.each do |variable|
10
12
  key = "@#{variable}".to_sym
data/lib/ocg/main.rb CHANGED
@@ -7,38 +7,53 @@ require_relative "copyable"
7
7
  require_relative "error"
8
8
  require_relative "options"
9
9
 
10
+ # OCG class.
10
11
  class OCG
11
12
  include Copyable
12
13
  include ::Enumerable
13
14
  extend ::Forwardable
14
15
 
15
- DELEGATORS = %i[reset next last started? finished? length].freeze
16
+ # Current delegators.
17
+ DELEGATORS = %i[reset next last started? finished? length].freeze
18
+
19
+ # Current variables to copy.
16
20
  VARIABLES_TO_COPY = %i[generator].freeze
17
21
 
22
+ # Define current delegators.
18
23
  def_delegators :@generator, *DELEGATORS
19
24
 
25
+ # Initializes options generator using +generator_or_options+.
26
+ # +generator_or_options+ may be +generator+ object or +options+.
27
+ # +options+ is a hash with values convertable to array.
20
28
  def initialize(generator_or_options = {})
21
29
  @generator = self.class.prepare_generator generator_or_options
22
30
  end
23
31
 
32
+ # Prepares options generator using +generator_or_options+.
33
+ # +generator_or_options+ may be +generator+ object or +options+.
34
+ # +options+ is a hash with values convertable to array.
24
35
  def self.prepare_generator(generator_or_options)
25
36
  return generator_or_options if generator_or_options.is_a? OCG
26
37
 
27
38
  Options.new generator_or_options
28
39
  end
29
40
 
41
+ # Adds +generator_or_options+ to current option combinations generator.
30
42
  def and(generator_or_options = {})
31
43
  Operator::AND.new self, generator_or_options
32
44
  end
33
45
 
46
+ # Mixes +generator_or_options+ with current option combinations generator.
34
47
  def mix(generator_or_options = {})
35
48
  Operator::MIX.new self, generator_or_options
36
49
  end
37
50
 
51
+ # Mixes +generator_or_options+ with current option combinations generator.
38
52
  def or(generator_or_options = {})
39
53
  Operator::OR.new self, generator_or_options
40
54
  end
41
55
 
56
+ # Processes each option combination.
42
57
  def each(&_block)
43
58
  instance = dup
44
59
  instance.reset
@@ -5,9 +5,12 @@ require_relative "../error"
5
5
 
6
6
  class OCG
7
7
  module Operator
8
+ # OCG::Operator::Abstract class.
8
9
  class Abstract < OCG
9
10
  VARIABLES_TO_COPY = %i[left_generator right_generator].freeze
10
11
 
12
+ # Initializes operator using +left_generator_or_options+ and +right_generator_or_options+.
13
+ # Internaly object initializes left and right generators.
11
14
  def initialize(left_generator_or_options, right_generator_or_options) # rubocop:disable Lint/MissingSuper
12
15
  @left_generator = OCG.prepare_generator left_generator_or_options
13
16
  @right_generator = OCG.prepare_generator right_generator_or_options
@@ -15,6 +18,7 @@ class OCG
15
18
  reset
16
19
  end
17
20
 
21
+ # Resets left and right generators specifically for options.
18
22
  def reset
19
23
  @left_generator.reset
20
24
  @right_generator.reset
@@ -22,6 +26,7 @@ class OCG
22
26
  nil
23
27
  end
24
28
 
29
+ # Merges results specifically for options.
25
30
  protected def merge_results(left, right)
26
31
  if left.nil?
27
32
  right
@@ -5,7 +5,9 @@ require_relative "abstract"
5
5
 
6
6
  class OCG
7
7
  module Operator
8
+ # OCG::Operator::AND class.
8
9
  class AND < Abstract
10
+ # Get next option combination result.
9
11
  def next
10
12
  return nil if finished?
11
13
 
@@ -22,6 +24,7 @@ class OCG
22
24
  merge_results left, right
23
25
  end
24
26
 
27
+ # Get last option combination result.
25
28
  def last
26
29
  left = @left_generator.last
27
30
  right = @right_generator.last
@@ -29,14 +32,17 @@ class OCG
29
32
  merge_results left, right
30
33
  end
31
34
 
32
- def started?
33
- @left_generator.started? || @right_generator.started?
34
- end
35
-
35
+ # Is option combinations generation finished?
36
36
  def finished?
37
37
  @left_generator.finished? && @right_generator.finished?
38
38
  end
39
39
 
40
+ # Is option combinations generation started?
41
+ def started?
42
+ @left_generator.started? || @right_generator.started?
43
+ end
44
+
45
+ # Get options combination length.
40
46
  def length
41
47
  left_length = @left_generator.length
42
48
  right_length = @right_generator.length
@@ -5,19 +5,23 @@ require_relative "abstract"
5
5
 
6
6
  class OCG
7
7
  module Operator
8
+ # OCG::Operator::MIX class.
8
9
  class MIX < Abstract
10
+ # Initializes current generators.
9
11
  def initialize(*args)
10
12
  super
11
13
 
12
14
  reset_main_generator
13
15
  end
14
16
 
17
+ # Initializes copy of current generators.
15
18
  def initialize_copy(*args)
16
19
  super
17
20
 
18
21
  reset_main_generator
19
22
  end
20
23
 
24
+ # Resets left or right generator based on internal state.
21
25
  def reset_main_generator
22
26
  @main_generator =
23
27
  if @right_generator.length > @left_generator.length
@@ -27,6 +31,7 @@ class OCG
27
31
  end
28
32
  end
29
33
 
34
+ # Get next option combination result.
30
35
  def next
31
36
  return nil if finished?
32
37
 
@@ -39,6 +44,7 @@ class OCG
39
44
  merge_results left, right
40
45
  end
41
46
 
47
+ # Get last option combination result.
42
48
  def last
43
49
  left = @left_generator.last
44
50
  right = @right_generator.last
@@ -46,14 +52,17 @@ class OCG
46
52
  merge_results left, right
47
53
  end
48
54
 
49
- def started?
50
- @main_generator.started?
51
- end
52
-
55
+ # Is option combinations generation finished?
53
56
  def finished?
54
57
  @main_generator.finished?
55
58
  end
56
59
 
60
+ # Is option combinations generation started?
61
+ def started?
62
+ @main_generator.started?
63
+ end
64
+
65
+ # Get options combination length.
57
66
  def length
58
67
  @main_generator.length
59
68
  end
@@ -5,7 +5,9 @@ require_relative "abstract"
5
5
 
6
6
  class OCG
7
7
  module Operator
8
+ # OCG::Operator::OR class.
8
9
  class OR < Abstract
10
+ # Get next option combination result.
9
11
  def next
10
12
  return nil if finished?
11
13
 
@@ -16,6 +18,7 @@ class OCG
16
18
  end
17
19
  end
18
20
 
21
+ # Get last option combination result.
19
22
  def last
20
23
  left = @left_generator.last
21
24
  right = @right_generator.last
@@ -27,14 +30,17 @@ class OCG
27
30
  end
28
31
  end
29
32
 
33
+ # Is option combinations generation started?
30
34
  def started?
31
35
  @left_generator.started? || @right_generator.started?
32
36
  end
33
37
 
38
+ # Is option combinations generation finished?
34
39
  def finished?
35
40
  @left_generator.finished? && @right_generator.finished?
36
41
  end
37
42
 
43
+ # Get option combinations length.
38
44
  def length
39
45
  @left_generator.length + @right_generator.length
40
46
  end
data/lib/ocg/options.rb CHANGED
@@ -5,11 +5,15 @@ require_relative "copyable"
5
5
  require_relative "validation"
6
6
 
7
7
  class OCG
8
+ # OCG::Options class.
8
9
  class Options
9
10
  include Copyable
10
11
 
12
+ # Current variables to be copied.
11
13
  VARIABLES_TO_COPY = %i[options keys last_options value_indexes].freeze
12
14
 
15
+ # Initializes options using +options+ values.
16
+ # +options+ is a hash with values convertable to array.
13
17
  def initialize(options)
14
18
  Validation.validate_options options
15
19
  @options = options.transform_values(&:to_a)
@@ -24,10 +28,12 @@ class OCG
24
28
  @is_finished = length.zero?
25
29
  end
26
30
 
31
+ # Resets internal value indexes.
27
32
  protected def reset_value_indexes
28
33
  @value_indexes = @options.transform_values { |_values| 0 }
29
34
  end
30
35
 
36
+ # Resets current option combinations state.
31
37
  def reset
32
38
  return nil unless started?
33
39
 
@@ -41,10 +47,11 @@ class OCG
41
47
  nil
42
48
  end
43
49
 
50
+ # Get next option combination.
44
51
  def next
45
52
  return nil if @is_finished
46
53
 
47
- @last_options = @value_indexes.map { |name, value_index| [name, @options[name][value_index]] }.to_h
54
+ @last_options = @value_indexes.to_h { |name, value_index| [name, @options[name][value_index]] }
48
55
 
49
56
  @is_finished = @keys.all? do |name|
50
57
  values = @options[name]
@@ -63,18 +70,22 @@ class OCG
63
70
  @last_options
64
71
  end
65
72
 
73
+ # Get last option combination.
66
74
  def last
67
75
  @last_options
68
76
  end
69
77
 
78
+ # Is option combinations generation started?
70
79
  def started?
71
80
  !@last_options.nil?
72
81
  end
73
82
 
83
+ # Is option combinations generation finished?
74
84
  def finished?
75
85
  @is_finished
76
86
  end
77
87
 
88
+ # Get option combinations length.
78
89
  def length
79
90
  @options.reduce(0) do |length, (_name, values)|
80
91
  if length.zero?
@@ -4,7 +4,11 @@
4
4
  require_relative "error"
5
5
 
6
6
  class OCG
7
+ # OCG::Validation module.
7
8
  module Validation
9
+ # Raises error when +options+ is not hash
10
+ # and option values are not convertable to array
11
+ # and option values are not empty.
8
12
  def self.validate_options(options)
9
13
  raise ValidateError, "invalid options hash" unless options.is_a? ::Hash
10
14
 
data/lib/ocg/version.rb CHANGED
@@ -2,5 +2,6 @@
2
2
  # Copyright (c) 2019 AUTHORS, MIT License.
3
3
 
4
4
  class OCG
5
- VERSION = "1.4.2".freeze
5
+ # Option combination generator version.
6
+ VERSION = "1.4.3".freeze
6
7
  end
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.2
4
+ version: 1.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Aladjev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-18 00:00:00.000000000 Z
11
+ date: 2022-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: codecov
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5.15'
47
+ version: '5.16'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5.15'
54
+ version: '5.16'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,48 +66,62 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rdoc
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rubocop
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '1.26'
89
+ version: '1.31'
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: '1.26'
96
+ version: '1.31'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: rubocop-minitest
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '0.17'
103
+ version: '0.20'
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: '0.17'
110
+ version: '0.20'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rubocop-performance
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: '1.13'
117
+ version: '1.14'
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: '1.13'
124
+ version: '1.14'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: rubocop-rake
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -169,7 +183,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
169
183
  requirements:
170
184
  - - ">="
171
185
  - !ruby/object:Gem::Version
172
- version: '2.5'
186
+ version: '2.6'
173
187
  required_rubygems_version: !ruby/object:Gem::Requirement
174
188
  requirements:
175
189
  - - ">="