osm 0.0.16 → 0.0.17

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,3 +1,9 @@
1
+ ## Version 0.0.17
2
+
3
+ * Fix try method is undefined
4
+ * Since 1/1/1970 is the epoch used by the OSM API, this date will be treated as nil (except member's date of birth)
5
+ * DueBadges now calculates the totals in the initialize method (no need to pass it in anymore)
6
+
1
7
  ## Version 0.0.16
2
8
 
3
9
  * -2 is a valid grouping\_id value (corrected in Grouping)
data/lib/osm.rb CHANGED
@@ -5,12 +5,15 @@ require 'date'
5
5
 
6
6
 
7
7
  module Osm
8
+ OSM_EPOCH_S = '1970-01-01'
9
+ OSM_DATE_FORMAT = '%Y-%m-%d'
10
+ OSM_DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
8
11
 
9
12
  class Error < Exception; end
10
13
  class ConnectionError < Error; end
11
14
 
12
15
 
13
- private
16
+ private
14
17
  def self.make_array_of_symbols(array)
15
18
  array.each_with_index do |item, index|
16
19
  array[index] = item.to_sym
@@ -30,18 +33,18 @@ module Osm
30
33
  raise Error, 'There is no current term for the section.'
31
34
  end
32
35
 
33
- def self.make_datetime(date, time)
34
- date = nil if date.nil? || date.empty?
36
+ def self.make_datetime(date, time, options={})
37
+ date = nil if date.nil? || date.empty? || (date.eql?(OSM_EPOCH_S) && !options[:ignore_epoch])
35
38
  time = nil if time.nil? || time.empty?
36
39
  if (!date.nil? && !time.nil?)
37
40
  begin
38
- return DateTime.strptime((date + ' ' + time), '%Y-%m-%d %H:%M:%S')
41
+ return DateTime.strptime((date + ' ' + time), OSM_DATETIME_FORMAT)
39
42
  rescue ArgumentError
40
43
  return nil
41
44
  end
42
45
  elsif !date.nil?
43
46
  begin
44
- return DateTime.strptime(date, '%Y-%m-%d')
47
+ return DateTime.strptime(date, OSM_DATE_FORMAT)
45
48
  rescue ArgumentError
46
49
  return nil
47
50
  end
@@ -50,10 +53,10 @@ module Osm
50
53
  end
51
54
  end
52
55
 
53
- def self.parse_date(date)
54
- return nil if date.nil?
56
+ def self.parse_date(date, options={})
57
+ return nil if date.nil? || date.empty? || (date.eql?(OSM_EPOCH_S) && !options[:ignore_epoch])
55
58
  begin
56
- return Date.strptime(date, '%Y-%m-%d')
59
+ return Date.strptime(date, OSM_DATE_FORMAT)
57
60
  rescue ArgumentError
58
61
  return nil
59
62
  end
@@ -509,7 +509,7 @@ module Osm
509
509
  def create_evening(section, meeting_date, api_data={})
510
510
  section_id = id_for_section(section)
511
511
  evening_api_data = {
512
- 'meetingdate' => meeting_date.strftime('%Y-%m-%d'),
512
+ 'meetingdate' => meeting_date.strftime(Osm::OSM_DATE_FORMAT),
513
513
  'sectionid' => section_id,
514
514
  'activityid' => -1
515
515
  }
@@ -11,13 +11,25 @@ module Osm
11
11
  # @return [Hash] the total number of each badge which is due
12
12
 
13
13
  # Initialize a new DueBadges
14
- # @param [Hash] attributes the hash of attributes (see attributes for descriptions, use Symbol of attribute name as the key)
14
+ # @param [Hash] attributes the hash of attributes (see attributes for descriptions, use Symbol of attribute name as the key, exclude total as this is calculated for you)
15
15
  def initialize(attributes={})
16
- [:descriptions, :by_member, :totals].each do |attribute|
16
+ [:descriptions, :by_member].each do |attribute|
17
17
  raise ArgumentError, ":#{attribute} must be a Hash" unless attributes[attribute].is_a?(Hash)
18
18
  end
19
19
 
20
20
  attributes.each { |k,v| instance_variable_set("@#{k}", v) }
21
+
22
+ # Calculate totals
23
+ @totals = {}
24
+ @by_member.keys.each do |member_name|
25
+ @by_member[member_name].each do |badge_record|
26
+ badge_symbol = badge_record[:badge]
27
+ badge_extra = badge_record[:extra_information]
28
+ @totals[badge_record[:badge]] ||= {}
29
+ @totals[badge_symbol][badge_extra] ||= 0
30
+ @totals[badge_symbol][badge_extra] += 1
31
+ end
32
+ end
21
33
  end
22
34
 
23
35
 
@@ -45,19 +57,15 @@ module Osm
45
57
 
46
58
 
47
59
  attributes[:by_member] = {}
48
- attributes[:totals] = {}
49
60
  attributes[:pending].each_key do |key|
50
61
  attributes[:pending][key].each do |item|
51
62
  name = "#{item[:firstname]} #{item[:lastname]}"
52
- attributes[:by_member][name] = [] if attributes[:by_member][name].nil?
53
-
63
+ attributes[:by_member][name] ||= []
54
64
  badge = {
55
65
  :badge => key,
56
66
  :extra_information => item[:extra]
57
67
  }
58
68
  attributes[:by_member][name].push badge
59
- attributes[:totals][key] = {} if attributes[:totals][key].nil?
60
- attributes[:totals][key][item[:extra]] = attributes[:totals][key][item[:extra]].to_i + 1
61
69
  end
62
70
  end
63
71
 
@@ -95,7 +95,7 @@ module Osm
95
95
  {
96
96
  'eveningid' => evening_id,
97
97
  'sectionid' => section_id,
98
- 'meetingdate' => meeting_date.strftime('%Y-%m-%d'),
98
+ 'meetingdate' => meeting_date.strftime(Osm::OSM_DATE_FORMAT),
99
99
  'starttime' => start_time,
100
100
  'endtime' => end_time,
101
101
  'title' => title,
@@ -104,7 +104,7 @@ module Osm
104
104
  :phone4 => data['phone4'],
105
105
  :address => data['address'],
106
106
  :address2 => data['address2'],
107
- :date_of_birth => Osm::parse_date(data['dob']),
107
+ :date_of_birth => Osm::parse_date(data['dob'], :ignore_epoch => true),
108
108
  :started => Osm::parse_date(data['started']),
109
109
  :joining_in_years => data['joining_in_yrs'].to_i,
110
110
  :parents => data['parents'],
@@ -48,7 +48,7 @@ module Osm
48
48
 
49
49
  attributes[:attendance] = {}
50
50
  data.except('scoutid', 'patrolid', 'sectionid', 'firstname', 'lastname', 'total').keys.each do |key|
51
- attributes[:attendance][Date.strptime(key, '%Y-%m-%d')] = data[key]
51
+ attributes[:attendance][Date.strptime(key, Osm::OSM_DATE_FORMAT)] = data[key]
52
52
  end
53
53
 
54
54
  new(attributes)
@@ -77,18 +77,26 @@ module Osm
77
77
  end
78
78
 
79
79
  def <=>(another_role)
80
- compare_group_name = self.group_name <=> another_role.group_name
81
- return compare_group_name unless compare_group_name == 0
82
-
83
- return 0 if self.section.type == another_role.section.type
84
- [:beavers, :cubs, :scouts, :explorers, :waiting, :adults].each do |type|
85
- return -1 if self.section.type == type
86
- return 1 if another_role.section.type == type
80
+ begin
81
+ compare_group_name = self.group_name <=> another_role.group_name
82
+ return compare_group_name unless compare_group_name == 0
83
+
84
+ return 0 if self.section.type == another_role.section.type
85
+ [:beavers, :cubs, :scouts, :explorers, :waiting, :adults].each do |type|
86
+ return -1 if self.section.type == type
87
+ return 1 if another_role.section.type == type
88
+ end
89
+ rescue NoMethodError
90
+ return false
87
91
  end
88
92
  end
89
93
 
90
94
  def ==(another_role)
91
- self.section == another_role.try(:section)
95
+ begin
96
+ return self.section == another_role.section
97
+ rescue NoMethodError
98
+ return false
99
+ end
92
100
  end
93
101
 
94
102
  end
@@ -122,11 +122,19 @@ module Osm
122
122
  end
123
123
 
124
124
  def <=>(another_section)
125
- self.role <=> another_section.try(:role)
125
+ begin
126
+ return self.role <=> another_section.role
127
+ rescue NoMethodError
128
+ return false
129
+ end
126
130
  end
127
131
 
128
132
  def ==(another_section)
129
- self.id == another_section.try(:id)
133
+ begin
134
+ return self.id == another_section.id
135
+ rescue NoMethodError
136
+ return false
137
+ end
130
138
  end
131
139
 
132
140
 
@@ -79,17 +79,25 @@ module Osm
79
79
  end
80
80
 
81
81
  def <=>(another_term)
82
- compare = self.section_id <=> another_term.try(:section_id)
83
- return compare unless compare == 0
84
-
85
- compare = self.start <=> another_term.try(:start)
86
- return compare unless compare == 0
87
-
88
- self.id <=> another_term.try(:id)
82
+ begin
83
+ compare = self.section_id <=> another_term.section_id
84
+ return compare unless compare == 0
85
+
86
+ compare = self.start <=> another_term.start
87
+ return compare unless compare == 0
88
+
89
+ return self.id <=> another_term.id
90
+ rescue NoMethodError
91
+ return false
92
+ end
89
93
  end
90
94
 
91
95
  def ==(another_term)
92
- self.id == another_term.try(:id)
96
+ begin
97
+ return self.id == another_term.id
98
+ rescue NoMethodError
99
+ return false
100
+ end
93
101
  end
94
102
 
95
103
  end
@@ -11,8 +11,8 @@ describe "Event" do
11
11
  'name' => 'Event name',
12
12
  'startdate' => '2001-01-02',
13
13
  'starttime' => '12:00:00',
14
- 'enddate' => '2001-01-02',
15
- 'endtime' => '13:00:00',
14
+ 'enddate' => '1970-01-01',
15
+ 'endtime' => '',
16
16
  'cost' => 'Free',
17
17
  'location' => 'Somewhere',
18
18
  'notes' => 'None'
@@ -23,7 +23,7 @@ describe "Event" do
23
23
  event.section_id.should == 2
24
24
  event.name.should == 'Event name'
25
25
  event.start.should == DateTime.new(2001, 1, 2, 12, 0, 0)
26
- event.end.should == DateTime.new(2001, 1, 2, 13, 0, 0)
26
+ event.end.should == nil
27
27
  event.cost.should == 'Free'
28
28
  event.location.should == 'Somewhere'
29
29
  event.notes.should == 'None'
data/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Osm
2
- VERSION = "0.0.16"
2
+ VERSION = "0.0.17"
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.16
4
+ version: 0.0.17
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-09-04 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &80681880 !ruby/object:Gem::Requirement
16
+ requirement: &76908740 !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: *80681880
24
+ version_requirements: *76908740
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: httparty
27
- requirement: &80681550 !ruby/object:Gem::Requirement
27
+ requirement: &76900500 !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: *80681550
35
+ version_requirements: *76900500
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &80681190 !ruby/object:Gem::Requirement
38
+ requirement: &76900110 !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: *80681190
46
+ version_requirements: *76900110
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &80680950 !ruby/object:Gem::Requirement
49
+ requirement: &76899880 !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: *80680950
57
+ version_requirements: *76899880
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: fakeweb
60
- requirement: &80680740 !ruby/object:Gem::Requirement
60
+ requirement: &76899670 !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: *80680740
68
+ version_requirements: *76899670
69
69
  description: Use the Online Scout Manager API (https://www.onlinescoutmanager.co.uk)
70
70
  to retrieve and save data.
71
71
  email: