hyperdrive 0.0.22 → 0.0.23
Sign up to get free protection for your applications and to get access to all the features.
- 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
|