osm 0.3.0 → 0.4.0

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