kingpin 0.5.1 → 0.6.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/VERSION +1 -1
 - data/config/kingpin.yml +5 -0
 - data/kingpin.gemspec +4 -2
 - data/lib/http_client.rb +1 -2
 - data/lib/king_pin.rb +99 -0
 - data/lib/kingpin.rb +1 -103
 - data/lib/pincaster.rb +109 -1
 - data/lib/pincaster_config.rb +17 -0
 - data/lib/pincaster_layer.rb +12 -3
 - data/lib/pincaster_pin.rb +11 -2
 - metadata +7 -5
 - data/lib/pin_caster.rb +0 -89
 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            0. 
     | 
| 
      
 1 
     | 
    
         
            +
            0.6.0
         
     | 
    
        data/config/kingpin.yml
    ADDED
    
    
    
        data/kingpin.gemspec
    CHANGED
    
    | 
         @@ -5,7 +5,7 @@ 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       7 
7 
     | 
    
         
             
              s.name = %q{kingpin}
         
     | 
| 
       8 
     | 
    
         
            -
              s.version = "0. 
     | 
| 
      
 8 
     | 
    
         
            +
              s.version = "0.6.0"
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       11 
11 
     | 
    
         
             
              s.authors = ["Jan Roesner"]
         
     | 
| 
         @@ -25,11 +25,13 @@ Gem::Specification.new do |s| 
     | 
|
| 
       25 
25 
     | 
    
         
             
                "README.rdoc",
         
     | 
| 
       26 
26 
     | 
    
         
             
                "Rakefile",
         
     | 
| 
       27 
27 
     | 
    
         
             
                "VERSION",
         
     | 
| 
      
 28 
     | 
    
         
            +
                "config/kingpin.yml",
         
     | 
| 
       28 
29 
     | 
    
         
             
                "kingpin.gemspec",
         
     | 
| 
       29 
30 
     | 
    
         
             
                "lib/http_client.rb",
         
     | 
| 
      
 31 
     | 
    
         
            +
                "lib/king_pin.rb",
         
     | 
| 
       30 
32 
     | 
    
         
             
                "lib/kingpin.rb",
         
     | 
| 
       31 
     | 
    
         
            -
                "lib/pin_caster.rb",
         
     | 
| 
       32 
33 
     | 
    
         
             
                "lib/pincaster.rb",
         
     | 
| 
      
 34 
     | 
    
         
            +
                "lib/pincaster_config.rb",
         
     | 
| 
       33 
35 
     | 
    
         
             
                "lib/pincaster_layer.rb",
         
     | 
| 
       34 
36 
     | 
    
         
             
                "lib/pincaster_pin.rb",
         
     | 
| 
       35 
37 
     | 
    
         
             
                "spec/pincaster_spec.rb",
         
     | 
    
        data/lib/http_client.rb
    CHANGED
    
    | 
         @@ -2,7 +2,6 @@ class HttpClient 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
              require 'net/http'
         
     | 
| 
       4 
4 
     | 
    
         
             
              require "cgi"
         
     | 
| 
       5 
     | 
    
         
            -
              require "benchmark"
         
     | 
| 
       6 
5 
     | 
    
         | 
| 
       7 
6 
     | 
    
         
             
              def initialize(protocol, host, port, namespace=nil)
         
     | 
| 
       8 
7 
     | 
    
         
             
                @http = Net::HTTP.new(host, port)
         
     | 
| 
         @@ -46,7 +45,7 @@ class HttpClient 
     | 
|
| 
       46 
45 
     | 
    
         | 
| 
       47 
46 
     | 
    
         
             
              # redefines the resource path including the namespace
         
     | 
| 
       48 
47 
     | 
    
         
             
              def resource_path(resource)
         
     | 
| 
       49 
     | 
    
         
            -
                @namespace.nil? ? resource :  
     | 
| 
      
 48 
     | 
    
         
            +
                @namespace.nil? ? resource : @namespace + resource
         
     | 
| 
       50 
49 
     | 
    
         
             
              end
         
     | 
| 
       51 
50 
     | 
    
         | 
| 
       52 
51 
     | 
    
         
             
              # rebuild a uri in details, so that another protocol, host, port and GET params can be specified, after Net::HTTP was created
         
     | 
    
        data/lib/king_pin.rb
    ADDED
    
    | 
         @@ -0,0 +1,99 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ###
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Kingpin - makes models pinnable
         
     | 
| 
      
 3 
     | 
    
         
            +
            ###
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module Kingpin
         
     | 
| 
      
 6 
     | 
    
         
            +
              class << self.class.superclass
         
     | 
| 
      
 7 
     | 
    
         
            +
                def pinnable(*args)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  include KingpinInstanceMethods
         
     | 
| 
      
 9 
     | 
    
         
            +
                  self.kingpin_args = args
         
     | 
| 
      
 10 
     | 
    
         
            +
                  named_scope :nearby, lambda { |point, radius| { :conditions => ["id in (?)", point.nearby_ids(radius)] } }
         
     | 
| 
      
 11 
     | 
    
         
            +
                  after_save :autopin if (!!args.first[:autopin] rescue false)
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
            end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            ###
         
     | 
| 
      
 17 
     | 
    
         
            +
            # KingpinInstanceMethods - provides models new instance methods
         
     | 
| 
      
 18 
     | 
    
         
            +
            ###
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            module KingpinInstanceMethods
         
     | 
| 
      
 21 
     | 
    
         
            +
              def self.included(base)
         
     | 
| 
      
 22 
     | 
    
         
            +
                base.extend KingpinClassMethods
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              # add a Pincaster record for self with in layer: self.class
         
     | 
| 
      
 26 
     | 
    
         
            +
              def add_pin
         
     | 
| 
      
 27 
     | 
    
         
            +
                Pincaster.add_record(self)
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              # returns the Pincaster pin for self
         
     | 
| 
      
 31 
     | 
    
         
            +
              def pin
         
     | 
| 
      
 32 
     | 
    
         
            +
                Pincaster.get_record(self)
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              # deletes the Pincaster pin for self
         
     | 
| 
      
 36 
     | 
    
         
            +
              def delete_pin!
         
     | 
| 
      
 37 
     | 
    
         
            +
                Pincaster.delete_record(self)
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              # returns nearby found record_ids in same layer as self, radius meters away, number of results limited to limit
         
     | 
| 
      
 41 
     | 
    
         
            +
              def nearby_ids(radius, limit=nil)
         
     | 
| 
      
 42 
     | 
    
         
            +
                JSON.parse(Pincaster.nearby(self, radius, limit))["matches"].map{|p| p["key"]}
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              # returns nearby found records in same layer as self, radius metera away, number of results limited to limit
         
     | 
| 
      
 46 
     | 
    
         
            +
              def nearby(radius, limit=nil)
         
     | 
| 
      
 47 
     | 
    
         
            +
                self.class.find(nearby_ids(radius, limit))
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
              # returns objects longitude depending on configured method name for access as well as DEG or RAD configuration
         
     | 
| 
      
 51 
     | 
    
         
            +
              def pin_lng
         
     | 
| 
      
 52 
     | 
    
         
            +
                if not !!self.class.kingpin_args[:methods]
         
     | 
| 
      
 53 
     | 
    
         
            +
                  [:longitude, :long, :lng, :lgt, :lgdt].each do |l|
         
     | 
| 
      
 54 
     | 
    
         
            +
                    if self.respond_to?(l)
         
     | 
| 
      
 55 
     | 
    
         
            +
                      return !!self.class.kingpin_args[:rad] ? self.send(l).to_f * 180 / Math::PI : self.send(l)
         
     | 
| 
      
 56 
     | 
    
         
            +
                    end
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
                  return nil
         
     | 
| 
      
 59 
     | 
    
         
            +
                else
         
     | 
| 
      
 60 
     | 
    
         
            +
                  return !!self.class.kingpin_args[:rad] ? self.send(self.class.kingpin_args[:methods][:lng]).to_f * 180.0 / Math::PI : self.send(self.class.kingpin_args[:methods][:lng])
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
              end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
              # returns objects latitude depending on configured method name for access as well as DEG or RAD configuration
         
     | 
| 
      
 65 
     | 
    
         
            +
              def pin_lat
         
     | 
| 
      
 66 
     | 
    
         
            +
                if not !!self.class.kingpin_args[:methods]
         
     | 
| 
      
 67 
     | 
    
         
            +
                  [:latitude, :lati, :ltt, :ltd, :lat].each do |l|
         
     | 
| 
      
 68 
     | 
    
         
            +
                    if self.respond_to?(l)
         
     | 
| 
      
 69 
     | 
    
         
            +
                      return !!self.class.kingpin_args[:rad] ? self.send(l).to_f * 180 / Math::PI : self.send(l)
         
     | 
| 
      
 70 
     | 
    
         
            +
                    end
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
      
 72 
     | 
    
         
            +
                  return nil
         
     | 
| 
      
 73 
     | 
    
         
            +
                else
         
     | 
| 
      
 74 
     | 
    
         
            +
                  return !!self.class.kingpin_args[:rad] ? self.send(self.class.kingpin_args[:methods][:lat]).to_f * 180.0 / Math::PI : self.send(self.class.kingpin_args[:methods][:lat])
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
              # automatically adds a pin via after_save hook for self in case autopin option was set to true for self's AR model
         
     | 
| 
      
 79 
     | 
    
         
            +
              def autopin
         
     | 
| 
      
 80 
     | 
    
         
            +
                self.add_pin
         
     | 
| 
      
 81 
     | 
    
         
            +
              end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
            end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            ###
         
     | 
| 
      
 86 
     | 
    
         
            +
            # KingpinClassMethods - provides models new class methods
         
     | 
| 
      
 87 
     | 
    
         
            +
            ###
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            module KingpinClassMethods
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
              def kingpin_args=(args)
         
     | 
| 
      
 92 
     | 
    
         
            +
                @@kingpin_args = args.empty? ? nil : args
         
     | 
| 
      
 93 
     | 
    
         
            +
              end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
              def kingpin_args
         
     | 
| 
      
 96 
     | 
    
         
            +
                @@kingpin_args.first rescue {:methods => nil, :rad => false, :autopin => false}
         
     | 
| 
      
 97 
     | 
    
         
            +
              end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/kingpin.rb
    CHANGED
    
    | 
         @@ -1,103 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
       2 
     | 
    
         
            -
            # Kingpin - makes models pinnable
         
     | 
| 
       3 
     | 
    
         
            -
            ###
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            module Kingpin
         
     | 
| 
       6 
     | 
    
         
            -
              class << self.class.superclass
         
     | 
| 
       7 
     | 
    
         
            -
                def pinnable(*args)
         
     | 
| 
       8 
     | 
    
         
            -
                  include KingpinInstanceMethods
         
     | 
| 
       9 
     | 
    
         
            -
                  self.kingpin_args = args
         
     | 
| 
       10 
     | 
    
         
            -
                  named_scope :nearby, lambda { |point, radius| { :conditions => ["id in (?)", point.nearby_ids(radius)] } }
         
     | 
| 
       11 
     | 
    
         
            -
                  after_save :autopin if !!args.first[:autopin]
         
     | 
| 
       12 
     | 
    
         
            -
                end
         
     | 
| 
       13 
     | 
    
         
            -
              end
         
     | 
| 
       14 
     | 
    
         
            -
            end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
            ###
         
     | 
| 
       17 
     | 
    
         
            -
            # PinInstanceMethods - provides models new instance methods
         
     | 
| 
       18 
     | 
    
         
            -
            ###
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
            module KingpinInstanceMethods
         
     | 
| 
       21 
     | 
    
         
            -
              def self.included(base)
         
     | 
| 
       22 
     | 
    
         
            -
                base.extend KingpinClassMethods
         
     | 
| 
       23 
     | 
    
         
            -
              end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
              # add a Pincaster record for self with in layer: self.class
         
     | 
| 
       26 
     | 
    
         
            -
              def add_pin
         
     | 
| 
       27 
     | 
    
         
            -
                Pincaster.add_record(self)
         
     | 
| 
       28 
     | 
    
         
            -
              end
         
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
              # returns the Pincaster pin for self
         
     | 
| 
       31 
     | 
    
         
            -
              def pin
         
     | 
| 
       32 
     | 
    
         
            -
                Pincaster.get_record(self)
         
     | 
| 
       33 
     | 
    
         
            -
              end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
              # deletes the Pincaster pin for self
         
     | 
| 
       36 
     | 
    
         
            -
              def delete_pin!
         
     | 
| 
       37 
     | 
    
         
            -
                Pincaster.delete_record(self)
         
     | 
| 
       38 
     | 
    
         
            -
              end
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
              # returns nearby found record_ids in same layer as self, radius meters away, number of results limited to limit
         
     | 
| 
       41 
     | 
    
         
            -
              def nearby_ids(radius, limit=nil)
         
     | 
| 
       42 
     | 
    
         
            -
                JSON.parse(Pincaster.nearby(self, radius, limit))["matches"].map{|p| p["key"]}
         
     | 
| 
       43 
     | 
    
         
            -
              end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
              # returns nearby found records in same layer as self, radius metera away, number of results limited to limit
         
     | 
| 
       46 
     | 
    
         
            -
              def nearby(radius, limit=nil)
         
     | 
| 
       47 
     | 
    
         
            -
                self.class.find(nearby_ids(radius, limit))
         
     | 
| 
       48 
     | 
    
         
            -
              end
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
              # returns objects longitude depending on configured method name for access as well as DEG or RAD configuration
         
     | 
| 
       51 
     | 
    
         
            -
              def pin_lng
         
     | 
| 
       52 
     | 
    
         
            -
                if self.class.kingpin_args.nil?
         
     | 
| 
       53 
     | 
    
         
            -
                  [:longitude, :long, :lng, :lgt, :lgdt].each do |l|
         
     | 
| 
       54 
     | 
    
         
            -
                    return self.send(l) if self.respond_to?(l)
         
     | 
| 
       55 
     | 
    
         
            -
                  end
         
     | 
