kingpin 0.6.1 → 0.7.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.
@@ -59,11 +59,11 @@ Integration
59
59
  -----------
60
60
 
61
61
  Integration into you models is straight forward. Assuming that your model has an attribute_reader or accessor_method like one of the following:
62
- [:latitude, :ltt, :ltd, :lat]
62
+ [:latitude, :lati, :ltt, :ltd, :lat, :lttd]
63
63
 
64
64
  as well as one of the following for longitude:
65
65
 
66
- [:longitude, :long, :lng, :lgt, :lgdt]
66
+ [:longitude, :long, :lng, :lgt, :lgtd, :lngtd]
67
67
 
68
68
  **and** the values are in *DEG* **not** *RAD*, your way of integration looks like that:
69
69
 
@@ -78,7 +78,7 @@ Either way, Kingpin tries to minimize your pain, so some configuration options a
78
78
  * `:methods => {:lat => :your_latitude, :lng => :your_longitude}` in case your location accessors have different names
79
79
  * `:rad => true` defaults to *false* if not mentioned, and assumes your lat and lng in *RAD* instead of *DEG*
80
80
  * `:autopin => true` automatically generates a Pincaster record every time an instance of an enabled model is saved
81
- * `:include => [unimplemented yet]`
81
+ * `:include => :all | {:only => [:attr_1, :attr_2, ...]} | {:except => [:attr_1, :attr_2, ...]}`
82
82
 
83
83
  Example: In case your longitude resides at :cool_longitude, your latitude at :cool_latitude, the values are stored in *RAD* and you would like to automatically create Pincaster pins, your classes head should look like this:
84
84
 
@@ -87,6 +87,15 @@ Example: In case your longitude resides at :cool_longitude, your latitude at :co
87
87
  ...
88
88
  end
89
89
 
90
+ In case you would like to integrate the instances values for :name and :title only into the pin, your class definition looked like that:
91
+
92
+ class FooWithLocation
93
+ pinnable :include => {:only => [:name, :title]}
94
+ ...
95
+ end
96
+
97
+ Vice versa `:include => {:except => [:name, :title]}` would integrate all attributes but :name and :title, `:include => :all` integrated all available attributes of the instance.
98
+
90
99
  Indexing
91
100
  --------
92
101
 
@@ -189,7 +198,6 @@ Coming soon
189
198
  Kingpin is missing some functionality yet, but this will arrive soon:
190
199
 
191
200
  - support for rectangle search
192
- - support for storage of optional AR attributes of an instance via include
193
201
  - distance integration into every returned AR record at retrieval time
194
202
  - automated Raketask for index creation
195
203
  - tests
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.1
1
+ 0.7.0
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{kingpin}
8
- s.version = "0.6.1"
8
+ s.version = "0.7.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"]
@@ -50,7 +50,7 @@ module KingpinInstanceMethods
50
50
  # returns objects longitude depending on configured method name for access as well as DEG or RAD configuration
51
51
  def pin_lng
52
52
  if not !!self.class.kingpin_args[:methods]
53
- [:longitude, :long, :lng, :lgt, :lgdt].each do |l|
53
+ [:longitude, :long, :lng, :lgt, :lgtd, :lngtd].each do |l|
54
54
  if self.respond_to?(l)
55
55
  return !!self.class.kingpin_args[:rad] ? self.send(l).to_f * 180 / Math::PI : self.send(l)
56
56
  end
@@ -64,7 +64,7 @@ module KingpinInstanceMethods
64
64
  # returns objects latitude depending on configured method name for access as well as DEG or RAD configuration
65
65
  def pin_lat
66
66
  if not !!self.class.kingpin_args[:methods]
67
- [:latitude, :lati, :ltt, :ltd, :lat].each do |l|
67
+ [:latitude, :lati, :ltt, :ltd, :lat, :lttd].each do |l|
68
68
  if self.respond_to?(l)
69
69
  return !!self.class.kingpin_args[:rad] ? self.send(l).to_f * 180 / Math::PI : self.send(l)
70
70
  end
@@ -80,6 +80,28 @@ module KingpinInstanceMethods
80
80
  self.add_pin
81
81
  end
82
82
 
83
+ # returns additional attributes of self that shall be included into the pin
84
+ def additional_attributes
85
+ return {} unless !!self.class.kingpin_args[:include]
86
+ case self.class.kingpin_args[:include].class.to_s
87
+ when "Symbol"
88
+ raise ":all is the only stand alone symbol that is allowed with :include" unless self.class.kingpin_args[:include] == :all
89
+ self.attributes
90
+ when "Hash"
91
+ if self.class.kingpin_args[:include].size > 1 or not [:only, :except].include? self.class.kingpin_args[:include].first.first
92
+ raise ":include supports :only => [:foo, :bar] and :except => [:scooby, :doo] only"
93
+ end
94
+ case self.class.kingpin_args[:include].first.first
95
+ when :only
96
+ self.attributes.delete_if{ |name, value| !self.class.kingpin_args[:include].first[1].include?(name.to_sym) }
97
+ when :except
98
+ self.attributes.delete_if{ |name, value| self.class.kingpin_args[:include].first[1].include?(name.to_sym) }
99
+ end
100
+ else
101
+ raise ":include needs :all, {:only => [:foo, :bar]} or {:except => [:scooby, :doo]}"
102
+ end
103
+ end
104
+
83
105
  end
84
106
 
85
107
  ###
@@ -67,7 +67,7 @@ class Pincaster
67
67
  "/records/#{record.class.to_s}/#{record.id}.json",
68
68
  nil,
69
69
  nil,
70
- {:_loc => "#{record.pin_lat},#{record.pin_lng}"}).code == "200" ? true : false
70
+ {:_loc => "#{record.pin_lat},#{record.pin_lng}"}.merge(record.additional_attributes)).code == "200" ? true : false
71
71
  end
72
72
 
73
73
  # returns a pin object for the given ActiveRecord object
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: 5
4
+ hash: 3
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 6
9
- - 1
10
- version: 0.6.1
8
+ - 7
9
+ - 0
10
+ version: 0.7.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jan Roesner