correios-sro-xml 0.0.0 → 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/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