tidas 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,92 @@
1
+ require 'spec_helper'
2
+ require 'tidas'
3
+
4
+ describe Tidas::Utilities::ResponsePackager do
5
+ let(:subject) { Tidas::Utilities::ResponsePackager }
6
+ let(:data) { 'valid data' }
7
+ let(:returned_data) { 'valid returned_data' }
8
+ describe "package_response(response, data = nil)" do
9
+ let(:response) { double() }
10
+
11
+ describe "if the response is a 500 or 404" do
12
+ it "should return a Tidas::ServerError object when given a 500" do
13
+ expect(response).to receive(:status) {500}
14
+ resp = subject.package_response(response)
15
+ expect(resp).to be == Tidas::InvalidResponse
16
+ end
17
+
18
+ it "should return a Tidas::ServerError object when given a 404" do
19
+ expect(response).to receive(:status) {404}
20
+ resp = subject.package_response(response)
21
+ expect(resp).to be == Tidas::InvalidResponse
22
+ end
23
+ end
24
+
25
+ describe "if the server returns a non-json/malformed json body" do
26
+ it "should return a Tidas::ServerError object" do
27
+ expect(response).to receive(:status) {200}
28
+ expect(response).to receive(:body) {"dodododododo"}
29
+ resp = subject.package_response(response)
30
+ expect(resp).to be == Tidas::InvalidResponse
31
+ end
32
+ end
33
+
34
+ describe "if we successfully parse json from the server" do
35
+ let(:body) { {valid_json: 'totally'}.to_json}
36
+ it "should call handle_result to interpret and package the json" do
37
+ expect(response).to receive(:status) {200}
38
+ expect(response).to receive(:body) {body}
39
+ expect(subject).to receive(:handle_result).with(JSON.parse(body, symbolize_names: true), nil)
40
+ subject.package_response(response)
41
+ end
42
+
43
+ it "even with data" do
44
+ expect(response).to receive(:status) {200}
45
+ expect(response).to receive(:body) {body}
46
+ expect(subject).to receive(:handle_result).with(JSON.parse(body, symbolize_names: true), data)
47
+ subject.package_response(response, data)
48
+ end
49
+ end
50
+ end
51
+
52
+ describe "handle_result(body)" do
53
+ describe "when returned json type is ':error_result'" do
54
+ let(:body) { {error_result:{errors:["yeah, idk - it just didn't work"]}} }
55
+ it "should return a Tidas::ErrorResult object explaining what went wrong" do
56
+ resp = subject.handle_result(body)
57
+ expect(resp.class).to be == Tidas::ErrorResult
58
+ expect(resp.errors).to be == body[:error_result][:errors]
59
+ end
60
+ end
61
+
62
+ describe "when returned json type is ':successful_result'" do
63
+ let(:body) { {successful_result:{message:'worked!'}} }
64
+ describe "if there's no returned data from the server (like identities for packaging)" do
65
+ it "should give a successful result and message" do
66
+ resp = subject.handle_result(body)
67
+ expect(resp.class).to be == Tidas::SuccessfulResult
68
+ expect(resp.message).to be == body[:successful_result][:message]
69
+ end
70
+
71
+ it "even when we provide data (like for verification)" do
72
+ body[:data] = data
73
+ resp = subject.handle_result(body, data)
74
+ expect(resp.class).to be == Tidas::SuccessfulResult
75
+ expect(resp.message).to be == body[:successful_result][:message]
76
+ expect(resp.data).to be == data
77
+ end
78
+ end
79
+
80
+ describe "when there is returned data from the server (like identities for packaging)" do
81
+ it "should give a successful result and message, and fill that data into the data field" do
82
+ body[:successful_result][:returned_data] = returned_data
83
+ resp = subject.handle_result(body)
84
+ expect(resp.class).to be == Tidas::SuccessfulResult
85
+ expect(resp.message).to be == body[:successful_result][:message]
86
+ expect(resp.data).to be == returned_data
87
+ end
88
+ end
89
+
90
+ end
91
+ end
92
+ end
data/tidas.gemspec ADDED
@@ -0,0 +1,39 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'tidas/version'
6
+
7
+ Gem::Specification.new do |gem|
8
+ gem.name = "tidas"
9
+ gem.version = Tidas::VERSION
10
+ gem.summary = %q{Rack middleware for tidas integrations}
11
+ gem.description = %q{Rack middleware for tidas integrations}
12
+ gem.license = "MIT"
13
+ gem.authors = ["Nick Esposito"]
14
+ gem.email = "nick.esposito@trailofbits.com"
15
+ gem.homepage = "https://github.com/trailofbits/tidas-ruby#readme"
16
+
17
+ gem.files = `git ls-files`.split($/)
18
+
19
+ `git submodule --quiet foreach --recursive pwd`.split($/).each do |submodule|
20
+ submodule.sub!("#{Dir.pwd}/",'')
21
+
22
+ Dir.chdir(submodule) do
23
+ `git ls-files`.split($/).map do |subpath|
24
+ gem.files << File.join(submodule,subpath)
25
+ end
26
+ end
27
+ end
28
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
29
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
30
+ gem.require_paths = ['lib']
31
+
32
+ gem.add_dependency 'faraday', '~> 0.9'
33
+
34
+ gem.add_development_dependency 'bundler', '~> 1.10'
35
+ gem.add_development_dependency 'rake', '~> 10.0'
36
+ gem.add_development_dependency 'rspec', '~> 3.0'
37
+ gem.add_development_dependency 'rubygems-tasks', '~> 0.2'
38
+ gem.add_development_dependency 'yard', '~> 0.8'
39
+ end
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tidas
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Nick Esposito
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.9'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.10'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubygems-tasks
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.2'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.2'
83
+ - !ruby/object:Gem::Dependency
84
+ name: yard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.8'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.8'
97
+ description: Rack middleware for tidas integrations
98
+ email: nick.esposito@trailofbits.com
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - ".document"
104
+ - ".gitignore"
105
+ - ".rspec"
106
+ - ".yardopts"
107
+ - ChangeLog.md
108
+ - Gemfile
109
+ - LICENSE.txt
110
+ - README.md
111
+ - Rakefile
112
+ - lib/tidas.rb
113
+ - lib/tidas/client.rb
114
+ - lib/tidas/configuration.rb
115
+ - lib/tidas/error_result.rb
116
+ - lib/tidas/exceptions.rb
117
+ - lib/tidas/identity.rb
118
+ - lib/tidas/successful_result.rb
119
+ - lib/tidas/utilities.rb
120
+ - lib/tidas/utilities/response_packager.rb
121
+ - lib/tidas/utilities/unpacker.rb
122
+ - lib/tidas/version.rb
123
+ - spec/client_spec.rb
124
+ - spec/configuration_spec.rb
125
+ - spec/error_result_spec.rb
126
+ - spec/identity_spec.rb
127
+ - spec/spec_helper.rb
128
+ - spec/successful_result_spec.rb
129
+ - spec/tidas_spec.rb
130
+ - spec/utilities/response_packager_spec.rb
131
+ - tidas.gemspec
132
+ homepage: https://github.com/trailofbits/tidas-ruby#readme
133
+ licenses:
134
+ - MIT
135
+ metadata: {}
136
+ post_install_message:
137
+ rdoc_options: []
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ requirements: []
151
+ rubyforge_project:
152
+ rubygems_version: 2.4.8
153
+ signing_key:
154
+ specification_version: 4
155
+ summary: Rack middleware for tidas integrations
156
+ test_files:
157
+ - spec/client_spec.rb
158
+ - spec/configuration_spec.rb
159
+ - spec/error_result_spec.rb
160
+ - spec/identity_spec.rb
161
+ - spec/spec_helper.rb
162
+ - spec/successful_result_spec.rb
163
+ - spec/tidas_spec.rb
164
+ - spec/utilities/response_packager_spec.rb
165
+ has_rdoc: