paperdrive 0.0.5

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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +18 -0
  5. data/.travis.yml +9 -0
  6. data/CHANGELOG.md +29 -0
  7. data/Gemfile +8 -0
  8. data/Gemfile.lock +75 -0
  9. data/README.md +120 -0
  10. data/Rakefile +8 -0
  11. data/bin/console +15 -0
  12. data/bin/setup +8 -0
  13. data/lib/paperdrive/client/activities.rb +92 -0
  14. data/lib/paperdrive/client/activity_fields.rb +36 -0
  15. data/lib/paperdrive/client/activity_types.rb +77 -0
  16. data/lib/paperdrive/client/currencies.rb +26 -0
  17. data/lib/paperdrive/client/deal_fields.rb +87 -0
  18. data/lib/paperdrive/client/deals.rb +335 -0
  19. data/lib/paperdrive/client/filters.rb +87 -0
  20. data/lib/paperdrive/client/global_messages.rb +38 -0
  21. data/lib/paperdrive/client/mail_messages.rb +26 -0
  22. data/lib/paperdrive/client/mail_threads.rb +75 -0
  23. data/lib/paperdrive/client/note_fields.rb +25 -0
  24. data/lib/paperdrive/client/notes.rb +74 -0
  25. data/lib/paperdrive/client/organization_fields.rb +87 -0
  26. data/lib/paperdrive/client/organization_relationships.rb +75 -0
  27. data/lib/paperdrive/client/organizations.rb +233 -0
  28. data/lib/paperdrive/client/permission_sets.rb +89 -0
  29. data/lib/paperdrive/client/person_fields.rb +87 -0
  30. data/lib/paperdrive/client/persons.rb +258 -0
  31. data/lib/paperdrive/client/pipelines.rb +111 -0
  32. data/lib/paperdrive/client/product_fields.rb +87 -0
  33. data/lib/paperdrive/client/products.rb +160 -0
  34. data/lib/paperdrive/client/recents.rb +27 -0
  35. data/lib/paperdrive/client/roles.rb +149 -0
  36. data/lib/paperdrive/client/search_results.rb +39 -0
  37. data/lib/paperdrive/client/stages.rb +98 -0
  38. data/lib/paperdrive/client/user_connections.rb +26 -0
  39. data/lib/paperdrive/client/user_settings.rb +26 -0
  40. data/lib/paperdrive/client/users.rb +235 -0
  41. data/lib/paperdrive/client/webhooks.rb +50 -0
  42. data/lib/paperdrive/client.rb +122 -0
  43. data/lib/paperdrive/error.rb +42 -0
  44. data/lib/paperdrive/parameters.rb +34 -0
  45. data/lib/paperdrive/response.rb +42 -0
  46. data/lib/paperdrive/version.rb +6 -0
  47. data/lib/paperdrive.rb +7 -0
  48. data/paperdrive.gemspec +33 -0
  49. metadata +203 -0
@@ -0,0 +1,122 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support'
4
+ require 'active_support/core_ext'
5
+ require 'faraday'
6
+ require 'faraday_middleware'
7
+ require 'paperdrive/error'
8
+ require 'paperdrive/parameters'
9
+ require 'paperdrive/response'
10
+ require 'paperdrive/client/activities'
11
+ require 'paperdrive/client/activity_fields'
12
+ require 'paperdrive/client/activity_types'
13
+ require 'paperdrive/client/currencies'
14
+ require 'paperdrive/client/deals'
15
+ require 'paperdrive/client/deal_fields'
16
+ require 'paperdrive/client/filters'
17
+ require 'paperdrive/client/global_messages'
18
+ require 'paperdrive/client/mail_messages'
19
+ require 'paperdrive/client/mail_threads'
20
+ require 'paperdrive/client/notes'
21
+ require 'paperdrive/client/note_fields'
22
+ require 'paperdrive/client/organizations'
23
+ require 'paperdrive/client/organization_fields'
24
+ require 'paperdrive/client/organization_relationships'
25
+ require 'paperdrive/client/permission_sets'
26
+ require 'paperdrive/client/persons'
27
+ require 'paperdrive/client/person_fields'
28
+ require 'paperdrive/client/pipelines'
29
+ require 'paperdrive/client/product_fields'
30
+ require 'paperdrive/client/products'
31
+ require 'paperdrive/client/recents'
32
+ require 'paperdrive/client/roles'
33
+ require 'paperdrive/client/search_results'
34
+ require 'paperdrive/client/stages'
35
+ require 'paperdrive/client/users'
36
+ require 'paperdrive/client/user_connections'
37
+ require 'paperdrive/client/user_settings'
38
+ require 'paperdrive/client/webhooks'
39
+
40
+ module Paperdrive
41
+ # Client to aceess API
42
+ class Client
43
+ include Paperdrive::Client::Activities
44
+ include Paperdrive::Client::ActivityFields
45
+ include Paperdrive::Client::ActivityTypes
46
+ include Paperdrive::Client::Currencies
47
+ include Paperdrive::Client::Deals
48
+ include Paperdrive::Client::DealFields
49
+ include Paperdrive::Client::Filters
50
+ include Paperdrive::Client::GlobalMessages
51
+ include Paperdrive::Client::MailMessages
52
+ include Paperdrive::Client::MailThreads
53
+ include Paperdrive::Client::Notes
54
+ include Paperdrive::Client::NoteFields
55
+ include Paperdrive::Client::Organizations
56
+ include Paperdrive::Client::OrganizationFields
57
+ include Paperdrive::Client::OrganizationRelationships
58
+ include Paperdrive::Client::PermissionSets
59
+ include Paperdrive::Client::Persons
60
+ include Paperdrive::Client::PersonFields
61
+ include Paperdrive::Client::Pipelines
62
+ include Paperdrive::Client::ProductFields
63
+ include Paperdrive::Client::Products
64
+ include Paperdrive::Client::Recents
65
+ include Paperdrive::Client::Roles
66
+ include Paperdrive::Client::SearchResults
67
+ include Paperdrive::Client::Stages
68
+ include Paperdrive::Client::Users
69
+ include Paperdrive::Client::UserConnections
70
+ include Paperdrive::Client::UserSettings
71
+ include Paperdrive::Client::Webhooks
72
+
73
+ API_BASEURL = 'https://api.pipedrive.com/v1'
74
+
75
+ # build instances by<br>
76
+ # using arguments: pass the token as `token:`<br>
77
+ # or using environment variables: set the token to ENV['PAPERDRIVE_TOKEN']
78
+ #
79
+ # @param [String] token: Paperdrive API access token
80
+ # @return [Paperdrive::Client] instance
81
+ def initialize(token: nil)
82
+ token ||= ENV['PAPERDRIVE_TOKEN']
83
+ raise Paperdrive::AuthTokenNotSpecified unless token || token.is_a?(String)
84
+
85
+ @token = token
86
+ end
87
+
88
+ # masking tokens to prevent casually displaying tokens
89
+ #
90
+ # @return [String] inspected and token masked string
91
+ def inspect
92
+ inspected = super
93
+ inspected.gsub!(@token, 'MASKED_TOKEN') if @token
94
+ end
95
+
96
+ protected
97
+
98
+ # make crud request
99
+ def request(method, path, params)
100
+ raise Paperdrive::InvalidRequestMethod unless %i[get post put delete].include?(method.to_sym)
101
+
102
+ raw_response = connection.send(method, build_path(path), params)
103
+ Paperdrive::Response.new(raw_response)
104
+ end
105
+
106
+ private
107
+
108
+ # memonize Faraday connection
109
+ def connection
110
+ @connection ||= Faraday.new(url: API_BASEURL) do |faraday|
111
+ faraday.request :json
112
+ faraday.response :logger
113
+ faraday.adapter Faraday.default_adapter
114
+ end
115
+ end
116
+
117
+ # build path which has `api_token:` query param
118
+ def build_path(path)
119
+ "#{path}?#{{ api_token: @token }.to_query}"
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Paperdrive
4
+ # Error Class
5
+ class Error < StandardError
6
+ class << self
7
+ # raise errors which corresponding to response status code
8
+ #
9
+ # @param [Paperdrive::Client] response
10
+ def raise_from(response)
11
+ status = response.status
12
+ return if (200..299).cover?(status)
13
+
14
+ klass = case status
15
+ when 400 then Paperdrive::BadRequest
16
+ when 401 then Paperdrive::Unauthorized
17
+ when 429 then Paperdrive::RateLimitExceeded
18
+ when 400..499 then Paperdrive::ClientError
19
+ when 500 then Paperdrive::InternalServerError
20
+ when 500..599 then Paperdrive::ServerError
21
+ else Paperdrive::UnknownError
22
+ end
23
+ raise klass, "#{status}-#{response&.reason_phrase}"
24
+ end
25
+ end
26
+ end
27
+
28
+ # response-relateds
29
+ class ClientError < Error; end
30
+ class BadRequest < ClientError; end
31
+ class Unautorized < ClientError; end
32
+ class RateLimitExceeded < ClientError; end
33
+ class ServerError < Error; end
34
+ class InternalServerError < ServerError; end
35
+ class UnknownError < Error; end
36
+
37
+ # others
38
+ class AuthTokenNotSpecified < Error; end
39
+ class InvalidRequiredParameters < Error; end
40
+ class MissingRequiredParameters < Error; end
41
+ class InvalidRequestMethod < Error; end
42
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support'
4
+ require 'active_support/core_ext'
5
+ require 'paperdrive/error'
6
+
7
+ module Paperdrive
8
+ # Module which has methods to define parameters to submit with request
9
+ module Parameters
10
+ protected
11
+
12
+ def parameters(params, &_block)
13
+ @params = params.symbolize_keys
14
+ yield if block_given?
15
+ @params
16
+ end
17
+
18
+ # set required parameters and raise errors if there are lack of params
19
+ def required_params(*args)
20
+ raise InvalidRequiredParameters unless args.all? { |arg| arg.is_a?(Symbol) }
21
+ raise MissingRequiredParameters unless args.all? { |arg| !@params[arg].nil? }
22
+ end
23
+
24
+ # set optional(possible) parameters and output redundant parameters to stdout
25
+ def optional_params(*args)
26
+ raise InvalidRequiredParameters unless args.all? { |arg| arg.is_a?(Symbol) }
27
+
28
+ @params.keys.each do |key|
29
+ puts ":#{key} is unused parameter." unless args.include?(key)
30
+ end
31
+ @params.slice!(*args)
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'paperdrive/error'
4
+
5
+ module Paperdrive
6
+ # Wrapper class of the Faraday::Response.
7
+ class Response
8
+ attr_accessor :header, :ratelimit, :body, :status_code, :status_phrase
9
+
10
+ # build instance from Faraday::Response
11
+ #
12
+ # @param [Faraday::Response] response
13
+ def initialize(response)
14
+ Paperdrive::Error.raise_from(response)
15
+ @header = response.headers.to_h
16
+ @ratelimit = build_ratelimit(@header)
17
+ @body = JSON.parse(response.body)
18
+ @status_code = response.status
19
+ @status_phrase = response.reason_phrase
20
+ end
21
+
22
+ # return whether the request was successfully processed or not
23
+ #
24
+ # @param [boolean]
25
+ def success?
26
+ !!@body['success']
27
+ end
28
+
29
+ private
30
+
31
+ # build Struct of rate limit information from Faraday::Utils::Headers
32
+ #
33
+ # @param [Faraday::Utils::Headers] header response header
34
+ # @return [Struct<integer>] which has :limit :remain :reset
35
+ def build_ratelimit(header)
36
+ Struct.new(:limit, :remain, :reset)
37
+ .new(header['x-ratelimit-limit'].to_i,
38
+ header['x-ratelimit-remaining'].to_i,
39
+ header['x-ratelimit-reset'].to_i)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Version Module
4
+ module Paperdrive
5
+ VERSION = '0.0.5'
6
+ end
data/lib/paperdrive.rb ADDED
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'paperdrive/version'
4
+ require 'paperdrive/client'
5
+
6
+ module Paperdrive
7
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'paperdrive/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'paperdrive'
9
+ spec.version = Paperdrive::VERSION
10
+ spec.authors = %w[rnitta]
11
+ spec.email = ['attinyes@gmail.com']
12
+
13
+ spec.summary = 'Unofficial Pipedrive API wrapper gem'
14
+ spec.description = 'Unofficial Ruby wrapper for the Pipedrive API'
15
+ spec.homepage = 'https://github.com/rnitta/paperdrive'
16
+ spec.license = 'MIT'
17
+
18
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
+ f.match(%r{^(test|spec|features)/})
20
+ end
21
+ spec.bindir = 'exe'
22
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.require_paths = %w[lib]
24
+
25
+ spec.add_dependency 'activesupport'
26
+ spec.add_dependency 'faraday', '~> 0.15.4'
27
+ spec.add_dependency 'faraday_middleware', '~> 0.12.2'
28
+ spec.add_development_dependency 'bundler', '~> 1.16'
29
+ spec.add_development_dependency 'rake', '~> 10.0'
30
+ spec.add_development_dependency 'rspec', '~> 3.0'
31
+ spec.add_development_dependency 'rubocop', '~> 0.62.0'
32
+ spec.add_development_dependency 'yard'
33
+ end
metadata ADDED
@@ -0,0 +1,203 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: paperdrive
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - rnitta
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-01-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.15.4
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.15.4
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday_middleware
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.12.2
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.12.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.16'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.16'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.62.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.62.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: yard
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: Unofficial Ruby wrapper for the Pipedrive API
126
+ email:
127
+ - attinyes@gmail.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".gitignore"
133
+ - ".rspec"
134
+ - ".rubocop.yml"
135
+ - ".travis.yml"
136
+ - CHANGELOG.md
137
+ - Gemfile
138
+ - Gemfile.lock
139
+ - README.md
140
+ - Rakefile
141
+ - bin/console
142
+ - bin/setup
143
+ - lib/paperdrive.rb
144
+ - lib/paperdrive/client.rb
145
+ - lib/paperdrive/client/activities.rb
146
+ - lib/paperdrive/client/activity_fields.rb
147
+ - lib/paperdrive/client/activity_types.rb
148
+ - lib/paperdrive/client/currencies.rb
149
+ - lib/paperdrive/client/deal_fields.rb
150
+ - lib/paperdrive/client/deals.rb
151
+ - lib/paperdrive/client/filters.rb
152
+ - lib/paperdrive/client/global_messages.rb
153
+ - lib/paperdrive/client/mail_messages.rb
154
+ - lib/paperdrive/client/mail_threads.rb
155
+ - lib/paperdrive/client/note_fields.rb
156
+ - lib/paperdrive/client/notes.rb
157
+ - lib/paperdrive/client/organization_fields.rb
158
+ - lib/paperdrive/client/organization_relationships.rb
159
+ - lib/paperdrive/client/organizations.rb
160
+ - lib/paperdrive/client/permission_sets.rb
161
+ - lib/paperdrive/client/person_fields.rb
162
+ - lib/paperdrive/client/persons.rb
163
+ - lib/paperdrive/client/pipelines.rb
164
+ - lib/paperdrive/client/product_fields.rb
165
+ - lib/paperdrive/client/products.rb
166
+ - lib/paperdrive/client/recents.rb
167
+ - lib/paperdrive/client/roles.rb
168
+ - lib/paperdrive/client/search_results.rb
169
+ - lib/paperdrive/client/stages.rb
170
+ - lib/paperdrive/client/user_connections.rb
171
+ - lib/paperdrive/client/user_settings.rb
172
+ - lib/paperdrive/client/users.rb
173
+ - lib/paperdrive/client/webhooks.rb
174
+ - lib/paperdrive/error.rb
175
+ - lib/paperdrive/parameters.rb
176
+ - lib/paperdrive/response.rb
177
+ - lib/paperdrive/version.rb
178
+ - paperdrive.gemspec
179
+ homepage: https://github.com/rnitta/paperdrive
180
+ licenses:
181
+ - MIT
182
+ metadata: {}
183
+ post_install_message:
184
+ rdoc_options: []
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ requirements: []
198
+ rubyforge_project:
199
+ rubygems_version: 2.7.6
200
+ signing_key:
201
+ specification_version: 4
202
+ summary: Unofficial Pipedrive API wrapper gem
203
+ test_files: []