loaf 0.5.0 → 0.6.0

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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -3
  3. data/.rspec +1 -0
  4. data/.travis.yml +30 -12
  5. data/Appraisals +27 -9
  6. data/CHANGELOG.md +59 -11
  7. data/Gemfile +11 -11
  8. data/Gemfile.lock +182 -0
  9. data/README.md +120 -56
  10. data/assets/loaf_logo.png +0 -0
  11. data/bin/appraisal +16 -0
  12. data/bin/rake +16 -0
  13. data/gemfiles/rails3.2.gemfile +15 -13
  14. data/gemfiles/rails4.0.gemfile +13 -12
  15. data/gemfiles/rails4.1.gemfile +14 -13
  16. data/gemfiles/rails4.2.gemfile +14 -13
  17. data/gemfiles/rails5.0.gemfile +22 -0
  18. data/gemfiles/rails5.1.gemfile +22 -0
  19. data/lib/loaf.rb +2 -22
  20. data/lib/loaf/breadcrumb.rb +30 -0
  21. data/lib/loaf/configuration.rb +7 -8
  22. data/lib/loaf/controller_extensions.rb +13 -28
  23. data/lib/loaf/crumb.rb +5 -4
  24. data/lib/loaf/crumb_formatter.rb +3 -1
  25. data/lib/loaf/errors.rb +1 -3
  26. data/lib/loaf/options_validator.rb +2 -2
  27. data/lib/loaf/railtie.rb +19 -13
  28. data/lib/loaf/translation.rb +1 -1
  29. data/lib/loaf/version.rb +1 -3
  30. data/lib/loaf/view_extensions.rb +69 -18
  31. data/loaf.gemspec +20 -13
  32. data/spec/integration/{crumbs_routing_spec.rb → breadcrumb_trail_spec.rb} +19 -12
  33. data/spec/rails_app/app/controllers/application_controller.rb +2 -0
  34. data/spec/rails_app/app/controllers/posts_controller.rb +1 -4
  35. data/spec/rails_app/app/views/layouts/_breadcrumbs.html.erb +7 -5
  36. data/spec/rails_app/app/views/layouts/application.html.erb +0 -2
  37. data/spec/rails_app/config/environments/test.rb +1 -1
  38. data/spec/rails_app/config/secrets.yml +22 -0
  39. data/spec/spec_helper.rb +3 -3
  40. data/spec/support/dummy_controller.rb +9 -0
  41. data/spec/support/dummy_view.rb +42 -2
  42. data/spec/unit/configuration_spec.rb +35 -0
  43. data/spec/unit/controller_extensions_spec.rb +5 -14
  44. data/spec/unit/generators/install_generator_spec.rb +2 -1
  45. data/spec/unit/view_extensions/breadcrumb_trail_spec.rb +232 -0
  46. metadata +65 -31
  47. data/.ruby-version +0 -1
  48. data/init.rb +0 -3
  49. data/lib/loaf/builder.rb +0 -38
  50. data/spec/rails_app/.gitignore +0 -5
  51. data/spec/rails_app/lib/assets/.gitkeep +0 -0
  52. data/spec/rails_app/lib/tasks/.gitkeep +0 -0
  53. data/spec/rails_app/script/rails +0 -6
  54. data/spec/unit/view_extensions/breadcrumbs_spec.rb +0 -128
data/README.md CHANGED
@@ -1,27 +1,32 @@
1
+ <div align="center">
2
+ <img width="237" src="https://cdn.rawgit.com/piotrmurach/loaf/master/assets/loaf_logo.png" alt="loaf logo" />
3
+ </div>
4
+
1
5
  # Loaf
2
- [![Gem Version](https://badge.fury.io/rb/loaf.png)][gem]
3
- [![Build Status](https://secure.travis-ci.org/peter-murach/loaf.png?branch=master)][travis]
4
- [![Code Climate](https://codeclimate.com/github/peter-murach/loaf.png)][codeclimate]
5
- [![Dependency Status](https://gemnasium.com/peter-murach/loaf.png?travis)][gemnasium]
6
- [![Coverage Status](https://coveralls.io/repos/peter-murach/loaf/badge.png?branch=master)][coveralls]
7
- [![Inline docs](http://inch-ci.org/github/peter-murach/loaf.png?branch=master)][inchpages]
6
+
7
+ [![Gem Version](https://badge.fury.io/rb/loaf.svg)][gem]
8
+ [![Build Status](https://secure.travis-ci.org/piotrmurach/loaf.svg?branch=master)][travis]
9
+ [![Code Climate](https://codeclimate.com/github/piotrmurach/loaf/badges/gpa.svg)][codeclimate]
10
+ [![Dependency Status](https://gemnasium.com/piotrmurach/loaf.svg?travis)][gemnasium]
11
+ [![Coverage Status](https://coveralls.io/repos/github/piotrmurach/loaf/badge.svg?branch=master)][coveralls]
12
+ [![Inline docs](http://inch-ci.org/github/piotrmurach/loaf.svg?branch=master)][inchpages]
8
13
 
9
14
  [gem]: http://badge.fury.io/rb/loaf
10
- [travis]: http://travis-ci.org/peter-murach/loaf
11
- [codeclimate]: https://codeclimate.com/github/peter-murach/loaf
12
- [gemnasium]: https://gemnasium.com/peter-murach/loaf
13
- [coveralls]: https://coveralls.io/r/peter-murach/loaf
14
- [inchpages]: http://inch-ci.org/github/peter-murach/loaf
15
+ [travis]: http://travis-ci.org/piotrmurach/loaf
16
+ [codeclimate]: https://codeclimate.com/github/piotrmurach/loaf
17
+ [gemnasium]: https://gemnasium.com/piotrmurach/loaf
18
+ [coveralls]: https://coveralls.io/github/piotrmurach/loaf
19
+ [inchpages]: http://inch-ci.org/github/piotrmurach/loaf
15
20
 
16
21
  > **Loaf** manages and displays breadcrumb trails in your Rails application.
17
22
 
18
23
  ## Features
19
24
 
20
- * Uses controllers or views to specify breadcrumb trails
25
+ * Use controllers and/or views to specify breadcrumb trails
21
26
  * Specify urls using Rails conventions
22
- * No markup assumptions for breadcrumbs rendering
27
+ * No markup assumptions for breadcrumbs trails rendering
23
28
  * Use locales file for breadcrumb names
24
- * Tested with Rails 3.2, 4.0, 4.1, 4.2
29
+ * Tested with Rails `>= 3.2` and Ruby `>= 2.0.0`
25
30
 
26
31
  ## Installation
27
32
 
@@ -49,11 +54,23 @@ Then run the generator:
49
54
  rails generate loaf:install
50
55
  ```
51
56
 
57
+ ## Contents
58
+
59
+ * [1. Usage](#1-usage)
60
+ * [2. API](#2-api)
61
+ * [2.1 breadcrumb](#21-breadcrumb)
62
+ * [2.1.1 controller](#211-controller)
63
+ * [2.1.2 view](#212-view)
64
+ * [2.1.3 :match](#213-match)
65
+ * [2.2 breadcrumb_trail](#22-breadcrumb_trail)
66
+ * [3. Configuration](#3-configuration)
67
+ * [4. Translation](#4-translation)
68
+
52
69
  ## 1. Usage
53
70
 
54
71
  **Loaf** allows you to add breadcrumbs in controllers and views.
55
72
 
56
- In order to add breadcrumbs in controller use `breadcrumb` method ([see 1.1](#11-breadcrumb)). Outside of controller actions the `breadcrumb` helper behaviour is similar to filters and as such you can limit breadcrumb scope with familiar options `:only`, `:except`. Any breadcrumb specified inside actions creates another level in breadcrumbs trail.
73
+ In order to add breadcrumbs in controller use `breadcrumb` method ([see 2.1](#21-breadcrumb)).
57
74
 
58
75
  ```ruby
59
76
  class Blog::CategoriesController < ApplicationController
@@ -66,28 +83,11 @@ class Blog::CategoriesController < ApplicationController
66
83
  end
67
84
  ```
68
85
 
69
- **Loaf** adds `breadcrumb` helper also to the views. Together with controller breadcrumbs, the view breadcrumbs are appended as the last in breadcrumb trail. For instance, to specify view breadcrumb do:
70
-
71
- ```ruby
72
- <% breadcrumb @category.title, blog_category_path(@category) %>
73
- ```
74
-
75
- Finally, in your view layout add semantic markup to show breadcrumbs:
86
+ Then in your view render the breadcrumbs trail using [breadcrumb_trail](#22-breadcrumb_trail)
76
87
 
77
- ```html
78
- <ul class='breadcrumbs'>
79
- <% breadcrumbs do |name, url, styles| %>
80
- <li class="<%= styles %>">
81
- <%= link_to name, url %>
82
- <span><%= styles == 'selected' ? '' : '::' %></span>
83
- </li>
84
- <% end %>
85
- </ul>
86
- ```
88
+ ## 2. API
87
89
 
88
- Usually best practice is to put such snippet inside its own partial.
89
-
90
- ### 1.1 breadcrumb
90
+ ### 2.1 breadcrumb
91
91
 
92
92
  Creation of breadcrumb in Rails is achieved by the `breadcrumb` helper.
93
93
 
@@ -117,7 +117,7 @@ You can specify segments of the url:
117
117
  breadcrumb @category.title, {controller: 'categories', action: 'show', id: @category.id}
118
118
  ```
119
119
 
120
- #### 1.1.1 breadcrumb in controller
120
+ #### 2.1.1 controller
121
121
 
122
122
  Breadcrumbs are inherited, so if you set a breadcrumb in `ApplicationController`, it will be inserted as a first element inside every breadcrumb trail. It is customary to set root breadcrumb like so:
123
123
 
@@ -127,7 +127,7 @@ class ApplicationController < ActionController::Base
127
127
  end
128
128
  ```
129
129
 
130
- In controller outside of any action the `breadcrumb` acts as filter.
130
+ Outside of controller actions the `breadcrumb` helper behaviour is similar to filters/actions and as such you can limit breadcrumb scope with familiar options `:only`, `:except`. Any breadcrumb specified inside actions creates another level in breadcrumbs trail.
131
131
 
132
132
  ```ruby
133
133
  class ArticlesController < ApplicationController
@@ -135,6 +135,20 @@ class ArticlesController < ApplicationController
135
135
  end
136
136
  ```
137
137
 
138
+ Each time you call the `breadcrumb` helper, a new element is added to a breadcrumb trial stack:
139
+
140
+ ```ruby
141
+ class ArticlesController < ApplicationController
142
+ breadcrumb 'Home', :root_path
143
+ breadcrumb 'All Articles', :articles_path
144
+
145
+ def show
146
+ breadcrumb 'Article One', article_path(:one)
147
+ breadcrumb 'Article Two', article_path(:two)
148
+ end
149
+ end
150
+ ```
151
+
138
152
  **Loaf** allows you to call controller instance methods inside the `breadcrumb` helper outside of any action. This is useful if your breadcrumb has parameterized behaviour. For example, to dynamically evaluate parameters for breadcrumb title do:
139
153
 
140
154
  ```ruby
@@ -151,42 +165,92 @@ class CommentsController < ApplicationController
151
165
  end
152
166
  ```
153
167
 
154
- ### 1.2 force
168
+ #### 2.1.2 view
155
169
 
156
- **Loaf** allows you to force a breadcrumb to be current.
170
+ **Loaf** adds `breadcrumb` helper also to the views. Together with controller breadcrumbs, the view breadcrumbs are appended as the last in breadcrumb trail. For instance, to specify view breadcrumb do:
157
171
 
158
- For example, on the create action as you are likely want the breadcrumb to be similar as for new action.
172
+ ```ruby
173
+ <% breadcrumb @category.title, blog_category_path(@category) %>
174
+ ```
175
+
176
+ #### 2.1.3 :match
177
+
178
+ **Loaf** allows you to define matching conditions in order to make a breadcrumb current with the `:match` option.
179
+
180
+ The `:match` key accepts the following values:
181
+
182
+ * `:inclusive` - the default value, which matches nested paths
183
+ * `:exact` - matches only the exact same path
184
+ * `:exclusive` - matches only direct path and its query params if present
185
+ * `/regex/` - matches based on regular expression
186
+ * `{foo: bar}` - match based on query params
187
+
188
+ For example, to force a breadcrumb to be the current regardless do:
159
189
 
160
190
  ```ruby
161
- class PostsController < ApplicationController
162
- def create
163
- breadcrumb 'New Post', new_post_path, force: true
164
- render action: :new
165
- end
191
+ breadcrumb 'New Post', new_post_path, match: :exact
192
+ ```
193
+
194
+ To make a breadcrumb current based on the query params do:
195
+
196
+ ```ruby
197
+ breadcrumb 'Posts', posts_path(order: :desc), match: {order: :desc}
198
+ ```
199
+
200
+ ### 2.2 breadcrumb_trail
201
+
202
+ In order to display breadcrumbs use the `breadcrumb_trail` view helper which as an argument accepts options and yeilds all breadcrumbs to a block:
203
+
204
+ ```ruby
205
+ breadcrumb_trail do |crumb|
206
+ ...
166
207
  end
167
208
  ```
168
209
 
169
- ## 2. Configuration
210
+ The yielded pararmeter is a `Loaf::Crumb` object that provides the following methods:
211
+
212
+ ```ruby
213
+ crumb.name # => the name as string
214
+ crumb.path # => the path as string
215
+ crumb.url # => alias for path
216
+ crumb.current? # => true or false
217
+ ```
218
+
219
+ For example, you can add the following semantic markup to show breadcrumbs using the `breadcrumb_trail` helper like so:
220
+
221
+ ```erb
222
+ <nav aria-label="Breadcrumb">
223
+ <ol class='breadcrumbs'>
224
+ <% breadcrumb_trail do |crumb| %>
225
+ <li class="<%= crumb.current? ? 'current' : '' %>">
226
+ <%= link_to crumb.name, crumb.url, (crumb.current? ? {'aria-current' => 'page'} : {}) %>
227
+ <% unless crumb.current? %><span>::</span><% end %>
228
+ </li>
229
+ <% end %>
230
+ </ol>
231
+ </nav>
232
+ ```
233
+
234
+ Usually best practice is to put such snippet inside its own partial.
235
+
236
+ ## 3. Configuration
170
237
 
171
238
  There is a small set of custom opinionated defaults. The following options are valid parameters:
172
239
 
173
240
  ```ruby
174
- :crumb_length # breadcrumb length in integer, default length is 30 characters
175
- :root # boolean, default is true, displays the home crumb
176
241
  :capitalize # set breadcrumbs to have initial letter uppercase, default false
177
- :style_classes # CSS class to be used to style current breadcrumb,
178
- # defaults to 'selected'
242
+ :crumb_length # breadcrumb length in integer, default length is 30 characters
179
243
  ```
180
244
 
181
245
  You can override them in your views by passing them to the view `breadcrumb` helper
182
246
 
183
- ```ruby
184
- <% breadcrumbs crumb_length: 20 do |name, url, styles| %>
247
+ ```erb
248
+ <% breadcrumb_trail crumb_length: 20 do |name, url, styles| %>
185
249
  ..
186
250
  <% end %>
187
251
  ```
188
252
 
189
- or by adding initializer in `config/initializers/loaf.rb`:
253
+ or by configuring an option in `config/initializers/loaf.rb`:
190
254
 
191
255
  ```ruby
192
256
  Loaf.configure do |config|
@@ -194,7 +258,7 @@ Loaf.configure do |config|
194
258
  end
195
259
  ```
196
260
 
197
- ## 3. Translation
261
+ ## 4. Translation
198
262
 
199
263
  You can use locales files for breadcrumbs' titles. **Loaf** assumes that all breadcrumb names are scoped inside `breadcrumbs` namespace inside `loaf` scope. However, this can be easily changed by passing `scope: 'new_scope_name'` configuration option.
200
264
 
@@ -225,8 +289,8 @@ en:
225
289
 
226
290
  ## Contributing
227
291
 
228
- Questions or problems? Please post them on the [issue tracker](https://github.com/peter-murach/loaf/issues). You can contribute changes by forking the project and submitting a pull request. You can ensure the tests are passing by running `bundle` and `rake`.
292
+ Questions or problems? Please post them on the [issue tracker](https://github.com/piotrmurach/loaf/issues). You can contribute changes by forking the project and submitting a pull request. You can ensure the tests are passing by running `bundle` and `rake`.
229
293
 
230
294
  ## Copyright
231
295
 
232
- Copyright (c) 2011-2015 Piotr Murach. See LICENSE.txt for further details.
296
+ Copyright (c) 2011-2017 Piotr Murach. See LICENSE.txt for further details.
Binary file
data/bin/appraisal ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'appraisal' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require "pathname"
10
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require "rubygems"
14
+ require "bundler/setup"
15
+
16
+ load Gem.bin_path("appraisal", "appraisal")
data/bin/rake ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rake' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require "pathname"
10
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require "rubygems"
14
+ require "bundler/setup"
15
+
16
+ load Gem.bin_path("rake", "rake")
@@ -2,21 +2,23 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "ammeter"
6
- gem "bundler", "~> 1.3"
7
- gem "appraisal", "~> 1.0.2"
8
- gem "rake", "~> 10.4.2"
9
- gem "yard", "~> 0.8.7"
10
- gem "sqlite3", "~> 1.3.10", :platforms => :ruby
11
- gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.10", :platforms => :jruby
12
- gem "capybara", "~> 2.4.4"
13
- gem "rspec-rails", "~> 3.1.0"
14
- gem "rails", "~> 3.2.21"
5
+ gem "ammeter", "~> 1.1.4"
6
+ gem "appraisal", "~> 2.2.0"
7
+ gem "yard", "~> 0.9.9"
8
+ gem "capybara", "~> 2.15.4"
9
+ gem "rspec-rails", "~> 3.6.1"
10
+ gem "nokogiri", "~> 1.6.8"
11
+ gem "public_suffix", "~> 2.0.5"
12
+ gem "sqlite3", "~> 1.3.13", platforms: :ruby
13
+ gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.23", platforms: :jruby
14
+ gem "rails", "~> 3.2.22.5"
15
+ gem "test-unit"
16
+ gem "mime-types", "~> 2.99"
15
17
 
16
18
  group :metrics do
17
- gem "coveralls", "~> 0.7.2"
18
- gem "simplecov", "~> 0.9.1"
19
+ gem "coveralls", "0.8.17"
20
+ gem "simplecov", "~> 0.12.0"
19
21
  gem "yardstick", "~> 0.9.9"
20
22
  end
21
23
 
22
- gemspec :path => "../"
24
+ gemspec path: "../"
@@ -2,22 +2,23 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "ammeter"
6
- gem "bundler", "~> 1.3"
7
- gem "appraisal", "~> 1.0.2"
8
- gem "rake", "~> 10.4.2"
9
- gem "yard", "~> 0.8.7"
10
- gem "sqlite3", "~> 1.3.10", :platforms => :ruby
11
- gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.10", :platforms => :jruby
12
- gem "capybara", "~> 2.4.4"
13
- gem "rspec-rails", "~> 3.1.0"
5
+ gem "ammeter", "~> 1.1.4"
6
+ gem "appraisal", "~> 2.2.0"
7
+ gem "yard", "~> 0.9.9"
8
+ gem "capybara", "~> 2.15.4"
9
+ gem "rspec-rails", "~> 3.6.1"
10
+ gem "nokogiri", "~> 1.6.8"
11
+ gem "public_suffix", "~> 2.0.5"
12
+ gem "sqlite3", "~> 1.3.13", platforms: :ruby
13
+ gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.23", platforms: :jruby
14
14
  gem "rails", "~> 4.0.13"
15
15
  gem "test-unit"
16
+ gem "mime-types", "~> 2.99"
16
17
 
17
18
  group :metrics do
18
- gem "coveralls", "~> 0.7.2"
19
- gem "simplecov", "~> 0.9.1"
19
+ gem "coveralls", "0.8.17"
20
+ gem "simplecov", "~> 0.12.0"
20
21
  gem "yardstick", "~> 0.9.9"
21
22
  end
22
23
 
23
- gemspec :path => "../"
24
+ gemspec path: "../"
@@ -2,21 +2,22 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "ammeter"
6
- gem "bundler", "~> 1.3"
7
- gem "appraisal", "~> 1.0.2"
8
- gem "rake", "~> 10.4.2"
9
- gem "yard", "~> 0.8.7"
10
- gem "sqlite3", "~> 1.3.10", :platforms => :ruby
11
- gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.10", :platforms => :jruby
12
- gem "capybara", "~> 2.4.4"
13
- gem "rspec-rails", "~> 3.1.0"
14
- gem "rails", "~> 4.1.9"
5
+ gem "ammeter", "~> 1.1.4"
6
+ gem "appraisal", "~> 2.2.0"
7
+ gem "yard", "~> 0.9.9"
8
+ gem "capybara", "~> 2.15.4"
9
+ gem "rspec-rails", "~> 3.6.1"
10
+ gem "nokogiri", "~> 1.6.8"
11
+ gem "public_suffix", "~> 2.0.5"
12
+ gem "sqlite3", "~> 1.3.13", platforms: :ruby
13
+ gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.23", platforms: :jruby
14
+ gem "rails", "~> 4.1.16"
15
+ gem "mime-types", "~> 2.99"
15
16
 
16
17
  group :metrics do
17
- gem "coveralls", "~> 0.7.2"
18
- gem "simplecov", "~> 0.9.1"
18
+ gem "coveralls", "0.8.17"
19
+ gem "simplecov", "~> 0.12.0"
19
20
  gem "yardstick", "~> 0.9.9"
20
21
  end
21
22
 
22
- gemspec :path => "../"
23
+ gemspec path: "../"
@@ -2,21 +2,22 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "ammeter"
6
- gem "bundler", "~> 1.3"
7
- gem "appraisal", "~> 1.0.2"
8
- gem "rake", "~> 10.4.2"
9
- gem "yard", "~> 0.8.7"
10
- gem "sqlite3", "~> 1.3.10", :platforms => :ruby
11
- gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.10", :platforms => :jruby
12
- gem "capybara", "~> 2.4.4"
13
- gem "rspec-rails", "~> 3.1.0"
14
- gem "rails", "~> 4.2.0"
5
+ gem "ammeter", "~> 1.1.4"
6
+ gem "appraisal", "~> 2.2.0"
7
+ gem "yard", "~> 0.9.9"
8
+ gem "capybara", "~> 2.15.4"
9
+ gem "rspec-rails", "~> 3.6.1"
10
+ gem "nokogiri", "~> 1.6.8"
11
+ gem "public_suffix", "~> 2.0.5"
12
+ gem "sqlite3", "~> 1.3.13", platforms: :ruby
13
+ gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.23", platforms: :jruby
14
+ gem "rails", "~> 4.2.9"
15
+ gem "mime-types", "~> 2.99"
15
16
 
16
17
  group :metrics do
17
- gem "coveralls", "~> 0.7.2"
18
- gem "simplecov", "~> 0.9.1"
18
+ gem "coveralls", "0.8.17"
19
+ gem "simplecov", "~> 0.12.0"
19
20
  gem "yardstick", "~> 0.9.9"
20
21
  end
21
22
 
22
- gemspec :path => "../"
23
+ gemspec path: "../"