better_errors 2.4.0 → 2.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +130 -0
  3. data/.github/workflows/release.yml +64 -0
  4. data/.ruby-version +1 -0
  5. data/CHANGELOG.md +1 -1
  6. data/Gemfile +6 -0
  7. data/README.md +40 -8
  8. data/better_errors.gemspec +13 -2
  9. data/gemfiles/pry010.gemfile +2 -1
  10. data/gemfiles/pry011.gemfile +2 -1
  11. data/gemfiles/pry09.gemfile +2 -1
  12. data/gemfiles/rack.gemfile +2 -1
  13. data/gemfiles/rack_boc.gemfile +2 -1
  14. data/gemfiles/rails42.gemfile +3 -1
  15. data/gemfiles/rails42_boc.gemfile +3 -1
  16. data/gemfiles/rails42_haml.gemfile +3 -1
  17. data/gemfiles/rails50.gemfile +3 -1
  18. data/gemfiles/rails50_boc.gemfile +3 -1
  19. data/gemfiles/rails50_haml.gemfile +3 -1
  20. data/gemfiles/rails51.gemfile +3 -1
  21. data/gemfiles/rails51_boc.gemfile +3 -1
  22. data/gemfiles/rails51_haml.gemfile +3 -1
  23. data/gemfiles/rails52.gemfile +9 -0
  24. data/gemfiles/rails52_boc.gemfile +10 -0
  25. data/gemfiles/rails52_haml.gemfile +10 -0
  26. data/gemfiles/rails60.gemfile +8 -0
  27. data/gemfiles/rails60_boc.gemfile +9 -0
  28. data/gemfiles/rails60_haml.gemfile +9 -0
  29. data/lib/better_errors.rb +23 -32
  30. data/lib/better_errors/editor.rb +99 -0
  31. data/lib/better_errors/error_page.rb +37 -24
  32. data/lib/better_errors/exception_hint.rb +29 -0
  33. data/lib/better_errors/inspectable_value.rb +45 -0
  34. data/lib/better_errors/middleware.rb +59 -12
  35. data/lib/better_errors/raised_exception.rb +25 -4
  36. data/lib/better_errors/stack_frame.rb +25 -7
  37. data/lib/better_errors/templates/main.erb +78 -24
  38. data/lib/better_errors/templates/text.erb +5 -2
  39. data/lib/better_errors/templates/variable_info.erb +9 -2
  40. data/lib/better_errors/version.rb +1 -1
  41. metadata +37 -10
  42. data/.travis.yml +0 -68
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 27b27931ec5b8e074bac10e095d6c842dbeab9fc
4
- data.tar.gz: b7631911ff716069a371bf30b060241c08d4916d
2
+ SHA256:
3
+ metadata.gz: 4526a605f0982bee6fd507b813eca6e7185bad35bd14ecd289a0a269afe4ec5e
4
+ data.tar.gz: 897e7c5a8fd3350b6cba2b1e46feccb872ed519d45d169dbbde9e6ab1c7387ad
5
5
  SHA512:
6
- metadata.gz: cb6451b31dd661e6c966411814522e2c06bc9e19070468b91cdb2f3b46f0160e2ccdd8d38aac0c4ce1e5d83b894aa01478a8b6ddecbb2ff3123cc3b901f29aaf
7
- data.tar.gz: ea83fb1c88433f2f3df9cd7794996896d05956893bde09772b9bc85d4c12e63640162d860660b7ede93c7fbe393ed89611e20c77a1d99e1bf18f41a5c6f00a9f
6
+ metadata.gz: 6e9116392957f7941b7217a1e08226587081d55904c6e4722d7af28aba0e47d376f886702e958db5f7d02dfaf1480fe686af154fdf500ff817a67e46c5144a30
7
+ data.tar.gz: ad5453cf355f951ad5db132454934ebe5efbdfc339f4607985d76ddb9f430a06c55e95dbffdf944ce33c63b344d4a0ef632176d4b3da00d4db4f3561c02acf39
@@ -0,0 +1,130 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ schedule:
7
+ - cron: '0 0 12,26 * *' # roughly every two weeks to run on new Ruby versions
8
+ pull_request:
9
+ branches: [ master ]
10
+ workflow_dispatch:
11
+
12
+ jobs:
13
+ test:
14
+ runs-on: ubuntu-latest
15
+ strategy:
16
+ fail-fast: false
17
+ matrix:
18
+ ruby:
19
+ - 2.2
20
+ - 2.3
21
+ - 2.4
22
+ - 2.5
23
+ - 2.6
24
+ - 2.7
25
+ # - ruby-head
26
+ # - truffleruby-head
27
+ gemfile:
28
+ # These are located in the gemfiles/ folder
29
+ - rails42
30
+ - rails50
31
+ - rails51
32
+ - rails52
33
+ - rails60
34
+ - rails42_haml
35
+ - rails50_haml
36
+ - rails51_haml
37
+ - rails52_haml
38
+ - rails60_haml
39
+ - rails42_boc
40
+ - rails50_boc
41
+ - rails51_boc
42
+ - rails52_boc
43
+ - rails60_boc
44
+ - rack
45
+ - rack_boc
46
+ # - pry09
47
+ # - pry10
48
+ # - pry11
49
+ exclude:
50
+ - { ruby: 2.2, gemfile: rails60 }
51
+ - { ruby: 2.2, gemfile: rails60_boc }
52
+ - { ruby: 2.2, gemfile: rails60_haml }
53
+ - { ruby: 2.3, gemfile: rails42 }
54
+ - { ruby: 2.3, gemfile: rails42_boc }
55
+ - { ruby: 2.3, gemfile: rails42_haml }
56
+ - { ruby: 2.3, gemfile: rails60 }
57
+ - { ruby: 2.3, gemfile: rails60_boc }
58
+ - { ruby: 2.3, gemfile: rails60_haml }
59
+ - { ruby: 2.4, gemfile: rails42 }
60
+ - { ruby: 2.4, gemfile: rails42_boc }
61
+ - { ruby: 2.4, gemfile: rails42_haml }
62
+ - { ruby: 2.4, gemfile: rails60 }
63
+ - { ruby: 2.4, gemfile: rails60_boc }
64
+ - { ruby: 2.4, gemfile: rails60_haml }
65
+ - { ruby: 2.5, gemfile: rails42 }
66
+ - { ruby: 2.5, gemfile: rails42_boc }
67
+ - { ruby: 2.5, gemfile: rails42_haml }
68
+ - { ruby: 2.6, gemfile: rails42 }
69
+ - { ruby: 2.6, gemfile: rails42_boc }
70
+ - { ruby: 2.6, gemfile: rails42_haml }
71
+ - { ruby: 2.7, gemfile: rails42 }
72
+ - { ruby: 2.7, gemfile: rails42_boc }
73
+ - { ruby: 2.7, gemfile: rails42_haml }
74
+ # - { ruby: ruby-head, gemfile: rails42 }
75
+ # - { ruby: ruby-head, gemfile: rails42_boc }
76
+ # - { ruby: ruby-head, gemfile: rails42_haml }
77
+ - { ruby: truffleruby-head, gemfile: rails42_boc }
78
+ - { ruby: truffleruby-head, gemfile: rails50_boc }
79
+ - { ruby: truffleruby-head, gemfile: rails51_boc }
80
+ - { ruby: truffleruby-head, gemfile: rails52_boc }
81
+ - { ruby: truffleruby-head, gemfile: rails60_boc }
82
+ - { ruby: truffleruby-head, gemfile: rack_boc }
83
+
84
+ steps:
85
+
86
+ - uses: actions/checkout@v2
87
+
88
+ - name: Set up Ruby
89
+ uses: ruby/setup-ruby@v1
90
+ with:
91
+ ruby-version: ${{ matrix.ruby }}
92
+
93
+ - uses: actions/cache@v2
94
+ with:
95
+ path: gemfiles/vendor/bundle
96
+ key: v3-${{ runner.os }}-branch-${{ github.ref }}-ruby-${{ matrix.ruby }}-gemfile-${{ matrix.gemfile }}-${{ hashFiles(format('gemfiles/{0}.gemfile', matrix.gemfile)) }}
97
+ restore-keys: |
98
+ v3-${{ runner.os }}-branch-${{ github.ref }}-ruby-${{ matrix.ruby }}-gemfile-${{ matrix.gemfile }}
99
+ v3-${{ runner.os }}-branch-master-ruby-${{ matrix.ruby }}-gemfile-${{ matrix.gemfile }}
100
+
101
+ - name: Bundle install
102
+ run: |
103
+ bundle config path vendor/bundle
104
+ bundle install --jobs 4 --retry 3
105
+ env:
106
+ BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
107
+
108
+ - name: RSpec
109
+ run: bundle exec rspec -f doc --color
110
+ env:
111
+ BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
112
+
113
+ - name: Report to Coveralls
114
+ uses: coverallsapp/github-action@v1.1.2
115
+ with:
116
+ github-token: ${{ secrets.github_token }}
117
+ flag-name: test-${{ matrix.ruby }}-${{ matrix.gemfile }}
118
+ parallel: true
119
+
120
+
121
+ finish:
122
+ needs: test
123
+ runs-on: ubuntu-latest
124
+ steps:
125
+
126
+ - name: Report completion to Coveralls
127
+ uses: coverallsapp/github-action@v1.1.2
128
+ with:
129
+ github-token: ${{ secrets.github_token }}
130
+ parallel-finished: true
@@ -0,0 +1,64 @@
1
+ name: Release
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build:
9
+ runs-on: ubuntu-latest
10
+
11
+ steps:
12
+
13
+ - uses: actions/checkout@v2
14
+
15
+ - name: Set up Ruby
16
+ uses: ruby/setup-ruby@v1
17
+ with:
18
+ ruby-version: 2.7
19
+
20
+ - uses: actions/cache@v2
21
+ with:
22
+ path: vendor/bundle
23
+ key: v1-${{ runner.os }}-${{ hashFiles('Gemfile', 'better_errors.gemspec') }}
24
+ restore-keys: |
25
+ v1-${{ runner.os }}
26
+
27
+ - name: Bundle install
28
+ run: |
29
+ bundle config path vendor/bundle
30
+ bundle install --jobs 4 --retry 3
31
+
32
+ - name: Get release version
33
+ id: get_version
34
+ run: |
35
+ version="${github_ref//refs\/tags\/v/}"
36
+ echo "${version}"
37
+ echo "::set-output name=version::${version}"
38
+ env:
39
+ github_ref: ${{ github.ref }}
40
+
41
+ - name: Get Release
42
+ id: get_release
43
+ uses: bruceadams/get-release@v1.2.2
44
+ env:
45
+ GITHUB_TOKEN: ${{ github.token }}
46
+
47
+ - name: Set gem version
48
+ run: |
49
+ bundle exec gem bump better_errors --version ${{ steps.get_version.outputs.version }} --no-commit
50
+
51
+ - name: Build gem
52
+ run: gem build better_errors.gemspec
53
+
54
+ - name: Upload gem to Release
55
+ uses: actions/upload-release-asset@v1
56
+ env:
57
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
58
+ with:
59
+ upload_url: ${{ steps.get_release.outputs.upload_url }}
60
+ asset_path: ./better_errors-${{ steps.get_version.outputs.version }}.gem
61
+ asset_name: better_errors-${{ steps.get_version.outputs.version }}.gem
62
+ asset_content_type: application/octet-stream
63
+
64
+ # TODO: if this release is on master, add a commit updating the version in master.
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.7.2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,3 @@
1
1
  # Changelog
2
2
 
3
- See https://github.com/charliesome/better_errors/releases
3
+ See https://github.com/BetterErrors/better_errors/releases
data/Gemfile CHANGED
@@ -2,4 +2,10 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
+ gem 'simplecov', require: false
6
+ gem 'simplecov-lcov', require: false
7
+
8
+ # For managing release version in CI
9
+ gem 'gem-release'
10
+
5
11
  # gem "pry-byebug"
data/README.md CHANGED
@@ -1,17 +1,17 @@
1
- [![Build Status](https://travis-ci.org/charliesome/better_errors.svg)](https://travis-ci.org/charliesome/better_errors)
2
- [![Code Climate](https://img.shields.io/codeclimate/github/charliesome/better_errors.svg)](https://codeclimate.com/github/charliesome/better_errors)
3
- [![Coverage](https://coveralls.io/repos/github/charliesome/better_errors/badge.svg?branch=master)](https://coveralls.io/github/charliesome/better_errors?branch=master)
1
+ [![Build Status](https://github.com/BetterErrors/better_errors/workflows/CI/badge.svg?event=push&branch=master)](https://github.com/BetterErrors/better_errors/actions?query=branch%3Amaster)
2
+ [![Codacy Badge](https://api.codacy.com/project/badge/Grade/6bc3e7d6118d47e6959b16690b815909)](https://www.codacy.com/app/BetterErrors/better_errors?utm_source=github.com&utm_medium=referral&utm_content=BetterErrors/better_errors&utm_campaign=Badge_Grade)
3
+ [![Test Coverage](https://coveralls.io/repos/github/BetterErrors/better_errors/badge.svg?branch=master)](https://coveralls.io/github/BetterErrors/better_errors?branch=master)
4
4
  [![Gem Version](https://img.shields.io/gem/v/better_errors.svg)](https://rubygems.org/gems/better_errors)
5
5
 
6
6
  # Better Errors
7
7
 
8
8
  Better Errors replaces the standard Rails error page with a much better and more useful error page. It is also usable outside of Rails in any Rack app as Rack middleware.
9
9
 
10
- ![image](https://i.imgur.com/6zBGAAb.png)
10
+ ![screenshot of Better Errors in action](https://i.imgur.com/6zBGAAb.png)
11
11
 
12
12
  ## Features
13
13
 
14
- For screenshots of these features, [see the wiki](https://github.com/charliesome/better_errors/wiki).
14
+ For screenshots of these features, [see the wiki](https://github.com/BetterErrors/better_errors/wiki).
15
15
 
16
16
  * Full stack trace
17
17
  * Source code inspection for all stack frames (with highlighting)
@@ -35,6 +35,28 @@ end
35
35
 
36
36
  _Note: If you discover that Better Errors isn't working - particularly after upgrading from version 0.5.0 or less - be sure to set `config.consider_all_requests_local = true` in `config/environments/development.rb`._
37
37
 
38
+ ### Optional: Set `EDITOR`
39
+
40
+ For many reasons outside of Better Errors, you should have the `EDITOR` environment variable set to your preferred
41
+ editor.
42
+ Better Errors, like many other tools, will use that environment variable to show a link that opens your
43
+ editor to the file and line from the console.
44
+
45
+ By default the links will open TextMate-protocol links.
46
+
47
+ To see if your editor is supported or to set up a different editor, see [the wiki](https://github.com/BetterErrors/better_errors/wiki/Link-to-your-editor).
48
+
49
+ ### Optional: Set `BETTER_ERRORS_INSIDE_FRAME`
50
+
51
+ If your application is running inside of an iframe, or if you have a Content Security Policy that disallows links
52
+ to other protocols, the editor links will not work.
53
+
54
+ To work around this set `BETTER_ERRORS_INSIDE_FRAME=1` in the environment, and the links will include `target=_blank`,
55
+ allowing the link to open regardless of the policy.
56
+
57
+ _This works because it opens the editor from a new browser tab, escaping from the restrictions of your site._
58
+ _Unfortunately it leaves behind an empty tab each time, so only use this if needed._
59
+
38
60
  ## Security
39
61
 
40
62
  **NOTE:** It is *critical* you put better\_errors only in the **development** section of your Gemfile.
@@ -43,7 +65,7 @@ _Note: If you discover that Better Errors isn't working - particularly after upg
43
65
  You will notice that the only machine that gets the Better Errors page is localhost, which means you get the default error page if you are developing on a remote host (or a virtually remote host, such as a Vagrant box).
44
66
  Obviously, the REPL is not something you want to expose to the public, and there may be sensitive information available in the backtrace.
45
67
 
46
- For more information on how to configure access, see [the wiki](https://github.com/charliesome/better_errors/wiki/Allowing-access-to-the-console).
68
+ For more information on how to configure access, see [the wiki](https://github.com/BetterErrors/better_errors/wiki/Allowing-access-to-the-console).
47
69
 
48
70
  ## Usage
49
71
 
@@ -53,7 +75,7 @@ If you're using Rails, there's nothing else you need to do.
53
75
 
54
76
  If you're not using Rails, you need to insert `BetterErrors::Middleware` into your middleware stack, and optionally set `BetterErrors.application_root` if you'd like Better Errors to abbreviate filenames within your application.
55
77
 
56
- For instructions for your specific middleware, [see the wiki](https://github.com/charliesome/better_errors/wiki/Non-Rails-frameworks).
78
+ For instructions for your specific middleware, [see the wiki](https://github.com/BetterErrors/better_errors/wiki/Non-Rails-frameworks).
57
79
 
58
80
  ### Plain text requests
59
81
 
@@ -78,7 +100,7 @@ to troubleshoot an issue in development.
78
100
 
79
101
  Better Errors includes a link to your editor for the file and line of code that is being shown.
80
102
  By default, it uses your environment to determine which editor should be opened.
81
- See [the wiki for instructions on configuring the editor](https://github.com/charliesome/better_errors/wiki/Link-to-your-editor).
103
+ See [the wiki for instructions on configuring the editor](https://github.com/BetterErrors/better_errors/wiki/Link-to-your-editor).
82
104
 
83
105
 
84
106
  ## Set maximum variable size for inspector.
@@ -93,6 +115,16 @@ See [the wiki for instructions on configuring the editor](https://github.com/cha
93
115
  BetterErrors.maximum_variable_inspect_size = 100_000
94
116
  ```
95
117
 
118
+ ## Ignore inspection of variables with certain classes.
119
+
120
+ ```ruby
121
+ # e.g. in config/initializers/better_errors.rb
122
+ # This will stop BetterErrors from trying to inspect objects of these classes, which can cause
123
+ # slow loading times and unneccessary database queries. Does not check inheritance chain, use
124
+ # strings not contants.
125
+ # default value: ['ActionDispatch::Request', 'ActionDispatch::Response']
126
+ BetterErrors.ignored_classes = ['ActionDispatch::Request', 'ActionDispatch::Response']
127
+ ```
96
128
 
97
129
  ## Get in touch!
98
130
 
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.email = ["charlie@charliesomerville.com"]
10
10
  s.description = %q{Provides a better error page for Rails and other Rack apps. Includes source code inspection, a live REPL and local/instance variable inspection for all stack frames.}
11
11
  s.summary = %q{Better error page for Rails and other Rack apps}
12
- s.homepage = "https://github.com/charliesome/better_errors"
12
+ s.homepage = "https://github.com/BetterErrors/better_errors"
13
13
  s.license = "MIT"
14
14
 
15
15
  s.files = `git ls-files -z`.split("\x0").reject do |f|
@@ -22,9 +22,12 @@ Gem::Specification.new do |s|
22
22
 
23
23
  s.add_development_dependency "rake", "~> 10.0"
24
24
  s.add_development_dependency "rspec", "~> 3.5"
25
+ s.add_development_dependency "rspec-html-matchers"
25
26
  s.add_development_dependency "rspec-its"
26
27
  s.add_development_dependency "yard"
27
- s.add_development_dependency "kramdown"
28
+ # kramdown 2.1 requires Ruby 2.3+
29
+ s.add_development_dependency "kramdown", (RUBY_VERSION < '2.3' ? '< 2.0.0' : '> 2.0.0')
30
+ # simplecov and coveralls must not be included here. See the Gemfiles instead.
28
31
 
29
32
  s.add_dependency "erubi", ">= 1.0.0"
30
33
  s.add_dependency "coderay", ">= 1.0.0"
@@ -33,4 +36,12 @@ Gem::Specification.new do |s|
33
36
  # optional dependencies:
34
37
  # s.add_dependency "binding_of_caller"
35
38
  # s.add_dependency "pry"
39
+
40
+ if s.respond_to?(:metadata)
41
+ s.metadata['changelog_uri'] = 'https://github.com/BetterErrors/better_errors/releases'
42
+ s.metadata['source_code_uri'] = 'https://github.com/BetterErrors/better_errors'
43
+ s.metadata['bug_tracker_uri'] = 'https://github.com/BetterErrors/better_errors/issues'
44
+ else
45
+ puts "Your RubyGems does not support metadata. Update if you'd like to make a release."
46
+ end
36
47
  end
@@ -4,6 +4,7 @@ gem 'rack', RUBY_VERSION < '2.2.2' ? '~> 1.6' : '~> 2.0'
4
4
  gem "binding_of_caller"
5
5
  gem "pry", "~> 0.10.0"
6
6
 
7
- gem 'coveralls', require: false
7
+ gem 'simplecov', require: false
8
+ gem 'simplecov-lcov', require: false
8
9
 
9
10
  gemspec path: "../"
@@ -3,6 +3,7 @@ source "https://rubygems.org"
3
3
  gem 'rack', RUBY_VERSION < '2.2.2' ? '~> 1.6' : '~> 2.0'
4
4
  gem "pry", "~> 0.11.0pre"
5
5
 
6
- gem 'coveralls', require: false
6
+ gem 'simplecov', require: false
7
+ gem 'simplecov-lcov', require: false
7
8
 
8
9
  gemspec path: "../"
@@ -3,6 +3,7 @@ source "https://rubygems.org"
3
3
  gem 'rack', RUBY_VERSION < '2.2.2' ? '~> 1.6' : '~> 2.0'
4
4
  gem "pry", "~> 0.9.12"
5
5
 
6
- gem 'coveralls', require: false
6
+ gem 'simplecov', require: false
7
+ gem 'simplecov-lcov', require: false
7
8
 
8
9
  gemspec path: "../"
@@ -2,6 +2,7 @@ source "https://rubygems.org"
2
2
 
3
3
  gem 'rack', RUBY_VERSION < '2.2.2' ? '~> 1.6' : '~> 2.0'
4
4
 
5
- gem 'coveralls', require: false
5
+ gem 'simplecov', require: false
6
+ gem 'simplecov-lcov', require: false
6
7
 
7
8
  gemspec path: "../"
@@ -3,6 +3,7 @@ source "https://rubygems.org"
3
3
  gem 'rack', RUBY_VERSION < '2.2.2' ? '~> 1.6' : '~> 2.0'
4
4
  gem "binding_of_caller"
5
5
 
6
- gem 'coveralls', require: false
6
+ gem 'simplecov', require: false
7
+ gem 'simplecov-lcov', require: false
7
8
 
8
9
  gemspec path: "../"
@@ -2,7 +2,9 @@ source "https://rubygems.org"
2
2
 
3
3
  gem "rails", "~> 4.2.0"
4
4
  gem 'nokogiri', RUBY_VERSION < '2.1' ? '~> 1.6.0' : '>= 1.7'
5
+ gem 'i18n', '< 1.5.2' if RUBY_VERSION < '2.3'
5
6
 
6
- gem 'coveralls', require: false
7
+ gem 'simplecov', require: false
8
+ gem 'simplecov-lcov', require: false
7
9
 
8
10
  gemspec path: "../"
@@ -2,8 +2,10 @@ source "https://rubygems.org"
2
2
 
3
3
  gem "rails", "~> 4.2.0"
4
4
  gem 'nokogiri', RUBY_VERSION < '2.1' ? '~> 1.6.0' : '>= 1.7'
5
+ gem 'i18n', '< 1.5.2' if RUBY_VERSION < '2.3'
5
6
  gem "binding_of_caller"
6
7
 
7
- gem 'coveralls', require: false
8
+ gem 'simplecov', require: false
9
+ gem 'simplecov-lcov', require: false
8
10
 
9
11
  gemspec path: "../"
@@ -2,8 +2,10 @@ source "https://rubygems.org"
2
2
 
3
3
  gem "rails", "~> 4.2.0"
4
4
  gem 'nokogiri', RUBY_VERSION < '2.1' ? '~> 1.6.0' : '>= 1.7'
5
+ gem 'i18n', '< 1.5.2' if RUBY_VERSION < '2.3'
5
6
  gem "haml"
6
7
 
7
- gem 'coveralls', require: false
8
+ gem 'simplecov', require: false
9
+ gem 'simplecov-lcov', require: false
8
10
 
9
11
  gemspec path: "../"