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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0b5a8dba0ecc2580c9ab5880da0499cd5a9bcd8e
4
- data.tar.gz: 8746e9594475c4297e69e2e3852d8e1bd33aeb03
3
+ metadata.gz: e22db453e52f148ae6c1783abf43b7c59fc3989e
4
+ data.tar.gz: cd4d43dfb872603d09bf25e8072b165e9ce84c16
5
5
  SHA512:
6
- metadata.gz: 07610251fb906637c086757dfd289c35413d4abaa79d3c676898deb14c10ed829a0a75322b2ce435dd09cd9e429b93e5c2fc2533477f17d33e9e7178b159bc35
7
- data.tar.gz: edde3f5f65a6f0157f1c538be9b938d3500d92455025d1a843283ff5544a4c9a4fbd2efdb034b9851d7ae0d7b9c4fd2a6f5f2bccba06653fa911a350bbaba30b
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
- - 2.1.2
5
- - 1.9.3
6
- - jruby-head
7
- - rbx-2
4
+ - 2.1.2
5
+ - 1.9.3
6
+ - jruby-head
7
+ - rbx-2
8
8
  matrix:
9
9
  allow_failures:
10
- - rvm: rbx-2
11
- - rvm: jruby-head
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: iJbgfjVMSUb1+oTyMbQ5XPbNLcrgczXW06diPa1Q9NOsVO3XsAdNqt8bBRFYGKszJsXTV2XCxv7qf7Sf8uXfqWdWnqy1KyZ17aLTfpa7pSr1DwT4Q8lZ9tLFycIvyzl2gVU8k+ele35KN+J4OTTc1Mq3Gznabl5MINyElmA9zhU=
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)
@@ -25,7 +25,8 @@ module Hyperdrive
25
25
  end
26
26
 
27
27
  def self.enforce_charset!(charset, params)
28
- encoding = charset.value == '*' ? 'UTF-8' : find_encoding(charset.value)
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(charset_value)
37
- begin
38
- Encoding.find(charset_value)
39
- rescue
40
- raise Hyperdrive::Errors::NotAcceptable.new(charset_value)
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
@@ -1,3 +1,3 @@
1
1
  module Hyperdrive
2
- VERSION = "0.0.22"
2
+ VERSION = "0.0.23"
3
3
  end
@@ -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.22
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-03 00:00:00.000000000 Z
11
+ date: 2014-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: linguistics