tillless-core 0.0.1
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/.gitignore +17 -0
- data/Gemfile +4 -0
- data/Guardfile +24 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/lib/tillless-core.rb +13 -0
- data/lib/tillless-core/location.rb +235 -0
- data/lib/tillless-core/version.rb +3 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/tillless-core/location_spec.rb +135 -0
- data/tillless-core.gemspec +22 -0
- metadata +124 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard 'rspec' do
|
5
|
+
watch(%r{^spec/.+_spec\.rb$})
|
6
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
7
|
+
watch('spec/spec_helper.rb') { "spec" }
|
8
|
+
|
9
|
+
# Rails example
|
10
|
+
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
11
|
+
watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
12
|
+
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
|
13
|
+
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
14
|
+
watch('config/routes.rb') { "spec/routing" }
|
15
|
+
watch('app/controllers/application_controller.rb') { "spec/controllers" }
|
16
|
+
|
17
|
+
# Capybara request specs
|
18
|
+
watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
|
19
|
+
|
20
|
+
# Turnip features and steps
|
21
|
+
watch(%r{^spec/acceptance/(.+)\.feature$})
|
22
|
+
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
|
23
|
+
end
|
24
|
+
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Tillless::Core
|
2
|
+
|
3
|
+
Utilities used across Tillless
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'tillless-core'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install tillless-core
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
module Tillless
|
2
|
+
require 'tillless-core/version'
|
3
|
+
require 'tillless-core/location'
|
4
|
+
end
|
5
|
+
|
6
|
+
# This is only necessary for when the utilities are pulled into the RubyMotion app
|
7
|
+
if defined?(Motion::Project::Config)
|
8
|
+
Motion::Project::App.setup do |app|
|
9
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'tillless-core/*.rb')).each do |file|
|
10
|
+
app.files.unshift(file)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,235 @@
|
|
1
|
+
# tillless-core/lib/tillless-core/location.rb
|
2
|
+
module Tillless
|
3
|
+
module Location
|
4
|
+
|
5
|
+
# Radius of the Earth in km
|
6
|
+
RADIUS_OF_EARTH = Float(6378.7)
|
7
|
+
|
8
|
+
# Minimum distance apart to be considered 'near' in km
|
9
|
+
MIN_DISTANCE_FOR_NEARBY_IN_KM = 0.2
|
10
|
+
MIN_DISTANCE_FOR_NEARBY_IN_M = MIN_DISTANCE_FOR_NEARBY_IN_KM * 1000.0
|
11
|
+
|
12
|
+
# Shorthand for Pi Radians
|
13
|
+
PI_RADIANCE = (Math::PI / 180)
|
14
|
+
|
15
|
+
# Factor used in great circle calcs
|
16
|
+
GREAT_CIRCLE_FACTOR = 57.2958
|
17
|
+
|
18
|
+
# Class for raising exceptions
|
19
|
+
class LocationCalibrationException < Exception
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.included(base)
|
23
|
+
base.send :include, InstanceMethods
|
24
|
+
base.send :extend, ClassMethods
|
25
|
+
|
26
|
+
# Set the right attr method if a rails environment (assuming it's an ActiveRecord model)
|
27
|
+
if defined?(Rails.env)
|
28
|
+
base.send :attr_accessible, :lat, :lon
|
29
|
+
base.send :validates_presence_of, :lat, :lon
|
30
|
+
# Always recalibrate on save
|
31
|
+
base.send :before_save, :calibrate
|
32
|
+
base.send :include, RailsInstanceMethods
|
33
|
+
else
|
34
|
+
base.send :include, RubyInstanceMethods
|
35
|
+
|
36
|
+
attr_accessor :lat, :lon
|
37
|
+
|
38
|
+
# true if calibrated, note: following lat= or lon= it will need to be re-calibrated
|
39
|
+
attr_accessor :calibrated
|
40
|
+
|
41
|
+
# These are used so that half of the Great Circle algorithm can be calculated on
|
42
|
+
# instantiation which makes any subsequent comparison check significantly faster.
|
43
|
+
# See calibrate() for more details.
|
44
|
+
attr_accessor :term1, :term2, :term3, :term4, :term5, :term6
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
module ClassMethods
|
49
|
+
# Empty at this stage
|
50
|
+
end
|
51
|
+
|
52
|
+
module RailsInstanceMethods
|
53
|
+
# updated setters to decalibrate if lan/lon attributes updated without save
|
54
|
+
def lat=(val)
|
55
|
+
self.calibrated = false
|
56
|
+
super(val)
|
57
|
+
end
|
58
|
+
|
59
|
+
def lon=(val)
|
60
|
+
self.calibrated = false
|
61
|
+
super(val)
|
62
|
+
end
|
63
|
+
|
64
|
+
def term1=(val)
|
65
|
+
self.calibrated = false
|
66
|
+
super(val)
|
67
|
+
end
|
68
|
+
|
69
|
+
def term2=(val)
|
70
|
+
self.calibrated = false
|
71
|
+
super(val)
|
72
|
+
end
|
73
|
+
|
74
|
+
def term3=(val)
|
75
|
+
self.calibrated = false
|
76
|
+
super(val)
|
77
|
+
end
|
78
|
+
|
79
|
+
def term4=(val)
|
80
|
+
self.calibrated = false
|
81
|
+
super(val)
|
82
|
+
end
|
83
|
+
|
84
|
+
def term5=(val)
|
85
|
+
self.calibrated = false
|
86
|
+
super(val)
|
87
|
+
end
|
88
|
+
|
89
|
+
def term6=(val)
|
90
|
+
self.calibrated = false
|
91
|
+
super(val)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
module RubyInstanceMethods
|
96
|
+
# Assumes that :lat and :lon are Doubles / Floats
|
97
|
+
def initialize(hash = {})
|
98
|
+
|
99
|
+
# lat and lon coordinates of loation
|
100
|
+
@lat = hash[:lat]
|
101
|
+
@lon = hash[:lon]
|
102
|
+
|
103
|
+
# components of the Great Circle formula
|
104
|
+
@term1 = 0.0;
|
105
|
+
@term2 = 0.0;
|
106
|
+
@term3 = 0.0;
|
107
|
+
@term4 = 0.0;
|
108
|
+
@term5 = 0.0;
|
109
|
+
@term6 = 0.0;
|
110
|
+
|
111
|
+
# calibrate on creation to do first half of Great Circle calculation
|
112
|
+
calibrate
|
113
|
+
end
|
114
|
+
|
115
|
+
# These methods are only valid for a ruby class and will break an ActiveRecord model
|
116
|
+
# Set lat value for the location and mark the location as !calibrated
|
117
|
+
def lat=(_lat)
|
118
|
+
@lat = _lat
|
119
|
+
@calibrated = false
|
120
|
+
end
|
121
|
+
|
122
|
+
#Set lon value for the location and mark the location as !calibrated
|
123
|
+
def lon=(_lon)
|
124
|
+
@lon = lon
|
125
|
+
@calibrated = false
|
126
|
+
end
|
127
|
+
|
128
|
+
# private
|
129
|
+
|
130
|
+
# # Mark location as !calibrated if any changes are made to any of the terms
|
131
|
+
# def term1=(_lon)
|
132
|
+
# @lon = lon
|
133
|
+
# @calibrated = false
|
134
|
+
# end
|
135
|
+
|
136
|
+
# def term2=(_lon)
|
137
|
+
# @lon = lon
|
138
|
+
# @calibrated = false
|
139
|
+
# end
|
140
|
+
|
141
|
+
# def term3=(_lon)
|
142
|
+
# @lon = lon
|
143
|
+
# @calibrated = false
|
144
|
+
# end
|
145
|
+
|
146
|
+
# def term4=(_lon)
|
147
|
+
# @lon = lon
|
148
|
+
# @calibrated = false
|
149
|
+
# end
|
150
|
+
|
151
|
+
# def term5=(_lon)
|
152
|
+
# @lon = lon
|
153
|
+
# @calibrated = false
|
154
|
+
# end
|
155
|
+
|
156
|
+
# def term6=(_lon)
|
157
|
+
# @lon = lon
|
158
|
+
# @calibrated = false
|
159
|
+
# end
|
160
|
+
|
161
|
+
# def calibrated=(val)
|
162
|
+
# @calibrated = val
|
163
|
+
# end
|
164
|
+
end
|
165
|
+
|
166
|
+
module InstanceMethods
|
167
|
+
# Set both lat and lon and recalibrate in the one go
|
168
|
+
def set_and_calibrate(_lat, _lon)
|
169
|
+
self.lat = _lat
|
170
|
+
self.lon = _lon
|
171
|
+
calibrate
|
172
|
+
end
|
173
|
+
|
174
|
+
# Pre-calculate the various terms of the Great Circle Distance Formula
|
175
|
+
#
|
176
|
+
# Tillless::Location::RADIUS_OF_EARTH * # Radius of Earth in KM
|
177
|
+
# acos[
|
178
|
+
# sin(lat1/57.2958) * # term1
|
179
|
+
# sin(lat2/57.2958) + # term2
|
180
|
+
# cos(lat1/57.2958) * # term3
|
181
|
+
# cos(lat2/57.2958) * # term4
|
182
|
+
# cos(
|
183
|
+
# lon2/57.2958 - # term5
|
184
|
+
# lon1/57.2958) # term6
|
185
|
+
# ]
|
186
|
+
def calibrate
|
187
|
+
self.term1 = Math.sin(self.lat/Tillless::Location::GREAT_CIRCLE_FACTOR)
|
188
|
+
self.term2 = Math.sin(self.lat/Tillless::Location::GREAT_CIRCLE_FACTOR)
|
189
|
+
self.term3 = Math.cos(self.lat/Tillless::Location::GREAT_CIRCLE_FACTOR)
|
190
|
+
self.term4 = Math.cos(self.lat/Tillless::Location::GREAT_CIRCLE_FACTOR)
|
191
|
+
self.term5 = self.lon/Tillless::Location::GREAT_CIRCLE_FACTOR
|
192
|
+
self.term6 = self.lon/Tillless::Location::GREAT_CIRCLE_FACTOR
|
193
|
+
self.calibrated = true
|
194
|
+
end
|
195
|
+
|
196
|
+
# Calculate the great circle distance between this GeoLocation
|
197
|
+
# and the specified other location. This uses the formula specified
|
198
|
+
# here: http://www.meridianworlddata.com/Distance-Calculation.asp
|
199
|
+
#
|
200
|
+
# The formula used to calculate the Great Circle Distance is:
|
201
|
+
#
|
202
|
+
# RADIUS_OF_EARTH * acos[sin(lat1/57.2958) * sin(lat2/57.2958) + cos(lat1/57.2958) * cos(lat2/57.2958) * cos(lon2/57.2958 - lon1/57.2958)]
|
203
|
+
#
|
204
|
+
# Where: lat1/lon1 is the lat and lon of this Location, and lat2/lon2 is the lat and lon of the other location.
|
205
|
+
#
|
206
|
+
# :otherloc location to compare with
|
207
|
+
# return great circle distance from here to otherloc
|
208
|
+
# raises LocationCalibrationException if either self or otherloc are not calibrated
|
209
|
+
#
|
210
|
+
def great_circle_distance_from_here_to(otherloc)
|
211
|
+
raise Tillless::Location::LocationCalibrationException if ! (self.calibrated and otherloc.calibrated)
|
212
|
+
stage1 = self.term1 * otherloc.term2 +
|
213
|
+
self.term3 * otherloc.term4 *
|
214
|
+
Math.cos(self.term5 - otherloc.term6)
|
215
|
+
# fix floating point roudning error that manifests in ActiveRecord and Postgres
|
216
|
+
stage1 = stage1.round if stage1 < -1 or stage1 > 1
|
217
|
+
Tillless::Location::RADIUS_OF_EARTH * Math.acos(stage1)
|
218
|
+
end
|
219
|
+
|
220
|
+
# Test to see if the specified location is near this one, where
|
221
|
+
# 'near' means within 100 meters.
|
222
|
+
#
|
223
|
+
# :otherloc location to check
|
224
|
+
# :min_distance minimum distance for which to be considered 'nearby', default = Tillless::Location::MIN_DISTANCE_FOR_NEARBY_IN_KM
|
225
|
+
# return true if the specified location is near this one
|
226
|
+
# raises LocationCalibrationException if either self or otherloc are not calibrated
|
227
|
+
#
|
228
|
+
def nearby?(otherloc, min_distance = Tillless::Location::MIN_DISTANCE_FOR_NEARBY_IN_KM)
|
229
|
+
raise Tillless::Location::LocationCalibrationException if ! (self.calibrated and otherloc.calibrated)
|
230
|
+
( (great_circle_distance_from_here_to(otherloc) - min_distance) <= 0.0)
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# /tillless/server/tillless-core/spec/spec_helper.rb
|
2
|
+
|
3
|
+
require 'tillless-core'
|
4
|
+
|
5
|
+
|
6
|
+
RSpec.configure do |config|
|
7
|
+
# Use color in STDOUT
|
8
|
+
config.color_enabled = true
|
9
|
+
|
10
|
+
# Use color not only in STDOUT but also in pagers and files
|
11
|
+
config.tty = true
|
12
|
+
|
13
|
+
# Use the specified formatter
|
14
|
+
# config.formatter = :documentation # :documentation, :progress, :html, :textmate
|
15
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
# tillless-core/spec/tillless-core/location_spec.rb
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Tillless
|
6
|
+
describe Location do
|
7
|
+
|
8
|
+
before(:all) do
|
9
|
+
# 127 Talga Road Rothbury NSW Australia
|
10
|
+
@talgard_lat = -32.73075
|
11
|
+
@talgard_lon = 151.37991
|
12
|
+
|
13
|
+
# North Sydney Post Office, North Sydney NSW Australia
|
14
|
+
@northsydpo_lat = -33.8384945
|
15
|
+
@northsydpo_lon = 151.2064807
|
16
|
+
|
17
|
+
# 2/10 Holdsworth Street Neutral Bay NSW Australia
|
18
|
+
@holdsworthst_lat = -33.838236
|
19
|
+
@holdsworthst_lon = 151.214478
|
20
|
+
|
21
|
+
# 34 Ryan Street Lilyfield NSW 2040 Australia
|
22
|
+
@ryanst_lat = -33.870203
|
23
|
+
@ryanst_lon = 151.167256
|
24
|
+
|
25
|
+
class MockLocation
|
26
|
+
include Location
|
27
|
+
# Create a new MockLocation
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
before(:each) do
|
32
|
+
@talgard = MockLocation.new(lat: @talgard_lat, lon: @talgard_lon)
|
33
|
+
@northsydpo = MockLocation.new(lat: @northsydpo_lat, lon: @northsydpo_lon)
|
34
|
+
@holdsworthst = MockLocation.new(lat: @holdsworthst_lat, lon: @holdsworthst_lon)
|
35
|
+
@ryanst = MockLocation.new(lat: @ryanst_lat, lon: @ryanst_lon)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should have lattitude and longitude' do
|
39
|
+
@talgard.lat.should_not be nil
|
40
|
+
@talgard.lon.should_not be nil
|
41
|
+
@northsydpo.lat.should_not be nil
|
42
|
+
@northsydpo.lon.should_not be nil
|
43
|
+
@holdsworthst.lat.should_not be nil
|
44
|
+
@holdsworthst.lon.should_not be nil
|
45
|
+
@ryanst.lat.should_not be nil
|
46
|
+
@ryanst.lon.should_not be nil
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should be !calibrated if lat and/or lon change' do
|
50
|
+
@loc1 = MockLocation.new(lat: @talgard_lat, lon: @talgard_lon)
|
51
|
+
@loc1.lat = @holdsworthst_lat
|
52
|
+
@loc1.calibrated.should be false
|
53
|
+
@loc1.calibrate
|
54
|
+
@loc1.calibrated.should be true
|
55
|
+
@loc1.lon = @holdsworthst_lon
|
56
|
+
@loc1.calibrated.should be false
|
57
|
+
@loc1.calibrate
|
58
|
+
@loc1.calibrated.should be true
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should be calibrated if lat/lon set via set_and_calibrate' do
|
62
|
+
@loc1 = MockLocation.new(lat: @talgard_lat, lon: @talgard_lon)
|
63
|
+
@loc1.calibrated.should be true
|
64
|
+
@loc1.set_and_calibrate(@holdsworthst_lat, @holdsworthst_lon)
|
65
|
+
@loc1.calibrated.should be true
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should raise an exception if nearby? used on uncalibrated locations' do
|
69
|
+
@loc1 = MockLocation.new(lat: @talgard_lat, lon: @talgard_lon)
|
70
|
+
@loc1.lat = @holdsworthst_lat
|
71
|
+
@loc1.calibrated.should be false
|
72
|
+
expect { @loc1.nearby?(nil) }.to raise_error(Tillless::Location::LocationCalibrationException)
|
73
|
+
@loc1.calibrate
|
74
|
+
@loc1.lon = @holdsworthst_lon
|
75
|
+
@loc1.calibrated.should be false
|
76
|
+
expect { @loc1.nearby?(nil) }.to raise_error(Tillless::Location::LocationCalibrationException)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should raise an exception if great_circle_distance_from_here_to used on uncalibrated locations' do
|
80
|
+
@loc1 = MockLocation.new(lat: @talgard_lat, lon: @talgard_lon)
|
81
|
+
@loc1.lat = @holdsworthst_lat
|
82
|
+
@loc1.calibrated.should be false
|
83
|
+
expect { @loc1.great_circle_distance_from_here_to(nil) }.to raise_error(Tillless::Location::LocationCalibrationException)
|
84
|
+
@loc1.calibrate
|
85
|
+
@loc1.lon = @holdsworthst_lon
|
86
|
+
@loc1.calibrated.should be false
|
87
|
+
expect { @loc1.great_circle_distance_from_here_to(nil) }.to raise_error(Tillless::Location::LocationCalibrationException)
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'should be nearby if lat/lon are identical' do
|
91
|
+
@loc1 = MockLocation.new(lat: @talgard_lat, lon: @talgard_lon)
|
92
|
+
@loc2 = MockLocation.new(lat: @talgard_lat, lon: @talgard_lon)
|
93
|
+
@loc1.lat.should == @loc2.lat
|
94
|
+
@loc2.lat.should == @loc1.lat
|
95
|
+
@loc1.lon.should == @loc2.lon
|
96
|
+
@loc2.lon.should == @loc1.lon
|
97
|
+
@loc1.nearby?(@loc2).should == true
|
98
|
+
@loc2.nearby?(@loc1).should == true
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'should not be nearby if lat/lon are different' do
|
102
|
+
@loc1 = MockLocation.new(lat: @talgard_lat, lon: @talgard_lon)
|
103
|
+
@loc2 = MockLocation.new(lat: @holdsworthst_lat, lon: @holdsworthst_lon)
|
104
|
+
@loc1.lat.should_not eq(@loc2.lat)
|
105
|
+
@loc2.lat.should_not eq(@loc1.lat)
|
106
|
+
@loc1.lon.should_not eq(@loc2.lon)
|
107
|
+
@loc2.lon.should_not eq(@loc1.lon)
|
108
|
+
@loc1.nearby?(@loc2).should == false
|
109
|
+
@loc2.nearby?(@loc1).should == false
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'should be nearby if loc within min_distance for nearby?' do
|
113
|
+
@loc1 = MockLocation.new(lat: @talgard_lat, lon: @talgard_lon)
|
114
|
+
@loc2 = MockLocation.new(lat: @holdsworthst_lat, lon: @holdsworthst_lon)
|
115
|
+
distance1 = @loc1.great_circle_distance_from_here_to(@loc2)
|
116
|
+
distance2 = @loc2.great_circle_distance_from_here_to(@loc1)
|
117
|
+
distance1.should == distance2
|
118
|
+
distance2.should == distance1
|
119
|
+
@loc1.nearby?(@loc2, distance1+1).should == true
|
120
|
+
@loc2.nearby?(@loc1, distance1+1).should == true
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should not be nearby if loc greater than min_distance for nearby?' do
|
124
|
+
@loc1 = MockLocation.new(lat: @talgard_lat, lon: @talgard_lon)
|
125
|
+
@loc2 = MockLocation.new(lat: @holdsworthst_lat, lon: @holdsworthst_lon)
|
126
|
+
distance1 = @loc1.great_circle_distance_from_here_to(@loc2)
|
127
|
+
distance2 = @loc2.great_circle_distance_from_here_to(@loc1)
|
128
|
+
distance1.should == distance2
|
129
|
+
distance2.should == distance1
|
130
|
+
@loc1.nearby?(@loc2, distance1-1).should == false
|
131
|
+
@loc2.nearby?(@loc1, distance1-1).should == false
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/tillless-core/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Matthew Sinclair", "Jason Elston"]
|
6
|
+
gem.email = ["info@tillless.com"]
|
7
|
+
gem.description = %q{Tillless utilities}
|
8
|
+
gem.summary = %q{Gem for core utilities used across Tillless}
|
9
|
+
gem.homepage = ""
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "tillless-core"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Tillless::VERSION
|
17
|
+
|
18
|
+
gem.add_development_dependency 'rspec', '~> 2'
|
19
|
+
gem.add_development_dependency 'factory_girl', '~> 4.1.0'
|
20
|
+
gem.add_development_dependency 'rb-fsevent', '~> 0.9.1'
|
21
|
+
gem.add_development_dependency 'guard-rspec'
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tillless-core
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Matthew Sinclair
|
9
|
+
- Jason Elston
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2013-02-17 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rspec
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '2'
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '2'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: factory_girl
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ~>
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: 4.1.0
|
39
|
+
type: :development
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 4.1.0
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rb-fsevent
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.9.1
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.9.1
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: guard-rspec
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
description: Tillless utilities
|
80
|
+
email:
|
81
|
+
- info@tillless.com
|
82
|
+
executables: []
|
83
|
+
extensions: []
|
84
|
+
extra_rdoc_files: []
|
85
|
+
files:
|
86
|
+
- .gitignore
|
87
|
+
- Gemfile
|
88
|
+
- Guardfile
|
89
|
+
- README.md
|
90
|
+
- Rakefile
|
91
|
+
- lib/tillless-core.rb
|
92
|
+
- lib/tillless-core/location.rb
|
93
|
+
- lib/tillless-core/version.rb
|
94
|
+
- spec/spec_helper.rb
|
95
|
+
- spec/tillless-core/location_spec.rb
|
96
|
+
- tillless-core.gemspec
|
97
|
+
homepage: ''
|
98
|
+
licenses: []
|
99
|
+
post_install_message:
|
100
|
+
rdoc_options: []
|
101
|
+
require_paths:
|
102
|
+
- lib
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ! '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
requirements: []
|
116
|
+
rubyforge_project:
|
117
|
+
rubygems_version: 1.8.23
|
118
|
+
signing_key:
|
119
|
+
specification_version: 3
|
120
|
+
summary: Gem for core utilities used across Tillless
|
121
|
+
test_files:
|
122
|
+
- spec/spec_helper.rb
|
123
|
+
- spec/tillless-core/location_spec.rb
|
124
|
+
has_rdoc:
|