@@ -117,4 +117,8 @@ class EventDrop |
||
| 117 | 117 |
@object.created_at |
| 118 | 118 |
} |
| 119 | 119 |
end |
| 120 |
+ |
|
| 121 |
+ def _location_ |
|
| 122 |
+ @object.location |
|
| 123 |
+ end |
|
| 120 | 124 |
end |
@@ -1,6 +1,10 @@ |
||
| 1 |
+require 'liquid' |
|
| 2 |
+ |
|
| 1 | 3 |
Location = Struct.new(:lat, :lng, :radius, :speed, :course) |
| 2 | 4 |
|
| 3 | 5 |
class Location |
| 6 |
+ include LiquidDroppable |
|
| 7 |
+ |
|
| 4 | 8 |
protected :[]= |
| 5 | 9 |
|
| 6 | 10 |
def initialize(data = {})
|
@@ -86,3 +90,13 @@ class Location |
||
| 86 | 90 |
end |
| 87 | 91 |
end |
| 88 | 92 |
end |
| 93 |
+ |
|
| 94 |
+class LocationDrop |
|
| 95 |
+ KEYS = Location.members.map(&:to_s).concat(%w[latitude longitude]) |
|
| 96 |
+ |
|
| 97 |
+ def before_method(key) |
|
| 98 |
+ if KEYS.include?(key) |
|
| 99 |
+ @object.__send__(key) |
|
| 100 |
+ end |
|
| 101 |
+ end |
|
| 102 |
+end |
@@ -53,4 +53,16 @@ describe Location do |
||
| 53 | 53 |
expect(Location.new(lat: 2, radius: 1).present?).to be_falsy |
| 54 | 54 |
expect(Location.new(lng: 3, radius: 1).present?).to be_falsy |
| 55 | 55 |
end |
| 56 |
+ |
|
| 57 |
+ it "is droppable" do |
|
| 58 |
+ {
|
|
| 59 |
+ '{{location.lat}}' => '2.0',
|
|
| 60 |
+ '{{location.latitude}}' => '2.0',
|
|
| 61 |
+ '{{location.lng}}' => '3.0',
|
|
| 62 |
+ '{{location.longitude}}' => '3.0',
|
|
| 63 |
+ }.each { |template, result|
|
|
| 64 |
+ expect(Liquid::Template.parse(template).render('location' => location.to_liquid)).to eq(result),
|
|
| 65 |
+ "expected #{template.inspect} to expand to #{result.inspect}"
|
|
| 66 |
+ } |
|
| 67 |
+ end |
|
| 56 | 68 |
end |
@@ -174,6 +174,8 @@ describe EventDrop do |
||
| 174 | 174 |
'title' => 'some title', |
| 175 | 175 |
'url' => 'http://some.site.example.org/', |
| 176 | 176 |
} |
| 177 |
+ @event.lat = 2 |
|
| 178 |
+ @event.lng = 3 |
|
| 177 | 179 |
@event.save! |
| 178 | 180 |
end |
| 179 | 181 |
|
@@ -210,4 +212,9 @@ describe EventDrop do |
||
| 210 | 212 |
t = '{{created_at | date:"%FT%T%z" }}'
|
| 211 | 213 |
interpolate(t, @event).should eq(@event.created_at.strftime("%FT%T%z"))
|
| 212 | 214 |
end |
| 215 |
+ |
|
| 216 |
+ it 'should have _location_' do |
|
| 217 |
+ t = '{{_location_.lat}},{{_location_.lng}}'
|
|
| 218 |
+ interpolate(t, @event).should eq("2.0,3.0")
|
|
| 219 |
+ end |
|
| 213 | 220 |
end |