resterl 0.0.12 → 0.0.13

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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NTEyZGFhZmRlNTc1ZTQxZmVhODliZTYxNjkzYTExMDA2OGFhYzExNA==
5
+ data.tar.gz: !binary |-
6
+ ZTBiY2I0NTJlNzFhZjcxZGMxYTA0Nzc3ODZjYzQ3MTQxNjA3OTNhYg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MDRiOWMwYTgyNWU2MWUyOTEwZDRjYjgwMjhjNmRkNThhZmMzZTY0MWNlYzE5
10
+ ZjkwODhhOGRhOTQyMmIwYjU3OTJiYzAzYzgxODE4ZjRkOGM3MzE5ZmRmNmFj
11
+ Yzg0MTcwNTZlNDBkZmEyZmExMmI0NDMxNzI0YjRlOGIzYTY2OGQ=
12
+ data.tar.gz: !binary |-
13
+ ZmYxOTg1NWYwZGY2OGI2MTE4ZGYzNjE4NTNjZmU0ODU1M2YwZGRhYzZkMDA5
14
+ MTQ2ZGNkM2IwZGEzZTgzZTk4ZjkyZTQ4Nzk5MGQyMDVlNzc5MWNlYTU0MzRm
15
+ NTBkZGVjMTY1NzBhZDRkNzJlNThiMjE5ZGJkYTBiZDFhYmI0YzQ=
@@ -1,11 +1,17 @@
1
- class Resterl::Caches::CacheInterface
2
- def read key
3
- raise 'Not yet implemented!'
4
- end
5
- def write key, value, expires_in
6
- raise 'Not yet implemented!'
7
- end
8
- def delete key
9
- raise 'Not yet implemented!'
1
+ module Resterl
2
+ module Caches
3
+ class CacheInterface
4
+ def read key
5
+ raise 'Not yet implemented!'
6
+ end
7
+
8
+ def write key, value, expires_in
9
+ raise 'Not yet implemented!'
10
+ end
11
+
12
+ def delete key
13
+ raise 'Not yet implemented!'
14
+ end
15
+ end
10
16
  end
11
17
  end
@@ -1,120 +1,127 @@
1
- class Resterl::Client
2
- attr_reader :options
3
- DEFAULTS = {
4
- :max_redirect_depth => 10,
5
- :cache => Resterl::Caches::SimpleCache.new,
6
- :ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE,
7
- :expiry_multiplier => 10,
8
- :minimum_cache_lifetime => 5 * 60 # 5 Minuten
9
- }
10
-
11
- class TooManyRedirects < StandardError; end
12
-
13
- def initialize(options = {})
14
- @options = DEFAULTS.merge(options).freeze
15
- @cache = @options[:cache]
16
- end
1
+ # encoding: UTF-8
2
+
3
+ module Resterl
4
+ class Client
5
+ attr_reader :options
6
+ DEFAULTS = {
7
+ max_redirect_depth: 10,
8
+ cache: Resterl::Caches::SimpleCache.new,
9
+ ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE,
10
+ expiry_multiplier: 10,
11
+ minimum_cache_lifetime: 5 * 60 # 5 Minuten
12
+ }
13
+
14
+ class TooManyRedirects < StandardError; end
15
+
16
+ def initialize(options = {})
17
+ @options = DEFAULTS.merge(options).freeze
18
+ @cache = @options[:cache]
19
+ end
17
20
 
18
- def get url, params, headers
19
- url = setup_url(url)
21
+ def get url, params, headers
22
+ url = setup_url(url)
20
23
 
21
- # Cache-Schlüssel aus Pfad hashen
22
- cache_key = data_to_cache_key url, params, headers
24
+ # Cache-Schlüssel aus Pfad hashen
25
+ cache_key = data_to_cache_key url, params, headers
23
26
 
24
- # Response aus Cache holen
25
- old_response = @cache.read(cache_key)
27
+ # Response aus Cache holen
28
+ old_response = @cache.read(cache_key)
26
29
 
27
- if old_response and not old_response.expired?
28
- # Anfrage noch nicht abgelaufen, Ergebnis aus dem Cache verwenden
29
- old_response
30
- else
31
- # Neue Anfrage
32
- new_get_request url, cache_key, params, headers, old_response
30
+ if old_response && !old_response.expired?
31
+ # Anfrage noch nicht abgelaufen, Ergebnis aus dem Cache verwenden
32
+ old_response
33
+ else
34
+ # Neue Anfrage
35
+ new_get_request url, cache_key, params, headers, old_response
36
+ end
33
37
  end
34
- end
35
-
36
- def post url, params, data, headers
37
- # Caching nicht notwendig
38
- url = setup_url url
39
- request = Resterl::PostRequest.new(self, url, params, data, headers)
40
- response = request.perform.response
41
-
42
- response
43
- end
44
-
45
- def put url, params, data, headers
46
- # TODO: Testen, durchdenken, refactoring?
47
- url = setup_url url
48
- request = Resterl::PutRequest.new(self, url, params, data, headers)
49
- request.perform.response
50
- end
51
-
52
- def delete url, params, data, headers
53
- # TODO: Testen, durchdenken, refactoring?
54
- url = setup_url url
55
- request = Resterl::DeleteRequest.new(self, url, params, data, headers)
56
- request.perform.response
57
- end
58
-
59
- private
60
38
 
61
- def new_get_request url, cache_key, params, headers, old_response
39
+ def post url, params, data, headers
40
+ # Caching nicht notwendig
41
+ url = setup_url url
42
+ request = Resterl::PostRequest.new(self, url, params, data, headers)
43
+ response = request.perform.response
62
44
 
63
- # Ggf. ETag und Last-Modified auslesen
64
- if old_response
65
- etag = old_response.net_http_response['ETag']
66
- headers['If-None-Match'] = etag if etag
67
-
68
- last_modified = old_response.net_http_response['Last-Modified']
69
- headers['If-Modified-Since'] = last_modified if last_modified
45
+ response
70
46
  end
71
47
 
72
- # Anfrage stellen, ggf. ETag mit übergeben
73
- request = Resterl::GetRequest.new(self, url, params, headers)
74
- new_response = request.perform.response
75
-
76
- response, max_age_seconds = case new_response
77
-
78
- when Net::HTTPClientError, Net::HTTPServerError
79
- # Aus dem Cache muss nichts entfernt werden, weil ja auch kein Eintrag
80
- # (mehr) drin ist.
81
- new_response.error!
82
- when Net::HTTPNotModified
83
- # Wenn "304 Not Modified", dann altes Ergebnis als neues Ergebnis
84
- # verwenden
85
- r_temp = Resterl::Response.new(new_response)
86
- old_response.update_expires_at(r_temp.expires_at)
87
- [old_response, r_temp.expires_at - Time.now]
88
-
89
- when Net::HTTPSuccess
90
- r = Resterl::Response.new(new_response)
91
- [r, r.expires_at - Time.now]
92
- else
93
- raise 'unknown response'
48
+ def put url, params, data, headers
49
+ # TODO: Testen, durchdenken, refactoring?
50
+ url = setup_url url
51
+ request = Resterl::PutRequest.new(self, url, params, data, headers)
52
+ request.perform.response
94
53
  end
95
54
 
96
- # Cachezeit berechnen
97
- expiry = [
98
- max_age_seconds.to_i * options[:expiry_multiplier],
99
- options[:minimum_cache_lifetime]
100
- ].max
55
+ def delete url, params, data, headers
56
+ # TODO: Testen, durchdenken, refactoring?
57
+ url = setup_url url
58
+ request = Resterl::DeleteRequest.new(self, url, params, data, headers)
59
+ request.perform.response
60
+ end
101
61
 
102
- # Ergebnis im Cache speichern
103
- @cache.write cache_key, response, expiry
62
+ def invalidate url, params, headers
63
+ @cache.delete data_to_cache_key(url, params, headers)
64
+ end
104
65
 
105
- response
106
- end
66
+ private
67
+
68
+ def new_get_request url, cache_key, params, headers, old_response
69
+ # Ggf. ETag und Last-Modified auslesen
70
+ if old_response
71
+ etag = old_response.net_http_response['ETag']
72
+ headers['If-None-Match'] = etag if etag
73
+
74
+ last_modified = old_response.net_http_response['Last-Modified']
75
+ headers['If-Modified-Since'] = last_modified if last_modified
76
+ end
77
+
78
+ # Anfrage stellen, ggf. ETag mit übergeben
79
+ request = Resterl::GetRequest.new(self, url, params, headers)
80
+ new_response = request.perform.response
81
+
82
+ response, max_age_seconds = case new_response
83
+ when Net::HTTPClientError,
84
+ Net::HTTPServerError
85
+ # Aus dem Cache muss nichts entfernt werden,
86
+ # weil ja auch kein Eintrag (mehr) drin ist.
87
+ new_response.error!
88
+ when Net::HTTPNotModified
89
+ # Wenn "304 Not Modified", dann altes
90
+ # Ergebnis als neues Ergebnis verwenden
91
+ r_temp = Resterl::Response.new(new_response)
92
+ old_response.update_expires_at(
93
+ r_temp.expires_at)
94
+ [old_response, r_temp.expires_at - Time.now]
95
+ when Net::HTTPSuccess
96
+ r = Resterl::Response.new(new_response)
97
+ [r, r.expires_at - Time.now]
98
+ else
99
+ raise 'unknown response'
100
+ end
101
+
102
+ # Cachezeit berechnen
103
+ expiry = [
104
+ max_age_seconds.to_i * options[:expiry_multiplier],
105
+ options[:minimum_cache_lifetime]
106
+ ].max
107
+
108
+ # Ergebnis im Cache speichern
109
+ @cache.write cache_key, response, expiry
110
+
111
+ response
112
+ end
107
113
 
108
- def setup_url url
109
- if url =~ /^http/
110
- url
111
- else
112
- bu = options[:base_uri]
113
- bu ? "#{bu}#{url}" : url
114
+ def setup_url url
115
+ if url =~ /^http/
116
+ url
117
+ else
118
+ bu = options[:base_uri]
119
+ bu ? "#{bu}#{url}" : url
120
+ end
114
121
  end
115
- end
116
122
 
117
- def data_to_cache_key *args
118
- args.hash
123
+ def data_to_cache_key *args
124
+ args.hash
125
+ end
119
126
  end
120
127
  end
@@ -1,3 +1,3 @@
1
1
  module Resterl
2
- VERSION = '0.0.12'
2
+ VERSION = '0.0.13'
3
3
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resterl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
5
- prerelease:
4
+ version: 0.0.13
6
5
  platform: ruby
7
6
  authors:
8
7
  - Florian Dütsch
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-06-21 00:00:00.000000000 Z
11
+ date: 2014-10-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: hashie
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: yajl-ruby
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: shoulda
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ! '>='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ! '>='
60
53
  - !ruby/object:Gem::Version
@@ -94,28 +87,26 @@ files:
94
87
  - test/test_resterl.rb
95
88
  homepage: http://github.com/Nix-wie-weg/resterl
96
89
  licenses: []
90
+ metadata: {}
97
91
  post_install_message:
98
92
  rdoc_options: []
99
93
  require_paths:
100
94
  - lib
101
95
  required_ruby_version: !ruby/object:Gem::Requirement
102
- none: false
103
96
  requirements:
104
97
  - - ! '>='
105
98
  - !ruby/object:Gem::Version
106
99
  version: '0'
107
100
  required_rubygems_version: !ruby/object:Gem::Requirement
108
- none: false
109
101
  requirements:
110
102
  - - ! '>='
111
103
  - !ruby/object:Gem::Version
112
104
  version: '0'
113
105
  requirements: []
114
106
  rubyforge_project:
115
- rubygems_version: 1.8.24
107
+ rubygems_version: 2.2.2
116
108
  signing_key:
117
- specification_version: 3
109
+ specification_version: 4
118
110
  summary: Rudimentary HTTP client with focus on caching
119
- test_files:
120
- - test/helper.rb
121
- - test/test_resterl.rb
111
+ test_files: []
112
+ has_rdoc: