machiawase 0.1.1 → 0.2.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/README.md CHANGED
@@ -35,3 +35,5 @@ or
35
35
  3. Commit your changes (`git commit -am 'Added some feature'`)
36
36
  4. Push to the branch (`git push origin my-new-feature`)
37
37
  5. Create new Pull Request
38
+
39
+ [![endorse](http://api.coderwall.com/zakuni/endorsecount.png)](http://coderwall.com/zakuni)
data/lib/machiawase.rb CHANGED
@@ -7,76 +7,85 @@ require 'nokogiri'
7
7
  require 'open-uri'
8
8
 
9
9
  class Machiawase
10
- class Coordinates
11
- attr :x, :y
10
+ attr :lat, :lon, :address, :near_station
12
11
 
13
- def initialize(x, y)
14
- @x = x
15
- @y = y
12
+ def initialize(*places)
13
+ @places = places
14
+ end
15
+
16
+ class Place
17
+ attr :lat, :lon
18
+
19
+ def initialize(lat, lon)
20
+ @lat = lat
21
+ @lon = lon
22
+ @doc = nil
23
+ end
24
+
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
36
+
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
45
+
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
54
+
55
+ def to_json
56
+ JSON.pretty_generate({
57
+ "latitude" => @lat,
58
+ "longtitude" => @lon,
59
+ "address" => address,
60
+ "near_station" => near_station
61
+ })
16
62
  end
17
63
  end
18
64
 
19
65
  def middle_of(*spots)
20
- @spots_coordinates = Hash.new
21
- @coordinates = Array.new
66
+ places = Array.new
22
67
 
23
68
  spots.each do |spot|
24
- lat_lng = geocode(spot)
25
- @spots_coordinates.store(spot, lat_lng)
26
- @coordinates.push(Coordinates.new(lat_lng[0], lat_lng[1]))
69
+ coordinates = Place.geocode(spot)
70
+ places.push(Place.new(coordinates["lat"], coordinates["lon"]))
27
71
  end
28
72
 
29
- lat_lon = centroid(*@coordinates)
30
- result = Hash.new
31
- @spots_coordinates.each do |spot, coordinates|
32
- result.store(spot,
33
- {"latitude" => coordinates[0],
34
- "longtitude" => coordinates[1],
35
- "address" => place_name(coordinates[0], coordinates[1])
36
- })
37
- end
38
- result.store("result",
39
- {"latitude" => lat_lon[0],
40
- "longtitude" => lat_lon[1],
41
- "address" => place_name(lat_lon[0], lat_lon[1])
42
- })
43
- JSON.pretty_generate(result)
73
+ c = centroid(*places)
74
+ return Place.new(c[0], c[1])
44
75
  end
45
76
 
46
-
47
77
  private
48
78
 
49
- def geocode(address)
50
- address = URI.encode(address)
51
- hash = Hash.new
52
- baseUrl = "http://maps.google.com/maps/api/geocode/json"
53
- reqUrl = "#{baseUrl}?address=#{address}&sensor=false&language=ja"
54
- response = Net::HTTP.get_response(URI.parse(reqUrl))
55
- status = JSON.parse(response.body)
56
- lat = status['results'][0]['geometry']['location']['lat']
57
- lng = status['results'][0]['geometry']['location']['lng']
58
- [lat, lng]
59
- end
60
-
61
79
  def centroid(*coordinates)
62
80
  @x_sum = 0
63
81
  @y_sum = 0
64
82
 
65
83
  coordinates.each do |c|
66
- @x_sum += c.x
67
- @y_sum += c.y
84
+ @x_sum += c.lat
85
+ @y_sum += c.lon
68
86
  end
69
87
 
70
88
  [@x_sum/coordinates.length.to_f, @y_sum/coordinates.length.to_f]
71
89
  end
72
90
 
73
- def place_name(lat, lon)
74
- begin
75
- doc = Nokogiri::HTML(open("http://nishioka.sakura.ne.jp/google/ws.php?lat=#{lat}&lon=#{lon}&format=simple"))
76
- address = doc.xpath('//address')[0].content
77
- rescue
78
- address = "Service Temporary Unavailable"
79
- end
80
- end
81
-
82
91
  end
@@ -1,3 +1,3 @@
1
1
  class Machiawase
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -2,15 +2,43 @@
2
2
  # -*- coding: utf-8 -*-
3
3
  require 'machiawase'
4
4
 
5
+
6
+ describe Machiawase::Place do
7
+ describe ':address' do
8
+ context '35.4437078, 139.6380256' do
9
+ it 'should be 神奈川県横浜市中区真砂町1丁目9' do
10
+ Machiawase::Place.new(35.4437078, 139.6380256).address.should eq("神奈川県横浜市中区真砂町1丁目9")
11
+ end
12
+ end
13
+ end
14
+
15
+ describe 'geocode' do
16
+ context '横浜' do
17
+ it 'should be {lat => 35.4437978, lon => 139.6380256}' do
18
+ Machiawase::Place.geocode('横浜').should eq ({"lat" => 35.4437078, "lon" => 139.6380256})
19
+ end
20
+ end
21
+ end
22
+
23
+ describe 'near_station' do
24
+ context '横浜' do
25
+ it 'should be 関内駅' do
26
+ Machiawase::Place.new(35.4437978, 139.6380256).near_station.should eq ("関内駅")
27
+ end
28
+ end
29
+ end
30
+ end
31
+
5
32
  describe Machiawase do
6
33
  before do
7
34
  @machiawase = Machiawase.new
8
35
  end
9
36
 
10
- describe ":geocode" do
11
- context '横浜' do
12
- it 'should be 35.4437978, 139.6380256' do
13
- @machiawase.send(:geocode, "横浜").should eq([35.4437078, 139.6380256])
37
+ describe 'middle_of' do
38
+ context '横浜, 東京' do
39
+ it 'should be Place' do
40
+ m = @machiawase.middle_of("横浜", "東京")
41
+ @machiawase.middle_of("横浜", "東京").class.should eq(Machiawase::Place)
14
42
  end
15
43
  end
16
44
  end
@@ -18,42 +46,26 @@ describe Machiawase do
18
46
  describe ":centroid" do
19
47
  context '(0, 0), (1, 1)' do
20
48
  it 'should be (0.5, 0.5)' do
21
- coordinates_a = Machiawase::Coordinates.new(0, 0)
22
- coordinates_b = Machiawase::Coordinates.new(1, 1)
23
- @machiawase.send(:centroid, *[coordinates_a, coordinates_b]).should eq([0.5, 0.5])
49
+ place_a = Machiawase::Place.new(0, 0)
50
+ place_b = Machiawase::Place.new(1, 1)
51
+ @machiawase.send(:centroid, *[place_a, place_b]).should eq([0.5, 0.5])
24
52
  end
25
53
  end
26
54
  context '(0, 0), (1, 1), (2, 2)' do
27
55
  it 'should be (1, 1)' do
28
- coordinates_a = Machiawase::Coordinates.new(0, 0)
29
- coordinates_b = Machiawase::Coordinates.new(1, 1)
30
- coordinates_c = Machiawase::Coordinates.new(2, 2)
31
- @machiawase.send(:centroid, *[coordinates_a, coordinates_b, coordinates_c]).should eq([1, 1])
56
+ place_a = Machiawase::Place.new(0, 0)
57
+ place_b = Machiawase::Place.new(1, 1)
58
+ place_c = Machiawase::Place.new(2, 2)
59
+ @machiawase.send(:centroid, *[place_a, place_b, place_c]).should eq([1, 1])
32
60
  end
33
61
  end
34
62
  context '(0, 0), (2, 0), (2, 2), (0, 2)' do
35
63
  it 'should be (1, 1)' do
36
- coordinates_a = Machiawase::Coordinates.new(0, 0)
37
- coordinates_b = Machiawase::Coordinates.new(2, 0)
38
- coordinates_c = Machiawase::Coordinates.new(2, 2)
39
- coordinates_d = Machiawase::Coordinates.new(0, 2)
40
- @machiawase.send(:centroid, *[coordinates_a, coordinates_b, coordinates_c, coordinates_d]).should eq([1, 1])
41
- end
42
- end
43
- end
44
-
45
- describe ':place_name' do
46
- context '35.4437078, 139.6380256' do
47
- it 'should be 神奈川県横浜市中区真砂町一丁目1' do
48
- @machiawase.send(:place_name, 35.4437078, 139.6380256).should eq ("神奈川県横浜市中区真砂町一丁目1")
49
- end
50
- end
51
- end
52
-
53
- describe 'middle_of' do
54
- context '横浜, 東京' do
55
- it 'should be middle' do
56
- @machiawase.middle_of("横浜", "東京")
64
+ place_a = Machiawase::Place.new(0, 0)
65
+ place_b = Machiawase::Place.new(2, 0)
66
+ place_c = Machiawase::Place.new(2, 2)
67
+ place_d = Machiawase::Place.new(0, 2)
68
+ @machiawase.send(:centroid, *[place_a, place_b, place_c, place_d]).should eq([1, 1])
57
69
  end
58
70
  end
59
71
  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.1.1
4
+ version: 0.2.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-21 00:00:00.000000000 Z
12
+ date: 2012-10-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
16
- requirement: &70304349754040 !ruby/object:Gem::Requirement
16
+ requirement: &70306408836240 !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: *70304349754040
24
+ version_requirements: *70306408836240
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70304349753620 !ruby/object:Gem::Requirement
27
+ requirement: &70306408830820 !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: *70304349753620
35
+ version_requirements: *70306408830820
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: ZenTest
38
- requirement: &70304349753200 !ruby/object:Gem::Requirement
38
+ requirement: &70306408824860 !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: *70304349753200
46
+ version_requirements: *70306408824860
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: autotest-fsevent
49
- requirement: &70304349752780 !ruby/object:Gem::Requirement
49
+ requirement: &70306408816260 !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: *70304349752780
57
+ version_requirements: *70306408816260
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: autotest-growl
60
- requirement: &70304349752360 !ruby/object:Gem::Requirement
60
+ requirement: &70306408807040 !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: *70304349752360
68
+ version_requirements: *70306408807040
69
69
  description: provides command line usage and library to get a middle point of plural
70
70
  points
71
71
  email: