zammad_api 1.2.0 → 1.3.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0b023eaf06caa58b99f661e44a21c22134eb67066658fb159a5e3115073f0082
4
- data.tar.gz: 8e95df76d83ad02bead573a2cdfa10c2e53d41b57f7f4d99f1fe2ab25297cb20
3
+ metadata.gz: e210909fb0d53e8184097f0ac41021ae674a5981b80e4e405631d33d6d07623e
4
+ data.tar.gz: 83e7ac5be2b238ce682b9f478d0bc7dbab3a00308367a01b95e5fc3c9ee586f5
5
5
  SHA512:
6
- metadata.gz: e93b71d8c72b44dd4562b6df73e0f1d37125df177cb36731232167da3642358e315d59f9a0baa63dbd4ab6f9ec0dfe4e56887723c2d17c4198142b469ed2f055
7
- data.tar.gz: 3a483ddb217434eb46a051a93578a77f401b9b336cb194257488439d578045bb6d6e2f47c56b366f260798f3a0ec251a9558c15f836855f187844ea468f432e6
6
+ metadata.gz: c8122abe30faebe219bea0e71ac5220a060b6c2f1ac08e2d86783987c4de5280daccd9341627a49da41e2e9eb24d88e7db84350b21d0f9f47feda364066deb8b
7
+ data.tar.gz: 72f47ce52a5f80a4a17f56bb652324cebee7b07c32ae944901065b09b5850d634081b0ae7278327074f6e546c9be6a68714ce842c078979c13294650f9b771f9
@@ -6,7 +6,6 @@ require 'zammad_api/dispatcher'
6
6
  require 'zammad_api/resources'
7
7
 
8
8
  module ZammadAPI
9
-
10
9
  class Client
11
10
  extend Forwardable
12
11
 
@@ -27,7 +26,7 @@ module ZammadAPI
27
26
  end
28
27
 
29
28
  def method_missing(method, *_args)
30
- method = modulize( method.to_s )
29
+ method = modulize(method.to_s)
31
30
  class_name = "ZammadAPI::Resources::#{method}"
32
31
  begin
33
32
  class_object = Kernel.const_get(class_name)
@@ -41,7 +40,7 @@ module ZammadAPI
41
40
 
42
41
  def check_config
43
42
  raise 'missing url in config' if !@config[:url]
44
- raise 'config url needs to start with http:// or https://' if @config[:url] !~ %r{^(http|https)://}
43
+ raise 'config url needs to start with http:// or https://' if !%r{^(http|https)://}.match?(@config[:url])
45
44
 
46
45
  # check for token auth
47
46
  return if @config[:http_token] && !@config[:http_token].empty?
@@ -58,9 +57,9 @@ module ZammadAPI
58
57
 
59
58
  def modulize(string)
60
59
  string.gsub(/__(.?)/) { "::#{$1.upcase}" }
61
- .gsub(%r{/(.?)}) { "::#{$1.upcase}" }
62
- .gsub(/(?:_+|-+)([a-z])/) { $1.upcase }
63
- .gsub(/(\A|\s)([a-z])/) { $1 + $2.upcase }
60
+ .gsub(%r{/(.?)}) { "::#{$1.upcase}" }
61
+ .gsub(/(?:_+|-+)([a-z])/) { $1.upcase }
62
+ .gsub(/(\A|\s)([a-z])/) { $1 + $2.upcase }
64
63
  end
65
64
  end
66
65
  end
@@ -1,6 +1,5 @@
1
1
  module ZammadAPI
2
2
  class Dispatcher
3
-
4
3
  def initialize(transport, resource)
5
4
  @transport = transport
6
5
  @resource = resource
@@ -0,0 +1,11 @@
1
+ require 'json'
2
+
3
+ module ZammadAPI
4
+ module JsonHelper
5
+ def safe_json_parse(string)
6
+ JSON.parse(string)
7
+ rescue JSON::ParserError
8
+ {}
9
+ end
10
+ end
11
+ end
@@ -2,7 +2,6 @@ require 'zammad_api/list_base'
2
2
 
3
3
  module ZammadAPI
4
4
  class ListAll < ListBase
5
-
6
5
  private
7
6
 
8
7
  def perform_request(parameter)
@@ -1,6 +1,9 @@
1
+ require 'zammad_api/json_helper'
2
+
1
3
  module ZammadAPI
2
4
  class ListBase
3
5
  include Enumerable
6
+ include ZammadAPI::JsonHelper
4
7
 
5
8
  def initialize(resource, transport, parameter = {})
6
9
  @resource = resource
@@ -14,7 +17,6 @@ module ZammadAPI
14
17
  end
15
18
 
16
19
  def [](position)
17
-
18
20
  local_parameter = @parameter.merge(
19
21
  page: position + 1,
20
22
  per_page: 1
@@ -23,7 +25,6 @@ module ZammadAPI
23
25
  end
24
26
 
25
27
  def page(page, per_page, &block)
26
-
27
28
  @parameter[:page] = page
28
29
  @parameter[:per_page] = per_page
29
30
  fetch_and_yield_each(&block)
@@ -45,18 +46,14 @@ module ZammadAPI
45
46
 
46
47
  private
47
48
 
48
- def fetch_and_yield_each
49
+ def fetch_and_yield_each(&block)
49
50
  result = perform_request(@parameter)
50
- result.each { |item|
51
- yield item
52
- }
51
+ result.each(&block)
53
52
  end
54
53
 
55
54
  def request(request, url, parameter)
56
-
57
55
  # convert parameters into a GET query
58
56
  url += '?' + parameter.map { |key, value|
59
-
60
57
  if !value.is_a? String
61
58
  value = value.to_s
62
59
  end
@@ -65,17 +62,17 @@ module ZammadAPI
65
62
  }.join('&')
66
63
 
67
64
  response = @transport.get(url: url)
68
- data = JSON.parse(response.body)
65
+ data = safe_json_parse(response.body)
69
66
  if response.status != 200
70
67
  raise "Can't get .#{request} of object (#{@resource.class.name}): #{data['error']}"
71
68
  end
72
69
 
73
70
  list = []
74
- data.each { |local_data|
71
+ data.each do |local_data|
75
72
  item = @resource.new(@transport, local_data)
76
73
  item.new_instance = false
77
74
  list.push item
78
- }
75
+ end
79
76
  list
80
77
  end
81
78
 
@@ -2,7 +2,6 @@ require 'zammad_api/list_base'
2
2
 
3
3
  module ZammadAPI
4
4
  class ListSearch < ListBase
5
-
6
5
  private
7
6
 
8
7
  def perform_request(parameter)
@@ -1,8 +1,8 @@
1
1
  module ZammadAPI
2
2
  class Log
3
-
4
3
  def initialize(config)
5
4
  return if !config[:logger]
5
+
6
6
  require 'logger'
7
7
  @logger = Logger.new($stderr)
8
8
  #@logger.level = Logger::WARN
@@ -11,6 +11,7 @@ module ZammadAPI
11
11
 
12
12
  def method_missing(method, *args)
13
13
  return if !@logger
14
+
14
15
  @logger.send(method, args)
15
16
  end
16
17
  end
@@ -1,10 +1,13 @@
1
1
  require 'cgi'
2
- require 'json'
2
+ require 'zammad_api/json_helper'
3
3
  require 'zammad_api/transport'
4
4
 
5
5
  module ZammadAPI
6
6
  module Resources
7
7
  class Base
8
+ include ZammadAPI::JsonHelper
9
+ extend ZammadAPI::JsonHelper
10
+
8
11
  attr_accessor :new_instance, :url, :attributes
9
12
  attr_reader :changes
10
13
 
@@ -23,6 +26,7 @@ module ZammadAPI
23
26
 
24
27
  def method_missing(method, *args)
25
28
  return @attributes[method] if !method.to_s.end_with?('=')
29
+
26
30
  method = method.to_s[0, method.length - 1].to_sym
27
31
  @changes[method] = [@attributes[method], args[0]]
28
32
  @attributes[method] = args[0]
@@ -40,9 +44,10 @@ module ZammadAPI
40
44
  def destroy
41
45
  response = @transport.delete(url: "#{@url}/#{@attributes[:id]}")
42
46
  if response.body.to_s != '' && response.body.to_s != ' '
43
- data = JSON.parse(response.body)
47
+ data = safe_json_parse(response.body)
44
48
  end
45
49
  return true if response.status == 200
50
+
46
51
  raise "Can't destroy object (#{self.class.name}): #{data['error']}"
47
52
  end
48
53
 
@@ -74,10 +79,11 @@ module ZammadAPI
74
79
 
75
80
  def self.find(transport, id)
76
81
  response = transport.get(url: "#{@url}/#{id}?expand=true")
77
- data = JSON.parse(response.body)
82
+ data = safe_json_parse(response.body)
78
83
  if response.status != 200
79
84
  raise "Can't find object (#{self.class.name}): #{data['error']}"
80
85
  end
86
+
81
87
  item = new(transport, data)
82
88
  item.new_instance = false
83
89
  item
@@ -99,25 +105,28 @@ module ZammadAPI
99
105
 
100
106
  def saved_attributes
101
107
  return save_new if @new_instance
108
+
102
109
  save_existing
103
110
  end
104
111
 
105
112
  def save_new
106
113
  response = @transport.post(url: "#{@url}?expand=true", params: @attributes)
107
- attributes = JSON.parse(response.body)
114
+ attributes = safe_json_parse(response.body)
108
115
  return attributes if response.status == 201
116
+
109
117
  save_error(attributes)
110
118
  end
111
119
 
112
120
  def save_existing
113
121
  attributes_to_post = {}
114
- @changes.each { |name, values|
122
+ @changes.each do |name, values|
115
123
  attributes_to_post[name] = values[1]
116
- }
124
+ end
117
125
  response = @transport.put(url: "#{@url}/#{@attributes[:id]}?expand=true", params: attributes_to_post)
118
- attributes = JSON.parse(response.body)
126
+ attributes = safe_json_parse(response.body)
119
127
 
120
128
  return attributes if response.status == 200
129
+
121
130
  save_error(attributes)
122
131
  end
123
132
 
@@ -3,16 +3,16 @@ class ZammadAPI::Resources::Ticket < ZammadAPI::Resources::Base
3
3
 
4
4
  def articles
5
5
  response = @transport.get(url: "/api/v1/ticket_articles/by_ticket/#{id}?expand=true")
6
- data = JSON.parse(response.body)
6
+ data = safe_json_parse(response.body)
7
7
  if response.status != 200
8
8
  raise "Can't get articles (#{self.class.name}): #{data['error']}"
9
9
  end
10
10
 
11
- data.collect { |raw|
11
+ data.collect do |raw|
12
12
  item = ZammadAPI::Resources::TicketArticle.new(@transport, raw)
13
13
  item.new_instance = false
14
14
  item
15
- }
15
+ end
16
16
  end
17
17
 
18
18
  def article(data)
@@ -21,5 +21,4 @@ class ZammadAPI::Resources::Ticket < ZammadAPI::Resources::Base
21
21
  item.save
22
22
  item
23
23
  end
24
-
25
24
  end
@@ -2,11 +2,10 @@ class ZammadAPI::Resources::TicketArticle < ZammadAPI::Resources::Base
2
2
  url '/api/v1/ticket_articles'
3
3
 
4
4
  def attachments
5
- @attributes[:attachments].collect { |raw|
5
+ @attributes[:attachments].collect do |raw|
6
6
  raw[:ticket_id] = @attributes[:ticket_id]
7
7
  raw[:article_id] = @attributes[:id]
8
8
  ZammadAPI::Resources::TicketArticleAttachment.new(@transport, raw)
9
- }
9
+ end
10
10
  end
11
-
12
11
  end
@@ -1,6 +1,5 @@
1
1
  class ZammadAPI::Resources::TicketArticleAttachment < ZammadAPI::Resources::Base
2
-
3
- def initialize(transport, attributes = {})
2
+ def initialize(transport, attributes = {}) # rubocop:disable Lint/MissingSuper
4
3
  @transport = transport
5
4
  @attributes = attributes
6
5
  symbolize_keys_deep!(@attributes)
@@ -13,8 +12,8 @@ class ZammadAPI::Resources::TicketArticleAttachment < ZammadAPI::Resources::Base
13
12
  def download
14
13
  response = @transport.get(url: "/api/v1/ticket_attachment/#{ticket_id}/#{article_id}/#{id}")
15
14
  return response.body if response.status == 200
16
- data = JSON.parse(response.body)
15
+
16
+ data = safe_json_parse(response.body)
17
17
  raise "Can't get articles (#{self.class.name}): #{data['error']}"
18
18
  end
19
-
20
19
  end
@@ -12,6 +12,6 @@ require 'zammad_api/resources/ticket_state'
12
12
  require 'zammad_api/resources/ticket_priority'
13
13
 
14
14
  module ZammadAPI
15
- class Resource
15
+ class Resource # rubocop:disable Lint/EmptyClass
16
16
  end
17
17
  end
@@ -3,7 +3,6 @@ require 'openssl'
3
3
 
4
4
  module ZammadAPI
5
5
  class Transport
6
-
7
6
  attr_accessor :url, :user, :password, :on_behalf_of
8
7
 
9
8
  def initialize(config, logger)
@@ -12,7 +11,7 @@ module ZammadAPI
12
11
  @conn = Faraday.new(url: config[:url]) do |faraday|
13
12
  #faraday.request :url_encoded # form-encode POST params
14
13
  #faraday.response :logger # log requests to STDOUT
15
- faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
14
+ faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
16
15
  end
17
16
  @conn.headers[:user_agent] = 'Zammad API Ruby'
18
17
  if config[:http_token] && !config[:http_token].empty?
@@ -26,16 +25,15 @@ module ZammadAPI
26
25
 
27
26
  %w[get post put delete].each do |method|
28
27
  class_eval <<-RUBY, __FILE__, __LINE__ + 1
29
- def #{method}(params)
30
- run_request(:#{method}, params)
31
- end
28
+ def #{method}(params) # def get(params)
29
+ run_request(:#{method}, params) # run_request(:get, params)
30
+ end # end
32
31
  RUBY
33
32
  end
34
33
 
35
34
  private
36
35
 
37
36
  def run_request(verb, param)
38
-
39
37
  @logger.debug "#{verb.to_s.upcase}: #{@url}#{param[:url]}"
40
38
 
41
39
  with_params = !param[:params].nil?
@@ -1,3 +1,3 @@
1
1
  module ZammadAPI
2
- VERSION = '1.2.0'.freeze
2
+ VERSION = '1.3.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zammad_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Edenhofer
8
8
  - Martin Gruner
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2023-07-20 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: faraday
@@ -25,62 +24,6 @@ dependencies:
25
24
  - - "~>"
26
25
  - !ruby/object:Gem::Version
27
26
  version: '2'
28
- - !ruby/object:Gem::Dependency
29
- name: bundler
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: 2.2.10
35
- type: :development
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- version: 2.2.10
42
- - !ruby/object:Gem::Dependency
43
- name: rake
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ">="
47
- - !ruby/object:Gem::Version
48
- version: '0'
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: '0'
56
- - !ruby/object:Gem::Dependency
57
- name: rspec
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: '0'
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- - !ruby/object:Gem::Dependency
71
- name: webmock
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- version: '0'
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - ">="
82
- - !ruby/object:Gem::Version
83
- version: '0'
84
27
  description: Ruby wrapper for the Zammad API v1.0.
85
28
  email:
86
29
  - support@zammad.org
@@ -91,6 +34,7 @@ files:
91
34
  - lib/zammad_api.rb
92
35
  - lib/zammad_api/client.rb
93
36
  - lib/zammad_api/dispatcher.rb
37
+ - lib/zammad_api/json_helper.rb
94
38
  - lib/zammad_api/list_all.rb
95
39
  - lib/zammad_api/list_base.rb
96
40
  - lib/zammad_api/list_search.rb
@@ -116,7 +60,7 @@ metadata:
116
60
  homepage_uri: https://github.com/zammad/zammad-api-client-ruby
117
61
  source_code_uri: https://github.com/zammad/zammad-api-client-ruby
118
62
  changelog_uri: https://github.com/zammad/zammad-api-client-ruby/blob/master/CHANGELOG.md
119
- post_install_message:
63
+ rubygems_mfa_required: 'true'
120
64
  rdoc_options: []
121
65
  require_paths:
122
66
  - lib
@@ -124,15 +68,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
124
68
  requirements:
125
69
  - - ">="
126
70
  - !ruby/object:Gem::Version
127
- version: '0'
71
+ version: '3.0'
128
72
  required_rubygems_version: !ruby/object:Gem::Requirement
129
73
  requirements:
130
74
  - - ">="
131
75
  - !ruby/object:Gem::Version
132
76
  version: '0'
133
77
  requirements: []
134
- rubygems_version: 3.3.26
135
- signing_key:
78
+ rubygems_version: 3.6.9
136
79
  specification_version: 4
137
80
  summary: Zammad API v1.0 client.
138
81
  test_files: []