/
Rakefile
143 lines (121 loc) · 3.96 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
begin
require 'jeweler'
rescue LoadError
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
exit 1
end
require 'rake/testtask'
require 'rake/rdoctask'
require 'rcov/rcovtask'
Jeweler::Tasks.new do |s|
s.name = "graticule"
s.rubyforge_project = "graticule"
s.author = 'Brandon Keepers'
s.email = 'brandon@opensoul.org'
s.summary = "API for using all the popular geocoding services."
s.description = 'Graticule is a geocoding API that provides a common interface to all the popular services, including Google, Yahoo, Geocoder.us, and MetaCarta.'
s.homepage = "http://github.com/collectiveidea/graticule"
s.add_dependency "activesupport"
s.has_rdoc = true
s.extra_rdoc_files = ["README.txt"]
s.rdoc_options = ["--main", "README.rdoc", "--inline-source", "--line-numbers"]
s.test_files = Dir['test/**/*.{yml,rb}']
end
desc 'Default: run unit tests.'
task :default => :test
desc 'Run the unit tests'
Rake::TestTask.new(:test) do |t|
t.libs << 'lib'
t.pattern = 'test/**/*_test.rb'
t.verbose = true
end
desc 'Generate documentatio'
Rake::RDocTask.new(:rdoc) do |rdoc|
rdoc.rdoc_dir = 'rdoc'
rdoc.title = 'Graticule'
rdoc.options << '--line-numbers' << '--inline-source'
rdoc.rdoc_files.include('README.txt')
rdoc.rdoc_files.include('lib/**/*.rb')
end
namespace :test do
desc "just rcov minus html output"
Rcov::RcovTask.new(:coverage) do |t|
# t.libs << 'test'
t.test_files = FileList['test/**/*_test.rb']
t.output_dir = 'coverage'
t.verbose = true
t.rcov_opts = %w(--exclude test,/usr/lib/ruby,/Library/Ruby,$HOME/.gem --sort coverage)
end
end
require 'rake/contrib/sshpublisher'
namespace :rubyforge do
desc "Release gem and RDoc documentation to RubyForge"
task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
namespace :release do
desc "Publish RDoc to RubyForge."
task :docs => [:rdoc] do
config = YAML.load(
File.read(File.expand_path('~/.rubyforge/user-config.yml'))
)
host = "#{config['username']}@rubyforge.org"
remote_dir = "/var/www/gforge-projects/the-perfect-gem/"
local_dir = 'rdoc'
Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
end
end
end
namespace :test do
namespace :cache do
desc 'Cache test responses from all the free geocoders'
task :free => [:google, :geocoder_us, :host_ip, :local_search_maps, :meta_carta, :yahoo]
desc 'Cache test responses from Google'
task :google do
cache_responses('google')
end
desc 'Cache test responses from Geocoder.us'
task :geocoder_us do
cache_responses('geocoder_us')
end
desc 'Cache test responses from HostIP'
task :host_ip do
cache_responses('host_ip')
end
desc 'Cache test responses from Local Search Maps'
task :local_search_maps do
cache_responses('local_search_maps')
end
desc 'Cache test responses from Meta Carta'
task :meta_carta do
cache_responses('meta_carta')
end
desc 'Cache test responses from Yahoo'
task :yahoo do
cache_responses('yahoo')
end
end
end
require 'active_support'
require 'net/http'
require 'uri'
RESPONSES_PATH = File.dirname(__FILE__) + '/test/fixtures/responses'
def cache_responses(service)
test_config[service.to_s]['responses'].each do |file,url|
File.open("#{RESPONSES_PATH}/#{service}/#{file}", 'w') do |f|
f.puts Net::HTTP.get(URI.parse(url))
end
end
end
def test_config
file = File.dirname(__FILE__) + '/test/config.yml'
raise "Copy config.yml.default to config.yml and set the API keys" unless File.exists?(file)
@test_config ||= returning(YAML.load(File.read(file))) do |config|
config.each do |service,values|
values['responses'].each {|file,url| update_placeholders!(values, url) }
end
end
end
def update_placeholders!(config, thing)
config.each do |option, value|
thing.gsub!(":#{option}", value) if value.is_a?(String)
end
end