saxerator 0.9.4 → 0.9.5

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
  SHA1:
3
- metadata.gz: a0cafde22b9761403aa299dcc6600e6905340929
4
- data.tar.gz: 045107a2d6e516c20b179d868cc1c32d1e01a664
3
+ metadata.gz: 8a9e778a67df70446a761b0c44b299ec71d17767
4
+ data.tar.gz: 4dd1010e6d76ec961dfaaac08b03e5c4e9179658
5
5
  SHA512:
6
- metadata.gz: e700487f042456f67b269e98c872aa4e91a9116f66abb11fe1d28b7569ddefeef14498b74131b05c799ca17a8bf4068704b229798e106a634453ead7052df93c
7
- data.tar.gz: 0f6ba9c8758489f4315027e0878ba0d27f19a0985bb0ad8a24d3a6178f62b72be0c7e88553b86934585732000bee213343d4b4b71a3042f3dad3053493986520
6
+ metadata.gz: f575598f8e4eb2a50a828457107084615cecb12dfc4c1c94bb0b673cf7a6cc0c75771400c38d8b9eb403bc95da1be5f9bfcd7d1ff5be85f171090ef7961a6c30
7
+ data.tar.gz: b33b5a6cd650a36d77ddf69ce33380aad95cc88d9c25d9000a86d1bd88377e4d07f0c7451a592b3b3c8d377c88de2ece5a72dda3c5be4dfdecceb487ee4768b0
@@ -6,7 +6,7 @@ module Saxerator
6
6
  def initialize(config, name, attributes)
7
7
  @config = config
8
8
  @name = config.generate_key_for(name)
9
- @attributes = attributes
9
+ @attributes = normalize_attributes(attributes)
10
10
  @children = []
11
11
  @text = false
12
12
  end
@@ -46,9 +46,9 @@ module Saxerator
46
46
  end
47
47
 
48
48
  def add_to_hash_element( hash, name, element)
49
- name = @config.generate_key_for(name)
49
+ name = generate_key(name)
50
50
  if hash[name]
51
- if !hash[name].is_a?(Array)
51
+ unless hash[name].is_a?(Array)
52
52
  hash[name] = ArrayElement[hash[name]]
53
53
  hash[name].name = name
54
54
  end
@@ -63,6 +63,14 @@ module Saxerator
63
63
  return to_hash if @children.count > 0 || (@attributes.count > 0 && @config.put_attributes_in_hash?)
64
64
  to_empty_element
65
65
  end
66
+
67
+ def normalize_attributes(attributes)
68
+ Hash[attributes.map {|key, value| [generate_key(key), value] }]
69
+ end
70
+
71
+ def generate_key(name)
72
+ @config.generate_key_for(name)
73
+ end
66
74
  end
67
75
  end
68
76
  end
@@ -1,3 +1,3 @@
1
1
  module Saxerator
2
- VERSION = "0.9.4"
2
+ VERSION = "0.9.5"
3
3
  end
@@ -35,5 +35,5 @@ Gem::Specification.new do |s|
35
35
 
36
36
  s.add_runtime_dependency 'nokogiri', '>= 1.4.0'
37
37
 
38
- s.add_development_dependency 'rspec', '>= 2.11.0'
38
+ s.add_development_dependency 'rspec', '~> 3.1'
39
39
  end
@@ -6,87 +6,87 @@ describe "Saxerator (default) hash format" do
6
6
  subject(:entry) { Saxerator.parser(xml).for_tag(:entry).first }
7
7
 
8
8
  # string
9
- specify { entry['title'].should == 'How to eat an airplane' }
9
+ specify { expect(entry['title']).to eq('How to eat an airplane') }
10
10
 
11
11
  # hash and cdata inside name
12
- specify { entry['author'].should == {'name' => 'Soul<utter'} }
12
+ specify { expect(entry['author']).to eq({'name' => 'Soul<utter'}) }
13
13
 
14
14
  # array of hashes
