osm 0.0.16 → 0.0.17
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +6 -0
- data/lib/osm.rb +11 -8
- data/lib/osm/api.rb +1 -1
- data/lib/osm/due_badges.rb +15 -7
- data/lib/osm/evening.rb +1 -1
- data/lib/osm/member.rb +1 -1
- data/lib/osm/register_data.rb +1 -1
- data/lib/osm/role.rb +16 -8
- data/lib/osm/section.rb +10 -2
- data/lib/osm/term.rb +16 -8
- data/spec/osm/event_spec.rb +3 -3
- data/version.rb +1 -1
- metadata +11 -11
data/CHANGELOG.md
CHANGED
@@ -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),
|
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,
|
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,
|
59
|
+
return Date.strptime(date, OSM_DATE_FORMAT)
|
57
60
|
rescue ArgumentError
|
58
61
|
return nil
|
59
62
|
end
|
data/lib/osm/api.rb
CHANGED
@@ -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(
|
512
|
+
'meetingdate' => meeting_date.strftime(Osm::OSM_DATE_FORMAT),
|
513
513
|
'sectionid' => section_id,
|
514
514
|
'activityid' => -1
|
515
515
|
}
|
data/lib/osm/due_badges.rb
CHANGED
@@ -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
|
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]
|
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
|
|
data/lib/osm/evening.rb
CHANGED
@@ -95,7 +95,7 @@ module Osm
|
|
95
95
|
{
|
96
96
|
'eveningid' => evening_id,
|
97
97
|
'sectionid' => section_id,
|
98
|
-
'meetingdate' => meeting_date.strftime(
|
98
|
+
'meetingdate' => meeting_date.strftime(Osm::OSM_DATE_FORMAT),
|
99
99
|
'starttime' => start_time,
|
100
100
|
'endtime' => end_time,
|
101
101
|
'title' => title,
|
data/lib/osm/member.rb
CHANGED
@@ -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'],
|
data/lib/osm/register_data.rb
CHANGED
@@ -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,
|
51
|
+
attributes[:attendance][Date.strptime(key, Osm::OSM_DATE_FORMAT)] = data[key]
|
52
52
|
end
|
53
53
|
|
54
54
|
new(attributes)
|
data/lib/osm/role.rb
CHANGED
@@ -77,18 +77,26 @@ module Osm
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def <=>(another_role)
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
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
|
-
|
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
|
data/lib/osm/section.rb
CHANGED
@@ -122,11 +122,19 @@ module Osm
|
|
122
122
|
end
|
123
123
|
|
124
124
|
def <=>(another_section)
|
125
|
-
|
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
|
-
|
133
|
+
begin
|
134
|
+
return self.id == another_section.id
|
135
|
+
rescue NoMethodError
|
136
|
+
return false
|
137
|
+
end
|
130
138
|
end
|
131
139
|
|
132
140
|
|
data/lib/osm/term.rb
CHANGED
@@ -79,17 +79,25 @@ module Osm
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def <=>(another_term)
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
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
|
-
|
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
|
data/spec/osm/event_spec.rb
CHANGED
@@ -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' => '
|
15
|
-
'endtime' => '
|
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 ==
|
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
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.
|
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: &
|
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: *
|
24
|
+
version_requirements: *76908740
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: httparty
|
27
|
-
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: *
|
35
|
+
version_requirements: *76900500
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
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: *
|
46
|
+
version_requirements: *76900110
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
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: *
|
57
|
+
version_requirements: *76899880
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: fakeweb
|
60
|
-
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: *
|
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:
|