machiawase 0.2.1 → 0.3.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/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