traitify 1.8.4 → 2.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.
Files changed (67) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +11 -0
  3. data/CHANGELOG.md +5 -0
  4. data/Gemfile +5 -1
  5. data/Gemfile.lock +109 -42
  6. data/README.md +50 -25
  7. data/lib/traitify/client/connection.rb +22 -0
  8. data/lib/traitify/client/model.rb +45 -0
  9. data/lib/traitify/client/overrides.rb +27 -0
  10. data/lib/traitify/client/request.rb +33 -0
  11. data/lib/traitify/client/setup.rb +25 -0
  12. data/lib/traitify/client.rb +20 -27
  13. data/lib/traitify/configuration.rb +4 -12
  14. data/lib/traitify/data.rb +18 -0
  15. data/lib/traitify/error.rb +18 -16
  16. data/lib/traitify/middleware/formatter.rb +52 -0
  17. data/lib/traitify/middleware/raise_error.rb +38 -0
  18. data/lib/traitify/response.rb +44 -0
  19. data/lib/traitify/version.rb +1 -1
  20. data/lib/traitify.rb +29 -1
  21. data/paths.yml +1352 -0
  22. data/spec/spec_helper.rb +14 -6
  23. data/spec/support/mocks/assessment.json +1 -1
  24. data/spec/support/mocks/assessment_analytics.json +7 -0
  25. data/spec/support/mocks/blank.json +0 -0
  26. data/spec/support/mocks/career.json +1 -2
  27. data/spec/support/mocks/careers.json +2 -3
  28. data/spec/support/mocks/decks.json +1 -4
  29. data/spec/support/mocks/locale.json +10 -0
  30. data/spec/support/mocks/locales.json +12 -0
  31. data/spec/support/mocks/profile.json +5 -0
  32. data/spec/support/mocks/profiles.json +5 -0
  33. data/spec/support/mocks/trait_analytics.json +7 -0
  34. data/spec/support/mocks/type_analytics.json +7 -0
  35. data/spec/traitify/client/examples/analytics_spec.rb +53 -0
  36. data/spec/{traitify-ruby/client → traitify/client/examples}/assessment_spec.rb +19 -14
  37. data/spec/traitify/client/examples/career_spec.rb +52 -0
  38. data/spec/traitify/client/examples/configuration_spec.rb +29 -0
  39. data/spec/traitify/client/examples/deck_spec.rb +29 -0
  40. data/spec/traitify/client/examples/locale_spec.rb +39 -0
  41. data/spec/{traitify-ruby/client → traitify/client/examples}/major_spec.rb +12 -11
  42. data/spec/traitify/client/examples/profiles_spec.rb +66 -0
  43. data/spec/traitify/client/examples/result_spec.rb +130 -0
  44. data/spec/traitify/client/examples/slide_spec.rb +95 -0
  45. data/spec/traitify/client/model_spec.rb +73 -0
  46. data/spec/traitify/client/request_spec.rb +85 -0
  47. data/spec/traitify/client/setup_spec.rb +62 -0
  48. data/spec/traitify/client_spec.rb +52 -0
  49. data/spec/traitify/data_spec.rb +105 -0
  50. data/spec/traitify/error_spec.rb +117 -0
  51. data/spec/traitify/response_spec.rb +82 -0
  52. data/spec/traitify/version_spec.rb +7 -0
  53. data/traitify.gemspec +14 -12
  54. metadata +113 -53
  55. data/lib/traitify/client/assessments.rb +0 -29
  56. data/lib/traitify/client/careers.rb +0 -25
  57. data/lib/traitify/client/decks.rb +0 -16
  58. data/lib/traitify/client/majors.rb +0 -25
  59. data/lib/traitify/client/results.rb +0 -37
  60. data/lib/traitify/client/slides.rb +0 -34
  61. data/lib/traitify/connection.rb +0 -33
  62. data/lib/traitify/request.rb +0 -18
  63. data/spec/traitify-ruby/client/career_spec.rb +0 -51
  64. data/spec/traitify-ruby/client/configuration_spec.rb +0 -51
  65. data/spec/traitify-ruby/client/deck_spec.rb +0 -28
  66. data/spec/traitify-ruby/client/result_spec.rb +0 -93
  67. data/spec/traitify-ruby/client/slide_spec.rb +0 -82
@@ -0,0 +1,130 @@
1
+ require "spec_helper"
2
+
3
+ describe Traitify::Client do
4
+ before do
5
+ Traitify.configure do |client|
6
+ client.secret_key = "secret"
7
+ client.host = "https://example.com"
8
+ client.version = "v1"
9
+ client.logger = Logger.new("/dev/null")
10
+ end
11
+ end
12
+
13
+ let(:client){ Traitify.new }
14
+ let(:base_image_url){ "https://traitify-api.s3.amazonaws.com/traitify-api" }
15
+
16
+ describe ".find_results" do
17
+ context "without an image pack" do
18
+ let(:result){ client.assessments("assessment-uuid").personality_types.data }
19
+
20
+ before(:each) do
21
+ stub_it(:get, "/assessments/assessment-uuid/personality_types?locale_key=en-us", "result")
22
+ end
23
+
24
+ it "returns a result" do
25
+ expect(result.personality_types.first.personality_type.name).to eq("Analyzer")
26
+ end
27
+ end
28
+
29
+ context "with an image pack" do
30
+ context "set in the configurations" do
31
+ let(:client){ Traitify.new }
32
+ let(:result) do
33
+ Traitify.image_pack = "full-color"
34
+ res = Traitify.new.assessments("assessment-uuid").personality_types.data
35
+ Traitify.image_pack = nil
36
+ res
37
+ end
38
+
39
+ before(:each) do
40
+ stub_it(
41
+ :get,
42
+ "/assessments/assessment-uuid/personality_types?image_pack=full-color&locale_key=en-us",
43
+ "result"
44
+ )
45
+ end
46
+
47
+ it "returns a result" do
48
+ expect(result.personality_blend.personality_type_1.badge.image_large).to(
49
+ eq("#{base_image_url}/badges/analayzer/full-color/large")
50
+ )
51
+ end
52
+ end
53
+
54
+ context "set in the call" do
55
+ let(:result){
56
+ client.assessments("assessment-uuid").personality_types({image_pack: "full-color"}).data
57
+ }
58
+
59
+ before(:each) do
60
+ stub_it(
61
+ :get,
62
+ "/assessments/assessment-uuid/personality_types?image_pack=full-color&locale_key=en-us",
63
+ "result"
64
+ )
65
+ end
66
+
67
+ it "returns a result" do
68
+ expect(result.personality_blend.personality_type_1.badge.image_large).to(
69
+ eq("#{base_image_url}/badges/analayzer/full-color/large")
70
+ )
71
+ end
72
+ end
73
+ end
74
+ end
75
+
76
+ describe ".assessment_personality_type" do
77
+ context "with a personality type" do
78
+ let(:personality_traits){
79
+ client.assessments("assessment-uuid")
80
+ .personality_types("personality-type-uuid")
81
+ .personality_traits.data
82
+ }
83
+
84
+ before(:each) do
85
+ stub_it(
86
+ :get,
87
+ [
88
+ "/assessments/assessment-uuid",
89
+ "/personality_types/personality-type-uuid",
90
+ "/personality_traits?locale_key=en-us"
91
+ ].join,
92
+ "personality_traits"
93
+ )
94
+ end
95
+
96
+ it "returns a result" do
97
+ expect(personality_traits.first.personality_trait.name).to eq("Imaginative")
98
+ end
99
+ end
100
+
101
+ context "without a personality type" do
102
+ let(:personality_traits){ client.assessments("assessment-uuid").personality_traits.data }
103
+
104
+ before(:each) do
105
+ stub_it(
106
+ :get,
107
+ "/assessments/assessment-uuid/personality_traits?locale_key=en-us",
108
+ "personality_traits"
109
+ )
110
+ end
111
+
112
+ it "returns a result" do
113
+ expect(personality_traits.first.personality_trait.name).to eq("Imaginative")
114
+ end
115
+ end
116
+ end
117
+
118
+ describe ".career_matches" do
119
+ let(:careers){ client.assessments("assessment-uuid").matches.careers.data }
120
+
121
+ before(:each) do
122
+ stub_it(:get, "/assessments/assessment-uuid/matches/careers?locale_key=en-us", "careers")
123
+ end
124
+
125
+ it "returns a result" do
126
+ expect(careers.first.title).to eq("Career Title")
127
+ expect(careers.first.majors.first.title).to eq("Major Title")
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,95 @@
1
+ require "spec_helper"
2
+
3
+ describe Traitify::Client do
4
+ before do
5
+ Traitify.configure do |client|
6
+ client.secret_key = "secret"
7
+ client.host = "https://example.com"
8
+ client.version = "v1"
9
+ client.deck_id = "deck-uuid"
10
+ client.logger = Logger.new("/dev/null")
11
+ end
12
+ end
13
+
14
+ let(:client){ Traitify.new }
15
+
16
+ describe ".find_slides" do
17
+ let(:slides){ client.assessments("assessment-uuid").slides.data }
18
+
19
+ before(:each) do
20
+ stub_it(:get, "/assessments/assessment-uuid/slides?locale_key=en-us", "slides")
21
+ end
22
+
23
+ it "returns each slide's uuid" do
24
+ expect(slides.first.id).to eq("slide-uuid")
25
+ end
26
+ end
27
+
28
+ describe ".update_slides" do
29
+ let(:slides){ client.assessments("assessment-uuid").slides.data }
30
+ let(:slides_complete){ client.assessments("assessment-uuid").slides.update(slides).data }
31
+
32
+ before(:each) do
33
+ stub_it(:get, "/assessments/assessment-uuid/slides?locale_key=en-us", "slides")
34
+ body = slides.collect do |slide|
35
+ slide.response = 0
36
+ slide.time_taken = 1000
37
+ slide
38
+ end
39
+
40
+ stub_it(:put, "/assessments/assessment-uuid/slides", "slides_complete", body: body)
41
+ end
42
+
43
+ it "returns an assessment" do
44
+ expect(slides_complete.first.response).to eq(true)
45
+ end
46
+ end
47
+
48
+ describe ".update_slide" do
49
+ context "with hash" do
50
+ let(:slides){ client.assessments("assessment-uuid").slides.data }
51
+ let(:slide_params) do
52
+ {
53
+ id: slides.first.id,
54
+ response: true,
55
+ time_taken: 1000
56
+ }
57
+ end
58
+ let(:slide){
59
+ client.assessments("assessment-uuid").slides(slide_params[:id]).update(slide_params).data
60
+ }
61
+
62
+ before(:each) do
63
+ stub_it(:get, "/assessments/assessment-uuid/slides?locale_key=en-us", "slides")
64
+ stub_it(
65
+ :put,
66
+ "/assessments/assessment-uuid/slides/slide-uuid",
67
+ "slide",
68
+ body: slide_params.merge({locale_key: "en-us"})
69
+ )
70
+ end
71
+
72
+ it "returns a slide" do
73
+ expect(slide.response).to eq(true)
74
+ end
75
+ end
76
+
77
+ context "with slide" do
78
+ let(:slides){ client.assessments("assessment-uuid").slides.data }
79
+ let(:slide){ slides.first }
80
+
81
+ before(:each) do
82
+ stub_it(:get, "/assessments/assessment-uuid/slides?locale_key=en-us", "slides")
83
+ stub_it(:put, "/assessments/assessment-uuid/slides/slide-uuid", "slide")
84
+
85
+ slide.response = true
86
+ slide.time_taken = 1000
87
+ client.assessments("assessment-uuid").slides("slide-uuid").update(slide.to_h)
88
+ end
89
+
90
+ it "returns a slide" do
91
+ expect(slide.response).to eq(true)
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,73 @@
1
+ require "spec_helper"
2
+
3
+ describe Traitify::Client::Model do
4
+ before do
5
+ Traitify.configure do |client|
6
+ client.secret_key = "secret"
7
+ client.host = "https://example.com"
8
+ client.version = "v1"
9
+ client.deck_id = "deck-uuid"
10
+ client.logger = Logger.new("/dev/null")
11
+ end
12
+ end
13
+
14
+ let(:client){ Traitify.new }
15
+
16
+ describe ".all" do
17
+ it "returns response" do
18
+ stub_it(:get, "/profiles?locale_key=en-us", "blank")
19
+
20
+ expect(client.profiles.find).to be_instance_of(Traitify::Response)
21
+ end
22
+
23
+ it "sends params" do
24
+ stub_it(:get, "/profiles?foo=bar&locale_key=en-us", "blank")
25
+
26
+ expect(client.profiles.find(foo: :bar)).to be_instance_of(Traitify::Response)
27
+ end
28
+ end
29
+
30
+ describe ".create" do
31
+ it "returns response" do
32
+ stub_it(:post, "/profiles", "blank", body: {locale_key: "en-us"})
33
+
34
+ expect(client.profiles.create).to be_instance_of(Traitify::Response)
35
+ end
36
+
37
+ it "sends params" do
38
+ stub_it(:post, "/profiles", "blank", body: {foo: "bar", locale_key: "en-us"})
39
+
40
+ expect(client.profiles.create(foo: :bar)).to be_instance_of(Traitify::Response)
41
+ end
42
+ end
43
+
44
+ describe ".destroy" do
45
+ it "returns response" do
46
+ stub_it(:delete, "/profiles?locale_key=en-us", "blank")
47
+
48
+ expect(client.profiles.destroy).to be_instance_of(Traitify::Response)
49
+ end
50
+
51
+ it "sends params" do
52
+ stub_it(:delete, "/profiles/profile-id?locale_key=en-us", "blank")
53
+
54
+ expect(client.profiles("profile-id").destroy).to be_instance_of(Traitify::Response)
55
+ end
56
+ end
57
+
58
+ describe ".update" do
59
+ it "returns response" do
60
+ stub_it(:put, "/profiles/profile-id", "blank", body: {foo: "bar", locale_key: "en-us"})
61
+
62
+ expect(client.profiles("profile-id").update(foo: :bar)).to be_instance_of(Traitify::Response)
63
+ end
64
+
65
+ it "uses verb" do
66
+ stub_it(:patch, "/profiles/profile-id", "blank", body: {foo: "bar", locale_key: "en-us"})
67
+
68
+ expect(client.profiles("profile-id").update({foo: :bar}, :patch)).to(
69
+ be_instance_of(Traitify::Response)
70
+ )
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,85 @@
1
+ require "spec_helper"
2
+
3
+ describe Traitify::Client::Request do
4
+ before do
5
+ Traitify.configure do |client|
6
+ client.secret_key = "secret"
7
+ client.host = "https://example.com"
8
+ client.version = "v1"
9
+ client.deck_id = "deck-uuid"
10
+ client.logger = Logger.new("/dev/null")
11
+ end
12
+ end
13
+
14
+ let(:client){ Traitify.new }
15
+
16
+ describe ".delete" do
17
+ it "returns response" do
18
+ stub_it(:delete, "/profiles?locale_key=en-us", "blank")
19
+
20
+ expect(client.delete("/profiles")).to be_instance_of(Traitify::Response)
21
+ end
22
+
23
+ it "sends params" do
24
+ stub_it(:delete, "/profiles?foo=bar&locale_key=en-us", "blank")
25
+
26
+ expect(client.delete("/profiles", foo: :bar)).to be_instance_of(Traitify::Response)
27
+ end
28
+ end
29
+
30
+ describe ".get" do
31
+ it "returns response" do
32
+ stub_it(:get, "/profiles?locale_key=en-us", "blank")
33
+
34
+ expect(client.get("/profiles")).to be_instance_of(Traitify::Response)
35
+ end
36
+
37
+ it "sends params" do
38
+ stub_it(:get, "/profiles?foo=bar&locale_key=en-us", "blank")
39
+
40
+ expect(client.get("/profiles", foo: :bar)).to be_instance_of(Traitify::Response)
41
+ end
42
+ end
43
+
44
+ describe ".patch" do
45
+ it "returns response" do
46
+ stub_it(:patch, "/profiles", "blank", body: {locale_key: "en-us"})
47
+
48
+ expect(client.patch("/profiles")).to be_instance_of(Traitify::Response)
49
+ end
50
+
51
+ it "sends params" do
52
+ stub_it(:patch, "/profiles", "blank", body: {foo: "bar", locale_key: "en-us"})
53
+
54
+ expect(client.patch("/profiles", foo: :bar)).to be_instance_of(Traitify::Response)
55
+ end
56
+ end
57
+
58
+ describe ".post" do
59
+ it "returns response" do
60
+ stub_it(:post, "/profiles", "blank", body: {locale_key: "en-us"})
61
+
62
+ expect(client.post("/profiles")).to be_instance_of(Traitify::Response)
63
+ end
64
+
65
+ it "sends params" do
66
+ stub_it(:post, "/profiles", "blank", body: {foo: "bar", locale_key: "en-us"})
67
+
68
+ expect(client.post("/profiles", foo: :bar)).to be_instance_of(Traitify::Response)
69
+ end
70
+ end
71
+
72
+ describe ".put" do
73
+ it "returns response" do
74
+ stub_it(:put, "/profiles", "blank", body: {locale_key: "en-us"})
75
+
76
+ expect(client.put("/profiles")).to be_instance_of(Traitify::Response)
77
+ end
78
+
79
+ it "sends params" do
80
+ stub_it(:put, "/profiles", "blank", body: {foo: "bar", locale_key: "en-us"})
81
+
82
+ expect(client.put("/profiles", foo: :bar)).to be_instance_of(Traitify::Response)
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,62 @@
1
+ require "spec_helper"
2
+
3
+ describe Traitify::Client::Setup do
4
+ before do
5
+ Traitify.configure do |client|
6
+ client.secret_key = "secret"
7
+ client.host = "https://example.com"
8
+ client.version = "v1"
9
+ client.deck_id = "deck-uuid"
10
+ client.logger = Logger.new("/dev/null")
11
+ end
12
+ end
13
+
14
+ let(:client){ Traitify.new }
15
+
16
+ describe ".add_params" do
17
+ it "adds param" do
18
+ client.set(params: {this: "that"})
19
+ client.add_params(foo: "bar", vampire: "weekend")
20
+
21
+ expect(client.params).to match({foo: "bar", this: "that", vampire: "weekend"})
22
+ end
23
+
24
+ it "overrides param" do
25
+ client.set(params: {foo: "bar", this: "that"})
26
+ client.add_params(foo: "boo", vampire: "weekend")
27
+
28
+ expect(client.params).to match({foo: "boo", this: "that", vampire: "weekend"})
29
+ end
30
+ end
31
+
32
+ describe ".add_path" do
33
+ it "adds path" do
34
+ client.set(path: "/little")
35
+ client.add_path("/path")
36
+
37
+ expect(client.path).to eq("/little/path")
38
+ end
39
+
40
+ it "creates path" do
41
+ client.add_path("/path")
42
+
43
+ expect(client.path).to eq("/path")
44
+ end
45
+ end
46
+
47
+ describe ".set_param" do
48
+ it "overrides param" do
49
+ client.set(params: {foo: "bar", this: "that"})
50
+ client.set_param(:foo, "boo")
51
+
52
+ expect(client.params).to match({foo: "boo", this: "that"})
53
+ end
54
+
55
+ it "sets param" do
56
+ client.set(params: {this: "that"})
57
+ client.set_param(:foo, "bar")
58
+
59
+ expect(client.params).to match({foo: "bar", this: "that"})
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,52 @@
1
+ require "spec_helper"
2
+
3
+ describe Traitify::Client do
4
+ before do
5
+ Traitify.configure do |client|
6
+ client.secret_key = "secret"
7
+ client.host = "https://example.com"
8
+ client.version = "v1"
9
+ client.deck_id = "deck-uuid"
10
+ client.logger = Logger.new("/dev/null")
11
+ end
12
+ end
13
+
14
+ describe "#new" do
15
+ it "sets options" do
16
+ result = Traitify::Client.new
17
+
18
+ expect(result.deck_id).to eq("deck-uuid")
19
+ expect(result.host).to eq("https://example.com")
20
+ expect(result.secret_key).to eq("secret")
21
+ expect(result.version).to eq("v1")
22
+ end
23
+
24
+ it "merges options" do
25
+ result = Traitify::Client.new(version: "v2")
26
+
27
+ expect(result.deck_id).to eq("deck-uuid")
28
+ expect(result.host).to eq("https://example.com")
29
+ expect(result.secret_key).to eq("secret")
30
+ expect(result.version).to eq("v2")
31
+ end
32
+ end
33
+
34
+ describe "#to_hash" do
35
+ it "returns state" do
36
+ result = Traitify::Client.new(version: "v2")
37
+ result = result.profiles(:profile_id).set(params: {foo: :bar}, verb: :post)
38
+
39
+ expect(result.to_hash.symbolize_keys).to match(
40
+ deck_id: "deck-uuid",
41
+ host: "https://example.com",
42
+ locale_key: "en-us",
43
+ params: {foo: :bar},
44
+ path: "/profiles/profile_id",
45
+ secret_key: "secret",
46
+ type: :profiles,
47
+ verb: :post,
48
+ version: "v2"
49
+ )
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,105 @@
1
+ require "spec_helper"
2
+
3
+ describe Traitify::Data do
4
+ describe "#new" do
5
+ context "with array" do
6
+ it "returns array" do
7
+ data = Traitify::Data.new([])
8
+
9
+ expect(data).to eq([])
10
+ end
11
+
12
+ it "converts each element" do
13
+ data = Traitify::Data.new([{traitify: ""}])
14
+
15
+ expect(data[0]).to be_a(Traitify::Data)
16
+ end
17
+ end
18
+
19
+ context "with hash" do
20
+ it "returns data" do
21
+ data = Traitify::Data.new({})
22
+
23
+ expect(data).to be_a(Traitify::Data)
24
+ end
25
+
26
+ it "converts each value" do
27
+ data = Traitify::Data.new({traitify: {}})
28
+
29
+ expect(data.traitify).to be_a(Traitify::Data)
30
+ end
31
+ end
32
+
33
+ context "with simple objects" do
34
+ it "returns boolean" do
35
+ data = Traitify::Data.new(true)
36
+
37
+ expect(data).to eq(true)
38
+ end
39
+
40
+ it "returns number" do
41
+ data = Traitify::Data.new(42)
42
+
43
+ expect(data).to eq(42)
44
+ end
45
+
46
+ it "returns string" do
47
+ data = Traitify::Data.new("Traitify")
48
+
49
+ expect(data).to eq("Traitify")
50
+ end
51
+
52
+ it "returns symbol" do
53
+ data = Traitify::Data.new(:traitify)
54
+
55
+ expect(data).to eq(:traitify)
56
+ end
57
+ end
58
+ end
59
+
60
+ describe ".as_json" do
61
+ context "with array" do
62
+ it "returns array" do
63
+ data = Traitify::Data.new([])
64
+
65
+ expect(data.as_json).to eq([])
66
+ end
67
+
68
+ it "returns equivalent elements" do
69
+ data = Traitify::Data.new([{traitify: ""}])
70
+
71
+ expect(data.as_json.map(&:symbolize_keys)).to eq([{traitify: ""}])
72
+ end
73
+ end
74
+
75
+ context "with hash" do
76
+ it "returns data" do
77
+ data = Traitify::Data.new({})
78
+
79
+ expect(data.as_json).to eq({})
80
+ end
81
+
82
+ it "returns equivalent values" do
83
+ data = Traitify::Data.new({traitify: {}})
84
+
85
+ expect(data.as_json.symbolize_keys).to eq({traitify: {}})
86
+ end
87
+ end
88
+
89
+ context "with options" do
90
+ context "with hash" do
91
+ it "returns array data" do
92
+ data = Traitify::Data.new({
93
+ burritos: [{meat: "chicken"}],
94
+ tacos: [{meat: "chicken"}, {meat: "steak"}]
95
+ })
96
+
97
+ # Rails' as_json passes full options down to nested objects
98
+ expect(data.as_json(only: [:meat, :tacos]).deep_symbolize_keys).to(
99
+ eq({tacos: [{meat: "chicken"}, {meat: "steak"}]})
100
+ )
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end