osm 0.3.0 → 0.4.0

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 CHANGED
@@ -1,3 +1,24 @@
1
+ ## Version 0.4.0
2
+
3
+ * Event::Attendance
4
+ * Move fields['firstname'] to first\_name attribute
5
+ * Move fields['lastname'] to last\_name attribute
6
+ * Move fields['dob'] to date\_of\_birth attribute
7
+ * Move fields['attending'] to attending attribute
8
+ * The keys for fields are now Fixnums not Strings
9
+ * Addition of payment\_control and payments attributes
10
+ * Addition of automatic\_payments? and manual\_payments? methods
11
+ * Addition of is\_attending?, is\_not\_attending?, is\_invited? and is\_shown? methods
12
+ * update(api, field\_id) method now updates only changed fields, becoming update(api)
13
+ * Add :network Section type
14
+ * Add custom inspect methods for:
15
+ * Event::Attendance (replace event with event.id if present)
16
+ * Event::Column (replace event with event.id if present)
17
+ * FlexiRecord::Column (replace flexi\_record with flexi\_record.id)
18
+ * FlexiRecord::Data (replace flexi\_record with flexi\_record.id)
19
+ * Badge::Requirement (replace badge with badge.osm\_key)
20
+ * Badge::Data (replace badge with badge.osm\_key)
21
+
1
22
  ## Version 0.3.0
2
23
 
3
24
  * Removal of DueBadges
data/README.md CHANGED
@@ -137,6 +137,8 @@ however it should be noted that when the OSM API adds a feature it can be diffic
137
137
 
138
138
  ## Parts of the OSM API currently NOT supported (may not be an exhaustive list):
139
139
 
140
+ See the [Roadmap page in the wiki](https://github.com/robertgauld/osm/wiki/Roadmap) for more details.
141
+
140
142
  * SMS:
141
143
  * Retrieval of delivery reports [issue 54]
142
144
  * Sending a message [issue 54]
data/lib/osm.rb CHANGED
@@ -142,4 +142,14 @@ module Osm
142
142
  [OSM_EPOCH, OSM_EPOCH_HUMAN].include?(date)
143
143
  end
144
144
 
145
+ def self.inspect_instance(instance, options={})
146
+ replace_with = options[:replace_with] || {}
147
+
148
+ values = instance.attributes.sort.map{ |(k,v)|
149
+ (replace_with.keys.include?(k) && !v.nil?) ? "#{k}.#{replace_with[k]}: #{v.try(replace_with[k])}" : "#{k}: #{v.inspect}"
150
+ }
151
+
152
+ return "#<#{instance.class.name} #{values.join(', ')} >"
153
+ end
154
+
145
155
  end # Module
data/lib/osm/badge.rb CHANGED
@@ -189,6 +189,10 @@ module Osm
189
189
  return result
190
190
  end
191
191
 
192
+ def inspect
193
+ Osm.inspect_instance(self, options={:replace_with => {'badge' => :osm_key}})
194
+ end
195
+
192
196
  end # Class Requirement
193
197
 
194
198
 
@@ -318,6 +322,10 @@ module Osm
318
322
  return result
319
323
  end
320
324
 
325
+ def inspect
326
+ Osm.inspect_instance(self, options={:replace_with => {'badge' => :osm_key}})
327
+ end
328
+
321
329
  end # Class Data
322
330
 
323
331
  end # Class Badge
data/lib/osm/event.rb CHANGED
@@ -251,20 +251,32 @@ module Osm
251
251
  data = api.perform_query("events.php?action=getEventAttendance&eventid=#{id}&sectionid=#{section_id}&termid=#{term_id}")
252
252
  data = data['items']
253
253
 
254
+ payment_values = {
255
+ 'Manual' => :manual,
256
+ 'Automatic' => :automatic,
257
+ }
258
+ attending_values = {
259
+ 'Yes' => :yes,
260
+ 'No' => :no,
261
+ 'Invited' => :invited,
262
+ 'Show in My.SCOUT' => :shown,
263
+ }
264
+
254
265
  attendance = []
255
266
  data.each_with_index do |item, index|
256
- item.merge!({
257
- 'dob' => item['dob'].nil? ? nil : Osm::parse_date(item['dob'], :ignore_epoch => true),
258
- 'attending' => item['attending'].eql?('Yes'),
259
- })
260
-
261
267
  attendance.push Osm::Event::Attendance.new(
262
268
  :event => self,
263
269
  :member_id => Osm::to_i_or_nil(item['scoutid']),
264
270
  :grouping_id => Osm::to_i_or_nil(item['patrolid'].eql?('') ? nil : item['patrolid']),
265
- :fields => item.select { |key, value|
266
- ['firstname', 'lastname', 'dob', 'attending'].include?(key) || key.to_s.match(/\Af_\d+\Z/)
267
- },
271
+ :first_name => item['firstname'],
272
+ :last_name => item['lastname'],
273
+ :date_of_birth => item['dob'].nil? ? nil : Osm::parse_date(item['dob'], :ignore_epoch => true),
274
+ :attending => attending_values[item['attending']],
275
+ :payment_control => payment_values[item['payment']],
276
+ :fields => item.select { |key, value| key.to_s.match(/\Af_\d+\Z/) }
277
+ .inject({}){ |h,(k,v)| h[k[2..-1].to_i] = v; h },
278
+ :payments => item.select { |key, value| key.to_s.match(/\Ap\d+\Z/) }
279
+ .inject({}){ |h,(k,v)| h[k[1..-1].to_i] = v; h },
268
280
  :row => index,
269
281
  )
270
282
  end
@@ -454,10 +466,14 @@ module Osm
454
466
  return result
455
467
  end
456
468
 
469
+ def inspect
470
+ Osm.inspect_instance(self, options={:replace_with => {'event' => :id}})
471
+ end
472
+
457
473
  end # class Column
458
474
 
459
475
 
460
- class Attendance < Osm::Model
476
+ class Attendance < Osm::Model
461
477
  # @!attribute [rw] member_id
462
478
  # @return [Fixnum] OSM id for the member
463
479
  # @!attribute [rw] grouping__id
@@ -468,64 +484,163 @@ module Osm
468
484
  # @return [Fixnum] part of the OSM API
469
485
  # @!attriute [rw] event
470
486
  # @return [Osm::Event] the event that this attendance applies to
487
+ # @!attribute [rw] first_name
488
+ # @return [String] the member's first name
489
+ # @!attribute [rw] last_name
490
+ # @return [String] the member's last name
491
+ # @!attribute [rw] date_of_birth
492
+ # @return [Date] the member's date of birth
493
+ # @!attribute [rw] attending
494
+ # @return [Symbol] whether the member is attending (either :yes, :no, :invited, :shown or nil)
495
+ # @!attribute [rw] payments
496
+ # @return [Hash] keys are the payment's id, values are the payment state
497
+ # @!attribute [rw] payment_control
498
+ # @return [Symbol] whether payments are done manually or automatically (either :manual, :automatic or nil)
471
499
 
472
500
  attribute :row, :type => Integer
473
501
  attribute :member_id, :type => Integer
474
502
  attribute :grouping_id, :type => Integer
475
503
  attribute :fields, :default => {}
476
504
  attribute :event
477
-
478
- attr_accessible :member_id, :grouping_id, :fields, :row, :event
479
-
505
+ attribute :first_name, :type => String
506
+ attribute :last_name, :type => String
507
+ attribute :date_of_birth, :type => Date
508
+ attribute :attending
509
+ attribute :payments, :default => {}
510
+ attribute :payment_control
511
+
512
+ attr_accessible :member_id, :grouping_id, :fields, :row, :event, :first_name, :last_name, :date_of_birth, :attending, :payments, :payment_control
513
+
480
514
  validates_numericality_of :row, :only_integer=>true, :greater_than_or_equal_to=>0
481
515
  validates_numericality_of :member_id, :only_integer=>true, :greater_than=>0
482
516
  validates_numericality_of :grouping_id, :only_integer=>true, :greater_than_or_equal_to=>-2
483
- validates :fields, :hash => {:key_type => String}
517
+ validates :fields, :hash => { :key_type => Fixnum, :value_type => String }
518
+ validates :payments, :hash => { :key_type => Fixnum, :value_type => String }
484
519
  validates_each :event do |record, attr, value|
485
520
  record.event.valid?
486
521
  end
522
+ validates_presence_of :first_name
523
+ validates_presence_of :last_name
524
+ validates_presence_of :date_of_birth
525
+ validates_inclusion_of :payment_control, :in => [:manual, :automatic, nil]
526
+ validates_inclusion_of :attending, :in => [:yes, :no, :invited, :shown, nil]
527
+
487
528
 
488
-
489
529
  # @!method initialize
490
530
  # Initialize a new Attendance
491
531
  # @param [Hash] attributes The hash of attributes (see attributes for descriptions, use Symbol of attribute name as the key)
532
+ old_initialize = instance_method(:initialize)
533
+ define_method :initialize do |*args|
534
+ ret_val = old_initialize.bind(self).call(*args)
535
+ self.fields = DirtyHashy.new(self.fields)
536
+ self.fields.clean_up!
537
+ return ret_val
538
+ end
492
539
 
493
540
 
494
541
  # Update event attendance
495
542
  # @param [Osm::Api] api The api to use to make the request
496
- # @param [String] field_id The id of the field to update (must be 'attending' or /\Af_\d+\Z/)
497
543
  # @return [Boolean] if the operation suceeded or not
498
- # @raise [Osm::ArgumentIsInvalid] If field_id does not match the pattern "f_#{number}" or is "attending"
499
- def update(api, field_id)
544
+ def update(api)
500
545
  require_ability_to(api, :write, :events, event.section_id)
501
- raise Osm::ArgumentIsInvalid, 'field_id is invalid' unless field_id.match(/\Af_\d+\Z/) || field_id.eql?('attending')
502
-
503
- data = api.perform_query("events.php?action=updateScout", {
504
- 'scoutid' => member_id,
505
- 'column' => field_id,
506
- 'value' => !field_id.eql?('attending') ? fields[field_id] : (fields['attending'] ? 'Yes' : 'No'),
507
- 'sectionid' => event.section_id,
508
- 'row' => row,
509
- 'eventid' => event.id,
510
- })
511
-
512
- if data.is_a?(Hash)
546
+
547
+ payment_values = {
548
+ :manual => 'Manual',
549
+ :automatic => 'Automatic',
550
+ }
551
+ attending_values = {
552
+ :yes => 'Yes',
553
+ :no => 'No',
554
+ :invited => 'Invited',
555
+ :shown => 'Show in My.SCOUT',
556
+ }
557
+
558
+ updated = true
559
+ fields.changes.each do |field, (was,now)|
560
+ data = api.perform_query("events.php?action=updateScout", {
561
+ 'scoutid' => member_id,
562
+ 'column' => "f_#{field}",
563
+ 'value' => now,
564
+ 'sectionid' => event.section_id,
565
+ 'row' => row,
566
+ 'eventid' => event.id,
567
+ })
568
+ updated = false unless data.is_a?(Hash)
569
+ end
570
+
571
+ if changed_attributes.include?('payment_control')
572
+ data = api.perform_query("events.php?action=updateScout", {
573
+ 'scoutid' => member_id,
574
+ 'column' => 'payment',
575
+ 'value' => payment_values[payment_control],
576
+ 'sectionid' => event.section_id,
577
+ 'row' => row,
578
+ 'eventid' => event.id,
579
+ })
580
+ updated = false unless data.is_a?(Hash)
581
+ end
582
+ if changed_attributes.include?('attending')
583
+ data = api.perform_query("events.php?action=updateScout", {
584
+ 'scoutid' => member_id,
585
+ 'column' => 'attending',
586
+ 'value' => attending_values[attending],
587
+ 'sectionid' => event.section_id,
588
+ 'row' => row,
589
+ 'eventid' => event.id,
590
+ })
591
+ updated = false unless data.is_a?(Hash)
592
+ end
593
+
594
+ if updated
513
595
  reset_changed_attributes
596
+ fields.clean_up!
514
597
  # The cached event attedance will be out of date
515
- Osm::Model.cache_delete(api, ['event_attendance', event.id])
516
- return true
517
- else
518
- return false
598
+ cache_delete(api, ['event_attendance', event.id])
599
+ end
600
+ return updated
601
+ end
602
+
603
+ # @! method automatic_payments?
604
+ # Check wether payments are made automatically for this member
605
+ # @return [Boolean]
606
+ # @! method manual_payments?
607
+ # Check wether payments are made manually for this member
608
+ # @return [Boolean]
609
+ [:automatic, :manual].each do |payment_control_type|
610
+ define_method "#{payment_control_type}_payments?" do
611
+ payments == payment_control_type
519
612
  end
520
613
  end
521
614
 
522
- # Compare Activity based on event then row
615
+ # @! method is_attending?
616
+ # Check wether the member has said they are attending the event
617
+ # @return [Boolean]
618
+ # @! method is_not_attending?
619
+ # Check wether the member has said they are not attending the event
620
+ # @return [Boolean]
621
+ # @! method is_invited?
622
+ # Check wether the member has been invited to the event
623
+ # @return [Boolean]
624
+ # @! method is_shown?
625
+ # Check wether the member can see the event in My.SCOUT
626
+ # @return [Boolean]
627
+ [:attending, :not_attending, :invited, :shown].each do |attending_type|
628
+ define_method "is_#{attending_type}?" do
629
+ attending == attending_type
630
+ end
631
+ end
632
+
633
+ # Compare Attendance based on event then row
523
634
  def <=>(another)
524
635
  result = self.event <=> another.try(:event)
525
636
  result = self.row <=> another.try(:row) if result == 0
526
637
  return result
527
638
  end
528
639
 
640
+ def inspect
641
+ Osm.inspect_instance(self, options={:replace_with => {'event' => :id}})
642
+ end
643
+
529
644
  end # Class Attendance
530
645
 
531
646
  end # Class Event
@@ -226,6 +226,10 @@ module Osm
226
226
  return result
227
227
  end
228
228
 
229
+ def inspect
230
+ Osm.inspect_instance(self, options={:replace_with => {'flexi_record' => :id}})
231
+ end
232
+
229
233
  end # Class FlexiRecord::Column
230
234
 
231
235
 
@@ -316,6 +320,10 @@ module Osm
316
320
  return result
317
321
  end
318
322
 
323
+ def inspect
324
+ Osm.inspect_instance(self, options={:replace_with => {'flexi_record' => :id}})
325
+ end
326
+
319
327
  end # Class FlexiRecord::Data
320
328
 
321
329
  end # Class FlexiRecord
data/lib/osm/section.rb CHANGED
@@ -14,7 +14,7 @@ module Osm
14
14
  # @!attribute [rw] subscription_expires
15
15
  # @return [Date] when the section's subscription to OSM expires
16
16
  # @!attribute [rw] type
17
- # @return [Symbol] the section type (:beavers, :cubs, :scouts, :exporers, :adults, :waiting, :unknown)
17
+ # @return [Symbol] the section type (:beavers, :cubs, :scouts, :exporers, :network, :adults, :waiting, :unknown)
18
18
  # @!attribute [rw] column_names
19
19
  # @return [Hash] custom names to use for the data columns
20
20
  # @!attribute [rw] fields
@@ -310,13 +310,16 @@ module Osm
310
310
  # @!method explorers?
311
311
  # Check if this is an Explorers section
312
312
  # @return (Boolean)
313
+ # @!method network?
314
+ # Check if this is a Network section
315
+ # @return (Boolean)
313
316
  # @!method adults?
314
317
  # Check if this is an Adults section
315
318
  # @return (Boolean)
316
319
  # @!method waiting?
317
320
  # Check if this is a waiting list
318
321
  # @return (Boolean)
319
- [:beavers, :cubs, :scouts, :explorers, :adults, :waiting].each do |attribute|
322
+ [:beavers, :cubs, :scouts, :explorers, :network, :adults, :waiting].each do |attribute|
320
323
  define_method "#{attribute}?" do
321
324
  type == attribute
322
325
  end
@@ -336,7 +339,7 @@ module Osm
336
339
  def <=>(another)
337
340
  result = self.group_name <=> another.try(:group_name)
338
341
  result = 0 if self.type == another.try(:type) && result == 0
339
- [:beavers, :cubs, :scouts, :explorers, :waiting, :adults].each do |type|
342
+ [:beavers, :cubs, :scouts, :explorers, :network, :adults, :waiting].each do |type|
340
343
  if result == 0
341
344
  result = -1 if self.type == type
342
345
  result = 1 if another.try(:type) == type
@@ -69,7 +69,12 @@ describe "Event" do
69
69
  :member_id => 1,
70
70
  :grouping_id => 2,
71
71
  :row => 3,
72
- :columns => [],
72
+ :first_name => 'First',
73
+ :last_name => 'Last',
74
+ :attending => :yes,
75
+ :date_of_birth => Date.new(2000, 1, 2),
76
+ :fields => {},
77
+ :payments => {},
73
78
  :event => Osm::Event.new(:id => 1, :section_id => 1, :name => 'Name', :columns => [])
74
79
  }
75
80
 
@@ -77,7 +82,12 @@ describe "Event" do
77
82
  ea.member_id.should == 1
78
83
  ea.grouping_id.should == 2
79
84
  ea.fields.should == {}
85
+ ea.payments.should == {}
80
86
  ea.row.should == 3
87
+ ea.first_name.should == 'First'
88
+ ea.last_name.should == 'Last'
89
+ ea.date_of_birth.should == Date.new(2000, 1, 2)
90
+ ea.attending.should == :yes
81
91
  ea.valid?.should be_true
82
92
  end
83
93
 
@@ -528,6 +538,8 @@ describe "Event" do
528
538
  'dob' => '1980-01-02',
529
539
  'patrolid' => '2',
530
540
  'f_1' => 'a',
541
+ 'payment' => 'Manual',
542
+ 'p1' => ''
531
543
  }
532
544
  ]
533
545
  }
@@ -541,25 +553,63 @@ describe "Event" do
541
553
  ea = attendance[0]
542
554
  ea.member_id.should == 1
543
555
  ea.grouping_id.should == 2
556
+ ea.first_name.should == 'First'
557
+ ea.last_name.should == 'Last'
558
+ ea.date_of_birth.should == Date.new(1980, 1, 2)
559
+ ea.attending.should == :yes
544
560
  ea.fields.should == {
545
- 'firstname' => 'First',
546
- 'lastname' => 'Last',
547
- 'dob' => Date.new(1980, 1, 2),
548
- 'attending' => true,
549
- 'f_1' => 'a',
561
+ 1 => 'a',
562
+ }
563
+ ea.payments.should == {
564
+ 1 => '',
550
565
  }
551
566
  ea.row.should == 0
552
567
  end
553
568
 
554
569
  it "Update attendance (succeded)" do
555
- ea = Osm::Event::Attendance.new(:row => 0, :member_id => 4, :fields => {'f_1' => 'TEST'}, :event => Osm::Event.new(:id => 2, :section_id => 1))
570
+ ea = Osm::Event::Attendance.new(:row => 0, :member_id => 4, :fields => {1 => 'old value', 2 => 'another old value'}, :event => Osm::Event.new(:id => 2, :section_id => 1))
556
571
 
572
+ ea.fields[1] = 'value'
557
573
  HTTParty.should_receive(:post).with(
558
574
  "https://www.onlinescoutmanager.co.uk/events.php?action=updateScout",
559
575
  {:body => {
560
576
  'scoutid' => 4,
561
577
  'column' => 'f_1',
562
- 'value' => 'TEST',
578
+ 'value' => 'value',
579
+ 'sectionid' => 1,
580
+ 'row' => 0,
581
+ 'eventid' => 2,
582
+ 'apiid' => @CONFIGURATION[:api][:osm][:id],
583
+ 'token' => @CONFIGURATION[:api][:osm][:token],
584
+ 'userid' => 'user_id',
585
+ 'secret' => 'secret',
586
+ }}
587
+ ) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
588
+
589
+ ea.attending = :yes
590
+ HTTParty.should_receive(:post).with(
591
+ "https://www.onlinescoutmanager.co.uk/events.php?action=updateScout",
592
+ {:body => {
593
+ 'scoutid' => 4,
594
+ 'column' => 'attending',
595
+ 'value' => 'Yes',
596
+ 'sectionid' => 1,
597
+ 'row' => 0,
598
+ 'eventid' => 2,
599
+ 'apiid' => @CONFIGURATION[:api][:osm][:id],
600
+ 'token' => @CONFIGURATION[:api][:osm][:token],
601
+ 'userid' => 'user_id',
602
+ 'secret' => 'secret',
603
+ }}
604
+ ) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
605
+
606
+ ea.payment_control = :automatic
607
+ HTTParty.should_receive(:post).with(
608
+ "https://www.onlinescoutmanager.co.uk/events.php?action=updateScout",
609
+ {:body => {
610
+ 'scoutid' => 4,
611
+ 'column' => 'payment',
612
+ 'value' => 'Automatic',
563
613
  'sectionid' => 1,
564
614
  'row' => 0,
565
615
  'eventid' => 2,
@@ -570,7 +620,7 @@ describe "Event" do
570
620
  }}
571
621
  ) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
572
622
 
573
- ea.update(@api, 'f_1').should be_true
623
+ ea.update(@api).should be_true
574
624
  end
575
625
 
576
626
 
data/spec/osm/osm_spec.rb CHANGED
@@ -55,4 +55,32 @@ describe "Online Scout Manager" do
55
55
 
56
56
  end
57
57
 
58
+
59
+ describe "Inspect instance" do
60
+
61
+ class TestA < Osm::Model
62
+ attribute :id
63
+ attribute :b
64
+ attr_accessible :id, :b
65
+ end
66
+ class TestB < Osm::Model
67
+ attribute :id
68
+ attribute :a
69
+ attr_accessible :id, :a
70
+ end
71
+
72
+ it "Returns a string" do
73
+ this_one = TestA.new(:id => 1, :b => '1')
74
+ inspect = Osm.inspect_instance(this_one)
75
+ inspect.should == '#<TestA b: "1", id: 1 >'
76
+ end
77
+
78
+ it "Replaces items with their attribute" do
79
+ this_one = TestA.new(:id => 1, :b => TestB.new(:id => 2))
80
+ inspect = Osm.inspect_instance(this_one, options={:replace_with => {'b' => :id}})
81
+ inspect.should == '#<TestA b.id: 2, id: 1 >'
82
+ end
83
+
84
+ end
85
+
58
86
  end
@@ -229,12 +229,13 @@ describe "Section" do
229
229
  cubs = Osm::Section.new(:type => :cubs)
230
230
  scouts = Osm::Section.new(:type => :scouts)
231
231
  explorers = Osm::Section.new(:type => :explorers)
232
+ network = Osm::Section.new(:type => :network)
232
233
  adults = Osm::Section.new(:type => :adults)
233
234
  waiting = Osm::Section.new(:type => :waiting)
234
235
 
235
- {:beavers => beavers, :cubs => cubs, :scouts => scouts, :explorers => explorers, :adults => adults, :waiting => waiting, :unknown => unknown}.each do |section_type, section|
236
+ {:beavers => beavers, :cubs => cubs, :scouts => scouts, :explorers => explorers, :network => network, :adults => adults, :waiting => waiting, :unknown => unknown}.each do |section_type, section|
236
237
  it "For a #{section_type} section" do
237
- [:beavers, :cubs, :scouts, :explorers, :adults, :waiting].each do |type|
238
+ [:beavers, :cubs, :scouts, :explorers, :network, :adults, :waiting].each do |type|
238
239
  section.send("#{type.to_s}?").should == (section_type == type)
239
240
  end
240
241
  end
@@ -248,6 +249,7 @@ describe "Section" do
248
249
  cubs = Osm::Section.new(:type => :cubs)
249
250
  scouts = Osm::Section.new(:type => :scouts)
250
251
  explorers = Osm::Section.new(:type => :explorers)
252
+ network = Osm::Section.new(:type => :network)
251
253
  adults = Osm::Section.new(:type => :adults)
252
254
  waiting = Osm::Section.new(:type => :waiting)
253
255
 
@@ -256,7 +258,7 @@ describe "Section" do
256
258
  section.youth_section?.should be_true
257
259
  end
258
260
  end
259
- [adults, waiting, unknown].each do |section|
261
+ [network, adults, waiting, unknown].each do |section|
260
262
  it "For a #{section.type} section" do
261
263
  section.youth_section?.should be_false
262
264
  end
data/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Osm
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
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.3.0
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-26 00:00:00.000000000Z
12
+ date: 2013-03-10 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &86835090 !ruby/object:Gem::Requirement
16
+ requirement: &88838420 !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: *86835090
24
+ version_requirements: *88838420
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: httparty
27
- requirement: &86833800 !ruby/object:Gem::Requirement
27
+ requirement: &88838170 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0.9'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *86833800
35
+ version_requirements: *88838170
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: active_attr
38
- requirement: &86832220 !ruby/object:Gem::Requirement
38
+ requirement: &88837940 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0.6'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *86832220
46
+ version_requirements: *88837940
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activemodel
49
- requirement: &86819190 !ruby/object:Gem::Requirement
49
+ requirement: &88837710 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '3.2'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *86819190
57
+ version_requirements: *88837710
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: dirty_hashy
60
- requirement: &86818730 !ruby/object:Gem::Requirement
60
+ requirement: &88837480 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.2.1
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *86818730
68
+ version_requirements: *88837480
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
- requirement: &86818240 !ruby/object:Gem::Requirement
71
+ requirement: &88837250 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '10.0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *86818240
79
+ version_requirements: *88837250
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &86817390 !ruby/object:Gem::Requirement
82
+ requirement: &88837020 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '2.11'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *86817390
90
+ version_requirements: *88837020
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: fakeweb
93
- requirement: &86816770 !ruby/object:Gem::Requirement
93
+ requirement: &88836790 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '1.3'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *86816770
101
+ version_requirements: *88836790
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: guard-rspec
104
- requirement: &86816110 !ruby/object:Gem::Requirement
104
+ requirement: &88836560 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '2.4'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *86816110
112
+ version_requirements: *88836560
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rb-inotify
115
- requirement: &86815330 !ruby/object:Gem::Requirement
115
+ requirement: &88836330 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ~>
@@ -120,7 +120,7 @@ dependencies:
120
120
  version: '0.9'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *86815330
123
+ version_requirements: *88836330
124
124
  description: Use the Online Scout Manager API (https://www.onlinescoutmanager.co.uk)
125
125
  to retrieve and save data.
126
126
  email: