locomotion 0.0.3 → 0.0.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eb78cbd836a4e268cfa2de4229b0321e79395a84
4
- data.tar.gz: 076ec8aad1472b53c1134d002a962dc9b6121ca3
3
+ metadata.gz: d0fe2c6c62bc55a832a7f7bed5545478b482a452
4
+ data.tar.gz: 3d395b4d55710a58b21f66644cb7f1c2200f8fcb
5
5
  SHA512:
6
- metadata.gz: e46baff6202dc6f2567abcca48c74c0b5f9fea8bbab2606f13728a0380b605d7d133af6b53ab7790b1630543e6eb091e28dc148c1bd23bc329a6200fccfde970
7
- data.tar.gz: 176e7098e6874a3303870f8a17ea623968e611e8bf69ed577fd7ba5c3edf3de5eee205b8848eb5bcb0fde9652961da715d31cdf7394e881915c533b6c13b5f86
6
+ metadata.gz: 4eea17a90db739eb0b6d4be28317baecc28d1a4a64a0b47abdd29a97a1575af2b0e295e39a8334ce31d954fc01c0793cb9b1ece70a01ac6ed18d81239fa4bd22
7
+ data.tar.gz: 2480e3a90d553128e90ea053525de21222e3855a77ce891af217ade4268838a59f9f0d398ed461d59ff28ed3bf04c768a5135e5708b2ffd0a843a558dbeb4472
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,3 @@
1
1
  module Locomotion
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/motion/locomotion.rb CHANGED
@@ -1,6 +1,21 @@
1
1
  module Locomotion
2
2
  class << self
3
3
 
4
+ def accuracy= level
5
+ watchman.switch_to_accuracy({
6
+ best_for_navigation: KCLLocationAccuracyBestForNavigation,
7
+ best: KCLLocationAccuracyBest,
8
+ nearest_ten: KCLLocationAccuracyNearestTenMeters,
9
+ nearest_hundred: KCLLocationAccuracyHundredMeters,
10
+ nearest_km: KCLLocationAccuracyKilometer,
11
+ nearest_3km: KCLLocationAccuracyThreeKilometers
12
+ }.fetch(level, KCLLocationAccuracyBest))
13
+ end
14
+
15
+ def distance_filter= distance
16
+ watchman.switch_to_distance_filter distance || KCLDistanceFilterNone
17
+ end
18
+
4
19
  def watch opts = {}, &block
5
20
  watchman.process opts
6
21
  watchman.listeners << block
@@ -30,6 +30,10 @@ module Locomotion
30
30
  @original.horizontalAccuracy
31
31
  end
32
32
 
33
+ def distance_to other
34
+ @original.distanceFromLocation CLLocation.alloc.initWithLatitude other.latitude, longitude: other.longitude
35
+ end
36
+
33
37
  def inspect
34
38
  "<Location #{latitude} #{longitude} >"
35
39
  end
@@ -28,7 +28,13 @@ module Locomotion
28
28
  @location_manager.allowDeferredLocationUpdatesUntilTraveled 10000, timeout: time
29
29
  end
30
30
 
31
+ def reset
32
+ @location_manager.stopUpdatingLocation
33
+ @location_manager.startUpdatingLocation
34
+ end
35
+
31
36
  def clear
37
+ @listeners = []
32
38
  @location_manager.stopUpdatingLocation
33
39
  end
34
40
 
@@ -41,5 +47,15 @@ module Locomotion
41
47
  def error code
42
48
  end
43
49
 
50
+ def switch_to_accuracy accuracy
51
+ @location_manager.desiredAccuracy = accuracy
52
+ reset
53
+ end
54
+
55
+ def switch_to_distance_filter distance
56
+ @location_manager.distanceFilter = distance
57
+ reset
58
+ end
59
+
44
60
  end
45
61
  end
@@ -0,0 +1,42 @@
1
+ describe 'location' do
2
+ before do
3
+ @cllocation = CLLocation.alloc.initWithCoordinate CLLocationCoordinate2D.new(1,2),
4
+ altitude: 10,
5
+ horizontalAccuracy: 4,
6
+ verticalAccuracy: 3,
7
+ course: 1.3,
8
+ speed: 1.5,
9
+ timestamp: Time.at(123456789)
10
+ @location = Locomotion::Location.alloc.init @cllocation
11
+ end
12
+
13
+ it 'exposes latitude' do
14
+ @location.latitude.should.equal 1
15
+ end
16
+ it 'exposes longitude' do
17
+ @location.longitude.should.equal 2
18
+ end
19
+ it 'exposes speed' do
20
+ @location.speed.should.equal 1.5
21
+ end
22
+ it 'exposes heading' do
23
+ @location.heading.should.equal 1.3
24
+ end
25
+ it 'exposes time' do
26
+ @location.time.should.equal Time.at(123456789)
27
+ end
28
+ it 'exposes accuracy' do
29
+ @location.accuracy.should.equal 4
30
+ end
31
+
32
+ it 'formats nicely' do
33
+ @location.to_s.should.equal "<Location 1.0 2.0 >"
34
+ @location.to_s.should.equal @location.inspect
35
+ end
36
+
37
+ it 'can calculate distance to another location' do
38
+ another_location = Locomotion::Location.alloc.init CLLocation.alloc.initWithLatitude 1, longitude: 3
39
+ @location.distance_to(another_location).should.be.close 111302.649, 0.001
40
+ end
41
+
42
+ end
@@ -1,31 +1,18 @@
1
1
  describe 'the watchman' do
2
2
 
3
3
  before do
4
- test_manager = Class.new do
5
- attr_accessor :delegate, :distanceFilter, :desiredAccuracy, :purpose
6
-
7
- def startUpdatingLocation
8
- commands << :start
9
- end
10
- def stopUpdatingLocation
11
- commands << :stop
12
- end
13
- def allowDeferredLocationUpdatesUntilTraveled distance, timeout: time
14
- commands << [:defer,distance,time]
15
- end
16
- def commands
17
- @commands ||= []
18
- end
19
- end
20
- @watchman = Locomotion::Watchman.alloc.init test_manager
4
+ @watchman = Locomotion::Watchman.alloc.init FakeLocationManager
5
+ @watchman.location_manager.reset
21
6
  end
22
7
 
23
8
  it 'initialises the location manager with the minimum distance filter' do
24
9
  @watchman.location_manager.distanceFilter.should.equal KCLDistanceFilterNone
25
10
  end
11
+
26
12
  it 'initialises the location manager with the best accuracy' do
27
13
  @watchman.location_manager.desiredAccuracy.should.equal KCLLocationAccuracyBest
28
14
  end
15
+
29
16
  it 'sets the delegate to be a locomotion delegate' do
30
17
  @watchman.location_manager.should.satisfy do |lm|
31
18
  lm.delegate.class == Locomotion::Delegate and
@@ -47,19 +34,38 @@ describe 'the watchman' do
47
34
  @watchman.go
48
35
  @watchman.location_manager.commands.should.equal [:start]
49
36
  end
37
+
50
38
  it 'tells location manager to defer on pause' do
51
39
  @watchman.pause 42
52
40
  @watchman.location_manager.commands.should.equal [[:defer,10000,42]]
53
41
  end
42
+
43
+ it 'tells location manager to stop then start on reset' do
44
+ @watchman.reset
45
+ @watchman.location_manager.commands.should.equal [:stop,:start]
46
+ end
47
+
54
48
  it 'tells location manager to stop on clear' do
55
49
  @watchman.clear
56
50
  @watchman.location_manager.commands.should.equal [:stop]
57
51
  end
58
52
 
53
+ it 'removes listeners on clear' do
54
+ @watchman.listeners << :a
55
+ @watchman.clear
56
+ @watchman.listeners.should.equal []
57
+ end
58
+
59
59
  it 'tells listeners on update' do
60
60
  @watchman.listeners << proc { |location| @location = location }
61
61
  @watchman.update CLLocation.alloc.initWithLatitude 1, longitude: 1
62
62
  @location.should.satisfy { |l| l.latitude == 1 && l.longitude == 1 }
63
63
  end
64
64
 
65
+ { switch_to_accuracy: :desiredAccuracy, switch_to_distance_filter: :distanceFilter }.each do |method,setting|
66
+ it "can configure #{setting} but resets afterwards" do
67
+ @watchman.send(method,42)
68
+ @watchman.location_manager.commands.should.equal [[setting,42],:stop,:start]
69
+ end
70
+ end
65
71
  end
@@ -0,0 +1,33 @@
1
+ class FakeLocationManager
2
+ attr_accessor :delegate, :distanceFilter, :desiredAccuracy, :purpose
3
+
4
+ def distanceFilter= value
5
+ commands << [:distanceFilter,value]
6
+ @distanceFilter = value
7
+ end
8
+
9
+ def desiredAccuracy= value
10
+ commands << [:desiredAccuracy,value]
11
+ @desiredAccuracy= value
12
+ end
13
+
14
+ def startUpdatingLocation
15
+ commands << :start
16
+ end
17
+
18
+ def stopUpdatingLocation
19
+ commands << :stop
20
+ end
21
+
22
+ def allowDeferredLocationUpdatesUntilTraveled distance, timeout: time
23
+ commands << [:defer,distance,time]
24
+ end
25
+
26
+ def commands
27
+ @commands ||= []
28
+ end
29
+
30
+ def reset
31
+ @commands = []
32
+ end
33
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: locomotion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Rowe
@@ -29,7 +29,7 @@ cert_chain:
29
29
  2feWfO4gCNmvfFjULOAYHq9JHEjN5SLSXvj5HdSnDcCyIfJKn5Ya3JahWQaWIsXf
30
30
  /NPE/mB57TOwj+d7XUa2NC4HUadF8R51IYEcIB0PpIEzJlKtfXFcOZxO
31
31
  -----END CERTIFICATE-----
32
- date: 2013-05-28 00:00:00.000000000 Z
32
+ date: 2013-05-29 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: bundler
@@ -81,7 +81,9 @@ files:
81
81
  - motion/locomotion/watchman.rb
82
82
  - spec/integration_spec.rb
83
83
  - spec/locomotion/delegate_spec.rb
84
+ - spec/locomotion/location_spec.rb
84
85
  - spec/locomotion/watchman_spec.rb
86
+ - spec/support/fake_location_manager.rb
85
87
  homepage: https://github.com/JonRowe/locomotion
86
88
  licenses:
87
89
  - MIT
@@ -110,4 +112,6 @@ test_files:
110
112
  - app/app_delegate.rb
111
113
  - spec/integration_spec.rb
112
114
  - spec/locomotion/delegate_spec.rb
115
+ - spec/locomotion/location_spec.rb
113
116
  - spec/locomotion/watchman_spec.rb
117
+ - spec/support/fake_location_manager.rb
metadata.gz.sig CHANGED
Binary file