circuits 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MzJiYjI2N2YzMjI5ZDJmOGQ0YjM4NDg5YzQzYjFlYjgzNTQ3Yjc5Nw==
4
+ NzMwZGNkMDQ1ZmY2ZTVlMjhjZjA1ODUyZTFmNDc1OTMyZTA2YmM1Mw==
5
5
  data.tar.gz: !binary |-
6
- MThiMDgxYzExOTY1YTk1ZGNlNTc2OTc3MTQ2ZjA4ZDdhMGY5NThlNw==
6
+ M2ZjMmNmYzM5OGExZjAxMWU0MjI3NzRlZTYyY2QzYWVjNjI1MDc0Zg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ODhlMWYxZTllZTIzNDA5NTBlZGM1ZmJiMGExZDFmYWMyOTkzNWIzNDA5NTFm
10
- Y2JiNWVlOThmZGJiNzMwYTE1NWZmOGU3NGU0YzY3ZGRlNGMxYzg0MjUwNjRk
11
- MDMzYTg2YzdiMTM3NTA5NWZlYTg5Zjg5ZmQxOThlMTVjNTQxMDQ=
9
+ YWJkYmY2NTE1YWYzMWU0OTk2NjIzZDNkYTY1MTE3NDEzOTkzZDg5MThlMzZh
10
+ YjhiNmE5NjRmYTRhZDNmNTE4Yjc0ZDllZTY3OGIxM2Q4MjMyZmM1YWU3ZjM1
11
+ N2FlNTg1YWNlNWQ5NTFjZjEwOTlhOTdjNzRmZWFkYWIwZWZlZDU=
12
12
  data.tar.gz: !binary |-
13
- NzJkMjFhYzI1YjI2MWIwMTA4ZDc1Y2I2NzhkNzI2ZjBkNDdmNzM3MzM3MDEw
14
- YWE1ZmZmYWE4NTk0NWM5ZTc4M2ZlMDFmOWI5N2Q2ZjRiNDJhNmVmMGVkNTNh
15
- N2Q1MGMwMzA0YzkxNTUyNzBhOWZhYzQyMGZmMWFiMjMwNDI3Yzg=
13
+ OWNmNzVkMTQyMWQ3MWJjNDFlNjJkZGZmYjZjYzQ1OGU5NGY5Y2JjNGM2ODA4
14
+ MTRjOWM5NjI3MWQ3OWJmZWRmZTBkMGUxZjI0YjRmZDg1NGE2M2I4YTE3ZjZh
15
+ YjdlYTRkMDI2OGNhMmVkZWEzOTc1NzU2NTJlZDUxNjBlODc1MGY=
data/.rspec CHANGED
@@ -1,2 +1,3 @@
1
1
  --color
2
+ --format doc
2
3
  --require spec_helper
data/README.md CHANGED
@@ -2,6 +2,7 @@
2
2
  [![Gem Version](https://badge.fury.io/rb/circuits.svg)](https://badge.fury.io/rb/circuits)
3
3
  [![Coverage Status](https://coveralls.io/repos/meringu/circuits/badge.svg?branch=master&service=github)](https://coveralls.io/github/meringu/circuits?branch=master)
4
4
  [![Code Climate](https://codeclimate.com/github/meringu/circuits/badges/gpa.svg)](https://codeclimate.com/github/meringu/circuits)
5
+ [![Dependency Status](https://gemnasium.com/meringu/circuits.svg)](https://gemnasium.com/meringu/circuits)
5
6
  [![docs](http://inch-ci.org/github/meringu/circuits.svg?branch=master)](http://inch-ci.org/github/meringu/circuits)
6
7
 
7
8
  # Circuits
@@ -50,7 +51,7 @@ and_gate.outputs[0].get # false
50
51
 
51
52
  ```ruby
52
53
  and_gate = Circuits::Component::And.new
53
- not_gate = Circuits::Component::And.new(inputs: [and_gate.outputs[0])
54
+ not_gate = Circuits::Component::Not.new(inputs: [and_gate.outputs[0]])
54
55
  ```
55
56
 
56
57
  ## Contributing
data/Rakefile CHANGED
@@ -1,6 +1,23 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rspec/core/rake_task'
3
+ require 'rubocop/rake_task'
4
+ require 'reek/rake/task'
5
+ require 'yard'
3
6
 
4
7
  RSpec::Core::RakeTask.new(:spec)
5
8
 
6
9
  task default: :spec
10
+
11
+ RuboCop::RakeTask.new(:rubocop) do |task|
12
+ task.patterns = ['lib/**/*.rb']
13
+ # only show the files with failures
14
+ task.formatters = ['files']
15
+ end
16
+
17
+ Reek::Rake::Task.new
18
+
19
+ task lint: [:rubocop, :reek]
20
+
21
+ YARD::Rake::YardocTask.new(:yard) do |t|
22
+ t.stats_options = ['--list-undoc']
23
+ end
data/circuits.gemspec CHANGED
@@ -21,4 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency 'coveralls'
22
22
  spec.add_development_dependency 'rake', '~> 10.0'
23
23
  spec.add_development_dependency 'rspec', '~> 3.3'
24
+ spec.add_development_dependency 'rubocop', '~> 0.34'
25
+ spec.add_development_dependency 'reek', '~> 3.5'
26
+ spec.add_development_dependency 'yard', '~> 0.8.7'
24
27
  end
@@ -8,7 +8,7 @@ module Circuits
8
8
 
9
9
  # Sets the output to be the result of a logical XNOR of the inputs
10
10
  def tick
11
- outputs[0].set(inputs[0].get == inputs[1].get)
11
+ outputs[0].set(!inputs.map(&:get).inject(:^))
12
12
  end
13
13
 
14
14
  private
@@ -8,7 +8,7 @@ module Circuits
8
8
 
9
9
  # Sets the output to be the result of a logical XOR of the inputs
10
10
  def tick
11
- outputs[0].set(inputs[0].get != inputs[1].get)
11
+ outputs[0].set(inputs.map(&:get).inject(:^))
12
12
  end
13
13
 
14
14
  private
@@ -8,10 +8,13 @@ module Circuits
8
8
  module Component
9
9
  # Creates the Component with inputs and outputs
10
10
  # @param opts [Hash] options to create the Component with
11
- # @option opts [Array<Input>] :inputs The array of inputs to use
11
+ # @option opts [Array<Input>, FixNum] :inputs The array of inputs to use, or
12
+ # the number of inputs to create
12
13
  def initialize(opts = {})
13
- @inputs = opts[:inputs] ||
14
- input_count.times.collect { Circuits::Terminal::Input.new }
14
+ @inputs = opts[:inputs] if opts[:inputs].is_a? Array
15
+ @inputs = create_inputs opts[:inputs] if opts[:inputs].is_a? Integer
16
+ @inputs = create_inputs input_count if opts[:inputs].nil?
17
+
15
18
  @outputs = output_count.times.collect { Circuits::Terminal::Output.new }
16
19
  setup
17
20
  end
@@ -41,6 +44,17 @@ module Circuits
41
44
  def output_count
42
45
  fail NotImplementedError
43
46
  end
47
+
48
+ # Creates an array of N inputs, where N is equal to or greater than the
49
+ # default number of inputs for this component
50
+ # @param n [FixNum] The number of inputs to create
51
+ # @return [Array<Input>] An array of inputs
52
+ def create_inputs(n)
53
+ if n < input_count
54
+ fail ArgumentError, "Invalid number of inputs, #{self.class} requires at least #{input_count} inputs"
55
+ end
56
+ n.times.collect { Circuits::Terminal::Input.new }
57
+ end
44
58
 
45
59
  def setup
46
60
  end
@@ -1,5 +1,5 @@
1
1
  # Circuits allows you to express logical circuits in code
2
2
  module Circuits
3
3
  # The version of the Circuits gem
4
- VERSION = '0.2.6'
4
+ VERSION = '0.3.0'
5
5
  end
@@ -55,5 +55,53 @@ describe Circuits::Component::And do
55
55
  end
56
56
  end
57
57
  end
58
+
59
+ [3, 4, 8].each do |n|
60
+ context "with #{n} inputs" do
61
+ subject { Circuits::Component::And.new inputs: n }
62
+
63
+ before do
64
+ n.times { |x| subject.inputs[x].set inputs[x] }
65
+ end
66
+
67
+ context 'when all inputs are true' do
68
+ let(:inputs) { n.times.collect { true } }
69
+
70
+ it '= true' do
71
+ subject.tick
72
+ subject.tock
73
+ expect(subject.outputs[0].get).to eq(true)
74
+ end
75
+ end
76
+
77
+ context 'when all inputs are false' do
78
+ let(:inputs) { n.times.collect { false } }
79
+
80
+ it '= false' do
81
+ subject.tick
82
+ subject.tock
83
+ expect(subject.outputs[0].get).to eq(false)
84
+ end
85
+ end
86
+
87
+ context 'when any input is false' do
88
+ n.times do |x|
89
+ context "when input #{x} is false" do
90
+ let(:inputs) do
91
+ inputs = n.times.collect { true }
92
+ inputs[x] = false
93
+ inputs
94
+ end
95
+
96
+ it '= false' do
97
+ subject.tick
98
+ subject.tock
99
+ expect(subject.outputs[0].get).to eq(false)
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
58
106
  end
59
107
  end
@@ -55,5 +55,52 @@ describe Circuits::Component::Nand do
55
55
  end
56
56
  end
57
57
  end
58
+ [3, 4, 8].each do |n|
59
+ context "with #{n} inputs" do
60
+ subject { Circuits::Component::Nand.new inputs: n }
61
+
62
+ before do
63
+ n.times { |x| subject.inputs[x].set inputs[x] }
64
+ end
65
+
66
+ context 'when all inputs are true' do
67
+ let(:inputs) { n.times.collect { true } }
68
+
69
+ it '= false' do
70
+ subject.tick
71
+ subject.tock
72
+ expect(subject.outputs[0].get).to eq(false)
73
+ end
74
+ end
75
+
76
+ context 'when all inputs are false' do
77
+ let(:inputs) { n.times.collect { false } }
78
+
79
+ it '= true' do
80
+ subject.tick
81
+ subject.tock
82
+ expect(subject.outputs[0].get).to eq(true)
83
+ end
84
+ end
85
+
86
+ context 'when any input is false' do
87
+ n.times do |x|
88
+ context "when input #{x} is false" do
89
+ let(:inputs) do
90
+ inputs = n.times.collect { true }
91
+ inputs[x] = false
92
+ inputs
93
+ end
94
+
95
+ it '= true' do
96
+ subject.tick
97
+ subject.tock
98
+ expect(subject.outputs[0].get).to eq(true)
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
58
105
  end
59
106
  end
@@ -55,5 +55,52 @@ describe Circuits::Component::Nor do
55
55
  end
56
56
  end
57
57
  end
58
+ [3, 4, 8].each do |n|
59
+ context "with #{n} inputs" do
60
+ subject { Circuits::Component::Nor.new inputs: n }
61
+
62
+ before do
63
+ n.times { |x| subject.inputs[x].set inputs[x] }
64
+ end
65
+
66
+ context 'when all inputs are true' do
67
+ let(:inputs) { n.times.collect { true } }
68
+
69
+ it '= false' do
70
+ subject.tick
71
+ subject.tock
72
+ expect(subject.outputs[0].get).to eq(false)
73
+ end
74
+ end
75
+
76
+ context 'when all inputs are false' do
77
+ let(:inputs) { n.times.collect { false } }
78
+
79
+ it '= true' do
80
+ subject.tick
81
+ subject.tock
82
+ expect(subject.outputs[0].get).to eq(true)
83
+ end
84
+ end
85
+
86
+ context 'when any input is false' do
87
+ n.times do |x|
88
+ context "when input #{x} is false" do
89
+ let(:inputs) do
90
+ inputs = n.times.collect { true }
91
+ inputs[x] = false
92
+ inputs
93
+ end
94
+
95
+ it '= false' do
96
+ subject.tick
97
+ subject.tock
98
+ expect(subject.outputs[0].get).to eq(false)
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
58
105
  end
59
106
  end
@@ -55,5 +55,52 @@ describe Circuits::Component::Or do
55
55
  end
56
56
  end
57
57
  end
58
+ [3, 4, 8].each do |n|
59
+ context "with #{n} inputs" do
60
+ subject { Circuits::Component::Or.new inputs: n }
61
+
62
+ before do
63
+ n.times { |x| subject.inputs[x].set inputs[x] }
64
+ end
65
+
66
+ context 'when all inputs are true' do
67
+ let(:inputs) { n.times.collect { true } }
68
+
69
+ it '= true' do
70
+ subject.tick
71
+ subject.tock
72
+ expect(subject.outputs[0].get).to eq(true)
73
+ end
74
+ end
75
+
76
+ context 'when all inputs are false' do
77
+ let(:inputs) { n.times.collect { false } }
78
+
79
+ it '= false' do
80
+ subject.tick
81
+ subject.tock
82
+ expect(subject.outputs[0].get).to eq(false)
83
+ end
84
+ end
85
+
86
+ context 'when any input is false' do
87
+ n.times do |x|
88
+ context "when input #{x} is false" do
89
+ let(:inputs) do
90
+ inputs = n.times.collect { true }
91
+ inputs[x] = false
92
+ inputs
93
+ end
94
+
95
+ it '= true' do
96
+ subject.tick
97
+ subject.tock
98
+ expect(subject.outputs[0].get).to eq(true)
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
58
105
  end
59
106
  end
@@ -55,5 +55,121 @@ describe Circuits::Component::Xnor do
55
55
  end
56
56
  end
57
57
  end
58
+ context 'when the number of inputs is even' do
59
+ [2, 4, 8].each do |n|
60
+ context "with #{n} inputs" do
61
+ subject { Circuits::Component::Xnor.new inputs: n }
62
+
63
+ before do
64
+ n.times { |x| subject.inputs[x].set inputs[x] }
65
+ end
66
+
67
+ context 'when all inputs are true' do
68
+ let(:inputs) { n.times.collect { true } }
69
+
70
+ it '= true' do
71
+ subject.tick
72
+ subject.tock
73
+ expect(subject.outputs[0].get).to eq(true)
74
+ end
75
+ end
76
+
77
+ context 'when all inputs are false' do
78
+ let(:inputs) { n.times.collect { false } }
79
+
80
+ it '= true' do
81
+ subject.tick
82
+ subject.tock
83
+ expect(subject.outputs[0].get).to eq(true)
84
+ end
85
+ end
86
+
87
+ context 'when any input is false' do
88
+ n.times do |x|
89
+ context "when input #{x} is false" do
90
+ let(:inputs) do
91
+ inputs = n.times.collect { true }
92
+ inputs[x] = false
93
+ inputs
94
+ end
95
+
96
+ it '= false' do
97
+ subject.tick
98
+ subject.tock
99
+ expect(subject.outputs[0].get).to eq(false)
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
107
+ context 'when the number of inputs is odd' do
108
+ [3, 5, 7].each do |n|
109
+ context "with #{n} inputs" do
110
+ subject { Circuits::Component::Xnor.new inputs: n }
111
+
112
+ before do
113
+ n.times { |x| subject.inputs[x].set inputs[x] }
114
+ end
115
+
116
+ context 'when all inputs are true' do
117
+ let(:inputs) { n.times.collect { true } }
118
+
119
+ it '= false' do
120
+ subject.tick
121
+ subject.tock
122
+ expect(subject.outputs[0].get).to eq(false)
123
+ end
124
+ end
125
+
126
+ context 'when all inputs are false' do
127
+ let(:inputs) { n.times.collect { false } }
128
+
129
+ it '= true' do
130
+ subject.tick
131
+ subject.tock
132
+ expect(subject.outputs[0].get).to eq(true)
133
+ end
134
+ end
135
+
136
+ context 'when any input is false' do
137
+ n.times do |x|
138
+ context "when input #{x} is false" do
139
+ let(:inputs) do
140
+ inputs = n.times.collect { true }
141
+ inputs[x] = false
142
+ inputs
143
+ end
144
+
145
+ it '= true' do
146
+ subject.tick
147
+ subject.tock
148
+ expect(subject.outputs[0].get).to eq(true)
149
+ end
150
+ end
151
+ end
152
+ end
153
+
154
+ context 'when any input is true' do
155
+ n.times do |x|
156
+ context "when input #{x} is true" do
157
+ let(:inputs) do
158
+ inputs = n.times.collect { false }
159
+ inputs[x] = true
160
+ inputs
161
+ end
162
+
163
+ it '= false' do
164
+ subject.tick
165
+ subject.tock
166
+ expect(subject.outputs[0].get).to eq(false)
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end
58
174
  end
59
175
  end
@@ -55,5 +55,121 @@ describe Circuits::Component::Xor do
55
55
  end
56
56
  end
57
57
  end
58
+ context 'when the number of inputs is even' do
59
+ [2, 4, 8].each do |n|
60
+ context "with #{n} inputs" do
61
+ subject { Circuits::Component::Xor.new inputs: n }
62
+
63
+ before do
64
+ n.times { |x| subject.inputs[x].set inputs[x] }
65
+ end
66
+
67
+ context 'when all inputs are true' do
68
+ let(:inputs) { n.times.collect { true } }
69
+
70
+ it '= false' do
71
+ subject.tick
72
+ subject.tock
73
+ expect(subject.outputs[0].get).to eq(false)
74
+ end
75
+ end
76
+
77
+ context 'when all inputs are false' do
78
+ let(:inputs) { n.times.collect { false } }
79
+
80
+ it '= false' do
81
+ subject.tick
82
+ subject.tock
83
+ expect(subject.outputs[0].get).to eq(false)
84
+ end
85
+ end
86
+
87
+ context 'when any input is false' do
88
+ n.times do |x|
89
+ context "when input #{x} is false" do
90
+ let(:inputs) do
91
+ inputs = n.times.collect { true }
92
+ inputs[x] = false
93
+ inputs
94
+ end
95
+
96
+ it '= true' do
97
+ subject.tick
98
+ subject.tock
99
+ expect(subject.outputs[0].get).to eq(true)
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
107
+ context 'when the number of inputs is odd' do
108
+ [3, 5, 7].each do |n|
109
+ context "with #{n} inputs" do
110
+ subject { Circuits::Component::Xor.new inputs: n }
111
+
112
+ before do
113
+ n.times { |x| subject.inputs[x].set inputs[x] }
114
+ end
115
+
116
+ context 'when all inputs are true' do
117
+ let(:inputs) { n.times.collect { true } }
118
+
119
+ it '= true' do
120
+ subject.tick
121
+ subject.tock
122
+ expect(subject.outputs[0].get).to eq(true)
123
+ end
124
+ end
125
+
126
+ context 'when all inputs are false' do
127
+ let(:inputs) { n.times.collect { false } }
128
+
129
+ it '= false' do
130
+ subject.tick
131
+ subject.tock
132
+ expect(subject.outputs[0].get).to eq(false)
133
+ end
134
+ end
135
+
136
+ context 'when any input is false' do
137
+ n.times do |x|
138
+ context "when input #{x} is false" do
139
+ let(:inputs) do
140
+ inputs = n.times.collect { true }
141
+ inputs[x] = false
142
+ inputs
143
+ end
144
+
145
+ it '= false' do
146
+ subject.tick
147
+ subject.tock
148
+ expect(subject.outputs[0].get).to eq(false)
149
+ end
150
+ end
151
+ end
152
+ end
153
+
154
+ context 'when any input is true' do
155
+ n.times do |x|
156
+ context "when input #{x} is true" do
157
+ let(:inputs) do
158
+ inputs = n.times.collect { false }
159
+ inputs[x] = true
160
+ inputs
161
+ end
162
+
163
+ it '= true' do
164
+ subject.tick
165
+ subject.tock
166
+ expect(subject.outputs[0].get).to eq(true)
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end
58
174
  end
59
175
  end
@@ -8,17 +8,67 @@ class MockComponent
8
8
  def initialize(opts = {})
9
9
  @outputs = opts[:outputs]
10
10
  end
11
+
12
+ def mock_input_count
13
+ input_count
14
+ end
15
+
16
+ def mock_output_count
17
+ output_count
18
+ end
19
+
20
+ def mock_create_inputs(n)
21
+ create_inputs(n)
22
+ end
11
23
  end
12
24
 
13
25
  describe Circuits::Component do
14
- describe '#tock' do
15
- let(:outputs) { [double('output')] }
26
+ let(:outputs) { [double('output')] }
27
+
28
+ subject { MockComponent.new(outputs: outputs) }
29
+
30
+ describe '#input_count' do
31
+ it 'is not implemented' do
32
+ expect { subject.mock_input_count }.to raise_error(NotImplementedError)
33
+ end
34
+ end
35
+
36
+ describe '#output_count' do
37
+ it 'is not implemented' do
38
+ expect { subject.mock_output_count }.to raise_error(NotImplementedError)
39
+ end
40
+ end
16
41
 
17
- subject { MockComponent.new(outputs: outputs) }
42
+ describe '#tick' do
43
+ it 'is not implemented' do
44
+ expect { subject.tick }.to raise_error(NotImplementedError)
45
+ end
46
+ end
18
47
 
48
+ describe '#tock' do
19
49
  it 'tocks the outputs' do
20
50
  expect(outputs[0]).to receive(:tock)
21
51
  subject.tock
22
52
  end
23
53
  end
54
+
55
+ describe '#create_inputs' do
56
+ before :each do
57
+ allow(subject).to receive(:input_count).and_return(2)
58
+ end
59
+
60
+ context 'when the given argument is less than the value of input count' do
61
+ it 'fails with an argument error' do
62
+ expect { subject.mock_create_inputs(0) }.to raise_error(ArgumentError)
63
+ end
64
+ end
65
+
66
+ context 'when given a valid number of inputs' do
67
+ [2, 4, 6].each do |n|
68
+ it "creates #{n} inputs" do
69
+ expect(subject.mock_create_inputs(n).size).to eq(n)
70
+ end
71
+ end
72
+ end
73
+ end
24
74
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: circuits
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henry Muru Paenga
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-23 00:00:00.000000000 Z
11
+ date: 2015-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,48 @@ dependencies:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '0.34'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '0.34'
83
+ - !ruby/object:Gem::Dependency
84
+ name: reek
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '3.5'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '3.5'
97
+ - !ruby/object:Gem::Dependency
98
+ name: yard
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 0.8.7
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 0.8.7
69
111
  description:
70
112
  email:
71
113
  - meringu@gmail.com