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

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#authorizationObject (readonly)

Returns the value of attribute authorization.



35
36
37
# File 'lib/paychex_api/client.rb', line 35

def authorization
  @authorization
end

Instance Method Details

#authorizeObject



60
61
62
63
64
65
66
67
68
69
# File 'lib/paychex_api/client.rb', line 60

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



146
147
148
149
150
# File 'lib/paychex_api/client.rb', line 146

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

#faraday_authObject



140
141
142
143
144
# File 'lib/paychex_api/client.rb', line 140

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

#faraday_auth_config(faraday) ⇒ Object



130
131
132
133
134
135
136
137
138
# File 'lib/paychex_api/client.rb', line 130

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



90
91
92
93
94
# File 'lib/paychex_api/client.rb', line 90

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

#faraday_auth_request(faraday) ⇒ Object



84
85
86
87
88
# File 'lib/paychex_api/client.rb', line 84

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

#faraday_config(faraday) ⇒ Object



120
121
122
123
124
125
126
127
128
# File 'lib/paychex_api/client.rb', line 120

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



96
97
98
99
# File 'lib/paychex_api/client.rb', line 96

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

#faraday_default_request(faraday) ⇒ Object



101
102
103
104
# File 'lib/paychex_api/client.rb', line 101

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

#faraday_default_use(faraday) ⇒ Object



76
77
78
79
80
81
82
# File 'lib/paychex_api/client.rb', line 76

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



106
107
108
109
110
111
112
113
# File 'lib/paychex_api/client.rb', line 106

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



115
116
117
118
# File 'lib/paychex_api/client.rb', line 115

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

#refresh_token!Object



54
55
56
57
58
# File 'lib/paychex_api/client.rb', line 54

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

#request(method, &block) ⇒ Object

Override Footrest request for ApiArray support



43
44
45
46
# File 'lib/paychex_api/client.rb', line 43

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

#set_connection(config) ⇒ Object



71
72
73
74
# File 'lib/paychex_api/client.rb', line 71

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

#tokenObject



48
49
50
51
52
# File 'lib/paychex_api/client.rb', line 48

def token
  return config[:token] if config[:token].present?
  authorize if @authorization.blank? || @authorization['expiration'] <= Time.now - 30.seconds
  @authorization['access_token']
end