gds_zendesk 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,19 @@
1
+ Copyright (C) 2013 HM Government (Government Digital Service)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
+ so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
@@ -0,0 +1,55 @@
1
+ # GDS Zendesk
2
+
3
+ ## What is it?
4
+
5
+ `gds_zendesk` is a Ruby gem which (partially) wraps the [Zendesk REST API v2](http://developer.zendesk.com/documentation/rest_api/introduction.html).
6
+
7
+ The [zendesk_api](https://github.com/zendesk/zendesk_api_client_rb) gem is used under the covers.
8
+
9
+ ## Why does it exist?
10
+
11
+ This gem has certain advantages over the `zendesk_api` gem:
12
+
13
+ * Rails integration
14
+ * A dummy Zendesk client implementation, since Zendesk doesn't provide a staging environment
15
+ * Ability to simulate error conditions
16
+
17
+ ## Rails integration
18
+
19
+ ### Installation
20
+
21
+ Simply add the gem to your Gemfile and bundle it up:
22
+
23
+ gem 'gds_zendesk'
24
+
25
+ Run the installation generator:
26
+
27
+ $ rails generate gds_zendesk:install
28
+
29
+ This generates an initializer at `config/initializers/gds_zendesk.rb`.
30
+
31
+ ### Configuration
32
+
33
+ #### Mandatory settings
34
+
35
+ This gem needs to be configured with a Zendesk username and password before it can be used.
36
+ These are set in `config/initializers/gds_zendesk.rb`
37
+
38
+ #### Enabling development mode
39
+
40
+ Because Zendesk doesn't provide a staging environment, it is advised to use the development mode
41
+ during development and testing. When this mode is enabled:
42
+ * the real Zendesk client is replaced by an interface-equivalent dummy implementation (which makes no network calls)
43
+ * ticket creation failures can be simulated by including `break_zendesk` anywhere in the ticket description
44
+
45
+ Development mode can be enabled by configuring `development_mode: true`. It is off by default.
46
+
47
+ ## Usage
48
+
49
+ Invoke
50
+
51
+ ```
52
+ GDSZendesk::Client.new(config_options)
53
+ ```
54
+
55
+ to create a new client.
@@ -0,0 +1,14 @@
1
+ require "rake"
2
+ require "bundler/gem_tasks"
3
+ require 'rspec/core/rake_task'
4
+ require "gem_publisher"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task :default => :spec
9
+
10
+ desc "Publish the gem"
11
+ task :publish_gem do |t|
12
+ gem = GemPublisher.publish_if_updated("gds_zendesk.gemspec", :rubygems)
13
+ puts "Published #{gem}" if gem
14
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'gds_zendesk/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "gds_zendesk"
8
+ gem.version = GDSZendesk::VERSION
9
+ gem.authors = ["Jake Benilov"]
10
+ gem.email = ["benilov@gmail.com"]
11
+ gem.description = %q{Client and models for communicating with Zendesk}
12
+ gem.summary = %q{Client and models for communicating with Zendesk}
13
+ gem.homepage = "https://github.com/alphagov/gds_zendesk"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency 'null_logger', '0.0.1'
21
+ gem.add_dependency 'zendesk_api', '1.0.2'
22
+
23
+ gem.add_development_dependency 'rake', '10.0.3'
24
+ gem.add_development_dependency 'rspec', '2.12.0'
25
+ gem.add_development_dependency 'gem_publisher', '1.2.0'
26
+ gem.add_development_dependency 'faraday_middleware', '0.8.8' # had to pin for gem resolution to work on Jenkins
27
+ gem.add_development_dependency "webmock", '1.9.0'
28
+ end
@@ -0,0 +1,6 @@
1
+ #!/bin/sh
2
+ set -e
3
+ rm -f Gemfile.lock
4
+ bundle install --path "${HOME}/bundles/${JOB_NAME}"
5
+ bundle exec rake
6
+ bundle exec rake publish_gem
@@ -0,0 +1 @@
1
+ require "gds_zendesk/version"
@@ -0,0 +1,56 @@
1
+ require 'forwardable'
2
+ require 'null_logger'
3
+ require 'zendesk_api'
4
+
5
+ require 'gds_zendesk/users'
6
+
7
+ module GDSZendesk
8
+ class Client
9
+ extend Forwardable
10
+ def_delegators :@zendesk_client, :ticket
11
+
12
+ attr_accessor :config_options
13
+
14
+ def initialize(config_options)
15
+ @config_options = defaults.merge(config_options)
16
+ @zendesk_client = build
17
+ end
18
+
19
+ def users
20
+ Users.new(@zendesk_client)
21
+ end
22
+
23
+ def build
24
+ check_that_username_and_password_are_provided
25
+
26
+ ZendeskAPI::Client.new { |config|
27
+ config.url = "https://govuk.zendesk.com/api/v2/"
28
+ config.username = username
29
+ config.password = password
30
+ config.logger = logger
31
+ }
32
+ end
33
+
34
+ protected
35
+ def logger
36
+ @config_options[:logger] || @config_options["logger"]
37
+ end
38
+
39
+ def check_that_username_and_password_are_provided
40
+ raise ArgumentError, "Zendesk username not provided" if username.nil?
41
+ raise ArgumentError, "Zendesk password not provided" if password.nil?
42
+ end
43
+
44
+ def username
45
+ @config_options[:username] || @config_options["username"]
46
+ end
47
+
48
+ def password
49
+ @config_options[:password] || @config_options["password"]
50
+ end
51
+
52
+ def defaults
53
+ { logger: NullLogger.instance }
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,65 @@
1
+ require 'null_logger'
2
+ require 'gds_zendesk/field_mappings'
3
+ require 'zendesk_api/error'
4
+
5
+ module GDSZendesk
6
+ class DummyClient
7
+ attr_reader :ticket, :users
8
+
9
+ def initialize(options)
10
+ @logger = options[:logger] || NullLogger.instance
11
+ @ticket = DummyTicket.new(@logger)
12
+ @users = DummyUsers.new(@logger)
13
+ end
14
+ end
15
+
16
+ class DummyTicket
17
+ attr_reader :options
18
+
19
+ def initialize(logger)
20
+ @logger = logger
21
+ end
22
+
23
+ def create!(options)
24
+ @options = options
25
+ if should_raise_error?
26
+ @logger.info("Simulating Zendesk ticket creation failure: #{options.inspect}")
27
+ raise ZendeskAPI::Error::RecordInvalid.new(body: {"details" => "sample error message from Zendesk"})
28
+ else
29
+ @logger.info("Zendesk ticket created: #{options.inspect}")
30
+ end
31
+ end
32
+
33
+ protected
34
+ def should_raise_error?
35
+ description =~ /break_zendesk/ or comment =~ /break_zendesk/
36
+ end
37
+
38
+ def description
39
+ @options[:description]
40
+ end
41
+
42
+ def comment
43
+ @options[:comment][:value] unless @options[:comment].nil?
44
+ end
45
+ end
46
+
47
+ class DummyUsers
48
+ def initialize(logger)
49
+ @logger = logger
50
+ end
51
+
52
+ def search(attributes)
53
+ []
54
+ end
55
+
56
+ def suspended?(user_email)
57
+ false
58
+ end
59
+
60
+ def create!(new_user_attributes)
61
+ @created_user_attributes = new_user_attributes
62
+ @logger.info("Zendesk user created: #{new_user_attributes.inspect}")
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,6 @@
1
+ module GDSZendesk
2
+ FIELD_MAPPINGS = {
3
+ needed_by_date: "21485833",
4
+ not_before_date: "21502036"
5
+ }
6
+ end
@@ -0,0 +1,67 @@
1
+ require 'json'
2
+
3
+ module GDSZendesk
4
+ module TestHelpers
5
+ def zendesk_has_no_user_with_email(email)
6
+ stub_request(:get, "#{zendesk_endpoint}/users/search?query=#{email}").
7
+ to_return(body: {users: [], previous_page: nil, next_page: nil, count: 0}.to_json,
8
+ headers: {'Content-Type' => 'application/json'})
9
+ end
10
+
11
+ def zendesk_has_user(user_details)
12
+ stub_request(:get, "#{zendesk_endpoint}/users/search?query=#{user_details[:email]}").
13
+ to_return(body: {users: [user_details], previous_page: nil, next_page: nil, count: 1}.to_json,
14
+ headers: {'Content-Type' => 'application/json'})
15
+ end
16
+
17
+ def stub_zendesk_user_creation(user_properties = nil)
18
+ stub = stub_http_request(:post, "#{zendesk_endpoint}/users")
19
+ stub.with(body: {user: user_properties}) unless user_properties.nil?
20
+ stub.to_return(status: 201, body: { user: { id: 12345, name: "abc" }})
21
+ end
22
+
23
+ def stub_zendesk_ticket_creation(ticket_properties = nil)
24
+ stub = stub_http_request(:post, "#{zendesk_endpoint}/tickets")
25
+ stub.with(body: {ticket: ticket_properties}) unless ticket_properties.nil?
26
+ stub.to_return(status: 201, body: { ticket: { id: 12345 }})
27
+ end
28
+
29
+ def stub_zendesk_ticket_creation_with_body(body)
30
+ stub_http_request(:post, "#{zendesk_endpoint}/tickets").
31
+ with(body: body).
32
+ to_return(status: 201, body: { ticket: { id: 12345 }})
33
+ end
34
+
35
+ def stub_zendesk_user_update(user_id, user_properties)
36
+ stub_http_request(:put, "#{zendesk_endpoint}/users/#{user_id}").
37
+ with(body: {user: user_properties}).
38
+ to_return(status: 201, body: { user: { id: 12345, name: "abc" }})
39
+ end
40
+
41
+ def zendesk_is_unavailable
42
+ stub_request(:any, /#{zendesk_endpoint}\/.*/).to_return(status: 503)
43
+ end
44
+
45
+ def zendesk_endpoint
46
+ "https://#{valid_zendesk_credentials["username"]}:#{valid_zendesk_credentials["password"]}@govuk.zendesk.com/api/v2"
47
+ end
48
+
49
+ def valid_zendesk_credentials=(credentials)
50
+ @zendesk_credentials = credentials
51
+ end
52
+
53
+ def valid_zendesk_credentials
54
+ @zendesk_credentials || { "username" => "abc", "password" => "def" }
55
+ end
56
+
57
+ def assert_created_ticket_has(ticket_options)
58
+ assert_requested :post, %r{/api/v2/tickets},
59
+ body: { ticket: hash_including(ticket_options) }, times: 1
60
+ end
61
+
62
+ def assert_created_ticket_has_requester(requester_options)
63
+ assert_requested :post, %r{/api/v2/tickets},
64
+ body: { ticket: hash_including(requester: hash_including(requester_options)) }, times: 1
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,49 @@
1
+ module GDSZendesk
2
+ class Users
3
+ def initialize(client)
4
+ @client = client
5
+ end
6
+
7
+ def create_or_update_user(requested_user)
8
+ existing_users = find_by_email(requested_user.email)
9
+ if existing_users.empty?
10
+ create(requested_user)
11
+ else
12
+ existing_user_in_zendesk = existing_users.first
13
+ update(existing_user_in_zendesk, requested_user)
14
+ end
15
+ end
16
+
17
+ def suspended?(user_email)
18
+ existing_users = find_by_email(user_email)
19
+ if existing_users.empty?
20
+ false
21
+ else
22
+ existing_user_in_zendesk = existing_users.first
23
+ existing_user_in_zendesk["suspended"]
24
+ end
25
+ end
26
+
27
+ protected
28
+ def find_by_email(email)
29
+ @client.users.search(query: email).to_a
30
+ end
31
+
32
+ def create(requested_user)
33
+ @client.users.create!(email: requested_user.email,
34
+ name: requested_user.name,
35
+ details: "Job title: #{requested_user.job}",
36
+ phone: requested_user.phone,
37
+ verified: true)
38
+ end
39
+
40
+ def update(existing_user_in_zendesk, requested_user)
41
+ existing_user_in_zendesk.update(details: "Job title: #{requested_user.job}")
42
+ if !requested_user.phone.nil? && !requested_user.phone.empty?
43
+ existing_user_in_zendesk.update(phone: requested_user.phone)
44
+ end
45
+ existing_user_in_zendesk.save
46
+ existing_user_in_zendesk
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,3 @@
1
+ module GDSZendesk
2
+ VERSION = "1.0.2"
3
+ end
@@ -0,0 +1,24 @@
1
+ INITIALIZER = <<END
2
+ require 'yaml'
3
+ require 'gds_zendesk/client'
4
+ require 'gds_zendesk/dummy_client'
5
+
6
+ GDS_ZENDESK_CLIENT = if Rails.env.development? || Rails.env.test?
7
+ GDSZendesk::DummyClient.new(logger: Rails.logger)
8
+ else
9
+ config_yaml_file = File.join(Rails.root, 'config', 'zendesk.yml')
10
+ config = YAML.load_file(config_yaml_file)[Rails.env]
11
+ GDSZendesk::Client.new(username: config['username'], password: config['password'], logger: Rails.logger)
12
+ end
13
+ END
14
+
15
+ # This module name is slightly differently capitalised to the main library module
16
+ # The reason for this is that the module name is used by Rails within the
17
+ # generator CLI tools, and the tools get confused if the module is called GDSZendesk
18
+ module GdsZendesk
19
+ class InstallGenerator < Rails::Generators::Base
20
+ def create_initializer_file
21
+ initializer "gds_zendesk.rb", INITIALIZER
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+ require 'gds_zendesk/test_helpers'
3
+ require 'gds_zendesk/client'
4
+ require 'null_logger'
5
+
6
+ module GDSZendesk
7
+ describe Client do
8
+ include GDSZendesk::TestHelpers
9
+
10
+ def valid_credentials
11
+ { "username" => "user", "password" => "pass" }
12
+ end
13
+
14
+ def client(options = {})
15
+ Client.new(valid_credentials.merge(options))
16
+ end
17
+
18
+ it "should raise an error if no username is provided" do
19
+ lambda { Client.new(password: "abc") }.should raise_error(ArgumentError,
20
+ /username not provided/)
21
+ end
22
+
23
+ it "should raise an error if no password is provided" do
24
+ lambda { Client.new(username: "abc") }.should raise_error(ArgumentError,
25
+ /password not provided/)
26
+ end
27
+
28
+ it "should use a null logger if no logger has been provided" do
29
+ client.config_options[:logger].should be_an_instance_of(NullLogger::Logger)
30
+ end
31
+
32
+ it "should use the passed logger if one has been provided" do
33
+ custom_logger = stub("logger")
34
+
35
+ client(logger: custom_logger).config_options[:logger].should eq(custom_logger)
36
+ end
37
+
38
+ it "should raise tickets in Zendesk" do
39
+ self.valid_zendesk_credentials = valid_credentials
40
+ post_stub = stub_zendesk_ticket_creation(some: "data")
41
+
42
+ client.ticket.create(some: "data")
43
+
44
+ post_stub.should have_been_requested
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,43 @@
1
+ require 'gds_zendesk/dummy_client'
2
+
3
+ module GDSZendesk
4
+ describe DummyClient do
5
+ context "when a ticket has been raised" do
6
+ let(:ticket_options) { { opt1: "val1" } }
7
+
8
+ it "should log the ticket details" do
9
+ logger = stub("logger")
10
+ logger.should_receive(:info).with("Zendesk ticket created: #{ticket_options.inspect}")
11
+
12
+ client = DummyClient.new(logger: logger)
13
+ client.ticket.create!(ticket_options)
14
+ end
15
+
16
+ it "can simulate failures, triggered by a specific description or comment" do
17
+ logger = mock("logger")
18
+ client = DummyClient.new(logger: logger)
19
+ logger.should_receive(:info).with(/Simulating Zendesk ticket creation failure/).twice
20
+
21
+ lambda {
22
+ client.ticket.create!(description: "break_zendesk")
23
+ }.should raise_error(ZendeskAPI::Error::RecordInvalid)
24
+
25
+ lambda {
26
+ client.ticket.create!(comment: { value: "break_zendesk" })
27
+ }.should raise_error(ZendeskAPI::Error::RecordInvalid)
28
+ end
29
+ end
30
+
31
+ context "when a user has been created" do
32
+ let(:created_user_options) { { email: "a@b.com" } }
33
+
34
+ it "should log the user details" do
35
+ logger = stub("logger")
36
+ logger.should_receive(:info).with("Zendesk user created: #{created_user_options.inspect}")
37
+
38
+ client = DummyClient.new(logger: logger)
39
+ client.users.create!(created_user_options)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ require 'gds_zendesk/client'
4
+ require 'gds_zendesk/users'
5
+ require 'gds_zendesk/test_helpers'
6
+
7
+ module GDSZendesk
8
+ describe Users do
9
+ include GDSZendesk::TestHelpers
10
+
11
+ let(:users) { Client.new(valid_zendesk_credentials).users }
12
+
13
+ context "existing users" do
14
+ before do
15
+ zendesk_has_user(email: "test@test.com", id: 123)
16
+ end
17
+
18
+ context "creating/updating a user" do
19
+ it "should update the phone and job title if those are set" do
20
+ stub_post = stub_zendesk_user_update(123, phone: "12345", details: "Job title: Developer")
21
+ users.create_or_update_user(stub("requested user", email: "test@test.com", phone: "12345", job: "Developer"))
22
+
23
+ stub_post.should have_been_requested
24
+ end
25
+ end
26
+
27
+ it "should know whether the user is suspended or not" do
28
+ zendesk_has_user(email: "test@test.com", id: 123, suspended: "true")
29
+ users.suspended?("test@test.com").should be_true
30
+ end
31
+ end
32
+
33
+ context "non-existent users" do
34
+ before do
35
+ zendesk_has_no_user_with_email("test@test.com")
36
+ end
37
+
38
+ it "should not be suspended" do
39
+ users.should_not be_suspended("test@test.com")
40
+ end
41
+
42
+ context "creating/updating" do
43
+ it "should create that user" do
44
+ stub_post = stub_zendesk_user_creation(
45
+ verified: true,
46
+ name: "Abc",
47
+ email: "test@test.com",
48
+ phone: "12345",
49
+ details: "Job title: Developer"
50
+ )
51
+ user_being_requested = stub("requested user",
52
+ name: "Abc", email: "test@test.com", phone: "12345", job: "Developer")
53
+
54
+ users.create_or_update_user(user_being_requested)
55
+ stub_post.should have_been_requested
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,3 @@
1
+ require 'webmock/rspec'
2
+
3
+ WebMock.disable_net_connect!(:allow_localhost => true)
metadata ADDED
@@ -0,0 +1,186 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gds_zendesk
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jake Benilov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-01-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: null_logger
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - '='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.0.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - '='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.0.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: zendesk_api
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - '='
36
+ - !ruby/object:Gem::Version
37
+ version: 1.0.2
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.0.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - '='
52
+ - !ruby/object:Gem::Version
53
+ version: 10.0.3
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 10.0.3
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - '='
68
+ - !ruby/object:Gem::Version
69
+ version: 2.12.0
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - '='
76
+ - !ruby/object:Gem::Version
77
+ version: 2.12.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: gem_publisher
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - '='
84
+ - !ruby/object:Gem::Version
85
+ version: 1.2.0
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - '='
92
+ - !ruby/object:Gem::Version
93
+ version: 1.2.0
94
+ - !ruby/object:Gem::Dependency
95
+ name: faraday_middleware
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - '='
100
+ - !ruby/object:Gem::Version
101
+ version: 0.8.8
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - '='
108
+ - !ruby/object:Gem::Version
109
+ version: 0.8.8
110
+ - !ruby/object:Gem::Dependency
111
+ name: webmock
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 1.9.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - '='
124
+ - !ruby/object:Gem::Version
125
+ version: 1.9.0
126
+ description: Client and models for communicating with Zendesk
127
+ email:
128
+ - benilov@gmail.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - .gitignore
134
+ - Gemfile
135
+ - LICENCE.txt
136
+ - README.md
137
+ - Rakefile
138
+ - gds_zendesk.gemspec
139
+ - jenkins.sh
140
+ - lib/gds_zendesk.rb
141
+ - lib/gds_zendesk/client.rb
142
+ - lib/gds_zendesk/dummy_client.rb
143
+ - lib/gds_zendesk/field_mappings.rb
144
+ - lib/gds_zendesk/test_helpers.rb
145
+ - lib/gds_zendesk/users.rb
146
+ - lib/gds_zendesk/version.rb
147
+ - lib/generators/gds_zendesk/install/install_generator.rb
148
+ - spec/gds_zendesk/client_spec.rb
149
+ - spec/gds_zendesk/dummy_client_spec.rb
150
+ - spec/gds_zendesk/users_spec.rb
151
+ - spec/spec_helper.rb
152
+ homepage: https://github.com/alphagov/gds_zendesk
153
+ licenses: []
154
+ post_install_message:
155
+ rdoc_options: []
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ! '>='
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ segments:
165
+ - 0
166
+ hash: 4508364526887278478
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ none: false
169
+ requirements:
170
+ - - ! '>='
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ segments:
174
+ - 0
175
+ hash: 4508364526887278478
176
+ requirements: []
177
+ rubyforge_project:
178
+ rubygems_version: 1.8.23
179
+ signing_key:
180
+ specification_version: 3
181
+ summary: Client and models for communicating with Zendesk
182
+ test_files:
183
+ - spec/gds_zendesk/client_spec.rb
184
+ - spec/gds_zendesk/dummy_client_spec.rb
185
+ - spec/gds_zendesk/users_spec.rb
186
+ - spec/spec_helper.rb