zendesk2 0.0.14 → 0.0.15

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.
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .rspec
data/README.md CHANGED
@@ -7,9 +7,9 @@ Ruby client for the [Zendesk V2 API](http://developer.zendesk.com/documentation/
7
7
  ## Installation
8
8
 
9
9
  Add this line to your application's Gemfile:
10
-
11
- gem 'zendesk2'
12
-
10
+ ```ruby
11
+ gem 'zendesk2'
12
+ ```
13
13
  Or install it yourself as:
14
14
 
15
15
  $ gem install zendesk2
@@ -50,107 +50,110 @@ Currently support resources
50
50
  * Ticket
51
51
  * Organization
52
52
  * Forums
53
+ * Topics
53
54
 
54
55
  All collection are accessed like so:
55
56
  ```ruby
56
57
  client.users.all
57
- => <Zendesk2::Client::Users
58
- count=1779,
59
- next_page_link="https://dev.zendesk.com/api/v2/users.json?page=2",
60
- previous_page_link=nil
61
- [
62
- <Zendesk2::Client::User
63
- id=125394183,
64
- url="https://dev.zendesk.com/api/v2/users/125394183.json",
58
+ => <Zendesk2::Client::Users
59
+ count=1779,
60
+ next_page_link="https://dev.zendesk.com/api/v2/users.json?page=2",
61
+ previous_page_link=nil
62
+ [
63
+ <Zendesk2::Client::User
64
+ id=125394183,
65
+ url="https://dev.zendesk.com/api/v2/users/125394183.json",
65
66
  ...
66
- >
67
- ]
67
+ >
68
+ ]
68
69
  ```
69
70
  Collections also respond to `create` and `new`
71
+ ```ruby
72
+ client.users.create(email: "ohhai@example.org", name: "lulz")
73
+ => <Zendesk2::Client::User
74
+ id=234020811,
75
+ ...
76
+ url="https://engineyarddev.zendesk.com/api/v2/users/234020811.json",
77
+ ...
78
+ email="ohhai@example.org",
79
+ >
80
+ ```
70
81
 
71
- client.users.create(email: "ohhai@example.org", name: "lulz")
72
- => <Zendesk2::Client::User
73
- id=234020811,
74
- ...
75
- url="https://engineyarddev.zendesk.com/api/v2/users/234020811.json",
76
- ...
77
- email="ohhai@example.org",
78
- >
79
-
80
-
81
- client.users.new(email: "ohhai@example.org")
82
- => <Zendesk2::Client::User
83
- id=nil,
84
- ...
85
- url=nil,
86
- ...
87
- email="ohhai@example.org",
88
- ...
89
- >
90
-
82
+ ```ruby
83
+ client.users.new(email: "ohhai@example.org")
84
+ => <Zendesk2::Client::User
85
+ id=nil,
86
+ ...
87
+ url=nil,
88
+ ...
89
+ email="ohhai@example.org",
90
+ ...
91
+ >
92
+ ```
91
93
  #### Paging
92
94
 
93
95
  Paged collections respond to `next_page` and `previous_page` when appropriate. `page_size` and `page` can be passed directly to the collection to control size and index.
94
-
95
- page = client.users.all("per_page" => 1, "page" => 4)
96
- => <Zendesk2::Client::Users
97
- count=1780,
98
- next_page_link="https://dev.zendesk.com/api/v2/users.json?page=5&per_page=1",
99
- previous_page_link="https://dev.zendesk.com/api/v2/users.json?page=3&per_page=1"
100
- [
101
- <Zendesk2::Client::User
102
- id=217761652,
103
- url="https://dev.zendesk.com/api/v2/users/217761652.json",
104
- external_id=nil,
105
- name="Guy Dude",
106
- ...
107
- >
108
- ]
109
-
110
- page.next_page
111
- => <Zendesk2::Client::Users
112
- count=1780,
113
- next_page_link="https://dev.zendesk.com/api/v2/users.json?page=6&per_page=1",
114
- previous_page_link="https://dev.zendesk.com/api/v2/users.json?page=4&per_page=1"
115
- [
116
- <Zendesk2::Client::User
117
- id=217761742,
118
- url="https://dev.zendesk.com/api/v2/users/217761742.json",
119
- ...
120
- name="epitaphical osteofibrous",
121
- ...
122
- >
123
- ]
124
-
125
- page.previous_page
126
- => <Zendesk2::Client::Users
127
- count=1780,
128
- next_page_link="https://dev.zendesk.com/api/v2/users.json?page=5&per_page=1",
129
- previous_page_link="https://dev.zendesk.com/api/v2/users.json?page=3&per_page=1"
130
- [
131
- <Zendesk2::Client::User
132
- id=217761652,
133
- url="https://dev.zendesk.com/api/v2/users/217761652.json",
134
- ...
135
- name="Guy Dude",
136
- ...
137
- >
138
- ]
139
-
96
+ ```ruby
97
+ page = client.users.all("per_page" => 1, "page" => 4)
98
+ => <Zendesk2::Client::Users
99
+ count=1780,
100
+ next_page_link="https://dev.zendesk.com/api/v2/users.json?page=5&per_page=1",
101
+ previous_page_link="https://dev.zendesk.com/api/v2/users.json?page=3&per_page=1"
102
+ [
103
+ <Zendesk2::Client::User
104
+ id=217761652,
105
+ url="https://dev.zendesk.com/api/v2/users/217761652.json",
106
+ external_id=nil,
107
+ name="Guy Dude",
108
+ ...
109
+ >
110
+ ]
111
+ ```
112
+ ```ruby
113
+ page.next_page
114
+ => <Zendesk2::Client::Users
115
+ count=1780,
116
+ next_page_link="https://dev.zendesk.com/api/v2/users.json?page=6&per_page=1",
117
+ previous_page_link="https://dev.zendesk.com/api/v2/users.json?page=4&per_page=1"
118
+ [
119
+ <Zendesk2::Client::User
120
+ id=217761742,
121
+ url="https://dev.zendesk.com/api/v2/users/217761742.json",
122
+ ...
123
+ name="epitaphical osteofibrous",
124
+ ...
125
+ >
126
+ ]
127
+ ```
128
+ ```ruby
129
+ page.previous_page
130
+ => <Zendesk2::Client::Users
131
+ count=1780,
132
+ next_page_link="https://dev.zendesk.com/api/v2/users.json?page=5&per_page=1",
133
+ previous_page_link="https://dev.zendesk.com/api/v2/users.json?page=3&per_page=1"
134
+ [
135
+ <Zendesk2::Client::User
136
+ id=217761652,
137
+ url="https://dev.zendesk.com/api/v2/users/217761652.json",
138
+ ...
139
+ name="Guy Dude",
140
+ ...
141
+ >
142
+ ]
143
+ ```
140
144
  #### Models
141
145
 
142
146
  All models respond to `destroy` and `save` if applicable. `save` performs a 'create' operation if there is no identity provided or an 'update' if there is an identity.
143
-
144
- Zendesk2::Client::Ticket.new.save # performs a create
145
- Zendesk2::Client::Ticket.new(id: 1).save # performs an update
146
-
147
+ ```ruby
148
+ Zendesk2::Client::Ticket.new.save # performs a create
149
+ Zendesk2::Client::Ticket.new(id: 1).save # performs an update
150
+ ```
147
151
  Attributes can be enumerated by the `attributes` method.
148
152
 
149
153
  ## Releasing
150
154
 
151
-
152
- $ gem install gem-release
153
- $ gem bump -trv (major|minor|patch)
155
+ $ gem install gem-release
156
+ $ gem bump -trv (major|minor|patch)
154
157
 
155
158
  ## Contributing
156
159
 
@@ -0,0 +1,53 @@
1
+ class Zendesk2::Client::Topic < Cistern::Model
2
+ extend Zendesk2::Attributes
3
+
4
+ PARAMS = %w[id title body submitter_id updater_id forum_id locked pinned highlighted position tags]
5
+
6
+ identity :id, type: :integer # ro[yes] mandatory[no] Automatically assigned upon creation
7
+ attribute :url, type: :string # ro[yes] mandatory[no] The API url of this topic
8
+ attribute :title, type: :string # ro[no] mandatory[yes] The title of the topic
9
+ attribute :body, type: :string # ro[no] mandatory[yes] The unescaped body of the topic
10
+ attribute :topic_type, type: :string # ro[yes] mandatory[no] The type of topic. Either "articles", "ideas" or "questions"
11
+ attribute :submitter_id, type: :integer # ro[no] mandatory[no] The id of the user who submitted the topic
12
+ attribute :updater_id, type: :integer # ro[no] mandatory[no] The id of the person to last update the topic
13
+ attribute :forum_id, type: :integer # ro[no] mandatory[no] Forum that the topic is associated to
14
+ attribute :locked, type: :boolean # ro[no] mandatory[no] Whether comments are allowed
15
+ attribute :pinned, type: :boolean # ro[no] mandatory[no] If the topic is marked as pinned and hence eligible to show up on the front page
16
+ attribute :highlighted, type: :boolean # ro[no] mandatory[no] Set to true to highlight a topic within its forum
17
+ attribute :answered, type: :boolean # ro[yes] mandatory[no] Set to true if the topic is a question and it has been marked as answered.
18
+ attribute :position, type: :integer # ro[no] mandatory[no] The position of this topic relative to other topics in the same forum
19
+ attribute :tags, type: :array # ro[no] mandatory[no] The tags set on the topic
20
+ attribute :created_at, type: :date # ro[yes] mandatory[no] The time the topic was created
21
+
22
+ assoc_accessor :submitter, collection: :users
23
+ assoc_accessor :updater, collection: :users
24
+ assoc_accessor :forum
25
+
26
+
27
+ def destroy
28
+ requires :identity
29
+
30
+ connection.destroy_topic("id" => self.identity)
31
+ end
32
+
33
+ def destroyed?
34
+ !self.reload
35
+ end
36
+
37
+ def save
38
+ data = if new_record?
39
+ requires :title, :body
40
+ connection.create_topic(params).body["topic"]
41
+ else
42
+ requires :identity
43
+ connection.update_topic(params).body["topic"]
44
+ end
45
+ merge_attributes(data)
46
+ end
47
+
48
+ private
49
+
50
+ def params
51
+ Cistern::Hash.slice(Zendesk2.stringify_keys(attributes), *PARAMS)
52
+ end
53
+ end
@@ -0,0 +1,12 @@
1
+ class Zendesk2::Client::Topics < Cistern::Collection
2
+ include Zendesk2::PagedCollection
3
+ include Zendesk2::Searchable
4
+
5
+ model Zendesk2::Client::Topic
6
+
7
+ self.collection_method= :get_topics
8
+ self.collection_root= "topics"
9
+ self.model_method= :get_topic
10
+ self.model_root= "topic"
11
+ self.search_type= "topic"
12
+ end
@@ -0,0 +1,33 @@
1
+ class Zendesk2::Client
2
+ class Real
3
+ def create_topic(params={})
4
+ request(
5
+ :body => {"topic" => params},
6
+ :method => :post,
7
+ :path => "/topics.json",
8
+ )
9
+ end
10
+ end # Real
11
+
12
+ class Mock
13
+ def create_topic(params={})
14
+ identity = self.class.new_id
15
+
16
+ record = {
17
+ "id" => identity,
18
+ "url" => url_for("/topics/#{identity}.json"),
19
+ "created_at" => Time.now.iso8601,
20
+ "updated_at" => Time.now.iso8601,
21
+ }.merge(params)
22
+
23
+ path = "/topics.json"
24
+ self.data[:topics][identity]= record
25
+
26
+ response(
27
+ :method => :post,
28
+ :body => {"topic" => record},
29
+ :path => path,
30
+ )
31
+ end
32
+ end # Mock
33
+ end
@@ -0,0 +1,28 @@
1
+ class Zendesk2::Client
2
+ class Real
3
+ def destroy_topic(params={})
4
+ id = params["id"]
5
+
6
+ request(
7
+ :method => :delete,
8
+ :path => "/topics/#{id}.json"
9
+ )
10
+ end
11
+ end
12
+
13
+ class Mock
14
+ def destroy_topic(params={})
15
+ id = params["id"]
16
+ path = "/topics/#{id}.json"
17
+
18
+ body = self.data[:topics].delete(id)
19
+ response(
20
+ :method => :delete,
21
+ :path => path,
22
+ :body => {
23
+ "topic" => body,
24
+ },
25
+ )
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,26 @@
1
+ class Zendesk2::Client
2
+ class Real
3
+ def get_topic(params={})
4
+ id = params["id"]
5
+
6
+ request(
7
+ :method => :get,
8
+ :path => "/topics/#{id}.json"
9
+ )
10
+ end
11
+ end # Real
12
+
13
+ class Mock
14
+ def get_topic(params={})
15
+ id = params["id"]
16
+ body = self.data[:topics][id]
17
+
18
+ response(
19
+ :path => "/topics/#{id}.json",
20
+ :body => {
21
+ "topic" => body
22
+ },
23
+ )
24
+ end
25
+ end # Mock
26
+ end
@@ -0,0 +1,18 @@
1
+ class Zendesk2::Client
2
+ class Real
3
+ def get_topics(params={})
4
+ page_params = Zendesk2.paging_parameters(params)
5
+
6
+ request(
7
+ :params => page_params,
8
+ :method => :get,
9
+ :path => "/topics.json",
10
+ )
11
+ end
12
+ end
13
+ class Mock
14
+ def get_topics(params={})
15
+ page(params, :topics, "/topics.json", "topics")
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,30 @@
1
+ class Zendesk2::Client
2
+ class Real
3
+ def update_topic(params={})
4
+ id = params.delete("id")
5
+
6
+ request(
7
+ :method => :put,
8
+ :path => "/topics/#{id}.json",
9
+ :body => {
10
+ "topic" => params
11
+ },
12
+ )
13
+ end
14
+ end
15
+ class Mock
16
+ def update_topic(params={})
17
+ id = params.delete("id")
18
+ path = "/topics/#{id}.json"
19
+
20
+ body = self.data[:topics][id].merge!(params)
21
+ response(
22
+ :method => :put,
23
+ :path => path,
24
+ :body => {
25
+ "topic" => body
26
+ },
27
+ )
28
+ end
29
+ end
30
+ end
@@ -7,6 +7,8 @@ class Zendesk2::Client < Cistern::Service
7
7
  collection :categories
8
8
  model :forum
9
9
  collection :forums
10
+ model :topic
11
+ collection :topics
10
12
  model :organization
11
13
  collection :organizations
12
14
  model :ticket
@@ -16,17 +18,20 @@ class Zendesk2::Client < Cistern::Service
16
18
 
17
19
  request :create_category
18
20
  request :create_forum
21
+ request :create_topic
19
22
  request :create_organization
20
23
  request :create_ticket
21
24
  request :create_user
22
25
  request :destroy_category
23
26
  request :destroy_forum
27
+ request :destroy_topic
24
28
  request :destroy_organization
25
29
  request :destroy_ticket
26
30
  request :destroy_user
27
31
  request :get_current_user
28
32
  request :get_category
29
33
  request :get_forum
34
+ request :get_topic
30
35
  request :get_organization
31
36
  request :get_organization_tickets
32
37
  request :get_organization_users
@@ -34,6 +39,7 @@ class Zendesk2::Client < Cistern::Service
34
39
  request :get_user
35
40
  request :get_categories
36
41
  request :get_forums
42
+ request :get_topics
37
43
  request :get_organizations
38
44
  request :get_requested_tickets
39
45
  request :get_ccd_tickets
@@ -42,6 +48,7 @@ class Zendesk2::Client < Cistern::Service
42
48
  request :search
43
49
  request :update_category
44
50
  request :update_forum
51
+ request :update_topic
45
52
  request :update_organization
46
53
  request :update_ticket
47
54
  request :update_user
@@ -118,6 +125,7 @@ class Zendesk2::Client < Cistern::Service
118
125
  :organizations => {},
119
126
  :tickets => {},
120
127
  :forums => {},
128
+ :topics => {},
121
129
  :categories => {},
122
130
  }
123
131
  end
@@ -1,3 +1,3 @@
1
1
  module Zendesk2
2
- VERSION = "0.0.14"
2
+ VERSION = "0.0.15"
3
3
  end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe "topics" do
4
+ let(:client) { create_client }
5
+ let(:forum) { client.forums.create(name: Zendesk2.uuid) }
6
+ it_should_behave_like "a resource",
7
+ :topics,
8
+ lambda { {title: Zendesk2.uuid, body: Zendesk2.uuid, forum_id: forum.id} },
9
+ lambda { {title: Zendesk2.uuid, body: Zendesk2.uuid} }
10
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zendesk2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.15
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-22 00:00:00.000000000 Z
12
+ date: 2012-07-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cistern
@@ -83,7 +83,6 @@ extensions: []
83
83
  extra_rdoc_files: []
84
84
  files:
85
85
  - .gitignore
86
- - .rspec
87
86
  - .travis.yml
88
87
  - Gemfile
89
88
  - Guardfile
@@ -101,17 +100,21 @@ files:
101
100
  - lib/zendesk2/client/models/organizations.rb
102
101
  - lib/zendesk2/client/models/ticket.rb
103
102
  - lib/zendesk2/client/models/tickets.rb
103
+ - lib/zendesk2/client/models/topic.rb
104
+ - lib/zendesk2/client/models/topics.rb
104
105
  - lib/zendesk2/client/models/user.rb
