Class: PaychexAPI::Client

Inherits:
Footrest::Client
  • Object
show all
Defined in:
lib/paychex_api/client.rb,
lib/paychex_api/client/users.rb,
lib/paychex_api/client/workers.rb,
lib/paychex_api/client/messages.rb,
lib/paychex_api/client/statuses.rb,
lib/paychex_api/client/companies.rb,
lib/paychex_api/client/purchases.rb,
lib/paychex_api/client/associations.rb,
lib/paychex_api/client/notifications.rb

Defined Under Namespace

Modules: Associations, Companies, Messages, Notifications, Purchases, Statuses, Users, Workers

Constant Summary collapse

API_PATH =
''.freeze
STATUS_PATH =
'/status'.freeze
COMPANIES_PATH =
'/companies'.freeze
ASSOCIATIONS_PATH =
'/'.freeze
ORGANIZATIONS_PATH =
'/organizations'.freeze
JOB_TITLES_PATH =
'/jobtitles'.freeze
WORKER_STATUSES_PATH =
'/workerstatuses'.freeze
MESSAGES_PATH =
'/messages'.freeze
NOTIFICATIONS_PATH =
'/notifications'.freeze
WORKERS_PATH =
'/workers'.freeze
COMMUNICATIONS_PATH =
'/communications'.freeze
COMPENSATION_PATH =
'/compensation'.freeze
DIRECT_DEPOSITS_PATH =
'/directdeposits'.freeze
PAY_PERIODS_PATH =
'/payperiods'.freeze
PAY_COMPONENTS_PATH =
'/paycomponents'.freeze
CHECKS_PATH =
'/checks'.freeze
OAUTH_TOKEN_PATH =
'/auth/oauth/v2/token'.freeze
USERS_PATH =
'/users'.freeze
PURCHASES_PATH =
'/purchases'.freeze
LOCATIONS_PATH =
'/locations'.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#authorizationObject (readonly)

Returns the value of attribute authorization.



37
38
39
# File 'lib/paychex_api/client.rb', line 37

def authorization
  @authorization
end

Instance Method Details

#authorizeObject



63
64
65
66
67
68
69
70
71
72
# File 'lib/paychex_api/client.rb', line 63

def authorize
  response = faraday_auth.post(
    OAUTH_TOKEN_PATH,
    client_id: config[:client_id],
    client_secret: config[:client_secret],
    grant_type: 'client_credentials'
  )
  @authorization = response.body
  @authorization['expiration'] = Time.now + @authorization['expires_in'].to_i.seconds
end

#default_faradayObject



149
150
151
152
153
# File 'lib/paychex_api/client.rb', line 149

def default_faraday
  Faraday.new(url: config[:prefix]) do |faraday|
    faraday_config(faraday)
  end
end

#faraday_authObject



143
144
145
146
147
# File 'lib/paychex_api/client.rb', line 143

def faraday_auth
  Faraday.new(url: config[:prefix]) do |faraday|
    faraday_auth_config(faraday)
  end
end

#faraday_auth_config(faraday) ⇒ Object



133
134
135
136
137
138
139
140
141
# File 'lib/paychex_api/client.rb', line 133

def faraday_auth_config(faraday)
  faraday = faraday_logger(faraday)
  faraday = faraday_auth_request(faraday)
  faraday = faraday_default_use(faraday)
  faraday = faraday_auth_headers(faraday)
  faraday = faraday_proxy(faraday)
  faraday.adapter Faraday.default_adapter
  faraday
end

#faraday_auth_headers(faraday) ⇒ Object



93
94
95
96
97
# File 'lib/paychex_api/client.rb', line 93

def faraday_auth_headers(faraday)
  faraday.headers[:accept]          = 'application/json'
  faraday.headers[:user_agent]      = 'Footrest'
  faraday
end

#faraday_auth_request(faraday) ⇒ Object



87
88
89
90
91
# File 'lib/paychex_api/client.rb', line 87

def faraday_auth_request(faraday)
  faraday.request :multipart
  faraday.request :url_encoded
  faraday
end

#faraday_config(faraday) ⇒ Object



123
124
125
126
127
128
129
130
131
# File 'lib/paychex_api/client.rb', line 123

def faraday_config(faraday)
  faraday = faraday_logger(faraday)
  faraday = faraday_default_request(faraday)
  faraday = faraday_default_use(faraday)
  faraday = faraday_default_headers(faraday)
  faraday = faraday_proxy(faraday)
  faraday.adapter Faraday.default_adapter
  faraday
end

#faraday_default_headers(faraday) ⇒ Object



99
100
101
102
# File 'lib/paychex_api/client.rb', line 99

def faraday_default_headers(faraday)
  faraday.headers['Content-Type'] = 'application/json'
  faraday
end

#faraday_default_request(faraday) ⇒ Object



104
105
106
107
# File 'lib/paychex_api/client.rb', line 104

def faraday_default_request(faraday)
  faraday.request :json
  faraday
end

#faraday_default_use(faraday) ⇒ Object



79
80
81
82
83
84
85
# File 'lib/paychex_api/client.rb', line 79

def faraday_default_use(faraday)
  faraday.use Footrest::ParseJson, content_type: /\bjson$/
  faraday.use Footrest::RaiseFootrestErrors
  faraday.use Footrest::Pagination
  faraday.use Footrest::FollowRedirects, limit: 5 if config[:follow_redirects]
  faraday
end

#faraday_logger(faraday) ⇒ Object



109
110
111
112
113
114
115
116
# File 'lib/paychex_api/client.rb', line 109

def faraday_logger(faraday)
  if config[:logger] == true
    faraday.response :logger
  elsif config[:logger]
    faraday.use Faraday::Response::Logger, config[:logger]
  end
  faraday
end

#faraday_proxy(faraday) ⇒ Object



118
119
120
121
# File 'lib/paychex_api/client.rb', line 118

def faraday_proxy(faraday)
  faraday.proxy PaychexAPI.proxy if PaychexAPI.proxy
  faraday
end

#refresh_token!Object



57
58
59
60
61
# File 'lib/paychex_api/client.rb', line 57

def refresh_token!
  config.delete(:token)
  authorize
  connection.headers[:authorization] = "Bearer #{token}"
end

#request(method, &block) ⇒ Object

Override Footrest request for ApiArray support



45
46
47
48
# File 'lib/paychex_api/client.rb', line 45

def request(method, &block)
  connection.headers[:authorization] = "Bearer #{token}"
  ApiArray.process_response(connection.send(method, &block), self)
end

#set_connection(config) ⇒ Object



74
75
76
77
# File 'lib/paychex_api/client.rb', line 74

def set_connection(config)
  config[:logger] = config[:logging] if config[:logging]
  @connection = default_faraday
end

#tokenObject



50
51
52
53
54
55
# File 'lib/paychex_api/client.rb', line 50

def token
  return config[:token] if config[:token].present?

  authorize if @authorization.blank? || @authorization['expiration'] <= Time.now - 30.seconds
  @authorization['access_token']
end