earth-tools 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ == 0.1.0 2009-07-02
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
@@ -0,0 +1,30 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.rdoc
4
+ Rakefile
5
+ lib/earth_tools.rb
6
+ lib/earth_tools/date.rb
7
+ lib/earth_tools/height.rb
8
+ lib/earth_tools/location.rb
9
+ lib/earth_tools/sun.rb
10
+ lib/earth_tools/sun/evening.rb
11
+ lib/earth_tools/sun/morning.rb
12
+ lib/earth_tools/sun/twilight.rb
13
+ lib/earth_tools/timezone.rb
14
+ lib/earth_tools/xml/element.rb
15
+ script/console
16
+ script/destroy
17
+ script/generate
18
+ spec/earth_tools/date_spec.rb
19
+ spec/earth_tools/height_spec.rb
20
+ spec/earth_tools/location_spec.rb
21
+ spec/earth_tools/sun/evening_spec.rb
22
+ spec/earth_tools/sun/morning_spec.rb
23
+ spec/earth_tools/sun/twilight_spec.rb
24
+ spec/earth_tools/sun_spec.rb
25
+ spec/earth_tools/timezone_spec.rb
26
+ spec/earth_tools/xml/element_spec.rb
27
+ spec/earth_tools_spec.rb
28
+ spec/spec.opts
29
+ spec/spec_helper.rb
30
+ tasks/rspec.rake
@@ -0,0 +1,60 @@
1
+ = earth_tools
2
+
3
+ * http://github.com/psergi/earth_tools/tree/master
4
+
5
+ == DESCRIPTION:
6
+
7
+ EarthTools.org Web Services Library
8
+
9
+ == SYNOPSIS:
10
+
11
+ Current time given a latitude longitude:
12
+
13
+ >> EarthTools.timezone(:latitude => 42.3583333, :longitude => -71.0602778).isotime
14
+ => "2009-07-02 18:28:37 -0500"
15
+
16
+ Timezone offset given a latitude longitude:
17
+
18
+ >> EarthTools.timezone(:latitude => 42.3583333, :longitude => -71.0602778).offset
19
+ => "-5"
20
+
21
+ Sunrise/Sunset times given a latitude longitude and date:
22
+
23
+ >> EarthTools.sun(:latitude => 42.3583333, :longitude => -71.0602778, :day => 1, :month => 10).evening.sunset
24
+ => "17:24:15"
25
+
26
+ >> EarthTools.sun(:latitude => 42.3583333, :longitude => -71.0602778, :day => 1, :month => 10).evening.sunset
27
+ => "17:24:15"
28
+
29
+ == REQUIREMENTS:
30
+
31
+ * Nokogiri
32
+
33
+ == INSTALL:
34
+
35
+ * gem install earth-tools
36
+
37
+ == LICENSE:
38
+
39
+ (The MIT License)
40
+
41
+ Copyright (c) 2009 Phil Sergi
42
+
43
+ Permission is hereby granted, free of charge, to any person obtaining
44
+ a copy of this software and associated documentation files (the
45
+ 'Software'), to deal in the Software without restriction, including
46
+ without limitation the rights to use, copy, modify, merge, publish,
47
+ distribute, sublicense, and/or sell copies of the Software, and to
48
+ permit persons to whom the Software is furnished to do so, subject to
49
+ the following conditions:
50
+
51
+ The above copyright notice and this permission notice shall be
52
+ included in all copies or substantial portions of the Software.
53
+
54
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
55
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
56
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
57
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
58
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
59
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
60
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,26 @@
1
+ %w[rubygems rake rake/clean fileutils newgem rubigen].each { |f| require f }
2
+ require File.dirname(__FILE__) + '/lib/earth_tools'
3
+
4
+ # Generate all the Rake tasks
5
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
6
+ $hoe = Hoe.new('earth-tools', EarthTools::VERSION) do |p|
7
+ p.developer('Phil Sergi', 'phil.sergi@gmail.com')
8
+ p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
9
+ p.rubyforge_name = p.name
10
+ p.extra_deps = [
11
+ ['nokogiri','>= 1.2.3'],
12
+ ]
13
+ p.extra_dev_deps = [
14
+ ['newgem', ">= #{::Newgem::VERSION}"]
15
+ ]
16
+
17
+ p.clean_globs |= %w[**/.DS_Store tmp *.log]
18
+ path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
19
+ p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
20
+ p.rsync_args = '-av --delete --ignore-errors'
21
+ end
22
+
23
+ require 'newgem/tasks' # load /tasks/*.rake
24
+ Dir['tasks/**/*.rake'].each { |t| load t }
25
+
26
+ task :default => [:spec]
@@ -0,0 +1,64 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'open-uri'
5
+ require 'nokogiri'
6
+
7
+ require 'earth_tools/xml/element'
8
+ require 'earth_tools/date'
9
+ require 'earth_tools/location'
10
+ require 'earth_tools/height'
11
+ require 'earth_tools/sun/twilight'
12
+ require 'earth_tools/sun/evening'
13
+ require 'earth_tools/sun/morning'
14
+ require 'earth_tools/sun'
15
+ require 'earth_tools/timezone'
16
+
17
+ module EarthTools
18
+ VERSION = '0.1.0'
19
+
20
+ class << self
21
+ attr_accessor :base_uri
22
+ end
23
+
24
+ self.base_uri = 'http://www.earthtools.org'
25
+
26
+ def self.timezone(params)
27
+ params = prepare_params(params)
28
+ response = self.get('timezone', params['version'], params['latitude'], params['longitude'])
29
+ EarthTools::Timezone.new(response)
30
+ end
31
+
32
+ def self.sun(params)
33
+ params = { 'timezone' => '99', 'dst' => '0' }.merge(prepare_params(params))
34
+ response = self.get('sun', params['version'], params['latitude'], params['longitude'], params['day'], params['month'], params['timezone'], params['dst'])
35
+ EarthTools::Sun.new(response)
36
+ end
37
+
38
+ def self.height(params)
39
+ params = prepare_params(params)
40
+ response = self.get('height', params['version'], params['latitude'], params['longitude'])
41
+ EarthTools::Height.new(response)
42
+ end
43
+
44
+ def self.get(service, version = nil, *params)
45
+ service = versioned_service(service, version)
46
+ response = open(File.join(self.base_uri, service, *params))
47
+ EarthTools::XML::Element.new(Nokogiri::XML(response))
48
+ end
49
+
50
+ private
51
+
52
+ def self.versioned_service(service, version)
53
+ return service if version.nil?
54
+ "#{service}-#{version}"
55
+ end
56
+
57
+ def self.prepare_params(params)
58
+ params.inject({}) do |options, (key, value)|
59
+ options[key.to_s] = value.to_s
60
+ options
61
+ end
62
+ end
63
+
64
+ end
@@ -0,0 +1,13 @@
1
+ module EarthTools
2
+ class Date
3
+ attr_accessor :day, :month, :timezone, :dst
4
+
5
+ def initialize(attrs = {})
6
+ attrs ||= {}
7
+ @day = attrs['day']
8
+ @month = attrs['month']
9
+ @timezone = attrs['timezone']
10
+ @dst = attrs['dst']
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module EarthTools
2
+ class Height
3
+ attr_accessor :version, :location, :meters, :feet
4
+
5
+ def initialize(attrs = {})
6
+ attrs ||= {}
7
+ @version = attrs['version']
8
+ @location = EarthTools::Location.new(attrs['location'])
9
+ @meters = attrs['meters']
10
+ @feet = attrs['feet']
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ module EarthTools
2
+ class Location
3
+ attr_accessor :latitude, :longitude
4
+
5
+ def initialize(attrs = {})
6
+ attrs ||= {}
7
+ @latitude = attrs['latitude']
8
+ @longitude = attrs['longitude']
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,14 @@
1
+ module EarthTools
2
+ class Sun
3
+ attr_accessor :version, :location, :date, :morning, :evening
4
+
5
+ def initialize(attrs = {})
6
+ attrs ||= {}
7
+ @version = attrs['version']
8
+ @location = EarthTools::Location.new(attrs['location'])
9
+ @date = EarthTools::Date.new(attrs['date'])
10
+ @morning = EarthTools::Sun::Morning.new(attrs['morning'])
11
+ @evening = EarthTools::Sun::Evening.new(attrs['evening'])
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ module EarthTools
2
+ class Sun
3
+ class Evening
4
+ attr_accessor :sunset, :twilight
5
+
6
+ def initialize(attrs = {})
7
+ attrs ||= {}
8
+ @sunset = attrs['sunset']
9
+ @twilight = EarthTools::Sun::Twilight.new(attrs['twilight'])
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module EarthTools
2
+ class Sun
3
+ class Morning
4
+ attr_accessor :sunrise, :twilight
5
+
6
+ def initialize(attrs = {})
7
+ attrs ||= {}
8
+ @sunrise = attrs['sunrise']
9
+ @twilight = EarthTools::Sun::Twilight.new(attrs['twilight'])
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,14 @@
1
+ module EarthTools
2
+ class Sun
3
+ class Twilight
4
+ attr_accessor :civil, :nautical, :astronomical
5
+
6
+ def initialize(attrs = {})
7
+ attrs ||= {}
8
+ @civil = attrs['civil']
9
+ @nautical = attrs['nautical']
10
+ @astronomical = attrs['astronomical']
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,18 @@
1
+ module EarthTools
2
+ class Timezone
3
+ attr_accessor :version, :location, :offset, :suffix, :localtime, :isotime, :utctime, :dst
4
+
5
+ def initialize(attrs = {})
6
+ attrs ||= {}
7
+ @version = attrs['version']
8
+ @location = EarthTools::Location.new(attrs['location'])
9
+ @offset = attrs['offset']
10
+ @suffix = attrs['suffix']
11
+ @localtime = attrs['localtime']
12
+ @isotime = attrs['isotime']
13
+ @utctime = attrs['utctime']
14
+ @dst = attrs['dst']
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,18 @@
1
+ module EarthTools
2
+ module XML
3
+ class Element
4
+ attr_accessor :xml
5
+
6
+ def initialize(xml)
7
+ @xml = xml
8
+ end
9
+
10
+ def [](element)
11
+ element = @xml.at(element)
12
+ return unless element
13
+ element.children.any? { |c| c.element? } ? EarthTools::XML::Element.new(element) : element.text
14
+ end
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/earth_tools.rb'}"
9
+ puts "Loading earth_tools gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1,45 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb')
2
+
3
+ describe EarthTools::Date do
4
+ before do
5
+ @date = EarthTools::Date.new
6
+ end
7
+ it "should have day accessor" do
8
+ @date.should respond_to(:day)
9
+ @date.should respond_to(:day=)
10
+ end
11
+ it "should have a month accessor" do
12
+ @date.should respond_to(:month)
13
+ @date.should respond_to(:month=)
14
+ end
15
+ it "should have a timezone accessor" do
16
+ @date.should respond_to(:timezone)
17
+ @date.should respond_to(:timezone=)
18
+ end
19
+ it "should have a dst accessor" do
20
+ @date.should respond_to(:dst)
21
+ @date.should respond_to(:dst=)
22
+ end
23
+
24
+ describe ".initialize" do
25
+ before do
26
+ @element = EarthTools::XML::Element.new(Nokogiri::XML('<date><day>4</day><month>12</month><timezone>-5</timezone><dst>0</dst></date>'))
27
+ @date = EarthTools::Date.new(@element)
28
+ end
29
+ it "should set the day" do
30
+ @date.day.should == '4'
31
+ end
32
+ it "should set the month" do
33
+ @date.month.should == '12'
34
+ end
35
+ it "should set the timezone" do
36
+ @date.timezone.should == '-5'
37
+ end
38
+ it "should set the dst" do
39
+ @date.dst.should == '0'
40
+ end
41
+ it "should not shit if nil is passed" do
42
+ lambda { EarthTools::Date.new(nil) }.should_not raise_error
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,50 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb')
2
+
3
+ describe EarthTools::Height do
4
+ before do
5
+ @height = EarthTools::Height.new
6
+ end
7
+ it "should have a version accessor" do
8
+ @height.should respond_to(:version)
9
+ @height.should respond_to(:version=)
10
+ end
11
+ it "should have a location accessor" do
12
+ @height.should respond_to(:location)
13
+ @height.should respond_to(:location=)
14
+ end
15
+ it "should have a meters accessor" do
16
+ @height.should respond_to(:meters)
17
+ @height.should respond_to(:meters=)
18
+ end
19
+ it "should have a feet accessor" do
20
+ @height.should respond_to(:feet)
21
+ @height.should respond_to(:feet=)
22
+ end
23
+
24
+ describe ".initialize" do
25
+ before do
26
+ @element = EarthTools::XML::Element.new(Nokogiri::XML('<height xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.earthtools.org/height.xsd"> <version>1.0</version> <location> <latitude>52.4822</latitude> <longitude>-1.8946</longitude> </location> <meters>141</meters> <feet>462.6</feet> </height>'))
27
+ @height = EarthTools::Height.new(@element)
28
+ end
29
+ it "should set the version" do
30
+ @height.version.should == '1.0'
31
+ end
32
+ it "should parse the location" do
33
+ @element.stub!(:[])
34
+ @element.should_receive(:[]).with('location').and_return('location element')
35
+ EarthTools::Location.should_receive(:new).with('location element').and_return('location')
36
+ height = EarthTools::Height.new(@element)
37
+ height.location.should == 'location'
38
+ end
39
+ it "should set the meters" do
40
+ @height.meters.should == '141'
41
+ end
42
+ it "should set the feet" do
43
+ @height.feet.should == '462.6'
44
+ end
45
+ it "should not shit if nil is passed" do
46
+ lambda { EarthTools::Height.new(nil) }.should_not raise_error
47
+ end
48
+ end
49
+ end
50
+
@@ -0,0 +1,31 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb')
2
+
3
+ describe EarthTools::Location do
4
+ before do
5
+ @location = EarthTools::Location.new
6
+ end
7
+ it "should have latitude accessor" do
8
+ @location.should respond_to(:latitude)
9
+ @location.should respond_to(:latitude=)
10
+ end
11
+ it "should have longitude accessor" do
12
+ @location.should respond_to(:longitude)
13
+ @location.should respond_to(:longitude=)
14
+ end
15
+
16
+ describe ".initialize" do
17
+ before do
18
+ @element = EarthTools::XML::Element.new(Nokogiri::XML('<location><latitude>40.71417</latitude><longitude>-74.00639</longitude></location>'))
19
+ @location = EarthTools::Location.new(@element)
20
+ end
21
+ it "should set the latitude" do
22
+ @location.latitude.should == '40.71417'
23
+ end
24
+ it "should set the longitude" do
25
+ @location.longitude.should == '-74.00639'
26
+ end
27
+ it "should not shit if nil is passed" do
28
+ lambda { EarthTools::Location.new(nil) }.should_not raise_error
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,36 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
2
+
3
+ describe EarthTools::Sun::Evening do
4
+ before do
5
+ @evening = EarthTools::Sun::Evening.new
6
+ end
7
+
8
+ it "should have a sunset accessor" do
9
+ @evening.should respond_to(:sunset)
10
+ @evening.should respond_to(:sunset=)
11
+ end
12
+ it "should have a twilight accessor" do
13
+ @evening.should respond_to(:twilight)
14
+ @evening.should respond_to(:twilight=)
15
+ end
16
+
17
+ describe ".initialize" do
18
+ before do
19
+ @element = EarthTools::XML::Element.new(Nokogiri::XML('<evening> <sunset>16:27:01</sunset> <twilight> <civil>16:57:44</civil> <nautical>17:31:59</nautical> <astronomical>18:05:10</astronomical> </twilight> </evening>'))
20
+ @evening = EarthTools::Sun::Evening.new(@element)
21
+ end
22
+ it "should set the sunset" do
23
+ @evening.sunset.should == '16:27:01'
24
+ end
25
+ it "should parse the twilight" do
26
+ @element.stub!(:[])
27
+ @element.should_receive(:[]).with('twilight').and_return('twilight element')
28
+ EarthTools::Sun::Twilight.should_receive(:new).with('twilight element').and_return('twilight')
29
+ evening = EarthTools::Sun::Evening.new(@element)
30
+ evening.twilight.should == 'twilight'
31
+ end
32
+ it "should not shit if nil is passed" do
33
+ lambda { EarthTools::Sun::Evening.new(nil) }.should_not raise_error
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,37 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
2
+
3
+ describe EarthTools::Sun::Morning do
4
+ before do
5
+ @morning = EarthTools::Sun::Morning.new
6
+ end
7
+
8
+ it "should have a sunrise accessor" do
9
+ @morning.should respond_to(:sunrise)
10
+ @morning.should respond_to(:sunrise=)
11
+ end
12
+ it "should have a twilight accessor" do
13
+ @morning.should respond_to(:twilight)
14
+ @morning.should respond_to(:twilight=)
15
+ end
16
+
17
+ describe ".initialize" do
18
+ before do
19
+ @element = EarthTools::XML::Element.new(Nokogiri::XML('<morning> <sunrise>07:05:34</sunrise> <twilight> <civil>06:34:51</civil> <nautical>06:00:36</nautical> <astronomical>05:27:25</astronomical> </twilight> </morning>'))
20
+ @morning = EarthTools::Sun::Morning.new(@element)
21
+ end
22
+ it "should set the sunrise" do
23
+ @morning.sunrise.should == '07:05:34'
24
+ end
25
+ it "should parse the twilight" do
26
+ @element.stub!(:[])
27
+ @element.should_receive(:[]).with('twilight').and_return('twilight element')
28
+ EarthTools::Sun::Twilight.should_receive(:new).with('twilight element').and_return('twilight')
29
+ morning = EarthTools::Sun::Morning.new(@element)
30
+ morning.twilight.should == 'twilight'
31
+ end
32
+ it "should not shit if nil is passed" do
33
+ lambda { EarthTools::Sun::Morning.new(nil) }.should_not raise_error
34
+ end
35
+ end
36
+ end
37
+
@@ -0,0 +1,39 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
2
+
3
+ describe EarthTools::Sun::Twilight do
4
+ before do
5
+ @twilight = EarthTools::Sun::Twilight.new
6
+ end
7
+
8
+ it "should have a civil accessor" do
9
+ @twilight.should respond_to(:civil)
10
+ @twilight.should respond_to(:civil=)
11
+ end
12
+ it "should have a nautical accessor" do
13
+ @twilight.should respond_to(:nautical)
14
+ @twilight.should respond_to(:nautical=)
15
+ end
16
+ it "should have a astronomical accessor" do
17
+ @twilight.should respond_to(:astronomical)
18
+ @twilight.should respond_to(:astronomical=)
19
+ end
20
+
21
+ describe ".initialize" do
22
+ before do
23
+ @element = EarthTools::XML::Element.new(Nokogiri::XML('<twilight> <civil>16:57:44</civil> <nautical>17:31:59</nautical> <astronomical>18:05:10</astronomical> </twilight>'))
24
+ @twilight = EarthTools::Sun::Twilight.new(@element)
25
+ end
26
+ it "should set the civil" do
27
+ @twilight.civil.should == '16:57:44'
28
+ end
29
+ it "should set the nautical" do
30
+ @twilight.nautical.should == '17:31:59'
31
+ end
32
+ it "should set the astronomical" do
33
+ @twilight.astronomical.should == '18:05:10'
34
+ end
35
+ it "should not shit if nil is passed" do
36
+ lambda { EarthTools::Sun::Twilight.new(nil) }.should_not raise_error
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,71 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb')
2
+
3
+ describe EarthTools::Sun do
4
+ before do
5
+ @sun = EarthTools::Sun.new
6
+ end
7
+
8
+ it "should have a version accessor" do
9
+ @sun.should respond_to(:version)
10
+ @sun.should respond_to(:version=)
11
+ end
12
+ it "should have a location accessor" do
13
+ @sun.should respond_to(:location)
14
+ @sun.should respond_to(:location=)
15
+ end
16
+ it "should have a date accessor" do
17
+ @sun.should respond_to(:date)
18
+ @sun.should respond_to(:date=)
19
+ end
20
+ it "should have a morning accessor" do
21
+ @sun.should respond_to(:morning)
22
+ @sun.should respond_to(:morning=)
23
+ end
24
+ it "should have an evening accessor" do
25
+ @sun.should respond_to(:evening)
26
+ @sun.should respond_to(:evening=)
27
+ end
28
+
29
+ describe ".initialize" do
30
+ before do
31
+ @element = EarthTools::XML::Element.new(Nokogiri::XML('<sun xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.earthtools.org/sun.xsd"> <version>1.0</version> <location> <latitude>40.71417</latitude> <longitude>-74.00639</longitude> </location> <date> <day>4</day> <month>12</month> <timezone>-5</timezone> <dst>0</dst> </date> <morning> <sunrise>07:05:34</sunrise> <twilight> <civil>06:34:51</civil> <nautical>06:00:36</nautical> <astronomical>05:27:25</astronomical> </twilight> </morning> <evening> <sunset>16:27:01</sunset> <twilight> <civil>16:57:44</civil> <nautical>17:31:59</nautical> <astronomical>18:05:10</astronomical> </twilight> </evening> </sun>'))
32
+ @sun = EarthTools::Sun.new(@element)
33
+ end
34
+ it "should set the version" do
35
+ @sun.version.should == '1.0'
36
+ end
37
+ describe "complex attributes" do
38
+ before do
39
+ @element.stub!(:[])
40
+ end
41
+ it "should parse the location" do
42
+ @element.should_receive(:[]).with('location').and_return('location element')
43
+ EarthTools::Location.should_receive(:new).with('location element').and_return('location')
44
+ sun = EarthTools::Sun.new(@element)
45
+ sun.location.should == 'location'
46
+ end
47
+ it "should parse the date" do
48
+ @element.should_receive(:[]).with('date').and_return('date element')
49
+ EarthTools::Date.should_receive(:new).with('date element').and_return('date')
50
+ sun = EarthTools::Sun.new(@element)
51
+ sun.date.should == 'date'
52
+ end
53
+ it "should parse the morning" do
54
+ @element.should_receive(:[]).with('morning').and_return('morning element')
55
+ EarthTools::Sun::Morning.should_receive(:new).with('morning element').and_return('morning')
56
+ sun = EarthTools::Sun.new(@element)
57
+ sun.morning.should == 'morning'
58
+ end
59
+ it "should parse the evening" do
60
+ @element.should_receive(:[]).with('evening').and_return('evening element')
61
+ EarthTools::Sun::Evening.should_receive(:new).with('evening element').and_return('evening')
62
+ sun = EarthTools::Sun.new(@element)
63
+ sun.evening.should == 'evening'
64
+ end
65
+ end
66
+ it "should not shit if nil is passed" do
67
+ lambda { EarthTools::Sun.new(nil) }.should_not raise_error
68
+ end
69
+ end
70
+ end
71
+
@@ -0,0 +1,78 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb')
2
+
3
+ describe EarthTools::Timezone do
4
+ before do
5
+ @timezone = EarthTools::Timezone.new
6
+ end
7
+
8
+ it "should have a version accessor" do
9
+ @timezone.should respond_to(:version)
10
+ @timezone.should respond_to(:version=)
11
+ end
12
+ it "should have a location accessor" do
13
+ @timezone.should respond_to(:location)
14
+ @timezone.should respond_to(:location=)
15
+ end
16
+ it "should have an offset accessor" do
17
+ @timezone.should respond_to(:offset)
18
+ @timezone.should respond_to(:offset=)
19
+ end
20
+ it "should have a suffix accessor" do
21
+ @timezone.should respond_to(:suffix)
22
+ @timezone.should respond_to(:suffix=)
23
+ end
24
+ it "should have a localtime accessor" do
25
+ @timezone.should respond_to(:localtime)
26
+ @timezone.should respond_to(:localtime=)
27
+ end
28
+ it "should have an isotime accessor" do
29
+ @timezone.should respond_to(:isotime)
30
+ @timezone.should respond_to(:isotime=)
31
+ end
32
+ it "should have a utctime accessor" do
33
+ @timezone.should respond_to(:utctime)
34
+ @timezone.should respond_to(:utctime=)
35
+ end
36
+ it "should have a dst accessor" do
37
+ @timezone.should respond_to(:dst)
38
+ @timezone.should respond_to(:dst=)
39
+ end
40
+
41
+ describe ".initialize" do
42
+ before do
43
+ @element = EarthTools::XML::Element.new(Nokogiri::XML('<?xml version="1.0" encoding="ISO-8859-1" ?> <timezone xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.earthtools.org/timezone.xsd"> <version>1.1</version> <location> <latitude>40.71417</latitude> <longitude>-74.00639</longitude> </location> <offset>-5</offset> <suffix>R</suffix> <localtime>4 Dec 2005 12:06:56</localtime> <isotime>2005-12-04 12:06:56 -0500</isotime> <utctime>2005-12-04 17:06:56</utctime> <dst>False</dst> </timezone>'))
44
+ @timezone = EarthTools::Timezone.new(@element)
45
+ end
46
+ it "should set the version" do
47
+ @timezone.version.should == '1.1'
48
+ end
49
+ it "should parse the location" do
50
+ @element.stub!(:[])
51
+ @element.should_receive(:[]).with('location').and_return('location element')
52
+ EarthTools::Location.should_receive(:new).with('location element').and_return('location')
53
+ timezone = EarthTools::Timezone.new(@element)
54
+ timezone.location.should == 'location'
55
+ end
56
+ it "should set the offset" do
57
+ @timezone.offset.should == '-5'
58
+ end
59
+ it "should set the suffix" do
60
+ @timezone.suffix.should == 'R'
61
+ end
62
+ it "should set the localtime" do
63
+ @timezone.localtime.should == '4 Dec 2005 12:06:56'
64
+ end
65
+ it "should set the isotime" do
66
+ @timezone.isotime.should == '2005-12-04 12:06:56 -0500'
67
+ end
68
+ it "should set the utctime" do
69
+ @timezone.utctime.should == '2005-12-04 17:06:56'
70
+ end
71
+ it "should set the dst" do
72
+ @timezone.dst.should == 'False'
73
+ end
74
+ it "should not shit if nil is passed" do
75
+ lambda { EarthTools::Timezone.new(nil) }.should_not raise_error
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,35 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
2
+
3
+ describe EarthTools::XML::Element do
4
+ before do
5
+ @xml = Nokogiri::XML('<item><time>10:20:12</time><nested><time>10:00:00</time></nested></item>')
6
+ @element = EarthTools::XML::Element.new(@xml)
7
+ end
8
+
9
+ it "should have an xml accessor" do
10
+ @element.should respond_to(:xml)
11
+ @element.should respond_to(:xml=)
12
+ end
13
+
14
+ describe "initialize" do
15
+ it "should take be initialized with an xml object" do
16
+ element = EarthTools::XML::Element.new(@xml)
17
+ element.xml.should == @xml
18
+ end
19
+ end
20
+
21
+ describe "['element']" do
22
+ before do
23
+ @element = EarthTools::XML::Element.new(@xml)
24
+ end
25
+ it "should to parse out the text of the element passed" do
26
+ @element['time'].should == '10:20:12'
27
+ end
28
+ it "should to return nil if the element is not found" do
29
+ @element['text'].should be_nil
30
+ end
31
+ it "should return an EarthTools::XML::Element of the requested element has children" do
32
+ @element['nested'].should be_kind_of(EarthTools::XML::Element)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,136 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper.rb')
2
+
3
+ describe EarthTools do
4
+ it "should have a base uri accessor" do
5
+ EarthTools.should respond_to(:base_uri)
6
+ EarthTools.should respond_to(:base_uri=)
7
+ end
8
+ it "should set the base_uri to 'http://www.earthtools.org" do
9
+ EarthTools.base_uri.should == 'http://www.earthtools.org'
10
+ end
11
+
12
+ describe ".get" do
13
+ before do
14
+ Nokogiri.stub!(:XML)
15
+ @response = '<?xml version="1.0" encoding="ISO-8859-1" ?><root></root>'
16
+ EarthTools.stub!(:open).and_return(@response)
17
+ end
18
+ it "should make a request with the base uri" do
19
+ EarthTools.should_receive(:open).with(Regexp.new(Regexp.escape(EarthTools.base_uri)))
20
+ EarthTools.get('timezone')
21
+ end
22
+ it "should make a request to the service passed" do
23
+ EarthTools.should_receive(:open).with(File.join(EarthTools.base_uri, "timezone"))
24
+ EarthTools.get('timezone')
25
+ end
26
+ it "should make a versioned request if the version is passed" do
27
+ EarthTools.should_receive(:open).with(File.join(EarthTools.base_uri, "timezone-1.1"))
28
+ EarthTools.get('timezone', '1.1')
29
+ end
30
+ it "should seperate each of the params with slashes" do
31
+ EarthTools.should_receive(:open).with(File.join(EarthTools.base_uri, "timezone", "one", "two", "three"))
32
+ EarthTools.get('timezone', nil, 'one', 'two', 'three')
33
+ end
34
+ it "should build a Nokogiri::XML out of the response" do
35
+ Nokogiri.should_receive(:XML).with(@response)
36
+ EarthTools.get('timezone')
37
+ end
38
+ it "should return a EarthTools::XML::Element build from the Nokogiri document" do
39
+ Nokogiri.stub!(:XML).and_return('xml')
40
+ EarthTools::XML::Element.should_receive(:new).with('xml').and_return('earth tools element')
41
+ EarthTools.get('timezone').should == 'earth tools element'
42
+ end
43
+ end
44
+
45
+ describe ".timezone" do
46
+ it "should do a get request to the timezone service" do
47
+ EarthTools.should_receive(:get).with('timezone', anything, anything, anything)
48
+ EarthTools.timezone('latitude' => '1.1', 'longitude' => '2.1')
49
+ end
50
+ it "should do a get request to the timezone service with the version when passed" do
51
+ EarthTools.should_receive(:get).with('timezone', '1.0', anything, anything)
52
+ EarthTools.timezone('latitude' => '1.1', 'longitude' => '2.1', 'version' => '1.0')
53
+ end
54
+ it "should pass the latitude and longitude to the get method in order" do
55
+ EarthTools.should_receive(:get).with('timezone', '1.0', '1.1', '2.1')
56
+ EarthTools.timezone('latitude' => '1.1', 'longitude' => '2.1', 'version' => '1.0')
57
+ end
58
+ it "should allow symbols as param keys" do
59
+ EarthTools.should_receive(:get).with('timezone', '1.0', '1.1', '2.1')
60
+ EarthTools.timezone(:latitude => '1.1', :longitude => '2.1', :version => '1.0')
61
+ end
62
+ it "should allow numbers as param values" do
63
+ EarthTools.should_receive(:get).with('timezone', '1.0', '1.1', '2.1')
64
+ EarthTools.timezone(:latitude => 1.1, :longitude => 2.1, :version => 1.0)
65
+ end
66
+ it "should return a timezone built from the get response" do
67
+ EarthTools.should_receive(:get).and_return('response')
68
+ EarthTools::Timezone.should_receive(:new).with('response').and_return('timezone')
69
+ EarthTools.timezone(:latitude => 1.1, :longitude => 2.1, :version => 1.0).should == 'timezone'
70
+ end
71
+ end
72
+
73
+ describe ".sun" do
74
+ it "should do a get request to the sun service" do
75
+ EarthTools.should_receive(:get).with('sun', anything, anything, anything, anything, anything, anything, anything)
76
+ EarthTools.sun('latitude' => '1.1', 'longitude' => '2.1', 'day' => '1', 'month' => '12', 'timezone' => '-4', 'dst' => '0')
77
+ end
78
+ it "should do a get request to the sun service with the version when passed" do
79
+ EarthTools.should_receive(:get).with('sun', '1.0', anything, anything, anything, anything, anything, anything)
80
+ EarthTools.sun('latitude' => '1.1', 'longitude' => '2.1', 'day' => '1', 'month' => '12', 'timezone' => '-4', 'dst' => '0', 'version' => '1.0')
81
+ end
82
+ it "should pass the params to the get method in order" do
83
+ EarthTools.should_receive(:get).with('sun', '1.0', '1.1', '2.1', '1', '12', '-4', '0')
84
+ EarthTools.sun('latitude' => '1.1', 'longitude' => '2.1', 'day' => '1', 'month' => '12', 'timezone' => '-4', 'dst' => '0', 'version' => '1.0')
85
+ end
86
+ it "should allow symbols as param keys" do
87
+ EarthTools.should_receive(:get).with('sun', '1.0', '1.1', '2.1', '1', '12', '-4', '0')
88
+ EarthTools.sun(:latitude => '1.1', :longitude => '2.1', :day => '1', :month => '12', :timezone => '-4', :dst => '0', :version => '1.0')
89
+ end
90
+ it "should all numbers as param values" do
91
+ EarthTools.should_receive(:get).with('sun', '1.0', '1.1', '2.1', '1', '12', '-4', '0')
92
+ EarthTools.sun(:latitude => 1.1, :longitude => 2.1, :day => 1, :month => 12, :timezone => -4, :dst => 0, :version => 1.0)
93
+ end
94
+ it "should return a Sun built from the get response" do
95
+ EarthTools.should_receive(:get).and_return('response')
96
+ EarthTools::Sun.should_receive(:new).with('response').and_return('sun')
97
+ EarthTools.sun(:latitude => 1.1, :longitude => 2.1, :day => 1, :month => 12, :timezone => -4, :dst => 0, :version => 1.0).should == 'sun'
98
+ end
99
+ it "should default the timezone as '99' if not passed" do
100
+ EarthTools.should_receive(:get).with('sun', '1.0', '1.1', '2.1', '1', '12', '99', '0')
101
+ EarthTools.sun(:latitude => 1.1, :longitude => 2.1, :day => 1, :month => 12, :dst => 0, :version => 1.0)
102
+ end
103
+ it "should default the dst to '0' if not passed" do
104
+ EarthTools.should_receive(:get).with('sun', '1.0', '1.1', '2.1', '1', '12', '99', '0')
105
+ EarthTools.sun(:latitude => 1.1, :longitude => 2.1, :day => 1, :month => 12, :version => 1.0)
106
+ end
107
+ end
108
+
109
+ describe ".height" do
110
+ it "should do a get request to the height service" do
111
+ EarthTools.should_receive(:get).with('height', anything, anything, anything)
112
+ EarthTools.height('latitude' => '1.1', 'longitude' => '2.1')
113
+ end
114
+ it "should do a get request to the height service with the version when passed" do
115
+ EarthTools.should_receive(:get).with('height', '1.0', anything, anything)
116
+ EarthTools.height('latitude' => '1.1', 'longitude' => '2.1', 'version' => '1.0')
117
+ end
118
+ it "should pass the latitude and longitude to the get method in order" do
119
+ EarthTools.should_receive(:get).with('height', '1.0', '1.1', '2.1')
120
+ EarthTools.height('latitude' => '1.1', 'longitude' => '2.1', 'version' => '1.0')
121
+ end
122
+ it "should allow symbols as param keys" do
123
+ EarthTools.should_receive(:get).with('height', '1.0', '1.1', '2.1')
124
+ EarthTools.height(:latitude => '1.1', :longitude => '2.1', :version => '1.0')
125
+ end
126
+ it "should allow numbers as param values" do
127
+ EarthTools.should_receive(:get).with('height', '1.0', '1.1', '2.1')
128
+ EarthTools.height(:latitude => 1.1, :longitude => 2.1, :version => 1.0)
129
+ end
130
+ it "should return a height built from the get response" do
131
+ EarthTools.should_receive(:get).and_return('response')
132
+ EarthTools::Height.should_receive(:new).with('response').and_return('height')
133
+ EarthTools.height(:latitude => 1.1, :longitude => 2.1, :version => 1.0).should == 'height'
134
+ end
135
+ end
136
+ end
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,10 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ gem 'rspec'
6
+ require 'spec'
7
+ end
8
+
9
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
10
+ require 'earth_tools'
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ require 'spec'
6
+ end
7
+ begin
8
+ require 'spec/rake/spectask'
9
+ rescue LoadError
10
+ puts <<-EOS
11
+ To use rspec for testing you must install rspec gem:
12
+ gem install rspec
13
+ EOS
14
+ exit(0)
15
+ end
16
+
17
+ desc "Run the specs under spec/models"
18
+ Spec::Rake::SpecTask.new do |t|
19
+ t.spec_opts = ['--options', "spec/spec.opts"]
20
+ t.spec_files = FileList['spec/**/*_spec.rb']
21
+ end
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: earth-tools
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Phil Sergi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-07-02 00:00:00 -04:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: nokogiri
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.2.3
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: newgem
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.2.1
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: hoe
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 1.8.0
44
+ version:
45
+ description: EarthTools.org Web Services Library
46
+ email:
47
+ - phil.sergi@gmail.com
48
+ executables: []
49
+
50
+ extensions: []
51
+
52
+ extra_rdoc_files:
53
+ - History.txt
54
+ - Manifest.txt
55
+ - README.rdoc
56
+ files:
57
+ - History.txt
58
+ - Manifest.txt
59
+ - README.rdoc
60
+ - Rakefile
61
+ - lib/earth_tools.rb
62
+ - lib/earth_tools/date.rb
63
+ - lib/earth_tools/height.rb
64
+ - lib/earth_tools/location.rb
65
+ - lib/earth_tools/sun.rb
66
+ - lib/earth_tools/sun/evening.rb
67
+ - lib/earth_tools/sun/morning.rb
68
+ - lib/earth_tools/sun/twilight.rb
69
+ - lib/earth_tools/timezone.rb
70
+ - lib/earth_tools/xml/element.rb
71
+ - script/console
72
+ - script/destroy
73
+ - script/generate
74
+ - spec/earth_tools/date_spec.rb
75
+ - spec/earth_tools/height_spec.rb
76
+ - spec/earth_tools/location_spec.rb
77
+ - spec/earth_tools/sun/evening_spec.rb
78
+ - spec/earth_tools/sun/morning_spec.rb
79
+ - spec/earth_tools/sun/twilight_spec.rb
80
+ - spec/earth_tools/sun_spec.rb
81
+ - spec/earth_tools/timezone_spec.rb
82
+ - spec/earth_tools/xml/element_spec.rb
83
+ - spec/earth_tools_spec.rb
84
+ - spec/spec.opts
85
+ - spec/spec_helper.rb
86
+ - tasks/rspec.rake
87
+ has_rdoc: true
88
+ homepage: http://github.com/psergi/earth_tools/tree/master
89
+ licenses: []
90
+
91
+ post_install_message:
92
+ rdoc_options:
93
+ - --main
94
+ - README.rdoc
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: "0"
102
+ version:
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: "0"
108
+ version:
109
+ requirements: []
110
+
111
+ rubyforge_project: earth-tools
112
+ rubygems_version: 1.3.3
113
+ signing_key:
114
+ specification_version: 3
115
+ summary: EarthTools.org Web Services Library
116
+ test_files: []
117
+