resterl 0.0.17 → 0.1.2

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
- SHA1:
3
- metadata.gz: eefda67e9d4b1b634f09e64d6744a43a6733dfd4
4
- data.tar.gz: 302093e3f36f08d49d1918759047255aa9c28867
2
+ SHA256:
3
+ metadata.gz: e9d8e9eaf831b7bda085200459577fc210e7b91fa5fdc5491d5eec3d2e07d7dc
4
+ data.tar.gz: fb2ce9cd828dd55f21fb78920dbaf9da9b180d3392d60c318fd5f3f8da70d64f
5
5
  SHA512:
6
- metadata.gz: 1ccf4876bf18424c64528b8a257d651b531ce92979f52ebbc9cf54e51a4372f881b5e7072accf557b56f5b0385b47c553f52d9df5ef6b07429a348639815f473
7
- data.tar.gz: 654b12d576e911c072d58426edb17b37cbd97ce3626b179cebb7a837536d32c93867387e93cdaca8a6e5acefe4a1d15ce9976968bfcbfb2ff2bea1e14d3a98be
6
+ metadata.gz: eb6c0ad39ecfaa6246085fae41bf177e5c69b064f109031b39a34c50cb7632c12dd897d4c990b5c50f7c693e38b96b7d3d1e01d819c69be61df977bff518d681
7
+ data.tar.gz: c98b91ce82439eb45f1ac55c855d9da2fbf36dcf345e77340ae9819cca59e3a959c289ece4497a8d722c1c577e3ff34ddc35ff6e3b3d4b7b7f3041b370aa65d2
data/.gitignore CHANGED
@@ -21,3 +21,8 @@ pkg
21
21
  ## PROJECT::SPECIFIC
22
22
  PRIVATE_TODO.rdoc
23
23
  nbproject
24
+
25
+ .bundle
26
+ Gemfile.lock
27
+ *.gem
28
+ pkg
data/.rubocop.yml ADDED
@@ -0,0 +1,40 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.0
3
+ Exclude:
4
+ - 'vendor/bundle/**/*'
5
+ DisplayCopNames: true
6
+ Rails:
7
+ Enabled: false
8
+ Style/Encoding:
9
+ EnforcedStyle: when_needed
10
+ Enabled: true
11
+ Style/AsciiComments:
12
+ Enabled: false
13
+ Style/Documentation:
14
+ Enabled: false
15
+ Metrics/MethodLength:
16
+ Enabled: false
17
+ Style/MethodDefParentheses:
18
+ Enabled: false
19
+ Style/MultilineOperationIndentation:
20
+ EnforcedStyle: aligned
21
+ Style/MultilineMethodCallIndentation:
22
+ EnforcedStyle: indented
23
+ Style/MultilineMethodDefinitionBraceLayout:
24
+ Enabled: true
25
+ Style/MultilineHashBraceLayout:
26
+ Enabled: true
27
+ Style/SignalException:
28
+ Enabled: false
29
+ Metrics/ClassLength:
30
+ Enabled: false
31
+ Lint/AssignmentInCondition:
32
+ Enabled: false
33
+ Metrics/ParameterLists:
34
+ Enabled: false
35
+ Style/MultilineBlockChain:
36
+ Enabled: false
37
+ Style/CommentAnnotation:
38
+ Enabled: false
39
+ Style/GuardClause:
40
+ Enabled: false
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.7.4
data/Gemfile CHANGED
@@ -1,2 +1,2 @@
1
- source "http://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
  gemspec
@@ -1,98 +1,80 @@
1
1
  require 'hashie'
2
2
 
3
- # Idee: If-Match wäre bei .delete_object und .put_object ein interessantes
4
- # Feature.
3
+ module Resterl
4
+ class BaseObject
5
+ include ClassLevelInheritableAttributes
6
+ cattr_inheritable :resterl_client, :parser, :composer, :complete_mime_type,
7
+ :mapper
8
+ attr_reader :response
5
9
 
6
- class Resterl::BaseObject #< Hashie::Mash
10
+ def initialize data = {}, response = nil
11
+ @data = Hashie::Mash.new data
12
+ @response = response
13
+ end
7
14
 
8
- include ClassLevelInheritableAttributes
9
- cattr_inheritable :resterl_client, :parser, :composer, :complete_mime_type,
10
- :mapper
11
- attr_reader :response
15
+ def method_missing sym, *args, &block
16
+ @data.send sym, *args, &block
17
+ end
12
18
 
13
- #self.resterl_client = nil
14
- #self.complete_mime_type = 'text/plain'
19
+ def respond_to? sym, include_private = false
20
+ super || @data.respond_to?(sym, include_private)
21
+ end
15
22
 
16
- def initialize data = {}, response = nil
17
- @data = Hashie::Mash.new data
18
- @response = response
19
- end
23
+ class << self
24
+ def get_object url, params = {}
25
+ response = resterl_client.get(url, params, accept_header)
26
+ new_from_response(response)
27
+ end
20
28
 
21
- def method_missing sym, *args, &block
22
- # Vielleicht lassen sich auch feste Attribute delegieren, das wäre als
23
- # method_missing.
24
- @data.send sym, *args, &block
25
- end
29
+ def post_to_object url, params = {}, data = {}
30
+ post_put_object(:post, url, params, data)
31
+ end
26
32
 
27
- protected
33
+ def delete_object url
34
+ resterl_client.delete(url, {}, accept_header, {})
35
+ end
28
36
 
29
- def self.get_object url, params = {}
30
- headers = { 'Accept' => complete_mime_type }
31
- response = resterl_client.get(url, params, headers)
32
- doc = response.body
33
- doc = parser.call(doc)
34
- doc = mapper.map(doc) if @mapper
35
- new(doc, response)
36
- end
37
-
38
- def self.post_to_object url, params = {}, data = {}
39
- # TODO: Refactoring
37
+ def put_object url, params = {}, data = {}
38
+ post_put_object(:put, url, params, data)
39
+ end
40
40
 
41
- headers = {
42
- 'Accept' => complete_mime_type,
43
- 'Content-Type' => complete_mime_type
44
- }
45
- data = composer.call(data)
46
- response = resterl_client.post(url, params, data, headers)
47
-
48
- doc = response.body
49
- doc = parser.call(doc)
50
- doc = mapper.map(doc) if @mapper
51
- new(doc, response)
52
- end
53
-
54
- def self.delete_object url
55
- headers = {
56
- 'Accept' => complete_mime_type,
57
- }
58
- resterl_client.delete(url, {}, headers, {})
59
- # TODO: Antwort parsen?
60
- end
61
-
62
- def self.put_object url, params = {}, data
63
- # TODO: Refactoring
64
-
65
- headers = {
66
- 'Accept' => complete_mime_type,
67
- 'Content-Type' => complete_mime_type
68
- }
69
- data = composer.call(data)
70
- response = resterl_client.put(url, params, data, headers)
71
-
72
- doc = response.body
73
- doc = parser.call(doc)
74
- doc = mapper.map(doc) if @mapper
75
-
76
- # TODO: In Ordnung?
77
- new(doc, response)
78
- end
79
-
41
+ def mime_type= t
42
+ self.parser, self.composer, self.complete_mime_type =
43
+ case t
44
+ when :json
45
+ [proc { |str| JSON.parse(str) },
46
+ proc(&:to_json),
47
+ 'application/json'
48
+ ]
49
+ when :xml
50
+ [proc { |str| Hash.from_xml(str) },
51
+ proc(&:to_xml),
52
+ 'application/xml'
53
+ ]
54
+ end
55
+ end
56
+
57
+ private
80
58
 
81
- def self.mime_type= t
82
- self.parser, self.composer, self.complete_mime_type = case t
83
- when :json
84
- # TODO prio 2: Only works when Rails is loaded?
85
- [ proc {|str| JSON.parse(str)},
86
- proc(&:to_json),
87
- 'application/json'
88
- ]
89
- when :xml
90
- # TODO prio 2: Only works when Rails is loaded?
91
- [ proc {|str| Hash.from_xml(str)},
92
- proc(&:to_xml),
93
- 'application/xml'
94
- ]
59
+ def post_put_object method, url, params, data
60
+ headers = accept_header.merge(
61
+ 'Content-Type' => complete_mime_type
62
+ )
63
+ data = composer.call(data)
64
+ response = resterl_client.send(method, url, params, data, headers)
65
+ new_from_response response
66
+ end
67
+
68
+ def new_from_response response
69
+ doc = response.body
70
+ doc = parser.call(doc)
71
+ doc = mapper.map(doc) if @mapper
72
+ new(doc, response)
73
+ end
74
+
75
+ def accept_header
76
+ { 'Accept' => complete_mime_type }
77
+ end
95
78
  end
96
79
  end
97
-
98
80
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Resterl
4
+ module Caches
5
+ class CacheKeyGenerator
6
+ def self.generate(url, params, headers)
7
+ normalized = [url, params, headers].map do |part|
8
+ part.is_a?(Hash) ? part.sort : part
9
+ end.each_with_object(+'') { |e, acc| acc << e.inspect }
10
+
11
+ Digest::SHA1.hexdigest(normalized)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -97,8 +97,8 @@ module Resterl
97
97
  end
98
98
  end
99
99
 
100
- def data_to_cache_key *args
101
- args.hash
100
+ def data_to_cache_key url, params, headers
101
+ Caches::CacheKeyGenerator.generate(url, params, headers)
102
102
  end
103
103
 
104
104
  def get_response(request, old_response)
@@ -1,4 +1,5 @@
1
1
  require 'active_support/core_ext/object/blank'
2
+ require 'active_support/core_ext/hash'
2
3
 
3
4
  module Resterl
4
5
  class GenericRequest
@@ -29,11 +30,7 @@ module Resterl
29
30
  end
30
31
 
31
32
  def query_param_string
32
- @query_param_string ||= begin
33
- @query_params.collect do |key, value|
34
- "#{URI.escape(key.to_s)}=#{URI.escape(value.to_s)}"
35
- end.join('&')
36
- end
33
+ @query_param_string ||= @query_params.to_query
37
34
  end
38
35
 
39
36
  def apply_basic_auth request
@@ -1,3 +1,3 @@
1
1
  module Resterl
2
- VERSION = '0.0.17'
2
+ VERSION = '0.1.2'.freeze
3
3
  end
data/lib/resterl.rb CHANGED
@@ -2,8 +2,9 @@ require 'net/http'
2
2
  require 'net/https'
3
3
  require 'yajl/json_gem'
4
4
  ################################################################################
5
- module Resterl; end
6
- module Resterl::Caches; end
5
+ module Resterl
6
+ module Caches; end
7
+ end
7
8
  ################################################################################
8
9
  require 'resterl/class_level_inheritable_attributes'
9
10
 
@@ -13,6 +14,7 @@ require 'resterl/caches/redis_cache'
13
14
  require 'resterl/caches/simple_cache'
14
15
  require 'resterl/caches/rails_memcached_cache'
15
16
  require 'resterl/caches/key_prefix_decorator'
17
+ require 'resterl/caches/cache_key_generator'
16
18
  require 'resterl/caches/nil_cache'
17
19
 
18
20
  require 'resterl/client'
@@ -23,7 +25,3 @@ require 'resterl/put_request'
23
25
  require 'resterl/delete_request'
24
26
  require 'resterl/response'
25
27
  require 'resterl/base_object'
26
-
27
- ################################################################################
28
- Net::HTTP.version_1_1 if RUBY_VERSION < '1.9.3'
29
- ################################################################################
data/resterl.gemspec CHANGED
@@ -1,25 +1,25 @@
1
1
  # encoding: utf-8
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "resterl/version"
4
-
2
+ require File.expand_path('../lib/resterl/version', __FILE__)
5
3
 
6
4
  Gem::Specification.new do |s|
7
5
  s.name = 'resterl'
8
6
  s.version = Resterl::VERSION
9
- s.authors = ["Florian Dütsch"]
10
- s.email = 'florian.duetsch@nix-wie-weg.de'
11
- s.homepage = 'http://github.com/Nix-wie-weg/resterl'
7
+ s.authors = ['Florian Dütsch', 'Stefan Hoffmann']
8
+ s.email = ['florian.duetsch@nix-wie-weg.de', 'stefan.hoffmann@nix-wie-weg.de']
9
+ s.homepage = 'https://github.com/Nix-wie-weg/resterl'
12
10
  s.summary = 'Rudimentary HTTP client with focus on caching'
13
11
  s.files = `git ls-files`.split("\n")
14
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
- s.executables = `git ls-files -- bin/*`.split("\n").map{|f|File.basename(f)}
16
- #s.require_paths = ["lib"]
12
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
13
+ s.executables = s.files.grep(%r{^bin/}).map { |f| File.basename(f) }
14
+ s.require_paths = ['lib']
15
+ s.required_ruby_version = '>= 2.0.0'
17
16
 
18
- s.add_runtime_dependency 'activesupport', '>= 2.3.18'
19
- s.add_runtime_dependency 'hashie', '~> 0.4.0'
17
+ s.add_runtime_dependency 'activesupport', '>= 3.2.0'
18
+ s.add_runtime_dependency 'hashie', '~> 3.5.7'
20
19
  s.add_runtime_dependency 'yajl-ruby', '~> 1.1'
21
- s.add_development_dependency 'rspec', '~> 3.1'
22
- s.add_development_dependency 'webmock', '~> 1.20.4'
23
- s.add_development_dependency 'timecop', '~> 0.7.1'
20
+ s.add_development_dependency 'rspec', '~> 3.7'
21
+ s.add_development_dependency 'webmock', '~> 3.4.1'
22
+ s.add_development_dependency 'timecop', '~> 0.9.1'
23
+ s.add_development_dependency 'rubocop', '~> 0.39.0'
24
24
  s.add_development_dependency 'pry'
25
25
  end
@@ -0,0 +1,23 @@
1
+ require_relative '../../spec_helper'
2
+ require 'active_support/core_ext/object/try'
3
+
4
+ describe Resterl::BaseObject do
5
+ subject { described_class.new(foo: :bar) }
6
+
7
+ context '#try from ActiveSupport' do
8
+ it 'returns a value if the key exists' do
9
+ expect(subject.try(:foo)).to eq :bar
10
+ end
11
+ it 'returns nil if the key does not exist' do
12
+ expect(subject.try(:fox)).not_to be
13
+ end
14
+ end
15
+
16
+ it { is_expected.to respond_to(:response) }
17
+ it { is_expected.to respond_to(:foo) }
18
+ it { is_expected.not_to respond_to(:fox) }
19
+
20
+ it 'supports respond_to with private methods' do
21
+ expect(subject.respond_to?(:log_built_in_message, true)).to be_truthy
22
+ end
23
+ end
@@ -0,0 +1,77 @@
1
+ require 'spec_helper'
2
+
3
+ describe Resterl::Caches::CacheKeyGenerator do
4
+ it 'generates a stable digest for the same url' do
5
+ a = described_class.generate('http://example.com', {}, {})
6
+ b = described_class.generate('http://example.com', {}, {})
7
+
8
+ expect(a).to eq b
9
+ end
10
+
11
+ it 'generates a stable digest with the same parameters' do
12
+ a = described_class
13
+ .generate('http://example.com', { 'foo' => 'bar' }, {})
14
+ b = described_class
15
+ .generate('http://example.com', { 'foo' => 'bar' }, {})
16
+
17
+ expect(a).to eq b
18
+ end
19
+
20
+ it 'generates a stable digest with the same headers' do
21
+ a = described_class
22
+ .generate('http://example.com', {}, 'x-test' => '0.5')
23
+ b = described_class
24
+ .generate('http://example.com', {}, 'x-test' => '0.5')
25
+
26
+ expect(a).to eq b
27
+ end
28
+
29
+ it 'generates a stable digest with same url, params and headers' do
30
+ a = described_class
31
+ .generate('http://example.com', { 'xy' => 'xxx' }, 'x-test' => '0.5')
32
+ b = described_class
33
+ .generate('http://example.com', { 'xy' => 'xxx' }, 'x-test' => '0.5')
34
+
35
+ expect(a).to eq b
36
+ end
37
+
38
+ it 'generates different digest for different urls' do
39
+ a = described_class.generate('http://example.net', {}, {})
40
+ b = described_class.generate('http://example.com', {}, {})
41
+
42
+ expect(a).not_to eq b
43
+ end
44
+
45
+ it 'generates different digest with different parameters' do
46
+ a = described_class.generate('http://example.com', { 'blib' => 'blub' }, {})
47
+ b = described_class.generate('http://example.com', { 'blib' => 'oopf' }, {})
48
+ c = described_class.generate('http://example.com', { 'oopf' => 'blip' }, {})
49
+
50
+ expect([a, b, c].uniq.length).to eq 3
51
+ end
52
+
53
+ it 'generates different digest with different headers' do
54
+ a = described_class
55
+ .generate('http://example.com', {}, 'accept' => 'json')
56
+ b = described_class
57
+ .generate('http://example.com', {}, 'accept' => '*/*')
58
+
59
+ expect(a).not_to eq b
60
+ end
61
+
62
+ it 'generates the same digest with url parameters and headers ' \
63
+ 'in diffrent order' do
64
+ a = described_class.generate(
65
+ 'http://example.com',
66
+ { 'a' => 'aaa', 'b' => 'bbb' },
67
+ 'x-aaa' => 'aaa', 'x-bbb' => 'bbb'
68
+ )
69
+ b = described_class .generate(
70
+ 'http://example.com',
71
+ { 'b' => 'bbb', 'a' => 'aaa' },
72
+ 'x-bbb' => 'bbb', 'x-aaa' => 'aaa'
73
+ )
74
+
75
+ expect(a).to eq b
76
+ end
77
+ end
@@ -4,6 +4,8 @@ require 'webmock/rspec'
4
4
  require 'timecop'
5
5
 
6
6
  describe Resterl::Client do
7
+ subject(:client) { Resterl::Client.new }
8
+
7
9
  describe 'minimum cache lifetime' do
8
10
  before do
9
11
  Timecop.freeze(Time.parse('2015-01-01 01:00'))
@@ -14,7 +16,6 @@ describe Resterl::Client do
14
16
  headers: { cache_control: 'max-age=0, private, must-revalidate' }
15
17
  ).then.to_raise('2 requests')
16
18
  end
17
- let(:client) { Resterl::Client.new }
18
19
 
19
20
  it 'is used in "max-age=0" case' do
20
21
  response = client.get 'http://www.example.com/', {}, {}
@@ -31,4 +32,12 @@ describe Resterl::Client do
31
32
  end.not_to raise_error
32
33
  end
33
34
  end
35
+
36
+ it 'encodes url params' do
37
+ stub_request(
38
+ :get, "http://www.example.com/?text=Ein%20gro%C3%9Fer%20Spa%C3%9F!"
39
+ ).to_return(status: 200, body: '', headers: {})
40
+
41
+ client.get 'http://www.example.com/', { text: 'Ein großer Spaß!' }, {}
42
+ end
34
43
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resterl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Dütsch
8
- autorequire:
8
+ - Stefan Hoffmann
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2015-08-06 00:00:00.000000000 Z
12
+ date: 2022-02-02 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: activesupport
@@ -16,28 +17,28 @@ dependencies:
16
17
  requirements:
17
18
  - - ">="
18
19
  - !ruby/object:Gem::Version
19
- version: 2.3.18
20
+ version: 3.2.0
20
21
  type: :runtime
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
25
  - - ">="
25
26
  - !ruby/object:Gem::Version
26
- version: 2.3.18
27
+ version: 3.2.0
27
28
  - !ruby/object:Gem::Dependency
28
29
  name: hashie
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
32
  - - "~>"
32
33
  - !ruby/object:Gem::Version
33
- version: 0.4.0
34
+ version: 3.5.7
34
35
  type: :runtime
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
39
  - - "~>"
39
40
  - !ruby/object:Gem::Version
40
- version: 0.4.0
41
+ version: 3.5.7
41
42
  - !ruby/object:Gem::Dependency
42
43
  name: yajl-ruby
43
44
  requirement: !ruby/object:Gem::Requirement
@@ -58,42 +59,56 @@ dependencies:
58
59
  requirements:
59
60
  - - "~>"
60
61
  - !ruby/object:Gem::Version
61
- version: '3.1'
62
+ version: '3.7'
62
63
  type: :development
63
64
  prerelease: false
64
65
  version_requirements: !ruby/object:Gem::Requirement
65
66
  requirements:
66
67
  - - "~>"
67
68
  - !ruby/object:Gem::Version
68
- version: '3.1'
69
+ version: '3.7'
69
70
  - !ruby/object:Gem::Dependency
70
71
  name: webmock
71
72
  requirement: !ruby/object:Gem::Requirement
72
73
  requirements:
73
74
  - - "~>"
74
75
  - !ruby/object:Gem::Version
75
- version: 1.20.4
76
+ version: 3.4.1
76
77
  type: :development
77
78
  prerelease: false
78
79
  version_requirements: !ruby/object:Gem::Requirement
79
80
  requirements:
80
81
  - - "~>"
81
82
  - !ruby/object:Gem::Version
82
- version: 1.20.4
83
+ version: 3.4.1
83
84
  - !ruby/object:Gem::Dependency
84
85
  name: timecop
85
86
  requirement: !ruby/object:Gem::Requirement
86
87
  requirements:
87
88
  - - "~>"
88
89
  - !ruby/object:Gem::Version
89
- version: 0.7.1
90
+ version: 0.9.1
90
91
  type: :development
91
92
  prerelease: false
92
93
  version_requirements: !ruby/object:Gem::Requirement
93
94
  requirements:
94
95
  - - "~>"
95
96
  - !ruby/object:Gem::Version
96
- version: 0.7.1
97
+ version: 0.9.1
98
+ - !ruby/object:Gem::Dependency
99
+ name: rubocop
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: 0.39.0
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: 0.39.0
97
112
  - !ruby/object:Gem::Dependency
98
113
  name: pry
99
114
  requirement: !ruby/object:Gem::Requirement
@@ -108,22 +123,26 @@ dependencies:
108
123
  - - ">="
109
124
  - !ruby/object:Gem::Version
110
125
  version: '0'
111
- description:
112
- email: florian.duetsch@nix-wie-weg.de
126
+ description:
127
+ email:
128
+ - florian.duetsch@nix-wie-weg.de
129
+ - stefan.hoffmann@nix-wie-weg.de
113
130
  executables: []
114
131
  extensions: []
115
132
  extra_rdoc_files: []
116
133
  files:
117
134
  - ".document"
118
135
  - ".gitignore"
136
+ - ".rubocop.yml"
137
+ - ".ruby-version"
119
138
  - Gemfile
120
139
  - LICENSE
121
140
  - README.rdoc
122
141
  - Rakefile
123
- - TODO.rdoc
124
142
  - lib/resterl.rb
125
143
  - lib/resterl/base_object.rb
126
144
  - lib/resterl/caches/cache_interface.rb
145
+ - lib/resterl/caches/cache_key_generator.rb
127
146
  - lib/resterl/caches/key_prefix_decorator.rb
128
147
  - lib/resterl/caches/nil_cache.rb
129
148
  - lib/resterl/caches/rails_memcached_cache.rb
@@ -139,12 +158,14 @@ files:
139
158
  - lib/resterl/response.rb
140
159
  - lib/resterl/version.rb
141
160
  - resterl.gemspec
161
+ - spec/lib/resterl/base_object_spec.rb
162
+ - spec/lib/resterl/caches/cache_key_generator_spec.rb
142
163
  - spec/lib/resterl/client_spec.rb
143
164
  - spec/spec_helper.rb
144
- homepage: http://github.com/Nix-wie-weg/resterl
165
+ homepage: https://github.com/Nix-wie-weg/resterl
145
166
  licenses: []
146
167
  metadata: {}
147
- post_install_message:
168
+ post_install_message:
148
169
  rdoc_options: []
149
170
  require_paths:
150
171
  - lib
@@ -152,19 +173,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
152
173
  requirements:
153
174
  - - ">="
154
175
  - !ruby/object:Gem::Version
155
- version: '0'
176
+ version: 2.0.0
156
177
  required_rubygems_version: !ruby/object:Gem::Requirement
157
178
  requirements:
158
179
  - - ">="
159
180
  - !ruby/object:Gem::Version
160
181
  version: '0'
161
182
  requirements: []
162
- rubyforge_project:
163
- rubygems_version: 2.4.2
164
- signing_key:
183
+ rubygems_version: 3.1.6
184
+ signing_key:
165
185
  specification_version: 4
166
186
  summary: Rudimentary HTTP client with focus on caching
167
187
  test_files:
188
+ - spec/lib/resterl/base_object_spec.rb
189
+ - spec/lib/resterl/caches/cache_key_generator_spec.rb
168
190
  - spec/lib/resterl/client_spec.rb
169
191
  - spec/spec_helper.rb
170
- has_rdoc:
data/TODO.rdoc DELETED
@@ -1,7 +0,0 @@
1
- * Edit README.rdoc
2
- * Tests!
3
- * Use technoweenie's faraday as base (http://github.com/technoweenie/faraday)
4
- * Secure caching with tests
5
- * Store parsed objects in cache (instead of the plain response)
6
- * Persistent connections
7
- * Documentation