wotc 0.1.0 → 0.1.10

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: c55912e173441fafde565727cfea98101a699ee28b0f3b949a9949f7730cab2b
4
- data.tar.gz: 69abcb3adee7d97d0832c4a4b6b26d5d316b1940f4bd26bb8b4bfe87c8761664
3
+ metadata.gz: cac8eac181af5b251e56003ba42aacd6e7f8ca376f48178325c0f4349f28a788
4
+ data.tar.gz: c51990906c2d06401afe3a2733433a4e84b7715f3b19c330916f42ef64cb2218
5
5
  SHA512:
6
- metadata.gz: a72f369eb59c4deeeecaf6b6cc5a69cb2420d685745a8edf2a7e2dd38c1710d29b219754c329c445585d4d93052cd5fc4bf530a9ee06060a6a7302e729fd86db
7
- data.tar.gz: a428af1f1dd944dbe1509b86e19c45dd51a0439131e02f13bb8184ca8078884935e2ede71956a26379ca4297183d7cada0a72efe205cf7347e7558233b87fc41
6
+ metadata.gz: f72eb6b6da6b24702f0916776944d4a51977ae11e95ceafade99f9f4a05cb446d3ec4277fad045b0e60374874f06470a26c750edef707d560f7e49d9a14f41fb
7
+ data.tar.gz: 8d30545f71f13374dcde47fe733815baf9324371418f245550b02be3ec9c883a0c1379de899ab679627b2b0525f42f8aa802e447f7481ffe6724f1ec6736e331
data/.travis.yml CHANGED
@@ -4,4 +4,4 @@ language: ruby
4
4
  cache: bundler
5
5
  rvm:
6
6
  - 2.5.3
7
- before_install: gem install bundler -v 1.17.3
7
+ before_install: gem install bundler
data/README.md CHANGED
@@ -1,8 +1,10 @@
1
1
  ![WOTC_logo_header-02](https://user-images.githubusercontent.com/1224077/79107910-d97bc880-7da7-11ea-95a3-40be03be614c.png)
2
2
 
3
+
3
4
  # wotc-ruby-gem
4
5
 
5
- Ruby toolkit for wotc.com API
6
+ Ruby toolkit for wotc.com API [![Build Status](https://secure.travis-ci.org/helloworld1812/wotc-ruby-gem.svg)](http://travis-ci.org/helloworld1812/wotc-ruby-gem)
7
+
6
8
 
7
9
  ## wotc.com REST APIs and documentation
8
10
 
data/Rakefile CHANGED
@@ -1,10 +1,13 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ require 'bundler/setup'
2
+ Bundler::GemHelper.install_tasks
3
3
 
4
- Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
- t.test_files = FileList["test/**/*_test.rb"]
4
+ require 'rspec/core/rake_task'
5
+ desc 'Run the specs'
6
+ RSpec::Core::RakeTask.new do |r|
7
+ r.verbose = false
8
8
  end
9
9
 
10
- task :default => :test
10
+ task :test => :spec
11
+
12
+ # Add rubycop
13
+ task :default => [:spec]
@@ -10,25 +10,21 @@ module FaradayMiddleWare
10
10
  @app.call(env).on_complete do |response|
11
11
  case response.status.to_i
12
12
  when 400
13
- raise WOTC::BadRequest, error_message(env)
13
+ raise WOTC::BadRequest.new(response)
14
+ when 401
15
+ raise WOTC::Unauthorized.new(response)
14
16
  when 404
15
- raise WOTC::NotFound, error_message(env)
17
+ raise WOTC::NotFound.new(response)
16
18
  when 500
17
- raise WOTC::InternalServerError, error_message(env)
19
+ raise WOTC::InternalServerError.new(response)
18
20
  when 502
19
- raise WOTC::BadGateway, error_message(env)
21
+ raise WOTC::BadGateway.new(response)
20
22
  when 503
21
- raise WOTC::ServiceUnavailable, error_message(env)
23
+ raise WOTC::ServiceUnavailable.new(response)
22
24
  when 504
23
- raise WOTC::GatewayTimeout, error_message(env)
25
+ raise WOTC::GatewayTimeout.new(response)
24
26
  end
25
27
  end
26
28
  end
27
-
28
- private
29
-
30
- def error_message(env)
31
- "\nURL: #{env.url}\nmethod: #{env.method} \nstatus: #{env.status}\nerrors: #{env.response.body}"
32
- end
33
29
  end
34
30
  end
@@ -20,6 +20,12 @@ module WOTC
20
20
  put("company/settings?company_id=#{company_id}", options)
21
21
  end
22
22
  end
23
+
24
+ # Get the info of company
25
+ def current_company
26
+ result = get('user').body
27
+ result["company"]
28
+ end
23
29
  end
24
30
  end
25
31
  end
@@ -33,8 +33,15 @@ module WOTC
33
33
  end
34
34
 
35
35
  # Generate an auto fill WOTC url
36
- def employee_auto_fill_wotc_url(employee_id)
37
- get("employees/#{employee_id}/wotc/url")
36
+ def employee_auto_fill_wotc_url(employee_id, redirect=nil)
37
+ uri = URI.parse(redirect) rescue false
38
+ result = if uri.kind_of?(URI::HTTP) || uri.kind_of?(URI::HTTPS)
39
+ get("employees/#{employee_id}/wotc/url?redirect=#{redirect}")
40
+ else
41
+ get("employees/#{employee_id}/wotc/url")
42
+ end
43
+
44
+ return result.body["url"]
38
45
  end
39
46
 
40
47
  # Get employees with certified WOTC status
@@ -3,8 +3,14 @@ module WOTC
3
3
  module Registers
4
4
 
5
5
  # Register for an account and get back a life time access token.
6
- def register(options)
7
- post("register", options)
6
+ def register(options = {})
7
+ response = post("register", options)
8
+ if response.body.is_a?(Hash) && response.body["token"]
9
+ return response
10
+ else
11
+ # raise error when token is missing.
12
+ raise WOTC::BadRequest.new(response)
13
+ end
8
14
  end
9
15
  end
10
16
  end
@@ -0,0 +1,21 @@
1
+ module WOTC
2
+ class Client
3
+ # Defines methods related to utils
4
+ module Utils
5
+
6
+ # Trigger an api call to verify access_token is valid.
7
+ def token_valid?
8
+ user = get('user').body
9
+ return true if user&.fetch("id")
10
+ rescue => e
11
+ return false
12
+ end
13
+
14
+ # Pre-qualify an application of WOTC status
15
+ def wotc_calculator(options={})
16
+ result = post('wotc/calculator', options)
17
+ result.body == true
18
+ end
19
+ end
20
+ end
21
+ end
data/lib/wotc/client.rb CHANGED
@@ -16,5 +16,6 @@ module WOTC
16
16
  include WOTC::Client::Users
17
17
  include WOTC::Client::Registers
18
18
  include WOTC::Client::Wotcs
19
+ include WOTC::Client::Utils
19
20
  end
20
21
  end
@@ -1,4 +1,5 @@
1
1
  require 'faraday'
2
+ require File.expand_path('../version', __FILE__)
2
3
 
3
4
  module WOTC
4
5
  # Defines constants and methods related to configuration
@@ -8,12 +9,15 @@ module WOTC
8
9
  :access_token,
9
10
  :adapter,
10
11
  :connection_options,
12
+ :host,
11
13
  :endpoint,
12
14
  :format,
13
15
  :proxy,
14
16
  :user_agent,
15
17
  :auto_paginate,
16
18
  :per_page,
19
+ :timeout,
20
+ :open_timeout,
17
21
  ].freeze
18
22
 
19
23
  # By default, don't set an access token
@@ -30,12 +34,19 @@ module WOTC
30
34
  # @note The default faraday adapter is Net::HTTP.
31
35
  DEFAULT_ADAPTER = Faraday.default_adapter
32
36
 
33
- # By default, don't set any connection options
37
+ # By default, don't set connection options.
34
38
  DEFAULT_CONNECTION_OPTIONS = {}
35
39
 
40
+ # Default timeout time is 20 seconds
41
+ DEFAULT_TIMEOUT = 20
42
+
43
+ # By default, the open timeout is 20 seconds.
44
+ DEFAULT_OPEN_TIMEOUT = 20
45
+
46
+ # By default, use sandbox environment
47
+ DEFAULT_HOST = 'https://sandbox.wotc.com'.freeze
48
+
36
49
  # The endpoint that will be used to connect if none is set
37
- #
38
- # @note There is no reason to use any other endpoint at this time
39
50
  DEFAULT_ENDPOINT = 'https://sandbox.wotc.com/portal/api/v1/'.freeze
40
51
 
41
52
  # The response format appended to the path and sent in the 'Accept' header if none is set
@@ -77,12 +88,15 @@ module WOTC
77
88
  self.access_token = DEFAULT_ACCESS_TOKEN
78
89
  self.adapter = DEFAULT_ADAPTER
79
90
  self.connection_options = DEFAULT_CONNECTION_OPTIONS
91
+ self.host = DEFAULT_HOST
80
92
  self.endpoint = DEFAULT_ENDPOINT
81
93
  self.format = DEFAULT_FORMAT
82
94
  self.proxy = DEFAULT_PROXY
83
95
  self.user_agent = DEFAULT_USER_AGENT
84
96
  self.auto_paginate = DEFAULT_AUTO_PAGINATE
85
97
  self.per_page = DEFAULT_PER_PAGE
98
+ self.timeout = DEFAULT_TIMEOUT
99
+ self.open_timeout = DEFAULT_OPEN_TIMEOUT
86
100
  end
87
101
  end
88
102
  end
@@ -18,6 +18,9 @@ module WOTC
18
18
 
19
19
  Faraday::Connection.new(options) do |conn|
20
20
  conn.authorization :Bearer, access_token
21
+ # https://github.com/lostisland/faraday/issues/417#issuecomment-223413386
22
+ conn.options[:timeout] = timeout
23
+ conn.options[:open_timeout] = open_timeout
21
24
  conn.request :json
22
25
 
23
26
  conn.use FaradayMiddleWare::RaiseHttpException
data/lib/wotc/error.rb CHANGED
@@ -1,10 +1,49 @@
1
1
  module WOTC
2
2
  # Custom error class for rescuing from all wotc.com errors
3
- class Error < StandardError; end
3
+ class Error < StandardError
4
+ attr_reader :http_method, :url, :errors
5
+
6
+ def initialize(response)
7
+ super
8
+ @response = response.dup
9
+ @http_method = response.method.to_s
10
+ @url = response.url
11
+ if response.body.is_a?(Hash) && !response.body.empty? && !response.body.fetch("errors", nil).nil?
12
+ @raw_errors = response.body.fetch("errors")
13
+ end
14
+ end
15
+
16
+ def message
17
+ <<-HEREDOC
18
+ URL: #{@response.url}
19
+ method: #{@response.method}
20
+ response status: #{@response.status}
21
+ response body: #{@response.response.body}
22
+ HEREDOC
23
+ end
24
+
25
+ def raw_errors
26
+ @raw_errors
27
+ end
28
+
29
+ def error_sentence
30
+ return if @raw_errors.nil?
31
+
32
+ array = []
33
+ @raw_errors.each do |_, v|
34
+ array += v
35
+ end
36
+
37
+ array.join(' ')
38
+ end
39
+ end
4
40
 
5
41
  # Raised when wotc.com returns the HTTP status code 400
6
42
  class BadRequest < Error; end
7
43
 
44
+ # Raised when wotc.com returns the HTTP status code 401
45
+ class Unauthorized < Error; end
46
+
8
47
  # Raised when wotc.com returns the HTTP status code 404
9
48
  class NotFound < Error; end
10
49
 
data/lib/wotc/request.rb CHANGED
@@ -38,10 +38,10 @@ module WOTC
38
38
 
39
39
  # return all results when enabled auto paginate
40
40
  last_response = response.dup
41
- data = response["data"]
42
- while last_response["next_page_url"]
43
- last_response = get(last_response["next_page_url"] + "&per_page=#{per_page}")
44
- data.concat(last_response["data"]) if last_response["data"].is_a?(Array)
41
+ data = response.body["data"]
42
+ while last_response.body["next_page_url"]
43
+ last_response = get(last_response.body["next_page_url"])
44
+ data.concat(last_response.body["data"]) if last_response.body["data"].is_a?(Array)
45
45
  end
46
46
 
47
47
  return data
@@ -51,14 +51,14 @@ module WOTC
51
51
  response = connection.send(method) do |request|
52
52
  case method
53
53
  when :get, :delete
54
- request.url(URI.encode(path), options)
54
+ request.url(Addressable::URI.escape(path), options)
55
55
  when :post, :put
56
- request.path = URI.encode(path)
56
+ request.path = Addressable::URI.escape(path)
57
57
  request.body = options
58
58
  end
59
59
  end
60
60
 
61
- return response.body
61
+ response
62
62
  end
63
63
  end
64
- end
64
+ end
data/lib/wotc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module WOTC
2
- VERSION = "0.1.0"
2
+ VERSION = '0.1.10'
3
3
  end
data/wotc.gemspec CHANGED
@@ -35,11 +35,12 @@ Gem::Specification.new do |spec|
35
35
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
36
36
  spec.require_paths = ["lib"]
37
37
 
38
- spec.add_development_dependency "bundler", "~> 1.17"
39
- spec.add_development_dependency "rake", "~> 10.0"
40
- spec.add_development_dependency "rspec", "~> 3.9.0"
38
+ spec.add_development_dependency "bundler", ">= 1.17"
39
+ spec.add_development_dependency "rake", ">= 12.3.3"
40
+ spec.add_development_dependency "rspec", ">= 3.9.0"
41
41
  spec.add_development_dependency "pry"
42
42
  spec.add_development_dependency "webmock"
43
43
  spec.add_runtime_dependency 'faraday'
44
44
  spec.add_runtime_dependency 'faraday_middleware'
45
+ spec.add_runtime_dependency 'addressable'
45
46
  end
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wotc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - workstream.us
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-13 00:00:00.000000000 Z
11
+ date: 2022-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.17'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.17'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: 12.3.3
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: 12.3.3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: 3.9.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: 3.9.0
55
55
  - !ruby/object:Gem::Dependency
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: addressable
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  description: An Ruby wrapper for wotc.com REST APIs
112
126
  email:
113
127
  - ryan@workstream.is
@@ -138,6 +152,7 @@ files:
138
152
  - lib/wotc/client/payrolls.rb
139
153
  - lib/wotc/client/registers.rb
140
154
  - lib/wotc/client/users.rb
155
+ - lib/wotc/client/utils.rb
141
156
  - lib/wotc/client/webhooks.rb
142
157
  - lib/wotc/client/wotcs.rb
143
158
  - lib/wotc/configuration.rb
@@ -168,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
183
  - !ruby/object:Gem::Version
169
184
  version: '0'
170
185
  requirements: []
171
- rubygems_version: 3.0.6
186
+ rubygems_version: 3.1.6
172
187
  signing_key:
173
188
  specification_version: 4
174
189
  summary: Ruby wrapper for wotc.com APIs