resterl 0.0.17 → 0.1.2
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 +5 -5
- data/.gitignore +5 -0
- data/.rubocop.yml +40 -0
- data/.ruby-version +1 -0
- data/Gemfile +1 -1
- data/lib/resterl/base_object.rb +66 -84
- data/lib/resterl/caches/cache_key_generator.rb +15 -0
- data/lib/resterl/client.rb +2 -2
- data/lib/resterl/generic_request.rb +2 -5
- data/lib/resterl/version.rb +1 -1
- data/lib/resterl.rb +4 -6
- data/resterl.gemspec +14 -14
- data/spec/lib/resterl/base_object_spec.rb +23 -0
- data/spec/lib/resterl/caches/cache_key_generator_spec.rb +77 -0
- data/spec/lib/resterl/client_spec.rb +10 -1
- metadata +44 -23
- data/TODO.rdoc +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e9d8e9eaf831b7bda085200459577fc210e7b91fa5fdc5491d5eec3d2e07d7dc
|
4
|
+
data.tar.gz: fb2ce9cd828dd55f21fb78920dbaf9da9b180d3392d60c318fd5f3f8da70d64f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb6c0ad39ecfaa6246085fae41bf177e5c69b064f109031b39a34c50cb7632c12dd897d4c990b5c50f7c693e38b96b7d3d1e01d819c69be61df977bff518d681
|
7
|
+
data.tar.gz: c98b91ce82439eb45f1ac55c855d9da2fbf36dcf345e77340ae9819cca59e3a959c289ece4497a8d722c1c577e3ff34ddc35ff6e3b3d4b7b7f3041b370aa65d2
|
data/.gitignore
CHANGED
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
|
1
|
+
source 'https://rubygems.org'
|
2
2
|
gemspec
|
data/lib/resterl/base_object.rb
CHANGED
@@ -1,98 +1,80 @@
|
|
1
1
|
require 'hashie'
|
2
2
|
|
3
|
-
|
4
|
-
|
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
|
-
|
10
|
+
def initialize data = {}, response = nil
|
11
|
+
@data = Hashie::Mash.new data
|
12
|
+
@response = response
|
13
|
+
end
|
7
14
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
attr_reader :response
|
15
|
+
def method_missing sym, *args, &block
|
16
|
+
@data.send sym, *args, &block
|
17
|
+
end
|
12
18
|
|
13
|
-
|
14
|
-
|
19
|
+
def respond_to? sym, include_private = false
|
20
|
+
super || @data.respond_to?(sym, include_private)
|
21
|
+
end
|
15
22
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
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
|
-
|
22
|
-
|
23
|
-
|
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
|
-
|
33
|
+
def delete_object url
|
34
|
+
resterl_client.delete(url, {}, accept_header, {})
|
35
|
+
end
|
28
36
|
|
29
|
-
|
30
|
-
|
31
|
-
|
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
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
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
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
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
|
data/lib/resterl/client.rb
CHANGED
@@ -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 ||=
|
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
|
data/lib/resterl/version.rb
CHANGED
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
|
6
|
-
module
|
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
|
-
|
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 = [
|
10
|
-
s.email = 'florian.duetsch@nix-wie-weg.de'
|
11
|
-
s.homepage = '
|
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 =
|
15
|
-
s.executables =
|
16
|
-
|
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.
|
19
|
-
s.add_runtime_dependency 'hashie', '~>
|
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.
|
22
|
-
s.add_development_dependency 'webmock', '~>
|
23
|
-
s.add_development_dependency 'timecop', '~> 0.
|
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.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Dütsch
|
8
|
-
|
8
|
+
- Stefan Hoffmann
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
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.
|
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.
|
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:
|
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:
|
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.
|
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.
|
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:
|
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:
|
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.
|
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.
|
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:
|
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:
|
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:
|
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
|
-
|
163
|
-
|
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