machiawase 0.3.6 → 0.4.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.
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