trustev 0.3.2 → 0.4.0.pre.alpha

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.
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