gds-api-adapters 0.0.37 → 0.0.38

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.
@@ -1,13 +1,19 @@
1
1
  require_relative 'response'
2
2
  require_relative 'exceptions'
3
3
  require_relative 'version'
4
+ require 'lrucache'
4
5
 
5
6
  module GdsApi
6
7
  class JsonClient
8
+ def self.cache
9
+ @cache ||= LRUCache.new(max_size: 10)
10
+ end
11
+
7
12
  attr_accessor :logger, :options
8
13
 
9
14
  def initialize(options = {})
10
15
  @logger = options[:logger] || GdsApi::Base.logger
16
+ @cache = options[:cache] || JsonClient.cache
11
17
  @options = options
12
18
  end
13
19
 
@@ -19,7 +25,7 @@ module GdsApi
19
25
  DEFAULT_TIMEOUT_IN_SECONDS = 2
20
26
 
21
27
  def get_json(url)
22
- do_request(Net::HTTP::Get, url)
28
+ @cache[url] ||= do_request(Net::HTTP::Get, url)
23
29
  end
24
30
 
25
31
  def post_json(url, params)
@@ -1,3 +1,3 @@
1
1
  module GdsApi
2
- VERSION = '0.0.37'
2
+ VERSION = '0.0.38'
3
3
  end
@@ -5,7 +5,7 @@ require 'base64'
5
5
 
6
6
  class JsonClientTest < MiniTest::Spec
7
7
  def setup
8
- @client = GdsApi::JsonClient.new
8
+ @client = GdsApi::JsonClient.new(cache: {})
9
9
  end
10
10
 
11
11
  def options;
@@ -50,6 +50,15 @@ class JsonClientTest < MiniTest::Spec
50
50
  assert_equal GdsApi::Response, @client.get_json(url).class
51
51
  end
52
52
 
53
+ def test_should_cache_multiple_requests_to_same_url_across_instances
54
+ url = "http://some.endpoint/some.json"
55
+ result = {"foo" => "bar"}
56
+ stub_request(:get, url).to_return(:body => JSON.dump(result), :status => 200).times(1)
57
+ response_a = GdsApi::JsonClient.new.get_json(url)
58
+ response_b = GdsApi::JsonClient.new.get_json(url)
59
+ assert_equal response_a.object_id, response_b.object_id
60
+ end
61
+
53
62
  def test_should_return_nil_if_404_returned_from_endpoint
54
63
  url = "http://some.endpoint/some.json"
55
64
  stub_request(:get, url).to_return(:body => "{}", :status => 404)
metadata CHANGED
@@ -1,190 +1,188 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: gds-api-adapters
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.38
4
5
  prerelease:
5
- version: 0.0.37
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - James Stewart
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2012-01-13 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2012-01-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: plek
17
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &22925880 !ruby/object:Gem::Requirement
18
17
  none: false
19
- requirements:
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
24
+ version_requirements: *22925880
25
+ - !ruby/object:Gem::Dependency
27
26
  name: null_logger
28
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ requirement: &22925100 !ruby/object:Gem::Requirement
29
28
  none: false
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
34
33
  type: :runtime
35
34
  prerelease: false
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
35
+ version_requirements: *22925100
36
+ - !ruby/object:Gem::Dependency
37
+ name: lrucache
38
+ requirement: &22970740 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 0.1.1
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *22970740
47
+ - !ruby/object:Gem::Dependency
38
48
  name: rake
39
- requirement: &id003 !ruby/object:Gem::Requirement
49
+ requirement: &22969200 !ruby/object:Gem::Requirement
40
50
  none: false
41
- requirements:
51
+ requirements:
42
52
  - - ~>
43
- - !ruby/object:Gem::Version
53
+ - !ruby/object:Gem::Version
44
54
  version: 0.9.2.2
45
55
  type: :development
46
56
  prerelease: false
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
57
+ version_requirements: *22969200
58
+ - !ruby/object:Gem::Dependency
49
59
  name: webmock
50
- requirement: &id004 !ruby/object:Gem::Requirement
60
+ requirement: &22968160 !ruby/object:Gem::Requirement
51
61
  none: false
52
- requirements:
62
+ requirements:
53
63
  - - ~>
54
- - !ruby/object:Gem::Version
55
- version: "1.7"
64
+ - !ruby/object:Gem::Version
65
+ version: '1.7'
56
66
  type: :development
57
67
  prerelease: false
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
68
+ version_requirements: *22968160
69
+ - !ruby/object:Gem::Dependency
60
70
  name: mocha
61
- requirement: &id005 !ruby/object:Gem::Requirement
71
+ requirement: &22967360 !ruby/object:Gem::Requirement
62
72
  none: false
63
- requirements:
73
+ requirements:
64
74
  - - ~>
65
- - !ruby/object:Gem::Version
75
+ - !ruby/object:Gem::Version
66
76
  version: 0.10.0
67
77
  type: :development
68
78
  prerelease: false
69
- version_requirements: *id005
70
- - !ruby/object:Gem::Dependency
79
+ version_requirements: *22967360
80
+ - !ruby/object:Gem::Dependency
71
81
  name: minitest
72
- requirement: &id006 !ruby/object:Gem::Requirement
82
+ requirement: &22966020 !ruby/object:Gem::Requirement
73
83
  none: false
74
- requirements:
84
+ requirements:
75
85
  - - ~>
76
- - !ruby/object:Gem::Version
86
+ - !ruby/object:Gem::Version
77
87
  version: 2.10.0
78
88
  type: :development
79
89
  prerelease: false
80
- version_requirements: *id006
81
- - !ruby/object:Gem::Dependency
90
+ version_requirements: *22966020
91
+ - !ruby/object:Gem::Dependency
82
92
  name: rack
83
- requirement: &id007 !ruby/object:Gem::Requirement
93
+ requirement: &22964680 !ruby/object:Gem::Requirement
84
94
  none: false
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- version: "0"
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
89
99
  type: :development
90
100
  prerelease: false
91
- version_requirements: *id007
92
- - !ruby/object:Gem::Dependency
101
+ version_requirements: *22964680
102
+ - !ruby/object:Gem::Dependency
93
103
  name: simplecov
94
- requirement: &id008 !ruby/object:Gem::Requirement
104
+ requirement: &22962820 !ruby/object:Gem::Requirement
95
105
  none: false
96
- requirements:
106
+ requirements:
97
107
  - - ~>
98
- - !ruby/object:Gem::Version
108
+ - !ruby/object:Gem::Version
99
109
  version: 0.5.4
100
110
  type: :development
101
111
  prerelease: false
102
- version_requirements: *id008
103
- - !ruby/object:Gem::Dependency
112
+ version_requirements: *22962820
113
+ - !ruby/object:Gem::Dependency
104
114
  name: simplecov-rcov
105
- requirement: &id009 !ruby/object:Gem::Requirement
115
+ requirement: &23061160 !ruby/object:Gem::Requirement
106
116
  none: false
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: "0"
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
111
121
  type: :development
112
122
  prerelease: false
113
- version_requirements: *id009
123
+ version_requirements: *23061160
114
124
  description: A set of adapters providing easy access to the GDS gov.uk APIs
115
- email:
125
+ email:
116
126
  - jystewart@gmail.com
117
127
  executables: []
118
-
119
128
  extensions: []
120
-
121
129
  extra_rdoc_files: []
122
-
123
- files:
124
- - lib/gds_api/base.rb
125
- - lib/gds_api/contactotron.rb
126
- - lib/gds_api/core-ext/openstruct.rb
127
- - lib/gds_api/exceptions.rb
128
- - lib/gds_api/helpers.rb
129
- - lib/gds_api/imminence.rb
130
- - lib/gds_api/json_client.rb
131
- - lib/gds_api/needotron.rb
132
- - lib/gds_api/oauth2_client.rb
130
+ files:
131
+ - lib/gds_api/response.rb
133
132
  - lib/gds_api/panopticon/registerer.rb
134
- - lib/gds_api/panopticon.rb
133
+ - lib/gds_api/core-ext/openstruct.rb
135
134
  - lib/gds_api/part_methods.rb
136
- - lib/gds_api/publisher.rb
137
- - lib/gds_api/response.rb
138
- - lib/gds_api/test_helpers/contactotron.rb
135
+ - lib/gds_api/oauth2_client.rb
139
136
  - lib/gds_api/test_helpers/imminence.rb
137
+ - lib/gds_api/test_helpers/contactotron.rb
140
138
  - lib/gds_api/test_helpers/panopticon.rb
141
139
  - lib/gds_api/test_helpers/publisher.rb
140
+ - lib/gds_api/imminence.rb
141
+ - lib/gds_api/needotron.rb
142
+ - lib/gds_api/contactotron.rb
143
+ - lib/gds_api/panopticon.rb
144
+ - lib/gds_api/helpers.rb
145
+ - lib/gds_api/json_client.rb
146
+ - lib/gds_api/publisher.rb
147
+ - lib/gds_api/exceptions.rb
142
148
  - lib/gds_api/version.rb
149
+ - lib/gds_api/base.rb
143
150
  - README.md
144
151
  - Rakefile
145
- - test/contactotron_api_test.rb
146
152
  - test/gds_api_base_test.rb
147
- - test/json_client_test.rb
148
- - test/panopticon_api_test.rb
149
153
  - test/publisher_api_test.rb
150
154
  - test/test_helper.rb
155
+ - test/panopticon_api_test.rb
156
+ - test/json_client_test.rb
157
+ - test/contactotron_api_test.rb
151
158
  homepage: http://github.com/alphagov/gds-api-adapters
152
159
  licenses: []
153
-
154
160
  post_install_message:
155
161
  rdoc_options: []
156
-
157
- require_paths:
162
+ require_paths:
158
163
  - lib
159
- required_ruby_version: !ruby/object:Gem::Requirement
164
+ required_ruby_version: !ruby/object:Gem::Requirement
160
165
  none: false
161
- requirements:
162
- - - ">="
163
- - !ruby/object:Gem::Version
164
- hash: 3917338129765576762
165
- segments:
166
- - 0
167
- version: "0"
168
- required_rubygems_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ! '>='
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
171
  none: false
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- hash: 3917338129765576762
174
- segments:
175
- - 0
176
- version: "0"
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
177
176
  requirements: []
178
-
179
177
  rubyforge_project:
180
- rubygems_version: 1.8.13
178
+ rubygems_version: 1.8.11
181
179
  signing_key:
182
180
  specification_version: 3
183
181
  summary: Adapters to work with GDS APIs
184
- test_files:
185
- - test/contactotron_api_test.rb
182
+ test_files:
186
183
  - test/gds_api_base_test.rb
187
- - test/json_client_test.rb
188
- - test/panopticon_api_test.rb
189
184
  - test/publisher_api_test.rb
190
185
  - test/test_helper.rb
186
+ - test/panopticon_api_test.rb
187
+ - test/json_client_test.rb
188
+ - test/contactotron_api_test.rb