correios-sro-xml 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc ADDED
@@ -0,0 +1,2 @@
1
+ == Versão 0.0.1
2
+ - Primeira versão funcional, mas ainda instável.
data/README.rdoc CHANGED
@@ -1,6 +1,8 @@
1
1
  = correios-sro-xml
2
2
 
3
- Sistema de Rastreamento de Objetos dos Correios (SRO).
3
+ Sistema de Rastreamento de Objetos dos Correios (SRO) utilizando o Web Service SRO XML, que permite a consulta de ate 50 encomendas simultaneamente.
4
+
5
+ <b>Atenção:</b> esta gem já está funcional, mas ainda não é uma versão estável.
4
6
 
5
7
  == Instalando
6
8
 
@@ -15,9 +17,28 @@ Sistema de Rastreamento de Objetos dos Correios (SRO).
15
17
 
16
18
  require 'correios-sro-xml'
17
19
 
18
- sro = Correios::SRO::Rastreador.new
20
+ sro = Correios::SRO::Rastreador.new :usuario => "ECT", :senha => "SRO"
21
+
22
+ Rastreamento de um objeto:
23
+
24
+ objeto = sro.consultar("SI047624825BR")
25
+ objeto.numero # => "SI047624825BR"
26
+ objeto.eventos.first.data # => "26/12/2011"
27
+ objeto.eventos.first.local # => "AC CENTRAL DE SAO PAULO"
28
+ objeto.eventos.first.descricao # => "Entregue"
29
+
30
+ Rastreamento de vários objetos:
31
+ objetos = sro.consultar("SI047624825BR", "SX104110463BR")
32
+
33
+ objetos["SI047624825BR"].numero # => "SI047624825BR"
34
+ objetos["SI047624825BR"].eventos.first.data # => "26/12/2011"
35
+ objetos["SI047624825BR"].eventos.first.local # => "AC CENTRAL DE SAO PAULO"
36
+ objetos["SI047624825BR"].eventos.first.descricao # => "Entregue"
19
37
 
20
- # Ainda não foi implementado.
38
+ objetos["SX104110463BR"].numero # => "SX104110463BR"
39
+ objetos["SX104110463BR"].eventos.first.data # => "08/12/2011"
40
+ objetos["SX104110463BR"].eventos.first.local # => "CEE JUNDIAI"
41
+ objetos["SX104110463BR"].eventos.first.descricao # => "Entregue"
21
42
 
22
43
 
23
44
  == Autor
data/Rakefile CHANGED
@@ -17,8 +17,8 @@ Jeweler::Tasks.new do |gem|
17
17
  gem.name = "correios-sro-xml"
18
18
  gem.homepage = "http://github.com/prodis/correios-sro-xml"
19
19
  gem.license = "MIT"
20
- gem.summary = %Q{Sistema de Rastreamento de Objetos dos Correios (SRO)}
21
- gem.description = %Q{Sistema de Rastreamento de Objetos dos Correios (SRO)}
20
+ gem.summary = %Q{Sistema de Rastreamento de Objetos dos Correios (SRO).}
21
+ gem.description = %Q{Sistema de Rastreamento de Objetos dos Correios (SRO) utilizando o Web Service SRO XML, que permite a consulta de ate 50 encomendas simultaneamente.}
22
22
  gem.email = "prodis@gmail.com"
23
23
  gem.authors = ["Prodis a.k.a. Fernando Hamasaki"]
24
24
  gem.version = Correios::SRO::Version::VERSION
@@ -42,5 +42,6 @@ Rake::RDocTask.new do |rdoc|
42
42
  rdoc.rdoc_dir = 'rdoc'
43
43
  rdoc.title = "correios-sro-xml #{version}"
44
44
  rdoc.rdoc_files.include('README*')
45
+ rdoc.rdoc_files.include('CHANGELOG*')
45
46
  rdoc.rdoc_files.include('lib/**/*.rb')
46
47
  end
@@ -5,18 +5,19 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "correios-sro-xml"
8
- s.version = "0.0.0"
8
+ s.version = "0.0.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Prodis a.k.a. Fernando Hamasaki"]
12
- s.date = "2012-01-28"
13
- s.description = "Sistema de Rastreamento de Objetos dos Correios (SRO)"
12
+ s.date = "2012-01-30"
13
+ s.description = "Sistema de Rastreamento de Objetos dos Correios (SRO) utilizando o Web Service SRO XML, que permite a consulta de ate 50 encomendas simultaneamente."
14
14
  s.email = "prodis@gmail.com"
15
15
  s.extra_rdoc_files = [
16
16
  "README.rdoc"
17
17
  ]