15
- specify { entry['contributor'].should == [{'name' => 'Jane Doe'}, {'name' => 'Leviticus Alabaster'}] }
15
+ specify { expect(entry['contributor']).to eq([{'name' => 'Jane Doe'}, {'name' => 'Leviticus Alabaster'}]) }
16
16
 
17
17
  # attributes on a hash
18
- specify { entry['contributor'][0].attributes['type'].should == 'primary' }
18
+ specify { expect(entry['contributor'][0].attributes['type']).to eq('primary') }
19
19
 
20
20
  # attributes on a string
21
- specify { entry['content'].attributes['type'].should == 'html' }
21
+ specify { expect(entry['content'].attributes['type']).to eq('html') }
22
22
 
23
23
  # name on a hash
24
- specify { entry.name.should == 'entry' }
24
+ specify { expect(entry.name).to eq('entry') }
25
25
 
26
26
  # name on a string
27
- specify { entry['title'].name.should == 'title' }
27
+ specify { expect(entry['title'].name).to eq('title') }
28
28
 
29
29
  describe "#to_s" do
30
30
  it "preserves the element name" do
31
- entry['title'].to_a.name.should == 'title'
31
+ expect(entry['title'].to_a.name).to eq('title')
32
32
  end
33
33
  end
34
34
 
35
35
  describe "#to_h" do
36
36
  it "preserves the element name" do
37
- entry.to_h.name.should == 'entry'
37
+ expect(entry.to_h.name).to eq('entry')
38
38
  end
39
39
  end
40
40
 
41
41
  describe "#to_a" do
42
42
  it "preserves the element name on a parsed hash" do
43
- entry.to_a.name.should == 'entry'
43
+ expect(entry.to_a.name).to eq('entry')
44
44
  end
45
45
 
46
46
  it "converts parsed hashes to nested key/value pairs (just like regular hashes)" do
47
- entry.to_a.first.should == ['id', '1']
47
+ expect(entry.to_a.first).to eq(['id', '1'])
48
48
  end
49
49
 
50
50
  it "preserves the element name on a parsed string" do
51
- entry['title'].to_a.name.should == 'title'
51
+ expect(entry['title'].to_a.name).to eq('title')
52
52
  end
53
53
 
54
54
  it "preserves the element name on an array" do
55
- entry['contributor'].to_a.name.should eq 'contributor'
55
+ expect(entry['contributor'].to_a.name).to eq 'contributor'
56
56
  end
57
57
  end
58
58
 
59
59
  # name on an array
60
- specify { entry['contributor'].name.should == 'contributor' }
60
+ specify { expect(entry['contributor'].name).to eq('contributor') }
61
61
 
62
62
  # character entity decoding
63
- specify { entry['content'].should == "<p>Airplanes are very large — this can present difficulty in digestion.</p>" }
63
+ specify { expect(entry['content']).to eq("<p>Airplanes are very large — this can present difficulty in digestion.</p>") }
64
64
 
65
65
  context "parsing an empty element" do
66
66
  subject(:element) { entry['media:thumbnail'] }
67
67
 
68
68
  it "behaves somewhat like nil" do
69
- element.should be_nil
70
- (!element).should eq true
71
- element.to_s.should eq ''
72
- element.to_h.should eq Hash.new
69
+ expect(element).to be_nil
70
+ expect(!element).to eq true
71
+ expect(element.to_s).to eq ''
72
+ expect(element.to_h).to eq Hash.new
73
73
  end
74
74
 
75
- it { should be_empty }
75
+ it { is_expected.to be_empty }
76
76
 
77
77
  it "has attributes" do
78
- element.attributes.keys.should eq ['url']
78
+ expect(element.attributes.keys).to eq ['url']
79
79
  end
80
80
 
81
81
  [:to_s, :to_h, :to_a].each do |conversion|
82
82
  it "preserves the element name through ##{conversion}" do
83
- element.send(conversion).name.should eq 'media:thumbnail'
83
+ expect(element.send(conversion).name).to eq 'media:thumbnail'
84
84
  end
85
85
  end
86
86
 
87
87
  [:to_s, :to_h].each do |conversion|
88
88
  it "preserves attributes through ##{conversion}" do
89
- element.send(conversion).attributes.keys.should eq ['url']
89
+ expect(element.send(conversion).attributes.keys).to eq ['url']
90
90
  end
91
91
  end
92
92
  end
@@ -9,7 +9,7 @@ describe "Saxerator xml format" do
9
9
  end.for_tag(:entry).first
10
10
  end
11
11
 
12
- it { should be_a(Nokogiri::XML::Node) }
12
+ it { is_expected.to be_a(Nokogiri::XML::Node) }
13
13
  it "looks like the original document" do
14
14
  expected_xml = <<-eos
15
15
  <?xml version="1.0"?>
@@ -32,6 +32,6 @@ describe "Saxerator xml format" do
32
32
  </contributor>
33
33
  </entry>
34
34
  eos
35
- entry.to_xml.should == expected_xml
35
+ expect(entry.to_xml).to eq(expected_xml)
36
36
  end
37
37
  end
@@ -16,7 +16,7 @@ describe "Saxerator::FullDocument#all" do
16
16
  end
17
17
 
18
18
  it "should allow you to parse an entire document" do
19
- parser.all.should == {'blurb' => ['one', 'two', 'three'], 'notablurb' => 'four', 'empty' => {} }
19
+ expect(parser.all).to eq 'blurb' => ['one', 'two', 'three'], 'notablurb' => 'four', 'empty' => {}
20
20
  end
21
21
 
22
22
  context "with_put_attributes_in_hash" do
@@ -25,7 +25,7 @@ describe "Saxerator::FullDocument#all" do
25
25
  end
26
26
 
27
27
  it "should allow you to parse an entire document" do
28
- parser.all.should == {'blurb' => ['one', 'two', 'three'], 'notablurb' => 'four', 'empty' => { "with" => "attribute"}}
28
+ expect(parser.all).to eq 'blurb' => ['one', 'two', 'three'], 'notablurb' => 'four', 'empty' => { "with" => "attribute" }
29
29
  end
30
30
  end
31
31
  end
@@ -19,16 +19,16 @@ describe "Saxerator::DSL#at_depth" do
19
19
  end
20
20
 
21
21
  it "should parse elements at the requested tag depth" do
22
- parser.at_depth(2).inject([], :<<).should == [
22
+ expect(parser.at_depth(2).inject([], :<<)).to eq([
23
23
  'How to eat an airplane', 'Leviticus Alabaster',
24
24
  'To wallop a horse in the face', 'Jeanne Clarewood'
25
- ]
25
+ ])
26
26
  end
27
27
 
28
28
  it "should work in combination with #for_tag" do
29
- parser.at_depth(2).for_tag(:name).inject([], :<<).should == [
29
+ expect(parser.at_depth(2).for_tag(:name).inject([], :<<)).to eq([
30
30
  'How to eat an airplane',
31
31
  'To wallop a horse in the face'
32
- ]
32
+ ])
33
33
  end
34
34
  end
@@ -21,16 +21,16 @@ describe "Saxerator::DSL#child_of" do
21
21
  end
22
22
 
23
23
  it "should only parse children of the specified tag" do
24
- parser.child_of(:grandchildren).inject([], :<<).should == [
24
+ expect(parser.child_of(:grandchildren).inject([], :<<)).to eq([
25
25
  'Mildred Marston'
26
- ]
26
+ ])
27
27
  end
28
28
 
29
29
  it "should work in combination with #for_tag" do
30
- parser.for_tag(:name).child_of(:children).inject([], :<<).should == [
30
+ expect(parser.for_tag(:name).child_of(:children).inject([], :<<)).to eq([
31
31
  'Rudy McMannis',
32
32
  'Tom McMannis',
33
33
  'Anne Welsh'
34
- ]
34
+ ])
35
35
  end
36
36
  end
@@ -15,6 +15,6 @@ describe "Saxerator::DSL#for_tag" do
15
15
  end
16
16
 
17
17
  it "should only select the specified tag" do
18
- parser.for_tag(:blurb).inject([], :<<).should == ['one', 'two', 'three']
18
+ expect(parser.for_tag(:blurb).inject([], :<<)).to eq(['one', 'two', 'three'])
19
19
  end
20
20
  end
@@ -14,10 +14,10 @@ describe "Saxerator::DSL#for_tags" do
14
14
  end
15
15
 
16
16
  it "should only select the specified tags" do
17
- parser.for_tags(%w(blurb1 blurb3)).inject([], :<<).should == ['one', 'three']
17
+ expect(parser.for_tags(%w(blurb1 blurb3)).inject([], :<<)).to eq(['one', 'three'])
18
18
  end
19
19
 
20
20
  it "raises an ArgumentError for a non-Array argument" do
21
- lambda { parser.for_tags("asdf") }.should raise_error ArgumentError
21
+ expect { parser.for_tags("asdf") }.to raise_error ArgumentError
22
22
  end
23
23
  end
@@ -16,13 +16,13 @@ describe "Saxerator::DSL#with_attribute" do
16
16
  end
17
17
 
18
18
  it "should match tags with the specified attributes" do
19
- subject.with_attribute(:type).inject([], :<<).should == [
19
+ expect(subject.with_attribute(:type).inject([], :<<)).to eq([
20
20
  'Leviticus Alabaster',
21
21
  'Eunice Diesel'
22
- ]
22
+ ])
23
23
  end
24
24
 
25
25
  it "should match tags with the specified attributes" do
26
- subject.with_attribute(:type, :primary).inject([], :<<).should == ['Leviticus Alabaster']
26
+ expect(subject.with_attribute(:type, :primary).inject([], :<<)).to eq(['Leviticus Alabaster'])
27
27
  end
28
28
  end
@@ -17,16 +17,16 @@ describe "Saxerator::DSL#with_attributes" do
17
17
  end
18
18
 
19
19
  it "matches tags with the exact specified attributes" do
20
- parser.with_attributes(:type => :primary, :ridiculous => 'true').inject([], :<<).should == [
20
+ expect(parser.with_attributes(:type => :primary, :ridiculous => 'true').inject([], :<<)).to eq([
21
21
  'Leviticus Alabaster'
22
- ]
22
+ ])
23
23
  end
24
24
 
25
25
  it "matches tags which have the specified attributes" do
26
- parser.with_attributes(%w(type ridiculous)).inject([], :<<).should == ['Leviticus Alabaster', 'Eunice Diesel']
26
+ expect(parser.with_attributes(%w(type ridiculous)).inject([], :<<)).to eq(['Leviticus Alabaster', 'Eunice Diesel'])
27
27
  end
28
28
 
29
29
  it "raises ArgumentError if you pass something other than a Hash or Array" do
30
- lambda { parser.with_attributes('asdf') }.should raise_error ArgumentError
30
+ expect { parser.with_attributes('asdf') }.to raise_error ArgumentError
31
31
  end
32
32
  end
@@ -16,13 +16,13 @@ describe "Saxerator::DSL#within" do
16
16
  end
17
17
 
18
18
  it "should only parse elements nested within the specified tag" do
19
- parser.within(:article).inject([], :<<).should == [
19
+ expect(parser.within(:article).inject([], :<<)).to eq([
20
20
  'Is our children learning?',
21
21
  'Hazel Nutt'
22
- ]
22
+ ])
23
23
  end
24
24
 
25
25
  it "should work in combination with #for_tag" do
26
- parser.for_tag(:name).within(:article).inject([], :<<).should == ['Is our children learning?']
26
+ expect(parser.for_tag(:name).within(:article).inject([], :<<)).to eq(['Is our children learning?'])
27
27
  end
28
28
  end
@@ -10,14 +10,14 @@ describe Saxerator do
10
10
  let(:xml) { fixture_file('flat_blurbs.xml') }
11
11
 
12
12
  it "should be able to parse it" do
13
- parser.all.should == {'blurb' => ['one', 'two', 'three']}
13
+ expect(parser.all).to eq({'blurb' => ['one', 'two', 'three']})
14
14
  end
15
15
 
16
16
  it "should allow multiple operations on the same parser" do
17
17
  # This exposes a bug where if a File is not reset only the first
18
18
  # Enumerable method works as expected
19
- parser.for_tag(:blurb).first.should == 'one'
20
- parser.for_tag(:blurb).first.should == 'one'
19
+ expect(parser.for_tag(:blurb).first).to eq('one')
20
+ expect(parser.for_tag(:blurb).first).to eq('one')
21
21
  end
22
22
  end
23
23
 
@@ -32,13 +32,13 @@ describe Saxerator do
32
32
  end
33
33
 
34
34
  it "should be able to parse it" do
35
- parser.all.should == { 'name' => 'Illiterates that can read', 'author' => 'Eunice Diesel' }
35
+ expect(parser.all).to eq({ 'name' => 'Illiterates that can read', 'author' => 'Eunice Diesel' })
36
36
  end
37
37
  end
38
38
  end
39
39
 
40
40
  context "configuration" do
41
- let(:xml) { "<foo><bar>baz</bar></foo>" }
41
+ let(:xml) { '<foo><bar foo="bar">baz</bar></foo>' }
42
42
 
43
43
  context "output type" do
44
44
  subject(:parser) do
@@ -47,7 +47,13 @@ describe Saxerator do
47
47
 
48
48
  context "with config.output_type = :hash" do
49
49
  let(:output_type) { :hash }
50
- specify { parser.all.should == {'bar' => 'baz'} }
50
+ specify { expect(parser.all).to eq('bar' => 'baz') }
51
+ end
52
+
53
+ context "with config.output_type = :xml" do
54
+ let(:output_type) { :xml }
55
+ specify { expect(parser.all).to be_a Nokogiri::XML::Document }
56
+ specify { expect(parser.all.to_s).to include '<bar foo="bar">' }
51
57
  end
52
58
 
53
59
  context "with an invalid config.output_type" do
@@ -58,11 +64,20 @@ describe Saxerator do
58
64
 
59
65
  context "symbolize keys" do
60
66
  subject(:parser) do
61
- Saxerator.parser(xml) { |config| config.symbolize_keys! }
67
+ Saxerator.parser(xml) do |config|
68
+ config.symbolize_keys!
69
+ config.output_type = :hash
70
+ end
62
71
  end
63
72
 
64
- specify { parser.all.should == { :bar => 'baz' } }
65
- specify { parser.all.name.should == :foo }
73
+ specify { expect(parser.all).to eq(:bar => 'baz') }
74
+ specify { expect(parser.all.name).to eq(:foo) }
75
+
76
+ it 'will symbolize attributes' do
77
+ parser.for_tag('bar').each do |tag|
78
+ expect(tag.attributes).to include(:foo => 'bar')
79
+ end
80
+ end
66
81
  end
67
82
 
68
83
  context "with ignore namespaces" do
@@ -75,8 +90,8 @@ describe Saxerator do
75
90
  }
76
91
 
77
92
  subject(:parser) do
78
- Saxerator.parser(xml) { |config|
79
- config.ignore_namespaces!
93
+ Saxerator.parser(xml) { |config|
94
+ config.ignore_namespaces!
80
95
  }
81
96
  end
82
97
 
@@ -85,7 +100,7 @@ describe Saxerator do
85
100
  parser.for_tag("bar").each do |tag|
86
101
  bar_count += 1
87
102
  end
88
- bar_count.should == 2
103
+ expect(bar_count).to eq(2)
89
104
  }
90
105
  end
91
106
 
@@ -95,8 +110,8 @@ describe Saxerator do
95
110
  Saxerator.parser(xml) { |config| config.strip_namespaces! }
96
111
  end
97
112
 
98
- specify { parser.all.should == {'bar' => 'baz'} }
99
- specify { parser.all.name.should == 'foo' }
113
+ specify { expect(parser.all).to eq({'bar' => 'baz'}) }
114
+ specify { expect(parser.all.name).to eq('foo') }
100
115
 
101
116
  context "combined with symbolize keys" do
102
117
  subject(:parser) do
@@ -106,7 +121,7 @@ describe Saxerator do
106
121
  end
107
122
  end
108
123
 
109
- specify { parser.all.should == {:bar => 'baz'} }
124
+ specify { expect(parser.all).to eq({:bar => 'baz'}) }
110
125
  end
111
126
 
112
127
  context "for specific namespaces" do
@@ -122,8 +137,8 @@ describe Saxerator do
122
137
  Saxerator.parser(xml) { |config| config.strip_namespaces! :ns1, :ns3 }
123
138
  end
124
139
 
125
- specify { parser.all.should == {'ns2:bar' => 'baz', 'bar' => 'biz'} }
126
- specify { parser.all.name.should == 'foo' }
140
+ specify { expect(parser.all).to eq({'ns2:bar' => 'baz', 'bar' => 'biz'}) }
141
+ specify { expect(parser.all.name).to eq('foo') }
127
142
  end
128
143
  end
129
144
 
@@ -139,24 +154,33 @@ describe Saxerator do
139
154
  end
140
155
 
141
156
  it "should be able to parse it" do
142
- parser.all.should == { 'bar' => 'baz', 'foo' => 'bar' }
157
+ expect(parser.all).to eq({ 'bar' => 'baz', 'foo' => 'bar' })
143
158
  end
144
159
 
145
- end
146
-
147
- context "configuration with put_attributes_in_hash! and config.output_type = :xml" do
148
- let(:xml) { '<foo foo="bar"><bar>baz</bar></foo>' }
160
+ context 'with configured output_type :xml' do
161
+ subject(:parser) do
162
+ Saxerator.parser(xml) do |config|
163
+ config.put_attributes_in_hash!
164
+ config.output_type = :xml
165
+ end
166
+ end
149
167
 
150
- subject(:parser) do
151
- Saxerator.parser(xml) do |config|
152
- config.put_attributes_in_hash!
153
- config.output_type = :xml
168
+ context "should raise error with " do
169
+ specify { expect { parser }.to raise_error(ArgumentError) }
154
170
  end
155
171
  end
156
172
 
157
- context "should raise error with " do
158
- specify { expect { parser }.to raise_error(ArgumentError) }
173
+ context 'with symbolize_keys!' do
174
+ subject(:parser) do
175
+ Saxerator.parser(xml) do |config|
176
+ config.put_attributes_in_hash!
177
+ config.symbolize_keys!
178
+ end
179
+ end
180
+
181
+ it 'will symbolize attribute hash keys' do
182
+ expect(parser.all).to include(:bar => 'baz', :foo => 'bar')
183
+ end
159
184
  end
160
185
  end
161
-
162
186
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: saxerator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.9.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bradley Schaefer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-13 00:00:00.000000000 Z
11
+ date: 2014-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.4.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.4.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 2.11.0
33
+ version: '3.1'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 2.11.0
40
+ version: '3.1'
41
41
  description: |2
42
42
  Saxerator is a streaming xml-to-hash parser designed for working with very large xml files by
43
43
  giving you Enumerable access to manageable chunks of the document.
@@ -47,8 +47,8 @@ executables: []
47
47
  extensions: []
48
48
  extra_rdoc_files: []
49
49
  files:
50
- - .gitignore
51
- - .travis.yml
50
+ - ".gitignore"
51
+ - ".travis.yml"
52
52
  - Gemfile
53
53
  - LICENSE
54
54
  - README.md
@@ -102,12 +102,12 @@ require_paths:
102
102
  - lib
103
103
  required_ruby_version: !ruby/object:Gem::Requirement
104
104
  requirements:
105
- - - '>='
105
+ - - ">="
106
106
  - !ruby/object:Gem::Version
107
107
  version: '0'
108
108
  required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  requirements:
110
- - - '>='
110
+ - - ">="
111
111
  - !ruby/object:Gem::Version
112
112
  version: '0'
113
113
  requirements: []