sift 4.2.0 → 4.3.0

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
  SHA256:
3
- metadata.gz: cf4d6cd2e8ea54d5ea80fdca8b5668a1f86aa2639eaa1b69a105e8e81dd31222
4
- data.tar.gz: cd087556fba6bbfd8269366fb8a7ae1c4727841a184056f09406a9c6d78658f5
3
+ metadata.gz: e538e799471ba36d0c73d8b6bdea81f56e5928ef018a01a8aa0d1d376151ba97
4
+ data.tar.gz: 7ba73b5ea722594550ce5fb2b9259c8728b6658ac393206f991ac182e6216fd1
5
5
  SHA512:
6
- metadata.gz: 66a74c28328b082be3b0f492f0f001c998a7bc99bd95ede179a4c950974b332b4b55158cf418677ce4b904307464912f3248a56b200b88bb76038fd38cdff281
7
- data.tar.gz: e6bb108cbcbf692266ff6d87a0a426476e8ad0a4523a2436a9f3d6f201ceeab63baad1121466e6a1ef7ec16df7135a577e59e532fe3d463ea47c6c7f47955576
6
+ metadata.gz: d6a650d190c215fa627b364e134e51d35012edd1b40682c8d24e8ea446e7bbbcfc2121189d9ef1335a5f67ee5aeb4472c42823e99737bd5879ea14a51c4f0e2c
7
+ data.tar.gz: 1569ecf84bf4bfee1991a7664922293a24ab6993ac56766b28a10183cd8cc593641ff301c3e68fbdc1e8f2f51b3425b1ad64131332c12c4ded51489e54703eb3
@@ -0,0 +1,50 @@
1
+ name: Build and Publish Gem
2
+ on:
3
+ release:
4
+ types: [published]
5
+
6
+ env:
7
+ GH_TOKEN: ${{ github.token }}
8
+
9
+ jobs:
10
+ build_and_publish:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - name: Checkout code
14
+ uses: actions/checkout@v3
15
+
16
+
17
+ - name: Set up Ruby
18
+ uses: ruby/setup-ruby@v1
19
+ with:
20
+ ruby-version: 2.7
21
+
22
+ - name: Install Bundler
23
+ run: |
24
+ sudo gem install bundler
25
+ bundle install
26
+
27
+ - name: Build and push gem
28
+ run: |
29
+ mkdir -p $HOME/.gem
30
+ touch $HOME/.gem/credentials
31
+ chmod 0600 $HOME/.gem/credentials
32
+ printf -- "---\n:rubygems_api_key: ${{ secrets.GH_RGEMS_KEY }}\n" > $HOME/.gem/credentials
33
+ version=$(awk -F'"' '/ VERSION = / {print $2}' < lib/sift/version.rb)
34
+ all_versions=$(gem list -r -e --all sift --no-verbose)
35
+ if [[ $all_versions != *"$version"* ]]; then
36
+ echo "Gem version does not exist on RubyGems. Building and pushing!"
37
+ gem build sift.gemspec
38
+ gem push sift-$version.gem
39
+ rm -rf $HOME/.gem
40
+ ls -la $HOME/
41
+ else
42
+ echo "Gem version $version exists on RubyGems"
43
+ fi
44
+
45
+ - name: Run Rake tasks
46
+ run: |
47
+ bundle exec rake -T
48
+ bundle exec rake build
49
+ bundle exec rake install
50
+ bundle exec rake release
data/.gitignore CHANGED
@@ -3,3 +3,4 @@
3
3
  .bundle
4
4
  Gemfile.lock
5
5
  pkg/*
6
+ .idea
data/HISTORY CHANGED
@@ -1,3 +1,6 @@
1
+ === 4.3.0 2023-08-21
2
+ - PSP Merchant Management API
3
+
1
4
  === 4.2.0 2023-06-20
2
5
  - Verification API support [Verification API](https://sift.com/developers/docs/curl/verification-api/overview)
3
6
  - Support for score percentiles (only applicable for the accounts with the feature enabled)
data/README.md CHANGED
@@ -217,6 +217,72 @@ response = client.get_session_decisions('example_user_id', 'example_session_id')
217
217
  response = client.get_content_decisions('example_user_id', 'example_order_id')
218
218
  ```
219
219
 
220
+ ## PSP Merchant Management API
221
+
222
+ To learn more about the decisions endpoint visit our [developer docs](https://sift.com/developers/docs/ruby/psp-merchant-management-api).
223
+
224
+ ```ruby
225
+ # On-board a PSP merchant summary to Sift Platform.
226
+ # Sample psp_merchant_profile
227
+ properties = {
228
+ "id": "merchant_id_01000",
229
+ "name": "Wonderful Payments Inc.",
230
+ "description": "Wonderful Payments payment provider.",
231
+ "address": {
232
+ "name": "Alany",
233
+ "address_1": "Big Payment blvd, 22",
234
+ "address_2": "apt, 8",
235
+ "city": "New Orleans",
236
+ "region": "NA",
237
+ "country": "US",
238
+ "zipcode": "76830",
239
+ "phone": "0394888320"
240
+ },
241
+ "category": "1002",
242
+ "service_level": "Platinum",
243
+ "status": "active",
244
+ "risk_profile": {
245
+ "level": "low",
246
+ "score": 10
247
+ }
248
+ }
249
+ response = client.create_psp_merchant_profile(properties)
250
+
251
+ # Update a merchant summary to reflect changes in the status or service level or address etc.
252
+ properties = {
253
+ "id": "merchant_id_01000",
254
+ "name": "Wonderful Payments Inc.",
255
+ "description": "Wonderful Payments payment provider.",
256
+ "address": {
257
+ "name": "Alany",
258
+ "address_1": "Big Payment blvd, 22",
259
+ "address_2": "apt, 8",
260
+ "city": "New Orleans",
261
+ "region": "NA",
262
+ "country": "US",
263
+ "zipcode": "76830",
264
+ "phone": "0394888320"
265
+ },
266
+ "category": "1002",
267
+ "service_level": "Platinum",
268
+ "status": "active",
269
+ "risk_profile": {
270
+ "level": "low",
271
+ "score": 10
272
+ }
273
+ }
274
+ response = client.update_psp_merchant_profile('merchant_id', properties)
275
+
276
+ # Get the existing PSP merchant summaries.
277
+ response = client.get_a_psp_merchant_profile('merchant_id')
278
+
279
+ # Get all PSP merchant summaries
280
+ response = client.get_psp_merchant_profiles()
281
+
282
+ # Get PSP merchant summaries paginated
283
+ response = client.get_psp_merchant_profiles('batch_size', 'batch_token')
284
+ ```
285
+
220
286
  ## Response Object
221
287
 
222
288
  All requests to our apis will return a `Response` instance.
@@ -0,0 +1,105 @@
1
+ require 'rubygems'
2
+ require 'sift'
3
+ require 'multi_json'
4
+
5
+ class MyLogger
6
+ def warn(e)
7
+ puts "[WARN] " + e.to_s
8
+ end
9
+
10
+ def error(e)
11
+ puts "[ERROR] " + e.to_s
12
+ end
13
+
14
+ def fatal(e)
15
+ puts "[FATAL] " + e.to_s
16
+ end
17
+
18
+ def info(e)
19
+ puts "[INFO] " + e.to_s
20
+ end
21
+ end
22
+
23
+ def handle_response(response)
24
+ if response.nil?
25
+ puts 'Error: there was an HTTP error calling through the API'
26
+ else
27
+ puts 'Successfully sent request; was ok? : ' + response.ok?.to_s
28
+ puts 'API error message : ' + response.api_error_message.to_s
29
+ puts 'API status code : ' + response.api_status.to_s
30
+ puts 'HTTP status code : ' + response.http_status_code.to_s
31
+ puts 'original request : ' + response.original_request.to_s
32
+ puts 'response body : ' + response.body.to_s
33
+ end
34
+ end
35
+
36
+ Sift.logger = MyLogger.new
37
+
38
+ $api_key = 'put-valid-api-key'
39
+ $account_id = 'put-valid-account-id'
40
+
41
+ def post_merchant_properties
42
+ # Sample psp_merchant_profile
43
+ {
44
+ "id": "merchant_id_01004",
45
+ "name": "Wonderful Payments Inc.",
46
+ "description": "Wonderful Payments payment provider.",
47
+ "address": {
48
+ "name": "Alany",
49
+ "address_1": "Big Payment blvd, 22",
50
+ "address_2": "apt, 8",
51
+ "city": "New Orleans",
52
+ "region": "NA",
53
+ "country": "US",
54
+ "zipcode": "76830",
55
+ "phone": "0394888320"
56
+ },
57
+ "category": "1002",
58
+ "service_level": "Platinum",
59
+ "status": "active",
60
+ "risk_profile": {
61
+ "level": "low",
62
+ "score": 10
63
+ }
64
+ }
65
+ end
66
+
67
+ def put_merchant_properties
68
+ # Sample update psp_merchant_profile
69
+ {
70
+ "id": "merchant_id_01004",
71
+ "name": "Wonderful Payments Inc. update",
72
+ "description": "Wonderful Payments payment provider. update",
73
+ "address": {
74
+ "name": "Alany",
75
+ "address_1": "Big Payment blvd, 22",
76
+ "address_2": "apt, 8",
77
+ "city": "New Orleans",
78
+ "region": "NA",
79
+ "country": "US",
80
+ "zipcode": "76830",
81
+ "phone": "0394888320"
82
+ },
83
+ "category": "1002",
84
+ "service_level": "Platinum",
85
+ "status": "active",
86
+ "risk_profile": {
87
+ "level": "low",
88
+ "score": 10
89
+ }
90
+ }
91
+ end
92
+
93
+ # handle_response Sift::Client.new(:api_key => $api_key, :account_id => $account_id).create_psp_merchant_profile(post_merchant_properties)
94
+
95
+ # handle_response Sift::Client.new(:api_key => $api_key, :account_id => $account_id).update_psp_merchant_profile("merchant_id_01004", put_merchant_properties)
96
+
97
+ # handle_response Sift::Client.new(:api_key => $api_key, :account_id => $account_id).get_a_psp_merchant_profile("merchant_id_01004")
98
+
99
+ # handle_response Sift::Client.new(:api_key => $api_key, :account_id => $account_id).get_psp_merchant_profiles()
100
+
101
+ # handle_response Sift::Client.new(:api_key => $api_key, :account_id => $account_id).get_psp_merchant_profiles(2)
102
+
103
+ handle_response Sift::Client.new(:api_key => $api_key, :account_id => $account_id).get_psp_merchant_profiles(5, "next_ref")
104
+
105
+ puts "request completed"
data/lib/sift/client.rb CHANGED
@@ -785,6 +785,111 @@ module Sift
785
785
  Response.new(response.body, response.code, response.response)
786
786
  end
787
787
 
788
+ def create_psp_merchant_profile(properties = {}, opts = {})
789
+ # Create a new PSP Merchant profile
790
+ # Args:
791
+ # properties: A dict of merchant profile data.
792
+ # Returns
793
+ # A sift.client.Response object if the call succeeded, else raises an ApiException
794
+
795
+ account_id = opts[:account_id] || @account_id
796
+ api_key = opts[:api_key] || @api_key
797
+ timeout = opts[:timeout] || @timeout
798
+
799
+ raise("api_key cannot be empty") if api_key.empty?
800
+ raise("account_id cannot be empty") if account_id.empty?
801
+ raise("properties cannot be empty") if properties.empty?
802
+
803
+ options = {
804
+ :body => MultiJson.dump(delete_nils(properties)),
805
+ :headers => { "User-Agent" => user_agent, "Content-Type" => "application/json" },
806
+ :basic_auth => { :username => api_key, :password => "" }
807
+ }
808
+ options.merge!(:timeout => timeout) unless timeout.nil?
809
+ response = self.class.post(API_ENDPOINT + Sift.psp_merchant_api_path(account_id), options)
810
+ Response.new(response.body, response.code, response.response)
811
+ end
812
+
813
+ def update_psp_merchant_profile(merchant_id, properties = {}, opts = {})
814
+ # Update an existing PSP Merchant profile
815
+ # Args:
816
+ # merchant_id: id of merchant
817
+ # properties: A dict of merchant profile data.
818
+ # Returns
819
+ # A sift.client.Response object if the call succeeded, else raises an ApiException
820
+
821
+ account_id = opts[:account_id] || @account_id
822
+ api_key = opts[:api_key] || @api_key
823
+ timeout = opts[:timeout] || @timeout
824
+
825
+ raise("api_key cannot be empty") if api_key.empty?
826
+ raise("account_id cannot be empty") if account_id.empty?
827
+ raise("merchant_id cannot be empty") if merchant_id.empty?
828
+ raise("properties cannot be empty") if properties.empty?
829
+
830
+ options = {
831
+ :body => MultiJson.dump(delete_nils(properties)),
832
+ :headers => { "User-Agent" => user_agent, "Content-Type" => "application/json" },
833
+ :basic_auth => { :username => api_key, :password => "" }
834
+ }
835
+ options.merge!(:timeout => timeout) unless timeout.nil?
836
+ response = self.class.put(API_ENDPOINT + Sift.psp_merchant_id_api_path(account_id, merchant_id), options)
837
+ Response.new(response.body, response.code, response.response)
838
+ end
839
+
840
+ def get_a_psp_merchant_profile(merchant_id, opts = {})
841
+ # Gets a PSP merchant profile using merchant id.
842
+ # Args:
843
+ # merchant_id: id of merchant
844
+ # Returns
845
+ # A sift.client.Response object if the call succeeded, else raises an ApiException
846
+
847
+ account_id = opts[:account_id] || @account_id
848
+ api_key = opts[:api_key] || @api_key
849
+ timeout = opts[:timeout] || @timeout
850
+
851
+ raise("api_key cannot be empty") if api_key.empty?
852
+ raise("account_id cannot be empty") if account_id.empty?
853
+ raise("merchant_id cannot be empty") if merchant_id.empty?
854
+
855
+ options = {
856
+ :headers => { "User-Agent" => user_agent, "Content-Type" => "application/json" },
857
+ :basic_auth => { :username => api_key, :password => "" }
858
+ }
859
+ options.merge!(:timeout => timeout) unless timeout.nil?
860
+ response = self.class.get(API_ENDPOINT + Sift.psp_merchant_id_api_path(account_id, merchant_id), options)
861
+ Response.new(response.body, response.code, response.response)
862
+ end
863
+
864
+ def get_psp_merchant_profiles(batch_size = nil, batch_token = nil, opts = {})
865
+ # Get all PSP merchant profiles.
866
+ # Args:
867
+ # batch_size : Batch or page size of the paginated sequence.
868
+ # batch_token : Batch or page position of the paginated sequence.
869
+ # Returns
870
+ # A sift.client.Response object if the call succeeded, else raises an ApiException
871
+
872
+ account_id = opts[:account_id] || @account_id
873
+ api_key = opts[:api_key] || @api_key
874
+ timeout = opts[:timeout] || @timeout
875
+
876
+ raise("api_key cannot be empty") if api_key.empty?
877
+ raise("account_id cannot be empty") if account_id.empty?
878
+
879
+ query = {}
880
+ query["batch_size"] = batch_size if batch_size
881
+ query["batch_token"] = batch_token if batch_token
882
+
883
+ options = {
884
+ :headers => { "User-Agent" => user_agent, "Content-Type" => "application/json" },
885
+ :basic_auth => { :username => api_key, :password => "" },
886
+ :query => query
887
+ }
888
+ options.merge!(:timeout => timeout) unless timeout.nil?
889
+ response = self.class.get(API_ENDPOINT + Sift.psp_merchant_api_path(account_id), options)
890
+ Response.new(response.body, response.code, response.response)
891
+ end
892
+
788
893
  private
789
894
 
790
895
  def handle_response(response)
data/lib/sift/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Sift
2
- VERSION = "4.2.0"
2
+ VERSION = "4.3.0"
3
3
  API_VERSION = "205"
4
4
  end
data/lib/sift.rb CHANGED
@@ -71,6 +71,18 @@ module Sift
71
71
  "/content/#{ERB::Util.url_encode(content_id)}/decisions"
72
72
  end
73
73
 
74
+ # Returns the path for psp Merchant API
75
+ def self.psp_merchant_api_path(account_id)
76
+ "/v3/accounts/#{ERB::Util.url_encode(account_id)}" \
77
+ "/psp_management/merchants"
78
+ end
79
+
80
+ # Returns the path for psp Merchant with id
81
+ def self.psp_merchant_id_api_path(account_id, merchant_id)
82
+ "/v3/accounts/#{ERB::Util.url_encode(account_id)}" \
83
+ "/psp_management/merchants/#{ERB::Util.url_encode(merchant_id)}"
84
+ end
85
+
74
86
  # Module-scoped public API key
75
87
  class << self
76
88
  attr_accessor :api_key
@@ -0,0 +1,133 @@
1
+ require_relative "../spec_helper"
2
+ require "sift"
3
+
4
+ describe Sift::Client do
5
+
6
+ before :each do
7
+ Sift.api_key = nil
8
+ end
9
+
10
+ def post_psp_merchant_properties
11
+ {
12
+ "id": "api-key1-6",
13
+ "name": "Wonderful Payments Inc.",
14
+ "description": "Wonderful Payments payment provider.",
15
+ "address": {
16
+ "name": "Alany",
17
+ "address_1": "Big Payment blvd, 22",
18
+ "address_2": "apt, 8",
19
+ "city": "New Orleans",
20
+ "region": "NA",
21
+ "country": "US",
22
+ "zipcode": "76830",
23
+ "phone": "0394888320"
24
+ },
25
+ "category": "1002",
26
+ "service_level": "Platinum",
27
+ "status": "active",
28
+ "risk_profile": {
29
+ "level": "low",
30
+ "score": 10
31
+ }
32
+ }
33
+ end
34
+
35
+ def put_psp_merchant_properties
36
+ {
37
+ "id": "api-key1-7",
38
+ "name": "Wonderful Payments Inc.",
39
+ "description": "Wonderful Payments payment provider.",
40
+ "address": {
41
+ "name": "Alany",
42
+ "address_1": "Big Payment blvd, 22",
43
+ "address_2": "apt, 8",
44
+ "city": "New Orleans",
45
+ "region": "NA",
46
+ "country": "US",
47
+ "zipcode": "76830",
48
+ "phone": "0394888320"
49
+ },
50
+ "category": "1002",
51
+ "service_level": "Platinum",
52
+ "status": "active",
53
+ "risk_profile": {
54
+ "level": "low",
55
+ "score": 10
56
+ }
57
+ }
58
+ end
59
+
60
+ it "Successfully sumit create psp merchant" do
61
+ api_key = "foobar1"
62
+
63
+ response_json = { :status => 0, :error_message => "OK" }
64
+
65
+ stub_request(:post, "https://foobar1:@api.siftscience.com/v3/accounts/ACCT/psp_management/merchants")
66
+ .to_return(:status => 200, :body => MultiJson.dump(response_json))
67
+
68
+ response = Sift::Client.new(:api_key => api_key, :account_id => "ACCT").create_psp_merchant_profile(post_psp_merchant_properties)
69
+ expect(response.ok?).to eq(true)
70
+ expect(response.api_status).to eq(0)
71
+ expect(response.api_error_message).to eq("OK")
72
+ end
73
+
74
+ it "Successfully submit update psp merchant" do
75
+ api_key = "foobar1"
76
+ merchant_id = "api-key1-7"
77
+
78
+ response_json = { :status => 0, :error_message => "OK"}
79
+
80
+ stub_request(:put, "https://foobar1:@api.siftscience.com/v3/accounts/ACCT/psp_management/merchants/api-key1-7")
81
+ .to_return(:status => 200, :body => MultiJson.dump(response_json))
82
+
83
+ response = Sift::Client.new(:api_key => api_key, :account_id => "ACCT").update_psp_merchant_profile(merchant_id, put_psp_merchant_properties)
84
+ expect(response.ok?).to eq(true)
85
+ expect(response.api_status).to eq(0)
86
+ expect(response.api_error_message).to eq("OK")
87
+ end
88
+
89
+ it "Successfully get a psp merchant profile" do
90
+ api_key = "foobar1"
91
+ merchant_id = "api-key1-7"
92
+
93
+ response_json = { :status => 0, :error_message => "OK"}
94
+
95
+ stub_request(:get, "https://foobar1:@api.siftscience.com/v3/accounts/ACCT/psp_management/merchants/api-key1-7")
96
+ .to_return(:status => 200, :body => MultiJson.dump(response_json))
97
+
98
+ response = Sift::Client.new(:api_key => api_key, :account_id => "ACCT").get_a_psp_merchant_profile(merchant_id)
99
+ expect(response.ok?).to eq(true)
100
+ expect(response.api_status).to eq(0)
101
+ expect(response.api_error_message).to eq("OK")
102
+ end
103
+
104
+ it "Successfully get all psp merchant profile with batch size" do
105
+ api_key = "foobar1"
106
+
107
+ response_json = { :status => 0, :error_message => "OK"}
108
+
109
+ stub_request(:get, "https://foobar1:@api.siftscience.com/v3/accounts/ACCT/psp_management/merchants?batch_size=2")
110
+ .to_return(:status => 200, :body => MultiJson.dump(response_json))
111
+
112
+ response = Sift::Client.new(:api_key => api_key, :account_id => "ACCT").get_psp_merchant_profiles(2)
113
+ expect(response.ok?).to eq(true)
114
+ expect(response.api_status).to eq(0)
115
+ expect(response.api_error_message).to eq("OK")
116
+ end
117
+
118
+ it "Successfully get all psp merchant profile with batch size and batch token" do
119
+ api_key = "foobar1"
120
+ batch_size = 2
121
+ batch_token = "batch_token"
122
+ response_json = { :status => 0, :error_message => "OK"}
123
+
124
+ stub_request(:get, "https://foobar1:@api.siftscience.com/v3/accounts/ACCT/psp_management/merchants?batch_size=2&batch_token=batch_token")
125
+ .to_return(:status => 200, :body => MultiJson.dump(response_json))
126
+
127
+ response = Sift::Client.new(:api_key => api_key, :account_id => "ACCT").get_psp_merchant_profiles(batch_size, batch_token)
128
+ expect(response.ok?).to eq(true)
129
+ expect(response.api_status).to eq(0)
130
+ expect(response.api_error_message).to eq("OK")
131
+ end
132
+
133
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sift
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fred Sadaghiani
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2023-07-07 00:00:00.000000000 Z
13
+ date: 2023-08-29 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
@@ -125,12 +125,14 @@ extra_rdoc_files: []
125
125
  files:
126
126
  - ".circleci/config.yml"
127
127
  - ".github/pull_request_template.md"
128
+ - ".github/workflows/publishing_sift_ruby.yml"
128
129
  - ".gitignore"
129
130
  - Gemfile
130
131
  - HISTORY
131
132
  - LICENSE
132
133
  - README.md
133
134
  - Rakefile
135
+ - examples/psp_merchant_management_apis.rb
134
136
  - examples/simple.rb
135
137
  - examples/validation_apis.rb
136
138
  - lib/sift.rb
@@ -152,6 +154,7 @@ files:
152
154
  - spec/unit/client_203_spec.rb
153
155
  - spec/unit/client_205_spec.rb
154
156
  - spec/unit/client_label_spec.rb
157
+ - spec/unit/client_psp_merchant_spec.rb
155
158
  - spec/unit/client_spec.rb
156
159
  - spec/unit/client_validationapi_spec.rb
157
160
  - spec/unit/router_spec.rb
@@ -175,21 +178,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
178
  - !ruby/object:Gem::Version
176
179
  version: '0'
177
180
  requirements: []
178
- rubygems_version: 3.0.3.1
181
+ rubygems_version: 3.1.6
179
182
  signing_key:
180
183
  specification_version: 4
181
184
  summary: Sift Science Ruby API Gem
182
- test_files:
183
- - spec/fixtures/fake_responses.rb
184
- - spec/integration/sift_spec.rb
185
- - spec/spec_helper.rb
186
- - spec/unit/client/decision/apply_to_spec.rb
187
- - spec/unit/client/decision_spec.rb
188
- - spec/unit/client_203_spec.rb
189
- - spec/unit/client_205_spec.rb
190
- - spec/unit/client_label_spec.rb
191
- - spec/unit/client_spec.rb
192
- - spec/unit/client_validationapi_spec.rb
193
- - spec/unit/router_spec.rb
194
- - spec/unit/validate/decision_spec.rb
195
- - spec/unit/validate/primitive_spec.rb
185
+ test_files: []