gds-api-adapters 0.0.37 → 0.0.38

Sign up to get free protection for your applications and to get access to all the features.
@@ -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