hyperdrive 0.0.6 → 0.0.7

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
  SHA1:
3
- metadata.gz: 898b32e10dc9b2836f112818125fcb5a07f28ce0
4
- data.tar.gz: 917e3c1f3f9ba879170bbbaefc216593de6e2288
3
+ metadata.gz: 0310c3ea9e2400fb9bb5527017453871e14b37e7
4
+ data.tar.gz: 2e6ae40c0d160e91f9c5b71587d9c69c6741b760
5
5
  SHA512:
6
- metadata.gz: 055bf9088099afc3dadb018b7042a44a2589a52d91117e7c7e70eeeaf1e4fc16642980d6a5500a84fd3cffac9511c164f6ed3c51687469cdc24dfbc57b5986ad
7
- data.tar.gz: 6dd19b1ddbd02b84a400ddd3aa22a952a7b06172e6164badd1de7a03b8b3037fb2f66ec90c9c206277c7dda561f89108739e3ab273f0f11bc9285f7c77b23a81
6
+ metadata.gz: 197285ed590fd3808b0fdec8f52418ef1bfaf6c55c7fd20dd8e5526450c37ffe4c99b127d8762212d46ca2a389472d7f821f2d0e1b1e082af9ffd73bc1b0458a
7
+ data.tar.gz: 9b37a124b0a2da5911ce56b13b64b16f6c76af173c348c78c1cf986227c5580e2e2d6c58d86babf5e2be42708a2f2bc80671400f068f9b52d1a0b19a81e57b12
data/.travis.yml CHANGED
@@ -1,13 +1,10 @@
1
1
  language: ruby
2
+ cache: bundler
2
3
  rvm:
3
- - 2.1.1
4
- - 1.9.3
5
- - jruby-head
6
- - rbx-2.1.1
7
- matrix:
8
- allow_failures:
9
- - rvm: jruby-head
10
- - rvm: rbx-2.1.1
4
+ - 2.1.1
5
+ - 1.9.3
6
+ - jruby-head
7
+ - rbx
11
8
  env:
12
9
  global:
13
10
  secure: Tl3oBsBZRI5bMrtNH5mtTDvSTlTxNbsKaAnQ7KQ2KMyiH/eHolOSIbUYB9NB3GRMC6XSyFShRCaYPA/ET36HI+Jw3PFT/XADdiOdFqlk6VyJEUPznNQ1nlp8AsyNn+IexZXIl8DdqmZxGHlY6YKDbQV/U1v+FeW8X5j3TLN1mcw=
data/Gemfile CHANGED
@@ -1,6 +1,10 @@
1
1
  source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
+ group :development, :test do
5
+ gem 'oj' unless defined?(JRUBY_VERSION)
6
+ end
7
+
4
8
  group :development do
5
9
  gem 'gem-release', require: false
6
10
  gem 'pry', require: false
@@ -21,4 +25,5 @@ group :test do
21
25
  gem 'rack-test', require: false
22
26
  gem 'rubinius-coverage', require: false, platforms: :rbx
23
27
  gem 'codeclimate-test-reporter', require: false
28
+ gem 'mocha', require: false
24
29
  end
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Hyperdrive
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/hyperdrive.png)](http://badge.fury.io/rb/hyperdrive) [![Build Status](https://secure.travis-ci.org/styleseek/hyperdrive.png?branch=master)](https://travis-ci.org/styleseek/hyperdrive) [![Code Climate](https://codeclimate.com/github/styleseek/hyperdrive.png)](https://codeclimate.com/github/styleseek/hyperdrive) [![Test Coverage](https://codeclimate.com/github/styleseek/hyperdrive/coverage.png)](https://codeclimate.com/github/styleseek/hyperdrive) [![Dependency Status](https://gemnasium.com/styleseek/hyperdrive.png)](https://gemnasium.com/styleseek/hyperdrive)
4
+
5
+
3
6
  Ruby DSL for defining self-documenting, HATEOAS™ complaint, Hypermedia endpoints.
4
7
 
5
8
  ## Installation
@@ -117,13 +120,6 @@ You can also provide a `--output` option and specify a destination for your docu
117
120
 
118
121
  If the `--output` option is not provided the generated documentation will be written to `docs/doc.md` by default.
119
122
 
120
- ## Project Status
121
-
122
- - Version: [![Gem Version](https://badge.fury.io/rb/hyperdrive.png)](http://badge.fury.io/rb/hyperdrive)
123
- - Build: [![Build Status](https://secure.travis-ci.org/styleseek/hyperdrive.png?branch=master)](https://travis-ci.org/styleseek/hyperdrive)
124
- - Code Quality: [![Code Climate](https://codeclimate.com/github/styleseek/hyperdrive.png)](https://codeclimate.com/github/styleseek/hyperdrive)
125
- - Dependencies: [![Dependency Status](https://gemnasium.com/styleseek/hyperdrive.png)](https://gemnasium.com/styleseek/hyperdrive)
126
-
127
123
  ## Contributing
128
124
 
129
125
  1. Fork it ( http://github.com/styleseek/hyperdrive/fork )
data/hyperdrive.gemspec CHANGED
@@ -17,9 +17,9 @@ Gem::Specification.new do |gem|
17
17
  gem.executables = ['hyperdrive']
18
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
19
  gem.require_paths = ["lib"]
20
-
20
+
21
21
  gem.add_dependency 'linguistics'
22
- gem.add_dependency 'oj'
22
+ gem.add_dependency 'multi_json'
23
23
  gem.add_dependency 'rack'
24
24
  gem.add_dependency 'rack-cache'
25
25
  gem.add_dependency 'rack-ssl'
@@ -38,6 +38,10 @@ module Hyperdrive
38
38
  @config[:cors] = config[:cors].merge(options)
39
39
  end
40
40
 
41
+ def per_page(per_page)
42
+ @config[:per_page] = per_page.to_i
43
+ end
44
+
41
45
  def resource(name)
42
46
  @resources[name] = Resource.new(name, @config, &Proc.new).resource
43
47
  end
@@ -30,10 +30,22 @@ module Hyperdrive
30
30
  media_type =~ /xml$/
31
31
  end
32
32
 
33
+ def self.page
34
+ env['hyperdrive.page']
35
+ end
36
+
37
+ def self.per_page
38
+ env['hyperdrive.per_page']
39
+ end
40
+
33
41
  def self.render(body)
34
42
  case body
35
43
  when Array, Hash
36
- Oj.dump(body, mode: :compat) if json?
44
+ if json?
45
+ MultiJson.dump(body)
46
+ else
47
+ $stderr.puts "can't serialize response automatically"
48
+ end
37
49
  when String
38
50
  body
39
51
  else
@@ -13,7 +13,7 @@ module Hyperdrive
13
13
  end
14
14
 
15
15
  def message
16
- "#{@argument} is not supported by `#{@method_name}'."
16
+ "DSL Error: The argument you supplied (#{@argument}) is not supported by the `#{@method_name}' method."
17
17
  end
18
18
  end
19
19
  end
@@ -3,6 +3,10 @@
3
3
  module Hyperdrive
4
4
  module Errors
5
5
  class HTTPError < RuntimeError
6
+ def message
7
+ 'Unknown Error.'
8
+ end
9
+
6
10
  def http_status_code
7
11
  500
8
12
  end
@@ -6,7 +6,7 @@ module Hyperdrive
6
6
  end
7
7
 
8
8
  def message
9
- "A request was made using a request method (#{@request_method}) not supported by this resource."
9
+ "#{@request_method.upcase} requests are not supported by this resource."
10
10
  end
11
11
 
12
12
  def http_status_code
@@ -28,9 +28,9 @@ module Hyperdrive
28
28
  media_types += %w(application/hal+json application/json)
29
29
  content_type = env['hyperdrive.accept'].best_of(media_types)
30
30
  body = if content_type =~ /json$/
31
- Oj.dump(api, mode: :compat)
31
+ MultiJson.dump(api)
32
32
  else
33
- raise Hyperdrive::Errors::NotAcceptable.new(env['HTTP_ACCEPT'])
33
+ raise Errors::NotAcceptable.new(env['HTTP_ACCEPT'])
34
34
  end
35
35
 
36
36
  status = 200
@@ -4,31 +4,36 @@ module Hyperdrive
4
4
  module Middleware
5
5
  class Error
6
6
  include Hyperdrive::Values
7
-
7
+
8
8
  def initialize(app)
9
9
  @app = app
10
10
  end
11
11
 
12
12
  def call(env)
13
13
  @app.call(env)
14
- rescue Hyperdrive::Errors::HTTPError => e
15
- status = e.http_status_code
16
- headers = { 'Content-Type' => 'application/json',
17
- 'Allow' => supported_request_methods.join(', ') }
18
- body = Oj.dump(error_message(e), mode: :compat)
19
- [status, headers, [body]]
14
+ rescue => e
15
+ headers = { 'Content-Type' => 'application/json' }
16
+ if e.respond_to?(:http_status_code)
17
+ status = e.http_status_code
18
+ body = [json_error(e)]
19
+ else
20
+ env['rack.errors'] << e
21
+ status = 500
22
+ body = json_error(Hyperdrive::Errors::HTTPError.new)
23
+ end
24
+ [status, headers, body]
20
25
  end
21
26
 
22
27
  private
23
-
24
- def error_message(e)
25
- {
28
+
29
+ def json_error(e)
30
+ MultiJson.dump({
26
31
  _links: { root: { href: '/', title: 'API Root' } },
27
- error: {
32
+ error: {
28
33
  type: "#{e.class.to_s.split('::').last}",
29
34
  message: e.message
30
35
  }
31
- }
36
+ })
32
37
  end
33
38
  end
34
39
  end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ module Hyperdrive
4
+ module Middleware
5
+ class Pagination
6
+ def initialize(app)
7
+ @app = app
8
+ end
9
+
10
+ def call(env)
11
+ if %(GET HEAD).include? env['REQUEST_METHOD']
12
+ env['hyperdrive.page'] = env['hyperdrive.params'].delete(:page) { 1 }
13
+ env['hyperdrive.page'] = 1 if env['hyperdrive.page'].to_i < 1
14
+ env['hyperdrive.per_page'] = env['hyperdrive.params'].delete(:per_page) { hyperdrive.config.fetch(:per_page) { 20 } }
15
+ env['hyperdrive.per_page'] = 20 if env['hyperdrive.per_page'].to_i == 0
16
+ end
17
+ @app.call(env)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -4,6 +4,7 @@ require 'hyperdrive/middleware/accept'
4
4
  require 'hyperdrive/middleware/cors'
5
5
  require 'hyperdrive/middleware/content_negotiation'
6
6
  require 'hyperdrive/middleware/error'
7
+ require 'hyperdrive/middleware/pagination'
7
8
  require 'hyperdrive/middleware/resource'
8
9
  require 'hyperdrive/middleware/request_method'
9
10
  require 'hyperdrive/middleware/required_params'
@@ -24,11 +24,12 @@ module Hyperdrive
24
24
  run Hyperdrive::HATEOAS
25
25
  end
26
26
 
27
- hyperdrive.resources.each do |key, resource|
27
+ hyperdrive.resources.each do |key, resource|
28
28
  map resource.endpoint do
29
29
  use Hyperdrive::Middleware::Resource, resource
30
30
  use Hyperdrive::Middleware::RequestMethod
31
31
  use Hyperdrive::Middleware::SanitizeParams
32
+ use Hyperdrive::Middleware::Pagination
32
33
  use Hyperdrive::Middleware::RequiredParams
33
34
  use Hyperdrive::Middleware::CORS, hyperdrive.config[:cors]
34
35
  use Hyperdrive::Middleware::ContentNegotiation
@@ -52,7 +52,8 @@ module Hyperdrive
52
52
  name: 'Hyperdrive API',
53
53
  description: "v#{Hyperdrive::VERSION}",
54
54
  vendor: 'hyperdrive',
55
- media_types: %w(hal+json json)
55
+ media_types: %w(hal+json json),
56
+ per_page: 20
56
57
  }.freeze
57
58
  end
58
59
 
@@ -1,3 +1,3 @@
1
1
  module Hyperdrive
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
data/lib/hyperdrive.rb CHANGED
@@ -6,7 +6,7 @@
6
6
  require 'rack'
7
7
  require 'rack/accept'
8
8
  require 'linguistics'; Linguistics.use(:en)
9
- require 'oj'
9
+ require 'multi_json'
10
10
 
11
11
  ## immutable values
12
12
  require 'hyperdrive/values'
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Hyperdrive::Errors::BadRequest do
6
+ before do
7
+ @error = Hyperdrive::Errors::BadRequest.new
8
+ end
9
+
10
+ it "returns a 400 status code" do
11
+ @error.http_status_code.must_equal 400
12
+ end
13
+
14
+ it "has a message" do
15
+ @error.message.must_match(/bad syntax/)
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Hyperdrive::Errors::DSL::UnknownArgument do
6
+ it 'has a message' do
7
+ error = Hyperdrive::Errors::DSL::UnknownArgument.new('trace', 'request')
8
+ error.message.must_match(/DSL/)
9
+ end
10
+
11
+ it "formats Symbol arguments with a `:'" do
12
+ error = Hyperdrive::Errors::DSL::UnknownArgument.new(:trace, 'request')
13
+ error.message.must_match(/:trace/)
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Hyperdrive::Errors::HTTPError do
6
+ before do
7
+ @error = Hyperdrive::Errors::HTTPError.new
8
+ end
9
+
10
+ it "returns a 500 status code" do
11
+ @error.http_status_code.must_equal 500
12
+ end
13
+
14
+ it "has a message" do
15
+ @error.message.must_match(/Unknown/)
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Hyperdrive::Errors::InternalServerError do
6
+ before do
7
+ @error = Hyperdrive::Errors::InternalServerError.new
8
+ end
9
+
10
+ it "returns a 500 status code" do
11
+ @error.http_status_code.must_equal 500
12
+ end
13
+
14
+ it "has a message" do
15
+ @error.message.must_match(/unexpected/)
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Hyperdrive::Errors::MethodNotAllowed do
6
+ before do
7
+ @error = Hyperdrive::Errors::MethodNotAllowed.new('GET')
8
+ end
9
+
10
+ it "returns a 405 status code" do
11
+ @error.http_status_code.must_equal 405
12
+ end
13
+
14
+ it "has a message" do
15
+ @error.message.must_match(/GET/)
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Hyperdrive::Errors::MissingRequiredParam do
6
+ before do
7
+ @error = Hyperdrive::Errors::MissingRequiredParam.new('parent_id', 'GET')
8
+ end
9
+
10
+ it "returns a 400 status code" do
11
+ @error.http_status_code.must_equal 400
12
+ end
13
+
14
+ it "has a message" do
15
+ @error.message.must_match(/GET/)
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Hyperdrive::Errors::NotAcceptable do
6
+ before do
7
+ @error = Hyperdrive::Errors::NotAcceptable.new('application/xml')
8
+ end
9
+
10
+ it "returns a 406 status code" do
11
+ @error.http_status_code.must_equal 406
12
+ end
13
+
14
+ it "has a message" do
15
+ @error.message.must_match(/xml/)
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Hyperdrive::Errors::NotFound do
6
+ before do
7
+ @error = Hyperdrive::Errors::NotFound.new
8
+ end
9
+
10
+ it "returns a 404 status code" do
11
+ @error.http_status_code.must_equal 404
12
+ end
13
+
14
+ it "has a message" do
15
+ @error.message.must_match(/not be found/)
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Hyperdrive::Errors::NotImplemented do
6
+ before do
7
+ @error = Hyperdrive::Errors::NotImplemented.new('TRACE')
8
+ end
9
+
10
+ it "returns a 501 status code" do
11
+ @error.http_status_code.must_equal 501
12
+ end
13
+
14
+ it "has a message" do
15
+ @error.message.must_match(/TRACE/)
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Hyperdrive::Errors::Unauthorized do
6
+ before do
7
+ @error = Hyperdrive::Errors::Unauthorized.new
8
+ end
9
+
10
+ it "returns a 401 status code" do
11
+ @error.http_status_code.must_equal 401
12
+ end
13
+
14
+ it "has a message" do
15
+ @error.message.must_match(/authentication/)
16
+ end
17
+ end
@@ -36,7 +36,7 @@ describe Hyperdrive::HATEOAS do
36
36
  end
37
37
 
38
38
  it "responds with a description of all resources" do
39
- last_response.body.must_equal %Q({"_links":{"self":{"href":"/"}},"name":"Hyperdrive API","description":"v0.0.5","vendor":"hyperdrive","resources":[{"_links":{"self":{"href":"/things"}},"id":"hyperdrive:things","name":"Thing Resource","description":"Description of Thing Resource","methods":["OPTIONS","GET","HEAD","POST","PUT","PATCH","DELETE"],"params":[{"name":"id","description":"Identifier","type":"String","constraints":"Required for: PUT, PATCH, DELETE. "},{"name":"name","description":"50 Chars or less","type":"String","constraints":"Required for: POST, PUT, PATCH. "}],"filters":[{"name":"id","description":"Resource Identifier","type":"String","constraints":" "},{"name":"parent_id","description":"Parent ID of Thing","type":"String","constraints":"Required for: GET, HEAD. "}],"media_types":[["application/vnd.hyperdrive.things.v1+hal+json","application/vnd.hyperdrive.things+hal+json","application/vnd.hyperdrive+hal+json","application/vnd.hyperdrive.things.v1+json","application/vnd.hyperdrive.things+json","application/vnd.hyperdrive+json"]]}]})
39
+ last_response.body.must_equal %Q({"_links":{"self":{"href":"/"}},"name":"Hyperdrive API","description":"v#{Hyperdrive::VERSION}","vendor":"hyperdrive","resources":[{"_links":{"self":{"href":"/things"}},"id":"hyperdrive:things","name":"Thing Resource","description":"Description of Thing Resource","methods":["OPTIONS","GET","HEAD","POST","PUT","PATCH","DELETE"],"params":[{"name":"id","description":"Identifier","type":"String","constraints":"Required for: PUT, PATCH, DELETE. "},{"name":"name","description":"50 Chars or less","type":"String","constraints":"Required for: POST, PUT, PATCH. "}],"filters":[{"name":"id","description":"Resource Identifier","type":"String","constraints":" "},{"name":"parent_id","description":"Parent ID of Thing","type":"String","constraints":"Required for: GET, HEAD. "}],"media_types":[["application/vnd.hyperdrive.things.v1+hal+json","application/vnd.hyperdrive.things+hal+json","application/vnd.hyperdrive+hal+json","application/vnd.hyperdrive.things.v1+json","application/vnd.hyperdrive.things+json","application/vnd.hyperdrive+json"]]}]})
40
40
  end
41
41
  end
42
42
  end
@@ -3,23 +3,41 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Hyperdrive::Middleware::Error do
6
- def app
7
- Rack::Builder.new do
8
- use Hyperdrive::Middleware::Error
9
- run ->(env) { raise Hyperdrive::Errors::HTTPError }
10
- end
11
- end
12
-
13
6
  before do
14
- @response = %Q({"_links":{"root":{"href":"/","title":"API Root"}},"error":{"type":"HTTPError","message":"Hyperdrive::Errors::HTTPError"}})
15
7
  get '/'
16
8
  end
9
+
10
+ context "Known Error" do
11
+ def app
12
+ Rack::Builder.new do
13
+ use Hyperdrive::Middleware::Error
14
+ run ->(env) { raise Hyperdrive::Errors::MethodNotAllowed.new('GET') }
15
+ end
16
+ end
17
+
18
+ it "traps errors" do
19
+ last_response.status.must_equal 405
20
+ end
17
21
 
18
- it "traps errors" do
19
- last_response.status.must_equal 500
22
+ it "returns a formatted error message" do
23
+ last_response.body.must_match(/error/)
24
+ end
20
25
  end
21
26
 
22
- it "returns a formatted error message" do
23
- last_response.body.must_equal @response
27
+ context "Unknown Error" do
28
+ def app
29
+ Rack::Builder.new do
30
+ use Hyperdrive::Middleware::Error
31
+ run ->(env) { raise 'Woah there, fella!' }
32
+ end
33
+ end
34
+
35
+ it "traps errors" do
36
+ last_response.status.must_equal 500
37
+ end
38
+
39
+ it "returns a formatted error message" do
40
+ last_response.body.must_match(/Unknown Error/)
41
+ end
24
42
  end
25
43
  end
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Hyperdrive::Middleware::Pagination do
6
+ def app
7
+ inner_app = ->(env) { [200, {}, [[env['hyperdrive.page'],env['hyperdrive.per_page'],env['hyperdrive.params'][:page],env['hyperdrive.params'][:per_page]].join(",")]] }
8
+ Hyperdrive::Middleware::Pagination.new(inner_app)
9
+ end
10
+
11
+ after do
12
+ hyperdrive.send(:reset!)
13
+ end
14
+
15
+ it "sets default values for page and per_page and removes them from hyperdrive.params" do
16
+ env = default_rack_env.merge('hyperdrive.params' => {})
17
+ get '/', {}, env
18
+ last_response.body.must_equal '1,20,,'
19
+ end
20
+
21
+ it "sets page to 1 if value is less than 1" do
22
+ env = default_rack_env.merge('hyperdrive.params' => { page: '' })
23
+ get '/', {}, env
24
+ last_response.body.must_equal '1,20,,'
25
+ end
26
+
27
+ it "returns per_page value if supplied" do
28
+ env = default_rack_env.merge('hyperdrive.params' => { per_page: 42 })
29
+ get '/', {}, env
30
+ last_response.body.must_equal '1,42,,'
31
+ end
32
+
33
+ it "uses configured per_page value if per_page is not supplied" do
34
+ hyperdrive.config[:per_page] = 13
35
+ env = default_rack_env.merge('hyperdrive.params' => {})
36
+ get '/', {}, env
37
+ last_response.body.must_equal '1,13,,'
38
+ end
39
+
40
+ it "sets per_page to 20 if value is 0" do
41
+ env = default_rack_env.merge('hyperdrive.params' => { per_page: '' })
42
+ get '/', {}, env
43
+ last_response.body.must_equal '1,20,,'
44
+ end
45
+ end
data/spec/spec_helper.rb CHANGED
@@ -18,6 +18,7 @@ require 'hyperdrive'
18
18
 
19
19
  # Fire up the BDD Stack
20
20
  require 'rack/test'
21
+ require 'mocha/mini_test'
21
22
  require 'minitest/autorun'
22
23
  require "minitest-spec-context"
23
24
  require 'minitest/reporters'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyperdrive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - StyleSeek Engineering
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-04 00:00:00.000000000 Z
11
+ date: 2014-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: linguistics
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: oj
28
+ name: multi_json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -149,6 +149,7 @@ files:
149
149
  - lib/hyperdrive/middleware/content_negotiation.rb
150
150
  - lib/hyperdrive/middleware/cors.rb
151
151
  - lib/hyperdrive/middleware/error.rb
152
+ - lib/hyperdrive/middleware/pagination.rb
152
153
  - lib/hyperdrive/middleware/request_method.rb
153
154
  - lib/hyperdrive/middleware/required_params.rb
154
155
  - lib/hyperdrive/middleware/resource.rb
@@ -163,12 +164,23 @@ files:
163
164
  - spec/hyperdrive/dsl/resource_spec.rb
164
165
  - spec/hyperdrive/dsl_spec.rb
165
166
  - spec/hyperdrive/endpoint_spec.rb
167
+ - spec/hyperdrive/errors/bad_request_spec.rb
168
+ - spec/hyperdrive/errors/dsl/unknown_argument_spec.rb
169
+ - spec/hyperdrive/errors/http_error_spec.rb
170
+ - spec/hyperdrive/errors/internal_server_error_spec.rb
171
+ - spec/hyperdrive/errors/method_not_allowed_spec.rb
172
+ - spec/hyperdrive/errors/missing_required_param_spec.rb
173
+ - spec/hyperdrive/errors/not_acceptable_spec.rb
174
+ - spec/hyperdrive/errors/not_found_spec.rb
175
+ - spec/hyperdrive/errors/not_implemented_spec.rb
176
+ - spec/hyperdrive/errors/unauthorized_spec.rb
166
177
  - spec/hyperdrive/filter_spec.rb
167
178
  - spec/hyperdrive/hateoas_spec.rb
168
179
  - spec/hyperdrive/middleware/accept_spec.rb
169
180
  - spec/hyperdrive/middleware/content_negotiation_spec.rb
170
181
  - spec/hyperdrive/middleware/cors_spec.rb
171
182
  - spec/hyperdrive/middleware/error_spec.rb
183
+ - spec/hyperdrive/middleware/pagination_spec.rb
172
184
  - spec/hyperdrive/middleware/request_method_spec.rb
173
185
  - spec/hyperdrive/middleware/required_params_spec.rb
174
186
  - spec/hyperdrive/middleware/resource_spec.rb
@@ -208,12 +220,23 @@ test_files:
208
220
  - spec/hyperdrive/dsl/resource_spec.rb
209
221
  - spec/hyperdrive/dsl_spec.rb
210
222
  - spec/hyperdrive/endpoint_spec.rb
223
+ - spec/hyperdrive/errors/bad_request_spec.rb
224
+ - spec/hyperdrive/errors/dsl/unknown_argument_spec.rb
225
+ - spec/hyperdrive/errors/http_error_spec.rb
226
+ - spec/hyperdrive/errors/internal_server_error_spec.rb
227
+ - spec/hyperdrive/errors/method_not_allowed_spec.rb
228
+ - spec/hyperdrive/errors/missing_required_param_spec.rb
229
+ - spec/hyperdrive/errors/not_acceptable_spec.rb
230
+ - spec/hyperdrive/errors/not_found_spec.rb
231
+ - spec/hyperdrive/errors/not_implemented_spec.rb
232
+ - spec/hyperdrive/errors/unauthorized_spec.rb
211
233
  - spec/hyperdrive/filter_spec.rb
212
234
  - spec/hyperdrive/hateoas_spec.rb
213
235
  - spec/hyperdrive/middleware/accept_spec.rb
214
236
  - spec/hyperdrive/middleware/content_negotiation_spec.rb
215
237
  - spec/hyperdrive/middleware/cors_spec.rb
216
238
  - spec/hyperdrive/middleware/error_spec.rb
239
+ - spec/hyperdrive/middleware/pagination_spec.rb
217
240
  - spec/hyperdrive/middleware/request_method_spec.rb
218
241
  - spec/hyperdrive/middleware/required_params_spec.rb
219
242
  - spec/hyperdrive/middleware/resource_spec.rb