rest-core 4.0.0 → 4.0.1

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: 457863f961696936393b0a9cdfece4b4d2316b3c
4
- data.tar.gz: 6c4c5f3ae1079f425fd463fb617fab97c3641237
3
+ metadata.gz: 19136f5e04b26e2f6f630b4d73f4abef7bdc5b0b
4
+ data.tar.gz: 8b6e9b3ffd8ef15a3bcf5c41a7da9f6aa125546e
5
5
  SHA512:
6
- metadata.gz: 05f689fdc1a13a629fc2f82190bae7804533fd06cc2c3c5f625f666e695541a826717ead8f97de5a2fdb4834b2f1a55deec798a45ed407e00e13531c348ef1ca
7
- data.tar.gz: 3906077d07d6ed8a64782ca78278adbd2a152b71420ad956248def24ed53554751d8e7e84231d8f36549f23cf8672463ba906bde39ba299b41bcc125badebfa8
6
+ metadata.gz: 32f498cd18a1c646917abf8a909de19716db54b85ddeefaf917fb9c39d4cf6b186e7bfcf5e3cc1f8e62dc5c6e91244ca618f3b498b27b0b057054585ac22dbdf
7
+ data.tar.gz: eedebe88fe9065c313e292e988c8b502863062456e4dc763595f5f1975a77ffb96771ac1ce89a181cec1970c0c5f225eb1eac635aace59e50d066501efc58d6b
@@ -1,14 +1,38 @@
1
1
  sudo: false
2
2
  language: ruby
3
- rvm:
4
- - 2.2
5
- - 2.3.0
6
- - rbx
7
- - jruby-9
8
3
 
9
4
  before_install:
10
5
  - rvm get head
11
6
  - rvm reload
12
7
  - rvm use --install $TRAVIS_RUBY_VERSION --binary --latest
13
- install: 'bundle install --retry=3'
8
+ install: 'gem install bundler; bundle install --retry=3'
14
9
  script: 'ruby -vr bundler/setup -S rake test'
10
+
11
+ matrix:
12
+ include:
13
+ - rvm: 2.2.5
14
+ env: json_lib=json
15
+ - rvm: 2.2.5
16
+ env: json_lib=yajl
17
+ - rvm: 2.3.2
18
+ env: json_lib=json
19
+ - rvm: 2.3.2
20
+ env: json_lib=yajl
21
+ - rvm: 2.4.1
22
+ env: json_lib=json
23
+ - rvm: 2.4.1
24
+ env: json_lib=yajl
25
+ - rvm: ruby-head
26
+ env: json_lib=json
27
+ - rvm: ruby-head
28
+ env: json_lib=yajl
29
+ - rvm: jruby-9
30
+ env: JRUBY_OPTS=--debug
31
+ - rvm: rbx
32
+
33
+ allow_failures:
34
+ - rvm: 2.4.1
35
+ env: json_lib=json
36
+ - rvm: 2.4.1
37
+ env: json_lib=yajl
38
+ - rvm: rbx
data/CHANGES.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # CHANGES
2
2
 
3
+ ## rest-core 4.0.1 -- 2017-05-15
4
+
5
+ * [RC::Cache] Check against `Numeric` instead of `Fixnum` for Ruby 2.4
6
+ compatibility.
7
+ * [RC::JsonResponse] Fix encoding issue when trying to remove BOM.
8
+ See https://github.com/godfat/rest-core/issues/24
9
+ and https://github.com/godfat/rest-core/commit/4123ca485ecc3b9d31749423f7039bfa1652a3a3
10
+ Thanks AshwiniDoddamaniFluke
11
+
3
12
  ## rest-core 4.0.0 -- 2016-02-04
4
13
 
5
14
  Now the core functionality was extracted to a new gem, rest-builder.
data/README.md CHANGED
@@ -15,9 +15,7 @@ talk is in Mandarin. There's another talk about [The Promise of rest-core][]
15
15
  * [github](https://github.com/godfat/rest-core)
16
16
  * [rubygems](https://rubygems.org/gems/rest-core)
17
17
  * [rdoc](http://rdoc.info/projects/godfat/rest-core)
18
- * [mailing list](http://www.freelists.org/list/rest-core)
19
- Send your questions to: <rest-core@freelists.org> and you could read
20
- through [archives](http://www.freelists.org/archives/rest-core)
18
+ * [issues](https://github.com/godfat/rest-core/issues) (feel free to ask for support)
21
19
 
22
20
  ## DESCRIPTION:
23
21
 
@@ -720,9 +718,9 @@ the priority here is:
720
718
 
721
719
  ## LICENSE:
722
720
 
723
- Apache License 2.0
721
+ Apache License 2.0 (Apache-2.0)
724
722
 
725
- Copyright (c) 2011-2016, Lin Jen-Shin (godfat)
723
+ Copyright (c) 2011-2017, Lin Jen-Shin (godfat)
726
724
 
727
725
  Licensed under the Apache License, Version 2.0 (the "License");
728
726
  you may not use this file except in compliance with the License.
data/Rakefile CHANGED
@@ -1,24 +1,23 @@
1
1
 
2
2
  begin
3
- require "#{dir = File.dirname(__FILE__)}/task/gemgem"
3
+ require "#{__dir__}/task/gemgem"
4
4
  rescue LoadError
5
5
  sh 'git submodule update --init --recursive'
6
6
  exec Gem.ruby, '-S', $PROGRAM_NAME, *ARGV
7
7
  end
8
8
 
9
- $LOAD_PATH.unshift(File.expand_path("#{dir}/rest-builder/lib"))
10
- $LOAD_PATH.unshift(File.expand_path("#{dir}/rest-builder/promise_pool/lib"))
11
-
12
- Gemgem.init(dir) do |s|
9
+ Gemgem.init(__dir__, :submodules =>
10
+ %w[rest-builder
11
+ rest-builder/promise_pool]) do |s|
13
12
  require 'rest-core/version'
14
13
  s.name = 'rest-core'
15
14
  s.version = RestCore::VERSION
16
- %w[rest-builder].each do |g|
17
- s.add_runtime_dependency(g)
18
- end
19
15
 
20
- # exclude rest-builder
21
- s.files.reject!{ |f| f.start_with?('rest-builder/') }
16
+ %w[rest-builder].each(&s.method(:add_runtime_dependency))
17
+ end
18
+
19
+ task :test do
20
+ require ENV['json_lib'] if ENV['json_lib']
22
21
  end
23
22
 
24
23
  desc 'Run console'
@@ -68,7 +68,7 @@ module RestCore
68
68
  return res unless cache(res)
69
69
  return res unless cache_for?(res)
70
70
 
71
- if expires_in(res).kind_of?(Fixnum) &&
71
+ if expires_in(res).kind_of?(Numeric) &&
72
72
  cache(res).respond_to?(:store) &&
73
73
  cache(res).method(:store).arity == -3
74
74
 
@@ -28,11 +28,19 @@ module RestCore
28
28
  end
29
29
 
30
30
  def process response
31
- # StackExchange returns the problematic BOM! in UTF-8, so we need to
32
- # strip it or it would break JSON parsers (i.e. yajl-ruby and json)
33
- body = response[RESPONSE_BODY].to_s.sub(/\A\xEF\xBB\xBF/, '')
34
- response.merge(RESPONSE_BODY => Json.decode("[#{body}]").first)
35
- # [this].first is not needed for yajl-ruby
31
+ body = response[RESPONSE_BODY]
32
+ json = if body.kind_of?(String)
33
+ Json.normalize(body)
34
+ else
35
+ # Yajl supports streaming, so let's pass it directly to make
36
+ # it possible to do streaming here. Although indeed we should
37
+ # use RESPONSE_SOCKET in this case, but doing that could
38
+ # introduce some incompatibility which I don't want to take
39
+ # care of for now.
40
+ body
41
+ end
42
+
43
+ response.merge(RESPONSE_BODY => Json.decode(json))
36
44
  rescue Json.const_get(:ParseError) => error
37
45
  fail(response, ParseError.new(error, body))
38
46
  end
@@ -5,8 +5,6 @@ require 'pork/auto'
5
5
  require 'muack'
6
6
  require 'webmock'
7
7
 
8
- # for testing lighten (serialization)
9
- require 'yaml'
10
-
8
+ WebMock.enable!
11
9
  WebMock.disable_net_connect!(:allow_localhost => true)
12
- Pork::Executor.include(Muack::API, WebMock::API)
10
+ Pork::Suite.include(Muack::API, WebMock::API)
@@ -61,5 +61,34 @@ module RestCore
61
61
  end
62
62
 
63
63
  select_json!(self)
64
+
65
+ def self.normalize json
66
+ empty_to_null(strip_bom(json))
67
+ end
68
+
69
+ def self.strip_bom json
70
+ case json.encoding.name
71
+ when 'UTF-8'
72
+ # StackExchange returns the problematic BOM! in UTF-8, so we
73
+ # need to strip it or it would break JSON parsers (i.e.
74
+ # yajl-ruby and json)
75
+ json.sub(/\A\xEF\xBB\xBF/u, '')
76
+ when 'ASCII-8BIT'
77
+ # In case if Content-Type doesn't have a charset for UTF-8,
78
+ # httpclient would set the response to ASCII-8BIT in this
79
+ # case.
80
+ json.sub(/\A\xEF\xBB\xBF/n, '')
81
+ else
82
+ json
83
+ end
84
+ end
85
+
86
+ def self.empty_to_null json
87
+ if json.empty?
88
+ 'null'
89
+ else
90
+ json
91
+ end
92
+ end
64
93
  end
65
94
  end
@@ -1,4 +1,4 @@
1
1
 
2
2
  module RestCore
3
- VERSION = '4.0.0'
3
+ VERSION = '4.0.1'
4
4
  end
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: rest-core 4.0.0 ruby lib
2
+ # stub: rest-core 4.0.1 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "rest-core".freeze
6
- s.version = "4.0.0"
6
+ s.version = "4.0.1"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Lin Jen-Shin (godfat)".freeze]
11
- s.date = "2016-02-04"
11
+ s.date = "2017-05-15"
12
12
  s.description = "Various [rest-builder](https://github.com/godfat/rest-builder) middleware\nfor building REST clients.\n\nCheckout [rest-more](https://github.com/godfat/rest-more) for pre-built\nclients.".freeze
13
13
  s.email = ["godfat (XD) godfat.org".freeze]
14
14
  s.files = [
@@ -92,8 +92,8 @@ Gem::Specification.new do |s|
92
92
  "test/test_timeout.rb".freeze,
93
93
  "test/test_universal.rb".freeze]
94
94
  s.homepage = "https://github.com/godfat/rest-core".freeze
95
- s.licenses = ["Apache License 2.0".freeze]
96
- s.rubygems_version = "2.5.2".freeze
95
+ s.licenses = ["Apache-2.0".freeze]
96
+ s.rubygems_version = "2.6.12".freeze
97
97
  s.summary = "Various [rest-builder](https://github.com/godfat/rest-builder) middleware".freeze
98
98
  s.test_files = [
99
99
  "test/test_auth_basic.rb".freeze,
@@ -4,16 +4,16 @@
4
4
 
5
5
  Provided tasks:
6
6
 
7
- rake clean # Remove ignored files
7
+ rake clean # Trash ignored files
8
8
  rake gem:build # Build gem
9
9
  rake gem:install # Install gem
10
10
  rake gem:release # Release gem
11
11
  rake gem:spec # Generate gemspec
12
- rake test # Run tests in memory
12
+ rake test # Run tests
13
13
 
14
14
  ## REQUIREMENTS:
15
15
 
16
- * Tested with MRI (official CRuby) 1.9.3, 2.0.0, Rubinius and JRuby.
16
+ * Tested with MRI (official CRuby), Rubinius and JRuby.
17
17
 
18
18
  ## INSTALLATION:
19
19
 
@@ -23,13 +23,13 @@ And in Rakefile:
23
23
 
24
24
  ``` ruby
25
25
  begin
26
- require "#{dir = File.dirname(__FILE__)}/task/gemgem"
26
+ require "#{__dir__}/task/gemgem"
27
27
  rescue LoadError
28
- sh 'git submodule update --init'
28
+ sh 'git submodule update --init --recursive'
29
29
  exec Gem.ruby, '-S', $PROGRAM_NAME, *ARGV
30
30
  end
31
31
 
32
- Gemgem.init(dir) do |s|
32
+ Gemgem.init(__dir__, :submodules => %w[your-dep]) do |s|
33
33
  s.name = 'your-gem'
34
34
  s.version = '0.1.0'
35
35
  end
@@ -37,9 +37,9 @@ end
37
37
 
38
38
  ## LICENSE:
39
39
 
40
- Apache License 2.0
40
+ Apache License 2.0 (Apache-2.0)
41
41
 
42
- Copyright (c) 2011-2013, Lin Jen-Shin (godfat)
42
+ Copyright (c) 2011-2017, Lin Jen-Shin (godfat)
43
43
 
44
44
  Licensed under the Apache License, Version 2.0 (the "License");
45
45
  you may not use this file except in compliance with the License.
@@ -1,7 +1,7 @@
1
1
 
2
2
  module Gemgem
3
3
  class << self
4
- attr_accessor :dir, :spec, :spec_create
4
+ attr_accessor :dir, :spec, :submodules, :spec_create
5
5
  end
6
6
 
7
7
  module_function
@@ -11,12 +11,14 @@ module Gemgem
11
11
  def pkg_dir ; "#{dir}/pkg" ; end
12
12
  def escaped_dir; @escaped_dir ||= Regexp.escape(dir); end
13
13
 
14
- def init dir, &block
14
+ def init dir, options={}, &block
15
15
  self.dir = dir
16
- $LOAD_PATH.unshift("#{dir}/lib")
17
16
  ENV['RUBYLIB'] = "#{dir}/lib:#{ENV['RUBYLIB']}"
18
17
  ENV['PATH'] = "#{dir}/bin:#{ENV['PATH']}"
18
+ self.submodules = options[:submodules] || []
19
19
  self.spec_create = block
20
+
21
+ $LOAD_PATH.unshift("#{dir}/lib", *submodules_libs)
20
22
  end
21
23
 
22
24
  def create
@@ -26,7 +28,7 @@ module Gemgem
26
28
 
27
29
  s.description = description.join
28
30
  s.summary = description.first
29
- s.license = readme['LICENSE'].sub(/.+\n\n/, '').lines.first.strip
31
+ s.license = license
30
32
 
31
33
  s.date = Time.now.strftime('%Y-%m-%d')
32
34
  s.files = gem_files
@@ -115,6 +117,7 @@ module Gemgem
115
117
  SimpleCov.start do
116
118
  add_filter('test/')
117
119
  add_filter('test.rb')
120
+ submodules_libs.each(&method(:add_filter))
118
121
  end
119
122
  end
120
123
 
@@ -159,11 +162,15 @@ module Gemgem
159
162
  end
160
163
 
161
164
  def strip_home_path path
162
- path.sub(ENV['HOME'], '~')
165
+ path.sub(/\A#{Regexp.escape(ENV['HOME'])}\//, '~/')
163
166
  end
164
167
 
165
168
  def strip_cwd_path path
166
- path.sub(Dir.pwd, '.')
169
+ path.sub(/\A#{Regexp.escape(Dir.pwd)}\//, '')
170
+ end
171
+
172
+ def submodules_libs
173
+ submodules.map{ |path| "#{dir}/#{path}/lib" }
167
174
  end
168
175
 
169
176
  def git *args
@@ -201,6 +208,11 @@ module Gemgem
201
208
  @description ||= (readme['DESCRIPTION']||'').sub(/.+\n\n/, '').lines.to_a
202
209
  end
203
210
 
211
+ def license
212
+ readme['LICENSE'].sub(/.+\n\n/, '').lines.first.
213
+ split(/[()]/).map(&:strip).reject(&:empty?).last
214
+ end
215
+
204
216
  def all_files
205
217
  @all_files ||= fold_files(glob).sort
206
218
  end
@@ -221,7 +233,8 @@ module Gemgem
221
233
 
222
234
  def gem_files
223
235
  @gem_files ||= all_files.reject{ |f|
224
- f =~ ignored_pattern && !git_files.include?(f)
236
+ f =~ submodules_pattern ||
237
+ (f =~ ignored_pattern && !git_files.include?(f))
225
238
  }
226
239
  end
227
240
 
@@ -253,6 +266,15 @@ module Gemgem
253
266
  end
254
267
  end
255
268
 
269
+ def submodules_pattern
270
+ @submodules_pattern ||= if submodules.empty?
271
+ /^$/
272
+ else
273
+ Regexp.new(submodules.map{ |path|
274
+ "^#{Regexp.escape(path)}/" }.join('|'))
275
+ end
276
+ end
277
+
256
278
  def expand_patterns pathes
257
279
  # http://git-scm.com/docs/gitignore
258
280
  pathes.flat_map{ |path|
@@ -9,7 +9,9 @@ describe RC::JsonResponse do
9
9
  would 'do nothing' do
10
10
  expected = {RC::RESPONSE_BODY => nil,
11
11
  RC::REQUEST_HEADERS => {'Accept' => 'application/json'}}
12
- app.call({}){ |response| response.should.eq(expected) }
12
+ app.call(RC::RESPONSE_BODY => '') do |response|
13
+ response.should.eq(expected)
14
+ end
13
15
  end
14
16
 
15
17
  would 'decode' do
@@ -36,6 +38,22 @@ describe RC::JsonResponse do
36
38
  err.cause.class.should.eq(RC::Json.const_get(:ParseError))
37
39
  end
38
40
  end
41
+
42
+ would 'remove UTF-8 BOM' do
43
+ body = %Q{\xEF\xBB\xBF"UTF-8"}
44
+
45
+ app.call(RC::RESPONSE_BODY => body) do |response|
46
+ expect(response[RC::RESPONSE_BODY]).eq 'UTF-8'
47
+ end
48
+ end
49
+
50
+ would 'remove UTF-8 BOM for ASCII-8BIT' do
51
+ body = %Q{\xEF\xBB\xBF"UTF-8"}.force_encoding('ASCII-8BIT')
52
+
53
+ app.call(RC::RESPONSE_BODY => body) do |response|
54
+ expect(response[RC::RESPONSE_BODY]).eq 'UTF-8'
55
+ end
56
+ end
39
57
  end
40
58
 
41
59
  describe 'client' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rest-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lin Jen-Shin (godfat)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-04 00:00:00.000000000 Z
11
+ date: 2017-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-builder
@@ -117,7 +117,7 @@ files:
117
117
  - test/test_universal.rb
118
118
  homepage: https://github.com/godfat/rest-core
119
119
  licenses:
120
- - Apache License 2.0
120
+ - Apache-2.0
121
121
  metadata: {}
122
122
  post_install_message:
123
123
  rdoc_options: []
@@ -135,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
135
  version: '0'
136
136
  requirements: []
137
137
  rubyforge_project:
138
- rubygems_version: 2.5.2
138
+ rubygems_version: 2.6.12
139
139
  signing_key:
140
140
  specification_version: 4
141
141
  summary: Various [rest-builder](https://github.com/godfat/rest-builder) middleware