sift 1.1.0 → 4.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/.circleci/config.yml +43 -0
- data/HISTORY +88 -0
- data/LICENSE +19 -0
- data/README.md +253 -0
- data/lib/sift/client/decision/apply_to.rb +129 -0
- data/lib/sift/client/decision.rb +66 -0
- data/lib/sift/client.rb +672 -88
- data/lib/sift/error.rb +13 -0
- data/lib/sift/router.rb +41 -0
- data/lib/sift/utils/hash_getter.rb +15 -0
- data/lib/sift/validate/decision.rb +65 -0
- data/lib/sift/validate/primitive.rb +43 -0
- data/lib/sift/version.rb +2 -1
- data/lib/sift.rb +61 -9
- data/sift.gemspec +8 -7
- data/spec/fixtures/fake_responses.rb +16 -0
- data/spec/spec_helper.rb +3 -3
- data/spec/unit/client/decision/apply_to_spec.rb +262 -0
- data/spec/unit/client/decision_spec.rb +83 -0
- data/spec/unit/client_203_spec.rb +193 -0
- data/spec/unit/client_label_spec.rb +68 -12
- data/spec/unit/client_spec.rb +484 -48
- data/spec/unit/router_spec.rb +37 -0
- data/spec/unit/validate/decision_spec.rb +85 -0
- data/spec/unit/validate/primitive_spec.rb +73 -0
- metadata +83 -54
- data/README.rdoc +0 -40
- data/spec/unit/sift_spec.rb +0 -6
@@ -0,0 +1,85 @@
|
|
1
|
+
require_relative "../../spec_helper"
|
2
|
+
|
3
|
+
require "sift/validate/decision"
|
4
|
+
|
5
|
+
module Sift
|
6
|
+
module Validate
|
7
|
+
describe Decision do
|
8
|
+
describe "#valid_user?" do
|
9
|
+
it "will return true" do
|
10
|
+
validator = Decision.new(
|
11
|
+
user_id: "hello world",
|
12
|
+
source: :hello_world,
|
13
|
+
analyst: "asdfsadf@heyo.com"
|
14
|
+
)
|
15
|
+
|
16
|
+
expect(validator.valid_user?).to be(true)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "with invalid user_id, will return false" do
|
20
|
+
validator = Decision.new(order_id: "asfasdf")
|
21
|
+
expect(validator.valid_user?).to be(false), "nil user is valid"
|
22
|
+
|
23
|
+
validator = Decision.new(order_id: "asfasdf", user_id: {})
|
24
|
+
expect(validator.valid_user?).to be(false), "user hash is valid"
|
25
|
+
|
26
|
+
validator = Decision.new(order_id: "asfasdf", user_id: /werwer/)
|
27
|
+
expect(validator.valid_user?).to be(false), "regex user is valid"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#valid_order?" do
|
32
|
+
it "will return true with valid configs" do
|
33
|
+
validator = Decision.new(
|
34
|
+
order_id: "order_foo_bar_12354",
|
35
|
+
user_id: "hello world",
|
36
|
+
source: :hello_world,
|
37
|
+
analyst: "asdfsadf@heyo.com"
|
38
|
+
)
|
39
|
+
|
40
|
+
expect(validator.valid_order?).to be(true)
|
41
|
+
end
|
42
|
+
|
43
|
+
context "with invalid params:" do
|
44
|
+
it "user_id, will return false" do
|
45
|
+
validator = Decision.new(order_id: "asfasdf")
|
46
|
+
expect(validator.valid_order?).to be(false), "nil user is valid"
|
47
|
+
|
48
|
+
validator = Decision.new(order_id: "asfasdf", user_id: {})
|
49
|
+
expect(validator.valid_order?).to be(false), "user hash is valid"
|
50
|
+
|
51
|
+
validator = Decision.new(order_id: "asfasdf", user_id: /werwer/)
|
52
|
+
expect(validator.valid_order?).to be(false), "regex user is valid"
|
53
|
+
end
|
54
|
+
|
55
|
+
it "order_id, will return false" do
|
56
|
+
validator = Decision.new(user_id: 1235)
|
57
|
+
expect(validator.valid_order?).to be(false)
|
58
|
+
|
59
|
+
validator = Decision.new(user_id: 1235, order_id: {})
|
60
|
+
expect(validator.valid_order?).to be(false)
|
61
|
+
|
62
|
+
validator = Decision.new(user_id: 1235, order_id: /23424/)
|
63
|
+
expect(validator.valid_order?).to be(false)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#error_messages" do
|
69
|
+
it "will return an array of error messages" do
|
70
|
+
validator = Decision.new
|
71
|
+
|
72
|
+
error_message =
|
73
|
+
"#{Primitive::ERROR_MESSAGES[:non_empty_string]}, got NilClass"
|
74
|
+
|
75
|
+
validator.valid_order?
|
76
|
+
|
77
|
+
expect(validator.error_messages).to contain_exactly(
|
78
|
+
"order_id #{error_message}",
|
79
|
+
"user_id #{error_message}"
|
80
|
+
)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require_relative "../../spec_helper"
|
2
|
+
|
3
|
+
require "sift/validate/primitive"
|
4
|
+
|
5
|
+
module Sift
|
6
|
+
module Validate
|
7
|
+
describe Primitive do
|
8
|
+
describe ".non_empty_string" do
|
9
|
+
it "will return nil for valid values" do
|
10
|
+
expect(Primitive.non_empty_string("foobar")).to be_nil
|
11
|
+
end
|
12
|
+
|
13
|
+
it "will return an error message" do
|
14
|
+
[nil, 1, /asdfasdf/].each do |value|
|
15
|
+
error_message = "#{Primitive::ERROR_MESSAGES[:non_empty_string]}" \
|
16
|
+
", got #{value.class}"
|
17
|
+
|
18
|
+
expect(Primitive.non_empty_string(value)).to eq(error_message)
|
19
|
+
end
|
20
|
+
|
21
|
+
expect(Primitive.non_empty_string("")).to(
|
22
|
+
eq(Primitive.send(:empty_string_message, :non_empty_string))
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe ".is_numeric" do
|
28
|
+
it "will return nil for numeric values" do
|
29
|
+
[1, 29.01, 29 ** 1992848499198, -2].each do |value|
|
30
|
+
expect(Primitive.numeric(value)).to(
|
31
|
+
be_nil,
|
32
|
+
"#{value} is a non numeric value"
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it "will return an error message for non numeric values" do
|
38
|
+
["foobar", nil, :hello_world, {}].each do |value|
|
39
|
+
expect(Primitive.numeric(value)).to(
|
40
|
+
be(Primitive::ERROR_MESSAGES[:numeric]),
|
41
|
+
"#{value} is a numeric value"
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe ".is_string_or_number?" do
|
48
|
+
it "will return nil for numeric or strings" do
|
49
|
+
[1234, "asdfasdf", "1234_asdfsdf"].each do |value|
|
50
|
+
expect(Primitive.string_or_number(value)).to(
|
51
|
+
be_nil,
|
52
|
+
"#{value} is a non numeric value"
|
53
|
+
)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it "will return an error message for any other type" do
|
58
|
+
[{}, [], :hello_world, nil].each do |value|
|
59
|
+
error_message = "#{Primitive::ERROR_MESSAGES[:string_or_number]}," \
|
60
|
+
" got #{value.class}"
|
61
|
+
|
62
|
+
expect(Primitive.string_or_number(value)).to eq(error_message)
|
63
|
+
end
|
64
|
+
|
65
|
+
error_message = "#{Primitive::ERROR_MESSAGES[:string_or_number]}, " \
|
66
|
+
"got an empty string"
|
67
|
+
expect(Primitive.string_or_number("")).to eq(error_message)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
metadata
CHANGED
@@ -1,161 +1,190 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sift
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 4.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Fred Sadaghiani
|
8
|
+
- Yoav Schatzberg
|
9
|
+
- Jacob Burnim
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date:
|
13
|
+
date: 2019-05-15 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: rspec
|
16
17
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
18
|
requirements:
|
19
|
-
- - ~>
|
19
|
+
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: '3.5'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
25
|
requirements:
|
27
|
-
- - ~>
|
26
|
+
- - "~>"
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
28
|
+
version: '3.5'
|
30
29
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
30
|
+
name: rspec_junit_formatter
|
32
31
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
32
|
requirements:
|
35
|
-
- -
|
33
|
+
- - ">="
|
36
34
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
35
|
+
version: '0'
|
38
36
|
type: :development
|
39
37
|
prerelease: false
|
40
38
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
39
|
requirements:
|
43
|
-
- -
|
40
|
+
- - ">="
|
44
41
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
42
|
+
version: '0'
|
46
43
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
44
|
+
name: pry
|
48
45
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
46
|
requirements:
|
51
|
-
- -
|
47
|
+
- - ">="
|
52
48
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0
|
54
|
-
type: :
|
49
|
+
version: '0'
|
50
|
+
type: :development
|
55
51
|
prerelease: false
|
56
52
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
53
|
requirements:
|
59
|
-
- -
|
54
|
+
- - ">="
|
60
55
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0
|
56
|
+
version: '0'
|
62
57
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
58
|
+
name: webmock
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 1.16.0
|
64
|
+
- - "<"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '2'
|
67
|
+
type: :development
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 1.16.0
|
74
|
+
- - "<"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '2'
|
77
|
+
- !ruby/object:Gem::Dependency
|
78
|
+
name: httparty
|
64
79
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
80
|
requirements:
|
67
|
-
- -
|
81
|
+
- - ">="
|
68
82
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
83
|
+
version: 0.11.0
|
70
84
|
type: :runtime
|
71
85
|
prerelease: false
|
72
86
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
87
|
requirements:
|
75
|
-
- -
|
88
|
+
- - ">="
|
76
89
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
90
|
+
version: 0.11.0
|
78
91
|
- !ruby/object:Gem::Dependency
|
79
|
-
name:
|
92
|
+
name: multi_json
|
80
93
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
94
|
requirements:
|
83
|
-
- -
|
95
|
+
- - ">="
|
84
96
|
- !ruby/object:Gem::Version
|
85
|
-
version: '
|
86
|
-
type: :
|
97
|
+
version: '1.0'
|
98
|
+
type: :runtime
|
87
99
|
prerelease: false
|
88
100
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
101
|
requirements:
|
91
|
-
- -
|
102
|
+
- - ">="
|
92
103
|
- !ruby/object:Gem::Version
|
93
|
-
version: '
|
104
|
+
version: '1.0'
|
94
105
|
- !ruby/object:Gem::Dependency
|
95
106
|
name: rake
|
96
107
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
108
|
requirements:
|
99
|
-
- -
|
109
|
+
- - ">="
|
100
110
|
- !ruby/object:Gem::Version
|
101
111
|
version: '0'
|
102
112
|
type: :development
|
103
113
|
prerelease: false
|
104
114
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
115
|
requirements:
|
107
|
-
- -
|
116
|
+
- - ">="
|
108
117
|
- !ruby/object:Gem::Version
|
109
118
|
version: '0'
|
110
119
|
description: Sift Science Ruby API. Please see http://siftscience.com for more details.
|
111
120
|
email:
|
112
|
-
-
|
121
|
+
- support@siftscience.com
|
113
122
|
executables: []
|
114
123
|
extensions: []
|
115
124
|
extra_rdoc_files: []
|
116
125
|
files:
|
117
|
-
- .
|
126
|
+
- ".circleci/config.yml"
|
127
|
+
- ".gitignore"
|
118
128
|
- Gemfile
|
119
129
|
- HISTORY
|
120
|
-
-
|
130
|
+
- LICENSE
|
131
|
+
- README.md
|
121
132
|
- Rakefile
|
122
133
|
- examples/simple.rb
|
123
134
|
- lib/sift.rb
|
124
135
|
- lib/sift/client.rb
|
136
|
+
- lib/sift/client/decision.rb
|
137
|
+
- lib/sift/client/decision/apply_to.rb
|
138
|
+
- lib/sift/error.rb
|
139
|
+
- lib/sift/router.rb
|
140
|
+
- lib/sift/utils/hash_getter.rb
|
141
|
+
- lib/sift/validate/decision.rb
|
142
|
+
- lib/sift/validate/primitive.rb
|
125
143
|
- lib/sift/version.rb
|
126
144
|
- sift.gemspec
|
145
|
+
- spec/fixtures/fake_responses.rb
|
127
146
|
- spec/integration/sift_spec.rb
|
128
147
|
- spec/spec_helper.rb
|
148
|
+
- spec/unit/client/decision/apply_to_spec.rb
|
149
|
+
- spec/unit/client/decision_spec.rb
|
150
|
+
- spec/unit/client_203_spec.rb
|
129
151
|
- spec/unit/client_label_spec.rb
|
130
152
|
- spec/unit/client_spec.rb
|
131
|
-
- spec/unit/
|
153
|
+
- spec/unit/router_spec.rb
|
154
|
+
- spec/unit/validate/decision_spec.rb
|
155
|
+
- spec/unit/validate/primitive_spec.rb
|
132
156
|
homepage: http://siftscience.com
|
133
157
|
licenses: []
|
158
|
+
metadata: {}
|
134
159
|
post_install_message:
|
135
160
|
rdoc_options: []
|
136
161
|
require_paths:
|
137
162
|
- lib
|
138
163
|
required_ruby_version: !ruby/object:Gem::Requirement
|
139
|
-
none: false
|
140
164
|
requirements:
|
141
|
-
- -
|
165
|
+
- - ">="
|
142
166
|
- !ruby/object:Gem::Version
|
143
167
|
version: '0'
|
144
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
169
|
requirements:
|
147
|
-
- -
|
170
|
+
- - ">="
|
148
171
|
- !ruby/object:Gem::Version
|
149
172
|
version: '0'
|
150
173
|
requirements: []
|
151
174
|
rubyforge_project: sift
|
152
|
-
rubygems_version:
|
175
|
+
rubygems_version: 2.5.2.3
|
153
176
|
signing_key:
|
154
|
-
specification_version:
|
177
|
+
specification_version: 4
|
155
178
|
summary: Sift Science Ruby API Gem
|
156
179
|
test_files:
|
180
|
+
- spec/fixtures/fake_responses.rb
|
157
181
|
- spec/integration/sift_spec.rb
|
158
182
|
- spec/spec_helper.rb
|
183
|
+
- spec/unit/client/decision/apply_to_spec.rb
|
184
|
+
- spec/unit/client/decision_spec.rb
|
185
|
+
- spec/unit/client_203_spec.rb
|
159
186
|
- spec/unit/client_label_spec.rb
|
160
187
|
- spec/unit/client_spec.rb
|
161
|
-
- spec/unit/
|
188
|
+
- spec/unit/router_spec.rb
|
189
|
+
- spec/unit/validate/decision_spec.rb
|
190
|
+
- spec/unit/validate/primitive_spec.rb
|
data/README.rdoc
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
= Sift Science Ruby bindings
|
2
|
-
|
3
|
-
== Installation
|
4
|
-
|
5
|
-
If you want to build the gem from source:
|
6
|
-
|
7
|
-
$ gem build sift.gemspec
|
8
|
-
|
9
|
-
Alternatively, you can install the gem from Rubyforge:
|
10
|
-
|
11
|
-
$ gem install sift
|
12
|
-
|
13
|
-
== Requirements
|
14
|
-
|
15
|
-
* Ruby 1.8.7 or above. (Ruby 1.8.6 might work if you load ActiveSupport.)
|
16
|
-
* HTTParty, 0.8.3 or greater
|
17
|
-
|
18
|
-
For development only:
|
19
|
-
* bundler
|
20
|
-
* rspec, 2.9 or greater
|
21
|
-
* fakeweb, 1.3 or greater
|
22
|
-
|
23
|
-
== Building
|
24
|
-
|
25
|
-
Building and publishing the gem is captured by the following steps:
|
26
|
-
|
27
|
-
$ gem build sift.gemspec
|
28
|
-
$ gem push sift-<current version>.gem
|
29
|
-
|
30
|
-
$ bundle
|
31
|
-
$ rake -T
|
32
|
-
$ rake build
|
33
|
-
$ rake install
|
34
|
-
$ rake release
|
35
|
-
|
36
|
-
== Testing
|
37
|
-
|
38
|
-
To run the various tests use the rake command as follows:
|
39
|
-
|
40
|
-
$ rake spec
|