bubble-wrap 1.8.0 → 1.9.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.
- checksums.yaml +4 -4
- data/.travis.yml +14 -9
- data/CHANGELOG.md +21 -2
- data/Gemfile.lock +8 -5
- data/README.md +54 -3
- data/Rakefile +7 -1
- data/lib/bubble-wrap/camera.rb +1 -1
- data/lib/bubble-wrap/core.rb +1 -1
- data/lib/bubble-wrap/font.rb +1 -1
- data/lib/bubble-wrap/loader.rb +4 -4
- data/lib/bubble-wrap/media.rb +1 -1
- data/lib/bubble-wrap/motion.rb +7 -1
- data/lib/bubble-wrap/version.rb +2 -2
- data/motion/core/app.rb +4 -0
- data/motion/core/device/ios/camera_wrapper.rb +1 -1
- data/motion/core/device/ios/screen.rb +2 -2
- data/motion/core/device/osx/screen.rb +1 -1
- data/motion/core/device/screen.rb +1 -1
- data/motion/core/ios/device.rb +1 -1
- data/motion/core/ios/ns_index_path.rb +11 -0
- data/motion/core/json.rb +2 -2
- data/motion/core/kvo.rb +118 -55
- data/motion/core/ns_notification_center.rb +2 -2
- data/motion/core/ns_url_request.rb +2 -2
- data/motion/core/osx/device.rb +1 -1
- data/motion/core/string.rb +7 -7
- data/motion/font/font.rb +1 -1
- data/motion/ios/8/location_constants.rb +21 -0
- data/motion/location/location.rb +38 -18
- data/motion/mail/result.rb +1 -1
- data/motion/media/media.rb +1 -1
- data/motion/motion/accelerometer.rb +55 -0
- data/motion/motion/device_motion.rb +139 -0
- data/motion/motion/gyroscope.rb +55 -0
- data/motion/motion/magnetometer.rb +55 -0
- data/motion/motion/motion.rb +0 -288
- data/motion/reactor.rb +3 -3
- data/motion/reactor/deferrable.rb +32 -32
- data/motion/reactor/periodic_timer.rb +1 -1
- data/motion/reactor/queue.rb +6 -6
- data/motion/reactor/thread_aware_deferrable.rb +1 -1
- data/motion/reactor/timer.rb +1 -1
- data/motion/rss_parser.rb +6 -3
- data/motion/shortcut.rb +1 -1
- data/motion/sms/result.rb +1 -1
- data/motion/test_suite_delegate.rb +1 -1
- data/motion/ui/ui_activity_view_controller_wrapper.rb +6 -1
- data/motion/ui/ui_alert_view.rb +21 -1
- data/motion/util/deprecated.rb +1 -1
- data/samples/alert/Gemfile.lock +1 -1
- data/spec/lib/bubble-wrap/requirement_spec.rb +2 -2
- data/spec/lib/bubble-wrap_spec.rb +1 -1
- data/spec/lib/motion_stub.rb +1 -1
- data/spec/motion/core/app_spec.rb +6 -0
- data/spec/motion/core/device/osx/screen_spec.rb +1 -1
- data/spec/motion/core/ios/ns_index_path_spec.rb +20 -0
- data/spec/motion/core/kvo_spec.rb +171 -58
- data/spec/motion/core/ns_notification_center_spec.rb +3 -3
- data/spec/motion/core/string_spec.rb +16 -16
- data/spec/motion/core_spec.rb +3 -3
- data/spec/motion/font/font_spec.rb +1 -1
- data/spec/motion/location/location_spec.rb +61 -9
- data/spec/motion/mail/result_spec.rb +7 -7
- data/spec/motion/media/player_spec.rb +1 -1
- data/spec/motion/reactor/thread_aware_deferrable_spec.rb +3 -3
- data/spec/motion/sms/result_spec.rb +6 -6
- data/spec/motion/ui/ui_alert_view_spec.rb +59 -1
- data/spec/motion/util/deprecated_spec.rb +1 -1
- metadata +17 -4
- data/motion/ios/7/uiactivity_view_controller_constants.rb +0 -10
| @@ -3,8 +3,8 @@ class NSURLRequest | |
| 3 3 | 
             
              # Provides a to_s method so we can use inspect in instances and get
         | 
| 4 4 | 
             
              # valuable information.
         | 
| 5 5 | 
             
              def to_s
         | 
| 6 | 
            -
                "#<#{self.class}:#{self.object_id} - url: #{self.URL.description}, | 
| 7 | 
            -
                headers: #{self.allHTTPHeaderFields.inspect}, | 
| 6 | 
            +
                "#<#{self.class}:#{self.object_id} - url: #{self.URL.description},
         | 
| 7 | 
            +
                headers: #{self.allHTTPHeaderFields.inspect},
         | 
| 8 8 | 
             
                cache policy: #{self.cachePolicy}, Pipelining: #{self.HTTPShouldUsePipelining}, main doc url: #{mainDocumentURL},\
         | 
| 9 9 | 
             
                timeout: #{self.timeoutInterval}, network service type: #{self.networkServiceType} >"
         | 
| 10 10 | 
             
              end
         | 
    
        data/motion/core/osx/device.rb
    CHANGED
    
    
    
        data/motion/core/string.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            module BubbleWrap
         | 
| 2 | 
            -
              # This module contains simplified version of the `camelize` and | 
| 3 | 
            -
              # `underscore` methods from ActiveSupport, since these are such | 
| 2 | 
            +
              # This module contains simplified version of the `camelize` and
         | 
| 3 | 
            +
              # `underscore` methods from ActiveSupport, since these are such
         | 
| 4 4 | 
             
              # common operations when dealing with the Cocoa API.
         | 
| 5 5 | 
             
              module String
         | 
| 6 6 |  | 
| @@ -67,8 +67,8 @@ module BubbleWrap | |
| 67 67 | 
             
                  return color_klass.send(keyword_selector) if color_klass.respond_to? keyword_selector
         | 
| 68 68 |  | 
| 69 69 | 
             
                  # Next attempt to convert from hex
         | 
| 70 | 
            -
                  hex_color = self.gsub("#", "") | 
| 71 | 
            -
                  case hex_color.size | 
| 70 | 
            +
                  hex_color = self.gsub("#", "")
         | 
| 71 | 
            +
                  case hex_color.size
         | 
| 72 72 | 
             
                    when 3
         | 
| 73 73 | 
             
                      colors = hex_color.scan(%r{[0-9A-Fa-f]}).map!{ |el| (el * 2).to_i(16) }
         | 
| 74 74 | 
             
                    when 6
         | 
| @@ -77,15 +77,15 @@ module BubbleWrap | |
| 77 77 | 
             
                      colors = hex_color.scan(%r<[0-9A-Fa-f]{2}>).map!{ |el| el.to_i(16) }
         | 
| 78 78 | 
             
                    else
         | 
| 79 79 | 
             
                      raise ArgumentError
         | 
| 80 | 
            -
                  end | 
| 80 | 
            +
                  end
         | 
| 81 81 | 
             
                  if colors.size == 3
         | 
| 82 82 | 
             
                    BubbleWrap.rgb_color(colors[0], colors[1], colors[2])
         | 
| 83 83 | 
             
                  elsif colors.size == 4
         | 
| 84 84 | 
             
                    BubbleWrap.rgba_color(colors[1], colors[2], colors[3], colors[0])
         | 
| 85 85 | 
             
                  else
         | 
| 86 86 | 
             
                    raise ArgumentError
         | 
| 87 | 
            -
                  end | 
| 88 | 
            -
                end | 
| 87 | 
            +
                  end
         | 
| 88 | 
            +
                end
         | 
| 89 89 |  | 
| 90 90 | 
             
              end
         | 
| 91 91 | 
             
            end
         | 
    
        data/motion/font/font.rb
    CHANGED
    
    
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            module BW
         | 
| 2 | 
            +
              # New additions to CLAuthorizationStatus in ios8
         | 
| 3 | 
            +
              # see: https://developer.apple.com/library/prerelease/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/c/tdef/CLAuthorizationStatus
         | 
| 4 | 
            +
              Constants.register(
         | 
| 5 | 
            +
                KCLAuthorizationStatusAuthorized,
         | 
| 6 | 
            +
                KCLAuthorizationStatusAuthorizedWhenInUse,
         | 
| 7 | 
            +
                KCLAuthorizationStatusAuthorizedAlways
         | 
| 8 | 
            +
              )
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              module Location
         | 
| 11 | 
            +
                module_function
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                def authorized?
         | 
| 14 | 
            +
                  [
         | 
| 15 | 
            +
                    BW::Constants.get("KCLAuthorizationStatus", :authorized),
         | 
| 16 | 
            +
                    BW::Constants.get("KCLAuthorizationStatus", :authorized_always),
         | 
| 17 | 
            +
                    BW::Constants.get("KCLAuthorizationStatus", :authorized_when_in_use)
         | 
| 18 | 
            +
                  ].include?(CLLocationManager.authorizationStatus)
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
    
        data/motion/location/location.rb
    CHANGED
    
    | @@ -25,10 +25,6 @@ module BubbleWrap | |
| 25 25 | 
             
                    KCLLocationAccuracyNearestTenMeters, KCLLocationAccuracyHundredMeters,
         | 
| 26 26 | 
             
                    KCLLocationAccuracyKilometer, KCLLocationAccuracyThreeKilometers
         | 
| 27 27 |  | 
| 28 | 
            -
                # New additions to CLAuthorizationStatus in ios8
         | 
| 29 | 
            -
                # see: https://developer.apple.com/library/prerelease/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/c/tdef/CLAuthorizationStatus
         | 
| 30 | 
            -
                Constants.register KCLAuthorizationStatusAuthorizedWhenInUse, KCLAuthorizationStatusAuthorizedAlways
         | 
| 31 | 
            -
             | 
| 32 28 | 
             
                module_function
         | 
| 33 29 | 
             
                # Start getting locations
         | 
| 34 30 | 
             
                # @param [Hash] options = {
         | 
| @@ -47,12 +43,15 @@ module BubbleWrap | |
| 47 43 | 
             
                # }
         | 
| 48 44 | 
             
                # @block for callback. takes one argument, `result`.
         | 
| 49 45 | 
             
                #   - On error or cancelled, is called with a hash {error: BW::Location::Error::<Type>}
         | 
| 50 | 
            -
                #   - On success, is called with a hash {to: #<CLLocation>, from: #<CLLocation | 
| 46 | 
            +
                #   - On success, is called with a hash {to: #<CLLocation>, from: #<CLLocation>, previous: [#<CLLocation>,...]}
         | 
| 47 | 
            +
                #   -- :previous will return an Array of CLLocation objects, ordered from oldest to newest, excluding the 
         | 
| 48 | 
            +
                #        locations :to and :from, returning an empty Array if no additional locations were provided
         | 
| 51 49 | 
             
                #
         | 
| 52 50 | 
             
                # Example
         | 
| 53 51 | 
             
                # BW::Location.get(distance_filter: 10, desired_accuracy: :nearest_ten_meters) do |result|
         | 
| 54 52 | 
             
                #   result[:to].class == CLLocation
         | 
| 55 53 | 
             
                #   result[:from].class == CLLocation
         | 
| 54 | 
            +
                #   result[:previous].class == NSArray<CLLocation>
         | 
| 56 55 | 
             
                #   p "Lat #{result[:to].latitude}, Long #{result[:to].longitude}"
         | 
| 57 56 | 
             
                # end
         | 
| 58 57 | 
             
                def get(options = {}, &block)
         | 
| @@ -70,6 +69,7 @@ module BubbleWrap | |
| 70 69 |  | 
| 71 70 | 
             
                  @options[:significant] = false if @options[:significant].nil?
         | 
| 72 71 | 
             
                  @retries = 0
         | 
| 72 | 
            +
                  @from_location = nil
         | 
| 73 73 |  | 
| 74 74 | 
             
                  if not enabled?
         | 
| 75 75 | 
             
                    error(Error::DISABLED) and return
         | 
| @@ -86,13 +86,8 @@ module BubbleWrap | |
| 86 86 | 
             
                  self.location_manager.desiredAccuracy = Constants.get("KCLLocationAccuracy", @options[:desired_accuracy])
         | 
| 87 87 | 
             
                  self.location_manager.purpose = @options[:purpose] if @options[:purpose]
         | 
| 88 88 |  | 
| 89 | 
            -
                   | 
| 90 | 
            -
             | 
| 91 | 
            -
                  elsif @options[:compass]
         | 
| 92 | 
            -
                    self.location_manager.startUpdatingHeading
         | 
| 93 | 
            -
                  else
         | 
| 94 | 
            -
                    self.location_manager.startUpdatingLocation
         | 
| 95 | 
            -
                  end
         | 
| 89 | 
            +
                  @initialized = true
         | 
| 90 | 
            +
                  start
         | 
| 96 91 | 
             
                end
         | 
| 97 92 |  | 
| 98 93 | 
             
                def get_significant(options = {}, &block)
         | 
| @@ -136,6 +131,18 @@ module BubbleWrap | |
| 136 131 | 
             
                  get_compass(options.merge(once: true), &block)
         | 
| 137 132 | 
             
                end
         | 
| 138 133 |  | 
| 134 | 
            +
                # Start getting locations
         | 
| 135 | 
            +
                def start
         | 
| 136 | 
            +
                  return unless initialized?
         | 
| 137 | 
            +
                  if @options[:significant]
         | 
| 138 | 
            +
                    self.location_manager.startMonitoringSignificantLocationChanges
         | 
| 139 | 
            +
                  elsif @options[:compass]
         | 
| 140 | 
            +
                    self.location_manager.startUpdatingHeading
         | 
| 141 | 
            +
                  else
         | 
| 142 | 
            +
                    self.location_manager.startUpdatingLocation
         | 
| 143 | 
            +
                  end
         | 
| 144 | 
            +
                end
         | 
| 145 | 
            +
             | 
| 139 146 | 
             
                # Stop getting locations
         | 
| 140 147 | 
             
                def stop
         | 
| 141 148 | 
             
                  return unless @options
         | 
| @@ -159,9 +166,16 @@ module BubbleWrap | |
| 159 166 | 
             
                  CLLocationManager.locationServicesEnabled
         | 
| 160 167 | 
             
                end
         | 
| 161 168 |  | 
| 169 | 
            +
                # returns true/false if CLLocationManager has been initialized with the provided or default options
         | 
| 170 | 
            +
                def initialized?
         | 
| 171 | 
            +
                  @initialized ||= false
         | 
| 172 | 
            +
                end
         | 
| 173 | 
            +
             | 
| 162 174 | 
             
                # returns true/false whether services are enabled for the _app_
         | 
| 163 175 | 
             
                def authorized?
         | 
| 164 | 
            -
                  [ | 
| 176 | 
            +
                  [
         | 
| 177 | 
            +
                    BW::Constants.get("KCLAuthorizationStatus", :authorized)
         | 
| 178 | 
            +
                  ].include?(CLLocationManager.authorizationStatus)
         | 
| 165 179 | 
             
                end
         | 
| 166 180 |  | 
| 167 181 | 
             
                def error(type)
         | 
| @@ -172,13 +186,19 @@ module BubbleWrap | |
| 172 186 |  | 
| 173 187 | 
             
                ##########
         | 
| 174 188 | 
             
                # CLLocationManagerDelegate Methods
         | 
| 175 | 
            -
                def locationManager(manager,  | 
| 189 | 
            +
                def locationManager(manager, didUpdateLocations:locations)
         | 
| 176 190 | 
             
                  if @options[:once]
         | 
| 177 | 
            -
                    @callback && @callback.call( | 
| 191 | 
            +
                    @callback && @callback.call(locations.last)
         | 
| 178 192 | 
             
                    @callback = proc { |result| }
         | 
| 179 193 | 
             
                    stop
         | 
| 180 194 | 
             
                  else
         | 
| 181 | 
            -
                     | 
| 195 | 
            +
                    size = locations.count
         | 
| 196 | 
            +
                    result = {to: locations.last, 
         | 
| 197 | 
            +
                      from: ( (size > 1) ? locations.last(2).first : @from_location ), 
         | 
| 198 | 
            +
                      previous: ( (size > 2) ? locations.first(size - 2) : [] )
         | 
| 199 | 
            +
                    }
         | 
| 200 | 
            +
                    @from_location = result[:to]
         | 
| 201 | 
            +
                    @callback && @callback.call(result)
         | 
| 182 202 | 
             
                  end
         | 
| 183 203 | 
             
                end
         | 
| 184 204 |  | 
| @@ -211,8 +231,8 @@ module BubbleWrap | |
| 211 231 | 
             
                      if @retries > @options[:retries]
         | 
| 212 232 | 
             
                        error(Error::LOCATION_UNKNOWN)
         | 
| 213 233 | 
             
                      else
         | 
| 214 | 
            -
                         | 
| 215 | 
            -
                         | 
| 234 | 
            +
                        stop
         | 
| 235 | 
            +
                        start
         | 
| 216 236 | 
             
                      end
         | 
| 217 237 | 
             
                    when KCLErrorNetwork
         | 
| 218 238 | 
             
                      error(Error::NETWORK_FAILURE)
         | 
    
        data/motion/mail/result.rb
    CHANGED
    
    
    
        data/motion/media/media.rb
    CHANGED
    
    
| @@ -0,0 +1,55 @@ | |
| 1 | 
            +
            module BubbleWrap
         | 
| 2 | 
            +
              module Motion
         | 
| 3 | 
            +
                class Accelerometer < GenericMotionInterface
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  def start(options={}, &handler)
         | 
| 6 | 
            +
                    if options.key?(:interval)
         | 
| 7 | 
            +
                      @manager.accelerometerUpdateInterval = options[:interval]
         | 
| 8 | 
            +
                    end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                    if handler
         | 
| 11 | 
            +
                      queue = convert_queue(options[:queue])
         | 
| 12 | 
            +
                      @manager.startAccelerometerUpdatesToQueue(queue, withHandler: internal_handler(handler))
         | 
| 13 | 
            +
                    else
         | 
| 14 | 
            +
                      @manager.startAccelerometerUpdates
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    return self
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  private def handle_result(result_data, error, handler)
         | 
| 21 | 
            +
                    if result_data
         | 
| 22 | 
            +
                      result = {
         | 
| 23 | 
            +
                        data: result_data,
         | 
| 24 | 
            +
                        acceleration: result_data.acceleration,
         | 
| 25 | 
            +
                        x: result_data.acceleration.x,
         | 
| 26 | 
            +
                        y: result_data.acceleration.y,
         | 
| 27 | 
            +
                        z: result_data.acceleration.z,
         | 
| 28 | 
            +
                      }
         | 
| 29 | 
            +
                    else
         | 
| 30 | 
            +
                      result = nil
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    handler.call(result, error)
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  def available?
         | 
| 37 | 
            +
                    @manager.accelerometerAvailable?
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  def active?
         | 
| 41 | 
            +
                    @manager.accelerometerActive?
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  def data
         | 
| 45 | 
            +
                    @manager.accelerometerData
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  def stop
         | 
| 49 | 
            +
                    @manager.stopAccelerometerUpdates
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
            end
         | 
| @@ -0,0 +1,139 @@ | |
| 1 | 
            +
            module BubbleWrap
         | 
| 2 | 
            +
              module Motion
         | 
| 3 | 
            +
                class DeviceMotion < GenericMotionInterface
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  def start(options={}, &handler)
         | 
| 6 | 
            +
                    if options.key?(:interval)
         | 
| 7 | 
            +
                      @manager.deviceMotionUpdateInterval = options[:interval]
         | 
| 8 | 
            +
                    end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                    if options.key?(:reference)
         | 
| 11 | 
            +
                      reference_frame = convert_reference_frame(options[:reference])
         | 
| 12 | 
            +
                    else
         | 
| 13 | 
            +
                      reference_frame = nil
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    if handler
         | 
| 17 | 
            +
                      queue = convert_queue(options[:queue])
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                      if reference_frame
         | 
| 20 | 
            +
                          @manager.startDeviceMotionUpdatesUsingReferenceFrame(reference_frame, toQueue: queue, withHandler: internal_handler(handler))
         | 
| 21 | 
            +
                      else
         | 
| 22 | 
            +
                          @manager.startDeviceMotionUpdatesToQueue(queue, withHandler: internal_handler(handler))
         | 
| 23 | 
            +
                      end
         | 
| 24 | 
            +
                    else
         | 
| 25 | 
            +
                      if reference_frame
         | 
| 26 | 
            +
                        @manager.startDeviceMotionUpdatesUsingReferenceFrame(reference_frame)
         | 
| 27 | 
            +
                      else
         | 
| 28 | 
            +
                        @manager.startDeviceMotionUpdates
         | 
| 29 | 
            +
                      end
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                    return self
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  private def handle_result(result_data, error, handler)
         | 
| 36 | 
            +
                    if result_data
         | 
| 37 | 
            +
                      result = {
         | 
| 38 | 
            +
                        data: result_data,
         | 
| 39 | 
            +
                        attitude: result_data.attitude,
         | 
| 40 | 
            +
                        rotation: result_data.rotationRate,
         | 
| 41 | 
            +
                        gravity: result_data.gravity,
         | 
| 42 | 
            +
                        acceleration: result_data.userAcceleration,
         | 
| 43 | 
            +
                        magnetic: result_data.magneticField,
         | 
| 44 | 
            +
                      }
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                      if result_data.attitude
         | 
| 47 | 
            +
                        result.merge!({
         | 
| 48 | 
            +
                          roll: result_data.attitude.roll,
         | 
| 49 | 
            +
                          pitch: result_data.attitude.pitch,
         | 
| 50 | 
            +
                          yaw: result_data.attitude.yaw,
         | 
| 51 | 
            +
                          matrix: result_data.attitude.rotationMatrix,
         | 
| 52 | 
            +
                          quaternion: result_data.attitude.quaternion,
         | 
| 53 | 
            +
                        })
         | 
| 54 | 
            +
                      end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                      if result_data.rotationRate
         | 
| 57 | 
            +
                        result.merge!({
         | 
| 58 | 
            +
                          rotation_x: result_data.rotationRate.x,
         | 
| 59 | 
            +
                          rotation_y: result_data.rotationRate.y,
         | 
| 60 | 
            +
                          rotation_z: result_data.rotationRate.z,
         | 
| 61 | 
            +
                        })
         | 
| 62 | 
            +
                      end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                      if result_data.gravity
         | 
| 65 | 
            +
                        result.merge!({
         | 
| 66 | 
            +
                          gravity_x: result_data.gravity.x,
         | 
| 67 | 
            +
                          gravity_y: result_data.gravity.y,
         | 
| 68 | 
            +
                          gravity_z: result_data.gravity.z,
         | 
| 69 | 
            +
                        })
         | 
| 70 | 
            +
                      end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                      if result_data.userAcceleration
         | 
| 73 | 
            +
                        result.merge!({
         | 
| 74 | 
            +
                          acceleration_x: result_data.userAcceleration.x,
         | 
| 75 | 
            +
                          acceleration_y: result_data.userAcceleration.y,
         | 
| 76 | 
            +
                          acceleration_z: result_data.userAcceleration.z,
         | 
| 77 | 
            +
                        })
         | 
| 78 | 
            +
                      end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                      if result_data.magneticField
         | 
| 81 | 
            +
                        case result_data.magneticField.accuracy
         | 
| 82 | 
            +
                        when CMMagneticFieldCalibrationAccuracyLow
         | 
| 83 | 
            +
                          accuracy = :low
         | 
| 84 | 
            +
                        when CMMagneticFieldCalibrationAccuracyMedium
         | 
| 85 | 
            +
                          accuracy = :medium
         | 
| 86 | 
            +
                        when CMMagneticFieldCalibrationAccuracyHigh
         | 
| 87 | 
            +
                          accuracy = :high
         | 
| 88 | 
            +
                        end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                        result.merge!({
         | 
| 91 | 
            +
                          field: result_data.magneticField.field,
         | 
| 92 | 
            +
                          magnetic_x: result_data.magneticField.field.x,
         | 
| 93 | 
            +
                          magnetic_y: result_data.magneticField.field.y,
         | 
| 94 | 
            +
                          magnetic_z: result_data.magneticField.field.z,
         | 
| 95 | 
            +
                          magnetic_accuracy: accuracy,
         | 
| 96 | 
            +
                        })
         | 
| 97 | 
            +
                      end
         | 
| 98 | 
            +
                    else
         | 
| 99 | 
            +
                      result = nil
         | 
| 100 | 
            +
                    end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                    handler.call(result, error)
         | 
| 103 | 
            +
                  end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                  def convert_reference_frame(reference_frame)
         | 
| 106 | 
            +
                    case reference_frame
         | 
| 107 | 
            +
                    when :arbitrary_z
         | 
| 108 | 
            +
                      CMAttitudeReferenceFrameXArbitraryZVertical
         | 
| 109 | 
            +
                    when :corrected_z
         | 
| 110 | 
            +
                      CMAttitudeReferenceFrameXArbitraryCorrectedZVertical
         | 
| 111 | 
            +
                    when :magnetic_north
         | 
| 112 | 
            +
                      CMAttitudeReferenceFrameXMagneticNorthZVertical
         | 
| 113 | 
            +
                    when :true_north
         | 
| 114 | 
            +
                      CMAttitudeReferenceFrameXTrueNorthZVertical
         | 
| 115 | 
            +
                    else
         | 
| 116 | 
            +
                      reference_frame
         | 
| 117 | 
            +
                    end
         | 
| 118 | 
            +
                  end
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                  def available?
         | 
| 121 | 
            +
                    @manager.deviceMotionAvailable?
         | 
| 122 | 
            +
                  end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                  def active?
         | 
| 125 | 
            +
                    @manager.deviceMotionActive?
         | 
| 126 | 
            +
                  end
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                  def data
         | 
| 129 | 
            +
                    @manager.deviceMotion
         | 
| 130 | 
            +
                  end
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                  def stop
         | 
| 133 | 
            +
                    @manager.stopDeviceMotionUpdates
         | 
| 134 | 
            +
                  end
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                end
         | 
| 137 | 
            +
             | 
| 138 | 
            +
              end
         | 
| 139 | 
            +
            end
         | 
| @@ -0,0 +1,55 @@ | |
| 1 | 
            +
            module BubbleWrap
         | 
| 2 | 
            +
              module Motion
         | 
| 3 | 
            +
                class Gyroscope < GenericMotionInterface
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  def start(options={}, &handler)
         | 
| 6 | 
            +
                    if options.key?(:interval)
         | 
| 7 | 
            +
                      @manager.gyroUpdateInterval = options[:interval]
         | 
| 8 | 
            +
                    end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                    if handler
         | 
| 11 | 
            +
                      queue = convert_queue(options[:queue])
         | 
| 12 | 
            +
                      @manager.startGyroUpdatesToQueue(queue, withHandler: internal_handler(handler))
         | 
| 13 | 
            +
                    else
         | 
| 14 | 
            +
                      @manager.startGyroUpdates
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    return self
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  private def handle_result(result_data, error, handler)
         | 
| 21 | 
            +
                    if result_data
         | 
| 22 | 
            +
                      result = {
         | 
| 23 | 
            +
                        data: result_data,
         | 
| 24 | 
            +
                        rotation: result_data.rotationRate,
         | 
| 25 | 
            +
                        x: result_data.rotationRate.x,
         | 
| 26 | 
            +
                        y: result_data.rotationRate.y,
         | 
| 27 | 
            +
                        z: result_data.rotationRate.z,
         | 
| 28 | 
            +
                      }
         | 
| 29 | 
            +
                    else
         | 
| 30 | 
            +
                      result = nil
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    handler.call(result, error)
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  def available?
         | 
| 37 | 
            +
                    @manager.gyroAvailable?
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  def active?
         | 
| 41 | 
            +
                    @manager.gyroActive?
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  def data
         | 
| 45 | 
            +
                    @manager.gyroData
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  def stop
         | 
| 49 | 
            +
                    @manager.stopGyroUpdates
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
            end
         |