osm 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## Version 0.0.10
2
+
3
+ * Fix handling an empty array being returned from OSM for fields (presumably if not allowed to view)
4
+ * Fix undefined variable in id\_for\_term
5
+
1
6
  ## Version 0.0.9
2
7
 
3
8
  * Allow passing of Osm::Term objects as well as term IDs
data/lib/osm/activity.rb CHANGED
@@ -64,10 +64,10 @@ module Osm
64
64
  @deletable = data['deletable'] ? true : false
65
65
  @used = data['used'].to_i
66
66
  @versions = data['versions']
67
- @sections = Osm::make_array_of_symbols(data['sections'] || [])
68
- @tags = data['tags'] || []
69
- @files = data['files'] || []
70
- @badges = data['badges'] || []
67
+ @sections = data['sections'].is_a?(Array) ? Osm::make_array_of_symbols(data['sections']) : []
68
+ @tags = data['tags'].is_a?(Array) ? data['tags'] : []
69
+ @files = data['files'].is_a?(Array) ? data['files'] : []
70
+ @badges = data['badges'].is_a?(Array) ? data['badges'] : []
71
71
 
72
72
  # Clean versions hashes
73
73
  @versions.each do |version|
data/lib/osm/api.rb CHANGED
@@ -269,7 +269,7 @@ module Osm
269
269
  # @return [Array<Osm::Evening>]
270
270
  def get_programme(section, term, options={}, api_data={})
271
271
  section_id = id_for_section(section)
272
- term_id = id_for_term(term)
272
+ term_id = id_for_term(term, section)
273
273
 
274
274
  if !options[:no_cache] && cache_exist?("programme-#{section_id}-#{term_id}") && self.user_can_access?(:programme, section_id, api_data)
275
275
  return cache_read("programme-#{section_id}-#{term_id}")
@@ -329,7 +329,7 @@ module Osm
329
329
  # @return [Array<Osm::Member>]
330
330
  def get_members(section, term=nil, options={}, api_data={})
331
331
  section_id = id_for_section(section)
332
- term_id = id_for_term(term)
332
+ term_id = id_for_term(term, section)
333
333
 
334
334
  if !options[:no_cache] && cache_exist?("members-#{section_id}-#{term_id}") && self.user_can_access?(:member, section_id, api_data)
335
335
  return cache_read("members-#{section_id}-#{term_id}")
@@ -428,7 +428,7 @@ module Osm
428
428
  # @return [Osm::DueBadges]
429
429
  def get_due_badges(section, term=nil, options={}, api_data={})
430
430
  section_id = id_for_section(section)
431
- term_id = id_for_term(term)
431
+ term_id = id_for_term(term, section)
432
432
 
433
433
  if !options[:no_cache] && cache_exist?("due_badges-#{section_id}-#{term_id}") && self.user_can_access?(:badge, section_id, api_data)
434
434
  return cache_read("due_badges-#{section_id}-#{term_id}")
@@ -452,7 +452,7 @@ module Osm
452
452
  # @return [Array<Hash>] representing the rows of the register
453
453
  def get_register_structure(section, term=nil, options={}, api_data={})
454
454
  section_id = id_for_section(section)
455
- term_id = id_for_term(term)
455
+ term_id = id_for_term(term, section)
456
456
 
457
457
  if !options[:no_cache] && cache_exist?("register_structure-#{section_id}-#{term_id}") && self.user_can_access?(:register, section_id, api_data)
458
458
  return cache_read("register_structure-#{section_id}-#{term_id}")
@@ -480,7 +480,7 @@ module Osm
480
480
  # @return [Array<Hash>] representing the attendance of each member
481
481
  def get_register(section, term=nil, options={}, api_data={})
482
482
  section_id = id_for_section(section)
483
- term_id = id_for_term(term)
483
+ term_id = id_for_term(term, section)
484
484
 
485
485
  if !options[:no_cache] && cache_exist?("register-#{section_id}-#{term_id}") && self.user_can_access?(:register, section_id, api_data)
486
486
  return cache_read("register-#{section_id}-#{term_id}")
@@ -651,17 +651,21 @@ module Osm
651
651
  # @param [String, Symbol] id_method the method to call on cl to get the ID
652
652
  # @return [Fixnum] the ID
653
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
654
+ if value.is_a?(cl)
655
+ value = value.send(id_method)
656
+ else
657
+ raise(ArgumentError, "Invalid type for #{error_name}") unless value.is_a?(Fixnum)
658
+ end
659
+
660
+ raise(ArgumentError, "Invalid #{error_name} ID") unless value > 0
661
+ return value
658
662
  end
659
663
 
660
664
  def id_for_section(section)
661
665
  id_for(Osm::Section, section, 'section')
662
666
  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')
667
+ def id_for_term(term, section)
668
+ return term.nil? ? Osm::find_current_term_id(self, id_for_section(section), api_data) : id_for(Osm::Term, term, 'term')
665
669
  end
666
670
 
667
671
  end
@@ -15,7 +15,7 @@ module Osm
15
15
  def initialize(data)
16
16
  @id = data['apiid'].to_i
17
17
  @name = data['name']
18
- @permissions = data['permissions'] || {}
18
+ @permissions = data['permissions'].is_a?(Hash) ? data['permissions'] : {}
19
19
 
20
20
  # Rubyfy permissions hash
21
21
  @permissions.keys.each do |key|
@@ -8,15 +8,15 @@ module Osm
8
8
  # @!attribute [r] by_member
9
9
  # @return [Hash] the due badges grouped by member
10
10
  # @!attribute [r] totals
11
- # @return [Hash] the total number of each nadge which is due
11
+ # @return [Hash] the total number of each badge which is due
12
12
 
13
13
  # Initialize a new Event using the hash returned by the API call
14
14
  # @param data the hash of data for the object returned by the API
15
15
  def initialize(data)
16
16
  data = {} unless data.is_a?(Hash)
17
17
 
18
- @pending = Osm::symbolize_hash(data['pending'] || {})
19
- @descriptions = Osm::symbolize_hash(data['description'] || {})
18
+ @pending = data['pending'].is_a?(Hash) ? Osm::symbolize_hash(data['pending']) : {}
19
+ @descriptions = data['description'].is_a?(Hash) ? Osm::symbolize_hash(data['description']) : {}
20
20
 
21
21
  @pending.each_key do |key|
22
22
  @pending[key].each_with_index do |item, index|
data/lib/osm/role.rb CHANGED
@@ -18,7 +18,7 @@ module Osm
18
18
  @section = Osm::Section.new(data['sectionid'], data['sectionname'], ActiveSupport::JSON.decode(data['sectionConfig']), self)
19
19
  @group_name = data['groupname']
20
20
  @group_id = Osm::to_i_or_nil(data['groupid'])
21
- @permissions = Osm::symbolize_hash(data['permissions'] || {})
21
+ @permissions = data['permissions'].is_a?(Hash) ? Osm::symbolize_hash(data['permissions']) : {}
22
22
 
23
23
  # Convert permission values to a number
24
24
  @permissions.each_key do |key|
data/lib/osm/section.rb CHANGED
@@ -44,11 +44,11 @@ module Osm
44
44
  @subscription_expires = data['subscription_expires'] ? Date.parse(data['subscription_expires'], 'yyyy-mm-dd') : nil
45
45
  @type = !data['sectionType'].nil? ? data['sectionType'].to_sym : :unknown
46
46
  @num_scouts = data['numscouts']
47
- @column_names = Osm::symbolize_hash(data['columnNames'] || {})
48
- @fields = Osm::symbolize_hash(data['fields'] || {})
49
- @intouch_fields = Osm::symbolize_hash(data['intouch'] || {})
50
- @mobile_fields = Osm::symbolize_hash(data['mobFields'] || {})
51
- @extra_records = data['extraRecords'] || []
47
+ @column_names = data['columnNames'].is_a?(Hash) ? Osm::symbolize_hash(data['columnNames']) : {}
48
+ @fields = data['fields'].is_a?(Hash) ? Osm::symbolize_hash(data['fields']) : {}
49
+ @intouch_fields = data['intouch'].is_a?(Hash) ? Osm::symbolize_hash(data['intouch']) : {}
50
+ @mobile_fields = data['mobFields'].is_a?(Hash) ? Osm::symbolize_hash(data['mobFields']) : {}
51
+ @extra_records = data['extraRecords'].is_a?(Array) ? data['extraRecords'] : []
52
52
  @role = role
53
53
 
54
54
  # Symbolise the keys in each hash of the extra_records array
@@ -45,4 +45,12 @@ describe "Online Scout Manager API Strangeness" do
45
45
  @api.get_events(1).should == []
46
46
  end
47
47
 
48
+
49
+ it "handles a section config where fields is an empty array" do
50
+ body = '[{"sectionConfig":"{\"subscription_level\":3,\"subscription_expires\":\"2013-01-05\",\"columnNames\":{\"phone1\":\"Home Phone\",\"phone2\":\"Parent 1 Phone\",\"address\":\"Member\'s Address\",\"phone3\":\"Parent 2 Phone\",\"address2\":\"Address 2\",\"phone4\":\"Alternate Contact Phone\",\"subs\":\"Gender\",\"email1\":\"Parent 1 Email\",\"medical\":\"Medical / Dietary\",\"email2\":\"Parent 2 Email\",\"ethnicity\":\"Gift Aid\",\"email3\":\"Member\'s Email\",\"religion\":\"Religion\",\"email4\":\"Email 4\",\"school\":\"School\"},\"numscouts\":10,\"hasUsedBadgeRecords\":true,\"hasProgramme\":true,\"extraRecords\":[{\"name\":\"Subs\",\"extraid\":\"529\"}],\"wizard\":\"false\",\"fields\":[],\"intouch\":{\"address\":true,\"address2\":false,\"email1\":false,\"email2\":false,\"email3\":false,\"email4\":false,\"phone1\":true,\"phone2\":true,\"phone3\":true,\"phone4\":true,\"medical\":false},\"mobFields\":{\"email1\":false,\"email2\":false,\"email3\":false,\"email4\":false,\"address\":true,\"address2\":false,\"phone1\":true,\"phone2\":true,\"phone3\":true,\"phone4\":true,\"school\":false,\"religion\":false,\"ethnicity\":true,\"medical\":true,\"patrol\":true,\"subs\":false}}","groupname":"1st Somewhere","groupid":"1","groupNormalised":"1","sectionid":"1","sectionname":"Section 1","section":"cubs","isDefault":"1","permissions":{"badge":100,"member":100,"user":100,"register":100,"contact":100,"programme":100,"originator":1,"events":100,"finance":100,"flexi":100}}]'
51
+ FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/api.php?action=getUserRoles", :body => body)
52
+
53
+ @api.get_section(1).fields.should == {}
54
+
55
+ end
48
56
  end
data/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Osm
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
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.9
4
+ version: 0.0.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-08-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &85718650 !ruby/object:Gem::Requirement
16
+ requirement: &81097930 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.2'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *85718650
24
+ version_requirements: *81097930
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: httparty
27
- requirement: &85718390 !ruby/object:Gem::Requirement
27
+ requirement: &81097720 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *85718390
35
+ version_requirements: *81097720
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &85718050 !ruby/object:Gem::Requirement
38
+ requirement: &81097480 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *85718050
46
+ version_requirements: *81097480
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &85715520 !ruby/object:Gem::Requirement
49
+ requirement: &81097190 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *85715520
57
+ version_requirements: *81097190
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: fakeweb
60
- requirement: &85714410 !ruby/object:Gem::Requirement
60
+ requirement: &81083410 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *85714410
68
+ version_requirements: *81083410
69
69
  description: Use the Online Scout Manager API (https://www.onlinescoutmanager.co.uk)
70
70
  to retrieve and save data.
71
71
  email: