trustev 0.3.2 → 0.4.0.pre.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -329
  3. data/Rakefile +1 -2
  4. data/lib/trustev.rb +20 -68
  5. data/lib/trustev/{authenticate.rb → 1.2/authenticate.rb} +0 -0
  6. data/lib/trustev/{digital_signature.rb → 1.2/digital_signature.rb} +0 -0
  7. data/lib/trustev/{profile.rb → 1.2/profile.rb} +1 -1
  8. data/lib/trustev/{social.rb → 1.2/social.rb} +0 -0
  9. data/lib/trustev/{transaction.rb → 1.2/transaction.rb} +0 -0
  10. data/lib/trustev/1.2/trustev.rb +66 -0
  11. data/lib/trustev/2.0/address.rb +41 -0
  12. data/lib/trustev/2.0/authenticate.rb +40 -0
  13. data/lib/trustev/2.0/case.rb +45 -0
  14. data/lib/trustev/2.0/case_attribute.rb +24 -0
  15. data/lib/trustev/2.0/customer.rb +32 -0
  16. data/lib/trustev/2.0/customer_address.rb +5 -0
  17. data/lib/trustev/2.0/decision.rb +17 -0
  18. data/lib/trustev/2.0/email.rb +35 -0
  19. data/lib/trustev/2.0/item.rb +34 -0
  20. data/lib/trustev/2.0/payment.rb +33 -0
  21. data/lib/trustev/2.0/social.rb +38 -0
  22. data/lib/trustev/2.0/status.rb +34 -0
  23. data/lib/trustev/2.0/timestamp.rb +17 -0
  24. data/lib/trustev/2.0/transaction.rb +30 -0
  25. data/lib/trustev/2.0/transaction_address.rb +5 -0
  26. data/lib/trustev/2.0/trustev.rb +51 -0
  27. data/lib/trustev/error.rb +5 -6
  28. data/lib/trustev/version.rb +1 -1
  29. data/test/{authenticate_test.rb → 1.2/authenticate_test.rb} +0 -0
  30. data/test/{digital_signature_test.rb → 1.2/digital_signature_test.rb} +0 -0
  31. data/test/{error_test.rb → 1.2/error_test.rb} +3 -3
  32. data/test/{profile_test.rb → 1.2/profile_test.rb} +0 -0
  33. data/test/{social_test.rb → 1.2/social_test.rb} +0 -0
  34. data/test/{test_helper.rb → 1.2/test_helper.rb} +3 -2
  35. data/test/{transaction_test.rb → 1.2/transaction_test.rb} +0 -0
  36. data/test/2.0/authenticate_test.rb +13 -0
  37. data/test/2.0/case_test.rb +31 -0
  38. data/test/2.0/customer_address_test.rb +35 -0
  39. data/test/2.0/customer_test.rb +31 -0
  40. data/test/2.0/decision_test.rb +13 -0
  41. data/test/2.0/email_test.rb +33 -0
  42. data/test/2.0/error_test.rb +18 -0
  43. data/test/2.0/item_test.rb +33 -0
  44. data/test/2.0/payment_test.rb +33 -0
  45. data/test/2.0/social_test.rb +33 -0
  46. data/test/2.0/status_test.rb +27 -0
  47. data/test/2.0/test_helper.rb +165 -0
  48. data/test/2.0/transaction_address_Test.rb +35 -0
  49. data/test/2.0/transaction_test.rb +31 -0
  50. data/trustev.gemspec +3 -0
  51. metadata +111 -24
@@ -27,4 +27,4 @@ module Trustev
27
27
  end
28
28
  end
29
29
  end
30
- end
30
+ end
File without changes
@@ -0,0 +1,66 @@
1
+ require 'trustev/error'
2
+
3
+ module Trustev
4
+
5
+ @@api_base = 'https://api.trustev.com/v'
6
+
7
+ STATUS_TYPES = {
8
+ init: 0,
9
+ placed: 1,
10
+ refunded: 2,
11
+ rejected: 3,
12
+ completed: 5,
13
+ chargeback: 8
14
+ }
15
+
16
+ REASON_TYPES = {
17
+ system: 0,
18
+ fraud: 1,
19
+ complaint: 2,
20
+ remorse: 3,
21
+ other: 4
22
+ }
23
+
24
+ SCORE_SOURCES = {
25
+ address: 0,
26
+ behaviour: 1,
27
+ device: 2,
28
+ email: 3,
29
+ facebook: 4,
30
+ IP: 5,
31
+ transaction: 6,
32
+ trustev: 7,
33
+ velocity: 8
34
+ }
35
+
36
+ SCORE_PARAMETERS = {
37
+ overall: 0,
38
+ billing: 1,
39
+ delivery: 2,
40
+ input: 3,
41
+ domain: 4,
42
+ address: 5,
43
+ IP: 6,
44
+ proxy: 7,
45
+ VPN: 8,
46
+ value: 9,
47
+ velocity: 10,
48
+ legitimacy: 11,
49
+ pattern: 12,
50
+ hustle: 13
51
+ }
52
+
53
+ def self.raise_error(response)
54
+ raise Error.new('Bad API response', response.code, response.body.message) if response.code != 200
55
+ end
56
+
57
+ def self.invalid_token?
58
+ now = Time.now.to_i
59
+ timestamp = @@token_expire
60
+ @@token.nil? || timestamp-600 <= now
61
+ end
62
+
63
+ def self.send_request(path, body, method, expect_json=false, requires_token=true)
64
+ Trustev.do_send_request(path, { request: body }, method, expect_json, requires_token)
65
+ end
66
+ end
@@ -0,0 +1,41 @@
1
+ module Trustev
2
+ class Address < CaseAttribute
3
+ def create
4
+ super(Trustev.send_request url, build, 'POST')
5
+ end
6
+
7
+ def retrieve
8
+ raise Error.new('ID is required') if @opts[:id].nil?
9
+ Trustev.send_request url(true), {}, 'GET'
10
+ end
11
+
12
+ def retrieve_all
13
+ Trustev.send_request url, {}, 'GET'
14
+ end
15
+
16
+ def update
17
+ raise Error.new('ID is required') if @opts[:id].nil?
18
+ Trustev.send_request url(true), build, 'PUT'
19
+ end
20
+
21
+ def build
22
+ address = {
23
+ FirstName: @opts[:first_name],
24
+ LastName: @opts[:last_name],
25
+ Address1: @opts[:address1],
26
+ Address2: @opts[:address2],
27
+ Address3: @opts[:address3],
28
+ City: @opts[:city],
29
+ State: @opts[:state],
30
+ PostalCode: @opts[:postal_code],
31
+ Type: @opts[:type],
32
+ CountryCode: @opts[:country_code],
33
+ Timestamp: @opts[:timestamp],
34
+ IsDefault: @opts[:is_default]
35
+ }
36
+ address[:id] = @opts[:id] unless @opts[:id].nil?
37
+
38
+ address
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,40 @@
1
+ require 'openssl'
2
+ require 'time'
3
+
4
+ module Trustev
5
+ class Authenticate
6
+
7
+ SERVICE_URL = 'Token'
8
+
9
+ def self.retrieve_token
10
+
11
+ raise Error.new('No Username provided.') unless Trustev.username
12
+ raise Error.new('No Password provided.') unless Trustev.password
13
+ raise Error.new('No Shared Secret provided.') unless Trustev.shared_secret
14
+
15
+ time = Trustev::Timestamp.new
16
+
17
+ body = {
18
+ UserName: Trustev.username,
19
+ Timestamp: time.to_s,
20
+ PasswordHash: sha256hash(Trustev.password, time),
21
+ UserNameHash: sha256hash(Trustev.username, time),
22
+ }
23
+
24
+ response = Trustev.send_request SERVICE_URL, body, 'POST', true, false
25
+ Trustev.token = response[:APIToken]
26
+ Trustev.token_expire = Trustev::Timestamp.new(Time.parse response[:ExpireAt])
27
+ end
28
+
29
+ private
30
+
31
+ def self.sha256hash(to_hash, time)
32
+ sha256 = OpenSSL::Digest::SHA256.new
33
+ sha256 << "#{time.to_s}.#{to_hash}"
34
+ hash_part_1 = sha256.hexdigest
35
+ sha256 = OpenSSL::Digest::SHA256.new
36
+ sha256 << "#{hash_part_1}.#{Trustev.shared_secret}"
37
+ sha256.hexdigest
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,45 @@
1
+ require 'digest'
2
+ require 'open-uri'
3
+
4
+ module Trustev
5
+ class Case
6
+
7
+ SERVICE_URL = 'Case'
8
+
9
+ def initialize(case_id=nil, opts={})
10
+ @case_id = case_id
11
+ @opts = opts
12
+ end
13
+
14
+ def create
15
+ response = Trustev.send_request SERVICE_URL, build, 'POST'
16
+ @case_id = response[:Id]
17
+ response
18
+ end
19
+
20
+ def update
21
+ raise Error.new('Case ID is required.') if @case_id.nil?
22
+ Trustev.send_request "#{SERVICE_URL}/#{URI::encode @case_id}", build, 'PUT'
23
+ end
24
+
25
+ def retrieve
26
+ raise Error.new('Case ID is required.') if @case_id.nil?
27
+ Trustev.send_request "#{SERVICE_URL}/#{URI::encode @case_id}", [], 'GET'
28
+ end
29
+
30
+ def build
31
+ keys = { session_id: :SessionID,
32
+ case_number: :CaseNumber,
33
+ transaction: :Transaction,
34
+ customer: :Customer,
35
+ statuses: :Statuses,
36
+ payments: :Payments,
37
+ timestamp: :Timestamp }
38
+ trustev_case = {}
39
+ @opts.each do |key, value|
40
+ trustev_case[keys[key]] = value
41
+ end
42
+ trustev_case
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,24 @@
1
+ require 'open-uri'
2
+
3
+ module Trustev
4
+ class CaseAttribute
5
+ def initialize(opts)
6
+ @opts = opts
7
+ end
8
+
9
+ def create(response)
10
+ @opts[:id] = response[:Id]
11
+ response
12
+ end
13
+
14
+ def url(with_identifier=false)
15
+ raise Error.new('Case ID is required') if @opts[:case_id].nil?
16
+ url = "case/#{URI::encode @opts[:case_id]}/#{self.class::SERVICE_URL}"
17
+ if with_identifier
18
+ raise Error.new('ID is required') if @opts[:id].nil?
19
+ url = "#{url}/#{@opts[:id]}"
20
+ end
21
+ url
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,32 @@
1
+ module Trustev
2
+ class Customer < CaseAttribute
3
+
4
+ SERVICE_URL = 'customer'
5
+
6
+ def create
7
+ Trustev.send_request url, build, 'POST'
8
+ end
9
+
10
+ def retrieve
11
+ Trustev.send_request url, {}, 'GET'
12
+ end
13
+
14
+ def update
15
+ Trustev.send_request url, build, 'PUT'
16
+ end
17
+
18
+ def build
19
+ customer = {
20
+ FirstName: @opts[:first_name],
21
+ LastName: @opts[:last_name],
22
+ Emails: @opts[:emails],
23
+ PhoneNumber: @opts[:phone_number],
24
+ DateOfBirth: @opts[:dob],
25
+ Addresses: @opts[:addresses],
26
+ SocialAccounts: @opts[:social_accounts]
27
+ }
28
+ customer[:id] = @opts[:id] unless @opts[:id].nil?
29
+ customer
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,5 @@
1
+ module Trustev
2
+ class CustomerAddress < Address
3
+ SERVICE_URL = 'customer/address'
4
+ end
5
+ end
@@ -0,0 +1,17 @@
1
+ require 'open-uri'
2
+
3
+ module Trustev
4
+ class Decision
5
+
6
+ SERVICE_URL = 'Decision'
7
+
8
+ def initialize(case_id)
9
+ raise Error.new('Case ID is required') if case_id.nil?
10
+ @case_id = case_id
11
+ end
12
+
13
+ def retrieve
14
+ Trustev.send_request "#{SERVICE_URL}/#{URI::encode @case_id}", [], 'GET'
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,35 @@
1
+ module Trustev
2
+ class Email < CaseAttribute
3
+
4
+ SERVICE_URL = 'customer/email'
5
+
6
+ def create
7
+ raise Error.new('Email is required') if @opts[:email].nil?
8
+ Trustev.send_request url, build, 'POST'
9
+ end
10
+
11
+ def retrieve
12
+ raise Error.new('ID is required') if @opts[:id].nil?
13
+ Trustev.send_request url(true), {}, 'GET'
14
+ end
15
+
16
+ def retrieve_all
17
+ Trustev.send_request url, {}, 'GET'
18
+ end
19
+
20
+ def update
21
+ raise Error.new('Email is required') if @opts[:email].nil?
22
+ raise Error.new('ID is required') if @opts[:id].nil?
23
+ Trustev.send_request url(true), build, 'PUT'
24
+ end
25
+
26
+ def build
27
+ email = {
28
+ EmailAddress: @opts[:email],
29
+ IsDefault: @opts[:is_default]
30
+ }
31
+ email[:id] = @opts[:id] unless @opts[:id].nil?
32
+ email
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,34 @@
1
+ module Trustev
2
+ class Item < CaseAttribute
3
+
4
+ SERVICE_URL = 'transaction/item'
5
+
6
+ def create
7
+ Trustev.send_request url, build, 'POST'
8
+ end
9
+
10
+ def retrieve
11
+ raise Error.new('ID is required') if @opts[:id].nil?
12
+ Trustev.send_request url(true), {}, 'GET'
13
+ end
14
+
15
+ def retrieve_all
16
+ Trustev.send_request url, {}, 'GET'
17
+ end
18
+
19
+ def update
20
+ raise Error.new('ID is required') if @opts[:id].nil?
21
+ Trustev.send_request url(true), build, 'PUT'
22
+ end
23
+
24
+ def build
25
+ item = {
26
+ Name: @opts[:name],
27
+ Quantity: @opts[:quantity],
28
+ ItemValue: @opts[:item_value]
29
+ }
30
+ item[:id] = @opts[:id] unless @opts[:id].nil?
31
+ item
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,33 @@
1
+ module Trustev
2
+ class Payment < CaseAttribute
3
+
4
+ SERVICE_URL = 'payment'
5
+
6
+ def create
7
+ Trustev.send_request url, build, 'POST'
8
+ end
9
+
10
+ def retrieve
11
+ raise Error.new('ID is required') if @opts[:id].nil?
12
+ Trustev.send_request url(true), {}, 'GET'
13
+ end
14
+
15
+ def retrieve_all
16
+ Trustev.send_request url, {}, 'GET'
17
+ end
18
+
19
+ def update
20
+ raise Error.new('ID is required') if @opts[:id].nil?
21
+ Trustev.send_request url(true), build, 'PUT'
22
+ end
23
+
24
+ def build
25
+ payment = {
26
+ PaymentType: @opts[:payment_type],
27
+ BINNumber: @opts[:bin_number]
28
+ }
29
+ payment[:id] = @opts[:id] unless @opts[:id].nil?
30
+ payment
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,38 @@
1
+ module Trustev
2
+ class Social < CaseAttribute
3
+
4
+ SERVICE_URL = 'customer/socialaccount'
5
+
6
+ def create
7
+ Trustev.send_request url, build, 'POST'
8
+ end
9
+
10
+ def retrieve
11
+ raise Error.new('ID is required') if @opts[:id].nil?
12
+ Trustev.send_request url(true), {}, 'GET'
13
+ end
14
+
15
+ def retrieve_all
16
+ Trustev.send_request url, {}, 'GET'
17
+ end
18
+
19
+ def update
20
+ raise Error.new('ID is required') if @opts[:id].nil?
21
+ Trustev.send_request url(true), build, 'PUT'
22
+ end
23
+
24
+ def build
25
+ social = {
26
+ SocialId: @opts[:social_id],
27
+ ShortTermAccessToken: @opts[:short_term_access_token],
28
+ LongTermAccessToken: @opts[:long_term_access_token],
29
+ ShortTermAccessTokenExpiry: @opts[:short_term_access_token_expiry],
30
+ LongTermAccessTokenExpiry: @opts[:long_term_access_token_expiry],
31
+ Secret: @opts[:secret],
32
+ Timestamp: @opts[:timestamp]
33
+ }
34
+ social[:id] = @opts[:id] unless @opts[:id].nil?
35
+ social
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,34 @@
1
+ module Trustev
2
+ class Status < CaseAttribute
3
+
4
+ SERVICE_URL = 'status'
5
+
6
+ def create
7
+ Trustev.send_request url, build, 'POST'
8
+ end
9
+
10
+ def retrieve
11
+ raise Error.new('ID is required') if @opts[:id].nil?
12
+ Trustev.send_request url(true), {}, 'GET'
13
+ end
14
+
15
+ def retrieve_all
16
+ Trustev.send_request url, {}, 'GET'
17
+ end
18
+
19
+ def update
20
+ raise Error.new('ID is required') if @opts[:id].nil?
21
+ Trustev.send_request url(true), build, 'PUT'
22
+ end
23
+
24
+ def build
25
+ status = {
26
+ Status: @opts[:status],
27
+ Comment: @opts[:comment],
28
+ Timestamp: @opts[:timestamp]
29
+ }
30
+ status[:id] = @opts[:id] unless @opts[:id].nil?
31
+ status
32
+ end
33
+ end
34
+ end