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.
- 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:
|