105
106
  - lib/zendesk2/client/models/users.rb
106
107
  - lib/zendesk2/client/requests/create_category.rb
107
108
  - lib/zendesk2/client/requests/create_forum.rb
108
109
  - lib/zendesk2/client/requests/create_organization.rb
109
110
  - lib/zendesk2/client/requests/create_ticket.rb
111
+ - lib/zendesk2/client/requests/create_topic.rb
110
112
  - lib/zendesk2/client/requests/create_user.rb
111
113
  - lib/zendesk2/client/requests/destroy_category.rb
112
114
  - lib/zendesk2/client/requests/destroy_forum.rb
113
115
  - lib/zendesk2/client/requests/destroy_organization.rb
114
116
  - lib/zendesk2/client/requests/destroy_ticket.rb
117
+ - lib/zendesk2/client/requests/destroy_topic.rb
115
118
  - lib/zendesk2/client/requests/destroy_user.rb
116
119
  - lib/zendesk2/client/requests/get_categories.rb
117
120
  - lib/zendesk2/client/requests/get_category.rb
@@ -126,6 +129,8 @@ files:
126
129
  - lib/zendesk2/client/requests/get_requested_tickets.rb
127
130
  - lib/zendesk2/client/requests/get_ticket.rb
128
131
  - lib/zendesk2/client/requests/get_tickets.rb
132
+ - lib/zendesk2/client/requests/get_topic.rb
133
+ - lib/zendesk2/client/requests/get_topics.rb
129
134
  - lib/zendesk2/client/requests/get_user.rb
130
135
  - lib/zendesk2/client/requests/get_users.rb
131
136
  - lib/zendesk2/client/requests/search.rb
@@ -133,6 +138,7 @@ files:
133
138
  - lib/zendesk2/client/requests/update_forum.rb
134
139
  - lib/zendesk2/client/requests/update_organization.rb
135
140
  - lib/zendesk2/client/requests/update_ticket.rb
141
+ - lib/zendesk2/client/requests/update_topic.rb
136
142
  - lib/zendesk2/client/requests/update_user.rb
137
143
  - lib/zendesk2/error.rb
138
144
  - lib/zendesk2/logger.rb
@@ -146,6 +152,7 @@ files:
146
152
  - spec/spec_helper.rb
147
153
  - spec/support/client_helper.rb
148
154
  - spec/tickets_spec.rb
155
+ - spec/topics_spec.rb
149
156
  - spec/users_spec.rb
150
157
  - zendesk2.gemspec
151
158
  homepage: http://joshualane.com/zendesk2
@@ -180,4 +187,6 @@ test_files:
180
187
  - spec/spec_helper.rb
181
188
  - spec/support/client_helper.rb
182
189
  - spec/tickets_spec.rb
190
+ - spec/topics_spec.rb
183
191
  - spec/users_spec.rb
192
+ has_rdoc:
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --color