machiawase 0.3.6 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5daaa6bc7d71d7b055b35b590e4b9590a58aa05e
4
+ data.tar.gz: 6e8e8e6494da115a06435ae08f86451365ca7db6
5
+ SHA512:
6
+ metadata.gz: 8699b0fb6002770b15c6161601672c7b8fc54839d0a6784aa136c293c4d7cefa4ef8164a4d9add0f8b6d4efc89b6d61d2e7943370b4ee0bc23dbc4af00340a12
7
+ data.tar.gz: bf2a7bf5184f4c914bff6fc51c0387596e493d08a02308917f684b664f7944c372cb88e60d1d7f197461c27edf9a45ca996ad42301f7875ebb8b3fbb3edb33b6
data/Guardfile ADDED
@@ -0,0 +1,21 @@
1
+ guard 'minitest' do
2
+ # with Minitest::Unit
3
+ # watch(%r|^test/(.*)\/?test_(.*)\.rb|)
4
+ # watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
5
+ # watch(%r|^test/test_helper\.rb|) { "test" }
6
+
7
+ # with Minitest::Spec
8
+ watch(%r|^spec/(.*)_spec\.rb|)
9
+ watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
10
+ watch(%r|^spec/spec_helper\.rb|) { "spec" }
11
+
12
+ # Rails 3.2
13
+ # watch(%r|^app/controllers/(.*)\.rb|) { |m| "test/controllers/#{m[1]}_test.rb" }
14
+ # watch(%r|^app/helpers/(.*)\.rb|) { |m| "test/helpers/#{m[1]}_test.rb" }
15
+ # watch(%r|^app/models/(.*)\.rb|) { |m| "test/unit/#{m[1]}_test.rb" }
16
+
17
+ # Rails
18
+ # watch(%r|^app/controllers/(.*)\.rb|) { |m| "test/functional/#{m[1]}_test.rb" }
19
+ # watch(%r|^app/helpers/(.*)\.rb|) { |m| "test/helpers/#{m[1]}_test.rb" }
20
+ # watch(%r|^app/models/(.*)\.rb|) { |m| "test/unit/#{m[1]}_test.rb" }
21
+ end
data/lib/machiawase.rb CHANGED
@@ -7,8 +7,11 @@ require 'open-uri'
7
7
  require 'machiawase/place'
8
8
  require 'machiawase/version'
9
9
 
10
+ # @author {https://github.com/zakuni zakuni}
10
11
  module Machiawase
11
12
 
13
+ # @param argv [Array<Place>] the array of places.
14
+ # @return [Place] the place to rendezvous.
12
15
  def self.where(*argv)
13
16
  require 'optparse'
14
17
  opt = OptionParser.new do |opt|
@@ -26,8 +29,15 @@ module Machiawase
26
29
  end
27
30
 
28
31
  class Rendezvous
29
- attr_reader :place, :places, :lat, :lon, :address, :near_station
32
+ # @!attribute [r] place
33
+ # @return [Place] the place to rendezvous.
34
+ # @!attribute [r] places
35
+ # @return [Array<Place>] the array of given places.
36
+ # @see Place
30
37
 
38
+ attr_reader :place, :places, :lat, :lon, :address, :near_station
39
+
40
+ # @param places [Array<Place>] the array of places.
31
41
  def initialize(*places)
32
42
  @place = nil
33
43
  @places = places
@@ -57,6 +67,7 @@ module Machiawase
57
67
  @place.near_station
58
68
  end
59
69
 
70
+ # @return [Hash] the attributes with Hash format.
60
71
  def to_h
61
72
  h = Hash.new
62
73
  @places.each_with_index do |place, i|
@@ -67,6 +78,7 @@ module Machiawase
67
78
  h.store("machiawase", @place.to_h)
68
79
  end
69
80
 
81
+ # @return [JSON] the attributes with JSON format.
70
82
  def to_json
71
83
  JSON.pretty_generate(to_h)
72
84
  end