| 
       56 
     | 
    
         
            -
                  return nil
         
     | 
| 
       57 
     | 
    
         
            -
                else
         
     | 
| 
       58 
     | 
    
         
            -
                  if !!self.class.kingpin_args[:methods]
         
     | 
| 
       59 
     | 
    
         
            -
                    return !!self.class.kingpin_args[:rad] ? self.send(self.class.kingpin_args[:methods][:lng]).to_f * 180.0 / Math::PI : self.send(self.class.kingpin_args[:methods][:lng])
         
     | 
| 
       60 
     | 
    
         
            -
                  else
         
     | 
| 
       61 
     | 
    
         
            -
                    return self.send(self.class.kingpin_args[:methods][:lng])
         
     | 
| 
       62 
     | 
    
         
            -
                  end
         
     | 
| 
       63 
     | 
    
         
            -
                end
         
     | 
| 
       64 
     | 
    
         
            -
              end
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
              # returns objects latitude depending on configured method name for access as well as DEG or RAD configuration
         
     | 
| 
       67 
     | 
    
         
            -
              def pin_lat
         
     | 
| 
       68 
     | 
    
         
            -
                if self.class.kingpin_args.nil?
         
     | 
| 
       69 
     | 
    
         
            -
                  [:latitude, :lati, :ltt, :ltd, :lat].each do |l|
         
     | 
| 
       70 
     | 
    
         
            -
                    return self.send(l) if self.respond_to?(l)
         
     | 
| 
       71 
     | 
    
         
            -
                  end
         
     | 
| 
       72 
     | 
    
         
            -
                  return nil
         
     | 
| 
       73 
     | 
    
         
            -
                else
         
     | 
| 
       74 
     | 
    
         
            -
                  if !!self.class.kingpin_args[:methods]
         
     | 
| 
       75 
     | 
    
         
            -
                    return !!self.class.kingpin_args[:rad] ? self.send(self.class.kingpin_args[:methods][:lat]).to_f * 180.0 / Math::PI : self.send(self.class.kingpin_args[:methods][:lat])
         
     | 
| 
       76 
     | 
    
         
            -
                  else
         
     | 
| 
       77 
     | 
    
         
            -
                    return self.send(self.class.kingpin_args[:methods][:lat])
         
     | 
| 
       78 
     | 
    
         
            -
                  end
         
     | 
| 
       79 
     | 
    
         
            -
                end
         
     | 
| 
       80 
     | 
    
         
            -
              end
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
              # automatically adds a pin for self in case autopin option was set to true for self's AR model
         
     | 
| 
       83 
     | 
    
         
            -
              def autopin
         
     | 
| 
       84 
     | 
    
         
            -
                self.add_pin
         
     | 
| 
       85 
     | 
    
         
            -
              end
         
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
            end
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
            ###
         
     | 
| 
       90 
     | 
    
         
            -
            # PinClassMethods - provides models new class methods
         
     | 
| 
       91 
     | 
    
         
            -
            ###
         
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
            module KingpinClassMethods
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
              def kingpin_args=(args)
         
     | 
| 
       96 
     | 
    
         
            -
                @@kingpin_args = args
         
     | 
| 
       97 
     | 
    
         
            -
              end
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
              def kingpin_args
         
     | 
| 
       100 
     | 
    
         
            -
                @@kingpin_args.first
         
     | 
| 
       101 
     | 
    
         
            -
              end
         
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
            end
         
     | 
| 
      
 1 
     | 
    
         
            +
            Dir[File.dirname(__FILE__) + "/*.rb"].each          { |file| require file }
         
     | 
    
        data/lib/pincaster.rb
    CHANGED
    
    | 
         @@ -1 +1,109 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            require 'json'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'pincaster_layer'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'pincaster_pin'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'pincaster_config'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            class Pincaster
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              # returns an existing http client properly configured or creates a new one once
         
     | 
| 
      
 10 
     | 
    
         
            +
              def self.client
         
     | 
| 
      
 11 
     | 
    
         
            +
                @@http_client ||= HttpClient.new(self.config.protocol, self.config.host, self.config.port, self.config.namespace)
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              # Pincaster server is still alive?
         
     | 
| 
      
 15 
     | 
    
         
            +
              def self.is_alive?
         
     | 
| 
      
 16 
     | 
    
         
            +
                self.client.send_request('GET', '/system/ping.json').code == "200" ? true : false rescue false
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              # shutdown Pincaster server immediately
         
     | 
| 
      
 20 
     | 
    
         
            +
              def self.shutdown!
         
     | 
| 
      
 21 
     | 
    
         
            +
                begin
         
     | 
| 
      
 22 
     | 
    
         
            +
                  self.client.send_request('POST', '/system/shutdown.json')
         
     | 
