zendesk2 0.0.18 → 0.0.19

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
- class Zendesk2::Client::Categories < Cistern::Collection
1
+ class Zendesk2::Client::Categories < Zendesk2::Collection
2
2
  include Zendesk2::PagedCollection
3
3
  include Zendesk2::Searchable
4
4
 
@@ -1,4 +1,4 @@
1
- class Zendesk2::Client::Category < Cistern::Model
1
+ class Zendesk2::Client::Category < Zendesk2::Model
2
2
  PARAMS = %w[id name description position]
3
3
 
4
4
  identity :id, type: :integer # ro[yes] mandatory[no] Automatically assigned during creation
@@ -19,7 +19,7 @@ class Zendesk2::Client::Category < Cistern::Model
19
19
  !self.reload
20
20
  end
21
21
 
22
- def save
22
+ def save!
23
23
  data = if new_record?
24
24
  requires :name
25
25
  connection.create_category(params).body["category"]
@@ -1,4 +1,4 @@
1
- class Zendesk2::Client::Forum < Cistern::Model
1
+ class Zendesk2::Client::Forum < Zendesk2::Model
2
2
  extend Zendesk2::Attributes
3
3
 
4
4
  PARAMS = %w[id name description category_id organization_id locale_id locked position forum_type access]
@@ -31,7 +31,7 @@ class Zendesk2::Client::Forum < Cistern::Model
31
31
  !self.reload
32
32
  end
33
33
 
34
- def save
34
+ def save!
35
35
  data = if new_record?
36
36
  requires :name
37
37
  connection.create_forum(params).body["forum"]
@@ -1,4 +1,4 @@
1
- class Zendesk2::Client::Forums < Cistern::Collection
1
+ class Zendesk2::Client::Forums < Zendesk2::Collection
2
2
  include Zendesk2::PagedCollection
3
3
  include Zendesk2::Searchable
4
4
 
@@ -1,4 +1,4 @@
1
- class Zendesk2::Client::Organization < Cistern::Model
1
+ class Zendesk2::Client::Organization < Zendesk2::Model
2
2
  PARAMS = %w[id details domain_names external_id group_id shared_comments shared_tickets tags name notes]
3
3
 
4
4
  identity :id, type: :integer
@@ -31,7 +31,7 @@ class Zendesk2::Client::Organization < Cistern::Model
31
31
  !self.reload
32
32
  end
33
33
 
34
- def save
34
+ def save!
35
35
  data = if new_record?
36
36
  requires :name
37
37
  connection.create_organization(params).body["organization"]
@@ -1,4 +1,4 @@
1
- class Zendesk2::Client::Organizations < Cistern::Collection
1
+ class Zendesk2::Client::Organizations < Zendesk2::Collection
2
2
  include Zendesk2::PagedCollection
3
3
  include Zendesk2::Searchable
4
4
 
@@ -1,4 +1,4 @@
1
- class Zendesk2::Client::Ticket < Cistern::Model
1
+ class Zendesk2::Client::Ticket < Zendesk2::Model
2
2
  extend Zendesk2::Attributes
3
3
 
4
4
  PARAMS = %w[external_id via requester_id submitter_id assignee_id organization_id subject description fields recipient status collaborator_ids]
@@ -31,7 +31,7 @@ class Zendesk2::Client::Ticket < Cistern::Model
31
31
  assoc_accessor :requester, collection: :users
32
32
  assoc_reader :submitter, collection: :users
33
33
 
34
- def save
34
+ def save!
35
35
  if new_record?
36
36
  requires :subject, :description
37
37
  data = connection.create_ticket(params).body["ticket"]
@@ -1,4 +1,4 @@
1
- class Zendesk2::Client::Tickets < Cistern::Collection
1
+ class Zendesk2::Client::Tickets < Zendesk2::Collection
2
2
  include Zendesk2::PagedCollection
3
3
  include Zendesk2::Searchable
4
4
 
@@ -1,4 +1,4 @@
1
- class Zendesk2::Client::Topic < Cistern::Model
1
+ class Zendesk2::Client::Topic < Zendesk2::Model
2
2
  extend Zendesk2::Attributes
3
3
 
4
4
  PARAMS = %w[id title body submitter_id updater_id forum_id locked pinned highlighted position tags]
@@ -34,7 +34,7 @@ class Zendesk2::Client::Topic < Cistern::Model
34
34
  !self.reload
35
35
  end
36
36
 
37
- def save
37
+ def save!
38
38
  data = if new_record?
39
39
  requires :title, :body
40
40
  connection.create_topic(params).body["topic"]
@@ -1,4 +1,4 @@
1
- class Zendesk2::Client::TopicComment < Cistern::Model
1
+ class Zendesk2::Client::TopicComment < Zendesk2::Model
2
2
  extend Zendesk2::Attributes
3
3
 
4
4
  PARAMS = %w[id topic_id user_id body informative]
@@ -26,7 +26,7 @@ class Zendesk2::Client::TopicComment < Cistern::Model
26
26
  !self.reload
27
27
  end
28
28
 
29
- def save
29
+ def save!
30
30
  data = if new_record?
31
31
  requires :topic_id, :user_id, :body
32
32
  connection.create_topic_comment(params).body["topic_comment"]
@@ -1,4 +1,4 @@
1
- class Zendesk2::Client::TopicComments < Cistern::Collection
1
+ class Zendesk2::Client::TopicComments < Zendesk2::Collection
2
2
  include Zendesk2::PagedCollection
3
3
  include Zendesk2::Searchable
4
4
 
@@ -1,4 +1,4 @@
1
- class Zendesk2::Client::Topics < Cistern::Collection
1
+ class Zendesk2::Client::Topics < Zendesk2::Collection
2
2
  include Zendesk2::PagedCollection
3
3
  include Zendesk2::Searchable
4
4
 
@@ -1,4 +1,4 @@
1
- class Zendesk2::Client::User < Cistern::Model
1
+ class Zendesk2::Client::User < Zendesk2::Model
2
2
  extend Zendesk2::Attributes
3
3
 
4
4
  PARAMS = %w[name email organization_id external_id alias verified locate_id time_zone phone signature details notes role custom_role_id moderator ticket_restriction only_private_comments]
@@ -33,9 +33,10 @@ class Zendesk2::Client::User < Cistern::Model
33
33
  attribute :photo
34
34
  attribute :authenticity_token
35
35
 
36
+ attr_accessor :errors
36
37
  assoc_accessor :organization
37
38
 
38
- def save
39
+ def save!
39
40
  if new_record?
40
41
  requires :name, :email
41
42
  data = connection.create_user(params).body["user"]
@@ -1,4 +1,4 @@
1
- class Zendesk2::Client::Users < Cistern::Collection
1
+ class Zendesk2::Client::Users < Zendesk2::Collection
2
2
  include Zendesk2::PagedCollection
3
3
  include Zendesk2::Searchable
4
4
 
@@ -22,17 +22,18 @@ class Zendesk2::Client
22
22
  }.merge(params)
23
23
 
24
24
  path = "/users.json"
25
- if record["email"] && self.data[:users].find{|k,u| u["email"] == record["email"] && k != identity}
25
+ if (email = record["email"]) && self.data[:users].find{|k,u| u["email"] == email && k != identity}
26
26
  response(
27
27
  :method => :put,
28
28
  :path => path,
29
29
  :status => 422,
30
30
  :body => {
31
31
  "error" => "RecordInvalid",
32
- "description" => "Record validation errors", "details" => {
33
- "email" => [ {
34
- "type" => "#{record["email"]} is already being used by another user",
35
- "description" => "Email: #{record["email"]} is already being used by another user"
32
+ "description" => "Record validation errors",
33
+ "details" => {
34
+ "email" => [ {
35
+ "type" => "#{email} is already being used by another user",
36
+ "description" => "Email: #{email} is already being used by another user"
36
37
  } ]
37
38
  }
38
39
  }
@@ -0,0 +1,6 @@
1
+ class Zendesk2::Collection < Cistern::Collection
2
+ def create!(attributes={})
3
+ model = self.new(attributes)
4
+ model.save!
5
+ end
6
+ end
@@ -1,8 +1,9 @@
1
1
  class Zendesk2::Error < StandardError
2
2
 
3
- attr_reader :wrapped_exception
3
+ attr_reader :wrapped_exception, :response
4
4
  def initialize(wrapped_exception)
5
5
  @wrapped_exception = wrapped_exception
6
+ @response = wrapped_exception.response
6
7
  message = if wrapped_exception.is_a?(Faraday::Error::ParsingError)
7
8
  wrapped_exception.message
8
9
  elsif wrapped_exception.is_a?(Faraday::Error::ClientError)
@@ -0,0 +1,11 @@
1
+ class Zendesk2::Model < Cistern::Model
2
+
3
+ attr_accessor :errors
4
+
5
+ def save
6
+ save!
7
+ rescue Zendesk2::Error => e
8
+ self.errors= e.response[:body]["details"].inject({}){|r,(k,v)| r.merge(k => v.map{|e| e["type"] || e["description"]})} rescue nil
9
+ self
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module Zendesk2
2
- VERSION = "0.0.18"
2
+ VERSION = "0.0.19"
3
3
  end
data/lib/zendesk2.rb CHANGED
@@ -17,6 +17,8 @@ module Zendesk2
17
17
  autoload :PagedCollection, 'zendesk2/paged_collection'
18
18
  autoload :Searchable, 'zendesk2/searchable'
19
19
  autoload :Logger, 'zendesk2/logger'
20
+ autoload :Model, 'zendesk2/model'
21
+ autoload :Collection, 'zendesk2/collection'
20
22
 
21
23
  def self.defaults
22
24
  @defaults ||= if File.exists?(File.expand_path("~/.zendesk2"))
@@ -44,6 +46,6 @@ module Zendesk2
44
46
  end
45
47
 
46
48
  def self.blank?(string)
47
- !!string || string == ""
49
+ !string || string == ""
48
50
  end
49
51
  end
@@ -20,8 +20,10 @@ describe "organizations" do
20
20
  organization.tickets.should include ticket
21
21
  end
22
22
 
23
- it "should raise on name conflict" do
24
- lambda { client.organizations.create(name: organization.name) }.should raise_exception(Zendesk2::Error)
23
+ it "should hate non-unique names" do
24
+ lambda { client.organizations.create!(name: organization.name) }.should raise_exception(Zendesk2::Error)
25
+ model = client.organizations.create(name: organization.name)
26
+ model.errors.should == {"name" => ["Name: has already been taken"]}
25
27
  end
26
28
  end
27
29
  end
data/spec/users_spec.rb CHANGED
@@ -14,8 +14,11 @@ describe "users" do
14
14
  end
15
15
 
16
16
  describe do
17
- let(:user) { client.users.create(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid) }
18
- after(:all) { user.destroy }
17
+ before(:each) do
18
+ @user = client.users.create(email: "zendesk2+#{Zendesk2.uuid}@example.org", name: Zendesk2.uuid)
19
+ end
20
+
21
+ let(:user) { @user }
19
22
 
20
23
  it "should update organization" do
21
24
  organization = client.organizations.create(name: Zendesk2.uuid)
@@ -47,9 +50,16 @@ describe "users" do
47
50
  it "should hate non-unique emails" do
48
51
  email = "zendesk2+#{Zendesk2.uuid}@example.org"
49
52
  client.users.create(email: email, name: Zendesk2.uuid)
50
- lambda { client.users.create(email: email, name: Zendesk2.uuid) }.should raise_exception(Zendesk2::Error)
53
+ lambda { client.users.create!(email: email, name: Zendesk2.uuid) }.should raise_exception(Zendesk2::Error)
54
+ user = client.users.create(email: email, name: Zendesk2.uuid)
55
+ user.identity.should be_false
56
+ user.errors.should == {"email" => ["#{email} is already being used by another user"]}
51
57
  end
52
58
 
53
- it "should form login url"
59
+ it "should form login url" do
60
+ return_to = "http://engineyard.com"
61
+ uri = Addressable::URI.parse(user.login_url(Time.now.to_s, return_to: return_to))
62
+ uri.query_values["return_to"].should == return_to
63
+ end
54
64
  end
55
65
  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.18
4
+ version: 0.0.19
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-09-09 00:00:00.000000000 Z
12
+ date: 2012-09-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cistern
@@ -147,8 +147,10 @@ files:
147
147
  - lib/zendesk2/client/requests/update_topic.rb
148
148
  - lib/zendesk2/client/requests/update_topic_comment.rb
149
149
  - lib/zendesk2/client/requests/update_user.rb
150
+ - lib/zendesk2/collection.rb
150
151
  - lib/zendesk2/error.rb
151
152
  - lib/zendesk2/logger.rb
153
+ - lib/zendesk2/model.rb
152
154
  - lib/zendesk2/paged_collection.rb
153
155
  - lib/zendesk2/searchable.rb
154
156
  - lib/zendesk2/version.rb