@@ -1,4 +1,16 @@
1
+ # -*- coding: utf-8 -*-
1
2
  module Machiawase
3
+
4
+ # @!attribute [r] address
5
+ # @return [String] the address.
6
+ # @!attribute [r] near_station
7
+ # @return [String] the nearest station.
8
+ # @!attribute [r] google_map_url
9
+ # @return [String] the url of Google Map.
10
+ # @!attribute [rw] lat
11
+ # @return the latitude.
12
+ # @!attribute [rw] lon
13
+ # @return the longitude.
2
14
  class Place
3
15
  attr_reader :address, :near_station, :google_map_url
4
16
  attr_accessor :lat, :lon
@@ -10,6 +22,7 @@ module Machiawase
10
22
  @address = nil
11
23
  @near_station = nil
12
24
  @google_map_url = "http://maps.google.co.jp/maps?q=#{@lat},#{@lon}&ll=#{@lat},#{@lon}&z=14&t=m&brcurrent=3,0x0:0x0,1"
25
+ @proxy = Place.parse_proxy(ENV["http_proxy"])
13
26
  end
14
27
 
15
28
  def lat=(val)
@@ -26,21 +39,41 @@ module Machiawase
26
39
  @near_station = nil
27
40
  end
28
41
 
42
+ # @return [Hash] geocode of given address.
29
43
  def self.geocode(address)
30
44
  address = URI.encode(address)
31
- hash = Hash.new
32
45
  baseUrl = "http://maps.google.com/maps/api/geocode/json"
33
46
  reqUrl = "#{baseUrl}?address=#{address}&sensor=false&language=ja"
34
- response = Net::HTTP.get_response(URI.parse(reqUrl))
47
+ proxy = parse_proxy(ENV["http_proxy"])
48
+ response = Net::HTTP::Proxy(proxy['host'], proxy['port'], proxy['user'], proxy['pass']).get_response(URI.parse(reqUrl))
35
49
  status = JSON.parse(response.body)
36
50
  lat = status['results'][0]['geometry']['location']['lat']
37
51
  lon = status['results'][0]['geometry']['location']['lng']
38
52
  {"lat" => lat, "lon" => lon}
39
53
  end
40
54
 
55
+ def self.parse_proxy(proxy)
56
+ # http://user:pass@host:port のように書かれていることを想定
57
+ # パスワードに@とか入ってる場合があるので一番後ろの@でだけsplitする
58
+ rserver, raccount = (proxy || '').sub(/http:\/\//, '').reverse.split("@", 2)
59
+ server = rserver.nil? ? "" : rserver.reverse
60
+ host, port = server.split(":")
61
+ account = raccount.nil? ? "" : raccount.reverse.split(":")
62
+ user, pass = account
63
+
64
+ # serverはNokogiri(open-uri)で使う。host, portはNet::HTTPで使う。
65
+ {
66
+ "server" => server.empty? ? nil : "http://#{server}",
67
+ "host" => host,
68
+ "port" => port,
69
+ "user" => user.nil? ? "" : user,
70
+ "pass" => pass.nil? ? "" : pass
71
+ }
72
+ end
73
+
41
74
  def address
42
75
  begin
43
- @doc ||= Nokogiri::HTML(open("http://geocode.didit.jp/reverse/?lat=#{@lat}&lon=#{@lon}"))
76
+ @doc ||= Nokogiri::HTML(open("http://geocode.didit.jp/reverse/?lat=#{@lat}&lon=#{@lon}", :proxy_http_basic_authentication => [@proxy['server'], @proxy['user'], @proxy['pass']]))
44
77
  @address ||= @doc.xpath('//address')[0].content
45
78
  rescue
46
79
  "Service Temporary Unavailable"
@@ -49,25 +82,25 @@ module Machiawase
49
82
 
50
83
  def near_station
51
84
  begin
52
- @doc ||= Nokogiri::HTML(open("http://geocode.didit.jp/reverse/?lat=#{@lat}&lon=#{@lon}"))
85
+ @doc ||= Nokogiri::HTML(open("http://geocode.didit.jp/reverse/?lat=#{@lat}&lon=#{@lon}", :proxy => ENV['http_proxy']))
53
86
  @near_station ||= @doc.xpath('//station1')[0].content
54
87
  rescue
55
88
  "Service Temporary Unavailable"
56
89
  end
57
90
  end
58
91
 
59
- # Returns attributes with Hash format.
92
+ # @return [Hash] attributes with Hash format.
60
93
  def to_h
61
94
  {
62
95
  "latitude" => @lat,
63
- "longitude" => @lon,
96
+ "longitude" => @lon,
64
97
  "address" => address,
65
98
  "near_station" => near_station,
66
99
  "google_map" => @google_map_url
67
100
  }
68
101
  end
69
102
 
70
- # Returns attributes with JSON format.
103
+ # @return [JSON] attributes with JSON format.
71
104
  def to_json
72
105
  JSON.pretty_generate(to_h)
73
106
  end
@@ -1,3 +1,3 @@
1
1
  module Machiawase
2
- VERSION = "0.3.6"
2
+ VERSION = "0.4.0"
3
3
  end
data/machiawase.gemspec CHANGED
@@ -16,8 +16,8 @@ Gem::Specification.new do |gem|
16
16
  gem.version = Machiawase::VERSION
17
17
 
18
18
  gem.add_dependency "nokogiri"
19
- gem.add_development_dependency "rspec"
20
- gem.add_development_dependency "ZenTest"
21
- gem.add_development_dependency "autotest-fsevent"
22
- gem.add_development_dependency "autotest-growl"
23
- end
19
+ gem.add_development_dependency "guard-minitest"
20
+ gem.add_development_dependency "rb-fsevent"
21
+ gem.add_development_dependency "minitest-reporters"
22
+ gem.add_development_dependency "growl"
23
+ end
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
3
+ require 'spec_helper'
4
+
5
+ describe Machiawase::Place do
6
+ describe ':address' do
7
+ it 'returns 神奈川県横浜市中区真砂町1丁目9 with "35.4437078, 139.6380256"' do
8
+ Machiawase::Place.new(35.4437078, 139.6380256).address.must_equal("神奈川県横浜市中区真砂町1丁目9")
9
+ end
10
+ end
11
+
12
+ describe 'geocode' do
13
+ it 'returns {lat => 35.4437978, lon => 139.6380256} with 横浜' do
14
+ Machiawase::Place.geocode('横浜').must_equal({"lat" => 35.4437078, "lon" => 139.6380256})
15
+ end
16
+ end
17
+
18
+ describe 'near_station' do
19
+ it 'returns 関内駅 with 横浜' do
20
+ Machiawase::Place.new(35.4437978, 139.6380256).near_station.must_equal("関内駅")
21
+ end
22
+ end
23
+
24
+ describe "parse_proxy" do
25
+ it 'responds' do
26
+ Machiawase::Place.must_respond_to("parse_proxy")
27
+ end
28
+
29
+ it 'returns Hash' do
30
+ Machiawase::Place.parse_proxy(nil).must_be_kind_of(Hash)
31
+ end
32
+
33
+ it 'includes "host"' do
34
+ Machiawase::Place.parse_proxy(nil).must_include("host")
35
+ end
36
+
37
+ it 'includes "port"' do
38
+ Machiawase::Place.parse_proxy(nil).must_include("port")
39
+ end
40
+
41
+ it 'includes "user"' do
42
+ Machiawase::Place.parse_proxy(nil).must_include("user")
43
+ end
44
+
45
+ it 'includes "pass"' do
46
+ Machiawase::Place.parse_proxy(nil).must_include("pass")
47
+ end
48
+
49
+ it 'returns correct hash with "user:pass@host:port"' do
50
+ Machiawase::Place.parse_proxy(
51
+ "user:pass@host:port"
52
+ ).must_equal({
53
+ "server" => "http://host:port",
54
+ "host" => "host",
55
+ "port" => "port",
56
+ "user" => "user",
57
+ "pass" => "pass"
58
+ })
59
+ end
60
+
61
+ it 'returns correct hash with "host:port"' do
62
+ Machiawase::Place.parse_proxy(
63
+ "host:port"
64
+ ).must_equal({
65
+ "server" => "http://host:port",
66
+
67
+ "host" => "host",
68
+ "port" => "port",
69
+ "user" => "",
70
+ "pass" => ""
71
+ })
72
+ end
73
+
74
+ it 'returns correct hash with nil' do
75
+ Machiawase::Place.parse_proxy(nil).must_equal(
76
+ {
77
+ "server" => nil,
78
+ "host" => nil,
79
+ "port" => nil,
80
+ "user" => "",
81
+ "pass" => ""
82
+ })
83
+ end
84
+ end
85
+ end
86
+
@@ -1,40 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
2
  # -*- coding: utf-8 -*-
3
- require 'machiawase'
3
+ require 'spec_helper'
4
4
 
5
5
  describe Machiawase do
6
-
7
6
  describe 'where' do
8
- context '横浜, 東京' do
7
+ describe '横浜, 東京' do
9
8
  it 'should be Place' do
10
- Machiawase.where("横浜", "東京").class.should eq(Machiawase::Place)
11
- end
12
- end
13
- end
14
-
15
- end
16
-
17
- describe Machiawase::Place do
18
- describe ':address' do
19
- context '35.4437078, 139.6380256' do
20
- it 'should be 神奈川県横浜市中区真砂町1丁目9' do
21
- Machiawase::Place.new(35.4437078, 139.6380256).address.should eq("神奈川県横浜市中区真砂町1丁目9")
22
- end
23
- end
24
- end
25
-
26
- describe 'geocode' do
27
- context '横浜' do
28
- it 'should be {lat => 35.4437978, lon => 139.6380256}' do
29
- Machiawase::Place.geocode('横浜').should eq ({"lat" => 35.4437078, "lon" => 139.6380256})
30
- end
31
- end
32
- end
33
-
34
- describe 'near_station' do
35
- context '横浜' do
36
- it 'should be 関内駅' do
37
- Machiawase::Place.new(35.4437978, 139.6380256).near_station.should eq ("関内駅")
9
+ Machiawase.where("横浜", "東京").class.must_equal(Machiawase::Place)
38
10
  end
39
11
  end
40
12
  end
@@ -46,34 +18,34 @@ describe Machiawase::Rendezvous do
46
18
  end
47
19
 
48
20
  describe ":centroid" do
49
- context '(0, 0), (1, 1)' do
21
+ describe '(0, 0), (1, 1)' do
50
22
  it 'should be (0.5, 0.5)' do
51
23
  place_a = Machiawase::Place.new(0, 0)
52
24
  place_b = Machiawase::Place.new(1, 1)
53
- @machiawase.send(:centroid, *[place_a, place_b]).should eq([0.5, 0.5])
25
+ @machiawase.send(:centroid, *[place_a, place_b]).must_equal([0.5, 0.5])
54
26
  end
55
27
  end
56
- context '(0, 0), (1, 1), (2, 2)' do
28
+ describe '(0, 0), (1, 1), (2, 2)' do
57
29
  it 'should be (1, 1)' do
58
30
  place_a = Machiawase::Place.new(0, 0)
59
31
  place_b = Machiawase::Place.new(1, 1)
60
32
  place_c = Machiawase::Place.new(2, 2)
61
- @machiawase.send(:centroid, *[place_a, place_b, place_c]).should eq([1, 1])
33
+ @machiawase.send(:centroid, *[place_a, place_b, place_c]).must_equal([1, 1])
62
34
  end
63
35
  end
64
- context '(0, 0), (2, 0), (2, 2), (0, 2)' do
36
+ describe '(0, 0), (2, 0), (2, 2), (0, 2)' do
65
37
  it 'should be (1, 1)' do
66
38
  place_a = Machiawase::Place.new(0, 0)
67
39
  place_b = Machiawase::Place.new(2, 0)
68
40
  place_c = Machiawase::Place.new(2, 2)
69
41
  place_d = Machiawase::Place.new(0, 2)
70
- @machiawase.send(:centroid, *[place_a, place_b, place_c, place_d]).should eq([1, 1])
42
+ @machiawase.send(:centroid, *[place_a, place_b, place_c, place_d]).must_equal([1, 1])
71
43
  end
72
44
  end
73
45
  end
74
46
 
75
47
  describe ':middle_of' do
76
- context '横浜, 東京' do
48
+ describe '横浜, 東京' do
77
49
  it 'should be Place' do
78
50
  g1 = Machiawase::Place.geocode("横浜")
79
51
  p1 = Machiawase::Place.new(g1['lat'], g1['lon'])
@@ -81,7 +53,7 @@ describe Machiawase::Rendezvous do
81
53
  g2 = Machiawase::Place.geocode("東京")
82
54
  p2 = Machiawase::Place.new(g2['lat'], g2['lon'])
83
55
 
84
- @machiawase.send(:middle_of, p1, p2).class.should eq(Machiawase::Place)
56
+ @machiawase.send(:middle_of, p1, p2).class.must_equal(Machiawase::Place)
85
57
  end
86
58
  end
87
59
  end
@@ -0,0 +1,5 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/reporters'
3
+
4
+ require 'machiawase'
5
+ MiniTest::Reporters.use! [MiniTest::Reporters::SpecReporter.new, MiniTest::Reporters::GuardReporter.new]
metadata CHANGED
@@ -1,94 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: machiawase
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
5
- prerelease:
4
+ version: 0.4.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - zakuni
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-17 00:00:00.000000000 Z
11
+ date: 2013-03-03 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: nokogiri
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
- name: rspec
28
+ name: guard-minitest
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
- name: ZenTest
42
+ name: rb-fsevent
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
- name: autotest-fsevent
56
+ name: minitest-reporters
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
- name: autotest-growl
70
+ name: growl
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  description: provides command line usage and library to get a middle point of plural
@@ -103,7 +92,7 @@ files:
103
92
  - .autotest
104
93
  - .gitignore
105
94
  - Gemfile
106
- - Gemfile.lock
95
+ - Guardfile
107
96
  - LICENSE
108
97
  - README.md
109
98
  - Rakefile
@@ -113,31 +102,33 @@ files:
113
102
  - lib/machiawase/place.rb
114
103
  - lib/machiawase/version.rb
115
104
  - machiawase.gemspec
105
+ - spec/machiawase/place_spec.rb
116
106
  - spec/machiawase_spec.rb
107
+ - spec/spec_helper.rb
117
108
  homepage: http://zakuni.github.com/machiawase/
118
109
  licenses: []
110
+ metadata: {}
119
111
  post_install_message:
120
112
  rdoc_options: []
121
113
  require_paths:
122
114
  - lib
123
115
  required_ruby_version: !ruby/object:Gem::Requirement
124
- none: false
125
116
  requirements:
126
- - - ! '>='
117
+ - - '>='
127
118
  - !ruby/object:Gem::Version
128
119
  version: '0'
129
120
  required_rubygems_version: !ruby/object:Gem::Requirement
130
- none: false
131
121
  requirements:
132
- - - ! '>='
122
+ - - '>='
133
123
  - !ruby/object:Gem::Version
134
124
  version: '0'
135
125
  requirements: []
136
126
  rubyforge_project:
137
- rubygems_version: 1.8.23
127
+ rubygems_version: 2.0.0
138
128
  signing_key:
139
- specification_version: 3
129
+ specification_version: 4
140
130
  summary: finds a middle point of plural points
141
131
  test_files:
132
+ - spec/machiawase/place_spec.rb
142
133
  - spec/machiawase_spec.rb
143
- has_rdoc:
134
+ - spec/spec_helper.rb