eml 1.0.0
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.
- checksums.yaml +7 -0
- data/.editorconfig +10 -0
- data/.env.example +6 -0
- data/.gitignore +5 -0
- data/.rspec +5 -0
- data/.rubocop.yml +90 -0
- data/Gemfile +6 -0
- data/LICENSE +21 -0
- data/README.md +87 -0
- data/eml.gemspec +37 -0
- data/lib/eml.rb +22 -0
- data/lib/eml/config.rb +49 -0
- data/lib/eml/data/countries.rb +260 -0
- data/lib/eml/data/currencies.rb +176 -0
- data/lib/eml/data/states.rb +4055 -0
- data/lib/eml/environment.rb +54 -0
- data/lib/eml/error.rb +25 -0
- data/lib/eml/error/rest.rb +42 -0
- data/lib/eml/error/rest/authentication.rb +21 -0
- data/lib/eml/error/rest/bad_request.rb +20 -0
- data/lib/eml/error/rest/daily_funding_limit.rb +19 -0
- data/lib/eml/error/rest/forbidden.rb +20 -0
- data/lib/eml/error/rest/internal_server.rb +9 -0
- data/lib/eml/error/rest/not_found.rb +20 -0
- data/lib/eml/error/rest/unprocessable_entity.rb +20 -0
- data/lib/eml/lib/endpoint_class.rb +42 -0
- data/lib/eml/parameters.rb +153 -0
- data/lib/eml/payload.rb +137 -0
- data/lib/eml/response.rb +103 -0
- data/lib/eml/uk.rb +51 -0
- data/lib/eml/uk/api_resource.rb +94 -0
- data/lib/eml/uk/config.rb +52 -0
- data/lib/eml/uk/lib/endpoint_class.rb +19 -0
- data/lib/eml/uk/lib/parse_date.rb +35 -0
- data/lib/eml/uk/model/transaction.rb +56 -0
- data/lib/eml/uk/parameters.rb +99 -0
- data/lib/eml/uk/parameters/agreement/show.rb +22 -0
- data/lib/eml/uk/parameters/card/activation.rb +24 -0
- data/lib/eml/uk/parameters/card/lock.rb +26 -0
- data/lib/eml/uk/parameters/card/register.rb +24 -0
- data/lib/eml/uk/parameters/card/reload.rb +24 -0
- data/lib/eml/uk/parameters/card/show.rb +102 -0
- data/lib/eml/uk/parameters/card/transaction.rb +59 -0
- data/lib/eml/uk/parameters/card/unload.rb +26 -0
- data/lib/eml/uk/parameters/card/unlock.rb +26 -0
- data/lib/eml/uk/parameters/card/void.rb +26 -0
- data/lib/eml/uk/payload.rb +94 -0
- data/lib/eml/uk/payload/agreement/show.rb +46 -0
- data/lib/eml/uk/payload/card/activation.rb +73 -0
- data/lib/eml/uk/payload/card/lock.rb +34 -0
- data/lib/eml/uk/payload/card/register.rb +70 -0
- data/lib/eml/uk/payload/card/reload.rb +38 -0
- data/lib/eml/uk/payload/card/show.rb +12 -0
- data/lib/eml/uk/payload/card/transaction.rb +12 -0
- data/lib/eml/uk/payload/card/unload.rb +38 -0
- data/lib/eml/uk/payload/card/unlock.rb +23 -0
- data/lib/eml/uk/payload/card/void.rb +23 -0
- data/lib/eml/uk/payload/contactentity.rb +64 -0
- data/lib/eml/uk/payload/iso.rb +48 -0
- data/lib/eml/uk/payload/location.rb +30 -0
- data/lib/eml/uk/resources/agreement.rb +32 -0
- data/lib/eml/uk/resources/card.rb +181 -0
- data/lib/eml/uk/response.rb +29 -0
- data/lib/eml/uk/responses/agreement/show.rb +16 -0
- data/lib/eml/uk/responses/card/reload.rb +19 -0
- data/lib/eml/uk/responses/card/show.rb +53 -0
- data/lib/eml/uk/responses/card/transaction.rb +24 -0
- data/lib/eml/version.rb +6 -0
- data/sorbet/config +2 -0
- data/sorbet/rbi/gems/addressable.rbi +198 -0
- data/sorbet/rbi/gems/ast.rbi +47 -0
- data/sorbet/rbi/gems/concurrent-ruby.rbi +218 -0
- data/sorbet/rbi/gems/crack.rbi +47 -0
- data/sorbet/rbi/gems/docile.rbi +31 -0
- data/sorbet/rbi/gems/domain_name.rbi +51 -0
- data/sorbet/rbi/gems/dotenv.rbi +67 -0
- data/sorbet/rbi/gems/faker.rbi +1350 -0
- data/sorbet/rbi/gems/hashdiff.rbi +65 -0
- data/sorbet/rbi/gems/http-cookie.rbi +92 -0
- data/sorbet/rbi/gems/http-form_data.rbi +73 -0
- data/sorbet/rbi/gems/http.rbi +609 -0
- data/sorbet/rbi/gems/http_parser.rb.rbi +36 -0
- data/sorbet/rbi/gems/i18n.rbi +191 -0
- data/sorbet/rbi/gems/jaro_winkler.rbi +14 -0
- data/sorbet/rbi/gems/parallel.rbi +81 -0
- data/sorbet/rbi/gems/parser.rbi +835 -0
- data/sorbet/rbi/gems/public_suffix.rbi +103 -0
- data/sorbet/rbi/gems/rainbow.rbi +117 -0
- data/sorbet/rbi/gems/rspec-core.rbi +1655 -0
- data/sorbet/rbi/gems/rspec-support.rbi +126 -0
- data/sorbet/rbi/gems/rspec.rbi +14 -0
- data/sorbet/rbi/gems/rubocop-performance.rbi +276 -0
- data/sorbet/rbi/gems/rubocop-rspec.rbi +860 -0
- data/sorbet/rbi/gems/rubocop.rbi +6943 -0
- data/sorbet/rbi/gems/ruby-progressbar.rbi +304 -0
- data/sorbet/rbi/gems/simplecov-html.rbi +30 -0
- data/sorbet/rbi/gems/simplecov.rbi +225 -0
- data/sorbet/rbi/gems/unf.rbi +18 -0
- data/sorbet/rbi/gems/unicode-display_width.rbi +16 -0
- data/sorbet/rbi/gems/vcr.rbi +503 -0
- data/sorbet/rbi/gems/webmock.rbi +521 -0
- data/sorbet/rbi/hidden-definitions/errors.txt +4802 -0
- data/sorbet/rbi/hidden-definitions/hidden.rbi +10700 -0
- data/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +8682 -0
- data/sorbet/rbi/sorbet-typed/lib/ruby/all/gem.rbi +4222 -0
- data/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +111 -0
- data/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +543 -0
- data/sorbet/rbi/todo.rbi +24 -0
- data/spec/config_spec.rb +26 -0
- data/spec/helpers/config_helper.rb +21 -0
- data/spec/helpers/vcr_helper.rb +19 -0
- data/spec/spec_helper.rb +120 -0
- data/spec/uk/api_resource_spec.rb +39 -0
- data/spec/uk/resources/agreement_spec.rb +23 -0
- data/spec/uk/resources/card_spec.rb +197 -0
- metadata +339 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module EML
|
|
5
|
+
module UK
|
|
6
|
+
class Parameters
|
|
7
|
+
module Card
|
|
8
|
+
class Unload < ::EML::UK::Parameters
|
|
9
|
+
REQUIRED_CONFIG = %i[program].freeze
|
|
10
|
+
OPTIONAL_CONFIG = %i[search_parameter].freeze
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
sig { params(program: String).returns(String) }
|
|
15
|
+
attr_accessor :program
|
|
16
|
+
|
|
17
|
+
sig { params(search_parameter: String).returns(String) }
|
|
18
|
+
def search_parameter=(search_parameter)
|
|
19
|
+
validate_search_parameter(search_parameter)
|
|
20
|
+
@search_parameter = search_parameter
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module EML
|
|
5
|
+
module UK
|
|
6
|
+
class Parameters
|
|
7
|
+
module Card
|
|
8
|
+
class Unlock < ::EML::UK::Parameters
|
|
9
|
+
REQUIRED_CONFIG = %i[program].freeze
|
|
10
|
+
OPTIONAL_CONFIG = %i[search_parameter].freeze
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
sig { params(program: String).returns(String) }
|
|
15
|
+
attr_accessor :program
|
|
16
|
+
|
|
17
|
+
sig { params(search_parameter: String).returns(String) }
|
|
18
|
+
def search_parameter=(search_parameter)
|
|
19
|
+
validate_search_parameter(search_parameter)
|
|
20
|
+
@search_parameter = search_parameter
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module EML
|
|
5
|
+
module UK
|
|
6
|
+
class Parameters
|
|
7
|
+
module Card
|
|
8
|
+
class Unlock < ::EML::UK::Parameters
|
|
9
|
+
REQUIRED_CONFIG = %i[program].freeze
|
|
10
|
+
OPTIONAL_CONFIG = %i[search_parameter].freeze
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
sig { params(program: String).returns(String) }
|
|
15
|
+
attr_accessor :program
|
|
16
|
+
|
|
17
|
+
sig { params(search_parameter: String).returns(String) }
|
|
18
|
+
def search_parameter=(search_parameter)
|
|
19
|
+
validate_search_parameter(search_parameter)
|
|
20
|
+
@search_parameter = search_parameter
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
# A payload is the data sent in the body of a request such as POST or PUT
|
|
5
|
+
module EML
|
|
6
|
+
module UK
|
|
7
|
+
class Payload < ::EML::Payload
|
|
8
|
+
extend T::Sig
|
|
9
|
+
|
|
10
|
+
sig { params(payload: T::Hash[Symbol, T.untyped]).void }
|
|
11
|
+
def initialize(payload)
|
|
12
|
+
payload = merge_optional_config(payload)
|
|
13
|
+
payload = merge_required_config(payload)
|
|
14
|
+
super
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class << self
|
|
18
|
+
extend T::Sig
|
|
19
|
+
|
|
20
|
+
sig do
|
|
21
|
+
params(
|
|
22
|
+
resource_class: T.untyped,
|
|
23
|
+
endpoint: String,
|
|
24
|
+
payload: T::Hash[Symbol, T.untyped]
|
|
25
|
+
).returns(T.untyped)
|
|
26
|
+
end
|
|
27
|
+
def convert(resource_class, endpoint, payload)
|
|
28
|
+
endpoint_class = EML::UK::EndpointClass.(
|
|
29
|
+
class_type: self::ENDPOINT_CLASS_TYPE,
|
|
30
|
+
resource_class: resource_class,
|
|
31
|
+
endpoint: endpoint
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
convert_with_endpoint_class(
|
|
35
|
+
endpoint: endpoint, endpoint_class: endpoint_class,
|
|
36
|
+
payload: payload, resource_class: resource_class
|
|
37
|
+
)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
protected
|
|
42
|
+
|
|
43
|
+
BOOLEAN_OPTIONS = %w[true false].freeze
|
|
44
|
+
|
|
45
|
+
sig { params(param_name: String, param_value: String).void }
|
|
46
|
+
def validate_boolean(param_name, param_value)
|
|
47
|
+
return if BOOLEAN_OPTIONS.include?(param_value)
|
|
48
|
+
|
|
49
|
+
message = "#{param_name} should be the string 'true' or 'false' but " \
|
|
50
|
+
"received #{param_value.inspect}"
|
|
51
|
+
raise ArgumentError, message
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
sig { params(dob: String).void }
|
|
55
|
+
def validate_dob(dob)
|
|
56
|
+
validate_max_length(:dob, dob, 8)
|
|
57
|
+
dob_i = dob.to_i
|
|
58
|
+
raise ArgumentError if dob_i < 1_011_900 || dob_i > 13_000_000
|
|
59
|
+
rescue ArgumentError
|
|
60
|
+
raise ArgumentError, "DOB should be in the format MMDDYYYY"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
sig do
|
|
66
|
+
params(payload: T::Hash[Symbol, T.untyped]).
|
|
67
|
+
returns(T::Hash[Symbol, T.untyped])
|
|
68
|
+
end
|
|
69
|
+
def merge_optional_config(payload)
|
|
70
|
+
return payload unless self.class.const_defined?(:OPTIONAL_CONFIG)
|
|
71
|
+
|
|
72
|
+
config = EML::UK.config
|
|
73
|
+
self.class.const_get(:OPTIONAL_CONFIG).
|
|
74
|
+
each_with_object(payload.dup) do |name, new_payload|
|
|
75
|
+
new_payload[name] ||= config.public_send(name)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
sig do
|
|
80
|
+
params(payload: T::Hash[Symbol, T.untyped]).
|
|
81
|
+
returns(T::Hash[Symbol, T.untyped])
|
|
82
|
+
end
|
|
83
|
+
def merge_required_config(payload)
|
|
84
|
+
return payload unless self.class.const_defined?(:REQUIRED_CONFIG)
|
|
85
|
+
|
|
86
|
+
config = EML::UK.config
|
|
87
|
+
self.class.const_get(:REQUIRED_CONFIG).
|
|
88
|
+
each_with_object(payload.dup) do |name, new_payload|
|
|
89
|
+
new_payload[name] ||= config.require_parameter(name)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module EML
|
|
5
|
+
module UK
|
|
6
|
+
class Payload
|
|
7
|
+
module Agreement
|
|
8
|
+
class Show < ::EML::UK::Payload
|
|
9
|
+
OPTIONAL_DEFAULTS = %i[merchant_group program].freeze
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
sig { params(bin: String).returns(String) }
|
|
14
|
+
attr_accessor :bin
|
|
15
|
+
|
|
16
|
+
sig { params(country: String).returns(String) }
|
|
17
|
+
attr_accessor :country
|
|
18
|
+
|
|
19
|
+
sig { params(developer: String).returns(String) }
|
|
20
|
+
attr_accessor :developer
|
|
21
|
+
|
|
22
|
+
sig { params(is_account_expiry: String).returns(String) }
|
|
23
|
+
def is_account_expiry=(is_account_expiry)
|
|
24
|
+
validate_boolean("is_account_expiry", is_account_expiry)
|
|
25
|
+
@Is_account_expiry = is_account_expiry
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
sig { params(is_fee_free: String).returns(String) }
|
|
29
|
+
def is_fee_free=(is_fee_free)
|
|
30
|
+
validate_boolean("is_fee_free", is_fee_free)
|
|
31
|
+
@Is_fee_free = is_fee_free
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
sig { params(merchant_group: String).returns(String) }
|
|
35
|
+
attr_accessor :merchant_group
|
|
36
|
+
|
|
37
|
+
sig { params(program: String).returns(String) }
|
|
38
|
+
attr_accessor :program
|
|
39
|
+
|
|
40
|
+
sig { params(region: String).returns(String) }
|
|
41
|
+
attr_accessor :region
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module EML
|
|
5
|
+
module UK
|
|
6
|
+
class Payload
|
|
7
|
+
module Card
|
|
8
|
+
class Activation < ::EML::UK::Payload
|
|
9
|
+
REQUIRED_VALUES =
|
|
10
|
+
%i[amount location.name location.country sales_channel].freeze
|
|
11
|
+
REQUIRED_CONFIG = %i[merchant_group].freeze
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
sig { params(amount: Numeric).returns(Numeric) }
|
|
16
|
+
attr_accessor :amount
|
|
17
|
+
|
|
18
|
+
sig { params(campaign: String).returns(String) }
|
|
19
|
+
attr_accessor :campaign
|
|
20
|
+
|
|
21
|
+
sig { params(cardholder_user_id: String).returns(String) }
|
|
22
|
+
attr_accessor :cardholder_user_id
|
|
23
|
+
|
|
24
|
+
# While client_order_date is sent to EML as a JSON DateTime,
|
|
25
|
+
# there are many classes that could be used which causes a typing
|
|
26
|
+
# challenge. For example, if Rails is in use, we will probably receive
|
|
27
|
+
# a ActiveSupport::TimeWithZone
|
|
28
|
+
sig { params(client_order_date: T.untyped).returns(T.untyped) }
|
|
29
|
+
attr_accessor :client_order_date
|
|
30
|
+
|
|
31
|
+
sig { params(client_reference_number: String).void }
|
|
32
|
+
def client_reference_number=(client_reference_number)
|
|
33
|
+
validate_max_length(
|
|
34
|
+
:client_reference_number, client_reference_number, 50
|
|
35
|
+
)
|
|
36
|
+
@client_reference_number = client_reference_number
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# While client_time is sent to EML as a JSON DateTime,
|
|
40
|
+
# there are many classes that could be used which causes a typing
|
|
41
|
+
# challenge. For example, if Rails is in use, we will probably receive
|
|
42
|
+
# a ActiveSupport::TimeWithZone
|
|
43
|
+
sig { params(client_time: T.untyped).returns(T.untyped) }
|
|
44
|
+
attr_accessor :client_time
|
|
45
|
+
|
|
46
|
+
sig { params(client_tracking_id: String).void }
|
|
47
|
+
def client_tracking_id=(client_tracking_id)
|
|
48
|
+
validate_max_length(
|
|
49
|
+
:client_tracking_id, client_tracking_id, 50
|
|
50
|
+
)
|
|
51
|
+
@client_tracking_id = client_tracking_id
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
sig { params(location: Hash).void }
|
|
55
|
+
def location=(location)
|
|
56
|
+
@location = EML::UK::Payload::Location.new(location)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
sig { params(merchant_group: String).returns(String) }
|
|
60
|
+
attr_accessor :merchant_group
|
|
61
|
+
|
|
62
|
+
sig { params(note: String).returns(String) }
|
|
63
|
+
attr_accessor :note
|
|
64
|
+
|
|
65
|
+
SALES_CHANNELS = %w[Online InPerson].freeze
|
|
66
|
+
|
|
67
|
+
sig { params(sales_channel: String).returns(String) }
|
|
68
|
+
attr_accessor :sales_channel
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module EML
|
|
5
|
+
module UK
|
|
6
|
+
class Payload
|
|
7
|
+
module Card
|
|
8
|
+
class Lock < ::EML::UK::Payload
|
|
9
|
+
REQUIRED_CONFIG = %i[merchant_group].freeze
|
|
10
|
+
REQUIRED_VALUES = %i[note reason].freeze
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
sig { params(merchant_group: String).returns(String) }
|
|
15
|
+
attr_accessor :merchant_group
|
|
16
|
+
|
|
17
|
+
sig { params(note: String).returns(String) }
|
|
18
|
+
attr_accessor :note
|
|
19
|
+
|
|
20
|
+
REASONS = %w[
|
|
21
|
+
Damaged DataBreach Lost Miscellaneous OfficeError
|
|
22
|
+
PastAccountExpirationDate Stolen UnclaimedProperty
|
|
23
|
+
].freeze
|
|
24
|
+
|
|
25
|
+
sig { params(reason: String).void }
|
|
26
|
+
def reason=(reason)
|
|
27
|
+
validate_enum(:reason, reason, REASONS)
|
|
28
|
+
@reason = reason
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module EML
|
|
5
|
+
module UK
|
|
6
|
+
class Payload
|
|
7
|
+
module Card
|
|
8
|
+
class Register < ::EML::UK::Payload
|
|
9
|
+
include ISO
|
|
10
|
+
|
|
11
|
+
REQUIRED_VALUES =
|
|
12
|
+
%i[first_name last_name address1 city country email].freeze
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
sig { params(first_name: String).void }
|
|
17
|
+
def first_name=(first_name)
|
|
18
|
+
validate_max_length(:first_name, first_name, 50)
|
|
19
|
+
@first_name = first_name
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
sig { params(last_name: String).void }
|
|
23
|
+
def last_name=(last_name)
|
|
24
|
+
validate_max_length(:last_name, last_name, 50)
|
|
25
|
+
@last_name = last_name
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
sig { params(address1: String).void }
|
|
29
|
+
def address1=(address1)
|
|
30
|
+
validate_max_length(:address1, address1, 255)
|
|
31
|
+
@address1 = address1
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
sig { params(address2: String).void }
|
|
35
|
+
def address2=(address2)
|
|
36
|
+
validate_max_length(:address2, address2, 255)
|
|
37
|
+
@address2 = address2
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
sig { params(city: String).void }
|
|
41
|
+
def city=(city)
|
|
42
|
+
validate_max_length(:city, city, 255)
|
|
43
|
+
@city = city
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
sig { params(dob: String).void }
|
|
47
|
+
def dob=(dob)
|
|
48
|
+
validate_dob(dob)
|
|
49
|
+
@dob = dob
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
sig { params(email: String).void }
|
|
53
|
+
def email=(email)
|
|
54
|
+
validate_max_length(:email, email, 255)
|
|
55
|
+
@email = email
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
sig { params(phone: String).void }
|
|
59
|
+
def phone=(phone)
|
|
60
|
+
validate_max_length(:phone, phone, 20)
|
|
61
|
+
@phone = phone
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
sig { params(postal_code: String).returns(String) }
|
|
65
|
+
attr_accessor :postal_code
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# typed: true
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module EML
|
|
5
|
+
module UK
|
|
6
|
+
class Payload
|
|
7
|
+
module Card
|
|
8
|
+
class Reload < ::EML::UK::Payload
|
|
9
|
+
REQUIRED_CONFIG = %i[merchant_group].freeze
|
|
10
|
+
REQUIRED_VALUES = %i[amount location.country].freeze
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
sig { params(amount: Numeric).returns(Numeric) }
|
|
15
|
+
attr_accessor :amount
|
|
16
|
+
|
|
17
|
+
# While client_time is sent to EML as a JSON DateTime, there are many
|
|
18
|
+
# classes that could be used which causes a typing challenge. For
|
|
19
|
+
# example, if Rails is in use, we will probably receive a
|
|
20
|
+
# ActiveSupport::TimeWithZone
|
|
21
|
+
sig { params(client_time: T.untyped).returns(T.untyped) }
|
|
22
|
+
attr_accessor :client_time
|
|
23
|
+
|
|
24
|
+
sig { params(location: Hash).void }
|
|
25
|
+
def location=(location)
|
|
26
|
+
@location = EML::UK::Payload::Location.new(location)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
sig { params(merchant_group: String).returns(String) }
|
|
30
|
+
attr_accessor :merchant_group
|
|
31
|
+
|
|
32
|
+
sig { params(note: String).returns(String) }
|
|
33
|
+
attr_accessor :note
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|