cadun 0.6.3 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []