osm 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## Version 0.0.9
2
+
3
+ * Allow passing of Osm::Term objects as well as term IDs
4
+ * Allow passing of Osm::Section objects as well as section IDs
5
+ * Allow configuration of text prepended to keys used in the cache (:cache\_prepend\_to\_key option to configure method)
6
+ * Require setting of cache class to use caching (:cache option to configure method)
7
+
1
8
  ## version 0.0.8
2
9
 
3
10
  * Fix unknown variable when updating evening
data/README.md CHANGED
@@ -23,7 +23,7 @@ Add to your Gemfile and run the `bundle` command to install it.
23
23
  gem 'osm'
24
24
  ```
25
25
 
26
- Configure the gem during the initalization of the app (e.g. in config/initializers/osm.rb).
26
+ Configure the gem during the initalization of the app (e.g. if using rails then config/initializers/osm.rb would look like):
27
27
 
28
28
  ```ruby
29
29
  ActionDispatch::Callbacks.to_prepare do
@@ -32,6 +32,7 @@ Osm::Api.configure(
32
32
  :api_token => 'YOU WILL BE GIVEN THIS BY ED AT OSM',
33
33
  :api_name => 'YOU WILL GIVE THIS TO ED AT OSM',
34
34
  :api_site => :scout,
35
+ :cache => Rails.cache
35
36
  )
36
37
  end
37
38
  ```
@@ -58,3 +59,34 @@ Documentation can be found on [rubydoc.info](http://rubydoc.info/github/robertga
58
59
 
59
60
  We follow the [Semantic Versioning](http://semver.org/) concept,
60
61
  however it should be noted that when the OSM API adds a feature it can be difficult to decide wether to bump the patch or minor version number up. A smaller change (such as adding score into the grouping object) will bump the patch whereas a larger change wil bump the minor version.
62
+
63
+
64
+ ## Parts of the OSM API Supported:
65
+
66
+ ### Read
67
+ * Activity
68
+ * API Access
69
+ * API Access for our app
70
+ * Due Badges
71
+ * Events
72
+ * Groupings (e.g. Sixes, Patrols)
73
+ * Members
74
+ * Notepad
75
+ * Notepads
76
+ * Programme
77
+ * Register
78
+ * Register Structure
79
+ * Roles
80
+ * Section
81
+ * Sections
82
+ * Term
83
+ * Terms
84
+
85
+ ### Update
86
+ * Evening
87
+
88
+ ### Create
89
+ * Evening
90
+
91
+ ### Actions
92
+ * Authorise an app to use the API on a user's behalf
data/lib/osm/activity.rb CHANGED
@@ -4,13 +4,13 @@ module Osm
4
4
 
5
5
  attr_reader :id, :version, :group_id, :user_id, :title, :description, :resources, :instructions, :running_time, :location, :shared, :rating, :editable, :deletable, :used, :versions, :sections, :tags, :files, :badges
6
6
  # @!attribute [r] id
7
- # @return [FixNum] the id for the activity
7
+ # @return [Fixnum] the id for the activity
8
8
  # @!attribute [r] version
9
- # @return [FixNum] the version of the activity
9
+ # @return [Fixnum] the version of the activity
10
10
  # @!attribute [r] group_id
11
- # @return [FixNum] the group_id
11
+ # @return [Fixnum] the group_id
12
12
  # @!attribute [r] user_id
13
- # @return [FixNum] the user_id of the creator of the activity
13
+ # @return [Fixnum] the user_id of the creator of the activity
14
14
  # @!attribute [r] title
15
15
  # @return [String] the activity's title
16
16
  # @!attribute [r] description
@@ -20,19 +20,19 @@ module Osm
20
20
  # @!attribute [r] instructions
21
21
  # @return [String] instructions for doing the activity
22
22
  # @!attribute [r] running_time
23
- # @return [FixNum] duration of the activity in minutes
23
+ # @return [Fixnum] duration of the activity in minutes
24
24
  # @!attribute [r] location
25
25
  # @return [Symbol] :indoors, :outdoors or :both
26
26
  # @!attribute [r] shared
27
- # @return [FixNum] 2 - Public, 0 - Private
27
+ # @return [Fixnum] 2 - Public, 0 - Private
28
28
  # @!attribute [r] rating
29
- # @return [FixNum] ?
29
+ # @return [Fixnum] ?
30
30
  # @!attribute [r] editable
31
31
  # @return [Boolean] Wether the current API user can edit this activity
32
32
  # @!attribute [r] deletable
33
33
  # @return [Boolean] Wether the current API user can delete this activity
34
34
  # @!attribute [r] used
35
- # @return [FixNum] How many times this activity has been used (total accross all of OSM)
35
+ # @return [Fixnum] How many times this activity has been used (total accross all of OSM)
36
36
  # @!attribute [r] versions
37
37
  # @return [Array<Hash>] ? (:value - version, :firstname - created by, :label - label, :user_id - OSM user ID of creator)
38
38
  # @!attribute [r] sections
data/lib/osm/api.rb CHANGED
@@ -18,6 +18,8 @@ module Osm
18
18
  # Most items however will be cached for this time
19
19
 
20
20
  @@user_access = Hash.new
21
+ @@cache_prepend_to_key = 'OSMAPI'
22
+ @@cache = nil
21
23
 
22
24
  # Initialize a new API connection
23
25
  # If passing user details then both must be passed
@@ -42,7 +44,9 @@ module Osm
42
44
  # @option options [String] :api_token the token which goes with the above api
43
45
  # @option options [String] :api_name the name displayed in the External Access tab of OSM
44
46
  # @option options [Symbol] :api_sate wether to use OSM (if :scout) or OGM (if :guide)
45
- # @option options [FixNum] :default_cache_ttl (optional, default = 30.minutes) The default TTL value for the cache, note that some items are cached for twice this time and others are cached for half this time (in seconds).
47
+ # @option options [Class] :cache (optional) An instance of a cache class, must provide the methods (exist?, delete, write, read), for details see Rails.cache. Whilst this is optional you should remember that caching is required to use the OSM API.
48
+ # @option options [Fixnum] :default_cache_ttl (optional, default = 30.minutes) The default TTL value for the cache, note that some items are cached for twice this time and others are cached for half this time (in seconds)
49
+ # @option options [String] :cache_prepend_to_key (optional, default = 'OSMAPI') Text to prepend to the key used to store data in the cache
46
50
  # @return nil
47
51
  def self.configure(options)
48
52
  raise ArgumentError, ':api_id does not exist in options hash' if options[:api_id].nil?
@@ -50,12 +54,19 @@ module Osm
50
54
  raise ArgumentError, ':api_name does not exist in options hash' if options[:api_name].nil?
51
55
  raise ArgumentError, ':api_site does not exist in options hash or is invalid, this should be set to either :scout or :guide' unless [:scout, :guide].include?(options[:api_site])
52
56
  raise ArgumentError, ':default_cache_ttl must be greater than 0' unless (options[:default_cache_ttl].nil? || options[:default_cache_ttl].to_i > 0)
57
+ unless options[:cache].nil?
58
+ [:exist?, :delete, :write, :read].each do |method|
59
+ raise ArgumentError, ":cache must have a #{method} method" unless options[:cache].methods.include?(method)
60
+ end
61
+ end
53
62
 
54
63
  @@api_id = options[:api_id].to_s
55
64
  @@api_token = options[:api_token].to_s
56
65
  @@api_name = options[:api_name].to_s
57
66
  @@api_site = options[:api_site]
58
67
  @@default_cache_ttl = options[:default_cache_ttl].to_i unless options[:default_cache_ttl].nil?
68
+ @@cache_prepend_to_key = options[:cache_prepend_to_key].to_s unless options[:cache_prepend_to_key].nil?
69
+ @@cache = options[:cache]
59
70
  nil
60
71
  end
61
72
 
@@ -94,8 +105,8 @@ module Osm
94
105
  # @return [Array<Osm::Role>]
95
106
  def get_roles(options={}, api_data={})
96
107
 
97
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-roles-#{api_data[:userid] || @userid}")
98
- return Rails.cache.read("OSMAPI-roles-#{api_data[:userid] || @userid}")
108
+ if !options[:no_cache] && cache_exist?("roles-#{api_data[:userid] || @userid}")
109
+ return cache_read("roles-#{api_data[:userid] || @userid}")
99
110
  end
100
111
 
101
112
  data = perform_query('api.php?action=getUserRoles', api_data)
@@ -104,10 +115,10 @@ module Osm
104
115
  data.each do |item|
105
116
  role = Osm::Role.new(item)
106
117
  result.push role
107
- Rails.cache.write("OSMAPI-section-#{role.section.id}", role.section, :expires_in => @@default_cache_ttl*2)
118
+ cache_write("section-#{role.section.id}", role.section, :expires_in => @@default_cache_ttl*2)
108
119
  self.user_can_access :section, role.section.id, api_data
109
120
  end
110
- Rails.cache.write("OSMAPI-roles-#{api_data[:userid] || @userid}", result, :expires_in => @@default_cache_ttl*2)
121
+ cache_write("roles-#{api_data[:userid] || @userid}", result, :expires_in => @@default_cache_ttl*2)
111
122
 
112
123
  return result
113
124
  end
@@ -117,8 +128,8 @@ module Osm
117
128
  # @!macro options_api_data
118
129
  # @return [Hash] a hash (keys are section IDs, values are a string)
119
130
  def get_notepads(options={}, api_data={})
120
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-notepads-#{api_data[:userid] || @userid}")
121
- return Rails.cache.read("OSMAPI-notepads-#{api_data[:userid] || @userid}")
131
+ if !options[:no_cache] && cache_exist?("notepads-#{api_data[:userid] || @userid}")
132
+ return cache_read("notepads-#{api_data[:userid] || @userid}")
122
133
  end
123
134
 
124
135
  notepads = perform_query('api.php?action=getNotepads', api_data)
@@ -127,22 +138,24 @@ module Osm
127
138
  data = {}
128
139
  notepads.each do |key, value|
129
140
  data[key.to_i] = value
130
- Rails.cache.write("OSMAPI-notepad-#{key}", value, :expires_in => @@default_cache_ttl*2)
141
+ cache_write("notepad-#{key}", value, :expires_in => @@default_cache_ttl*2)
131
142
  end
132
143
 
133
- Rails.cache.write("OSMAPI-notepads-#{api_data[:userid] || @userid}", data, :expires_in => @@default_cache_ttl*2)
144
+ cache_write("notepads-#{api_data[:userid] || @userid}", data, :expires_in => @@default_cache_ttl*2)
134
145
  return data
135
146
  end
136
147
 
137
148
  # Get the notepad for a specified section
138
- # @param [FixNum] section_id the section id of the required section
149
+ # @param [Osm:Section, Fixnum] section the section (or its ID) to get the notepad for
139
150
  # @!macro options_get
140
151
  # @!macro options_api_data
141
152
  # @return nil if an error occured or the user does not have access to that section
142
153
  # @return [String] the content of the notepad otherwise
143
- def get_notepad(section_id, options={}, api_data={})
144
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-notepad-#{section_id}") && self.user_can_access?(:section, section_id, api_data)
145
- return Rails.cache.read("OSMAPI-notepad-#{section_id}")
154
+ def get_notepad(section, options={}, api_data={})
155
+ section_id = id_for_section(section)
156
+
157
+ if !options[:no_cache] && cache_exist?("notepad-#{section_id}") && self.user_can_access?(:section, section_id, api_data)
158
+ return cache_read("notepad-#{section_id}")
146
159
  end
147
160
 
148
161
  notepads = get_notepads(options, api_data)
@@ -156,15 +169,14 @@ module Osm
156
169
  end
157
170
 
158
171
  # Get the section (and its configuration)
159
- # @param [FixNum] section_id the section id of the required section
172
+ # @param [Fixnum] section_id the section id of the required section
160
173
  # @!macro options_get
161
174
  # @!macro options_api_data
162
175
  # @return nil if an error occured or the user does not have access to that section
163
176
  # @return [Osm::Section]
164
177
  def get_section(section_id, options={}, api_data={})
165
-
166
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-section-#{section_id}") && self.user_can_access?(:section, section_id, api_data)
167
- return Rails.cache.read("OSMAPI-section-#{section_id}")
178
+ if !options[:no_cache] && cache_exist?("section-#{section_id}") && self.user_can_access?(:section, section_id, api_data)
179
+ return cache_read("section-#{section_id}")
168
180
  end
169
181
 
170
182
  roles = get_roles(options, api_data)
@@ -178,13 +190,15 @@ module Osm
178
190
  end
179
191
 
180
192
  # Get the groupings (e.g. patrols, sixes, lodges) for a given section
181
- # @param [FixNum] section_id the section to get the programme for
193
+ # @param [Osm::Section, Fixnum] section the section to get the groupings for
182
194
  # @!macro options_get
183
195
  # @!macro options_api_data
184
196
  # @return [Array<Osm::Grouping>]
185
- def get_groupings(section_id, options={}, api_data={})
186
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-groupings-#{section_id}") && self.user_can_access?(:section, section_id, api_data)
187
- return Rails.cache.read("OSMAPI-groupings-#{section_id}")
197
+ def get_groupings(section, options={}, api_data={})
198
+ section_id = id_for_section(section)
199
+
200
+ if !options[:no_cache] && cache_exist?("groupings-#{section_id}") && self.user_can_access?(:section, section_id, api_data)
201
+ return cache_read("groupings-#{section_id}")
188
202
  end
189
203
 
190
204
  data = perform_query("users.php?action=getPatrols&sectionid=#{section_id}", api_data)
@@ -193,10 +207,10 @@ module Osm
193
207
  data['patrols'].each do |item|
194
208
  grouping = Osm::Grouping.new(item)
195
209
  result.push grouping
196
- Rails.cache.write("OSMAPI-grouping-#{grouping.id}", grouping, :expires_in => @@default_cache_ttl*2)
210
+ cache_write("grouping-#{grouping.id}", grouping, :expires_in => @@default_cache_ttl*2)
197
211
  self.user_can_access :grouping, grouping.id, api_data
198
212
  end
199
- Rails.cache.write("OSMAPI-groupings-#{section_id}", result, :expires_in => @@default_cache_ttl*2)
213
+ cache_write("groupings-#{section_id}", result, :expires_in => @@default_cache_ttl*2)
200
214
 
201
215
  return result
202
216
  end
@@ -206,8 +220,8 @@ module Osm
206
220
  # @!macro options_api_data
207
221
  # @return [Array<Osm::Term>]
208
222
  def get_terms(options={}, api_data={})
209
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-terms-#{api_data[:userid] || @userid}")
210
- return Rails.cache.read("OSMAPI-terms-#{api_data[:userid] || @userid}")
223
+ if !options[:no_cache] && cache_exist?("terms-#{api_data[:userid] || @userid}")
224
+ return cache_read("terms-#{api_data[:userid] || @userid}")
211
225
  end
212
226
 
213
227
  data = perform_query('api.php?action=getTerms', api_data)
@@ -217,24 +231,24 @@ module Osm
217
231
  data[key].each do |item|
218
232
  term = Osm::Term.new(item)
219
233
  result.push term
220
- Rails.cache.write("OSMAPI-term-#{term.id}", term, :expires_in => @@default_cache_ttl*2)
234
+ cache_write("term-#{term.id}", term, :expires_in => @@default_cache_ttl*2)
221
235
  self.user_can_access :term, term.id, api_data
222
236
  end
223
237
  end
224
238
 
225
- Rails.cache.write("OSMAPI-terms-#{api_data[:userid] || @userid}", result, :expires_in => @@default_cache_ttl*2)
239
+ cache_write("terms-#{api_data[:userid] || @userid}", result, :expires_in => @@default_cache_ttl*2)
226
240
  return result
227
241
  end
228
242
 
229
243
  # Get a term
230
- # @param [FixNum] term_id the id of the required term
244
+ # @param [Fixnum] term_id the id of the required term
231
245
  # @!macro options_get
232
246
  # @!macro options_api_data
233
247
  # @return nil if an error occured or the user does not have access to that term
234
248
  # @return [Osm::Term]
235
249
  def get_term(term_id, options={}, api_data={})
236
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-term-#{term_id}") && self.user_can_access?(:term, term_id, api_data)
237
- return Rails.cache.read("OSMAPI-term-#{term_id}")
250
+ if !options[:no_cache] && cache_exist?("term-#{term_id}") && self.user_can_access?(:term, term_id, api_data)
251
+ return cache_read("term-#{term_id}")
238
252
  end
239
253
 
240
254
  terms = get_terms(options)
@@ -248,14 +262,17 @@ module Osm
248
262
  end
249
263
 
250
264
  # Get the programme for a given term
251
- # @param [FixNum] section_id the section to get the programme for
252
- # @param [FixNum] term_id the term to get the programme for
265
+ # @param [Osm:Section, Fixnum] section the section (or its ID) to get the programme for
266
+ # @param [Osm:term, Fixnum] term the term (or its ID) to get the programme for, passing nil causes the current term to be used
253
267
  # @!macro options_get
254
268
  # @!macro options_api_data
255
269
  # @return [Array<Osm::Evening>]
256
- def get_programme(section_id, term_id, options={}, api_data={})
257
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-programme-#{section_id}-#{term_id}") && self.user_can_access?(:programme, section_id, api_data)
258
- return Rails.cache.read("OSMAPI-programme-#{section_id}-#{term_id}")
270
+ def get_programme(section, term, options={}, api_data={})
271
+ section_id = id_for_section(section)
272
+ term_id = id_for_term(term)
273
+
274
+ if !options[:no_cache] && cache_exist?("programme-#{section_id}-#{term_id}") && self.user_can_access?(:programme, section_id, api_data)
275
+ return cache_read("programme-#{section_id}-#{term_id}")
259
276
  end
260
277
 
261
278
  data = perform_query("programme.php?action=getProgramme&sectionid=#{section_id}&termid=#{term_id}", api_data)
@@ -274,19 +291,19 @@ module Osm
274
291
  end
275
292
  end
276
293
 
277
- Rails.cache.write("OSMAPI-programme-#{section_id}-#{term_id}", result, :expires_in => @@default_cache_ttl)
294
+ cache_write("programme-#{section_id}-#{term_id}", result, :expires_in => @@default_cache_ttl)
278
295
  return result
279
296
  end
280
297
 
281
298
  # Get activity details
282
- # @param [FixNum] activity_id the activity ID
283
- # @param [FixNum] version the version of the activity to retreive, if nil the latest version will be assumed
299
+ # @param [Fixnum] activity_id the activity ID
300
+ # @param [Fixnum] version the version of the activity to retreive, if nil the latest version will be assumed
284
301
  # @!macro options_get
285
302
  # @!macro options_api_data
286
303
  # @return [Osm::Activity]
287
304
  def get_activity(activity_id, version=nil, options={}, api_data={})
288
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-activity-#{activity_id}-#{version}") && self.user_can_access?(:activity, activity_id, api_data)
289
- return Rails.cache.read("OSMAPI-activity-#{activity_id}-#{version}")
305
+ if !options[:no_cache] && cache_exist?("activity-#{activity_id}-#{version}") && self.user_can_access?(:activity, activity_id, api_data)
306
+ return cache_read("activity-#{activity_id}-#{version}")
290
307
  end
291
308
 
292
309
  data = nil
@@ -297,24 +314,25 @@ module Osm
297
314
  end
298
315
 
299
316
  activity = Osm::Activity.new(data)
300
- Rails.cache.write("OSMAPI-activity-#{activity_id}-#{nil}", activity, :expires_in => @@default_cache_ttl*2) if version.nil?
301
- Rails.cache.write("OSMAPI-activity-#{activity_id}-#{activity.version}", activity, :expires_in => @@default_cache_ttl/2)
317
+ cache_write("activity-#{activity_id}-#{nil}", activity, :expires_in => @@default_cache_ttl*2) if version.nil?
318
+ cache_write("activity-#{activity_id}-#{activity.version}", activity, :expires_in => @@default_cache_ttl/2)
302
319
  self.user_can_access :activity, activity.id, api_data
303
320
 
304
321
  return activity
305
322
  end
306
323
 
307
- # Get member details
308
- # @param [FixNum] section_id the section to get details for
309
- # @param [FixNum] term_id the term to get details for, if nil the current term is assumed
324
+ # Get members
325
+ # @param [Osm:Section, Fixnum] section the section (or its ID) to get the members for
326
+ # @param [Osm:Term, Fixnum] term the term (or its ID) to get the members for, passing nil causes the current term to be used
310
327
  # @!macro options_get
311
328
  # @!macro options_api_data
312
329
  # @return [Array<Osm::Member>]
313
- def get_members(section_id, term_id=nil, options={}, api_data={})
314
- term_id = Osm::find_current_term_id(self, section_id, api_data) if term_id.nil?
330
+ def get_members(section, term=nil, options={}, api_data={})
331
+ section_id = id_for_section(section)
332
+ term_id = id_for_term(term)
315
333
 
316
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-members-#{section_id}-#{term_id}") && self.user_can_access?(:member, section_id, api_data)
317
- return Rails.cache.read("OSMAPI-members-#{section_id}-#{term_id}")
334
+ if !options[:no_cache] && cache_exist?("members-#{section_id}-#{term_id}") && self.user_can_access?(:member, section_id, api_data)
335
+ return cache_read("members-#{section_id}-#{term_id}")
318
336
  end
319
337
 
320
338
  data = perform_query("users.php?action=getUserDetails&sectionid=#{section_id}&termid=#{term_id}", api_data)
@@ -324,19 +342,21 @@ module Osm
324
342
  result.push Osm::Member.new(item)
325
343
  end
326
344
  self.user_can_access :member, section_id, api_data
327
- Rails.cache.write("OSMAPI-members-#{section_id}-#{term_id}", result, :expires_in => @@default_cache_ttl)
345
+ cache_write("members-#{section_id}-#{term_id}", result, :expires_in => @@default_cache_ttl)
328
346
 
329
347
  return result
330
348
  end
331
349
 
332
350
  # Get API access details for a given section
333
- # @param [FixNum] section_id the section to get details for
351
+ # @param [Osm:Section, Fixnum] section the section (or its ID) to get the details for
334
352
  # @!macro options_get
335
353
  # @!macro options_api_data
336
354
  # @return [Array<Osm::ApiAccess>]
337
- def get_api_access(section_id, options={}, api_data={})
338
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-api_access-#{api_data['userid'] || @userid}-#{section_id}")
339
- return Rails.cache.read("OSMAPI-api_access-#{api_data['userid'] || @userid}-#{section_id}")
355
+ def get_api_access(section, options={}, api_data={})
356
+ section_id = id_for_section(section)
357
+
358
+ if !options[:no_cache] && cache_exist?("api_access-#{api_data['userid'] || @userid}-#{section_id}")
359
+ return cache_read("api_access-#{api_data['userid'] || @userid}-#{section_id}")
340
360
  end
341
361
 
342
362
  data = perform_query("users.php?action=getAPIAccess&sectionid=#{section_id}", api_data)
@@ -348,20 +368,22 @@ module Osm
348
368
  self.user_can_access(:programme, section_id, api_data) if this_item.can_read?(:programme)
349
369
  self.user_can_access(:member, section_id, api_data) if this_item.can_read?(:member)
350
370
  self.user_can_access(:badge, section_id, api_data) if this_item.can_read?(:badge)
351
- Rails.cache.write("OSMAPI-api_access-#{api_data['userid'] || @userid}-#{section_id}-#{this_item.id}", this_item, :expires_in => @@default_cache_ttl*2)
371
+ cache_write("api_access-#{api_data['userid'] || @userid}-#{section_id}-#{this_item.id}", this_item, :expires_in => @@default_cache_ttl*2)
352
372
  end
353
373
 
354
374
  return result
355
375
  end
356
376
 
357
377
  # Get our API access details for a given section
358
- # @param [FixNum] section_id the section to get details for
378
+ # @param [Osm:Section, Fixnum] section the section (or its ID) to get the details for
359
379
  # @!macro options_get
360
380
  # @!macro options_api_data
361
381
  # @return [Osm::ApiAccess]
362
- def get_our_api_access(section_id, options={}, api_data={})
363
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-api_access-#{api_data['userid'] || @userid}-#{section_id}-#{Osm::Api.api_id}")
364
- return Rails.cache.read("OSMAPI-api_access-#{api_data['userid'] || @userid}-#{section_id}-#{Osm::Api.api_id}")
382
+ def get_our_api_access(section, options={}, api_data={})
383
+ section_id = id_for_section(section)
384
+
385
+ if !options[:no_cache] && cache_exist?("api_access-#{api_data['userid'] || @userid}-#{section_id}-#{Osm::Api.api_id}")
386
+ return cache_read("api_access-#{api_data['userid'] || @userid}-#{section_id}-#{Osm::Api.api_id}")
365
387
  end
366
388
 
367
389
  data = get_api_access(section_id, options)
@@ -374,13 +396,15 @@ module Osm
374
396
  end
375
397
 
376
398
  # Get events
377
- # @param [FixNum] section_id the section to get details for
399
+ # @param [Osm:Section, Fixnum] section the section (or its ID) to get the events for
378
400
  # @!macro options_get
379
401
  # @!macro options_api_data
380
402
  # @return [Array<Osm::Event>]
381
- def get_events(section_id, options={}, api_data={})
382
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-events-#{section_id}") && self.user_can_access?(:programme, section_id, api_data)
383
- return Rails.cache.read("OSMAPI-events-#{section_id}")
403
+ def get_events(section, options={}, api_data={})
404
+ section_id = id_for_section(section)
405
+
406
+ if !options[:no_cache] && cache_exist?("events-#{section_id}") && self.user_can_access?(:programme, section_id, api_data)
407
+ return cache_read("events-#{section_id}")
384
408
  end
385
409
 
386
410
  data = perform_query("events.php?action=getEvents&sectionid=#{section_id}", api_data)
@@ -392,21 +416,22 @@ module Osm
392
416
  end
393
417
  end
394
418
  self.user_can_access :programme, section_id, api_data
395
- Rails.cache.write("OSMAPI-events-#{section_id}", result, :expires_in => @@default_cache_ttl)
419
+ cache_write("events-#{section_id}", result, :expires_in => @@default_cache_ttl)
396
420
 
397
421
  return result
398
422
  end
399
423
 
400
424
  # Get due badges
401
- # @param [FixNum] section_id the section to get details for
425
+ # @param [Osm:Section, Fixnum] section the section (or its ID) to get the due badges for
402
426
  # @!macro options_get
403
427
  # @!macro options_api_data
404
428
  # @return [Osm::DueBadges]
405
- def get_due_badges(section_id, term_id=nil, options={}, api_data={})
406
- term_id = Osm::find_current_term_id(self, section_id, api_data) if term_id.nil?
429
+ def get_due_badges(section, term=nil, options={}, api_data={})
430
+ section_id = id_for_section(section)
431
+ term_id = id_for_term(term)
407
432
 
408
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-due_badges-#{section_id}-#{term_id}") && self.user_can_access?(:badge, section_id, api_data)
409
- return Rails.cache.read("OSMAPI-due_badges-#{section_id}-#{term_id}")
433
+ if !options[:no_cache] && cache_exist?("due_badges-#{section_id}-#{term_id}") && self.user_can_access?(:badge, section_id, api_data)
434
+ return cache_read("due_badges-#{section_id}-#{term_id}")
410
435
  end
411
436
 
412
437
  section_type = get_section(section_id, api_data).type.to_s
@@ -414,21 +439,23 @@ module Osm
414
439
 
415
440
  data = Osm::DueBadges.new(data)
416
441
  self.user_can_access :badge, section_id, api_data
417
- Rails.cache.write("OSMAPI-due_badges-#{section_id}-#{term_id}", data, :expires_in => @@default_cache_ttl*2)
442
+ cache_write("due_badges-#{section_id}-#{term_id}", data, :expires_in => @@default_cache_ttl*2)
418
443
 
419
444
  return data
420
445
  end
421
446
 
422
447
  # Get register structure
423
- # @param [FixNum] section_id the section to get details for
448
+ # @param [Osm:Section, Fixnum] section the section (or its ID) to get the structure for
449
+ # @param [Osm:Term, Fixnum] section the term (or its ID) to get the structure for, passing nil causes the current term to be used
424
450
  # @!macro options_get
425
451
  # @!macro options_api_data
426
452
  # @return [Array<Hash>] representing the rows of the register
427
- def get_register_structure(section_id, term_id=nil, options={}, api_data={})
428
- term_id = Osm::find_current_term_id(self, section_id, api_data) if term_id.nil?
453
+ def get_register_structure(section, term=nil, options={}, api_data={})
454
+ section_id = id_for_section(section)
455
+ term_id = id_for_term(term)
429
456
 
430
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-register_structure-#{section_id}-#{term_id}") && self.user_can_access?(:register, section_id, api_data)
431
- return Rails.cache.read("OSMAPI-register_structure-#{section_id}-#{term_id}")
457
+ if !options[:no_cache] && cache_exist?("register_structure-#{section_id}-#{term_id}") && self.user_can_access?(:register, section_id, api_data)
458
+ return cache_read("register_structure-#{section_id}-#{term_id}")
432
459
  end
433
460
 
434
461
  data = perform_query("users.php?action=registerStructure&sectionid=#{section_id}&termid=#{term_id}", api_data)
@@ -440,21 +467,23 @@ module Osm
440
467
  end
441
468
  end
442
469
  self.user_can_access :register, section_id, api_data
443
- Rails.cache.write("OSMAPI-register_structure-#{section_id}-#{term_id}", data, :expires_in => @@default_cache_ttl/2)
470
+ cache_write("register_structure-#{section_id}-#{term_id}", data, :expires_in => @@default_cache_ttl/2)
444
471
 
445
472
  return data
446
473
  end
447
474
 
448
475
  # Get register
449
- # @param [FixNum] section_id the section to get details for
476
+ # @param [Osm:Section, Fixnum] section the section (or its ID) to get the register for
477
+ # @param [Osm:Term, Fixnum] section the term (or its ID) to get the register for, passing nil causes the current term to be used
450
478
  # @!macro options_get
451
479
  # @!macro options_api_data
452
480
  # @return [Array<Hash>] representing the attendance of each member
453
- def get_register(section_id, term_id=nil, options={}, api_data={})
454
- term_id = Osm::find_current_term_id(self, section_id, api_data) if term_id.nil?
481
+ def get_register(section, term=nil, options={}, api_data={})
482
+ section_id = id_for_section(section)
483
+ term_id = id_for_term(term)
455
484
 
456
- if !options[:no_cache] && Rails.cache.exist?("OSMAPI-register-#{section_id}-#{term_id}") && self.user_can_access?(:register, section_id, api_data)
457
- return Rails.cache.read("OSMAPI-register-#{section_id}-#{term_id}")
485
+ if !options[:no_cache] && cache_exist?("register-#{section_id}-#{term_id}") && self.user_can_access?(:register, section_id, api_data)
486
+ return cache_read("register-#{section_id}-#{term_id}")
458
487
  end
459
488
 
460
489
  data = perform_query("users.php?action=register&sectionid=#{section_id}&termid=#{term_id}", api_data)
@@ -467,17 +496,17 @@ module Osm
467
496
  item[:patrolid] = item[:patrolid].to_i
468
497
  end
469
498
  self.user_can_access :register, section_id, api_data
470
- Rails.cache.write("OSMAPI-register-#{section_id}-#{term_id}", data, :expires_in => @@default_cache_ttl/2)
499
+ cache_write("register-#{section_id}-#{term_id}", data, :expires_in => @@default_cache_ttl/2)
471
500
  return data
472
501
  end
473
502
 
474
503
  # Create an evening in OSM
475
- # @param [FixNum] section_id the id of the section to add the term to
504
+ # @param [Fixnum] section_id the id of the section to add the term to
476
505
  # @param [Date] meeting_date the date of the meeting
477
506
  # @!macro options_api_data
478
507
  # @return [Boolean] if the operation suceeded or not
479
- def create_evening(section_id, meeting_date, api_data={})
480
- section_id = section_id.to_i
508
+ def create_evening(section, meeting_date, api_data={})
509
+ section_id = id_for_section(section)
481
510
  evening_api_data = {
482
511
  'meetingdate' => meeting_date.strftime('%Y-%m-%d'),
483
512
  'sectionid' => section_id,
@@ -488,7 +517,7 @@ module Osm
488
517
 
489
518
  # The cached programmes for the section will be out of date - remove them
490
519
  get_terms(api_data).each do |term|
491
- Rails.cache.delete("OSMAPI-programme-#{term.section_id}-#{term.id}") if term.section_id == section_id
520
+ cache_delete("programme-#{term.section_id}-#{term.id}") if term.section_id == section_id
492
521
  end
493
522
 
494
523
  return data.is_a?(Hash) && (data['result'] == 0)
@@ -503,7 +532,7 @@ module Osm
503
532
 
504
533
  # The cached programmes for the section will be out of date - remove them
505
534
  get_terms(api_data).each do |term|
506
- Rails.cache.delete("OSMAPI-programme-#{term.section_id}-#{term.id}") if term.section_id == evening.section_id
535
+ cache_delete("programme-#{term.section_id}-#{term.id}") if term.section_id == evening.section_id
507
536
  end
508
537
 
509
538
  return response.is_a?(Hash) && (response['result'] == 0)
@@ -513,7 +542,7 @@ module Osm
513
542
  protected
514
543
  # Set access permission for the current user on a resource stored in the cache
515
544
  # @param [Symbol] resource_type a symbol representing the resource type (:section, :grouping, :term, :activity, :programme, :member, :badge, :register)
516
- # @param [FixNum] resource_id the id of the resource being checked
545
+ # @param [Fixnum] resource_id the id of the resource being checked
517
546
  # @param [Hash] api_data the data hash used in accessing the api
518
547
  # @param [Boolean] permission wether the user can access the resource
519
548
  # @return [Boolean] the permission which was set
@@ -530,7 +559,7 @@ module Osm
530
559
 
531
560
  # Get access permission for the current user on a resource stored in the cache
532
561
  # @param [Symbol] resource_type a symbol representing the resource type (:section, :grouping, :term, :activity, :programme, :member, :badge, :register)
533
- # @param [FixNum] resource_id the id of the resource being checked
562
+ # @param [Fixnum] resource_id the id of the resource being checked
534
563
  # @param [Hash] api_data the data hash used in accessing the api
535
564
  # @return nil if the combination of user and resource has not been set
536
565
  # @return [Boolean] if the user can access the resource
@@ -569,11 +598,6 @@ module Osm
569
598
  end
570
599
  end
571
600
 
572
- if Rails.env.development?
573
- puts "Making OSM API request to #{url}"
574
- puts api_data.to_s
575
- end
576
-
577
601
  begin
578
602
  result = HTTParty.post("#{@base_url}/#{url}", {:body => api_data})
579
603
  rescue SocketError, TimeoutError, OpenSSL::SSL::SSLError
@@ -581,11 +605,6 @@ module Osm
581
605
  end
582
606
  raise ConnectionError.new("HTTP Status code was #{result.response.code}") if !result.response.code.eql?('200')
583
607
 
584
- if Rails.env.development?
585
- puts "Result from OSM request to #{url}"
586
- puts result.response.body
587
- end
588
-
589
608
  raise Error.new(result.response.body) unless looks_like_json?(result.response.body)
590
609
  decoded = ActiveSupport::JSON.decode(result.response.body)
591
610
  osm_error = get_osm_error(decoded)
@@ -608,10 +627,43 @@ module Osm
608
627
  return false unless data.is_a?(Hash)
609
628
  to_return = data['error'] || data['err'] || false
610
629
  to_return = false if to_return.blank?
611
- puts "OSM API ERROR: #{to_return}" if Rails.env.development? && to_return
612
630
  return to_return
613
631
  end
614
632
 
633
+ # Wrap cache calls
634
+ def cache_read(key)
635
+ return @@cache.nil? ? nil : @@cache.read("#{@@cache_prepend_to_key}-#{key}")
636
+ end
637
+ def cache_write(key, data, options={})
638
+ return @@cache.nil? ? false : @@cache.write("#{@@cache_prepend_to_key}-#{key}", data, options)
639
+ end
640
+ def cache_exist?(key)
641
+ return @@cache.nil? ? false : @@cache.exist?("#{@@cache_prepend_to_key}-#{key}")
642
+ end
643
+ def cache_delete(key)
644
+ return @@cache.nil? ? true : @@cache.delete("#{@@cache_prepend_to_key}-#{key}")
645
+ end
646
+
647
+ # Get the ID from an object or fixnum
648
+ # @param cl the Class being used (e.g. Osm::Section)
649
+ # @param value the value to get the ID from
650
+ # @param [String] error_name the name of the class to use in error messages
651
+ # @param [String, Symbol] id_method the method to call on cl to get the ID
652
+ # @return [Fixnum] the ID
653
+ def id_for(cl, value, error_name, id_method=:id)
654
+ raise(ArgumentError, "Invalid type for #{error_name}") unless value.is_a?(cl) || value.is_a?(Fixnum)
655
+ id = value.is_a?(cl) ? value.send(id_method) : value
656
+ raise(ArgumentError, "Invalid #{error_name} ID") unless id > 0
657
+ return id
658
+ end
659
+
660
+ def id_for_section(section)
661
+ id_for(Osm::Section, section, 'section')
662
+ end
663
+ def id_for_term(term)
664
+ return term.nil? ? Osm::find_current_term_id(self, section_id, api_data) : id_for(Osm::Term, term, 'term')
665
+ end
666
+
615
667
  end
616
668
 
617
669
  end
@@ -4,7 +4,7 @@ module Osm
4
4
 
5
5
  attr_reader :id, :name, :permissions
6
6
  # @!attribute [r] id
7
- # @return [FixNum] the id for the API
7
+ # @return [Fixnum] the id for the API
8
8
  # @!attribute [r] name
9
9
  # @return [String] the name of the API
10
10
  # @!attribute [r] permissions
data/lib/osm/evening.rb CHANGED
@@ -5,9 +5,9 @@ module Osm
5
5
  attr_accessor :evening_id, :section_id, :title, :notes_for_parents, :games, :pre_notes, :post_notes, :leaders, :meeting_date, :activities
6
6
  attr_reader :start_time, :end_time
7
7
  # @!attribute [rw] evening_id
8
- # @return [FixNum] the id of the evening
8
+ # @return [Fixnum] the id of the evening
9
9
  # @!attribute [rw] sectionid
10
- # @return [FixNum] the section the evening belongs to
10
+ # @return [Fixnum] the section the evening belongs to
11
11
  # @!attribute [rw] title
12
12
  # @return [String] the title of the evening
13
13
  # @!attribute [rw] notes_for_parents
@@ -105,7 +105,7 @@ module Osm
105
105
 
106
106
  attr_reader :activity_id, :title, :notes
107
107
  # @!attribute [r] activity_id
108
- # @return [FixNum] the activity being done
108
+ # @return [Fixnum] the activity being done
109
109
  # @!attribute [r] title
110
110
  # @return [String] the activity's title
111
111
  # @!attribute [r] notes
data/lib/osm/event.rb CHANGED
@@ -4,9 +4,9 @@ module Osm
4
4
 
5
5
  attr_reader :id, :section_id, :name, :start, :end, :cost, :location, :notes
6
6
  # @!attribute [r] id
7
- # @return [FixNum] the id for the event
7
+ # @return [Fixnum] the id for the event
8
8
  # @!attribute [r] section_id
9
- # @return [FixNum] the id for the section
9
+ # @return [Fixnum] the id for the section
10
10
  # @!attribute [r] name
11
11
  # @return [String] the name of the event
12
12
  # @!attribute [r] start
data/lib/osm/grouping.rb CHANGED
@@ -4,13 +4,13 @@ module Osm
4
4
 
5
5
  attr_reader :id, :name, :active, :points
6
6
  # @!attribute [r] id
7
- # @return [FixNum] the id for grouping
7
+ # @return [Fixnum] the id for grouping
8
8
  # @!attribute [r] name
9
9
  # @return [String] the name of the grouping
10
10
  # @!attribute [r] id
11
11
  # @return [Boolean] wether the grouping is active
12
12
  # @!attribute [r] points
13
- # @return [FixNum] the points awarded to the grouping
13
+ # @return [Fixnum] the points awarded to the grouping
14
14
 
15
15
  # Initialize a new Grouping using the hash returned by the API call
16
16
  # @param data the hash of data for the object returned by the API
data/lib/osm/member.rb CHANGED
@@ -4,9 +4,9 @@ module Osm
4
4
 
5
5
  attr_reader :id, :section_id, :type, :first_name, :last_name, :email1, :email2, :email3, :email4, :phone1, :phone2, :phone3, :phone4, :address, :address2, :date_of_birth, :started, :joined_in_years, :parents, :notes, :medical, :religion, :school, :ethnicity, :subs, :grouping_id, :grouping_leader, :joined, :age, :joined_years
6
6
  # @!attribute [r] id
7
- # @return [FixNum] the id for the member
7
+ # @return [Fixnum] the id for the member
8
8
  # @!attribute [r] section_id
9
- # @return [FixNum] the section the member belongs to
9
+ # @return [Fixnum] the section the member belongs to
10
10
  # @!attribute [r] type
11
11
  # @return [?] ?
12
12
  # @!attribute [r] first_name
@@ -38,7 +38,7 @@ module Osm
38
38
  # @!attribute [r] started
39
39
  # @return [Date] when the member started Scouting
40
40
  # @!attribute [r] joined_in_years
41
- # @return [FixNum] ?
41
+ # @return [Fixnum] ?
42
42
  # @!attribute [r] parents
43
43
  # @return [String] the member's parent's names
44
44
  # @!attribute [r] notes
@@ -54,15 +54,15 @@ module Osm
54
54
  # @!attribute [r] subs
55
55
  # @return [String] details about the member's subs
56
56
  # @!attribute [r] grouping_id
57
- # @return [FixNum] the grouping within the section that the member belongs to
57
+ # @return [Fixnum] the grouping within the section that the member belongs to
58
58
  # @!attribute [r] grouping_leader
59
- # @return [FixNum] wether the member is the grouping leader (0=no, 1=seconder/APL, 2=sixer/PL)
59
+ # @return [Fixnum] wether the member is the grouping leader (0=no, 1=seconder/APL, 2=sixer/PL)
60
60
  # @!attribute [r] joined
61
61
  # @return [Date] when the member joined the section
62
62
  # @!attribute [r] age
63
63
  # @return [String] the member's current age (yy/mm)
64
64
  # @!attribute [r] joined_years
65
- # @return [FixNum] how many years the member has been in Scouting
65
+ # @return [Fixnum] how many years the member has been in Scouting
66
66
 
67
67
 
68
68
  # Initialize a new Member using the hash returned by the API call
@@ -101,13 +101,13 @@ module Osm
101
101
  end
102
102
 
103
103
  # Get the years element of this scout's age
104
- # @return [FixNum] the number of years this scout has been alive
104
+ # @return [Fixnum] the number of years this scout has been alive
105
105
  def age_years
106
106
  return @age[0..1].to_i
107
107
  end
108
108
 
109
109
  # Get the months element of this scout's age
110
- # @return [FixNum] the number of months since this scout's last birthday
110
+ # @return [Fixnum] the number of months since this scout's last birthday
111
111
  def age_months
112
112
  return @age[-2..-1].to_i
113
113
  end
data/lib/osm/role.rb CHANGED
@@ -8,7 +8,7 @@ module Osm
8
8
  # @!attribute [r] group_name
9
9
  # @return [String] the name of the group the section is in
10
10
  # @!attribute [r] group_id
11
- # @return [FixNum] the group the section is in
11
+ # @return [Fixnum] the group the section is in
12
12
  # @!attribute [r] permissions
13
13
  # @return [Hash] the permissions the user has in this role
14
14
 
data/lib/osm/section.rb CHANGED
@@ -4,7 +4,7 @@ module Osm
4
4
 
5
5
  attr_reader :id, :name, :subscription_level, :subscription_expires, :type, :num_scouts, :column_names, :fields, :intouch_fields, :mobile_fields, :extra_records, :role
6
6
  # @!attribute [r] id
7
- # @return [FixNum] the id for the section
7
+ # @return [Fixnum] the id for the section
8
8
  # @!attribute [r] name
9
9
  # @return [String] the section name
10
10
  # @!attribute [r] subscription_level
@@ -14,7 +14,7 @@ module Osm
14
14
  # @!attribute [r] type
15
15
  # @return [Symbol] the section type (:beavers, :cubs, :scouts, :exporers, :adults, :waiting, :unknown)
16
16
  # @!attribute [r] num_scouts
17
- # @return [FixNum] how many members the section has
17
+ # @return [Fixnum] how many members the section has
18
18
  # @!attribute [r] column_names
19
19
  # @return [Hash] custom names to use for the data columns
20
20
  # @!attribute [r] fields
@@ -31,7 +31,9 @@ module Osm
31
31
 
32
32
  # Initialize a new SectionConfig using the hash returned by the API call
33
33
  # @param id the section ID used by the API to refer to this section
34
+ # @param name the name given to the sction in OSM
34
35
  # @param data the hash of data for the object returned by the API
36
+ # @param role the Osm::Role linked with this section
35
37
  def initialize(id, name, data, role)
36
38
  subscription_levels = [:bronze, :silver, :gold]
37
39
  subscription_level = data['subscription_level'].to_i - 1
@@ -51,8 +53,8 @@ module Osm
51
53
 
52
54
  # Symbolise the keys in each hash of the extra_records array
53
55
  @extra_records.each do |item|
54
- # Expect item to be: {:name=>String, :extraid=>FixNum}
55
- # Sometimes get item as: [String, {"name"=>String, "extraid"=>FixNum}]
56
+ # Expect item to be: {:name=>String, :extraid=>Fixnum}
57
+ # Sometimes get item as: [String, {"name"=>String, "extraid"=>Fixnum}]
56
58
  if item.is_a?(Array)
57
59
  item = Osm::symbolize_hash(item[1])
58
60
  else
data/lib/osm/term.rb CHANGED
@@ -4,11 +4,11 @@ module Osm
4
4
 
5
5
  attr_reader :id, :section_id, :name, :start, :end
6
6
  # @!attribute [r] id
7
- # @return [FixNum] the id for the term
7
+ # @return [Fixnum] the id for the term
8
8
  # @!attribute [r] section_id
9
- # @return [FixNum] the section the term belongs to
9
+ # @return [Fixnum] the section the term belongs to
10
10
  # @!attribute [r] name
11
- # @return [FixNum] the name of the term
11
+ # @return [Fixnum] the name of the term
12
12
  # @!attribute [r] start
13
13
  # @return [Date] when the term starts
14
14
  # @!attribute [r] end
data/osm.gemspec CHANGED
@@ -18,9 +18,8 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- s.add_runtime_dependency 'rails', '>= 3.2.5' # Used to provide the cache (and the environment controls slightly different behavior in perform_query)
22
21
  s.add_runtime_dependency 'activesupport', '>= 3.2' # Used to parse JSON from OSM
23
- s.add_runtime_dependency 'httparty' # Used to make web requests to the API
22
+ s.add_runtime_dependency 'httparty' # Used to make web requests to the API
24
23
 
25
24
  s.add_development_dependency 'rake'
26
25
  s.add_development_dependency 'rspec'
data/spec/osm/api_spec.rb CHANGED
@@ -31,6 +31,7 @@ describe "API" do
31
31
  :api_token => 'API TOKEN',
32
32
  :api_name => 'API NAME',
33
33
  :api_site => :scout,
34
+ :cache => OsmTest::Cache,
34
35
  }.freeze
35
36
  Osm::Api.configure(@api_config)
36
37
  end
@@ -111,6 +112,17 @@ describe "API" do
111
112
  it "Fetch the notepad for a section" do
112
113
  FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/api.php?action=getNotepads", :body => {"1" => "Section 1", "2" => "Section 2"}.to_json)
113
114
  Osm::Api.new('1', '2').get_notepad(1).should == 'Section 1'
115
+ Osm::Api.new('1', '2').get_notepad(Osm::Section.new(2, '', {}, nil)).should == 'Section 2'
116
+ end
117
+
118
+ it "Fetch the notepad for a section (invalid section/id)" do
119
+ FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/api.php?action=getNotepads", :body => {"1" => "Section 1"}.to_json)
120
+
121
+ expect{ Osm::Api.new('1', '2').get_notepad(-10) }.to raise_error(ArgumentError, 'Invalid section ID')
122
+ expect{ Osm::Api.new('1', '2').get_notepad(0) }.to raise_error(ArgumentError, 'Invalid section ID')
123
+
124
+ expect{ Osm::Api.new('1', '2').get_notepad(Osm::Section.new(-10, '', {}, nil)) }.to raise_error(ArgumentError, 'Invalid section ID')
125
+ expect{ Osm::Api.new('1', '2').get_notepad('1') }.to raise_error(ArgumentError, 'Invalid type for section')
114
126
  end
115
127
 
116
128
 
@@ -531,6 +543,18 @@ describe "API" do
531
543
  HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"1":"New content."}'}) }
532
544
  Osm::Api.new('user', 'secret').get_notepad(1, {:no_cache => true}).should == 'New content.'
533
545
  end
546
+
547
+
548
+ it "Uses the provided cache_prepend_to_key text" do
549
+ FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/api.php?action=getNotepads", :body => {"1" => "Section 1"}.to_json)
550
+
551
+ OsmTest::Cache.should_receive('exist?').with('OSMAPI-notepads-1')
552
+ Osm::Api.new('1', '2').get_notepads.should == {1 => 'Section 1'}
553
+
554
+ Osm::Api.configure(@api_config.merge(:cache_prepend_to_key => 'AB'))
555
+ OsmTest::Cache.should_receive('exist?').with('AB-notepads-1')
556
+ Osm::Api.new('1', '2').get_notepads.should == {1 => 'Section 1'}
557
+ end
534
558
  end
535
559
 
536
560
 
data/spec/spec_helper.rb CHANGED
@@ -19,40 +19,28 @@ RSpec.configure do |config|
19
19
 
20
20
  config.before(:each) do
21
21
  FakeWeb.clean_registry
22
- Rails.cache.clear
22
+ OsmTest::Cache.clear
23
23
  end
24
24
  end
25
25
 
26
26
 
27
- module Rails
28
- def self.cache
29
- @cache ||= Cache.new
30
- end
31
- def self.env
32
- Env.new
33
- end
34
-
35
- class Env
36
- def development?
37
- false
38
- end
39
- end
40
-
27
+ module OsmTest
41
28
  class Cache
42
- def initialize
43
- @cache = {}
29
+ @@cache = {}
30
+ def self.write(key, data, options={})
31
+ @@cache[key] = data
44
32
  end
45
- def write(key, data, options={})
46
- @cache[key] = data
33
+ def self.read(key)
34
+ @@cache[key]
47
35
  end
48
- def read(key)
49
- @cache[key]
36
+ def self.exist?(key)
37
+ @@cache.include?(key)
50
38
  end
51
- def exist?(key)
52
- @cache.include?(key)
39
+ def self.delete(key)
40
+ @@cache.delete(key)
53
41
  end
54
- def clear
55
- @cache = {}
42
+ def self.clear
43
+ @@cache = {}
56
44
  end
57
45
  end
58
46
  end
data/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Osm
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: osm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-08 00:00:00.000000000Z
12
+ date: 2012-08-19 00:00:00.000000000Z
13
13
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: rails
16
- requirement: &76581020 !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: 3.2.5
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: *76581020
25
14
  - !ruby/object:Gem::Dependency
26
15
  name: activesupport
27
- requirement: &76567570 !ruby/object:Gem::Requirement
16
+ requirement: &85718650 !ruby/object:Gem::Requirement
28
17
  none: false
29
18
  requirements:
30
19
  - - ! '>='
@@ -32,10 +21,10 @@ dependencies:
32
21
  version: '3.2'
33
22
  type: :runtime
34
23
  prerelease: false
35
- version_requirements: *76567570
24
+ version_requirements: *85718650
36
25
  - !ruby/object:Gem::Dependency
37
26
  name: httparty
38
- requirement: &76566430 !ruby/object:Gem::Requirement
27
+ requirement: &85718390 !ruby/object:Gem::Requirement
39
28
  none: false
40
29
  requirements:
41
30
  - - ! '>='
@@ -43,10 +32,10 @@ dependencies:
43
32
  version: '0'
44
33
  type: :runtime
45
34
  prerelease: false
46
- version_requirements: *76566430
35
+ version_requirements: *85718390
47
36
  - !ruby/object:Gem::Dependency
48
37
  name: rake
49
- requirement: &76562170 !ruby/object:Gem::Requirement
38
+ requirement: &85718050 !ruby/object:Gem::Requirement
50
39
  none: false
51
40
  requirements:
52
41
  - - ! '>='
@@ -54,10 +43,10 @@ dependencies:
54
43
  version: '0'
55
44
  type: :development
56
45
  prerelease: false
57
- version_requirements: *76562170
46
+ version_requirements: *85718050
58
47
  - !ruby/object:Gem::Dependency
59
48
  name: rspec
60
- requirement: &76542270 !ruby/object:Gem::Requirement
49
+ requirement: &85715520 !ruby/object:Gem::Requirement
61
50
  none: false
62
51
  requirements:
63
52
  - - ! '>='
@@ -65,10 +54,10 @@ dependencies:
65
54
  version: '0'
66
55
  type: :development
67
56
  prerelease: false
68
- version_requirements: *76542270
57
+ version_requirements: *85715520
69
58
  - !ruby/object:Gem::Dependency
70
59
  name: fakeweb
71
- requirement: &76541290 !ruby/object:Gem::Requirement
60
+ requirement: &85714410 !ruby/object:Gem::Requirement
72
61
  none: false
73
62
  requirements:
74
63
  - - ! '>='
@@ -76,7 +65,7 @@ dependencies:
76
65
  version: '0'
77
66
  type: :development
78
67
  prerelease: false
79
- version_requirements: *76541290
68
+ version_requirements: *85714410
80
69
  description: Use the Online Scout Manager API (https://www.onlinescoutmanager.co.uk)
81
70
  to retrieve and save data.
82
71
  email: