grape 0.15.0 → 0.16.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grape might be problematic. Click here for more details.

Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -1
  3. data/Gemfile.lock +16 -15
  4. data/README.md +41 -47
  5. data/UPGRADING.md +62 -0
  6. data/gemfiles/rails_3.gemfile.lock +225 -0
  7. data/grape.gemspec +2 -2
  8. data/lib/grape.rb +31 -26
  9. data/lib/grape/api.rb +39 -23
  10. data/lib/grape/dsl/inside_route.rb +8 -4
  11. data/lib/grape/dsl/routing.rb +2 -1
  12. data/lib/grape/endpoint.rb +43 -62
  13. data/lib/grape/error_formatter.rb +4 -2
  14. data/lib/grape/error_formatter/base.rb +10 -6
  15. data/lib/grape/formatter.rb +4 -2
  16. data/lib/grape/http/headers.rb +1 -0
  17. data/lib/grape/middleware/formatter.rb +2 -2
  18. data/lib/grape/middleware/versioner/accept_version_header.rb +2 -2
  19. data/lib/grape/middleware/versioner/header.rb +2 -2
  20. data/lib/grape/middleware/versioner/path.rb +2 -2
  21. data/lib/grape/namespace.rb +1 -1
  22. data/lib/grape/parser.rb +4 -2
  23. data/lib/grape/path.rb +3 -3
  24. data/lib/grape/request.rb +2 -2
  25. data/lib/grape/router.rb +156 -0
  26. data/lib/grape/router/attribute_translator.rb +40 -0
  27. data/lib/grape/router/pattern.rb +55 -0
  28. data/lib/grape/router/route.rb +105 -0
  29. data/lib/grape/serve_file/file_body.rb +34 -0
  30. data/lib/grape/{util → serve_file}/file_response.rb +1 -1
  31. data/lib/grape/{util → serve_file}/sendfile_response.rb +1 -1
  32. data/lib/grape/util/env.rb +1 -1
  33. data/lib/grape/util/registrable.rb +13 -0
  34. data/lib/grape/validations/types/custom_type_coercer.rb +2 -0
  35. data/lib/grape/version.rb +1 -1
  36. data/spec/grape/api/invalid_format_spec.rb +43 -0
  37. data/spec/grape/api/recognize_path_spec.rb +21 -0
  38. data/spec/grape/api/required_parameters_with_invalid_method_spec.rb +26 -0
  39. data/spec/grape/api_spec.rb +110 -38
  40. data/spec/grape/dsl/inside_route_spec.rb +267 -240
  41. data/spec/grape/endpoint_spec.rb +10 -0
  42. data/spec/grape/entity_spec.rb +2 -2
  43. data/spec/grape/middleware/formatter_spec.rb +23 -4
  44. data/spec/grape/middleware/versioner/header_spec.rb +1 -1
  45. data/spec/grape/middleware/versioner/path_spec.rb +1 -1
  46. data/spec/grape/parser_spec.rb +82 -0
  47. data/spec/grape/request_spec.rb +2 -2
  48. data/spec/grape/validations/params_scope_spec.rb +2 -2
  49. data/spec/grape/validations/validators/coerce_spec.rb +51 -0
  50. data/spec/grape/validations_spec.rb +1 -1
  51. data/tmp/Gemfile.lock +63 -0
  52. metadata +70 -55
  53. data/lib/grape/route.rb +0 -32
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6cfff6fd29d73a9f0c990999725d77521054eaed
4
- data.tar.gz: 66ad4e087e432fe5c5d57641db83e5a78730d110
3
+ metadata.gz: 14025980d9a1ead68f6864f6794d94cb4a070b8c
4
+ data.tar.gz: 0cb0c1aa236b361ff803d2534f545542016503dc
5
5
  SHA512:
6
- metadata.gz: 3949ea88f5dd3f57167aaf201789ac4619a334d778cba2b2c8e335a96060d76aa3f218234f5cc2597a2aea23d37bf29baed46505997fe4f7498231734af1b304
7
- data.tar.gz: 0c903f1ba5a4d5f1cd4c75c9fd6fb10ef55aefe18543810aa81d8d14f3571133429aee42555972618f6f1608d83dbd66b3cf71df25758634770bc03902ea32a9
6
+ metadata.gz: 0530cb22cb08ab580a4450a0b4e7d9337cb5d0ae920cdd6c00124d8c238e4b4be24f0cdfc759caf343135c479c45da64fba8f8214ddb88a7ec88aa709a7392c1
7
+ data.tar.gz: d467e07232bc21fe849ec5a122126f119e1fee53cebfc5691a1ce8c9b6f90c75072dfae88ff50f116457f0e0c4cb7100e75358415a549d14b37d1e46aca3e3ea
@@ -1,3 +1,19 @@
1
+ 0.16.1 (4/3/2016)
2
+ =================
3
+
4
+ #### Features
5
+
6
+ * [#1276](https://github.com/ruby-grape/grape/pull/1276): Replace rack-mount with new router - [@namusyaka](https://github.com/namusyaka).
7
+ * [#1321](https://github.com/ruby-grape/grape/pull/1321): Serve files without using FileStreamer-like object - [@lfidnl](https://github.com/lfidnl).
8
+ * [#1339](https://github.com/ruby-grape/grape/pull/1339): Implement Grape::API.recognize_path - [@namusyaka](https://github.com/namusyaka).
9
+
10
+ #### Fixes
11
+
12
+ * [#1325](https://github.com/ruby-grape/grape/pull/1325): Params: Fix coerce_with helper with Array types - [@ngonzalez](https://github.com/ngonzalez).
13
+ * [#1326](https://github.com/ruby-grape/grape/pull/1326): Fix wrong behavior for OPTIONS and HEAD requests with catch-all - [@ekampp](https://github.com/ekampp), [@namusyaka](https://github.com/namusyaka).
14
+ * [#1330](https://github.com/ruby-grape/grape/pull/1330): Add `register` keyword for adding customized parsers and formatters - [@namusyaka](https://github.com/namusyaka).
15
+ * [#1336](https://github.com/ruby-grape/grape/pull/1336): Do not modify Hash argument to `error!` - [@tjwp](https://github.com/tjwp).
16
+
1
17
  0.15.0 (3/8/2016)
2
18
  =================
3
19
 
@@ -27,7 +43,6 @@
27
43
  * [#1197](https://github.com/ruby-grape/grape/pull/1290): Fix using JSON and Array[JSON] as groups when parameter is optional - [@lukeivers](https://github.com/lukeivers).
28
44
 
29
45
  0.14.0 (12/07/2015)
30
- ===================
31
46
 
32
47
  #### Features
33
48
 
@@ -1,15 +1,15 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- grape (0.15.0)
4
+ grape (0.16.1)
5
5
  activesupport
6
6
  builder
7
7
  hashie (>= 2.1.0)
8
8
  multi_json (>= 1.3.2)
9
9
  multi_xml (>= 0.5.2)
10
+ mustermann19 (~> 0.4.3)
10
11
  rack (>= 1.3.0)
11
12
  rack-accept
12
- rack-mount
13
13
  virtus (>= 1.0.0)
14
14
 
15
15
  GEM
@@ -32,15 +32,16 @@ GEM
32
32
  descendants_tracker (~> 0.0.4)
33
33
  ice_nine (~> 0.11.0)
34
34
  thread_safe (~> 0.3, >= 0.3.1)
35
- benchmark-ips (2.3.0)
35
+ benchmark-ips (2.5.0)
36
36
  builder (3.2.2)
37
- coderay (1.1.0)
37
+ coderay (1.1.1)
38
38
  coercible (1.0.0)
39
39
  descendants_tracker (~> 0.0.1)
40
- cookiejar (0.3.2)
40
+ cookiejar (0.3.3)
41
41
  descendants_tracker (0.0.4)
42
42
  thread_safe (~> 0.3, >= 0.3.1)
43
43
  diff-lcs (1.2.5)
44
+ enumerable-lazy (0.0.1)
44
45
  equalizer (0.0.11)
45
46
  ffi (1.9.10)
46
47
  formatador (0.2.5)
@@ -69,17 +70,19 @@ GEM
69
70
  i18n (0.7.0)
70
71
  ice_nine (0.11.2)
71
72
  json (1.8.3)
72
- listen (3.0.5)
73
+ listen (3.0.6)
73
74
  rb-fsevent (>= 0.9.3)
74
- rb-inotify (>= 0.9)
75
+ rb-inotify (>= 0.9.7)
75
76
  lumberjack (1.0.10)
76
77
  maruku (0.7.2)
77
78
  method_source (0.8.2)
78
- mime-types (2.99)
79
+ mime-types (2.99.1)
79
80
  minitest (5.8.4)
80
81
  multi_json (1.11.2)
81
82
  multi_xml (0.5.5)
82
- nenv (0.2.0)
83
+ mustermann19 (0.4.3)
84
+ enumerable-lazy
85
+ nenv (0.3.0)
83
86
  notiffany (0.0.8)
84
87
  nenv (~> 0.1)
85
88
  shellany (~> 0.0)
@@ -96,20 +99,18 @@ GEM
96
99
  rack-contrib (1.4.0)
97
100
  git-version-bump (~> 0.15)
98
101
  rack (~> 1.4)
99
- rack-mount (0.8.3)
100
- rack (>= 1.0.0)
101
102
  rack-test (0.6.3)
102
103
  rack (>= 1.0)
103
104
  rainbow (2.1.0)
104
105
  rake (10.5.0)
105
106
  rb-fsevent (0.9.7)
106
- rb-inotify (0.9.5)
107
+ rb-inotify (0.9.7)
107
108
  ffi (>= 0.5.0)
108
109
  rspec (3.4.0)
109
110
  rspec-core (~> 3.4.0)
110
111
  rspec-expectations (~> 3.4.0)
111
112
  rspec-mocks (~> 3.4.0)
112
- rspec-core (3.4.1)
113
+ rspec-core (3.4.3)
113
114
  rspec-support (~> 3.4.0)
114
115
  rspec-expectations (3.4.0)
115
116
  diff-lcs (>= 1.2.0, < 2.0)
@@ -157,10 +158,10 @@ DEPENDENCIES
157
158
  mime-types (< 3.0)
158
159
  rack-contrib
159
160
  rack-test
160
- rake
161
+ rake (~> 10)
161
162
  rspec (~> 3.0)
162
163
  rubocop (= 0.35.1)
163
164
  yard
164
165
 
165
166
  BUNDLED WITH
166
- 1.10.6
167
+ 1.11.2
data/README.md CHANGED
@@ -5,6 +5,7 @@
5
5
  [![Dependency Status](https://gemnasium.com/ruby-grape/grape.svg)](https://gemnasium.com/ruby-grape/grape)
6
6
  [![Code Climate](https://codeclimate.com/github/ruby-grape/grape.svg)](https://codeclimate.com/github/ruby-grape/grape)
7
7
  [![Inline docs](http://inch-ci.org/github/ruby-grape/grape.svg)](http://inch-ci.org/github/ruby-grape/grape)
8
+ [![Join the chat at https://gitter.im/ruby-grape/grape](https://badges.gitter.im/ruby-grape/grape.svg)](https://gitter.im/ruby-grape/grape?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
8
9
 
9
10
  ## Table of Contents
10
11
 
@@ -50,6 +51,7 @@
50
51
  - [Cookies](#cookies)
51
52
  - [HTTP Status Code](#http-status-code)
52
53
  - [Redirecting](#redirecting)
54
+ - [Recognizing Path](#recognizing-path)
53
55
  - [Allowed Methods](#allowed-methods)
54
56
  - [Raising Exceptions](#raising-exceptions)
55
57
  - [Default Error HTTP Status Code](#default-error-http-status-code)
@@ -101,7 +103,7 @@ content negotiation, versioning and much more.
101
103
 
102
104
  ## Stable Release
103
105
 
104
- You're reading the documentation for the stable release of Grape, 0.15.0.
106
+ You're reading the documentation for the stable release of Grape, 0.16.1.
105
107
  Please read [UPGRADING](UPGRADING.md) when upgrading from a previous version.
106
108
 
107
109
  ## Project Resources
@@ -796,6 +798,15 @@ params do
796
798
  end
797
799
  ```
798
800
 
801
+ Example of use of `coerce_with` with a lambda (a class with a `parse` method could also have been used)
802
+ It will parse a string and return an Array of Integers, matching the `Array[Integer]` `type`.
803
+
804
+ ```ruby
805
+ params do
806
+ requires :values, type: Array[Integer], coerce_with: ->(val) { val.split(/\s+/).map(&:to_i) }
807
+ end
808
+ ```
809
+
799
810
  ### Multipart File Parameters
800
811
 
801
812
  Grape makes use of `Rack::Request`'s built-in support for multipart
@@ -1631,6 +1642,21 @@ redirect '/statuses'
1631
1642
  redirect '/statuses', permanent: true
1632
1643
  ```
1633
1644
 
1645
+ ## Recognizing Path
1646
+
1647
+ You can recognize the endpoint matched with given path.
1648
+
1649
+ This API returns an instance of `Grape::Endpoint`.
1650
+
1651
+ ```ruby
1652
+ class API < Grape::API
1653
+ get '/statuses' do
1654
+ end
1655
+ end
1656
+
1657
+ API.recognize_path '/statuses'
1658
+ ```
1659
+
1634
1660
  ## Allowed Methods
1635
1661
 
1636
1662
  When you add a `GET` route for a resource, a route for the `HEAD`
@@ -2288,7 +2314,9 @@ module API
2288
2314
  expose :text, documentation: { type: 'string', desc: 'Status update text.' }
2289
2315
  expose :ip, if: { type: :full }
2290
2316
  expose :user_type, :user_id, if: ->(status, options) { status.user.public? }
2291
- expose :digest { |status, options| Digest::MD5.hexdigest(status.txt) }
2317
+ expose :digest do |status, options|
2318
+ Digest::MD5.hexdigest(status.txt)
2319
+ end
2292
2320
  expose :replies, using: API::Status, as: :replies
2293
2321
  end
2294
2322
  end
@@ -2436,61 +2464,23 @@ end
2436
2464
 
2437
2465
  Use `body false` to return `204 No Content` without any data or content-type.
2438
2466
 
2439
- You can also set the response to a file-like object with `file`.
2440
- Note: Rack will read your entire Enumerable before returning a response. If
2441
- you would like to stream the response, see `stream`.
2467
+ You can also set the response to a file with `file`.
2442
2468
 
2443
2469
  ```ruby
2444
- class FileStreamer
2445
- def initialize(file_path)
2446
- @file_path = file_path
2447
- end
2448
-
2449
- def each(&blk)
2450
- File.open(@file_path, 'rb') do |file|
2451
- file.each(10, &blk)
2452
- end
2453
- end
2454
- end
2455
-
2456
2470
  class API < Grape::API
2457
2471
  get '/' do
2458
- file FileStreamer.new('file.bin')
2472
+ file '/path/to/file'
2459
2473
  end
2460
2474
  end
2461
2475
  ```
2462
2476
 
2463
- If you want a file-like object to be streamed using Rack::Chunked, use `stream`.
2477
+ If you want a file to be streamed using Rack::Chunked, use `stream`.
2464
2478
 
2465
2479
  ```ruby
2466
2480
  class API < Grape::API
2467
2481
  get '/' do
2468
- stream FileStreamer.new('file.bin')
2469
- end
2470
- end
2471
- ```
2472
-
2473
- If you want to take advantage of `Rack::Sendfile`, which intercepts responses whose body is
2474
- being served from a file and replaces it with a server specific X-Sendfile header, specify `to_path`
2475
- method in your file streamer class which returns path of served file:
2476
-
2477
- ```ruby
2478
- class FileStreamer
2479
- # ...
2480
-
2481
- def to_path
2482
- @file_path
2482
+ stream '/path/to/file'
2483
2483
  end
2484
-
2485
- # ...
2486
- end
2487
- ```
2488
-
2489
- Note: don't forget turn on `Rack::Sendfile` middleware in your API:
2490
-
2491
- ```ruby
2492
- class API < Grape::API
2493
- use Rack::Sendfile
2494
2484
  end
2495
2485
  ```
2496
2486
 
@@ -2567,11 +2557,15 @@ Examine the routes at runtime.
2567
2557
  ```ruby
2568
2558
  TwitterAPI::versions # yields [ 'v1', 'v2' ]
2569
2559
  TwitterAPI::routes # yields an array of Grape::Route objects
2570
- TwitterAPI::routes[0].route_version # => 'v1'
2571
- TwitterAPI::routes[0].route_description # => 'Includes custom settings.'
2572
- TwitterAPI::routes[0].route_settings[:custom] # => { key: 'value' }
2560
+ TwitterAPI::routes[0].version # => 'v1'
2561
+ TwitterAPI::routes[0].description # => 'Includes custom settings.'
2562
+ TwitterAPI::routes[0].settings[:custom] # => { key: 'value' }
2573
2563
  ```
2574
2564
 
2565
+ Note that `Route#route_xyz` methods have been deprecated since 0.15.0.
2566
+
2567
+ Please use `Route#xyz` instead.
2568
+
2575
2569
  ## Current Route and Endpoint
2576
2570
 
2577
2571
  It's possible to retrieve the information about the current route from within an API call with `route`.
@@ -1,6 +1,68 @@
1
1
  Upgrading Grape
2
2
  ===============
3
3
 
4
+ ### Upgrading to >= 0.16.0
5
+
6
+ #### Replace rack-mount with new router
7
+
8
+ The `Route#route_xyz` methods have been deprecated since 0.15.1.
9
+
10
+ Please use `Route#xyz` instead.
11
+
12
+ Note that the `Route#route_method` was replaced by `Route#request_method`.
13
+
14
+ The following code would work correctly.
15
+
16
+ ```ruby
17
+ TwitterAPI::versions # yields [ 'v1', 'v2' ]
18
+ TwitterAPI::routes # yields an array of Grape::Route objects
19
+ TwitterAPI::routes[0].version # => 'v1'
20
+ TwitterAPI::routes[0].description # => 'Includes custom settings.'
21
+ TwitterAPI::routes[0].settings[:custom] # => { key: 'value' }
22
+
23
+ TwitterAPI::routes[0].request_method # => 'GET'
24
+ ```
25
+
26
+ #### `file` method accepts path to file
27
+
28
+ Now to serve files via Grape just pass the path to the file. Functionality with FileStreamer-like objects is deprecated.
29
+
30
+ Please, replace your FileStreamer-like objects with paths of served files.
31
+
32
+ Old style:
33
+
34
+ ```ruby
35
+ class FileStreamer
36
+ def initialize(file_path)
37
+ @file_path = file_path
38
+ end
39
+
40
+ def each(&blk)
41
+ File.open(@file_path, 'rb') do |file|
42
+ file.each(10, &blk)
43
+ end
44
+ end
45
+ end
46
+
47
+ # ...
48
+
49
+ class API < Grape::API
50
+ get '/' do
51
+ file FileStreamer.new('/path/to/file')
52
+ end
53
+ end
54
+ ```
55
+
56
+ New style:
57
+
58
+ ```ruby
59
+ class API < Grape::API
60
+ get '/' do
61
+ file '/path/to/file'
62
+ end
63
+ end
64
+ ```
65
+
4
66
  ### Upgrading to >= 0.15.0
5
67
 
6
68
  #### Changes to availability of `:with` option of `rescue_from` method
@@ -0,0 +1,225 @@
1
+ PATH
2
+ remote: ../
3
+ specs:
4
+ grape (0.14.1)
5
+ activesupport
6
+ builder
7
+ hashie (>= 2.1.0)
8
+ multi_json (>= 1.3.2)
9
+ multi_xml (>= 0.5.2)
10
+ rack (>= 1.3.0)
11
+ rack-accept
12
+ rack-mount
13
+ virtus (>= 1.0.0)
14
+
15
+ GEM
16
+ remote: https://rubygems.org/
17
+ specs:
18
+ actionmailer (3.2.22)
19
+ actionpack (= 3.2.22)
20
+ mail (~> 2.5.4)
21
+ actionpack (3.2.22)
22
+ activemodel (= 3.2.22)
23
+ activesupport (= 3.2.22)
24
+ builder (~> 3.0.0)
25
+ erubis (~> 2.7.0)
26
+ journey (~> 1.0.4)
27
+ rack (~> 1.4.5)
28
+ rack-cache (~> 1.2)
29
+ rack-test (~> 0.6.1)
30
+ sprockets (~> 2.2.1)
31
+ activemodel (3.2.22)
32
+ activesupport (= 3.2.22)
33
+ builder (~> 3.0.0)
34
+ activerecord (3.2.22)
35
+ activemodel (= 3.2.22)
36
+ activesupport (= 3.2.22)
37
+ arel (~> 3.0.2)
38
+ tzinfo (~> 0.3.29)
39
+ activeresource (3.2.22)
40
+ activemodel (= 3.2.22)
41
+ activesupport (= 3.2.22)
42
+ activesupport (3.2.22)
43
+ i18n (~> 0.6, >= 0.6.4)
44
+ multi_json (~> 1.0)
45
+ appraisal (2.1.0)
46
+ bundler
47
+ rake
48
+ thor (>= 0.14.0)
49
+ arel (3.0.3)
50
+ ast (2.2.0)
51
+ astrolabe (1.3.1)
52
+ parser (~> 2.2)
53
+ axiom-types (0.1.1)
54
+ descendants_tracker (~> 0.0.4)
55
+ ice_nine (~> 0.11.0)
56
+ thread_safe (~> 0.3, >= 0.3.1)
57
+ benchmark-ips (2.3.0)
58
+ builder (3.0.4)
59
+ coderay (1.1.0)
60
+ coercible (1.0.0)
61
+ descendants_tracker (~> 0.0.1)
62
+ cookiejar (0.3.2)
63
+ descendants_tracker (0.0.4)
64
+ thread_safe (~> 0.3, >= 0.3.1)
65
+ diff-lcs (1.2.5)
66
+ equalizer (0.0.11)
67
+ erubis (2.7.0)
68
+ ffi (1.9.10)
69
+ formatador (0.2.5)
70
+ git-version-bump (0.15.1)
71
+ grape-entity (0.5.0)
72
+ activesupport
73
+ multi_json (>= 1.3.2)
74
+ guard (2.13.0)
75
+ formatador (>= 0.2.4)
76
+ listen (>= 2.7, <= 4.0)
77
+ lumberjack (~> 1.0)
78
+ nenv (~> 0.1)
79
+ notiffany (~> 0.0)
80
+ pry (>= 0.9.12)
81
+ shellany (~> 0.0)
82
+ thor (>= 0.18.1)
83
+ guard-compat (1.2.1)
84
+ guard-rspec (4.6.4)
85
+ guard (~> 2.1)
86
+ guard-compat (~> 1.1)
87
+ rspec (>= 2.99.0, < 4.0)
88
+ guard-rubocop (1.2.0)
89
+ guard (~> 2.0)
90
+ rubocop (~> 0.20)
91
+ hashie (3.4.3)
92
+ hike (1.2.3)
93
+ i18n (0.7.0)
94
+ ice_nine (0.11.1)
95
+ journey (1.0.4)
96
+ json (1.8.3)
97
+ listen (3.0.5)
98
+ rb-fsevent (>= 0.9.3)
99
+ rb-inotify (>= 0.9)
100
+ lumberjack (1.0.10)
101
+ mail (2.5.4)
102
+ mime-types (~> 1.16)
103
+ treetop (~> 1.4.8)
104
+ maruku (0.7.2)
105
+ method_source (0.8.2)
106
+ mime-types (1.25.1)
107
+ multi_json (1.11.2)
108
+ multi_xml (0.5.5)
109
+ nenv (0.2.0)
110
+ notiffany (0.0.8)
111
+ nenv (~> 0.1)
112
+ shellany (~> 0.0)
113
+ parser (2.2.3.0)
114
+ ast (>= 1.1, < 3.0)
115
+ polyglot (0.3.5)
116
+ powerpack (0.1.1)
117
+ pry (0.10.3)
118
+ coderay (~> 1.1.0)
119
+ method_source (~> 0.8.1)
120
+ slop (~> 3.4)
121
+ rack (1.4.7)
122
+ rack-accept (0.4.5)
123
+ rack (>= 0.4)
124
+ rack-cache (1.2)
125
+ rack (>= 0.4)
126
+ rack-contrib (1.4.0)
127
+ git-version-bump (~> 0.15)
128
+ rack (~> 1.4)
129
+ rack-mount (0.8.3)
130
+ rack (>= 1.0.0)
131
+ rack-ssl (1.3.4)
132
+ rack
133
+ rack-test (0.6.3)
134
+ rack (>= 1.0)
135
+ rails (3.2.22)
136
+ actionmailer (= 3.2.22)
137
+ actionpack (= 3.2.22)
138
+ activerecord (= 3.2.22)
139
+ activeresource (= 3.2.22)
140
+ activesupport (= 3.2.22)
141
+ bundler (~> 1.0)
142
+ railties (= 3.2.22)
143
+ railties (3.2.22)
144
+ actionpack (= 3.2.22)
145
+ activesupport (= 3.2.22)
146
+ rack-ssl (~> 1.3.2)
147
+ rake (>= 0.8.7)
148
+ rdoc (~> 3.4)
149
+ thor (>= 0.14.6, < 2.0)
150
+ rainbow (2.0.0)
151
+ rake (10.4.2)
152
+ rb-fsevent (0.9.7)
153
+ rb-inotify (0.9.5)
154
+ ffi (>= 0.5.0)
155
+ rdoc (3.12.2)
156
+ json (~> 1.4)
157
+ rspec (3.4.0)
158
+ rspec-core (~> 3.4.0)
159
+ rspec-expectations (~> 3.4.0)
160
+ rspec-mocks (~> 3.4.0)
161
+ rspec-core (3.4.1)
162
+ rspec-support (~> 3.4.0)
163
+ rspec-expectations (3.4.0)
164
+ diff-lcs (>= 1.2.0, < 2.0)
165
+ rspec-support (~> 3.4.0)
166
+ rspec-mocks (3.4.0)
167
+ diff-lcs (>= 1.2.0, < 2.0)
168
+ rspec-support (~> 3.4.0)
169
+ rspec-support (3.4.1)
170
+ rubocop (0.35.1)
171
+ astrolabe (~> 1.3)
172
+ parser (>= 2.2.3.0, < 3.0)
173
+ powerpack (~> 0.1)
174
+ rainbow (>= 1.99.1, < 3.0)
175
+ ruby-progressbar (~> 1.7)
176
+ tins (<= 1.6.0)
177
+ ruby-progressbar (1.7.5)
178
+ shellany (0.0.1)
179
+ slop (3.6.0)
180
+ sprockets (2.2.3)
181
+ hike (~> 1.2)
182
+ multi_json (~> 1.0)
183
+ rack (~> 1.0)
184
+ tilt (~> 1.1, != 1.3.0)
185
+ thor (0.19.1)
186
+ thread_safe (0.3.5)
187
+ tilt (1.4.1)
188
+ tins (1.6.0)
189
+ treetop (1.4.15)
190
+ polyglot
191
+ polyglot (>= 0.3.1)
192
+ tzinfo (0.3.46)
193
+ virtus (1.0.5)
194
+ axiom-types (~> 0.1)
195
+ coercible (~> 1.0)
196
+ descendants_tracker (~> 0.0, >= 0.0.3)
197
+ equalizer (~> 0.0, >= 0.0.9)
198
+ yard (0.8.7.6)
199
+
200
+ PLATFORMS
201
+ ruby
202
+
203
+ DEPENDENCIES
204
+ appraisal
205
+ benchmark-ips
206
+ bundler
207
+ cookiejar
208
+ grape!
209
+ grape-entity (>= 0.4.4)
210
+ guard
211
+ guard-rspec
212
+ guard-rubocop
213
+ maruku
214
+ mime-types (< 3.0)
215
+ rack-cache (<= 1.2)
216
+ rack-contrib
217
+ rack-test
218
+ rails (= 3.2.22)
219
+ rake
220
+ rspec (~> 3.0)
221
+ rubocop (= 0.35.1)
222
+ yard
223
+
224
+ BUNDLED WITH
225
+ 1.11.2