machiawase 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/bin/machiawase CHANGED
@@ -1,8 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # -*- coding: utf-8 -*-
3
-
4
3
  require 'rubygems'
5
4
  require 'machiawase'
6
5
 
7
- machiawase = Machiawase.new
8
- puts machiawase.middle_of(ARGV[0], ARGV[1]).address
6
+ puts Machiawase.where?(ARGV).address
@@ -0,0 +1,71 @@
1
+ class Machiawase
2
+ class Place
3
+ attr_reader :address, :near_station
4
+ attr_accessor :lat, :lon
5
+
6
+ def initialize(lat, lon)
7
+ @lat = lat
8
+ @lon = lon
9
+ @doc = nil
10
+ @address = nil
11
+ @near_station = nil
12
+ end
13
+
14
+ def lat=(val)
15
+ @lat = val
16
+ @doc = nil
17
+ @address = nil
18
+ @near_station = nil
19
+ end
20
+
21
+ def lon=(val)
22
+ @lon = val
23
+ @doc = nil
24
+ @address = nil
25
+ @near_station = nil
26
+ end
27
+
28
+ def self.geocode(address)
29
+ address = URI.encode(address)
30
+ hash = Hash.new
31
+ baseUrl = "http://maps.google.com/maps/api/geocode/json"
32
+ reqUrl = "#{baseUrl}?address=#{address}&sensor=false&language=ja"
33
+ response = Net::HTTP.get_response(URI.parse(reqUrl))
34
+ status = JSON.parse(response.body)
35
+ lat = status['results'][0]['geometry']['location']['lat']
36
+ lon = status['results'][0]['geometry']['location']['lng']
37
+ {"lat" => lat, "lon" => lon}
38
+ end
39
+
40
+ def address
41
+ begin
42
+ @doc ||= Nokogiri::HTML(open("http://geocode.didit.jp/reverse/?lat=#{@lat}&lon=#{@lon}"))
43
+ @address ||= @doc.xpath('//address')[0].content
44
+ rescue
45
+ "Service Temporary Unavailable"
46
+ end
47
+ end
48
+
49
+ def near_station
50
+ begin
51
+ @doc ||= Nokogiri::HTML(open("http://geocode.didit.jp/reverse/?lat=#{@lat}&lon=#{@lon}"))
52
+ @near_station ||= @doc.xpath('//station1')[0].content
53
+ rescue
54
+ "Service Temporary Unavailable"
55
+ end
56
+ end
57
+
58
+ def to_h
59
+ {
60
+ "latitude" => @lat,
61
+ "longtitude" => @lon,
62
+ "address" => address,
63
+ "near_station" => near_station
64
+ }
65
+ end
66
+
67
+ def to_json
68
+ JSON.pretty_generate(to_h)
69
+ end
70
+ end
71
+ end
@@ -1,3 +1,3 @@
1
1
  class Machiawase
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/machiawase.rb CHANGED
@@ -1,91 +1,84 @@
1
1
  #!/usr/bin/env ruby
2
2
  # -*- coding: utf-8 -*-
3
- require 'machiawase/version'
4
3
  require 'net/http'
5
4
  require 'json'
6
5
  require 'nokogiri'
7
6
  require 'open-uri'
7
+ require 'machiawase/place'
8
+ require 'machiawase/version'
8
9
 
9
10
  class Machiawase
10
- attr :lat, :lon, :address, :near_station
11
+ attr_reader :place, :places, :lat, :lon, :address, :near_station
11
12
 
12
13
  def initialize(*places)
14
+ @place = nil
13
15
  @places = places
14
16
  end
15
17
 
16
- class Place
17
- attr :lat, :lon
18
-
19
- def initialize(lat, lon)
20
- @lat = lat
21
- @lon = lon
22
- @doc = nil
18
+ def self.where?(*addresses)
19
+ places = Array.new
20
+ addresses.each do |address|
21
+ g = Place.geocode(address)
22
+ places << Place.new(g['lat'], g['lon'])
23
23
  end
24
+ m = Machiawase.new(*places)
25
+ m.place
26
+ end
24
27
 
25
- def self.geocode(address)
26
- address = URI.encode(address)
27
- hash = Hash.new
28
- baseUrl = "http://maps.google.com/maps/api/geocode/json"
29
- reqUrl = "#{baseUrl}?address=#{address}&sensor=false&language=ja"
30
- response = Net::HTTP.get_response(URI.parse(reqUrl))
31
- status = JSON.parse(response.body)
32
- lat = status['results'][0]['geometry']['location']['lat']
33
- lon = status['results'][0]['geometry']['location']['lng']
34
- {"lat" => lat, "lon" => lon}
35
- end
28
+ def place
29
+ @place ||= middle_of(*@places)
30
+ end
36
31
 
37
- def address
38
- begin
39
- @doc ||= Nokogiri::HTML(open("http://geocode.didit.jp/reverse/?lat=#{@lat}&lon=#{@lon}"))
40
- @address ||= @doc.xpath('//address')[0].content
41
- rescue
42
- "Service Temporary Unavailable"
43
- end
44
- end
32
+ def lat
33
+ @place ||= middle_of(*@places)
34
+ @place.lat
35
+ end
45
36
 
46
- def near_station
47
- begin
48
- @doc ||= Nokogiri::HTML(open("http://geocode.didit.jp/reverse/?lat=#{@lat}&lon=#{@lon}"))
49
- @near_station ||= @doc.xpath('//station1')[0].content
50
- rescue
51
- "Service Temporary Unavailable"
52
- end
53
- end
37
+ def lon
38
+ @place ||= middle_of(*@places)
39
+ @place.lon
40
+ end
54
41
 
55
- def to_json
56
- JSON.pretty_generate({
57
- "latitude" => @lat,
58
- "longtitude" => @lon,
59
- "address" => address,
60
- "near_station" => near_station
61
- })
62
- end
42
+ def address
43
+ @place ||= middle_of(*@places)
44
+ @place.address
63
45
  end
64
46
 
65
- def middle_of(*spots)
66
- places = Array.new
67
-
68
- spots.each do |spot|
69
- coordinates = Place.geocode(spot)
70
- places.push(Place.new(coordinates["lat"], coordinates["lon"]))
47
+ def near_station
48
+ @place ||= middle_of(*@places)
49
+ @place.address
50
+ end
51
+
52
+ def to_h
53
+ h = Hash.new
54
+ @places.each_with_index do |place, i|
55
+ h.store("place#{i}", place.to_h)
71
56
  end
72
57
 
73
- c = centroid(*places)
74
- return Place.new(c[0], c[1])
58
+ @place ||= middle_of(*@places)
59
+ h.store("machiawase", @place.to_h)
60
+ end
61
+
62
+ def to_json
63
+ JSON.pretty_generate(to_h)
75
64
  end
76
65
 
77
66
  private
78
67
 
79
- def centroid(*coordinates)
80
- @x_sum = 0
81
- @y_sum = 0
68
+ def middle_of(*places)
69
+ c = centroid(*places)
70
+ @place = Place.new(c[0], c[1])
71
+ end
82
72
 
83
- coordinates.each do |c|
84
- @x_sum += c.lat
85
- @y_sum += c.lon
73
+ def centroid(*places)
74
+ x_sum = 0
75
+ y_sum = 0
76
+
77
+ places.each do |p|
78
+ x_sum += p.lat
79
+ y_sum += p.lon
86
80
  end
87
81
 
88
- [@x_sum/coordinates.length.to_f, @y_sum/coordinates.length.to_f]
82
+ [x_sum/places.length.to_f, y_sum/places.length.to_f]
89
83
  end
90
-
91
84
  end
@@ -34,11 +34,10 @@ describe Machiawase do
34
34
  @machiawase = Machiawase.new
35
35
  end
36
36
 
37
- describe 'middle_of' do
37
+ describe 'where?' do
38
38
  context '横浜, 東京' do
39
39
  it 'should be Place' do
40
- m = @machiawase.middle_of("横浜", "東京")
41
- @machiawase.middle_of("横浜", "東京").class.should eq(Machiawase::Place)
40
+ Machiawase.where?("横浜", "東京").class.should eq(Machiawase::Place)
42
41
  end
43
42
  end
44
43
  end
@@ -69,4 +68,18 @@ describe Machiawase do
69
68
  end
70
69
  end
71
70
  end
71
+
72
+ describe ':middle_of' do
73
+ context '横浜, 東京' do
74
+ it 'should be Place' do
75
+ g1 = Machiawase::Place.geocode("横浜")
76
+ p1 = Machiawase::Place.new(g1['lat'], g1['lon'])
77
+
78
+ g2 = Machiawase::Place.geocode("東京")
79
+ p2 = Machiawase::Place.new(g2['lat'], g2['lon'])
80
+
81
+ @machiawase.send(:middle_of, p1, p2).class.should eq(Machiawase::Place)
82
+ end
83
+ end
84
+ end
72
85
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: machiawase
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-25 00:00:00.000000000 Z
12
+ date: 2012-10-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
16
- requirement: &70176653981060 !ruby/object:Gem::Requirement
16
+ requirement: &70116961429540 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70176653981060
24
+ version_requirements: *70116961429540
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70176653980640 !ruby/object:Gem::Requirement
27
+ requirement: &70116960320860 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70176653980640
35
+ version_requirements: *70116960320860
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: ZenTest
38
- requirement: &70176653980220 !ruby/object:Gem::Requirement
38
+ requirement: &70116960319460 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70176653980220
46
+ version_requirements: *70116960319460
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: autotest-fsevent
49
- requirement: &70176653979800 !ruby/object:Gem::Requirement
49
+ requirement: &70116960318060 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70176653979800
57
+ version_requirements: *70116960318060
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: autotest-growl
60
- requirement: &70176653979380 !ruby/object:Gem::Requirement
60
+ requirement: &70116960316440 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70176653979380
68
+ version_requirements: *70116960316440
69
69
  description: provides command line usage and library to get a middle point of plural
70
70
  points
71
71
  email:
@@ -85,6 +85,7 @@ files:
85
85
  - autotest/discover.rb
86
86
  - bin/machiawase
87
87
  - lib/machiawase.rb
88
+ - lib/machiawase/place.rb
88
89
  - lib/machiawase/version.rb
89
90
  - machiawase.gemspec
90
91
  - spec/machiawase_spec.rb