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 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