hyperdrive 0.0.22 → 0.0.23
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 +4 -4
- data/.travis.yml +7 -7
- data/lib/hyperdrive/middleware/charset.rb +1 -1
- data/lib/hyperdrive/utils.rb +12 -7
- data/lib/hyperdrive/version.rb +1 -1
- data/spec/hyperdrive/middleware/charset_spec.rb +6 -1
- data/spec/hyperdrive/utils_spec.rb +13 -1
- data/spec/spec_helper.rb +0 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e22db453e52f148ae6c1783abf43b7c59fc3989e
|
4
|
+
data.tar.gz: cd4d43dfb872603d09bf25e8072b165e9ce84c16
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3864057077ca0543eee1b87640ef8c91c2fc5cc1956f1c316f71cfb63bd9815b7eae1e04155452485546d4f0062fca1e084627ea296ded32426d0fa1168fdcc
|
7
|
+
data.tar.gz: 5379f7f0f77b54543c4c5c6bcad223a6ff73fa184894510f46b8e51a2be1f54316ea267ef9f05bf29762396826cc12c1f0505227239dfc4d64382c5dda4dcaaa
|
data/.travis.yml
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
language: ruby
|
2
2
|
cache: bundler
|
3
3
|
rvm:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
- 2.1.2
|
5
|
+
- 1.9.3
|
6
|
+
- jruby-head
|
7
|
+
- rbx-2
|
8
8
|
matrix:
|
9
9
|
allow_failures:
|
10
|
-
|
11
|
-
|
10
|
+
- rvm: rbx-2
|
11
|
+
- rvm: jruby-head
|
12
12
|
env:
|
13
13
|
global:
|
14
14
|
secure: Tl3oBsBZRI5bMrtNH5mtTDvSTlTxNbsKaAnQ7KQ2KMyiH/eHolOSIbUYB9NB3GRMC6XSyFShRCaYPA/ET36HI+Jw3PFT/XADdiOdFqlk6VyJEUPznNQ1nlp8AsyNn+IexZXIl8DdqmZxGHlY6YKDbQV/U1v+FeW8X5j3TLN1mcw=
|
@@ -16,4 +16,4 @@ before_install: gem install bundler
|
|
16
16
|
notifications:
|
17
17
|
slack:
|
18
18
|
rooms:
|
19
|
-
secure:
|
19
|
+
secure: jj875pnk9aOooLPRNNbmZEu5mMdvsoYpM+9mSInx4bGRTWYj3OsONbJ2q+Sj2EeB+C9adNabEhlVDJqPFD3475ol2Fsp5+1m24wK/a9gWjoU41ya2NPB1OUZBcos56mQFAPrAWKZhalJFp5YaNPjvKFXMiHbveoIRvZV4SniM58=
|
@@ -9,7 +9,7 @@ module Hyperdrive
|
|
9
9
|
|
10
10
|
def call(env)
|
11
11
|
unless %w(OPTIONS TRACE).include? env['REQUEST_METHOD']
|
12
|
-
charset = Rack::Accept::Charset.new(env['HTTP_ACCEPT_CHARSET'])
|
12
|
+
charset = Rack::Accept::Charset.new(env['HTTP_ACCEPT_CHARSET'] || '*')
|
13
13
|
Hyperdrive::Utils.enforce_charset!(charset, env['hyperdrive.params'])
|
14
14
|
end
|
15
15
|
@app.call(env)
|
data/lib/hyperdrive/utils.rb
CHANGED
@@ -25,7 +25,8 @@ module Hyperdrive
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def self.enforce_charset!(charset, params)
|
28
|
-
encoding =
|
28
|
+
encoding = find_encoding(charset)
|
29
|
+
raise Hyperdrive::Errors::NotAcceptable.new(charset.value) unless encoding.is_a? Encoding
|
29
30
|
params.each_value do |value|
|
30
31
|
value.encode!(encoding) if value.is_a? String
|
31
32
|
end
|
@@ -33,12 +34,16 @@ module Hyperdrive
|
|
33
34
|
|
34
35
|
private
|
35
36
|
|
36
|
-
def self.find_encoding(
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
def self.find_encoding(charset)
|
38
|
+
return Encoding.find('UTF-8') if charset.value == '*'
|
39
|
+
values = charset.sort(charset.values)
|
40
|
+
values.each do |value|
|
41
|
+
begin
|
42
|
+
break Encoding.find(value)
|
43
|
+
rescue
|
44
|
+
next
|
45
|
+
end
|
41
46
|
end
|
42
47
|
end
|
43
48
|
end
|
44
|
-
end
|
49
|
+
end
|
data/lib/hyperdrive/version.rb
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe Hyperdrive::Middleware::Charset do
|
6
|
-
|
7
6
|
def app
|
8
7
|
inner_app = ->(env) { [200, {}, [env['hyperdrive.params']]] }
|
9
8
|
Hyperdrive::Middleware::Charset.new(inner_app)
|
@@ -19,4 +18,10 @@ describe Hyperdrive::Middleware::Charset do
|
|
19
18
|
post '/', @params, @env.merge('hyperdrive.params' => @params)
|
20
19
|
last_response.body.must_equal "{:id=>\"1001\", :name=>\"John Connor\"}"
|
21
20
|
end
|
21
|
+
|
22
|
+
it "will enforce a default charset if accept-charset is not present" do
|
23
|
+
@env.delete('HTTP_ACCEPT_CHARSET')
|
24
|
+
post '/', @params, @env.merge('hyperdrive.params' => @params)
|
25
|
+
last_response.body.must_equal "{:id=>\"1001\", :name=>\"John Connor\"}"
|
26
|
+
end
|
22
27
|
end
|
@@ -58,9 +58,21 @@ describe Hyperdrive::Utils do
|
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'raises an exception for an invalid encoding' do
|
61
|
-
encoding = Rack::Accept::Charset.new('nonsense')
|
61
|
+
encoding = Rack::Accept::Charset.new('nonsense, more-nonsense;q=0.8')
|
62
62
|
-> { Hyperdrive::Utils.enforce_charset!(encoding, @params) }
|
63
63
|
.must_raise Hyperdrive::Errors::NotAcceptable
|
64
64
|
end
|
65
|
+
|
66
|
+
it 'enforces the best charset' do
|
67
|
+
encoding = Rack::Accept::Charset.new('unicode-1-1;q=0.8, iso-8859-5')
|
68
|
+
Hyperdrive::Utils.enforce_charset!(encoding, @params)
|
69
|
+
@params[:name].encoding.must_equal Encoding.find('iso-8859-5')
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'enforces the best, supported charset' do
|
73
|
+
encoding = Rack::Accept::Charset.new('nonsense, nonsense;q=0.9, utf-8;q=0.8')
|
74
|
+
Hyperdrive::Utils.enforce_charset!(encoding, @params)
|
75
|
+
@params[:name].encoding.must_equal Encoding.find('utf-8')
|
76
|
+
end
|
65
77
|
end
|
66
78
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -34,7 +34,6 @@ module Hyperdrive
|
|
34
34
|
'HTTP_ACCEPT' => 'application/vnd.hyperdrive.things+hal+json',
|
35
35
|
'HTTP_ACCEPT_CHARSET' => 'UTF-8',
|
36
36
|
'hyperdrive.accept' => Rack::Accept::MediaType.new('HTTP_ACCEPT' => 'application/vnd.hyperdrive.things+hal+json;q=0.8'),
|
37
|
-
'hyperdrive.accept_charset' => Rack::Accept::Charset.new('HTTP_ACCEPT_CHARSET' => 'UTF-8'),
|
38
37
|
'hyperdrive.resource' => hyperdrive.resources[:things],
|
39
38
|
'hyperdrive.media_type' => 'application/vnd.hyperdrive.things+hal+json'
|
40
39
|
}
|
@@ -56,7 +55,6 @@ module Hyperdrive
|
|
56
55
|
'hyperdrive.media_type' => 'application/vnd.hyperdrive.things+hal+json'
|
57
56
|
}
|
58
57
|
default_env.merge!('hyperdrive.accept' => Rack::Accept::MediaType.new(default_env['HTTP_ACCEPT']))
|
59
|
-
default_env.merge!('hyperdrive.accept_charset' => Rack::Accept::Charset.new(default_env['HTTP_ACCEPT_CHARSET']))
|
60
58
|
default_env.merge!('hyperdrive.resource' => resource) if resource
|
61
59
|
default_env
|
62
60
|
end
|
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.
|
4
|
+
version: 0.0.23
|
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-10-
|
11
|
+
date: 2014-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: linguistics
|