terminitor 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/test/dsl_test.rb CHANGED
@@ -11,9 +11,23 @@ context "Dsl" do
11
11
  setup { @yaml.to_hash }
12
12
  asserts_topic.equivalent_to :setup=>["echo \"setup\""],
13
13
  :windows=>{
14
- "window1"=>{:tabs=>{"named tab"=>{:commands=>["echo 'named tab'", "ls"], :options => {:settings=>"Grass"}},
15
- "tab0"=>{:commands=>["echo 'first tab'", "echo 'of window'", "echo 'than now'"]}}, :options => {:size=>[70,30]}},
16
- "default"=>{:tabs=>{"tab0"=>{:commands=>["echo 'default'", "echo 'default tab'", "ok", "for real"]}}}}
14
+ "window1"=>{:tabs=>{"tab2"=>{:commands=>["echo 'named tab'", "ls"],
15
+ :options => {:name => "named tab", :settings=>"Grass"}},
16
+ "tab1"=>{:commands=>["echo 'first tab'", "echo 'of window'", "echo 'than now'"]},
17
+ "tab3"=>{:commands=>["top"],
18
+ :options =>{:name => "a tab", :settings => "Pro"}},
19
+ "default"=>{:commands=>['whoami']}
20
+ },
21
+ :before => ['cd /path'],
22
+ :options => {:size=>[70,30]}},
23
+ "window2"=>{:tabs=>{"tab1"=>{:commands=>["uptime"]},
24
+ "default"=>{:commands=>[]}
25
+ },
26
+ :before => ['whoami'],
27
+ :options => {:name => 'server'}},
28
+ "default"=>{:tabs=>{"tab1"=>{:commands=>["echo 'default'", "echo 'default tab'", "ok", "for real"]},
29
+ "default"=>{:commands=>[]}
30
+ }}}
17
31
  end
18
32
 
19
33
  end
@@ -6,12 +6,24 @@ setup 'echo "setup"'
6
6
  tab "echo 'default'", "echo 'default tab'", "ok", "for real"
7
7
 
8
8
  window :size => [70,30] do
9
+
10
+ before 'cd /path'
11
+
12
+ run "whoami"
9
13
  tab "echo 'first tab'", "echo 'of window'", "echo 'than now'"
10
14
 
11
- tab "named tab", :settings => "Grass" do
15
+ tab :name => "named tab", :settings => "Grass" do
12
16
  run "echo 'named tab'"
13
17
  run "ls"
14
18
  end
19
+
20
+ tab :name => "a tab", :settings => "Pro" do
21
+ run "top"
22
+ end
15
23
  end
16
24
 
25
+ window :name => 'server' do
26
+ before { run 'whoami' }
27
+ tab "uptime"
28
+ end
17
29
 
data/test/runner_test.rb CHANGED
@@ -18,221 +18,209 @@ class TestItem
18
18
  end
19
19
 
20
20
  context "Runner" do
21
- setup { @yaml = File.read(File.expand_path('../fixtures/foo.yml', __FILE__)) }
22
- setup { @template = File.read(File.expand_path('../../lib/templates/example.yml.tt', __FILE__)) }
23
- setup { @test_runner = TestRunner.new }
24
- setup { FakeFS.activate! }
21
+ setup do
22
+ @yaml = File.read(File.expand_path('../fixtures/foo.yml', __FILE__))
23
+ @template = File.read(File.expand_path('../../lib/templates/example.yml.tt', __FILE__))
24
+ @test_runner = TestRunner.new
25
+ FakeFS.activate!
26
+ end
25
27
  teardown { FakeFS.deactivate! }
26
28
 
27
29
 
28
- context "find_core" do
29
- context "for Darwin" do
30
- setup { @test_runner.find_core('darwin') }
31
- asserts_topic.equals Terminitor::MacCore
32
- end
30
+ context "#find_core" do
31
+ should("have Darwin") { @test_runner.find_core('darwin') }.equals Terminitor::MacCore
33
32
 
34
33
  if platform?('linux') # TODO Gotta be a better way.
35
- context "for KDE" do
36
- setup { @test_runner.find_core('linux') }
37
- asserts_topic.equals Terminitor::KonsoleCore
38
- end
34
+ should("have KDE") { @test_runner.find_core('linux') }.equals Terminitor::KonsoleCore
39
35
  end
40
36
  end
41
37
 
42
- context "capture_core" do
43
- context "for Darwin" do
44
- setup { @test_runner.capture_core('darwin') }
45
- asserts_topic.equals Terminitor::MacCapture
46
- end
38
+ context "#capture_core" do
39
+ should("have Darwin") { @test_runner.capture_core('darwin') }.equals Terminitor::MacCapture
47
40
  end
48
41
 
49
- context "open_in_editor" do
50
- context "using $EDITOR" do
51
- setup { ENV['EDITOR'] = 'mate' }
52
- setup { mock(@test_runner).system("mate /tmp/sample_project/foo.yml").returns {true}.once }
53
- asserts("calls") { capture(:stdout) { @test_runner.open_in_editor("/tmp/sample_project/foo.yml") } }
54
- end
42
+ context "#open_in_editor" do
55
43
 
56
- context "using $TERM_EDITOR" do
57
- setup { ENV['TERM_EDITOR'] = 'vim' }
58
- setup { ENV['EDITOR'] = 'jack' }
59
- setup { mock(@test_runner).system("vim /tmp/sample_project/foo.yml").returns {true}.once }
60
- asserts("calls") { capture(:stdout) { @test_runner.open_in_editor("/tmp/sample_project/foo.yml")} }
44
+ should "use $EDITOR" do
45
+ ENV['EDITOR'] = 'mate'
46
+ mock(@test_runner).system("mate /tmp/sample_project/foo.yml").returns {true}.once
47
+ capture(:stdout) { @test_runner.open_in_editor("/tmp/sample_project/foo.yml") }
61
48
  end
62
49
 
63
- context "without any editor" do
64
- setup { ENV['TERM_EDITOR'] = nil }
65
- setup { ENV['EDITOR'] = nil }
66
- setup { mock(@test_runner).system("open /tmp/sample_project/foo.yml").returns {true}.once }
67
- setup { capture(:stdout) { @test_runner.open_in_editor("/tmp/sample_project/foo.yml")} }
68
- asserts_topic.matches %r{please set}
50
+ should "use $TERM_EDITOR" do
51
+ ENV['TERM_EDITOR'] = 'vim'
52
+ ENV['EDITOR'] = 'jack'
53
+ mock(@test_runner).system("vim /tmp/sample_project/foo.yml").returns {true}.once
54
+ capture(:stdout) { @test_runner.open_in_editor("/tmp/sample_project/foo.yml") }
69
55
  end
70
56
 
71
- context "accepts an editor" do
72
- setup { ENV['TERM_EDITOR'] = 'vim' }
73
- setup { ENV['EDITOR'] = 'jack' }
74
- setup { mock(@test_runner).system("nano /tmp/sample_project/foo.yml").returns {true}.once }
75
- asserts("calls") { capture(:stdout) { @test_runner.open_in_editor("/tmp/sample_project/foo.yml","nano")} }
57
+ should "return a message without any editor that" do
58
+ ENV['TERM_EDITOR'] = nil
59
+ ENV['EDITOR'] = nil
60
+ mock(@test_runner).system("open /tmp/sample_project/foo.yml").returns {true}.once
61
+ capture(:stdout) { @test_runner.open_in_editor("/tmp/sample_project/foo.yml")}
62
+ end.matches %r{please set}
63
+
64
+ should "accept an editor" do
65
+ ENV['TERM_EDITOR'] = 'vim'
66
+ ENV['EDITOR'] = 'jack'
67
+ mock(@test_runner).system("nano /tmp/sample_project/foo.yml").returns {true}.once
68
+ capture(:stdout) { @test_runner.open_in_editor("/tmp/sample_project/foo.yml","nano") }
76
69
  end
77
70
 
78
71
  end
79
72
 
80
- context "resolve_path" do
73
+ context "#resolve_path" do
81
74
  setup { FileUtils.mkdir_p(File.join(ENV['HOME'],'.terminitor')) }
82
75
 
83
- context "with yaml" do
84
- setup { FileUtils.touch(File.join(ENV['HOME'],'.terminitor','test.yml')) }
85
- setup { @test_runner.resolve_path('test') }
86
- asserts_topic.equals File.join(ENV['HOME'],'.terminitor','test.yml')
87
- end
76
+ should "return yaml" do
77
+ FileUtils.touch(File.join(ENV['HOME'],'.terminitor','test.yml'))
78
+ @test_runner.resolve_path('test')
79
+ end.equals File.join(ENV['HOME'],'.terminitor','test.yml')
88
80
 
89
- context "with term" do
90
- setup { FileUtils.touch(File.join(ENV['HOME'],'.terminitor','test.term')) }
91
- setup { FileUtils.rm(File.join(ENV['HOME'],'.terminitor','test.yml')) }
92
- setup { @test_runner.resolve_path('test') }
93
- asserts_topic.equals File.join(ENV['HOME'],'.terminitor','test.term')
94
- end
81
+ should "return term" do
82
+ FileUtils.touch(File.join(ENV['HOME'],'.terminitor','test.term'))
83
+ FileUtils.rm(File.join(ENV['HOME'],'.terminitor','test.yml'))
84
+ @test_runner.resolve_path('test')
85
+ end.equals File.join(ENV['HOME'],'.terminitor','test.term')
95
86
 
96
- context "with Termfile" do
97
- setup { FileUtils.rm(File.join(ENV['HOME'],'.terminitor','test.yml')) }
98
- setup { FileUtils.rm(File.join(ENV['HOME'],'.terminitor','test.term')) }
99
- setup { FileUtils.touch("Termfile") }
100
- setup { mock(@test_runner).options { {:root => '.'} } }
101
- setup { @test_runner.resolve_path("") }
102
- asserts_topic.equals "./Termfile"
103
- end
104
87
 
105
- context "with nothing" do
106
- setup { FileUtils.rm(File.join(ENV['HOME'],'.terminitor','test.yml')) }
107
- setup { FileUtils.rm(File.join(ENV['HOME'],'.terminitor','test.term')) }
108
- setup { FileUtils.rm("Termfile") }
88
+ should "return Termfile" do
89
+ FileUtils.rm(File.join(ENV['HOME'],'.terminitor','test.yml'))
90
+ FileUtils.rm(File.join(ENV['HOME'],'.terminitor','test.term'))
91
+ FileUtils.touch("Termfile")
92
+ mock(@test_runner).options { {:root => '.'} }
93
+ @test_runner.resolve_path("")
94
+ end.equals "./Termfile"
109
95
 
110
- context "with a project" do
111
- setup { @test_runner.resolve_path('hey') }
112
- asserts_topic.nil
113
- end
114
96
 
115
- context "without a project" do
116
- setup { mock(@test_runner).options { {:root => '.'} } }
117
- setup { @test_runner.resolve_path("") }
118
- asserts_topic.nil
97
+ context "with nothing" do
98
+ setup do
99
+ FileUtils.rm(File.join(ENV['HOME'],'.terminitor','test.yml'))
100
+ FileUtils.rm(File.join(ENV['HOME'],'.terminitor','test.term'))
101
+ FileUtils.rm("Termfile")
119
102
  end
120
- end
103
+
104
+ should("have path with a project") { @test_runner.resolve_path('hey') }.nil
121
105
 
122
- end
106
+ should("have path without a project") do
107
+ mock(@test_runner).options.returns(:root => '.')
108
+ @test_runner.resolve_path ""
109
+ end.nil
123
110
 
124
- context "config_path" do
125
- context "for yaml" do
126
- setup { @test_runner.config_path('test',:yml) }
127
- asserts_topic.equals File.join(ENV['HOME'],'.terminitor','test.yml')
128
111
  end
129
112
 
130
- context "for term" do
131
- setup { @test_runner.config_path('test', :term) }
132
- asserts_topic.equals File.join(ENV['HOME'],'.terminitor', 'test.term')
133
- end
113
+ end
134
114
 
135
- context "for Termfile" do
136
- setup { mock(@test_runner).options { {:root => '/tmp'} } }
137
- setup { @test_runner.config_path("") }
138
- asserts_topic.equals "/tmp/Termfile"
139
- end
115
+ context "config_path" do
116
+ should("have yaml") { @test_runner.config_path('test',:yml) }.equals File.join(ENV['HOME'],'.terminitor','test.yml')
117
+ should("have term") { @test_runner.config_path('test', :term) }.equals File.join(ENV['HOME'],'.terminitor', 'test.term')
118
+
119
+ should "have Termfile" do
120
+ mock(@test_runner).options { {:root => '/tmp'} }
121
+ @test_runner.config_path ""
122
+ end.equals '/tmp/Termfile'
140
123
 
141
124
  end
142
125
 
143
- context "grab_comment_for_file" do
144
- setup { File.open('foo.yml','w') { |f| f.puts @yaml } }
145
- setup { @test_runner.grab_comment_for_file('foo.yml') }
146
- asserts_topic.matches %r{- Foo.yml}
147
- end
126
+ asserts "#grab_comment_for_file executes" do
127
+ File.open('foo.yml','w') { |f| f.puts @yaml }
128
+ @test_runner.grab_comment_for_file('foo.yml')
129
+ end.matches %r{- Foo.yml}
148
130
 
149
- context "return_error_message" do
150
- context "with project" do
151
- setup { mock(@test_runner).say(%r{'hi' doesn't exist}) { true } }
152
- asserts("that it says") { @test_runner.return_error_message('hi') }
131
+
132
+ context "#return_error_message" do
133
+
134
+ should "return message with project" do
135
+ mock(@test_runner).say(%r{'hi' doesn't exist}) { true }
136
+ @test_runner.return_error_message('hi')
153
137
  end
154
- context "without project" do
155
- setup { mock(@test_runner).say(%r{Termfile}) { true } }
156
- asserts("that is says") { @test_runner.return_error_message('') }
138
+
139
+ should "return message without project" do
140
+ mock(@test_runner).say(%r{Termfile}) { true }
141
+ @test_runner.return_error_message('')
157
142
  end
143
+
158
144
  end
159
145
 
160
- context "execute_core" do
146
+ context "#execute_core" do
161
147
 
162
- context "with no found path" do
163
- setup { mock(@test_runner).resolve_path('project') { nil } }
164
- setup { mock(@test_runner).return_error_message('project') { true } }
165
- asserts("shows error message") { @test_runner.execute_core(:process!,'project') }
148
+ should "have error message with no path" do
149
+ mock(@test_runner).resolve_path('project') { nil }
150
+ mock(@test_runner).return_error_message('project') { true }
151
+ @test_runner.execute_core(:process!,'project')
166
152
  end
167
153
 
168
- context "with no found core" do
169
- setup { mock(@test_runner).resolve_path('project') { true } }
170
- setup { mock(@test_runner).find_core(anything) { nil } }
171
- setup { mock(@test_runner).say(/No suitable/) { true } }
172
- asserts("shows message") { @test_runner.execute_core(:process!,'project') }
154
+ should "have error message with no core" do
155
+ mock(@test_runner).resolve_path('project') { true }
156
+ mock(@test_runner).find_core(anything) { nil }
157
+ mock(@test_runner).say(/No suitable/) { true }
158
+ @test_runner.execute_core(:process!,'project')
173
159
  end
174
160
 
175
161
  context "with found core" do
176
- context "#process!" do
177
- setup { mock(@test_runner).resolve_path('project') { '/path/to' } }
178
- setup do
179
- any_instance_of(Terminitor::AbstractCore) do |core|
180
- stub(core).load_termfile('/path/to') { true }
181
- stub(core).process! { true }
182
- end
183
- mock(@test_runner).find_core(anything) { Terminitor::AbstractCore }
162
+
163
+ should "call #process!" do
164
+ mock(@test_runner).resolve_path('project') { '/path/to' }
165
+ any_instance_of(Terminitor::AbstractCore) do |core|
166
+ stub(core).load_termfile('/path/to') { true }
167
+ stub(core).process! { true }
184
168
  end
185
- asserts("calls process!") { @test_runner.execute_core(:process!, 'project') }
169
+ mock(@test_runner).find_core(anything) { Terminitor::AbstractCore }
170
+ @test_runner.execute_core(:process!, 'project')
186
171
  end
187
172
 
188
- context "#setup!" do
189
- setup { mock(@test_runner).resolve_path('project') { '/path/to' } }
190
- setup do
191
- any_instance_of(Terminitor::AbstractCore) do |core|
192
- stub(core).load_termfile('/path/to') { true }
193
- stub(core).setup! { true }
194
- end
195
- mock(@test_runner).find_core(anything) { Terminitor::AbstractCore }
173
+ should "call #setup!" do
174
+ mock(@test_runner).resolve_path('project') { '/path/to' }
175
+ any_instance_of(Terminitor::AbstractCore) do |core|
176
+ stub(core).load_termfile('/path/to') { true }
177
+ stub(core).setup! { true }
196
178
  end
197
- asserts("calls process!") { @test_runner.execute_core(:setup!, 'project') }
179
+ mock(@test_runner).find_core(anything) { Terminitor::AbstractCore }
180
+ @test_runner.execute_core(:setup!, 'project')
198
181
  end
182
+
199
183
  end
200
184
  end
201
185
 
202
- context "github_clone" do
186
+ context "#github_clone" do
187
+
203
188
  context "with github" do
204
189
  setup { stub(@test_runner).__double_definition_create__.call(:`,'which github') { "github" } }
205
- context "with read/write priv" do
206
- setup { mock(@test_runner).system("github clone achiu terminitor --ssh") { true } }
207
- asserts("invokes ssh") { @test_runner.github_clone('achiu','terminitor') }
190
+
191
+ should "invoke ssh with read/write priv" do
192
+ mock(@test_runner).system("github clone achiu terminitor --ssh") { true }
193
+ @test_runner.github_clone('achiu','terminitor')
208
194
  end
209
195
 
210
- context "with read only" do
211
- setup { mock(@test_runner).system("github clone achiu terminitor --ssh") { false } }
212
- setup { mock(@test_runner).system("github clone achiu terminitor") { true } }
213
- asserts("invokes git://") { @test_runner.github_clone('achiu', 'terminitor') }
196
+ should "invoke git:// with read only" do
197
+ mock(@test_runner).system("github clone achiu terminitor --ssh") { false }
198
+ mock(@test_runner).system("github clone achiu terminitor") { true }
199
+ @test_runner.github_clone('achiu', 'terminitor')
214
200
  end
201
+
215
202
  end
203
+
216
204
  end
217
205
 
218
206
  context "github_repo" do
219
- context "with setup" do
220
- setup { mock(@test_runner).github_clone('achiu','terminitor') { true } }
221
- setup { mock(FileUtils).cd(File.join(Dir.pwd,'terminitor')) { true } }
222
- setup { mock(@test_runner).invoke(:setup, []) { true } }
223
- asserts("invokes setup") { @test_runner.github_repo('achiu','terminitor', :setup => true) }
224
- end
225
-
226
- context "without setup" do
227
- setup { mock(@test_runner).github_clone('achiu','terminitor') { true } }
228
- setup { mock(FileUtils).cd(File.join(Dir.pwd,'terminitor')) { true } }
229
- asserts("invokes setup") { @test_runner.github_repo('achiu','terminitor') }.nil
230
- end
231
-
232
- context "failed on repo" do
233
- setup { mock(@test_runner).github_clone('achiu','terminitor') { false } }
234
- setup { mock(@test_runner).say("could not fetch repo!") { true } }
235
- asserts("invokes say") { @test_runner.github_repo('achiu', 'terminitor') }
207
+ should "invoke setup" do
208
+ mock(@test_runner).github_clone('achiu','terminitor') { true }
209
+ mock(FileUtils).cd(File.join(Dir.pwd,'terminitor')) { true }
210
+ mock(@test_runner).invoke(:setup, []) { true }
211
+ @test_runner.github_repo('achiu','terminitor', :setup => true)
212
+ end
213
+
214
+ should "invoke without setup" do
215
+ mock(@test_runner).github_clone('achiu','terminitor') { true }
216
+ mock(FileUtils).cd(File.join(Dir.pwd,'terminitor')) { true }
217
+ @test_runner.github_repo('achiu','terminitor')
218
+ end.nil
219
+
220
+ should "return a message on a failed repo" do
221
+ mock(@test_runner).github_clone('achiu','terminitor') { false }
222
+ mock(@test_runner).say("could not fetch repo!") { true }
223
+ @test_runner.github_repo('achiu', 'terminitor')
236
224
  end
237
225
 
238
226
  end
data/test/teststrap.rb CHANGED
@@ -16,7 +16,7 @@ def platform?(platform)
16
16
  RUBY_PLATFORM.downcase.include?(platform)
17
17
  end
18
18
 
19
- class Object
19
+ module Kernel
20
20
  def capture(stream)
21
21
  begin
22
22
  stream = stream.to_s
@@ -28,4 +28,22 @@ class Object
28
28
  end
29
29
  result
30
30
  end
31
- end
31
+ end
32
+
33
+ # This is to silence the 'task' warning for the mocks.
34
+ class Thor
35
+ class << self
36
+ def create_task(meth) #:nodoc:
37
+ if @usage && @desc
38
+ base_class = @hide ? Thor::HiddenTask : Thor::Task
39
+ tasks[meth] = base_class.new(meth, @desc, @long_desc, @usage, method_options)
40
+ @usage, @desc, @long_desc, @method_options, @hide = nil
41
+ true
42
+ elsif self.all_tasks[meth] || meth == "method_missing"
43
+ true
44
+ else
45
+ false
46
+ end
47
+ end
48
+ end
49
+ end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terminitor
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
- - 2
9
- - 2
10
- version: 0.2.2
7
+ - 3
8
+ - 0
9
+ version: 0.3.0
11
10
  platform: ruby
12
11
  authors:
13
12
  - Arthur Chiu
@@ -16,7 +15,7 @@ autorequire:
16
15
  bindir: bin
17
16
  cert_chain: []
18
17
 
19
- date: 2010-11-11 00:00:00 -08:00
18
+ date: 2010-12-01 00:00:00 -08:00
20
19
  default_executable:
21
20
  dependencies:
22
21
  - !ruby/object:Gem::Dependency
@@ -27,7 +26,6 @@ dependencies:
27
26
  requirements:
28
27
  - - ">="
29
28
  - !ruby/object:Gem::Version
30
- hash: 3
31
29
  segments:
32
30
  - 0
33
31
  version: "0"
@@ -41,7 +39,6 @@ dependencies:
41
39
  requirements:
42
40
  - - ~>
43
41
  - !ruby/object:Gem::Version
44
- hash: 39
45
42
  segments:
46
43
  - 0
47
44
  - 14
@@ -57,7 +54,6 @@ dependencies:
57
54
  requirements:
58
55
  - - ~>
59
56
  - !ruby/object:Gem::Version
60
- hash: 5
61
57
  segments:
62
58
  - 0
63
59
  - 4
@@ -73,7 +69,6 @@ dependencies:
73
69
  requirements:
74
70
  - - ~>
75
71
  - !ruby/object:Gem::Version
76
- hash: 23
77
72
  segments:
78
73
  - 1
79
74
  - 0
@@ -89,12 +84,11 @@ dependencies:
89
84
  requirements:
90
85
  - - ~>
91
86
  - !ruby/object:Gem::Version
92
- hash: 51
93
87
  segments:
94
88
  - 0
95
- - 11
89
+ - 12
96
90
  - 0
97
- version: 0.11.0
91
+ version: 0.12.0
98
92
  type: :development
99
93
  version_requirements: *id005
100
94
  - !ruby/object:Gem::Dependency
@@ -103,9 +97,8 @@ dependencies:
103
97
  requirement: &id006 !ruby/object:Gem::Requirement
104
98
  none: false
105
99
  requirements:
106
- - - "="
100
+ - - ~>
107
101
  - !ruby/object:Gem::Version
108
- hash: 23
109
102
  segments:
110
103
  - 1
111
104
  - 0
@@ -121,7 +114,6 @@ dependencies:
121
114
  requirements:
122
115
  - - ">="
123
116
  - !ruby/object:Gem::Version
124
- hash: 3
125
117
  segments:
126
118
  - 0
127
119
  version: "0"
@@ -190,7 +182,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
190
182
  requirements:
191
183
  - - ">="
192
184
  - !ruby/object:Gem::Version
193
- hash: 3
194
185
  segments:
195
186
  - 0
196
187
  version: "0"
@@ -199,7 +190,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
190
  requirements:
200
191
  - - ">="
201
192
  - !ruby/object:Gem::Version
202
- hash: 23
203
193
  segments:
204
194
  - 1
205
195
  - 3