cpa 0.0.1
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/Rakefile +20 -0
- data/bin/cpa +90 -0
- data/cpa.gemspec +23 -0
- data/test/cpa.rb +45 -0
- metadata +81 -0
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
task :db do
|
4
|
+
require "net/http/persistent"
|
5
|
+
|
6
|
+
http = Net::HTTP::Persistent.new
|
7
|
+
|
8
|
+
%w[A B C D E F G H J K L M N P Q R S T U V W X Y Z].each do |provincia|
|
9
|
+
res = http.request(URI.parse("http://www.correoargentino.com.ar/consultas/cpa/obtener_localidades/#{provincia}")).body
|
10
|
+
|
11
|
+
File.open("db/#{provincia}", "w") do |file|
|
12
|
+
res.scan(/option value=.(\d+).+>(.+?)</) do |id, name|
|
13
|
+
file.write(id)
|
14
|
+
file.write(" ")
|
15
|
+
file.write(name.gsub("Ñ", "Ñ"))
|
16
|
+
file.write("\n")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/bin/cpa
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
PROVINCIAS = {
|
5
|
+
"capital federal" => "C",
|
6
|
+
"caba" => "C",
|
7
|
+
"ciudad autonoma de buenos aires" => "C",
|
8
|
+
"buenos aires" => "B",
|
9
|
+
"catamarca" => "K",
|
10
|
+
"chaco" => "H",
|
11
|
+
"chubut" => "U",
|
12
|
+
"cordoba" => "X",
|
13
|
+
"corrientes" => "W",
|
14
|
+
"entre rios" => "E",
|
15
|
+
"formosa" => "P",
|
16
|
+
"jujuy" => "Y",
|
17
|
+
"la pampa" => "L",
|
18
|
+
"la rioja" => "F",
|
19
|
+
"mendoza" => "M",
|
20
|
+
"misiones" => "N",
|
21
|
+
"neuquen" => "Q",
|
22
|
+
"rio negro" => "R",
|
23
|
+
"salta" => "A",
|
24
|
+
"san juan" => "J",
|
25
|
+
"san luis" => "D",
|
26
|
+
"santa cruz" => "Z",
|
27
|
+
"santa fe" => "S",
|
28
|
+
"santiago del estero" => "G",
|
29
|
+
"tierra del fuego" => "V",
|
30
|
+
"tucuman" => "T"
|
31
|
+
}
|
32
|
+
|
33
|
+
trap(:INT) { exit 1 }
|
34
|
+
|
35
|
+
def flunk(message)
|
36
|
+
$stderr.puts message
|
37
|
+
exit 1
|
38
|
+
end
|
39
|
+
|
40
|
+
def simplify(str)
|
41
|
+
str.downcase.tr("áéíóú", "aeiou")
|
42
|
+
end
|
43
|
+
|
44
|
+
def parse(line)
|
45
|
+
flunk("Error: nada que buscar.") if line.nil? || line.empty?
|
46
|
+
|
47
|
+
parts = line.split(/,\s*/)
|
48
|
+
|
49
|
+
flunk("Error: no se encontró la provincia.") if parts.size < 2
|
50
|
+
|
51
|
+
if parts[0] =~ /^(?:Av |Avenida )?(.+?) (\d+)$/
|
52
|
+
calle = $1
|
53
|
+
altura = $2
|
54
|
+
end
|
55
|
+
|
56
|
+
provincia = PROVINCIAS[simplify(parts[-1])] ||
|
57
|
+
flunk("Error: no se encontró la provincia '#{parts[-1]}'.")
|
58
|
+
|
59
|
+
if provincia == "C"
|
60
|
+
localidad = "5001"
|
61
|
+
else
|
62
|
+
localidad = File.open("db/#{provincia}") do |io|
|
63
|
+
while line = io.gets
|
64
|
+
id, name = line.split(" ", 2)
|
65
|
+
|
66
|
+
break id if name.start_with?(parts[-2].upcase)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
require "net/http/persistent"
|
72
|
+
|
73
|
+
http = Net::HTTP::Persistent.new
|
74
|
+
|
75
|
+
post = Net::HTTP::Post.new("/consultas/cpa/obtener_cpa")
|
76
|
+
post.body = "localidad=#{localidad}&calle=#{http.escape(simplify(calle))}&altura=#{http.escape(altura)}"
|
77
|
+
http.request(URI.parse("http://www.correoargentino.com.ar"), post).body[/[A-Z]\d{4}[A-Z]{3}/]
|
78
|
+
end
|
79
|
+
|
80
|
+
###
|
81
|
+
|
82
|
+
if ARGV.first == "-"
|
83
|
+
$stdout.sync = true
|
84
|
+
|
85
|
+
while line = gets
|
86
|
+
puts parse(line.chomp)
|
87
|
+
end
|
88
|
+
else
|
89
|
+
puts parse(ARGV.first)
|
90
|
+
end
|
data/cpa.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "cpa"
|
3
|
+
s.version = "0.0.1"
|
4
|
+
s.summary = "A CLI tool to query Argentinean zip codes."
|
5
|
+
s.authors = ["Damian Janowski"]
|
6
|
+
s.email = ["djanowski@dimaion.com"]
|
7
|
+
s.homepage = "http://github.com/djanowski/cpa"
|
8
|
+
|
9
|
+
s.add_dependency("net-http-persistent")
|
10
|
+
s.add_development_dependency("cutest")
|
11
|
+
|
12
|
+
s.executables << "cpa"
|
13
|
+
|
14
|
+
s.files = Dir[
|
15
|
+
"*.gemspec",
|
16
|
+
"LICENSE",
|
17
|
+
"README*",
|
18
|
+
"Rakefile",
|
19
|
+
"bin/*",
|
20
|
+
"lib/**/*.rb",
|
21
|
+
"test/*.*",
|
22
|
+
]
|
23
|
+
end
|
data/test/cpa.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
require "cutest"
|
4
|
+
require "open3"
|
5
|
+
|
6
|
+
test "CABA" do
|
7
|
+
assert_equal `./bin/cpa 'Lavalleja 795, Capital Federal'`, "C1414DTO\n"
|
8
|
+
assert_equal `./bin/cpa 'Lavalleja 795, CABA'`, "C1414DTO\n"
|
9
|
+
assert_equal `./bin/cpa 'Lavalleja 795, Ciudad Autónoma de Buenos Aires'`, "C1414DTO\n"
|
10
|
+
end
|
11
|
+
|
12
|
+
test "Interior" do
|
13
|
+
assert_equal `./bin/cpa 'Independencia 333, Sunchales, Santa Fe'`, "S2322AWD\n"
|
14
|
+
assert_equal `./bin/cpa 'Av Independencia 333, Sunchales, Santa Fe'`, "S2322AWD\n"
|
15
|
+
assert_equal `./bin/cpa 'Avenida Independencia 333, Sunchales, Santa Fe'`, "S2322AWD\n"
|
16
|
+
end
|
17
|
+
|
18
|
+
test "stdin" do
|
19
|
+
Open3.popen3("./bin/cpa -") do |stdin, stdout|
|
20
|
+
stdin.puts "Amenábar 1294, Capital Federal"
|
21
|
+
assert_equal "C1426AJV\n", stdout.gets
|
22
|
+
stdin.puts "Aguirre 230, Capital Federal"
|
23
|
+
assert_equal "C1414ASF\n", stdout.gets
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
test "errors" do
|
28
|
+
Open3.popen3("./bin/cpa 'Lavalleja 795'") do |_, stdout, stderr, wait|
|
29
|
+
assert stdout.read.empty?
|
30
|
+
assert stderr.read =~ /Error: no se encontró la provincia/
|
31
|
+
assert !wait.value.success?
|
32
|
+
end
|
33
|
+
|
34
|
+
Open3.popen3("./bin/cpa 'Lavalleja 795, New York'") do |_, stdout, stderr, wait|
|
35
|
+
assert stdout.read.empty?
|
36
|
+
assert stderr.read =~ /Error: no se encontró la provincia 'New York'/
|
37
|
+
assert !wait.value.success?
|
38
|
+
end
|
39
|
+
|
40
|
+
Open3.popen3("./bin/cpa") do |_, stdout, stderr, wait|
|
41
|
+
assert stdout.read.empty?
|
42
|
+
assert stderr.read =~ /Error: nada que buscar/
|
43
|
+
assert !wait.value.success?
|
44
|
+
end
|
45
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cpa
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Damian Janowski
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-06-19 00:00:00 -03:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: net-http-persistent
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: cutest
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: "0"
|
36
|
+
type: :development
|
37
|
+
version_requirements: *id002
|
38
|
+
description:
|
39
|
+
email:
|
40
|
+
- djanowski@dimaion.com
|
41
|
+
executables:
|
42
|
+
- cpa
|
43
|
+
extensions: []
|
44
|
+
|
45
|
+
extra_rdoc_files: []
|
46
|
+
|
47
|
+
files:
|
48
|
+
- cpa.gemspec
|
49
|
+
- Rakefile
|
50
|
+
- bin/cpa
|
51
|
+
- test/cpa.rb
|
52
|
+
has_rdoc: true
|
53
|
+
homepage: http://github.com/djanowski/cpa
|
54
|
+
licenses: []
|
55
|
+
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: "0"
|
73
|
+
requirements: []
|
74
|
+
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 1.6.2
|
77
|
+
signing_key:
|
78
|
+
specification_version: 3
|
79
|
+
summary: A CLI tool to query Argentinean zip codes.
|
80
|
+
test_files: []
|
81
|
+
|