| 
      
 23 
     | 
    
         
            +
                rescue Exception => e
         
     | 
| 
      
 24 
     | 
    
         
            +
                  case e.message
         
     | 
| 
      
 25 
     | 
    
         
            +
                  when "end of file reached"
         
     | 
| 
      
 26 
     | 
    
         
            +
                    return true
         
     | 
| 
      
 27 
     | 
    
         
            +
                  else
         
     | 
| 
      
 28 
     | 
    
         
            +
                    return false
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              # returns all known layers
         
     | 
| 
      
 34 
     | 
    
         
            +
              def self.layers
         
     | 
| 
      
 35 
     | 
    
         
            +
                JSON.parse(self.client.send_request('GET', '/layers/index.json').body)["layers"]
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              # returns true if Pincaster already has the given layer
         
     | 
| 
      
 39 
     | 
    
         
            +
              def self.has_layer?(layer)
         
     | 
| 
      
 40 
     | 
    
         
            +
                raise "Layer has to be a string" if not layer.is_a?(String)
         
     | 
| 
      
 41 
     | 
    
         
            +
                self.layers.detect{|l| l["name"] == layer}.nil? ? false : true rescue false
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              # adds a new layer with name of the given string
         
     | 
| 
      
 45 
     | 
    
         
            +
              def self.add_layer(layer)
         
     | 
| 
      
 46 
     | 
    
         
            +
                raise "Layer has to be a string" if not layer.is_a?(String)
         
     | 
| 
      
 47 
     | 
    
         
            +
                self.client.send_request('POST', "/layers/#{layer}.json").code == "200" ? true : false rescue false
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
              # deletes the layer with the given name
         
     | 
| 
      
 51 
     | 
    
         
            +
              def self.delete_layer!(layer)
         
     | 
| 
      
 52 
     | 
    
         
            +
                raise "Layer has to be a string" if not layer.is_a?(String)
         
     | 
| 
      
 53 
     | 
    
         
            +
                self.client.send_request('DELETE', "/layers/#{layer}.json").code == "200" ? true : false rescue false
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
              # return a layer object for the layer that was searched for
         
     | 
| 
      
 57 
     | 
    
         
            +
              def self.layer(layer)
         
     | 
| 
      
 58 
     | 
    
         
            +
                raise "Layer has to be a string" if not layer.is_a?(String)
         
     | 
| 
      
 59 
     | 
    
         
            +
                PincasterLayer.new(self.layers.select{|l| l["name"] == layer})
         
     | 
| 
      
 60 
     | 
    
         
            +
              end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
              # adds a new record as well as creates a layer for it if the latter does not exist already
         
     | 
| 
      
 63 
     | 
    
         
            +
              def self.add_record(record)
         
     | 
| 
      
 64 
     | 
    
         
            +
                raise "Can't add a record without geocoordinates lng, lat" if record.pin_lng.nil? or record.pin_lat.nil?
         
     | 
| 
      
 65 
     | 
    
         
            +
                Pincaster.add_layer(record.class.to_s) if not Pincaster.has_layer?(record.class.to_s)
         
     | 
| 
      
 66 
     | 
    
         
            +
                self.client.send_request('PUT',
         
     | 
| 
      
 67 
     | 
    
         
            +
                                           "/records/#{record.class.to_s}/#{record.id}.json",
         
     | 
| 
      
 68 
     | 
    
         
            +
                                           nil,
         
     | 
| 
      
 69 
     | 
    
         
            +
                                           nil,
         
     | 
| 
      
 70 
     | 
    
         
            +
                                           {:_loc => "#{record.pin_lat},#{record.pin_lng}"}).code == "200" ? true : false
         
     | 
| 
      
 71 
     | 
    
         
            +
              end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
              # returns a pin object for the given ActiveRecord object
         
     | 
| 
      
 74 
     | 
    
         
            +
              def self.get_record(record)
         
     | 
| 
      
 75 
     | 
    
         
            +
                PincasterPin.new(JSON.parse(self.client.send_request('GET', "/records/#{record.class.to_s}/#{record.id}.json").body)) rescue nil
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
              # deletes the Pincaster record for the given ActiveRecord object
         
     | 
| 
      
 79 
     | 
    
         
            +
              def self.delete_record(record)
         
     | 
| 
      
 80 
     | 
    
         
            +
                self.client.send_request('DELETE', "/records/#{record.class.to_s}/#{record.id}.json").code == "200" ? true : false
         
     | 
| 
      
 81 
     | 
    
         
            +
              end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
              # returns all pins nearby given record, maximum radius meters away, returns limit number of pins
         
     | 
| 
      
 84 
     | 
    
         
            +
              def self.nearby(record, radius, limit)
         
     | 
| 
      
 85 
     | 
    
         
            +
                limit ||= 2000
         
     | 
| 
      
 86 
     | 
    
         
            +
                raise "Given #{record.class.to_s} has not lng or lat." if record.pin_lng.nil? or record.pin_lat.nil?
         
     | 
| 
      
 87 
     | 
    
         
            +
                self.client.send_request('GET',
         
     | 
| 
      
 88 
     | 
    
         
            +
                                           "/search/#{record.class.to_s}/nearby/#{record.pin_lat.to_s},#{record.pin_lng.to_s}.json",
         
     | 
| 
      
 89 
     | 
    
         
            +
                                           nil,
         
     | 
| 
      
 90 
     | 
    
         
            +
                                           nil,
         
     | 
| 
      
 91 
     | 
    
         
            +
                                           {:radius => radius.to_s, :limit => limit}).body
         
     | 
| 
      
 92 
     | 
    
         
            +
              end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
              # loads local config, or users one if he provided any
         
     | 
| 
      
 95 
     | 
    
         
            +
              def self.load_config
         
     | 
| 
      
 96 
     | 
    
         
            +
                begin
         
     | 
| 
      
 97 
     | 
    
         
            +
                  config = YAML.load_file(Rails.root.to_s + "/config/kingpin.yml")
         
     | 
| 
      
 98 
     | 
    
         
            +
                rescue
         
     | 
| 
      
 99 
     | 
    
         
            +
                  config = YAML.load_file(File.dirname(__FILE__).to_s + "/../config/kingpin.yml")
         
     | 
| 
      
 100 
     | 
    
         
            +
                end
         
     | 
| 
      
 101 
     | 
    
         
            +
                PincasterConfig.new(config)
         
     | 
| 
      
 102 
     | 
    
         
            +
              end
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
              # returns config
         
     | 
| 
      
 105 
     | 
    
         
            +
              def self.config
         
     | 
| 
      
 106 
     | 
    
         
            +
                @@config ||= self.load_config
         
     | 
| 
      
 107 
     | 
    
         
            +
              end
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class PincasterConfig
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
              attr_accessor :raw_config
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              def initialize(config_hash)
         
     | 
| 
      
 6 
     | 
    
         
            +
                @raw_config = config_hash
         
     | 
| 
      
 7 
     | 
    
         
            +
                splat_config
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def splat_config
         
     | 
| 
      
 11 
     | 
    
         
            +
                @raw_config.each_pair do |key, value|
         
     | 
| 
      
 12 
     | 
    
         
            +
                  self.class.send(:attr_accessor, key.to_sym)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  self.send(key.to_s+"=", value)
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/pincaster_layer.rb
    CHANGED
    
    | 
         @@ -1,9 +1,18 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class PincasterLayer
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
               
     | 
| 
      
 3 
     | 
    
         
            +
              attr_reader :layer_hash
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
              def initialize( 
     | 
| 
       6 
     | 
    
         
            -
                @layer_hash =  
     | 
| 
      
 5 
     | 
    
         
            +
              def initialize(layer_array)
         
     | 
| 
      
 6 
     | 
    
         
            +
                @layer_hash = layer_array.first
         
     | 
| 
      
 7 
     | 
    
         
            +
                splat_layer
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              # provides an accessor for every pin value that came back from Pincaster
         
     | 
| 
      
 11 
     | 
    
         
            +
              def splat_layer
         
     | 
| 
      
 12 
     | 
    
         
            +
                @layer_hash.each_pair do |key, value|
         
     | 
| 
      
 13 
     | 
    
         
            +
                  self.class.send(:attr_accessor, key.to_sym)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  self.send(key.to_s + "=", value)
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
       7 
16 
     | 
    
         
             
              end
         
     | 
| 
       8 
17 
     | 
    
         | 
| 
       9 
18 
     | 
    
         
             
            end
         
     | 
    
        data/lib/pincaster_pin.rb
    CHANGED
    
    | 
         @@ -1,13 +1,22 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class PincasterPin
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
               
     | 
| 
      
 3 
     | 
    
         
            +
              attr_reader :pin_hash
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
              def initialize(pin_hash)
         
     | 
| 
       6 
6 
     | 
    
         
             
                @pin_hash = pin_hash
         
     | 
| 
      
 7 
     | 
    
         
            +
                splat_pin
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              # provides an accessor for every pin value that came back from Pincaster
         
     | 
| 
      
 11 
     | 
    
         
            +
              def splat_pin
         
     | 
| 
      
 12 
     | 
    
         
            +
                @pin_hash.each_pair do |key, value|
         
     | 
| 
      
 13 
     | 
    
         
            +
                  self.class.send(:attr_accessor, key.to_sym)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  self.send(key.to_s + "=", value)
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
       7 
16 
     | 
    
         
             
              end
         
     | 
| 
       8 
17 
     | 
    
         | 
| 
       9 
18 
     | 
    
         
             
              # returns the ActiveRecord:id of this pin's matching ActiveRecord object
         
     | 
| 
       10 
19 
     | 
    
         
             
              def id
         
     | 
| 
       11 
     | 
    
         
            -
                 
     | 
| 
      
 20 
     | 
    
         
            +
                key
         
     | 
| 
       12 
21 
     | 
    
         
             
              end
         
     | 
| 
       13 
22 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,13 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: kingpin
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              hash:  
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 7
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
       8 
     | 
    
         
            -
              -  
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 8 
     | 
    
         
            +
              - 6
         
     | 
| 
      
 9 
     | 
    
         
            +
              - 0
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.6.0
         
     | 
| 
       11 
11 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       12 
12 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
13 
     | 
    
         
             
            - Jan Roesner
         
     | 
| 
         @@ -98,11 +98,13 @@ files: 
     | 
|
| 
       98 
98 
     | 
    
         
             
            - README.rdoc
         
     | 
| 
       99 
99 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       100 
100 
     | 
    
         
             
            - VERSION
         
     | 
| 
      
 101 
     | 
    
         
            +
            - config/kingpin.yml
         
     | 
| 
       101 
102 
     | 
    
         
             
            - kingpin.gemspec
         
     | 
| 
       102 
103 
     | 
    
         
             
            - lib/http_client.rb
         
     | 
| 
      
 104 
     | 
    
         
            +
            - lib/king_pin.rb
         
     | 
| 
       103 
105 
     | 
    
         
             
            - lib/kingpin.rb
         
     | 
| 
       104 
     | 
    
         
            -
            - lib/pin_caster.rb
         
     | 
| 
       105 
106 
     | 
    
         
             
            - lib/pincaster.rb
         
     | 
| 
      
 107 
     | 
    
         
            +
            - lib/pincaster_config.rb
         
     | 
| 
       106 
108 
     | 
    
         
             
            - lib/pincaster_layer.rb
         
     | 
| 
       107 
109 
     | 
    
         
             
            - lib/pincaster_pin.rb
         
     | 
| 
       108 
110 
     | 
    
         
             
            - spec/pincaster_spec.rb
         
     | 
    
        data/lib/pin_caster.rb
    DELETED
    
    | 
         @@ -1,89 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'json'
         
     | 
| 
       2 
     | 
    
         
            -
            require 'pincaster_layer'
         
     | 
| 
       3 
     | 
    
         
            -
            require 'pincaster_pin'
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            class Pincaster
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
              @@http_client = HttpClient.new('http','localhost',4269)
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
              # Pincaster server is still alive?
         
     | 
| 
       10 
     | 
    
         
            -
              def self.is_alive?
         
     | 
| 
       11 
     | 
    
         
            -
                @@http_client.send_request('GET', '/api/1.0/system/ping.json').code == "200" ? true : false rescue false
         
     | 
| 
       12 
     | 
    
         
            -
              end
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
              # shutdown Pincaster server immediately
         
     | 
| 
       15 
     | 
    
         
            -
              def self.shutdown!
         
     | 
| 
       16 
     | 
    
         
            -
                begin
         
     | 
| 
       17 
     | 
    
         
            -
                  @@http_client.send_request('POST', '/api/1.0/system/shutdown.json')
         
     | 
| 
       18 
     | 
    
         
            -
                rescue Exception => e
         
     | 
| 
       19 
     | 
    
         
            -
                  case e.message
         
     | 
| 
       20 
     | 
    
         
            -
                  when "end of file reached"
         
     | 
| 
       21 
     | 
    
         
            -
                    return true
         
     | 
| 
       22 
     | 
    
         
            -
                  else
         
     | 
| 
       23 
     | 
    
         
            -
                    return false
         
     | 
| 
       24 
     | 
    
         
            -
                  end
         
     | 
| 
       25 
     | 
    
         
            -
                end
         
     | 
| 
       26 
     | 
    
         
            -
              end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
              # returns all known layers
         
     | 
| 
       29 
     | 
    
         
            -
              def self.layers
         
     | 
| 
       30 
     | 
    
         
            -
                JSON.parse(@@http_client.send_request('GET', '/api/1.0/layers/index.json').body)["layers"]
         
     | 
| 
       31 
     | 
    
         
            -
              end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
              # returns true if Pincaster already has the given layer
         
     | 
| 
       34 
     | 
    
         
            -
              def self.has_layer?(layer)
         
     | 
| 
       35 
     | 
    
         
            -
                raise "Layer has to be a string" if not layer.is_a?(String)
         
     | 
| 
       36 
     | 
    
         
            -
                self.layers.detect{|l| l["name"] == layer}.nil? ? false : true rescue false
         
     | 
| 
       37 
     | 
    
         
            -
              end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
              # adds a new layer with name of the given string
         
     | 
| 
       40 
     | 
    
         
            -
              def self.add_layer(layer)
         
     | 
| 
       41 
     | 
    
         
            -
                raise "Layer has to be a string" if not layer.is_a?(String)
         
     | 
| 
       42 
     | 
    
         
            -
                @@http_client.send_request('POST', "/api/1.0/layers/#{layer}.json").code == "200" ? true : false rescue false
         
     | 
| 
       43 
     | 
    
         
            -
              end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
              # deletes the layer with the given name
         
     | 
| 
       46 
     | 
    
         
            -
              def self.delete_layer!(layer)
         
     | 
| 
       47 
     | 
    
         
            -
                raise "Layer has to be a string" if not layer.is_a?(String)
         
     | 
| 
       48 
     | 
    
         
            -
                @@http_client.send_request('DELETE', "/api/1.0/layers/#{layer}.json").code == "200" ? true : false rescue false
         
     | 
| 
       49 
     | 
    
         
            -
              end
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
              # return a layer object for the layer that was searched for
         
     | 
| 
       52 
     | 
    
         
            -
              def self.layer(layer)
         
     | 
| 
       53 
     | 
    
         
            -
                raise "Layer has to be a string" if not layer.is_a?(String)
         
     | 
| 
       54 
     | 
    
         
            -
                PincasterLayer.new(self.layers.select{|l| l["name"] == layer})
         
     | 
| 
       55 
     | 
    
         
            -
              end
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
              # adds a new record as well as creates a layer for it if the latter does not exist already
         
     | 
| 
       58 
     | 
    
         
            -
              def self.add_record(record)
         
     | 
| 
       59 
     | 
    
         
            -
                raise "Can't add a record without geocoordinates lng, lat" if record.pin_lng.nil? or record.pin_lat.nil?
         
     | 
| 
       60 
     | 
    
         
            -
                Pincaster.add_layer(record.class.to_s) if not Pincaster.has_layer?(record.class.to_s)
         
     | 
| 
       61 
     | 
    
         
            -
                @@http_client.send_request('PUT',
         
     | 
| 
       62 
     | 
    
         
            -
                                           "/api/1.0/records/#{record.class.to_s}/#{record.id}.json",
         
     | 
| 
       63 
     | 
    
         
            -
                                           nil,
         
     | 
| 
       64 
     | 
    
         
            -
                                           nil,
         
     | 
| 
       65 
     | 
    
         
            -
                                           {:_loc => "#{record.pin_lat},#{record.pin_lng}"}).code == "200" ? true : false
         
     | 
| 
       66 
     | 
    
         
            -
              end
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
              # returns a pin object for the given ActiveRecord object
         
     | 
| 
       69 
     | 
    
         
            -
              def self.get_record(record)
         
     | 
| 
       70 
     | 
    
         
            -
                PincasterPin.new(JSON.parse(@@http_client.send_request('GET', "/api/1.0/records/#{record.class.to_s}/#{record.id}.json").body)) rescue nil
         
     | 
| 
       71 
     | 
    
         
            -
              end
         
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
              # deletes the Pincaster record for the given ActiveRecord object
         
     | 
| 
       74 
     | 
    
         
            -
              def self.delete_record(record)
         
     | 
| 
       75 
     | 
    
         
            -
                @@http_client.send_request('DELETE', "/api/1.0/records/#{record.class.to_s}/#{record.id}.json").code == "200" ? true : false
         
     | 
| 
       76 
     | 
    
         
            -
              end
         
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
              # returns all pins nearby given record, maximum radius meters away, returns limit number of pins
         
     | 
| 
       79 
     | 
    
         
            -
              def self.nearby(record, radius, limit)
         
     | 
| 
       80 
     | 
    
         
            -
                limit ||= 2000
         
     | 
| 
       81 
     | 
    
         
            -
                raise "Given #{record.class.to_s} has not lng or lat." if record.pin_lng.nil? or record.pin_lat.nil?
         
     | 
| 
       82 
     | 
    
         
            -
                @@http_client.send_request('GET',
         
     | 
| 
       83 
     | 
    
         
            -
                                           "/api/1.0/search/#{record.class.to_s}/nearby/#{record.pin_lat.to_s},#{record.pin_lng.to_s}.json",
         
     | 
| 
       84 
     | 
    
         
            -
                                           nil,
         
     | 
| 
       85 
     | 
    
         
            -
                                           nil,
         
     | 
| 
       86 
     | 
    
         
            -
                                           {:radius => radius.to_s, :limit => limit}).body
         
     | 
| 
       87 
     | 
    
         
            -
              end
         
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
            end
         
     |