static_map 0.1.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.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ test/*.png
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in static_map.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Sean Behan
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,87 @@
1
+ # StaticMap
2
+
3
+ Build static image maps using Google's Static Map API
4
+
5
+ ## Installation
6
+
7
+ gem 'static_map'
8
+
9
+ And then execute:
10
+
11
+ $ bundle
12
+
13
+ Or install it yourself as:
14
+
15
+ $ gem install static_map
16
+
17
+ ## Usage
18
+
19
+ ```ruby
20
+ image = StaticMap::Image.new({
21
+ size: '500x500',
22
+ sensor: false,
23
+ markers: [],
24
+ maptype: 'road',
25
+ zoom: 8,
26
+ title: 'A map',
27
+ alt: 'Alt text for img html',
28
+ path: './my-map.png'
29
+ })
30
+
31
+ image.url
32
+ # => http://maps.google.com/maps/api/staticmap?size=500x500&zoom=1&sensor=true
33
+
34
+ image.to_html
35
+ # => <img src='http://maps.google.com/maps/api/staticmap?size=500x500&zoom=1&sensor=true' title='' alt=''/>
36
+
37
+ img.save # save map to disk with path option
38
+
39
+ ```
40
+
41
+ The options are
42
+
43
+ * center String - center the map around this location
44
+ * zoom Integer - zoom level of the map
45
+ * size String - in pixels of the image. 500x500
46
+ * sensor Boolean - autodetect user location
47
+ * markers Array of Hashes - location of pins on map. Requires a location address or lat/long coordinates
48
+ * maptype String - type of map (satellite, road, hybrid, terrain)
49
+ * path String - path to write file to when #save is called
50
+ * alt String - alt text if using image tag
51
+ * title String - title text if using image tag
52
+
53
+ ### Usage with Rails
54
+
55
+ ```erb
56
+ <%=raw StaticMap::Image.new %>
57
+ ```
58
+
59
+ The markers option accepts either a location (E.g., "Burlington, Vermont") or latitude and longitude coordinates.
60
+
61
+ ```ruby
62
+ <%=raw StaticMap::Image.new({
63
+ zoom: 13,
64
+ markers: [
65
+ { location: "Winooski,Vermont", color: "green", label: "A" },
66
+ { latitude: 44.477171, longitude: -73.222032, color: "blue", label: "B" }
67
+ ]
68
+ }) %>
69
+ ```
70
+
71
+ ![StaticMap::Image of Burlington Vermont](http://maps.google.com/maps/api/staticmap?size=500x500&zoom=13&sensor=true&markers=color:green|label:A|Winooski,VT&markers=color:blue|label:B|44.477171,-73.222032)
72
+
73
+ ## Contributing
74
+
75
+ 1. Fork it
76
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
77
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
78
+ 4. Push to the branch (`git push origin my-new-feature`)
79
+ 5. Create new Pull Request
80
+
81
+ ## Credits and Resources
82
+
83
+ The following links are great resources for working with Google Maps API
84
+
85
+ - https://developers.google.com/maps/
86
+ - http://www.lateralcode.com/new-google-maps-api/
87
+ - https://developers.google.com/maps/documentation/staticmaps/
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
data/lib/static_map.rb ADDED
@@ -0,0 +1,78 @@
1
+ # http://www.lateralcode.com/new-google-maps-api/
2
+ require "static_map/version"
3
+ require 'cgi'
4
+ require 'open-uri'
5
+
6
+ module StaticMap
7
+ #
8
+ # Example
9
+ #
10
+ # img = StaticMap::Image.new(size: 500)
11
+ # img.center = 'Burlington, VT'
12
+ # img.zoom = 4
13
+ # img.markers << {latitude: 123, longitude: 321, color: 'red', label: 'VT'}
14
+ #
15
+ class Image
16
+ # Base URL for Google Static Maps API endpoint
17
+ URL = "http://maps.google.com/maps/api/staticmap"
18
+
19
+ # center String - center the map around this location
20
+ # zoom Integer - zoom level of the map
21
+ # size String - in pixels of the image. 500x500
22
+ # sensor Boolean - autodetect user user location
23
+ # markers Hash - location of pin on map, requires location address or lat/long
24
+ # maptype String - satelite, road... etc
25
+ # path String - where to save the file
26
+ # alt String - alt text if using image tag
27
+ # title String - title text if using image tag
28
+ attr_accessor :center, :zoom, :size, :sensor, :markers, :maptype, :path, :alt, :title
29
+
30
+ def initialize(options={})
31
+ @markers = options[:markers] || []
32
+ @size = options[:size] || '500x500'
33
+ @sensor = options[:sensor] || true
34
+ @zoom = options[:zoom] || 1
35
+ @center = options[:center] || nil
36
+ @maptype = options[:maptype] || 'road'
37
+ @path = options[:path] || nil
38
+ @alt = options[:alt] || nil
39
+ @title = options[:title] || nil
40
+ end
41
+
42
+ def save
43
+ raise "Please set the path argument to save the image" unless @path
44
+
45
+ File.open(@path, "w") { |f| f.write(open(url).read) }
46
+ end
47
+
48
+ def url
49
+ "#{URL}?#{params}"
50
+ end
51
+
52
+ def params
53
+ x = { size: size, center: center, zoom: zoom, sensor: sensor, maptype: maptype }.reject { |k,v| v.nil? }.map do |k,v|
54
+ "#{k}=#{CGI.escape(v.to_s)}"
55
+ end.join("&")
56
+
57
+ x += "&#{marker_params}" if @markers.any?
58
+ x
59
+ end
60
+
61
+ def marker_params
62
+ @markers.map do |marker|
63
+ str = ["markers="]
64
+ str << ["color:#{marker[:color]}"] if marker[:color]
65
+ str << ["label:#{marker[:label]}"] if marker[:label]
66
+ str << ["#{marker[:location]}"] if marker[:location]
67
+ str << ["#{marker[:latitude]},#{marker[:longitude]}"] if marker[:latitude] && marker[:longitude]
68
+ str.join("|")
69
+ end.join("&").gsub(/\=\|/i, '=')
70
+ end
71
+
72
+ def to_html
73
+ "<img src='#{url}' title='#{title}' alt='#{alt}'/>"
74
+ end
75
+ alias_method :to_s, :to_html
76
+
77
+ end
78
+ end
@@ -0,0 +1,3 @@
1
+ module StaticMap
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/static_map/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Sean Behan"]
6
+ gem.email = ["inbox@seanbehan.com"]
7
+ gem.description = %q{Google Static Map API with Ruby}
8
+ gem.summary = %q{Build static maps using Google's Static Map API}
9
+ gem.homepage = "http://github.com/gristmill/static_map"
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "static_map"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = StaticMap::VERSION
17
+ end
@@ -0,0 +1,49 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../lib/')
2
+
3
+ require 'test/unit'
4
+ require 'static_map'
5
+
6
+ class StaticMapTest < Test::Unit::TestCase
7
+
8
+ def test_defaults
9
+ img = StaticMap::Image.new
10
+ assert_equal "http://maps.google.com/maps/api/staticmap?size=500x500&zoom=1&sensor=true", img.url
11
+ assert_equal %{<img src='http://maps.google.com/maps/api/staticmap?size=500x500&zoom=1&sensor=true' title='' alt=''/>}, img.to_html
12
+ end
13
+
14
+ def test_params
15
+ img = StaticMap::Image.new
16
+ assert_equal "size=500x500&zoom=1&sensor=true", img.params
17
+ img.size = '900x900'
18
+ assert_equal "size=900x900&zoom=1&sensor=true", img.params
19
+ end
20
+
21
+ def test_marker_params
22
+ img = StaticMap::Image.new
23
+ img.markers << { latitude: 44.477462, longitude: -73.212032, color: "red", label: "A" }
24
+ img.markers << { location: "Winooski, Vermont", color: "red", label: "B" }
25
+ assert_equal "markers=color:red|label:A|44.477462,-73.212032&markers=color:red|label:B|Winooski, Vermont", img.marker_params
26
+ end
27
+
28
+ def test_url
29
+ img = StaticMap::Image.new
30
+ img.center = nil
31
+ img.size = '300x300'
32
+ img.zoom = 11
33
+ img.sensor = false
34
+ img.markers << { latitude: 44.477462, longitude: -73.212032, color: "green", label: "A" }
35
+ assert_equal "http://maps.google.com/maps/api/staticmap?size=300x300&zoom=11&sensor=false&markers=color:green|label:A|44.477462,-73.212032", img.url
36
+ end
37
+
38
+ def test_to_html
39
+ img = StaticMap::Image.new(:size => "500x500", :alt => "Alt Test", :title => "Title Test")
40
+ assert_equal "<img src='http://maps.google.com/maps/api/staticmap?size=500x500&zoom=1&sensor=true' title='Title Test' alt='Alt Test'/>", img.to_html
41
+ end
42
+
43
+ def test_save
44
+ # TODO fake the remote resource
45
+ img = StaticMap::Image.new(path: "./test/tmp.png").save
46
+ assert File.exists?("./test/tmp.png")
47
+ File.delete("./test/tmp.png")
48
+ end
49
+ end
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: static_map
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Sean Behan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-19 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Google Static Map API with Ruby
15
+ email:
16
+ - inbox@seanbehan.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - LICENSE
24
+ - README.md
25
+ - Rakefile
26
+ - lib/static_map.rb
27
+ - lib/static_map/version.rb
28
+ - static_map.gemspec
29
+ - test/static_map_test.rb
30
+ homepage: http://github.com/gristmill/static_map
31
+ licenses: []
32
+ post_install_message:
33
+ rdoc_options: []
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ requirements: []
49
+ rubyforge_project:
50
+ rubygems_version: 1.8.17
51
+ signing_key:
52
+ specification_version: 3
53
+ summary: Build static maps using Google's Static Map API
54
+ test_files:
55
+ - test/static_map_test.rb