caseblocks_api 0.2.16 → 0.2.17
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +30 -10
- data/caseblocks_api.gemspec +2 -2
- data/lib/caseblocks_api.rb +23 -3
- data/spec/caseblocks_api_spec.rb +28 -0
- metadata +73 -25
data/README.md
CHANGED
@@ -1,31 +1,50 @@
|
|
1
|
-
|
1
|
+
caseblocks_api
|
2
|
+
==============
|
2
3
|
|
3
|
-
Authenticate with CaseBlocks
|
4
|
+
**Authenticate with CaseBlocks:**
|
4
5
|
|
5
6
|
`caseblocks = CaseblocksAPI::Client.new("email@test.com", "some_password", "some_url")`
|
6
7
|
|
7
|
-
Create a new Case
|
8
|
+
**Create a new Case:**
|
8
9
|
|
9
|
-
`caseblocks.create_case({:title => "This is a Case!", :due_at => "tomorrow")`
|
10
|
+
`caseblocks.create_case({:title => "This is a Case!", :due_at => "tomorrow"}, "your_case_type_name")`
|
10
11
|
|
11
|
-
|
12
|
+
**Find or Create a new Case**
|
13
|
+
|
14
|
+
*The data included in the document should include the case type unique identifier field, otherwise the case will be created regardless of other cases.
|
15
|
+
|
16
|
+
`caseblocks.find_or_create_case({:title => "This is a Case!", :due_at => "tomorrow"}, "your_case_type_name")`
|
17
|
+
|
18
|
+
**Searching for cases:**
|
12
19
|
|
13
20
|
`caseblocks.search('CaseTypeName', {telephone_number: '12334', given_name: 'Smith'})`
|
14
21
|
|
15
|
-
Searching with pagination
|
22
|
+
**Searching with pagination:**
|
16
23
|
|
17
24
|
`caseblocks.search('CaseTypeName', {given_name: 'Smith'}, page: 0, page_size: 10)`
|
18
25
|
|
19
|
-
Searching with sorting
|
26
|
+
**Searching with sorting:**
|
20
27
|
|
21
28
|
`caseblocks.search('CaseTypeName', {given_name: 'Smith'}, sort_by: [{field: 'created_at', direction: 'desc'}])`
|
22
29
|
`caseblocks.search('CaseTypeName', {given_name: 'Smith'}, sort_by: [{field: 'created_at', direction: 'asc'}])`
|
23
30
|
|
24
|
-
Searching for a reduced response
|
31
|
+
**Searching for a reduced response:**
|
25
32
|
|
26
33
|
`caseblocks.search('CaseTypeName', {given_name: 'Smith'}, fields: ['id', 'given_name', ''created_at'])`
|
27
34
|
|
28
|
-
|
35
|
+
**Creating Conversations and messages on a case:**
|
36
|
+
|
37
|
+
We can create a message on a case by calling create_message. If you include a conversation_id it will be added as a reply to that conversation.
|
38
|
+
|
39
|
+
`caseblocks.create_message(:author_id => 1, :case_id => "abcdef12345", :subject => "Read this, its awesome!", :body => "This is the body of the message", :recipient_users => [], :recipient_teams => [])`
|
40
|
+
|
41
|
+
and for a reply
|
42
|
+
|
43
|
+
`caseblocks.create_message(:author_id => 1, :case_id => "abcdef12345", :subject => "Read this, its awesome!", :body => "This is the body of the message", :recipient_users => [], :recipient_teams => [], :conversation_id => "")`
|
44
|
+
|
45
|
+
|
46
|
+
Contributing to caseblocks_api
|
47
|
+
==============================
|
29
48
|
|
30
49
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
|
31
50
|
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
|
@@ -35,7 +54,8 @@ Searching for a reduced response:
|
|
35
54
|
* Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
|
36
55
|
* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
|
37
56
|
|
38
|
-
|
57
|
+
Copyright
|
58
|
+
=========
|
39
59
|
|
40
60
|
Copyright (c) 2012 EmergeAdapt. See LICENSE.txt for
|
41
61
|
further details.
|
data/caseblocks_api.gemspec
CHANGED
@@ -5,10 +5,10 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "caseblocks_api"
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.17"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Mark Provan"]
|
11
|
+
s.authors = ["Mark Provan", "Stewart McKee"]
|
12
12
|
s.date = "2013-09-03"
|
13
13
|
s.email = "development@emergeadapt.com"
|
14
14
|
s.extra_rdoc_files = [
|
data/lib/caseblocks_api.rb
CHANGED
@@ -29,12 +29,32 @@ module CaseblocksAPI
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
|
32
|
+
def create_case(params, case_type=nil)
|
33
33
|
params.merge!(:case_type_id => fetch_case_type_id(case_type))
|
34
|
-
|
34
|
+
response = self.class.post("/case_blocks/cases", :body => {:case => params}.to_json)
|
35
35
|
if response.code != 201
|
36
36
|
response_hash = {:body => response.body, :code => response.code, :message => response.message, :headers => response.headers.inspect}
|
37
|
-
|
37
|
+
raise CaseblocksAPI::CaseCreationError.new("Unable to create case - received response code #{response.code}", response_hash)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def find_or_create_case(params, case_type=nil)
|
42
|
+
params.merge!(:case_type_id => fetch_case_type_id(case_type))
|
43
|
+
response = self.class.post("/case_blocks/cases", :body => {:unique => true, :case => params}.to_json)
|
44
|
+
if response.code != 201
|
45
|
+
response_hash = {:body => response.body, :code => response.code, :message => response.message, :headers => response.headers.inspect}
|
46
|
+
raise CaseblocksAPI::CaseCreationError.new("Unable to create case - received response code #{response.code}", response_hash)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def create_message(params)
|
51
|
+
query = {:message => params}
|
52
|
+
response = self.class.post("/case_blocks/messages", :body => query.to_json)
|
53
|
+
if response.code != 201
|
54
|
+
response_hash = {:body => response.body, :code => response.code, :message => response.message, :headers => response.headers.inspect}
|
55
|
+
raise CaseblocksAPI::CaseCreationError.new("Unable to create case - received response code #{response.code}", response_hash)
|
56
|
+
else
|
57
|
+
return response["message"]
|
38
58
|
end
|
39
59
|
end
|
40
60
|
|
data/spec/caseblocks_api_spec.rb
CHANGED
@@ -29,6 +29,9 @@ describe "CaseblocksAPI" do
|
|
29
29
|
stub_request(:post, "http://example.com/tokens?auth_token=").
|
30
30
|
with(:body => "{\"email\":\"username\",\"password\":\"password\"}",
|
31
31
|
:headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json'})
|
32
|
+
stub_request(:post, "http://example.com/tokens?auth_token=").
|
33
|
+
with(:body => "{\"unique\":true,\"email\":\"username\",\"password\":\"password\"}",
|
34
|
+
:headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json'})
|
32
35
|
end
|
33
36
|
|
34
37
|
context "successfully created on CaseBlocks" do
|
@@ -39,6 +42,16 @@ describe "CaseblocksAPI" do
|
|
39
42
|
caseblocks_client.create_case({'my' => 'params'}, 'some_case')
|
40
43
|
stub.should have_been_made.times(1)
|
41
44
|
end
|
45
|
+
|
46
|
+
context "with unique case" do
|
47
|
+
it "should include unique key" do
|
48
|
+
stub = stub_request(:post, "example.com/case_blocks/cases?auth_token=")
|
49
|
+
.with({body: { 'unique' => true, 'case' => {'my' => 'params', 'case_type_id' => 1}}.to_json })
|
50
|
+
.to_return(:status => 201, :body => "", :headers => {})
|
51
|
+
caseblocks_client.find_or_create_case({'my' => 'params'}, 'some_case')
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
42
55
|
end
|
43
56
|
|
44
57
|
context "received non-200 response code from CaseBlocks" do
|
@@ -50,5 +63,20 @@ describe "CaseblocksAPI" do
|
|
50
63
|
expect{caseblocks_client.create_case({'my' => 'params'}, 'some_case')}.to raise_error(CaseblocksAPI::CaseCreationError, 'Unable to create case - received response code 500')
|
51
64
|
end
|
52
65
|
end
|
66
|
+
|
67
|
+
context "creating a message" do
|
68
|
+
it "should call post" do
|
69
|
+
stub = stub_request(:post, "example.com/case_blocks/messages?auth_token=")
|
70
|
+
.with({body: {"message" => {'case_id' => "234", "subject" => "asdf"}}.to_json })
|
71
|
+
.to_return(:status => 201, :body => {"message" => {"case_id" => "234", "subject" => "asdf", "conversation_id" => "567"}}.to_json, :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json'})
|
72
|
+
|
73
|
+
message = caseblocks_client.create_message({'case_id' => '234', "subject" => "asdf"})
|
74
|
+
message.class.should == Hash
|
75
|
+
message["case_id"].should eql "234"
|
76
|
+
message["subject"].should eql "asdf"
|
77
|
+
message["conversation_id"].should eql "567"
|
78
|
+
stub.should have_been_made.times(1)
|
79
|
+
end
|
80
|
+
end
|
53
81
|
end
|
54
82
|
end
|
metadata
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caseblocks_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.17
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Mark Provan
|
9
|
+
- Stewart McKee
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
@@ -13,7 +14,7 @@ date: 2013-09-03 00:00:00.000000000 Z
|
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: httparty
|
16
|
-
requirement:
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
17
18
|
none: false
|
18
19
|
requirements:
|
19
20
|
- - ! '>='
|
@@ -21,10 +22,15 @@ dependencies:
|
|
21
22
|
version: '0'
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
25
31
|
- !ruby/object:Gem::Dependency
|
26
32
|
name: activesupport
|
27
|
-
requirement:
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
28
34
|
none: false
|
29
35
|
requirements:
|
30
36
|
- - ! '>='
|
@@ -32,10 +38,15 @@ dependencies:
|
|
32
38
|
version: '0'
|
33
39
|
type: :runtime
|
34
40
|
prerelease: false
|
35
|
-
version_requirements:
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: rspec
|
38
|
-
requirement:
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ~>
|
@@ -43,10 +54,15 @@ dependencies:
|
|
43
54
|
version: '2.11'
|
44
55
|
type: :development
|
45
56
|
prerelease: false
|
46
|
-
version_requirements:
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '2.11'
|
47
63
|
- !ruby/object:Gem::Dependency
|
48
64
|
name: rdoc
|
49
|
-
requirement:
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
50
66
|
none: false
|
51
67
|
requirements:
|
52
68
|
- - ~>
|
@@ -54,10 +70,15 @@ dependencies:
|
|
54
70
|
version: '3.12'
|
55
71
|
type: :development
|
56
72
|
prerelease: false
|
57
|
-
version_requirements:
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ~>
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '3.12'
|
58
79
|
- !ruby/object:Gem::Dependency
|
59
80
|
name: bundler
|
60
|
-
requirement:
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
61
82
|
none: false
|
62
83
|
requirements:
|
63
84
|
- - ! '>='
|
@@ -65,10 +86,15 @@ dependencies:
|
|
65
86
|
version: '0'
|
66
87
|
type: :development
|
67
88
|
prerelease: false
|
68
|
-
version_requirements:
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
69
95
|
- !ruby/object:Gem::Dependency
|
70
96
|
name: jeweler
|
71
|
-
requirement:
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
72
98
|
none: false
|
73
99
|
requirements:
|
74
100
|
- - ~>
|
@@ -76,10 +102,15 @@ dependencies:
|
|
76
102
|
version: 1.8.4
|
77
103
|
type: :development
|
78
104
|
prerelease: false
|
79
|
-
version_requirements:
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.8.4
|
80
111
|
- !ruby/object:Gem::Dependency
|
81
112
|
name: guard-rspec
|
82
|
-
requirement:
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
83
114
|
none: false
|
84
115
|
requirements:
|
85
116
|
- - ! '>='
|
@@ -87,10 +118,15 @@ dependencies:
|
|
87
118
|
version: '0'
|
88
119
|
type: :development
|
89
120
|
prerelease: false
|
90
|
-
version_requirements:
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
91
127
|
- !ruby/object:Gem::Dependency
|
92
128
|
name: pry
|
93
|
-
requirement:
|
129
|
+
requirement: !ruby/object:Gem::Requirement
|
94
130
|
none: false
|
95
131
|
requirements:
|
96
132
|
- - ! '>='
|
@@ -98,10 +134,15 @@ dependencies:
|
|
98
134
|
version: '0'
|
99
135
|
type: :development
|
100
136
|
prerelease: false
|
101
|
-
version_requirements:
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
102
143
|
- !ruby/object:Gem::Dependency
|
103
144
|
name: webmock
|
104
|
-
requirement:
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
105
146
|
none: false
|
106
147
|
requirements:
|
107
148
|
- - ! '>='
|
@@ -109,10 +150,15 @@ dependencies:
|
|
109
150
|
version: '0'
|
110
151
|
type: :development
|
111
152
|
prerelease: false
|
112
|
-
version_requirements:
|
153
|
+
version_requirements: !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
155
|
+
requirements:
|
156
|
+
- - ! '>='
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
113
159
|
- !ruby/object:Gem::Dependency
|
114
160
|
name: rspec-given
|
115
|
-
requirement:
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
116
162
|
none: false
|
117
163
|
requirements:
|
118
164
|
- - ! '>='
|
@@ -120,7 +166,12 @@ dependencies:
|
|
120
166
|
version: '0'
|
121
167
|
type: :development
|
122
168
|
prerelease: false
|
123
|
-
version_requirements:
|
169
|
+
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
none: false
|
171
|
+
requirements:
|
172
|
+
- - ! '>='
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
124
175
|
description:
|
125
176
|
email: development@emergeadapt.com
|
126
177
|
executables: []
|
@@ -167,9 +218,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
167
218
|
- - ! '>='
|
168
219
|
- !ruby/object:Gem::Version
|
169
220
|
version: '0'
|
170
|
-
segments:
|
171
|
-
- 0
|
172
|
-
hash: 1836771192975938175
|
173
221
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
222
|
none: false
|
175
223
|
requirements:
|
@@ -178,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
178
226
|
version: '0'
|
179
227
|
requirements: []
|
180
228
|
rubyforge_project:
|
181
|
-
rubygems_version: 1.8.
|
229
|
+
rubygems_version: 1.8.24
|
182
230
|
signing_key:
|
183
231
|
specification_version: 3
|
184
232
|
summary: Ruby wrapper for CaseBlocks API
|