synapse_pay_rest 3.2.2 → 3.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: '0238b5f86667781ee63382a874434f1257061643'
4
- data.tar.gz: ee3bedd0c2a1442b65c5c4eecae46ff04e742786
3
+ metadata.gz: a7b9318467c17d58d84b25ee16da62c521d831a3
4
+ data.tar.gz: e12ddb18f8d2cbeeea1793aa0c0994b1c7181241
5
5
  SHA512:
6
- metadata.gz: eac79fe951c026a702fb481975744c26a92f1ca9c808b846e3bc4101159dce69959999dd6cfa76e7920f998c0204fd044907e0647a7a80e260804c05a783f332
7
- data.tar.gz: 6b6f88845e3a60e9f76ff268a30bcf4e473ca6b5601b7c9e59253305e75b64f68f3767dafec43d74b87200d368fa510abc3caa0bb613b0ebdc82755b5451f7f6
6
+ metadata.gz: 29b7c4622218262bfe57afb889746f44a59f3f0a1827918de70832dcad42d7c4e1c5985e992b17241b8127854f5b0d1873854ab4508f75b8fe0e731eb8c891d4
7
+ data.tar.gz: f16edcbc0d7681811068e9a9ed2f8efcdba30e7d749f718fd53246e7a614042bf66c64288806405dc52a74b203d4ac222564cfb543518f3add979c3e4b6b1839
data/.gitignore CHANGED
@@ -41,5 +41,5 @@ Gemfile.lock
41
41
 
42
42
  ## ENV variables and other secrets
43
43
  .env
44
- test.txt
45
44
  *.yml
45
+ test.rb
@@ -0,0 +1,87 @@
1
+ module SynapsePayRest
2
+ # Wrapper class for /subscriptions endpoints
3
+ #
4
+ # @todo Implement idempotency keys
5
+ class Subscriptions
6
+
7
+ # Valid optional args for #get
8
+ # @todo Refactor to HTTPClient
9
+ VALID_QUERY_PARAMS = [:page, :per_page].freeze
10
+
11
+ # @!attribute [rw] client
12
+ # @return [SynapsePayRest::HTTPClient]
13
+ attr_accessor :client
14
+
15
+ # @param client [SynapsePayRest::HTTPClient]
16
+ def initialize(client)
17
+ @client = client
18
+ end
19
+
20
+ # Sends a POST request to /subscriptions endpoint to create a new subscription.
21
+ # Returns the response.
22
+ #
23
+ # @param url [String]
24
+ # @param scope [Array]
25
+ # @see https://docs.synapsepay.com/docs/create-subscription payload structure
26
+ #
27
+ # @raise [SynapsePayRest::Error] may return subclasses of error based on
28
+ # HTTP response from API
29
+ #
30
+ # @return [Hash] API response
31
+ def create(payload:)
32
+ path = subscription_path
33
+ client.post(path, payload)
34
+ end
35
+
36
+ # Sends a GET request to /subscriptions endpoint. Queries a specific subscription_id
37
+ # if subs_id supplied, else queries all subscriptions. Returns the response.
38
+ #
39
+ # @param subscription_id [String,void] (optional) id of a subscription to look up
40
+ # @param page [String,Integer] (optional) response will default to 1
41
+ # @param per_page [String,Integer] (optional) response will default to 20
42
+ #
43
+ # @raise [SynapsePayRest::Error] may return subclasses of error based on
44
+ # HTTP response from API
45
+ #
46
+ # @return [Hash] API response
47
+ #
48
+ # @todo Probably should use CGI or RestClient's param builder instead of
49
+ # rolling our own, probably error-prone and untested version
50
+ # https://github.com/rest-client/rest-client#usage-raw-url
51
+ def get(subscription_id: nil, **options)
52
+ path = subscription_path(subscription_id: subscription_id)
53
+
54
+ params = VALID_QUERY_PARAMS.map do |p|
55
+ options[p] ? "#{p}=#{options[p]}" : nil
56
+ end.compact
57
+
58
+ path += '?' + params.join('&') if params.any?
59
+ client.get(path)
60
+ end
61
+
62
+ # Sends a PATCH request to /subscriptions endpoint, updating the current subscription
63
+ # and returns the response.
64
+ #
65
+ # @param payload [Hash]
66
+ # @see https://docs.synapsepay.com/docs/update-subscription payload structure for
67
+ # updating subscription
68
+ #
69
+ # @raise [SynapsePayRest::Error] may return subclasses of error based on
70
+ # HTTP response from API
71
+ #
72
+ # @return [Hash] API response
73
+ def update(subscription_id:, payload:)
74
+ path = subscription_path(subscription_id: subscription_id)
75
+ client.patch(path, payload)
76
+ end
77
+
78
+ private
79
+
80
+ def subscription_path(subscription_id: nil)
81
+ path = "/subscriptions"
82
+ path += "/#{subscription_id}" if subscription_id
83
+ path
84
+ end
85
+
86
+ end
87
+ end
@@ -11,7 +11,9 @@ module SynapsePayRest
11
11
  # @return [SynapsePayRest::Nodes]
12
12
  # @!attribute [rw] transactions
13
13
  # @return [SynapsePayRest::Transactions]
14
- attr_accessor :http_client, :users, :nodes, :transactions
14
+ # @!attribute [rw] subscriptions
15
+ # @return [SynapsePayRest::Subscriptions]
16
+ attr_accessor :http_client, :users, :nodes, :transactions, :subscriptions
15
17
 
16
18
  # Alias for #transactions (legacy name)
17
19
  alias_method :trans, :transactions
@@ -39,9 +41,10 @@ module SynapsePayRest
39
41
  fingerprint: fingerprint,
40
42
  ip_address: ip_address,
41
43
  **options)
42
- @users = Users.new @http_client
43
- @nodes = Nodes.new @http_client
44
- @transactions = Transactions.new @http_client
44
+ @users = Users.new @http_client
45
+ @nodes = Nodes.new @http_client
46
+ @transactions = Transactions.new @http_client
47
+ @subscriptions = Subscriptions.new @http_client
45
48
  end
46
49
  end
47
50
  end
@@ -33,15 +33,14 @@ module SynapsePayRest
33
33
  end
34
34
  end
35
35
 
36
- # Creates an ACH-US node via access token, belonging to user supplied.
36
+ # Creates an Unverified Node Class node via access token, belonging to this user
37
37
  #
38
38
  # @param user [SynapsePayRest::User] the user to whom the node belongs
39
39
  # @param access_token [String] user's access token
40
40
  #
41
41
  # @raise [SynapsePayRest::Error]
42
42
  #
43
- # @return [Array<SynapsePayRest::AchUsNode>] may contain multiple nodes (checking and/or savings)
44
-
43
+ # @return [<SynapsePayRest::UnverifiedNode>]
45
44
  def create_via_bank_login_mfa(user:, access_token:)
46
45
  raise ArgumentError, 'user must be a User object' unless user.is_a?(User)
47
46
  raise ArgumentError, 'access_token must be a String' unless access_token.is_a?(String)
@@ -88,10 +88,12 @@ module SynapsePayRest
88
88
  account_class: response['info']['class'],
89
89
  account_number: response['info']['account_num'],
90
90
  routing_number: response['info']['routing_num'],
91
- account_id: response['info']['account_id'],
92
91
  address: response['info']['address'],
93
92
  swift: response['info']['swift'],
94
- ifsc: response['info']['ifsc']
93
+ ifsc: response['info']['ifsc'],
94
+ user_info: nil,
95
+ transactions: nil,
96
+ timeline: nil
95
97
  }
96
98
 
97
99
  if response['info']['correspondent_info']
@@ -121,6 +123,21 @@ module SynapsePayRest
121
123
  args[:gateway_restricted] = extra['gateway_restricted']
122
124
  end
123
125
 
126
+ if response['extra']['other']['info']
127
+ user_info = response['extra']['other']['info']
128
+ args[:user_info] = user_info
129
+ end
130
+
131
+ if response['extra']['other']['transactions']
132
+ transactions = response['extra']['transactions']
133
+ args[:transactions] = transactions
134
+ end
135
+
136
+ if response['timeline']
137
+ timeline = response['timeline']
138
+ args[:timeline] = timeline
139
+ end
140
+
124
141
  self.new(**args)
125
142
  end
126
143
 
@@ -30,7 +30,7 @@ module SynapsePayRest
30
30
  # @raise [SynapsePayRest::Error] if HTTP error
31
31
  #
32
32
  # @return [SynapsePayRest::BaseNode] subclass depends on node type
33
- def find(user:, id:, full_dehydrate:)
33
+ def find(user:, id:, full_dehydrate: 'no')
34
34
  raise ArgumentError, 'user must be a User object' unless user.is_a?(User)
35
35
  raise ArgumentError, 'id must be a String' unless id.is_a?(String)
36
36
 
@@ -0,0 +1,138 @@
1
+ module SynapsePayRest
2
+ # Represents a subscription record and holds methods for creating subscription instances
3
+ # from API calls. This is built on top of the SynapsePayRest::Subscription class and
4
+ # is intended to make it easier to use the API without knowing payload formats
5
+ # or knowledge of REST.
6
+ #
7
+ # @todo use mixins to remove duplication between Node and BaseNode.
8
+ class Subscription
9
+ attr_reader :id, :is_active, :scope, :url
10
+
11
+ class << self
12
+ # Creates a new subscription in the API and returns a Subscription instance from the
13
+ # response data.
14
+ #
15
+ # @param client [SynapsePayRest::Client]
16
+ # @param scope [Array<String>]
17
+ # @param url [String]
18
+ #
19
+ # @raise [SynapsePayRest::Error] if HTTP error or invalid argument format
20
+ #
21
+ # @return [SynapsePayRest::Subscription]
22
+ def create(client:, url:, scope:, **options)
23
+ raise ArgumentError, 'client must be a SynapsePayRest::Client' unless client.is_a?(Client)
24
+ raise ArgumentError, 'url must be a String' unless url.is_a? String
25
+ raise ArgumentError, 'scope must be an Array' unless scope.is_a? Array
26
+
27
+ payload = payload_for_create(url: url, scope: scope, **options)
28
+ response = client.subscriptions.create(payload: payload)
29
+ from_response(response)
30
+ end
31
+
32
+ # Queries the API for a subscription by id and returns a Subscription instances if found.
33
+ #
34
+ # @param client [SynapsePayRest::Client]
35
+ # @param id [String] id of the subscription to find
36
+ #
37
+ # @raise [SynapsePayRest::Error] if user not found or invalid client credentials
38
+ #
39
+ # @return [SynapsePayRest::Subscription]
40
+ def find(client:, id:)
41
+ raise ArgumentError, 'client must be a SynapsePayRest::Client' unless client.is_a?(Client)
42
+ raise ArgumentError, 'id must be a String' unless id.is_a?(String)
43
+
44
+ response = client.subscriptions.get(subscription_id: id)
45
+ from_response(response)
46
+ end
47
+
48
+ # Queries the API for all subscriptions and returns them as Subscription instances.
49
+ #
50
+ # @param client [SynapsePayRest::Client]
51
+ # @param page [String,Integer] (optional) response will default to 1
52
+ # @param per_page [String,Integer] (optional) response will default to 20
53
+ #
54
+ # @raise [SynapsePayRest::Error] if HTTP error or invalid argument format
55
+ #
56
+ # @return [Array<SynapsePayRest::Subscription>]
57
+ def all(client:, page: nil, per_page: nil)
58
+ raise ArgumentError, 'client must be a SynapsePayRest::Client' unless client.is_a?(Client)
59
+ [page, per_page].each do |arg|
60
+ if arg && (!arg.is_a?(Integer) || arg < 1)
61
+ raise ArgumentError, "#{arg} must be nil or an Integer >= 1"
62
+ end
63
+ end
64
+ response = client.subscriptions.get(page: page, per_page: per_page)
65
+ multiple_from_response(response['subscriptions'])
66
+ end
67
+
68
+ # Updates the given key value pairs.
69
+ #
70
+ # @param is_active [boolean]
71
+ # @param url [String]
72
+ # @param scope [Array<String>]
73
+ #
74
+ # @raise [SynapsePayRest::Error] if HTTP error or invalid argument format
75
+ #
76
+ # @return [SynapsePayRest::Subscription] new instance corresponding to same API record
77
+ def update(client:, is_active:, url:, scope:, **options)
78
+ raise ArgumentError, 'client must be a SynapsePayRest::Client' unless client.is_a?(Client)
79
+
80
+ payload = payload_for_update(is_active: is_active, url: url, scope: scope, **options)
81
+ response = client.subscriptions.update(payload: payload)
82
+ from_response(response)
83
+ end
84
+
85
+ # Creates a Subscription from a response hash.
86
+ #
87
+ # @note Shouldn't need to call this directly.
88
+ def from_response(response)
89
+ args = {
90
+ id: response['_id'],
91
+ is_active: response['is_active'],
92
+ scope: response['scope'],
93
+ url: response['url']
94
+ }
95
+ self.new(args)
96
+ end
97
+
98
+ # Calls from_response on each member of a response collection.
99
+ def multiple_from_response(response)
100
+ return [] if response.empty?
101
+ response.map { |subscription_data| from_response(subscription_data)}
102
+ end
103
+
104
+ private
105
+
106
+ # Converts #create args into API payload structure.
107
+ def payload_for_create(**options)
108
+ payload = {}
109
+ # must have one of these
110
+ payload['url'] = options[:url] if options[:url]
111
+ payload['scope'] = options[:scope] if options[:scope]
112
+ payload
113
+ end
114
+
115
+ # Converts #update args into API payload structure.
116
+ def payload_for_update(**options)
117
+ payload = {}
118
+ # must have one of these
119
+ payload['is_active'] = options[:is_active] if options[:is_active]
120
+ payload['url'] = options[:url] if options[:url]
121
+ payload['scope'] = options[:scope] if options[:scope]
122
+ payload
123
+ end
124
+
125
+ end
126
+
127
+ # @note Do not call directly. Use Subscription.create or other class method
128
+ # to instantiate via API action.
129
+ def initialize(**options)
130
+ options.each { |key, value| instance_variable_set("@#{key}", value) }
131
+ end
132
+
133
+ # Checks if two Subscription instances have same id (different instances of same record).
134
+ def ==(other)
135
+ other.instance_of?(self.class) && !id.nil? && id == other.id
136
+ end
137
+ end
138
+ end
@@ -10,10 +10,11 @@ module SynapsePayRest
10
10
  :entity_scope, :birth_day, :birth_month, :birth_year,
11
11
  :address_street, :address_city, :address_subdivision,
12
12
  :address_postal_code, :address_country_code,
13
- :physical_documents, :social_documents, :virtual_documents
13
+ :physical_documents, :social_documents, :virtual_documents,
14
+ :alias, :day, :month, :year, :screening_results
14
15
  attr_reader :id, :permission_scope
15
16
 
16
- class << self
17
+ class << self
17
18
  # Creates a new base document in the API belonging to the provided user and
18
19
  # returns a base document instance from the response data.
19
20
  #
@@ -66,28 +67,27 @@ module SynapsePayRest
66
67
  raise ArgumentError, 'virtual_documents be empty or contain VirtualDocument(s)'
67
68
  end
68
69
 
69
- base_document = BaseDocument.new(
70
- user: user,
71
- email: email,
72
- phone_number: phone_number,
73
- ip: ip,
74
- name: name,
75
- aka: aka,
76
- entity_type: entity_type,
77
- entity_scope: entity_scope,
78
- birth_day: birth_day,
79
- birth_month: birth_month,
80
- birth_year: birth_year,
81
- address_street: address_street,
82
- address_city: address_city,
83
- address_subdivision: address_subdivision,
84
- address_postal_code: address_postal_code,
85
- address_country_code: address_country_code,
86
- physical_documents: physical_documents,
87
- social_documents: social_documents,
88
- virtual_documents: virtual_documents
89
- )
90
-
70
+ base_document = BaseDocument.new({
71
+ "user"=>user,
72
+ "email"=>email,
73
+ "phone_number"=>phone_number,
74
+ "ip"=>ip,
75
+ "name"=>name,
76
+ "aka"=>aka,
77
+ "entity_type"=>entity_type,
78
+ "entity_scope"=>entity_scope,
79
+ "birth_day"=>birth_day,
80
+ "birth_month"=>birth_month,
81
+ "birth_year"=>birth_year,
82
+ "address_street"=>address_street,
83
+ "address_city"=>address_city,
84
+ "address_subdivision"=>address_subdivision,
85
+ "address_postal_code"=>address_postal_code,
86
+ "address_country_code"=>address_country_code,
87
+ "physical_documents"=>physical_documents,
88
+ "social_documents"=>social_documents,
89
+ "virtual_documents"=>virtual_documents
90
+ })
91
91
  base_document.submit
92
92
  end
93
93
 
@@ -113,15 +113,42 @@ module SynapsePayRest
113
113
  end
114
114
 
115
115
  args = {
116
- user: user,
117
- id: base_document_data['id'],
118
- name: base_document_data['name'],
119
- permission_scope: base_document_data['permission_scope'],
120
- physical_documents: physical_docs,
121
- social_documents: social_docs,
122
- virtual_documents: virtual_docs
116
+ "user"=>user,
117
+ "id"=>base_document_data['id'],
118
+ "name"=>base_document_data['name'],
119
+ "permission_scope"=>base_document_data['permission_scope'],
120
+ "address_city"=>nil,
121
+ "address_country_code"=>nil,
122
+ "address_postal_code"=>nil,
123
+ "address_street"=>nil,
124
+ "address_subdivision"=>nil,
125
+ "alias"=>nil,
126
+ "day"=>nil,
127
+ "email"=>nil,
128
+ "entity_scope"=>nil,
129
+ "entity_type"=>nil,
130
+ "ip"=>nil,
131
+ "month"=>nil,
132
+ "phone_number"=>nil,
133
+ "year"=>nil,
134
+ "screening_results"=>nil,
135
+ "physical_documents"=>physical_docs,
136
+ "social_documents"=>social_docs,
137
+ "virtual_documents"=>virtual_docs
123
138
  }
124
139
 
140
+ other_keys = base_document_data.keys
141
+
142
+ ["physical_docs", "social_docs", "virtual_docs"].each do |item|
143
+ other_keys.delete_at(other_keys.index(item))
144
+ end
145
+
146
+ for key in other_keys do
147
+ if base_document_data.has_key?(key)
148
+ args[key] = base_document_data[key]
149
+ end
150
+ end
151
+
125
152
  base_doc = self.new(args)
126
153
  [physical_docs, social_docs, virtual_docs].flatten.each do |doc|
127
154
  doc.base_document = base_doc
@@ -133,28 +160,29 @@ module SynapsePayRest
133
160
  end
134
161
 
135
162
  # @note It should not be necessary to call this method directly.
136
- def initialize(**args)
137
- @id = args[:id]
138
- @permission_scope = args[:permission_scope]
139
- @user = args[:user]
140
- @email = args[:email]
141
- @phone_number = args[:phone_number]
142
- @ip = args[:ip]
143
- @name = args[:name]
144
- @aka = args[:aka]
145
- @entity_type = args[:entity_type]
146
- @entity_scope = args[:entity_scope]
147
- @birth_day = args[:birth_day]
148
- @birth_month = args[:birth_month]
149
- @birth_year = args[:birth_year]
150
- @address_street = args[:address_street]
151
- @address_city = args[:address_city]
152
- @address_subdivision = args[:address_subdivision]
153
- @address_postal_code = args[:address_postal_code]
154
- @address_country_code = args[:address_country_code]
155
- @physical_documents = args[:physical_documents]
156
- @social_documents = args[:social_documents]
157
- @virtual_documents = args[:virtual_documents]
163
+ def initialize(args)
164
+ @id = args["id"]
165
+ @permission_scope = args["permission_scope"]
166
+ @user = args["user"]
167
+ @email = args["email"]
168
+ @phone_number = args["phone_number"]
169
+ @ip = args["ip"]
170
+ @name = args["name"]
171
+ @aka = args["aka"]
172
+ @entity_type = args["entity_type"]
173
+ @entity_scope = args["entity_scope"]
174
+ @birth_day = args["birth_day"]
175
+ @birth_month = args["birth_month"]
176
+ @birth_year = args["birth_year"]
177
+ @address_street = args["address_street"]
178
+ @address_city = args["address_city"]
179
+ @address_subdivision = args["address_subdivision"]
180
+ @address_postal_code = args["address_postal_code"]
181
+ @address_country_code = args["address_country_code"]
182
+ @screening_results = args["screening_results"]
183
+ @physical_documents = args["physical_documents"]
184
+ @social_documents = args["social_documents"]
185
+ @virtual_documents = args["virtual_documents"]
158
186
  end
159
187
 
160
188
  # Submits the base document to the API.
@@ -8,7 +8,7 @@ module SynapsePayRest
8
8
  # @return [SynapsePayRest::BaseDocument] the base document to which the document belongs
9
9
  # @!attribute [rw] status
10
10
  # @return [String] https://docs.synapsepay.com/docs/user-resources#section-document-status
11
- attr_accessor :base_document, :status, :id, :type, :value, :last_updated
11
+ attr_accessor :base_document, :status, :id, :type, :value, :last_updated, :document_value, :meta
12
12
 
13
13
  class << self
14
14
  # Creates a document instance but does not submit it to the API. Use
@@ -35,12 +35,23 @@ module SynapsePayRest
35
35
 
36
36
  # @note Do not call this method. It is used by child classes only.
37
37
  def from_response(data)
38
- self.new(
39
- type: data['document_type'],
40
- id: data['id'],
41
- status: data['status'],
42
- last_updated: data['last_updated']
38
+ doc = self.new(
39
+ type: data['document_type'],
40
+ id: data['id'],
41
+ status: data['status'],
42
+ last_updated: data['last_updated'],
43
+ document_value: nil,
44
+ meta: nil
43
45
  )
46
+
47
+ if data.has_key?('document_value')
48
+ doc.document_value = data['document_value']
49
+ end
50
+
51
+ if data.has_key?('meta')
52
+ doc.meta = data['meta']
53
+ end
54
+ doc
44
55
  end
45
56
  end
46
57
 
@@ -53,6 +64,8 @@ module SynapsePayRest
53
64
  # only exist for fetched data
54
65
  @status = options[:status]
55
66
  @last_updated = options[:last_updated]
67
+ @document_value = options[:document_value]
68
+ @meta = options[:meta]
56
69
  end
57
70
 
58
71
  # Checks if two Document instances have same id (different instances of same record).
@@ -13,7 +13,7 @@ module SynapsePayRest
13
13
  # @return [String] https://docs.synapsepay.com/docs/user-resources#section-user-permissions
14
14
  attr_reader :client, :id, :logins, :phone_numbers, :legal_names, :note,
15
15
  :supp_id, :is_business, :cip_tag, :permission
16
- attr_accessor :refresh_token, :base_documents
16
+ attr_accessor :refresh_token, :base_documents, :oauth_key, :expires_in, :flag, :ips
17
17
 
18
18
  class << self
19
19
  # Creates a new user in the API and returns a User instance from the
@@ -69,11 +69,12 @@ module SynapsePayRest
69
69
  # @raise [SynapsePayRest::Error] if user not found or invalid client credentials
70
70
  #
71
71
  # @return [SynapsePayRest::User]
72
- def find(client:, id:, full_dehydrate:)
72
+ def find(client:, id:, full_dehydrate:'no')
73
73
  raise ArgumentError, 'client must be a SynapsePayRest::Client' unless client.is_a?(Client)
74
74
  raise ArgumentError, 'id must be a String' unless id.is_a?(String)
75
75
 
76
76
  response = client.users.get(user_id: id, full_dehydrate: full_dehydrate)
77
+
77
78
  from_response(client, response)
78
79
  end
79
80
 
@@ -157,9 +158,21 @@ module SynapsePayRest
157
158
  note: response['extra']['note'],
158
159
  supp_id: response['extra']['supp_id'],
159
160
  is_business: response['extra']['is_business'],
160
- cip_tag: response['extra']['cip_tag']
161
+ cip_tag: response['extra']['cip_tag'],
162
+ flag: nil,
163
+ ips: nil,
164
+ oauth_key: nil,
165
+ expires_in: nil
161
166
  )
162
167
 
168
+ if response.has_key?('flag')
169
+ user.flag = response['flag']
170
+ end
171
+
172
+ if response.has_key?('ips')
173
+ user.ips = response['ips']
174
+ end
175
+
163
176
  unless response['documents'].empty?
164
177
  base_documents = BaseDocument.from_response(user, response)
165
178
  user.base_documents = base_documents
@@ -186,9 +199,11 @@ module SynapsePayRest
186
199
  #
187
200
  # @raise [SynapsePayRest::Error]
188
201
  #
189
- # @return [SynapsePayRest::User] (self)
202
+ # @return [SynapsePayRest::User] (new instance with updated tokens)
190
203
  def authenticate
191
- client.users.refresh(user_id: id, payload: payload_for_refresh)
204
+ response = client.users.refresh(user_id: id, payload: payload_for_refresh)
205
+ self.oauth_key = response['oauth_key']
206
+ self.expires_in = response['expires_in']
192
207
  self
193
208
  end
194
209
 
@@ -303,6 +318,19 @@ module SynapsePayRest
303
318
  update(phone_number: phone_number)
304
319
  end
305
320
 
321
+ # Add a legal_name to the user.
322
+ #
323
+ # @param legal_name [String]
324
+ #
325
+ # @raise [SynapsePayRest::Error]
326
+ #
327
+ # @return [SynapsePayRest::User] new instance corresponding to same API record
328
+ def add_legal_name(legal_name)
329
+ raise ArgumentError, 'legal_name must be a String' unless legal_name.is_a? String
330
+
331
+ update(legal_name: legal_name)
332
+ end
333
+
306
334
  # Removes a phone_number from the user.
307
335
  #
308
336
  # @param phone_number [String]
@@ -441,6 +469,18 @@ module SynapsePayRest
441
469
  AchUsNode.create_via_bank_login(user: self, **options)
442
470
  end
443
471
 
472
+ # Creates an Unverified Node Class node via access token, belonging to this user
473
+ #
474
+ # @param access_token [String]
475
+ # @see https://synapsepay.com/api/v3/institutions/show valid bank_name options
476
+ #
477
+ # @raise [SynapsePayRest::Error]
478
+ #
479
+ # @return [<SynapsePayRest::UnverifiedNode>]
480
+ def create_ach_us_nodes_via_bank_login_mfa(**options)
481
+ AchUsNode.create_via_bank_login_mfa(user: self, **options)
482
+ end
483
+
444
484
  # Creates an EFT-IND node.
445
485
  #
446
486
  # @param nickname [String] nickname for the node
@@ -1,4 +1,4 @@
1
1
  module SynapsePayRest
2
2
  # Gem version
3
- VERSION = '3.2.2'.freeze
3
+ VERSION = '3.2.3'.freeze
4
4
  end
@@ -6,6 +6,7 @@ require 'synapse_pay_rest/http_client'
6
6
  require 'synapse_pay_rest/api/users'
7
7
  require 'synapse_pay_rest/api/nodes'
8
8
  require 'synapse_pay_rest/api/transactions'
9
+ require 'synapse_pay_rest/api/subscriptions'
9
10
 
10
11
  # general library classes
11
12
  require 'synapse_pay_rest/error'
@@ -52,6 +53,9 @@ require 'synapse_pay_rest/models/node/node'
52
53
  # transaction-related classes
53
54
  require 'synapse_pay_rest/models/transaction/transaction'
54
55
 
56
+ # subscription-related classes
57
+ require 'synapse_pay_rest/models/subscription/subscription'
58
+
55
59
  # Namespace for all SynapsePayRest classes and modules
56
60
  module SynapsePayRest
57
61
  # Modifies the default method to print a warning when deprecated constants
data/samples.md CHANGED
@@ -44,9 +44,7 @@ args = {
44
44
  # (optional) uses API default of 20 unless specified, larger values take longer
45
45
  per_page: 50,
46
46
  # (optional) filters by name/email match
47
- query: nil,
48
- # (optional) returns all KYC on user
49
- full_dehydrate: yes
47
+ query: nil
50
48
  }
51
49
 
52
50
  users = SynapsePayRest::User.all(args)
@@ -56,8 +54,11 @@ users = SynapsePayRest::User.all(args)
56
54
  #### Find a User by User ID
57
55
 
58
56
  ```ruby
59
- user = SynapsePayRest::User.find(client: client, id: '57e97ab786c2737f4ccd4dc1', full_dehydrate: 'no')
57
+ user = SynapsePayRest::User.find(client: client, id: '57e97ab786c2737f4ccd4dc1')
60
58
  # => #<SynapsePayRest::User>
59
+
60
+ # full_dehydrate: 'yes' optional, see docs for response example (https://docs.synapsepay.com/docs/get-user)
61
+ user = SynapsePayRest::User.find(client: client, id: '57e97ab786c2737f4ccd4dc1', full_dehydrate: 'yes')
61
62
  ```
62
63
 
63
64
  #### Search for a User by Name/Email
@@ -311,9 +312,12 @@ node = user.find_node(id: '1a3efa1231as2f')
311
312
  ##### b) Node#find
312
313
 
313
314
  ```ruby
314
- # full_dehydrate: 'yes' (optional) returns all trans data on node
315
- node = SynapsePayRest::Node.find(user: user, id: '1a3efa1231as2f', full_dehydrate: 'no')
315
+ node = SynapsePayRest::Node.find(user: user, id: '1a3efa1231as2f')
316
316
  # => #<SynapsePayRest::EftNpNode>
317
+
318
+ # full_dehydrate: 'yes' (optional) returns all trans data on node
319
+ node = SynapsePayRest::Node.find(user: user, id: '1a3efa1231as2f', full_dehydrate: 'yes')
320
+
317
321
  ```
318
322
 
319
323
  #### Create ACH-US Node(s) via Bank Login
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: synapse_pay_rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.2
4
+ version: 3.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Broderick
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-05-24 00:00:00.000000000 Z
12
+ date: 2017-05-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -152,6 +152,7 @@ files:
152
152
  - bin/console
153
153
  - lib/synapse_pay_rest.rb
154
154
  - lib/synapse_pay_rest/api/nodes.rb
155
+ - lib/synapse_pay_rest/api/subscriptions.rb
155
156
  - lib/synapse_pay_rest/api/transactions.rb
156
157
  - lib/synapse_pay_rest/api/users.rb
157
158
  - lib/synapse_pay_rest/client.rb
@@ -171,6 +172,7 @@ files:
171
172
  - lib/synapse_pay_rest/models/node/unverified_node.rb
172
173
  - lib/synapse_pay_rest/models/node/wire_int_node.rb
173
174
  - lib/synapse_pay_rest/models/node/wire_us_node.rb
175
+ - lib/synapse_pay_rest/models/subscription/subscription.rb
174
176
  - lib/synapse_pay_rest/models/transaction/transaction.rb
175
177
  - lib/synapse_pay_rest/models/user/base_document.rb
176
178
  - lib/synapse_pay_rest/models/user/document.rb