osm 0.0.16 → 0.0.17

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