traxor 0.1.17 → 0.1.18

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: 2fe3fcda84fda172b21244d7b16fac08c989c226611e40975f6b8345405054a0
4
- data.tar.gz: 37a553b7fe9e3972c8634758762ccee699154794423693d47457feba000ed685
3
+ metadata.gz: ba90b5e65121c02ec1a419a5e945c43802be46121fec69315c38a0bb327e01f5
4
+ data.tar.gz: 4ab56d1a501ce39e962f0108b745f758e3597a152d10d92122ea26e6605863ba
5
5
  SHA512:
6
- metadata.gz: 6d3429761f18b3ed1c06d5a1446efad8a9b82939ffa83b4ea201d187a740202155987575ead5ff7af561052344312c063121df525963a019110188550daf5b5d
7
- data.tar.gz: 19b4916aceb4cbcb70a71ec3350bc18ba3679e0c61cb336dd4cee1baa93c58223c87207de112094440c916ed118d349a9d33a824c4cc15724a3b41366017fd89
6
+ metadata.gz: 31548d74364f241fe3286c46b79018eb0b1e948922cb13f6e8f77db3493d0f17c809d0e19c2bfb4b1adb3fff14b8da302367285eee3f796ef0e649955739571c
7
+ data.tar.gz: 77f30d4b35fc7f4f29ebe2243a903d7f7876f393013fe25d274c0d6ecd97549238e4ef38bd981e39c965474930856113bd2f9f8f195c4d32af35469cd6ebfcce
data/.circleci/config.yml CHANGED
@@ -26,18 +26,6 @@ jobs:
26
26
  - ./vendor/bundle
27
27
  key: v1-dependencies-{{ checksum "Gemfile.lock" }}
28
28
 
29
- - run:
30
- name: Bundler-Audit
31
- command: bin/lois bundler-audit -g $GITHUB_CREDENTIALS
32
-
33
- - run:
34
- name: Rubocop
35
- command: bin/lois rubocop -g $GITHUB_CREDENTIALS
36
-
37
- - run:
38
- name: Reek
39
- command: bin/lois reek -g $GITHUB_CREDENTIALS
40
-
41
29
  - run:
42
30
  name: Setup Code Climate test-reporter
43
31
  command: |
@@ -56,7 +44,5 @@ jobs:
56
44
  path: results
57
45
  - store_artifacts:
58
46
  path: results
59
- - store_artifacts:
60
- path: lois
61
47
  - store_artifacts:
62
48
  path: coverage
data/.rubocop.yml CHANGED
@@ -1,7 +1,6 @@
1
- require: rubocop-rspec
2
-
3
1
  AllCops:
4
2
  DisplayCopNames: true
3
+ TargetRubyVersion: 2.4
5
4
 
6
5
  Rails:
7
6
  Enabled: true
@@ -11,3 +10,14 @@ Style/Documentation:
11
10
 
12
11
  Metrics/LineLength:
13
12
  Max: 100
13
+
14
+ Metrics/BlockLength:
15
+ Exclude:
16
+ - '**/spec/**/*'
17
+ - 'traxor.gemspec'
18
+ - 'Guardfile'
19
+
20
+ Style/StringLiterals:
21
+ Exclude:
22
+ - 'bin/*'
23
+ - 'gemfiles/*'
data/.travis.yml CHANGED
@@ -1,5 +1,12 @@
1
1
  sudo: false
2
2
  language: ruby
3
+ cache: bundler
3
4
  rvm:
4
- - 2.5.1
5
- before_install: gem install bundler -v 1.16.1
5
+ - 2.5
6
+ - 2.4
7
+ gemfile:
8
+ - gemfiles/active_support_5_0.gemfile
9
+ - gemfiles/active_support_5_1.gemfile
10
+ - gemfiles/active_support_5_2.gemfile
11
+ before_install: gem install bundler
12
+ script: "bin/rspec"
data/Appraisals ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ appraise 'active_support_5_0' do
4
+ gem 'activesupport', '~> 5.0'
5
+ end
6
+
7
+ appraise 'active_support_5_1' do
8
+ gem 'activesupport', '~> 5.1'
9
+ end
10
+
11
+ appraise 'active_support_5_2' do
12
+ gem 'activesupport', '~> 5.2'
13
+ end
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
data/Gemfile.lock CHANGED
@@ -1,9 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- traxor (0.1.17)
5
- activesupport
6
- rails (>= 4.2)
4
+ traxor (0.1.18)
5
+ activesupport (>= 5.0)
7
6
 
8
7
  GEM
9
8
  remote: https://rubygems.org/
@@ -49,17 +48,17 @@ GEM
49
48
  i18n (>= 0.7, < 2)
50
49
  minitest (~> 5.1)
51
50
  tzinfo (~> 1.1)
51
+ appraisal (2.2.0)
52
+ bundler
53
+ rake
54
+ thor (>= 0.14.0)
52
55
  arel (9.0.0)
53
56
  ast (2.4.0)
54
57
  axiom-types (0.1.1)
55
58
  descendants_tracker (~> 0.0.4)
56
59
  ice_nine (~> 0.11.0)
57
60
  thread_safe (~> 0.3, >= 0.3.1)
58
- brakeman (4.2.1)
59
61
  builder (3.2.3)
60
- bundler-audit (0.6.0)
61
- bundler (~> 1.2)
62
- thor (~> 0.18)
63
62
  byebug (10.0.2)
64
63
  codeclimate-engine-rb (0.4.1)
65
64
  virtus (~> 1.0)
@@ -77,26 +76,36 @@ GEM
77
76
  erubi (1.7.1)
78
77
  faraday (0.15.0)
79
78
  multipart-post (>= 1.2, < 3)
79
+ ffi (1.9.23)
80
+ formatador (0.2.5)
80
81
  globalid (0.4.1)
81
82
  activesupport (>= 4.2.0)
82
- httparty (0.16.2)
83
- multi_xml (>= 0.5.2)
83
+ guard (2.14.2)
84
+ formatador (>= 0.2.4)
85
+ listen (>= 2.7, < 4.0)
86
+ lumberjack (>= 1.0.12, < 2.0)
87
+ nenv (~> 0.1)
88
+ notiffany (~> 0.0)
89
+ pry (>= 0.9.12)
90
+ shellany (~> 0.0)
91
+ thor (>= 0.18.1)
92
+ guard-compat (1.2.1)
93
+ guard-rspec (4.7.3)
94
+ guard (~> 2.1)
95
+ guard-compat (~> 1.1)
96
+ rspec (>= 2.99.0, < 4.0)
84
97
  i18n (1.0.1)
85
98
  concurrent-ruby (~> 1.0)
86
99
  ice_nine (0.11.2)
87
100
  json (2.1.0)
88
- lois (0.1.6)
89
- activesupport
90
- brakeman
91
- bundler-audit
92
- httparty
93
- reek
94
- rubocop
95
- simplecov
96
- thor
101
+ listen (3.1.5)
102
+ rb-fsevent (~> 0.9, >= 0.9.4)
103
+ rb-inotify (~> 0.9, >= 0.9.7)
104
+ ruby_dep (~> 1.2)
97
105
  loofah (2.2.2)
98
106
  crass (~> 1.0.2)
99
107
  nokogiri (>= 1.5.9)
108
+ lumberjack (1.0.13)
100
109
  mail (2.7.0)
101
110
  mini_mime (>= 0.1.1)
102
111
  marcel (0.3.2)
@@ -106,11 +115,14 @@ GEM
106
115
  mini_mime (1.0.0)
107
116
  mini_portile2 (2.3.0)
108
117
  minitest (5.11.3)
109
- multi_xml (0.6.0)
110
118
  multipart-post (2.0.0)
111
- nio4r (2.3.0)
119
+ nenv (0.3.0)
120
+ nio4r (2.3.1)
112
121
  nokogiri (1.8.2)
113
122
  mini_portile2 (~> 2.3.0)
123
+ notiffany (0.1.1)
124
+ nenv (~> 0.1)
125
+ shellany (~> 0.0)
114
126
  parallel (1.12.1)
115
127
  parser (2.5.1.0)
116
128
  ast (~> 2.4.0)
@@ -152,6 +164,9 @@ GEM
152
164
  thor (>= 0.18.1, < 2.0)
153
165
  rainbow (3.0.0)
154
166
  rake (12.3.1)
167
+ rb-fsevent (0.10.3)
168
+ rb-inotify (0.9.10)
169
+ ffi (>= 0.5.0, < 2)
155
170
  redis (4.0.1)
156
171
  reek (4.8.1)
157
172
  codeclimate-engine-rb (~> 0.4.0)
@@ -179,9 +194,9 @@ GEM
179
194
  rainbow (>= 2.2.2, < 4.0)
180
195
  ruby-progressbar (~> 1.7)
181
196
  unicode-display_width (~> 1.0, >= 1.0.1)
182
- rubocop-rspec (1.25.1)
183
- rubocop (>= 0.53.0)
184
197
  ruby-progressbar (1.9.0)
198
+ ruby_dep (1.5.0)
199
+ shellany (0.0.1)
185
200
  sidekiq (5.1.3)
186
201
  concurrent-ruby (~> 1.0)
187
202
  connection_pool (~> 2.2, >= 2.2.0)
@@ -217,10 +232,10 @@ PLATFORMS
217
232
  ruby
218
233
 
219
234
  DEPENDENCIES
235
+ appraisal
220
236
  bundler
221
237
  faraday
222
- lois
223
- pry
238
+ guard-rspec
224
239
  pry-byebug
225
240
  rails
226
241
  rake
@@ -228,7 +243,6 @@ DEPENDENCIES
228
243
  rspec
229
244
  rspec_junit_formatter
230
245
  rubocop
231
- rubocop-rspec
232
246
  sidekiq
233
247
  simplecov
234
248
  traxor!
data/Guardfile ADDED
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ # A sample Guardfile
4
+ # More info at https://github.com/guard/guard#readme
5
+
6
+ ## Uncomment and set this to only include directories you want to watch
7
+ # directories %w(app lib config test spec features) \
8
+ # .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
9
+
10
+ ## Note: if you are using the `directories` clause above and you are not
11
+ ## watching the project directory ('.'), then you will want to move
12
+ ## the Guardfile to a watched dir and symlink it back, e.g.
13
+ #
14
+ # $ mkdir config
15
+ # $ mv Guardfile config/
16
+ # $ ln -s config/Guardfile .
17
+ #
18
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
19
+
20
+ # Note: The cmd option is now required due to the increasing number of ways
21
+ # rspec may be run, below are examples of the most common uses.
22
+ # * bundler: 'bundle exec rspec'
23
+ # * bundler binstubs: 'bin/rspec'
24
+ # * spring: 'bin/rspec' (This will use spring if running and you have
25
+ # installed the spring binstubs per the docs)
26
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
27
+ # * 'just' rspec: 'rspec'
28
+
29
+ guard :rspec, cmd: 'bundle exec rspec' do
30
+ require 'guard/rspec/dsl'
31
+ dsl = Guard::RSpec::Dsl.new(self)
32
+
33
+ # Feel free to open issues for suggestions and improvements
34
+
35
+ # RSpec files
36
+ rspec = dsl.rspec
37
+ watch(rspec.spec_helper) { rspec.spec_dir }
38
+ watch(rspec.spec_support) { rspec.spec_dir }
39
+ watch(rspec.spec_files)
40
+
41
+ # Ruby files
42
+ ruby = dsl.ruby
43
+ dsl.watch_spec_files_for(ruby.lib_files)
44
+
45
+ # Rails files
46
+ rails = dsl.rails(view_extensions: %w[erb haml slim])
47
+ dsl.watch_spec_files_for(rails.app_files)
48
+ dsl.watch_spec_files_for(rails.views)
49
+
50
+ watch(rails.controllers) do |m|
51
+ [
52
+ rspec.spec.call("routing/#{m[1]}_routing"),
53
+ rspec.spec.call("controllers/#{m[1]}_controller"),
54
+ rspec.spec.call("acceptance/#{m[1]}")
55
+ ]
56
+ end
57
+
58
+ # Rails config changes
59
+ watch(rails.spec_helper) { rspec.spec_dir }
60
+ watch(rails.routes) { "#{rspec.spec_dir}/routing" }
61
+ watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" }
62
+
63
+ # Capybara features specs
64
+ watch(rails.view_dirs) { |m| rspec.spec.call("features/#{m[1]}") }
65
+ watch(rails.layouts) { |m| rspec.spec.call("features/#{m[1]}") }
66
+
67
+ # Turnip features and steps
68
+ watch(%r{^spec/acceptance/(.+)\.feature$})
69
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
70
+ Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance'
71
+ end
72
+ end
data/README.md CHANGED
@@ -1,8 +1,28 @@
1
- # Traxor [![CircleCI](https://circleci.com/gh/ketiko/traxor.svg?style=svg&circle-token=fd1e0d401eda8de60d31ca3dbb5fb066a71a9b9f)](https://circleci.com/gh/ketiko/traxor) [![Maintainability](https://api.codeclimate.com/v1/badges/d812a63d184fb6c88dbd/maintainability)](https://codeclimate.com/github/ketiko/traxor/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/d812a63d184fb6c88dbd/test_coverage)](https://codeclimate.com/github/ketiko/traxor/test_coverage)
1
+ # Traxor [![CircleCI](https://circleci.com/gh/ketiko/traxor.svg?style=svg&circle-token=fd1e0d401eda8de60d31ca3dbb5fb066a71a9b9f)](https://circleci.com/gh/ketiko/traxor) [![Build Status](https://travis-ci.org/ketiko/traxor.svg?branch=master)](https://travis-ci.org/ketiko/traxor) [![Maintainability](https://api.codeclimate.com/v1/badges/d812a63d184fb6c88dbd/maintainability)](https://codeclimate.com/github/ketiko/traxor/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/d812a63d184fb6c88dbd/test_coverage)](https://codeclimate.com/github/ketiko/traxor/test_coverage) [![Gem Version](https://badge.fury.io/rb/traxor.svg)](https://badge.fury.io/rb/traxor)
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/traxor`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ A tool for logging ruby application performance metrics to the [Akkeris](https://github.com/akkeris) platform.
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ Supported Gems:
6
+
7
+ - Rack
8
+ - Sidekiq
9
+ - Faraday
10
+ - ActionController
11
+ - ActionMailer
12
+ - ActiveRecord
13
+ - Rails
14
+
15
+ How does this help me?
16
+
17
+ It logs things that help you troubleshoot performance issues. Just some of the things it can help with:
18
+
19
+ - How much time is spent in rack middleware?
20
+ - Are requests getting backed up in the [queue](https://devcenter.heroku.com/articles/http-routing#heroku-headers)
21
+ - How many ActiveRecord models are loaded in a request?
22
+ - Which sidekiq jobs are the slowest?
23
+ - How much time is being spent in calls to external services?
24
+ - How much time is being spent in garbage collection?
25
+ - How many objects are being loaded into memory on a request?
6
26
 
7
27
  ## Installation
8
28
 
@@ -22,7 +42,139 @@ Or install it yourself as:
22
42
 
23
43
  ## Usage
24
44
 
25
- TODO: Write usage instructions here
45
+ If you are running a rails application, just include the gem and nothing else is required.
46
+ It will automagically set everything up. Including the gem wires up a Rails initializer to setup Traxor for you.
47
+
48
+ Akkeris records metrics by reading them from the logs on `STDOUT`. This can get verbose in development, so when the rails
49
+ env is development or test, they are written to `./log/traxor.log`.
50
+
51
+ To record your own metrics you can use:
52
+
53
+ ```
54
+ tags = { company: 'Company Name' }
55
+ Traxor::Metric.measure('duration', '10ms', tags)
56
+ Traxor::Metric.sample('memory', 500, tags)
57
+ Traxor::Metric.count('requests', 20, tags)
58
+ ```
59
+
60
+ Traxor also supports recording tags for your metrics as the final argument.
61
+
62
+ We recommend using a leading prefix for all your metrics so they don't collide with others.
63
+
64
+ Metric names we be lower cased and underscored. Namespaces in class names will be replaced with a period.
65
+
66
+ IE:
67
+
68
+ ```
69
+ module Animals
70
+ module FlyingBird; end
71
+ end
72
+
73
+ Traxor::Metric.count(Animals::FlyingBird, 1)
74
+
75
+ Ouputs:
76
+
77
+ 'count#animals.flying_bird=1'
78
+ ```
79
+
80
+ ### Metrics Recorded:
81
+
82
+ All measure metrics are recorded in milliseconds. All count metrics are whole numbers.
83
+
84
+ #### Rails
85
+
86
+ Traxor records a number of metrics using [Rails instrumentation](http://guides.rubyonrails.org/active_support_instrumentation.html).
87
+ It will also insert a rack middleware at the start of the request and another at the end right before your application code is run.
88
+ This allows us to calculate how much time was spent in the rack middleware outside of your ActionController action.
89
+
90
+ Tags:
91
+
92
+ Traxor will track and log the controller name, action, and http method as tags on each request for you:
93
+
94
+ ```
95
+ tags = { controller_name: 'MyController', controller_action: 'index', controller_method: :GET }
96
+ ```
97
+
98
+ These tags will be applied to any metrics recorded during that request. So ActiveRecord metrics will
99
+ also have these tags if it occurs during the request.
100
+
101
+ Rails request:
102
+
103
+ ```
104
+ count#rails.action_controller.count <- increment request count of controller action
105
+ measure#rails.action_controller.total_duration <- total duration of request inside controller action
106
+ measure#rails.action_controller.ruby.duration <- duration of time not spent in the view or db in the controller action
107
+ measure#rails.action_controller.db.duration <- duration of time spend in the db
108
+ measure#rails.action_controller.view.duration <- duration of time spend in the view layer
109
+ count#rails.action_controller.exception.count <- increment exceptions count
110
+ ```
111
+
112
+ Rack request:
113
+
114
+ ```
115
+ measure#rack.request.middleware.duration <- time spent in middleware outside of your rack application
116
+ measure#rack.request.duration <- total duration of the request
117
+ measure#rack.request.queue.duration <- duration of time spent from when your router received the request before your application started to process it
118
+ measure#count.rack.request.count <- increment rack request count
119
+ ```
120
+
121
+ Note that the request queue time will read the `X-Request-Start` header in the request and calculate the number.
122
+ This is optional and does not have to be set. See [request queue server configuration examples](https://docs.newrelic.com/docs/apm/applications-menu/features/request-queue-server-configuration-examples)
123
+ for examples of how to configure this in your router.
124
+
125
+ GC During a Rack request:
126
+
127
+ ```
128
+ measure#ruby.gc.duration <- total time spent in garage collection in a rack request
129
+ count#ruby.gc.count <- total number of gc runs during a rack request
130
+ count#ruby.gc.major.count <- total major gc runs during a rack request
131
+ count#ruby.gc.minor.count <- total minor gc runs during a rack request
132
+ count#ruby.gc.allocated_objects.count <- total number of new objects loaded into memory during a rack request
133
+ ```
134
+
135
+ Note that the GC metrics are recorded by taking a sample before and after the request then calculating the delata.
136
+ As GC stats are per process, it is not a completely accurate way of recording things strictly during that request.
137
+ Other requests are also happening and throwing off these numbers. But it should help to give you an idea.
138
+
139
+ We also enable the `GC::Profiler` which does have a performance cost. In the future we could make this configurable.
140
+
141
+ ActiveRecord:
142
+
143
+ ```
144
+ count#rails.active_record.statements.count tag#active_record_class_name=user <- total number of sql statements run tagged by active_record_class_name
145
+ count#rails.active_record.statements.select.count tag#active_record_class_name=user <- total number of select statements run tagged by active_record_class_name
146
+ count#rails.active_record.statements.insert.count tag#active_record_class_name=user <- total number of insert statements run tagged by active_record_class_name
147
+ count#rails.active_record.statements.update.count tag#active_record_class_name=user <- total number of update statements run tagged by active_record_class_name
148
+ count#rails.active_record.statements.delete.count tag#active_record_class_name=user <- total number of delete statements run tagged by active_record_class_name
149
+ count#rails.active_record.instantiation.count tag#active_record_class_name=user <- total number of ActiveRecord objects loaded from the db tagged by active_record_class_name
150
+ ```
151
+
152
+ Note that these metrics will automatically be tagged with ActionController or Sidekiq tags if run during a request or worker.
153
+
154
+ ActionMailer:
155
+
156
+ ```
157
+ count#rails.action_mailer.sent.count tag#mailer=user_mailer <- number of emails sent tagged by mailer name
158
+ ```
159
+
160
+ Faraday:
161
+
162
+ To instrument requests to other sites include the [instrumentation middleware](https://github.com/lostisland/faraday_middleware/wiki/Instrumentation).
163
+
164
+ ```
165
+ count#faraday.request.count tag#faraday_host=www.google.com tag#farday_method=get <- increment the request count tagged with host and method
166
+ measure#faraday.request.duration tag#faraday_host=www.google.com tag#farday_method=get <- duration of request tagged with host and method
167
+ ```
168
+
169
+ Sidekiq:
170
+
171
+ ```
172
+ measure#sidekiq.worker.duration tag#sidekiq_worker=my_worker tag#sidekiq_queue=default <- duration worker ran for tagged by sidekiq_worker and sidekiq_queue
173
+ count#sidekiq.worker.cout tag#sidekiq_worker=my_worker tag#sidekiq_queue=default <- increment worker count tagged by sidekiq_worker and sidekiq_queue
174
+ count#sidekiq.worker.exception.count tag#sidekiq_worker=my_worker tag#sidekiq_queue=default <- increment exception count tagged by sidekiq_worker and sidekiq_queue
175
+ ```
176
+
177
+ Just like the controller tags, the Sidekiq tags will apply to any other metric recorded during a worker.
26
178
 
27
179
  ## Development
28
180
 
@@ -32,4 +184,4 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
184
 
33
185
  ## Contributing
34
186
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/traxor.
187
+ Bug reports and pull requests are welcome on GitHub at https://github.com/ketiko/traxor.
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
 
data/bin/_guard-core ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application '_guard-core' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require 'pathname'
12
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path('bundle', __dir__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if /This file was generated by Bundler/.match?(File.read(bundle_binstub, 150))
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require 'rubygems'
27
+ require 'bundler/setup'
28
+
29
+ load Gem.bin_path('guard', '_guard-core')
data/bin/appraisal ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'appraisal' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require 'pathname'
12
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path('bundle', __dir__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if /This file was generated by Bundler/.match?(File.read(bundle_binstub, 150))
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require 'rubygems'
27
+ require 'bundler/setup'
28
+
29
+ load Gem.bin_path('appraisal', 'appraisal')
@@ -15,7 +15,7 @@ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
15
15
  bundle_binstub = File.expand_path('bundle', __dir__)
16
16
 
17
17
  if File.file?(bundle_binstub)
18
- if File.read(bundle_binstub, 150) =~ /This file was generated by Bundler/
18
+ if /This file was generated by Bundler/.match?(File.read(bundle_binstub, 150))
19
19
  load(bundle_binstub)
20
20
  else
21
21
  abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
data/bin/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'traxor'
data/bin/{lois → guard} RENAMED
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # This file was generated by Bundler.
6
6
  #
7
- # The application 'lois' is installed as part of a gem, and
7
+ # The application 'guard' is installed as part of a gem, and
8
8
  # this file is here to facilitate running it.
9
9
  #
10
10
 
@@ -15,7 +15,7 @@ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
15
15
  bundle_binstub = File.expand_path('bundle', __dir__)
16
16
 
17
17
  if File.file?(bundle_binstub)
18
- if File.read(bundle_binstub, 150) =~ /This file was generated by Bundler/
18
+ if /This file was generated by Bundler/.match?(File.read(bundle_binstub, 150))
19
19
  load(bundle_binstub)
20
20
  else
21
21
  abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
@@ -26,4 +26,4 @@ end
26
26
  require 'rubygems'
27
27
  require 'bundler/setup'
28
28
 
29
- load Gem.bin_path('lois', 'lois')
29
+ load Gem.bin_path('guard', 'guard')
data/bin/rake CHANGED
@@ -15,7 +15,7 @@ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
15
15
  bundle_binstub = File.expand_path('bundle', __dir__)
16
16
 
17
17
  if File.file?(bundle_binstub)
18
- if File.read(bundle_binstub, 150) =~ /This file was generated by Bundler/
18
+ if /This file was generated by Bundler/.match?(File.read(bundle_binstub, 150))
19
19
  load(bundle_binstub)
20
20
  else
21
21
  abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
data/bin/reek CHANGED
@@ -15,7 +15,7 @@ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
15
15
  bundle_binstub = File.expand_path('bundle', __dir__)
16
16
 
17
17
  if File.file?(bundle_binstub)
18
- if File.read(bundle_binstub, 150) =~ /This file was generated by Bundler/
18
+ if /This file was generated by Bundler/.match?(File.read(bundle_binstub, 150))
19
19
  load(bundle_binstub)
20
20
  else
21
21
  abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
data/bin/rspec CHANGED
@@ -15,7 +15,7 @@ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
15
15
  bundle_binstub = File.expand_path('bundle', __dir__)
16
16
 
17
17
  if File.file?(bundle_binstub)
18
- if File.read(bundle_binstub, 150) =~ /This file was generated by Bundler/
18
+ if /This file was generated by Bundler/.match?(File.read(bundle_binstub, 150))
19
19
  load(bundle_binstub)
20
20
  else
21
21
  abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
data/bin/rubocop CHANGED
@@ -15,7 +15,7 @@ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
15
15
  bundle_binstub = File.expand_path('bundle', __dir__)
16
16
 
17
17
  if File.file?(bundle_binstub)
18
- if File.read(bundle_binstub, 150) =~ /This file was generated by Bundler/
18
+ if /This file was generated by Bundler/.match?(File.read(bundle_binstub, 150))
19
19
  load(bundle_binstub)
20
20
  else
21
21
  abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_RETRY: "1"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activesupport", "~> 5.0"
6
+
7
+ gemspec path: "../"