flood-capybara 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eb82fe5275b610e824e9eb6e1af869482b0cd51b
4
- data.tar.gz: c8f6ed8a9267aff043637db6488c44fb0aed6952
3
+ metadata.gz: a82db60e58b791d24a3023c728e6810419f0500e
4
+ data.tar.gz: 05246ab3b4773bffb9661effd9afa1f4297b34b1
5
5
  SHA512:
6
- metadata.gz: d2a65322fbce7fa0d185868f4f6548e38c24584c1fa4cc3d0de4bd36688a53df65f031ad870f302bf5ec94ec23efdf9e45de83289b78180ff4919c25ea5c3471
7
- data.tar.gz: 1533df20c56af777e769c92d2be28372b2dd89586cef5e51642b863753b96575cafcde3937908cab2b4187d93ac179d2e0b3f274e158ed9357c3fd23bf396f31
6
+ metadata.gz: e1614e8c97070239cf819b28bff6e2996216c37b77525b718d86ac4f721d7e61b62c6e874e75dabe3fa4b5a89a8a4d06bf996082d17e310c8211e25d32300403
7
+ data.tar.gz: 24115bab09ab22e0030182f8c194b4bac22e1e53edb2db290c9bee1991585d8d9bde906eb0f3ce6bf4f22b0c627faf57387c4c040924a6cbbebf1cd361a3365f
data/.rubocop.yml ADDED
@@ -0,0 +1,282 @@
1
+ AllCops:
2
+ Exclude:
3
+ - db/**/*
4
+ - config/**/*
5
+ - script/**/*
6
+ - spec/**/*
7
+ - app/admin/**/*
8
+
9
+ AccessorMethodName:
10
+ Enabled: false
11
+
12
+ ActionFilter:
13
+ Enabled: false
14
+
15
+ Alias:
16
+ Enabled: false
17
+
18
+ ArrayJoin:
19
+ Enabled: false
20
+
21
+ AsciiComments:
22
+ Enabled: false
23
+
24
+ AsciiIdentifiers:
25
+ Enabled: false
26
+
27
+ Attr:
28
+ Enabled: false
29
+
30
+ BlockNesting:
31
+ Enabled: false
32
+
33
+ CaseEquality:
34
+ Enabled: false
35
+
36
+ CharacterLiteral:
37
+ Enabled: false
38
+
39
+ ClassAndModuleChildren:
40
+ Enabled: false
41
+
42
+ ClassLength:
43
+ Enabled: false
44
+
45
+ ClassVars:
46
+ Enabled: false
47
+
48
+ CollectionMethods:
49
+ PreferredMethods:
50
+ find: detect
51
+ reduce: inject
52
+ collect: map
53
+ find_all: select
54
+
55
+ ColonMethodCall:
56
+ Enabled: false
57
+
58
+ CommentAnnotation:
59
+ Enabled: false
60
+
61
+ CyclomaticComplexity:
62
+ Enabled: false
63
+
64
+ Delegate:
65
+ Enabled: false
66
+
67
+ DeprecatedHashMethods:
68
+ Enabled: false
69
+
70
+ Documentation:
71
+ Enabled: false
72
+
73
+ DotPosition:
74
+ EnforcedStyle: trailing
75
+
76
+ DoubleNegation:
77
+ Enabled: false
78
+
79
+ EachWithObject:
80
+ Enabled: false
81
+
82
+ EmptyLiteral:
83
+ Enabled: false
84
+
85
+ Encoding:
86
+ Enabled: false
87
+
88
+ EvenOdd:
89
+ Enabled: false
90
+
91
+ FileName:
92
+ Enabled: false
93
+
94
+ FlipFlop:
95
+ Enabled: false
96
+
97
+ FormatString:
98
+ Enabled: false
99
+
100
+ GlobalVars:
101
+ Enabled: false
102
+
103
+ GuardClause:
104
+ Enabled: false
105
+
106
+ IfUnlessModifier:
107
+ Enabled: false
108
+
109
+ IfWithSemicolon:
110
+ Enabled: false
111
+
112
+ InlineComment:
113
+ Enabled: false
114
+
115
+ Lambda:
116
+ Enabled: false
117
+
118
+ LambdaCall:
119
+ Enabled: false
120
+
121
+ LineEndConcatenation:
122
+ Enabled: false
123
+
124
+ LineLength:
125
+ Max: 120
126
+
127
+ MethodLength:
128
+ Enabled: false
129
+
130
+ ModuleFunction:
131
+ Enabled: false
132
+
133
+ NegatedIf:
134
+ Enabled: false
135
+
136
+ NegatedWhile:
137
+ Enabled: false
138
+
139
+ Next:
140
+ Enabled: false
141
+
142
+ NilComparison:
143
+ Enabled: false
144
+
145
+ Not:
146
+ Enabled: false
147
+
148
+ NumericLiterals:
149
+ Enabled: false
150
+
151
+ OneLineConditional:
152
+ Enabled: false
153
+
154
+ OpMethod:
155
+ Enabled: false
156
+
157
+ ParameterLists:
158
+ Enabled: false
159
+
160
+ PercentLiteralDelimiters:
161
+ Enabled: false
162
+
163
+ PerlBackrefs:
164
+ Enabled: false
165
+
166
+ PredicateName:
167
+ NamePrefixBlacklist:
168
+ - is_
169
+
170
+ Proc:
171
+ Enabled: false
172
+
173
+ RaiseArgs:
174
+ Enabled: false
175
+
176
+ RegexpLiteral:
177
+ Enabled: false
178
+
179
+ SelfAssignment:
180
+ Enabled: false
181
+
182
+ SingleLineBlockParams:
183
+ Enabled: false
184
+
185
+ SingleLineMethods:
186
+ Enabled: false
187
+
188
+ SignalException:
189
+ Enabled: false
190
+
191
+ SpecialGlobalVars:
192
+ Enabled: false
193
+
194
+ StringLiterals:
195
+ Enabled: true
196
+ EnforcedStyle: single_quotes
197
+
198
+ VariableInterpolation:
199
+ Enabled: false
200
+
201
+ TrailingComma:
202
+ Enabled: false
203
+
204
+ TrivialAccessors:
205
+ Enabled: false
206
+
207
+ VariableInterpolation:
208
+ Enabled: false
209
+
210
+ WhenThen:
211
+ Enabled: false
212
+
213
+ WhileUntilModifier:
214
+ Enabled: false
215
+
216
+ WordArray:
217
+ Enabled: false
218
+
219
+ # Lint
220
+
221
+ AmbiguousOperator:
222
+ Enabled: false
223
+
224
+ AmbiguousRegexpLiteral:
225
+ Enabled: false
226
+
227
+ AssignmentInCondition:
228
+ Enabled: false
229
+
230
+ ConditionPosition:
231
+ Enabled: false
232
+
233
+ DeprecatedClassMethods:
234
+ Enabled: false
235
+
236
+ ElseLayout:
237
+ Enabled: false
238
+
239
+ HandleExceptions:
240
+ Enabled: false
241
+
242
+ InvalidCharacterLiteral:
243
+ Enabled: false
244
+
245
+ LiteralInCondition:
246
+ Enabled: false
247
+
248
+ LiteralInInterpolation:
249
+ Enabled: false
250
+
251
+ Loop:
252
+ Enabled: false
253
+
254
+ ParenthesesAsGroupedExpression:
255
+ Enabled: false
256
+
257
+ RequireParentheses:
258
+ Enabled: false
259
+
260
+ UnderscorePrefixedVariableName:
261
+ Enabled: false
262
+
263
+ Void:
264
+ Enabled: false
265
+
266
+ Metrics/AbcSize:
267
+ Enabled: false
268
+
269
+ Metrics/PerceivedComplexity:
270
+ Severity: warning
271
+
272
+ Style/MultilineOperationIndentation:
273
+ EnforcedStyle: indented
274
+ SupportedStyles:
275
+ - aligned
276
+ - indented
277
+
278
+ Style/AlignParameters:
279
+ EnforcedStyle: with_fixed_indentation
280
+ SupportedStyles:
281
+ - with_first_parameter
282
+ - with_fixed_indentation
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.1.5
data/README.md CHANGED
@@ -2,9 +2,7 @@
2
2
 
3
3
  ![http://www.bay12forums.com/smf/index.php?action=profile;u=22552](http://i.imgur.com/4nAHS.gif)
4
4
 
5
- This gem lets you run your Capybara acceptance tests on Flood IO. At the moment it supports the RSpec 3 runner only. Plans to include other test runners in the near future.
6
-
7
- This works by essetinally parsing specs from your specs directory, wrapping them up and running them on Flood IO with a specialised docker container (using phantomjs / poltergeist)
5
+ This gem lets you run your Capybara acceptance tests on Flood IO using RSpec 3.
8
6
 
9
7
  ## Installation
10
8
 
@@ -26,7 +24,30 @@ Or install it yourself as:
26
24
 
27
25
  In your app / rails directory:
28
26
 
29
- $ flood-capybara spec --api_token=$FLOOD_API_TOKEN --grid=1QNtoBftrokSErYJdTHRQg --duration=120 --url=https://flood.io
27
+ ```
28
+ $ flood-capybara spec \
29
+ --api_token=$FLOOD_API_TOKEN \
30
+ --grid=1QNtoBftrokSErYJdTHRQg \
31
+ --rampup=60 \
32
+ --duration=120 \
33
+ --url=https://flood.io
34
+ ```
35
+
36
+ or as a rake task e.g. `lib/tasks/flood.rake`
37
+
38
+ ```
39
+ namespace :flood do
40
+ task run: :environment do
41
+ system %{
42
+ flood-capybara spec
43
+ --api_token=#{ENV['FLOOD_API_TOKEN']}
44
+ --rampup=#{ENV['RAMPUP'] || 60}
45
+ --duration=#{ENV['DURATION'] || 300}
46
+ --url=#{ENV['URL'] || 'https://flood-newrelic-ruby-kata.herokuapp.com/'}
47
+ }.squish
48
+ end
49
+ end
50
+ ```
30
51
 
31
52
  Options available:
32
53
 
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "elasticsearch-api"
28
28
  spec.add_development_dependency "selenium-webdriver"
29
29
  spec.add_development_dependency "pry"
30
+ spec.add_development_dependency "launchy"
30
31
 
31
32
  spec.add_dependency "parser"
32
33
  spec.add_dependency "unparser"
@@ -11,6 +11,7 @@ class FloodCapybara
11
11
  option :duration
12
12
  option :name
13
13
  option :url
14
+ option :endpoint
14
15
  def spec
15
16
  specs = FloodCapybara.new
16
17
  specs.run options
@@ -6,37 +6,57 @@ class FloodCapybara
6
6
  @steps = []
7
7
  end
8
8
 
9
- def run(params = {})
10
- logger.info loading
11
- config = RSpec.configuration
12
- formatter = RSpec::Core::Formatters::JsonFormatter.new(config.output_stream)
13
- reporter = RSpec::Core::Reporter.new(config)
9
+ def run(args = {})
14
10
  config.instance_variable_set(:@reporter, reporter)
15
- loader = config.send(:formatter_loader)
16
- notifications = loader.send(:notifications_for, RSpec::Core::Formatters::JsonFormatter)
17
11
  reporter.register_listener(formatter, *notifications)
12
+
18
13
  RSpec::Core::Runner.run(['spec', '--dry-run'])
19
- specs = formatter.output_hash
20
- puts
21
- logger.warn "Found the following specs:\n" +
22
- specs[:examples].collect {|spec| spec[:description]}.join("\n")
14
+
15
+ specs = formatter.output_hash
16
+
17
+ logger.info "Flood specs: \n" +
18
+ specs[:examples].collect {|spec| spec[:description]}.to_yaml
19
+
23
20
  specs = specs[:examples].collect {|spec| spec[:file_path]}
24
21
 
25
- specs && specs.uniq.each do |spec|
22
+ specs.try(:uniq).try(:each) do |spec|
26
23
  ast = Parser::CurrentRuby.parse(File.read(spec))
27
- iterate ast
24
+ iterate(ast)
28
25
  end
29
- flood params
26
+
27
+ flood(args)
30
28
  end
31
29
 
32
30
  private
33
31
 
32
+ def config
33
+ @_config ||= RSpec.configuration
34
+ end
35
+
36
+ def formatter
37
+ @_formatter ||= RSpec::Core::Formatters::JsonFormatter.new(File.open(File::NULL, 'w'))
38
+ end
39
+
40
+ def reporter
41
+ @_reporter ||= RSpec::Core::Reporter.new(config)
42
+ end
43
+
44
+ def loader
45
+ @_loader ||= config.send(:formatter_loader)
46
+ end
47
+
48
+ def notifications
49
+ @_notifications ||= loader.send(
50
+ :notifications_for,
51
+ RSpec::Core::Formatters::JsonFormatter)
52
+ end
53
+
34
54
  def iterate(node)
35
55
  return unless node.is_a?(AST::Node)
36
56
 
37
57
  node.children.each_with_index do |child, index|
38
58
  begin
39
- if child.to_a.first.children[1] == :it
59
+ if (child.to_a.first.children & [:it]).present?
40
60
  @steps << Unparser.unparse(child)
41
61
  end
42
62
  rescue
@@ -45,61 +65,65 @@ class FloodCapybara
45
65
  end
46
66
  end
47
67
 
48
- def flood(params={})
49
- RestClient.proxy = params[:proxy] if params[:proxy]
50
- begin
51
- file = Tempfile.new(['capybara_rspec', '.rb'])
52
- file.write(@steps.join("\n"))
53
- file.rewind
68
+ def flood(args = {})
69
+ RestClient.proxy = args[:proxy] if args[:proxy]
54
70
 
55
- flood_files = {
56
- file: File.new("#{file.path}", 'rb')
57
- }
71
+ response = RestClient.post endpoint(args), flood_params(args)
58
72
 
59
- if params[:files]
60
- flood_files.merge!(Hash[params[:files].map.with_index { |value, index| [index, File.new(value, 'rb')] }])
61
- params.delete(:files)
62
- end
73
+ if response.code == 201
74
+ logger.info "Flood results: #{JSON.parse(response)["permalink"]}"
75
+ else
76
+ logger.fatal "Sorry there was an error: #{JSON.parse(response)["error"]}"
77
+ end
63
78
 
64
- response = RestClient.post "#{params[:endpoint] ? params[:endpoint] : 'https://api.flood.io'}/floods?auth_token=#{params[:api_token]}",
65
- {
66
- flood: {
67
- tool: 'capybara-rspec',
68
- url: params[:url],
69
- name: params[:name],
70
- notes: params[:notes],
71
- tag_list: params[:tag_list],
72
- threads: params[:threads],
73
- rampup: params[:rampup],
74
- duration: params[:duration],
75
- override_hosts: params[:override_hosts],
76
- override_parameters: params[:override_parameters],
77
- started: params[:started],
78
- stopped: params[:stopped]
79
- },
80
- flood_files: flood_files,
81
- region: params[:region],
82
- multipart: true,
83
- content_type: 'application/octet-stream'
84
- }.merge(params)
85
-
86
- if response.code == 200
87
- logger.info "Flood results at: #{JSON.parse(response)["response"]["results"]["link"]}"
88
- else
89
- logger.fatal "Sorry there was an error: #{JSON.parse(response)["error_description"]}"
90
- end
91
79
  rescue => e
92
- logger.fatal "Sorry there was an error: #{JSON.parse(e.response)["error_description"]}"
93
- end
80
+ logger.fatal "Sorry there was an error: #{JSON.parse(e.response)["error"]}"
94
81
  end
95
82
 
96
- def logger
97
- @log ||= Logger.new(STDOUT)
98
- @log.level = Logger::DEBUG
99
- @log
83
+ def endpoint(args)
84
+ "#{args[:endpoint] ? args[:endpoint] : 'https://api.flood.io'}/" +
85
+ "floods?auth_token=#{args[:api_token]}"
100
86
  end
101
87
 
102
- def loading
103
- ["Adding Hidden Agendas","Adjusting Bell Curves","Aesthesizing Industrial Areas","Aligning Covariance Matrices","Applying Feng Shui Shaders","Applying Theatre Soda Layer","Asserting Packed Exemplars","Attempting to Lock Back-Buffer","Binding Sapling Root System","Breeding Fauna","Building Data Trees","Bureacritizing Bureaucracies","Calculating Inverse Probability Matrices","Calculating Llama Expectoration Trajectory","Calibrating Blue Skies","Charging Ozone Layer","Coalescing Cloud Formations","Cohorting Exemplars","Collecting Meteor Particles","Compounding Inert Tessellations","Compressing Fish Files","Computing Optimal Bin Packing","Concatenating Sub-Contractors","Containing Existential Buffer","Debarking Ark Ramp","Debunching Unionized Commercial Services","Deciding What Message to Display Next","Decomposing Singular Values","Decrementing Tectonic Plates","Deleting Ferry Routes","Depixelating Inner Mountain Surface Back Faces","Depositing Slush Funds","Destabilizing Economic Indicators","Determining Width of Blast Fronts","Deunionizing Bulldozers","Dicing Models","Diluting Livestock Nutrition Variables","Downloading Satellite Terrain Data","Exposing Flash Variables to Streak System","Extracting Resources","Factoring Pay Scale","Fixing Election Outcome Matrix","Flood-Filling Ground Water","Flushing Pipe Network","Gathering Particle Sources","Generating Jobs","Gesticulating Mimes","Graphing Whale Migration","Hiding Willio Webnet Mask","Implementing Impeachment Routine","Increasing Accuracy of RCI Simulators","Increasing Magmafacation","Initializing My Sim Tracking Mechanism","Initializing Rhinoceros Breeding Timetable","Initializing Robotic Click-Path AI","Inserting Sublimated Messages","Integrating Curves","Integrating Illumination Form Factors","Integrating Population Graphs","Iterating Cellular Automata","Lecturing Errant Subsystems","Mixing Genetic Pool","Modeling Object Components","Mopping Occupant Leaks","Normalizing Power","Obfuscating Quigley Matrix","Overconstraining Dirty Industry Calculations","Partitioning City Grid Singularities","Perturbing Matrices","Pixalating Nude Patch","Polishing Water Highlights","Populating Lot Templates","Preparing Sprites for Random Walks","Prioritizing Landmarks","Projecting Law Enforcement Pastry Intake","Realigning Alternate Time Frames","Reconfiguring User Mental Processes","Relaxing Splines","Removing Road Network Speed Bumps","Removing Texture Gradients","Removing Vehicle Avoidance Behavior","Resolving GUID Conflict","Reticulating Splines","Retracting Phong Shader","Retrieving from Back Store","Reverse Engineering Image Consultant","Routing Neural Network Infanstructure","Scattering Rhino Food Sources","Scrubbing Terrain","Searching for Llamas","Seeding Architecture Simulation Parameters","Sequencing Particles","Setting Advisor Moods","Setting Inner Deity Indicators","Setting Universal Physical Constants","Sonically Enhancing Occupant-Free Timber","Speculating Stock Market Indices","Splatting Transforms","Stratifying Ground Layers","Sub-Sampling Water Data","Synthesizing Gravity","Synthesizing Wavelets","Time-Compressing Simulator Clock","Unable to Reveal Current Activity","Weathering Buildings","Zeroing Crime Network"].sample
88
+ def flood_params(args)
89
+ {
90
+ flood: {
91
+ tool: 'capybara-rspec',
92
+ url: args[:url],
93
+ name: args[:name],
94
+ notes: args[:notes],
95
+ tag_list: args[:tag_list],
96
+ threads: args[:threads],
97
+ rampup: args[:rampup],
98
+ duration: args[:duration],
99
+ override_hosts: args[:override_hosts],
100
+ override_parameters: args[:override_parameters],
101
+ started: args[:started],
102
+ stopped: args[:stopped]
103
+ },
104
+ flood_files: flood_files,
105
+ region: args[:region],
106
+ multipart: true,
107
+ content_type: 'application/octet-stream'
108
+ }.merge(args)
109
+ end
110
+
111
+ def flood_files
112
+ {
113
+ file: File.new("#{file.path}", 'rb')
114
+ }
115
+ end
116
+
117
+ def file
118
+ temp = Tempfile.new(['capybara_rspec', '.rb'])
119
+ temp.write(@steps.join("\n"))
120
+ temp.rewind
121
+ temp
122
+ end
123
+
124
+ def logger
125
+ @_log ||= Logger.new(STDOUT)
126
+ @_log.level = Logger::DEBUG
127
+ @_log
104
128
  end
105
129
  end
@@ -1,5 +1,5 @@
1
1
  module Flood
2
2
  module Capybara
3
- VERSION = "0.0.1"
3
+ VERSION = '0.0.2'
4
4
  end
5
5
  end
@@ -1,5 +1,6 @@
1
1
  require File.dirname(__FILE__) + '/../spec_helper'
2
2
  require 'cgi'
3
+ require 'pry'
3
4
 
4
5
  ENV['PUBLIC_IPV4'] ||= `curl -s --fail --connect-timeout 1 http://169.254.169.254/latest/meta-data/public-ipv4 || curl -s --connect-timeout 10 ifconfig.me || echo 127.0.0.1`.chomp
5
6
 
@@ -11,12 +12,14 @@ describe "sign in", type: :feature do
11
12
  after :each do
12
13
  Capybara.default_driver == :poltergeist &&
13
14
  page.driver.network_traffic.each do |request|
15
+ next unless request
16
+ next unless request.response_parts && request.response_parts.any? && request.response_parts.last
14
17
  @client.index index: "results-#{Time.now.utc.strftime("%Y.%m.%d")}", type: 'capybara', body: {
15
18
  timestamp: (Time.now.utc.to_f * 1000).to_i.to_s,
16
19
  url: request.url,
17
20
  label: CGI::escape(request.url),
18
- request_headers: request.headers.to_s,
19
- response_headers: request.response_parts.last.headers.to_s,
21
+ request_headers: request.headers.map {|header| header['name'] << '=' << header['value'] }.join(';'),
22
+ response_headers: request.response_parts.last.headers.map {|header| header['name'] << '=' << header['value'] }.join(';'),
20
23
  start_time: (request.time.to_f * 1000).to_i.to_s,
21
24
  end_time: (request.response_parts.last.time.to_f * 1000).to_i.to_s,
22
25
  source_host: ENV['PUBLIC_IPV4'],
@@ -24,11 +27,12 @@ describe "sign in", type: :feature do
24
27
  latency: nil,
25
28
  sample_count: 1,
26
29
  thread_id: ENV['THREAD_ID'] || 1,
27
- active_threads: 1,
28
- active_threads_in_group: 1,
30
+ active_threads: ENV['ACTIVE_THREADS'] || ENV['THREAD_ID'] || 1,
31
+ active_threads_in_group: ENV['ACTIVE_THREADS'] || ENV['THREAD_ID'] || 1,
29
32
  uuid: ENV['FLOOD_UUID'],
30
33
  response_code: request.response_parts.last.status,
31
- bytes: 0,
34
+ successful: request.response_parts.last.status.to_s.start_with?('2', '3'),
35
+ bytes: request.response_parts.first.body_size,
32
36
  request_data: nil,
33
37
  response_data: nil
34
38
  }
data/spec/spec_helper.rb CHANGED
@@ -7,7 +7,8 @@ require 'elasticsearch'
7
7
 
8
8
  Capybara.default_driver = :poltergeist
9
9
  Capybara.save_and_open_page_path = File.dirname(__FILE__) + '/var/log/flood/custom'
10
- Capybara.app_host = "http://127.0.0.1"
10
+ Capybara.app_host = ENV['APP_HOST'] || "http://127.0.0.1"
11
+ Capybara.default_wait_time = 5
11
12
 
12
13
  RSpec.configure do |config|
13
14
  config.before(:all) do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flood-capybara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Koopmans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-16 00:00:00.000000000 Z
11
+ date: 2015-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: launchy
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: parser
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -201,6 +215,8 @@ extensions: []
201
215
  extra_rdoc_files: []
202
216
  files:
203
217
  - ".gitignore"
218
+ - ".rubocop.yml"
219
+ - ".ruby-version"
204
220
  - Gemfile
205
221
  - LICENSE.txt
206
222
  - README.md