cadun 0.6.3 → 0.8.3

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 399f65d6c228bfd42251428d958eef3b70d4e9ed
4
+ data.tar.gz: 8fe58a64bbc8c0122e9c007bc6b46fd1dfbe3a1f
5
+ SHA512:
6
+ metadata.gz: b841555e589ba6e287a992667cda4be58b764f28fabe1508bb4d8046a210e74753c0f06a2fa09706100ba69a2e0af59261dd4b2f22ad84dfcd323b59ed961a77
7
+ data.tar.gz: 6eab8517c5641d4f4ff0bf431201c886b1dd284b2caf4e454d95df07133a357bc75023dd687b052606d9fb9c90aab73f779eca78d21fefb32927ac732d1474a4
data/.gitignore CHANGED
@@ -1,5 +1,4 @@
1
1
  *.gem
2
2
  .bundle
3
- .rvmrc
4
- Gemfile.lock
5
3
  pkg/*
4
+ vendor/ruby
data/.rvmrc ADDED
@@ -0,0 +1,6 @@
1
+ rvm 1.9.2@ruby-cadun
2
+
3
+ if [ ! -x "`which bundle`" ]; then
4
+ gem install bundler
5
+ bundle
6
+ fi
@@ -0,0 +1,58 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ cadun (0.8.3)
5
+ activesupport (>= 3.0.0)
6
+ builder (>= 2.1.2)
7
+ i18n
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ activesupport (3.2.9)
13
+ i18n (~> 0.6)
14
+ multi_json (~> 1.0)
15
+ addressable (2.3.2)
16
+ archive-tar-minitar (0.5.2)
17
+ builder (3.1.4)
18
+ columnize (0.3.6)
19
+ crack (0.3.1)
20
+ diff-lcs (1.1.3)
21
+ i18n (0.6.1)
22
+ linecache19 (0.5.12)
23
+ ruby_core_source (>= 0.1.4)
24
+ multi_json (1.4.0)
25
+ rake (10.0.2)
26
+ rr (1.0.4)
27
+ rspec (2.12.0)
28
+ rspec-core (~> 2.12.0)
29
+ rspec-expectations (~> 2.12.0)
30
+ rspec-mocks (~> 2.12.0)
31
+ rspec-core (2.12.1)
32
+ rspec-expectations (2.12.0)
33
+ diff-lcs (~> 1.1.3)
34
+ rspec-mocks (2.12.0)
35
+ ruby-debug-base19 (0.11.25)
36
+ columnize (>= 0.3.1)
37
+ linecache19 (>= 0.5.11)
38
+ ruby_core_source (>= 0.1.4)
39
+ ruby-debug19 (0.11.6)
40
+ columnize (>= 0.3.1)
41
+ linecache19 (>= 0.5.11)
42
+ ruby-debug-base19 (>= 0.11.19)
43
+ ruby_core_source (0.1.5)
44
+ archive-tar-minitar (>= 0.5.2)
45
+ webmock (1.9.0)
46
+ addressable (>= 2.2.7)
47
+ crack (>= 0.1.7)
48
+
49
+ PLATFORMS
50
+ ruby
51
+
52
+ DEPENDENCIES
53
+ cadun!
54
+ rake
55
+ rr
56
+ rspec
57
+ ruby-debug19
58
+ webmock
@@ -4,7 +4,7 @@ require 'curb'
4
4
  require 'restclient'
5
5
 
6
6
  n = 100
7
- url = "http://isp-authenticator.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/email/fab1@spam.la"
7
+ url = "http://autenticacao.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/email/fab1@spam.la"
8
8
 
9
9
  Benchmark.bm do |x|
10
10
  x.report("restclient") { n.times { RestClient.get(url) } }
@@ -5,8 +5,8 @@ Gem::Specification.new do |s|
5
5
  s.name = 'cadun'
6
6
  s.version = Cadun::VERSION::STRING
7
7
  s.platform = Gem::Platform::RUBY
8
- s.authors = %w(Bruno Azisaka Maciel)
9
- s.email = %w(bruno@azisaka.com.br)
8
+ s.authors = %w(Cadun)
9
+ s.email = %w(cadun@corp.globo.com)
10
10
  s.homepage = ''
11
11
  s.summary = "A wrapper for the Globo.com's authentication/authorization API"
12
12
  s.description = "A wrapper for the Globo.com's authentication/authorization API"
@@ -14,11 +14,11 @@ Gem::Specification.new do |s|
14
14
  s.files = `git ls-files`.split("\n")
15
15
  s.test_files = `git ls-files -- {spec}/*`.split("\n")
16
16
  s.require_paths = %w(lib)
17
-
17
+
18
18
  s.add_dependency 'i18n'
19
19
  s.add_dependency 'activesupport', '>= 3.0.0'
20
20
  s.add_dependency 'builder', '>= 2.1.2'
21
- s.add_dependency 'curb'
21
+ s.add_development_dependency "ruby-debug19"
22
22
  s.add_development_dependency 'rake'
23
23
  s.add_development_dependency 'rspec'
24
24
  s.add_development_dependency 'rr'
@@ -1,8 +1,9 @@
1
1
  require 'date'
2
2
  require 'yaml'
3
- require 'curb'
3
+ require 'net/http'
4
4
  require 'active_support/core_ext/hash'
5
5
  require 'active_support/core_ext/object'
6
6
  require "#{File.dirname(__FILE__)}/cadun/gateway"
7
7
  require "#{File.dirname(__FILE__)}/cadun/user"
8
8
  require "#{File.dirname(__FILE__)}/cadun/config"
9
+ require "#{File.dirname(__FILE__)}/cadun/error"
@@ -0,0 +1,9 @@
1
+ module Cadun
2
+ module Error
3
+ class NotAuthorized < Exception
4
+ end
5
+
6
+ class Timeout < Exception
7
+ end
8
+ end
9
+ end
@@ -1,54 +1,80 @@
1
1
  module Cadun
2
2
  class Gateway
3
3
  attr_reader :opts
4
-
4
+
5
5
  def self.provision(user_id, service_id)
6
- request = Curl::Easy.http_put("#{Config.restclient_url}/service/provisionamento", "{\"usuarioId\":\"#{user_id}\",\"servicoId\":\"#{service_id}\"}") do |curl|
7
- curl.headers['Content-Type'] = 'application/json'
8
- end
9
-
10
- request.response_code == 200
6
+ uri = URI("#{Config.restclient_url}/service/provisionamento")
7
+
8
+ req = Net::HTTP::Put.new(uri.request_uri)
9
+ req.content_type = 'application/json'
10
+
11
+ res = Gateway.http_request uri, req, %|{"usuarioId":"#{user_id}","servicoId":"#{service_id}"}|
12
+ res.code == "200"
11
13
  end
12
-
14
+
13
15
  def initialize(opts = {})
14
16
  @opts = opts
15
17
  end
16
-
18
+
17
19
  def content
18
- @content ||= Hash.from_xml(content_resource)["pessoa"]
20
+ unless @content
21
+ content = content_resource
22
+ @content = (Hash.from_xml(content)["pessoa"] if content.present?) || {}
23
+ end
24
+ @content
19
25
  end
20
-
26
+
21
27
  def content_resource
22
- Curl::Easy.perform("#{Config.auth_url}/cadunii/ws/resources/pessoa/#{subject}").body_str
23
- end
24
-
25
- def subject
26
- if opts[:email]; "email/#{opts[:email]}"
27
- elsif opts[:cadun_id]; opts[:cadun_id]
28
+ subject = if opts[:email]
29
+ "email/#{opts[:email]}"
30
+ elsif opts[:cadun_id]
31
+ opts[:cadun_id]
28
32
  else
29
- raise Exception.new(authorization["status"]) unless authorized?
33
+ raise Cadun::Error::NotAuthorized.new(authorization["status"]) unless authorization["status"] == "AUTORIZADO"
30
34
  authorization["usuarioID"]
31
35
  end
36
+
37
+ uri = URI("#{Config.auth_url}/cadunii/ws/resources/pessoa/#{subject}")
38
+
39
+ req = Net::HTTP::Get.new(uri.request_uri)
40
+
41
+ res = Gateway.http_request uri, req
42
+ res.body
43
+
32
44
  end
33
-
34
- def authorized?
35
- authorization["status"] == "AUTORIZADO"
36
- end
37
-
45
+
38
46
  def authorization
39
47
  @authorization ||= Hash.from_xml(authorization_resource)["usuarioAutorizado"]
40
48
  end
41
-
49
+
42
50
  def authorization_resource
43
51
  %w(glb_id ip service_id).each { |i| raise ArgumentError.new("#{i} is missing") unless opts[i.to_sym] }
44
-
45
52
  authorization_data = { "glbId" => opts[:glb_id], "ip" => opts[:ip], "servicoID" => opts[:service_id] }.to_xml(:root => "usuarioAutorizado", :indent => 0)
46
-
47
- request = Curl::Easy.http_put("#{Config.auth_url}/ws/rest/autorizacao", authorization_data) do |curl|
48
- curl.headers['Content-Type'] = 'text/xml'
53
+
54
+ uri = URI("#{Config.auth_url}/ws/rest/autorizacao")
55
+
56
+ req = Net::HTTP::Put.new(uri.request_uri)
57
+ req.content_type = 'text/xml'
58
+
59
+ res = Gateway.http_request uri, req, authorization_data
60
+ res.body
61
+
62
+ end
63
+
64
+ private
65
+
66
+ def self.http_request(uri, req, body=nil)
67
+ begin
68
+ http = Net::HTTP.new(uri.host, uri.port)
69
+
70
+ http.open_timeout = Config.open_timeout if Config.respond_to? :open_timeout
71
+ http.read_timeout = Config.read_timeout if Config.respond_to? :read_timeout
72
+
73
+ http.request req, body
74
+ rescue Timeout::Error
75
+ raise Cadun::Error::Timeout.new("timeout to #{req.class.name} resource #{uri.host + uri.path}")
49
76
  end
50
77
 
51
- request.body_str
52
78
  end
53
79
  end
54
- end
80
+ end
@@ -1,71 +1,78 @@
1
1
  module Cadun
2
- class User
3
- { "id" => "cadun_id",
4
- "nome" => "name",
5
- "emailPrincipal" => "email",
6
- "tipoUsuario" => "user_type",
2
+ class User
3
+ { "id" => "cadun_id",
4
+ "nome" => "name",
5
+ "tipoUsuario" => "user_type",
7
6
  "sexo" => "gender",
8
- "bairro" => "neighborhood",
7
+ "bairro" => "neighborhood",
9
8
  "cep" => "zipcode",
10
9
  "complemento" => "complement" }.each { |path, method| define_method(method) { gateway.content[path] } }
11
-
10
+
12
11
  alias :id :cadun_id
13
-
12
+
14
13
  def self.find_by_email(email)
15
- email = "#{email}@globomail.com" unless email =~ /^.*@.*$/
14
+ email = "#{email}@globo.com" unless email =~ /^.*@.*$/
16
15
  new(:email => email)
17
16
  end
18
-
17
+
19
18
  def self.find_by_id(cadun_id)
20
19
  new(:cadun_id => cadun_id)
21
20
  end
22
-
21
+
23
22
  def initialize(options = {})
24
23
  @options = options
25
24
  end
26
25
 
26
+ def email
27
+ emailPrincipal || emailAlternativo
28
+ end
29
+
27
30
  def address
28
- "#{endereco}, #{numero}"
31
+ "#{endereco}, #{numero}" if endereco and numero
29
32
  end
30
-
33
+
31
34
  def birthday
32
- Date.parse(dataNascimento)
35
+ Date.parse(dataNascimento) if dataNascimento
33
36
  end
34
-
37
+
35
38
  def phone
36
- "#{telefoneResidencialDdd} #{telefoneResidencial}"
39
+ "#{telefoneResidencialDdd} #{telefoneResidencial}" if telefoneResidencial and telefoneResidencialDdd
37
40
  end
38
-
41
+
39
42
  def mobile
40
- "#{telefoneCelularDdd} #{telefoneCelular}"
43
+ "#{telefoneCelularDdd} #{telefoneCelular}" if telefoneCelularDdd and telefoneCelular
41
44
  end
42
-
45
+
43
46
  def country
44
47
  pais['nome'] if pais.present?
45
48
  end
46
-
49
+
47
50
  def city
48
51
  cidade['nome'] if cidade.present?
49
52
  end
50
-
53
+
51
54
  def state
52
55
  estado['sigla'] if estado.present?
53
56
  end
54
-
57
+
55
58
  def to_hash
56
59
  %w(address birthday cadun_id city complement country cpf email gender login mobile name neighborhood phone state status user_type zipcode).inject(Hash.new(0)) { |hash, method| hash[method.to_sym] = (send(method) rescue nil); hash }
57
60
  end
58
-
61
+
59
62
  def provision_to_service(service_id)
60
63
  Gateway.provision(id, service_id)
61
64
  end
62
-
65
+
63
66
  def method_missing(method)
64
67
  gateway.content[method.to_s]
65
68
  end
66
-
69
+
70
+ def assinante?
71
+ Hash.from_xml(gateway.authorization_resource)['usuarioAutorizado']['tipoUsuario'] == 'ASSINANTE'
72
+ end
73
+
67
74
  def gateway
68
75
  @gateway ||= Gateway.new(@options)
69
76
  end
70
77
  end
71
- end
78
+ end
@@ -1,7 +1,7 @@
1
1
  module Cadun
2
2
  module VERSION
3
3
  MAJOR = 0
4
- MINOR = 6
4
+ MINOR = 8
5
5
  PATCH = 3
6
6
 
7
7
  STRING = [MAJOR, MINOR, PATCH] * '.'
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ irb -r ./script/loader.rb
@@ -0,0 +1,3 @@
1
+ require File.expand_path("../../lib/cadun.rb", __FILE__)
2
+
3
+ Cadun::Config.load_file("#{File.dirname(__FILE__)}/../spec/support/fixtures/config.yml")
@@ -1,18 +1,30 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Cadun::Config do
4
+ def self.verify_method(method, value)
5
+ describe "##{method}" do
6
+ subject { Cadun::Config.send(method) }
7
+ specify { should == value }
8
+ end
9
+ end
10
+
4
11
  before { load_config }
5
- subject { Cadun::Config }
6
-
7
- its(:login_url) { should == "https://login.qa01.globoi.com/login" }
8
- its(:logout_url) { should == "https://login.qa01.globoi.com/Servlet/do/logout" }
9
- its(:auth_url) { should == "http://isp-authenticator.qa01.globoi.com:8280" }
10
-
12
+
13
+ verify_method "login_url" , "https://login.qa01.globoi.com/login"
14
+ verify_method "logout_url", "https://login.qa01.globoi.com/Servlet/do/logout"
15
+ verify_method "auth_url" , "http://autenticacao.qa01.globoi.com:8280"
16
+
17
+ verify_method "open_timeout", 0.3
18
+ verify_method "read_timeout", 0.4
19
+
11
20
  context "when the file changes" do
12
21
  before { load_another_config }
13
-
14
- its(:login_url) { should == "https://login.globo.com/login" }
15
- its(:logout_url) { should == "https://login.globo.com/Servlet/do/logout" }
16
- its(:auth_url) { should == "http://autenticacao.globo.com:8080" }
22
+
23
+ verify_method "login_url", "https://login.globo.com/login"
24
+ verify_method "logout_url", "https://login.globo.com/Servlet/do/logout"
25
+ verify_method "auth_url", "http://autenticacao.globo.com:8080"
26
+
27
+ verify_method "open_timeout", 0.5
28
+ verify_method "read_timeout", 0.6
17
29
  end
18
- end
30
+ end
@@ -1,68 +1,103 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Cadun::Gateway do
4
+ let(:autorizacao_service_url) { "http://autenticacao.qa01.globoi.com:8280/ws/rest/autorizacao" }
5
+
4
6
  before { load_config }
5
-
6
- describe "#provision" do
7
- subject { Cadun::Gateway.provision(123456, 2515) }
8
-
7
+
8
+ describe "#provision" do
9
+ let(:service_url) { "http://cadun-rest.qa01.globoi.com/service/provisionamento" }
9
10
  context "when the service is provisioned to the user" do
10
- before { stub_request(:put, "http://cadun-rest.qa01.globoi.com/service/provisionamento").to_return(:status => [200]) }
11
- it { should be_true }
11
+ before { stub_request(:put, service_url).to_return(:status => [200]) }
12
+
13
+ subject { Cadun::Gateway.provision(123456, 2515) }
14
+ specify { should be_true }
12
15
  end
13
-
14
- context "when the service has been provisioned to the user" do
15
- before { stub_request(:put, "http://cadun-rest.qa01.globoi.com/service/provisionamento").to_return(:status => [304]) }
16
- it { should be_false }
16
+
17
+ context "when the service is provisioned to the user" do
18
+ before { stub_request(:put, service_url).to_return(:status => [304]) }
19
+
20
+ subject { Cadun::Gateway.provision(123456, 2515) }
21
+ it { subject.should be_false }
17
22
  end
18
-
23
+
19
24
  context "when the service is not found" do
20
- before { stub_request(:put, "http://cadun-rest.qa01.globoi.com/service/provisionamento").to_return(:status => [404]) }
21
- it { should be_false }
25
+ before { stub_request(:put, service_url).to_return(:status => [404]) }
26
+
27
+ subject { Cadun::Gateway.provision(123456, 2515) }
28
+ it { subject.should be_false }
29
+ end
30
+
31
+ context "when the service returns HTTP 50x error" do
32
+ before { stub_request(:put, service_url).to_return(:status => [503]) }
33
+
34
+ subject { Cadun::Gateway.provision(123456, 2515) }
35
+ it { subject.should be_false }
36
+ end
37
+
38
+ context "when the request timed out" do
39
+ before { stub_request(:put, service_url).to_timeout }
40
+
41
+ subject { Cadun::Gateway.provision(123456, 2515) }
42
+
43
+ it "should raise an exception" do
44
+ -> { subject }.should raise_error(TimeoutError)
45
+ end
22
46
  end
23
47
  end
24
-
48
+
25
49
  describe "#content" do
50
+ let(:service_url) { "http://autenticacao.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/1" }
26
51
  let(:gateway) { Cadun::Gateway.new(:glb_id => "GLB_ID", :ip => "127.0.0.1", :service_id => 2626) }
27
- subject { gateway.content }
28
-
52
+
29
53
  context "when status not AUTORIZADO" do
30
- before { stub_request(:put, "http://isp-authenticator.qa01.globoi.com:8280/ws/rest/autorizacao").to_return(:body => "<?xml version='1.0' encoding='utf-8'?><usuarioAutorizado><status>NAO_AUTORIZADO</status><usuarioID>1</usuarioID></usuarioAutorizado>") }
31
- it { expect { subject }.to raise_error(Exception) }
54
+ before do
55
+ stub_request(:put, autorizacao_service_url).to_return(:body => "<?xml version='1.0' encoding='utf-8'?><usuarioAutorizado><status>NAO_AUTORIZADO</status><usuarioID>1</usuarioID></usuarioAutorizado>")
56
+ end
57
+
58
+ it { proc { gateway.content }.should raise_error(Cadun::Error::NotAuthorized) }
32
59
  end
33
60
 
34
61
  context "when status AUTORIZADO" do
35
62
  before do
36
- stub_request(:put, "http://isp-authenticator.qa01.globoi.com:8280/ws/rest/autorizacao").to_return(:body => "<?xml version='1.0' encoding='utf-8'?><usuarioAutorizado><status>AUTORIZADO</status><usuarioID>1</usuarioID></usuarioAutorizado>")
37
- stub_request(:get, "http://isp-authenticator.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/1").to_return(:body => "<?xml version='1.0' encoding='utf-8'?><pessoa><nome>Barack Obama</nome></pessoa>")
63
+ stub_request(:put, autorizacao_service_url).to_return(:body => "<?xml version='1.0' encoding='utf-8'?><usuarioAutorizado><status>AUTORIZADO</status><usuarioID>1</usuarioID></usuarioAutorizado>")
64
+ stub_request(:get, service_url).to_return(:body => "<?xml version='1.0' encoding='utf-8'?><pessoa><nome>Barack Obama</nome></pessoa>")
38
65
  end
39
66
 
40
- it { should include('nome' => 'Barack Obama') }
67
+ it { proc { gateway.content }.should_not raise_error(Cadun::Error::NotAuthorized) }
68
+
69
+ it "should parse the resource" do
70
+ gateway.content['nome'].should == 'Barack Obama'
71
+ end
41
72
  end
42
73
  end
43
-
74
+
44
75
  describe "#authorization" do
45
- subject { gateway.authorization }
46
-
47
76
  context "when all information is given" do
48
77
  let(:gateway) { Cadun::Gateway.new(:glb_id => "GLB_ID", :ip => "127.0.0.1", :service_id => 2626) }
49
- before { stub_request(:put, "http://isp-authenticator.qa01.globoi.com:8280/ws/rest/autorizacao").to_return(:body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?><usuarioAutorizado><glbId>GLB_ID</glbId><ip>127.0.0.1</ip><servicoID type=\"integer\">2626</servicoID></usuarioAutorizado>", :body => "<?xml version='1.0' encoding='utf-8'?><usuarioAutorizado><status>AUTORIZADO</status><usuarioID>1</usuarioID></usuarioAutorizado>") }
50
- it { subject.should include('usuarioID' => '1') }
78
+
79
+ before do
80
+ stub_request(:put, autorizacao_service_url).to_return(:body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?><usuarioAutorizado><glbId>GLB_ID</glbId><ip>127.0.0.1</ip><servicoID type=\"integer\">2626</servicoID></usuarioAutorizado>", :body => "<?xml version='1.0' encoding='utf-8'?><usuarioAutorizado><status>AUTORIZADO</status><usuarioID>1</usuarioID></usuarioAutorizado>")
81
+ end
82
+
83
+ it "should parse the authorization request" do
84
+ gateway.authorization['usuarioID'].should == '1'
85
+ end
51
86
  end
52
-
87
+
53
88
  context "when glb_id is not given" do
54
89
  let(:gateway) { Cadun::Gateway.new }
55
- it { expect { subject }.to raise_error(ArgumentError, "glb_id is missing") }
90
+ it { proc { gateway.authorization }.should raise_error(ArgumentError, "glb_id is missing") }
56
91
  end
57
-
92
+
58
93
  context "when ip is not given" do
59
94
  let(:gateway) { Cadun::Gateway.new(:glb_id => "1") }
60
- it { expect { subject }.to raise_error(ArgumentError, "ip is missing") }
95
+ it { proc { gateway.authorization }.should raise_error(ArgumentError, "ip is missing") }
61
96
  end
62
-
97
+
63
98
  context "when service_id is not given" do
64
99
  let(:gateway) { Cadun::Gateway.new(:glb_id => "1", :ip => "1") }
65
- it { expect { subject }.to raise_error(ArgumentError, "service_id is missing") }
100
+ it { proc { gateway.authorization }.should raise_error(ArgumentError, "service_id is missing") }
66
101
  end
67
102
  end
68
- end
103
+ end
@@ -2,105 +2,123 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe Cadun::User do
5
+
6
+ def self.verify_method(method, value)
7
+ describe "##{method}" do
8
+ specify { subject.send(method).should == value }
9
+ end
10
+ end
11
+
5
12
  before do
6
13
  load_config
7
14
  stub_requests
8
15
  end
9
-
16
+
10
17
  context "when the user id is not given" do
11
18
  subject { Cadun::User.new :ip => "127.0.0.1", :service_id => 2626, :glb_id => "GLB_ID" }
12
-
19
+
13
20
  it "should load the gateway only when it's needed" do
14
- mock(Cadun::Gateway).new(hash_including(:ip => "127.0.0.1", :service_id => 2626, :glb_id => "GLB_ID")) do
21
+ mock(Cadun::Gateway).new(:ip => "127.0.0.1", :service_id => 2626, :glb_id => "GLB_ID") do
15
22
  mock(Cadun::Gateway).content { Hash.new }
16
23
  end
17
-
24
+
18
25
  subject.login
19
26
  end
20
-
27
+
21
28
  it "should not load the gateway when the user is initialized" do
22
29
  dont_allow(Cadun::Gateway).new
23
30
  subject
24
31
  end
25
32
 
26
- its(:id) { should == "21737810" }
27
- its(:name) { should == "Fabricio Rodrigo Lopes" }
28
- its(:birthday) { should == Date.new(1983, 02, 22) }
29
- its(:phone) { should == "21 22881060" }
30
- its(:mobile) { should == "21 99999999" }
31
- its(:email) { should == "fab1@spam.la" }
32
- its(:gender) { should == "MASCULINO" }
33
- its(:city) { should == "Rio de Janeiro" }
34
- its(:state) { should == "RJ" }
35
- its(:status) { should == "ATIVO" }
36
- its(:address) { should == "Rua Uruguai, 59" }
37
- its(:neighborhood) { should == "Andaraí" }
38
- its(:cpf) { should == "09532034765" }
39
- its(:login) { should == "fabricio_fab1" }
40
- its(:country) { should == "Brasil" }
41
- its(:user_type) { should == "NAO_ASSINANTE" }
42
- its(:cadun_id) { should == "21737810" }
43
- its(:complement) { should == "807" }
33
+ verify_method "id", "21737810"
34
+ verify_method "name", "Fabricio Rodrigo Lopes"
35
+ verify_method "birthday", Date.new(1983, 02, 22)
36
+ verify_method "phone", "21 22881060"
37
+ verify_method "mobile", "21 99999999"
38
+ verify_method "email", "fab1@spam.la"
39
+ verify_method "gender", "MASCULINO"
40
+ verify_method "city", "Rio de Janeiro"
41
+ verify_method "state", "RJ"
42
+ verify_method "status", "ATIVO"
43
+ verify_method "address", "Rua Uruguai, 59"
44
+ verify_method "neighborhood", "Andaraí"
45
+ verify_method "cpf", "09532034765"
46
+ verify_method "login", "fabricio_fab1"
47
+ verify_method "country", "Brasil"
48
+ verify_method "user_type", "NAO_ASSINANTE"
49
+ verify_method "cadun_id", "21737810"
50
+ verify_method "complement", "807"
44
51
  end
45
-
52
+
46
53
  describe "#to_hash" do
47
54
  context "when the user has all data" do
48
55
  subject { Cadun::User.new(:cadun_id => "10001000").to_hash }
49
-
50
- it { should include :cadun_id => "10001000" }
51
- it { should include :name => "Guilherme Chico" }
52
- it { should include :email => "fab1@spam.la" }
53
- it { should include :user_type => "NAO_ASSINANTE" }
54
- it { should include :gender => "MASCULINO" }
55
- it { should include :neighborhood => "Andaraí" }
56
- it { should include :city => "Rio de Janeiro" }
57
- it { should include :state => "RJ" }
58
- it { should include :country => "Brasil" }
59
- it { should include :address => "Rua Uruguai, 59" }
60
- it { should include :birthday => Date.new(1983, 02, 22) }
61
- it { should include :phone => "21 22881060" }
62
- it { should include :mobile => "21 99999999" }
63
- it { should include :login => "fabricio_fab1" }
64
- it { should include :cpf => "09532034765" }
65
- it { should include :zipcode => "20510060" }
66
- it { should include :status => "ATIVO" }
67
- it { should include :complement => "807" }
56
+
57
+ specify { should include(:cadun_id => "10001000") }
58
+ specify { should include(:name => "Guilherme Chico") }
59
+ specify { should include(:email => "fab1@spam.la") }
60
+ specify { should include(:user_type => "NAO_ASSINANTE") }
61
+ specify { should include(:gender => "MASCULINO") }
62
+ specify { should include(:neighborhood => "Andaraí") }
63
+ specify { should include(:city => "Rio de Janeiro") }
64
+ specify { should include(:state => "RJ") }
65
+ specify { should include(:country => "Brasil") }
66
+ specify { should include(:address => "Rua Uruguai, 59") }
67
+ specify { should include(:birthday => Date.new(1983, 02, 22)) }
68
+ specify { should include(:phone => "21 22881060") }
69
+ specify { should include(:mobile => "21 99999999") }
70
+ specify { should include(:login => "fabricio_fab1") }
71
+ specify { should include(:cpf => "09532034765") }
72
+ specify { should include(:zipcode => "20510060") }
73
+ specify { should include(:status => "ATIVO") }
74
+ specify { should include(:complement => "807") }
68
75
  end
69
-
76
+
70
77
  context "when the user has minimal data" do
71
78
  subject { Cadun::User.find_by_email("fulano_adm_campanha@globomail.com") }
72
-
73
- its(:id) { should == "23370159" }
74
- its(:city) { should be_nil }
75
- its(:state) { should be_nil }
76
- its(:country) { should be_nil }
79
+ specify { subject.id.should == "23370159" }
80
+ specify { subject.city.should == nil }
81
+ specify { subject.state.should == nil }
82
+ specify { subject.country.should == nil }
77
83
  end
78
84
  end
79
-
85
+
80
86
  describe ".find_by_email" do
81
87
  context "given an email without domain" do
82
88
  subject { Cadun::User.find_by_email("silvano") }
83
- its(:id) { should == "24510533" }
89
+ verify_method "id", "24510533"
84
90
  end
85
-
91
+
86
92
  context "given an email with domain" do
87
93
  subject { Cadun::User.find_by_email("silvano@corp.globo.com") }
88
- its(:id) { should == "24510533" }
94
+ verify_method "id", "24510533"
89
95
  end
90
96
  end
91
-
97
+
92
98
  describe ".find_by_id" do
93
- subject { Cadun::User.find_by_id("10001000") }
94
- its(:id) { should == "10001000" }
99
+ context "when the user exists" do
100
+ subject { Cadun::User.find_by_id("10001000") }
101
+ verify_method "id", "10001000"
102
+ end
103
+
104
+ context "when the user doesn't exists" do
105
+ subject { Cadun::User.find_by_id("999999") }
106
+
107
+ %w{ id name birthday phone mobile email gender city state status
108
+ address neighborhood cpf login country user_type cadun_id
109
+ complement }.each do |method|
110
+ verify_method method, nil
111
+ end
112
+ end
95
113
  end
96
-
114
+
97
115
  describe "#provision_to_service" do
98
116
  it "should call gateway's provision" do
99
117
  mock(Cadun::Gateway).provision(1, 6969)
100
-
118
+
101
119
  user = Cadun::User.new
102
120
  mock(user).id { 1 }
103
121
  user.provision_to_service(6969)
104
122
  end
105
123
  end
106
- end
124
+ end
@@ -1,25 +1,27 @@
1
1
  require "#{File.dirname(__FILE__)}/../lib/cadun"
2
2
  require 'webmock/rspec'
3
+ require 'ruby-debug'
3
4
 
4
5
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
5
6
 
6
- RSpec.configure do |config|
7
+ RSpec.configure do |config|
7
8
  config.mock_with :rr
8
9
  config.filter_run :focus => true
9
10
  config.run_all_when_everything_filtered = true
10
-
11
+
11
12
  config.before(:suite) do
12
13
  WebMock.disable_net_connect!(:allow_localhost => true)
13
14
  end
14
15
  end
15
16
 
16
17
  def stub_requests
17
- stub_request(:put, "http://isp-authenticator.qa01.globoi.com:8280/ws/rest/autorizacao").to_return(:body => File.new("#{File.dirname(__FILE__)}/support/fixtures/autorizacao.xml"))
18
- stub_request(:get, "http://isp-authenticator.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/21737810").to_return(:body => File.new("#{File.dirname(__FILE__)}/support/fixtures/pessoa.xml"))
19
- stub_request(:get, "http://isp-authenticator.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/10001000").to_return(:body => File.new("#{File.dirname(__FILE__)}/support/fixtures/pessoa_2.xml"))
20
- stub_request(:get, "http://isp-authenticator.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/email/silvano@globo.com").to_return(:body => File.new("#{File.dirname(__FILE__)}/support/fixtures/email.xml"))
21
- stub_request(:get, "http://isp-authenticator.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/email/silvano@corp.globo.com").to_return(:body => File.new("#{File.dirname(__FILE__)}/support/fixtures/email.xml"))
22
- stub_request(:get, "http://isp-authenticator.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/email/fulano_adm_campanha@globomail.com").to_return(:body => File.new("#{File.dirname(__FILE__)}/support/fixtures/email2.xml"))
18
+ stub_request(:put, "http://autenticacao.qa01.globoi.com:8280/ws/rest/autorizacao").to_return(:body => File.new("#{File.dirname(__FILE__)}/support/fixtures/autorizacao.xml"))
19
+ stub_request(:get, "http://autenticacao.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/21737810").to_return(:body => File.new("#{File.dirname(__FILE__)}/support/fixtures/pessoa.xml"))
20
+ stub_request(:get, "http://autenticacao.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/999999").to_return(:status => 302)
21
+ stub_request(:get, "http://autenticacao.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/10001000").to_return(:body => File.new("#{File.dirname(__FILE__)}/support/fixtures/pessoa_2.xml"))
22
+ stub_request(:get, "http://autenticacao.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/email/silvano@globo.com").to_return(:body => File.new("#{File.dirname(__FILE__)}/support/fixtures/email.xml"))
23
+ stub_request(:get, "http://autenticacao.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/email/silvano@corp.globo.com").to_return(:body => File.new("#{File.dirname(__FILE__)}/support/fixtures/email.xml"))
24
+ stub_request(:get, "http://autenticacao.qa01.globoi.com:8280/cadunii/ws/resources/pessoa/email/fulano_adm_campanha@globomail.com").to_return(:body => File.new("#{File.dirname(__FILE__)}/support/fixtures/email2.xml"))
23
25
  stub_request(:put, "http://cadun-rest.qa01.globoi.com/service/provisionamento").to_return(:body => File.new("#{File.dirname(__FILE__)}/support/fixtures/provisionamento.json"))
24
26
  end
25
27
 
@@ -29,4 +31,4 @@ end
29
31
 
30
32
  def load_another_config
31
33
  Cadun::Config.load_file "#{File.dirname(__FILE__)}/support/fixtures/another_config.yml"
32
- end
34
+ end
@@ -2,4 +2,6 @@ cadun:
2
2
  logout_url: https://login.globo.com/Servlet/do/logout
3
3
  login_url: https://login.globo.com/login
4
4
  auth_url: http://autenticacao.globo.com:8080
5
- restclient_url: http://cadun-rest.globoi.com
5
+ restclient_url: http://cadun-rest.globoi.com
6
+ open_timeout: 0.5 # in seconds
7
+ read_timeout: 0.6 # in seconds
@@ -1,5 +1,7 @@
1
1
  cadun:
2
2
  logout_url: https://login.qa01.globoi.com/Servlet/do/logout
3
3
  login_url: https://login.qa01.globoi.com/login
4
- auth_url: http://isp-authenticator.qa01.globoi.com:8280
5
- restclient_url: http://cadun-rest.qa01.globoi.com
4
+ auth_url: http://autenticacao.qa01.globoi.com:8280
5
+ restclient_url: http://cadun-rest.qa01.globoi.com
6
+ open_timeout: 0.3 # in seconds
7
+ read_timeout: 0.4 # in seconds
metadata CHANGED
@@ -1,124 +1,150 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cadun
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
5
- prerelease:
4
+ version: 0.8.3
6
5
  platform: ruby
7
6
  authors:
8
- - Bruno
9
- - Azisaka
10
- - Maciel
7
+ - Cadun
11
8
  autorequire:
12
9
  bindir: bin
13
10
  cert_chain: []
14
- date: 2011-11-24 00:00:00.000000000 Z
11
+ date: 2014-09-25 00:00:00.000000000 Z
15
12
  dependencies:
16
13
  - !ruby/object:Gem::Dependency
17
14
  name: i18n
18
- requirement: &70300104786900 !ruby/object:Gem::Requirement
19
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
20
16
  requirements:
21
17
  - - ! '>='
22
18
  - !ruby/object:Gem::Version
23
19
  version: '0'
24
20
  type: :runtime
25
21
  prerelease: false
26
- version_requirements: *70300104786900
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
- requirement: &70300104779400 !ruby/object:Gem::Requirement
30
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
31
30
  requirements:
32
31
  - - ! '>='
33
32
  - !ruby/object:Gem::Version
34
33
  version: 3.0.0
35
34
  type: :runtime
36
35
  prerelease: false
37
- version_requirements: *70300104779400
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 3.0.0
38
41
  - !ruby/object:Gem::Dependency
39
42
  name: builder
40
- requirement: &70300104778780 !ruby/object:Gem::Requirement
41
- none: false
43
+ requirement: !ruby/object:Gem::Requirement
42
44
  requirements:
43
45
  - - ! '>='
44
46
  - !ruby/object:Gem::Version
45
47
  version: 2.1.2
46
48
  type: :runtime
47
49
  prerelease: false
48
- version_requirements: *70300104778780
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 2.1.2
49
55
  - !ruby/object:Gem::Dependency
50
- name: curb
51
- requirement: &70300104636920 !ruby/object:Gem::Requirement
52
- none: false
56
+ name: ruby-debug19
57
+ requirement: !ruby/object:Gem::Requirement
53
58
  requirements:
54
59
  - - ! '>='
55
60
  - !ruby/object:Gem::Version
56
61
  version: '0'
57
- type: :runtime
62
+ type: :development
58
63
  prerelease: false
59
- version_requirements: *70300104636920
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
60
69
  - !ruby/object:Gem::Dependency
61
70
  name: rake
62
- requirement: &70300104634980 !ruby/object:Gem::Requirement
63
- none: false
71
+ requirement: !ruby/object:Gem::Requirement
64
72
  requirements:
65
73
  - - ! '>='
66
74
  - !ruby/object:Gem::Version
67
75
  version: '0'
68
76
  type: :development
69
77
  prerelease: false
70
- version_requirements: *70300104634980
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
71
83
  - !ruby/object:Gem::Dependency
72
84
  name: rspec
73
- requirement: &70300104633980 !ruby/object:Gem::Requirement
74
- none: false
85
+ requirement: !ruby/object:Gem::Requirement
75
86
  requirements:
76
87
  - - ! '>='
77
88
  - !ruby/object:Gem::Version
78
89
  version: '0'
79
90
  type: :development
80
91
  prerelease: false
81
- version_requirements: *70300104633980
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
82
97
  - !ruby/object:Gem::Dependency
83
98
  name: rr
84
- requirement: &70300104633280 !ruby/object:Gem::Requirement
85
- none: false
99
+ requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ! '>='
88
102
  - !ruby/object:Gem::Version
89
103
  version: '0'
90
104
  type: :development
91
105
  prerelease: false
92
- version_requirements: *70300104633280
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
93
111
  - !ruby/object:Gem::Dependency
94
112
  name: webmock
95
- requirement: &70300104632720 !ruby/object:Gem::Requirement
96
- none: false
113
+ requirement: !ruby/object:Gem::Requirement
97
114
  requirements:
98
115
  - - ! '>='
99
116
  - !ruby/object:Gem::Version
100
117
  version: '0'
101
118
  type: :development
102
119
  prerelease: false
103
- version_requirements: *70300104632720
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
104
125
  description: A wrapper for the Globo.com's authentication/authorization API
105
126
  email:
106
- - bruno@azisaka.com.br
127
+ - cadun@corp.globo.com
107
128
  executables: []
108
129
  extensions: []
109
130
  extra_rdoc_files: []
110
131
  files:
111
132
  - .gitignore
112
133
  - .rspec
134
+ - .rvmrc
113
135
  - Gemfile
136
+ - Gemfile.lock
114
137
  - Rakefile
115
- - benchmark/curl_x_restclient.rb
138
+ - bench/curl_x_restclient.rb
116
139
  - cadun.gemspec
117
140
  - lib/cadun.rb
118
141
  - lib/cadun/config.rb
142
+ - lib/cadun/error.rb
119
143
  - lib/cadun/gateway.rb
120
144
  - lib/cadun/user.rb
121
145
  - lib/cadun/version.rb
146
+ - script/console
147
+ - script/loader.rb
122
148
  - spec/cadun/config_spec.rb
123
149
  - spec/cadun/gateway_spec.rb
124
150
  - spec/cadun/user_spec.rb
@@ -133,26 +159,25 @@ files:
133
159
  - spec/support/fixtures/provisionamento.json
134
160
  homepage: ''
135
161
  licenses: []
162
+ metadata: {}
136
163
  post_install_message:
137
164
  rdoc_options: []
138
165
  require_paths:
139
166
  - lib
140
167
  required_ruby_version: !ruby/object:Gem::Requirement
141
- none: false
142
168
  requirements:
143
169
  - - ! '>='
144
170
  - !ruby/object:Gem::Version
145
171
  version: '0'
146
172
  required_rubygems_version: !ruby/object:Gem::Requirement
147
- none: false
148
173
  requirements:
149
174
  - - ! '>='
150
175
  - !ruby/object:Gem::Version
151
176
  version: '0'
152
177
  requirements: []
153
178
  rubyforge_project:
154
- rubygems_version: 1.8.10
179
+ rubygems_version: 2.4.1
155
180
  signing_key:
156
- specification_version: 3
181
+ specification_version: 4
157
182
  summary: A wrapper for the Globo.com's authentication/authorization API
158
183
  test_files: []