18
18
  s.files = [
19
19
  ".rspec",
20
+ "CHANGELOG.rdoc",
20
21
  "Gemfile",
21
22
  "Gemfile.lock",
22
23
  "README.rdoc",
@@ -24,9 +25,15 @@ Gem::Specification.new do |s|
24
25
  "correios-sro-xml.gemspec",
25
26
  "lib/correios-sro-xml.rb",
26
27
  "lib/correios/sro.rb",
28
+ "lib/correios/sro/destino.rb",
29
+ "lib/correios/sro/evento.rb",
30
+ "lib/correios/sro/objeto.rb",
31
+ "lib/correios/sro/parser.rb",
27
32
  "lib/correios/sro/rastreador.rb",
28
33
  "lib/correios/sro/version.rb",
34
+ "lib/correios/sro/web_service.rb",
29
35
  "spec/correios/sro/rastreador_spec.rb",
36
+ "spec/correios/sro/web_service_spec.rb",
30
37
  "spec/spec_helper.rb"
31
38
  ]
32
39
  s.homepage = "http://github.com/prodis/correios-sro-xml"
@@ -34,7 +41,7 @@ Gem::Specification.new do |s|
34
41
  s.require_paths = ["lib"]
35
42
  s.required_ruby_version = Gem::Requirement.new(">= 1.8.7")
36
43
  s.rubygems_version = "1.8.11"
37
- s.summary = "Sistema de Rastreamento de Objetos dos Correios (SRO)"
44
+ s.summary = "Sistema de Rastreamento de Objetos dos Correios (SRO)."
38
45
 
39
46
  if s.respond_to? :specification_version then
40
47
  s.specification_version = 3
@@ -1,4 +1,9 @@
1
1
  # encoding: UTF-8
2
2
  require 'rubygems'
3
3
  require 'correios/sro'
4
+ require 'correios/sro/destino'
5
+ require 'correios/sro/evento'
6
+ require 'correios/sro/objeto'
7
+ require 'correios/sro/parser'
4
8
  require 'correios/sro/rastreador'
9
+ require 'correios/sro/web_service'
@@ -0,0 +1,16 @@
1
+ # encoding: UTF-8
2
+ require 'sax-machine'
3
+
4
+ module Correios
5
+ module SRO
6
+ class Destino
7
+ include SAXMachine
8
+
9
+ element :local
10
+ element :codigo
11
+ element :cidade
12
+ element :bairro
13
+ element :uf
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: UTF-8
2
+ require 'sax-machine'
3
+
4
+ module Correios
5
+ module SRO
6
+ class Evento
7
+ include SAXMachine
8
+
9
+ element :tipo
10
+ element :status
11
+ element :data
12
+ element :descricao
13
+ element :recebedor
14
+ element :documento
15
+ element :comentario
16
+ element :local
17
+ element :codigo
18
+ element :cidade
19
+ element :uf
20
+ element :sto
21
+ element :destino, :class => Correios::SRO::Destino
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: UTF-8
2
+ require 'sax-machine'
3
+
4
+ module Correios
5
+ module SRO
6
+ class Objeto
7
+ include SAXMachine
8
+
9
+ element :numero
10
+ elements :evento, :as => :eventos, :class => Correios::SRO::Evento
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: UTF-8
2
+ require 'nokogiri'
3
+
4
+ module Correios
5
+ module SRO
6
+ class Parser
7
+ def objetos(xml)
8
+ objetos = {}
9
+
10
+ doc = Nokogiri::XML(xml)
11
+ doc.xpath("//objeto").each do |element|
12
+ objeto = Correios::SRO::Objeto.parse(element.to_xml)
13
+ objetos[objeto.numero] = objeto
14
+ end
15
+
16
+ objetos
17
+ end
18
+ end
19
+ end
20
+ end
@@ -2,6 +2,42 @@
2
2
  module Correios
3
3
  module SRO
4
4
  class Rastreador
5
+ attr_accessor :usuario, :senha
6
+ attr_accessor :tipo, :resultado
7
+ attr_reader :objetos
8
+
9
+ DEFAULT_OPTIONS = { :tipo => :lista, :resultado => :ultimo }
10
+
11
+ def initialize(options = {})
12
+ DEFAULT_OPTIONS.merge(options).each do |attr, value|
13
+ self.send("#{attr}=", value)
14
+ end
15
+
16
+ yield self if block_given?
17
+ @objetos = []
18
+ end
19
+
20
+ def consultar(*object_numbers)
21
+ @objetos = object_numbers
22
+ response = web_service.request(self)
23
+ objects = parser.objetos(response)
24
+
25
+ if objects.size == 1
26
+ objects.values.first
27
+ else
28
+ objects
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def web_service
35
+ @web_service ||= Correios::SRO::WebService.new
36
+ end
37
+
38
+ def parser
39
+ @parser ||= Correios::SRO::Parser.new
40
+ end
5
41
  end
6
42
  end
7
43
  end
@@ -4,7 +4,7 @@ module Correios
4
4
  module Version
5
5
  MAJOR = 0
6
6
  MINOR = 0
7
- PATCH = 0
7
+ PATCH = 1
8
8
  VERSION = [MAJOR, MINOR, PATCH].join(".")
9
9
  end
10
10
  end
@@ -0,0 +1,34 @@
1
+ # encoding: UTF-8
2
+ require 'net/http'
3
+ require 'uri'
4
+
5
+ module Correios
6
+ module SRO
7
+ class WebService
8
+ URL = "http://websro.correios.com.br/sro_bin/sroii_xml.eventos"
9
+ TYPES = { :lista => "L", :intervalor => "F" }
10
+ RESULTS = { :todos => "T", :ultimo => "U" }
11
+
12
+ def initialize
13
+ @uri = URI.parse(URL)
14
+ end
15
+
16
+ def request(sro)
17
+ response = Net::HTTP.post_form(@uri, params_for(sro))
18
+ response.body
19
+ end
20
+
21
+ private
22
+
23
+ def params_for(sro)
24
+ {
25
+ :Usuario => sro.usuario,
26
+ :Senha => sro.senha,
27
+ :Tipo => TYPES[sro.tipo],
28
+ :Resultado => RESULTS[sro.resultado],
29
+ :Objetos => sro.objetos.join
30
+ }
31
+ end
32
+ end
33
+ end
34
+ end
@@ -3,9 +3,48 @@ require 'spec_helper'
3
3
 
4
4
  describe Correios::SRO::Rastreador do
5
5
  describe ".new" do
6
- it "creates new tracker" do
7
- sro = Correios::SRO::Rastreador.new
8
- sro.should_not be_nil
6
+ context "creates with default value of" do
7
+ before(:each) { @sro = Correios::SRO::Rastreador.new }
8
+
9
+ { :tipo => :lista,
10
+ :resultado => :ultimo,
11
+ :objetos => []
12
+ }.each do |attr, value|
13
+ it attr do
14
+ @sro.send(attr).should == value
15
+ end
16
+ end
17
+ end
18
+
19
+ { :usuario => "USUARIO",
20
+ :senha => "SENHA",
21
+ :tipo => :intervalo,
22
+ :resultado => :todos
23
+ }.each do |attr, value|
24
+ context "when #{attr} is supplied" do
25
+ it "sets #{attr}" do
26
+ sro = Correios::SRO::Rastreador.new(attr => value)
27
+ sro.send(attr).should == value
28
+ end
29
+ end
30
+
31
+ context "when #{attr} is supplied in a block" do
32
+ it "sets #{attr}" do
33
+ sro = Correios::SRO::Rastreador.new { |f| f.send("#{attr}=", value) }
34
+ sro.send(attr).should == value
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ describe "#consultar" do
41
+ before(:each) { @sro = Correios::SRO::Rastreador.new :usuario => "USUARIO", :senha => "SENHA" }
42
+
43
+ it "sets objetos" do
44
+ @sro.consultar("SQ458226057B", "RA132678652BR")
45
+ @sro.objetos.size.should == 2
46
+ @sro.objetos.first.should == "SQ458226057B"
47
+ @sro.objetos.last.should == "RA132678652BR"
9
48
  end
10
49
  end
11
50
  end
@@ -0,0 +1,5 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ describe Correios::SRO::WebService do
5
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: correios-sro-xml
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.0
5
+ version: 0.0.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Prodis a.k.a. Fernando Hamasaki
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-01-28 00:00:00 Z
13
+ date: 2012-01-30 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: log-me
@@ -111,7 +111,7 @@ dependencies:
111
111
  type: :development
112
112
  prerelease: false
113
113
  version_requirements: *id009
114
- description: Sistema de Rastreamento de Objetos dos Correios (SRO)
114
+ description: Sistema de Rastreamento de Objetos dos Correios (SRO) utilizando o Web Service SRO XML, que permite a consulta de ate 50 encomendas simultaneamente.
115
115
  email: prodis@gmail.com
116
116
  executables: []
117
117
 
@@ -121,6 +121,7 @@ extra_rdoc_files:
121
121
  - README.rdoc
122
122
  files:
123
123
  - .rspec
124
+ - CHANGELOG.rdoc
124
125
  - Gemfile
125
126
  - Gemfile.lock
126
127
  - README.rdoc
@@ -128,9 +129,15 @@ files:
128
129
  - correios-sro-xml.gemspec
129
130
  - lib/correios-sro-xml.rb
130
131
  - lib/correios/sro.rb
132
+ - lib/correios/sro/destino.rb
133
+ - lib/correios/sro/evento.rb
134
+ - lib/correios/sro/objeto.rb
135
+ - lib/correios/sro/parser.rb
131
136
  - lib/correios/sro/rastreador.rb
132
137
  - lib/correios/sro/version.rb
138
+ - lib/correios/sro/web_service.rb
133
139
  - spec/correios/sro/rastreador_spec.rb
140
+ - spec/correios/sro/web_service_spec.rb
134
141
  - spec/spec_helper.rb
135
142
  homepage: http://github.com/prodis/correios-sro-xml
136
143
  licenses:
@@ -158,6 +165,6 @@ rubyforge_project:
158
165
  rubygems_version: 1.8.11
159
166
  signing_key:
160
167
  specification_version: 3
161
- summary: Sistema de Rastreamento de Objetos dos Correios (SRO)
168
+ summary: Sistema de Rastreamento de Objetos dos Correios (SRO).
162
169
  test_files: []
163
170