openapply 0.2.1 → 0.2.2
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 +4 -4
- data/README.md +13 -12
- data/lib/openapply.rb +2 -125
- data/lib/openapply/client.rb +118 -0
- data/lib/openapply/convert.rb +3 -0
- data/lib/openapply/get_student.rb +3 -4
- data/lib/openapply/get_students.rb +3 -0
- data/lib/openapply/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ea03a8e3bcfc34624d8c592e83d579600f62e323f00b5fbd563b3ef1b22616b
|
4
|
+
data.tar.gz: 915c89ae39776eb48b0d0533f6ba63b496cad6efb83ffa83d6f9f62ddfad983b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 860ecaf7e6d4ad6255edd1785f30c8e51b1dfee12de0747efa78c264d71e2f39983ae46ef31938785455ed0822ef23fc5f946ebf2d0eb950f1cb03e803466afc
|
7
|
+
data.tar.gz: 926f34f47b262ac63786edafbdbd62af3dc7ba3b786d36a26d9180c3404d2f907f74e7ec18247a2a150897eb3bc6e2d97f3fd108faaf0aea1b72ab18aba98723
|
data/README.md
CHANGED
@@ -5,29 +5,30 @@ This gem allows ruby access to the OpenApply API v1 - and supports the GET featu
|
|
5
5
|
|
6
6
|
### Still TODO
|
7
7
|
|
8
|
-
* xlsx export?
|
9
|
-
* test timeouts
|
10
8
|
* write PUTS methods
|
11
|
-
* write a recursive query
|
12
|
-
*
|
13
|
-
*
|
14
|
-
* write a recursive query to pull students by since id (sort of already done)
|
9
|
+
* write a recursive custom query
|
10
|
+
* speed response when returning large number of records
|
11
|
+
* allow flattening and reject to work at any depth (recursion?)
|
15
12
|
|
16
13
|
|
17
14
|
### CHANGE LOG
|
18
15
|
|
19
|
-
* **v0.
|
20
|
-
|
21
|
-
|
22
|
-
- get student details of a give status (and pure api calls)
|
23
|
-
- recursive query until all receipt of all records received
|
16
|
+
* **v0.2.2** - update compatible with 0.2.x - 2017-11-21
|
17
|
+
- refactor and test url timeouts
|
18
|
+
- refactor openapply client
|
24
19
|
|
25
|
-
* **v0.2.1** - update compatible with 0.2.
|
20
|
+
* **v0.2.1** - update compatible with 0.2.x - 2017-11-20
|
26
21
|
- convert api data into an array, csv or xlsx
|
27
22
|
- allow data flattening prep for post processing
|
28
23
|
- allow queries to lookup students with multiple statuses
|
29
24
|
- allow scp string object to file export (no automated tests)
|
30
25
|
|
26
|
+
* **v0.2.0** - first release -- **NOT** compatible with 0.1.0 -- 2017-11-07
|
27
|
+
- get student details of a give status (and pure api calls)
|
28
|
+
- recursive query until all receipt of all records received
|
29
|
+
|
30
|
+
* **v0.1.0** - test release -- 2017-11-01
|
31
|
+
|
31
32
|
### Installation
|
32
33
|
|
33
34
|
Add this line to your application's Gemfile:
|
data/lib/openapply.rb
CHANGED
@@ -1,129 +1,6 @@
|
|
1
|
-
require "openapply/
|
2
|
-
require "openapply/get_student"
|
3
|
-
require "openapply/convert"
|
1
|
+
require "openapply/client"
|
4
2
|
require "openapply/version"
|
5
|
-
require "openapply/put"
|
6
|
-
require 'httparty'
|
7
3
|
|
8
4
|
module Openapply
|
9
5
|
|
10
|
-
|
11
|
-
# this gem allows access to OpenApply API calls via HTTParty
|
12
|
-
#
|
13
|
-
class Client
|
14
|
-
|
15
|
-
# PUT api calls
|
16
|
-
include Put
|
17
|
-
|
18
|
-
# GET api calls
|
19
|
-
include Get
|
20
|
-
|
21
|
-
# Convert student data to various formats
|
22
|
-
include Convert
|
23
|
-
|
24
|
-
# Library for API calls to OpenApply
|
25
|
-
include HTTParty
|
26
|
-
|
27
|
-
# Defines OpenApply domain name from ENV-VARS
|
28
|
-
API_URL = (ENV['OA_BASE_URI'] || 'demo.openapply.com')
|
29
|
-
|
30
|
-
# Defines the OpenApply path from ENV-VARS - default is 5 seconds
|
31
|
-
API_TIMEOUT = (ENV['OA_TIMEOUT'].to_i || 5)
|
32
|
-
|
33
|
-
base_uri API_URL
|
34
|
-
default_timeout API_TIMEOUT
|
35
|
-
|
36
|
-
# Defines OpenApply domain name from ENV-VARS - for example:
|
37
|
-
# demo.openapply.com
|
38
|
-
def api_url
|
39
|
-
API_URL
|
40
|
-
end
|
41
|
-
|
42
|
-
# Defines http timeout from ENV-VARS - 5 sec is the default
|
43
|
-
def api_reply_count
|
44
|
-
API_TIMEOUT
|
45
|
-
end
|
46
|
-
alias_method :api_timeout, :api_reply_count
|
47
|
-
|
48
|
-
# Defines OpenApply secret access key with ENV-VARS
|
49
|
-
def api_key
|
50
|
-
ENV['OA_AUTH_TOKEN'] || 'demo_site_api_key'
|
51
|
-
end
|
52
|
-
|
53
|
-
# Defines the OpenApply path with ENV-VARS - default is for api_v1
|
54
|
-
# /api/v1/students/
|
55
|
-
def api_path
|
56
|
-
ENV['OA_API_PATH'] || "/api/v1/students/"
|
57
|
-
end
|
58
|
-
|
59
|
-
# Defines the maximum records OpenApply should return with each api call
|
60
|
-
# with ENV-VARS - (code default is 50 - OA default is 10 - doc says 100)
|
61
|
-
def api_records
|
62
|
-
ENV['OA_REPLY_RECORDS'] || '50'
|
63
|
-
end
|
64
|
-
|
65
|
-
# Handles httparty timeout errors - tries 3x before quitting
|
66
|
-
# https://stackoverflow.com/questions/26251422/handling-netreadtimeout-error-in-httparty
|
67
|
-
# TODO: figure out how to test time outs
|
68
|
-
def handle_timeouts
|
69
|
-
max_retries = 3
|
70
|
-
times_retried = 0
|
71
|
-
begin
|
72
|
-
yield
|
73
|
-
rescue Net::ReadTimeout => error
|
74
|
-
if times_retried < max_retries
|
75
|
-
times_retried += 1
|
76
|
-
# puts "TIMEOUT RETRY: #{times_retried} of #{max_retries} - USING: #{yield.inspect}"
|
77
|
-
retry
|
78
|
-
else
|
79
|
-
# puts "TIME-OUT URI FAILED: #{yield.inspect}"
|
80
|
-
{ error: "SITE TIMEOUT - 3 FAILURES USING: #{yield.inspect}" }
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
# Does the actual api call to OpenApply
|
86
|
-
#
|
87
|
-
# ==== Attributes
|
88
|
-
# * +url+ - this is the url to do the call
|
89
|
-
# /api/v1/students/95?auth_token=demo_site_api_key
|
90
|
-
# is the url passed when wanting to do the following cli api call
|
91
|
-
# curl http://demo.openapply.com/api/v1/students/95?auth_token=demo_site_api_key
|
92
|
-
# * +options+ - see httparty options [http://www.rubydoc.info/github/jnunemaker/httparty]
|
93
|
-
def oa_api_call(url, options={})
|
94
|
-
self.class.get(url, options)
|
95
|
-
end
|
96
|
-
|
97
|
-
# Does checks the info for validity & unpacks the json retubed to a JS formatt
|
98
|
-
#
|
99
|
-
# ==== Attributes
|
100
|
-
# * +url+ - this is the url to do the call
|
101
|
-
# /api/v1/students/95?auth_token=demo_site_api_key
|
102
|
-
# is the url passed when wanting to do the following cli api call
|
103
|
-
# curl http://demo.openapply.com/api/v1/students/95?auth_token=demo_site_api_key
|
104
|
-
# * +options+ - see httparty options [http://www.rubydoc.info/github/jnunemaker/httparty]
|
105
|
-
def oa_answer(url, options={})
|
106
|
-
# puts
|
107
|
-
# puts "GIVEN URL: #{ url.inspect }"
|
108
|
-
return { error: 'no url given' } if url.nil? or url.to_s.eql? ""
|
109
|
-
return { error: 'bad url - has space' } if url.include? " "
|
110
|
-
return { error: 'bad api_path' } unless url.include? "#{api_path}"
|
111
|
-
return { error: 'bad auth_token' } unless url.include? "auth_token=#{api_key}"
|
112
|
-
api_answer = nil
|
113
|
-
|
114
|
-
handle_timeouts do
|
115
|
-
api_answer = oa_api_call(url, options)
|
116
|
-
end
|
117
|
-
|
118
|
-
# puts "API ANSWER: #{api_answer}"
|
119
|
-
# puts "API ANSWER: #{api_answer.inspect}"
|
120
|
-
return { error: 'no response' } unless api_answer.respond_to? "response"
|
121
|
-
return { error: 'no response' } if api_answer.response.nil?
|
122
|
-
return { error: 'no response' } if api_answer.response.to_s.eql? ""
|
123
|
-
return JSON.parse(api_answer.response.body, symbolize_names: true)
|
124
|
-
end
|
125
|
-
# alias_method :openapply_answer, :oa_answer
|
126
|
-
|
127
|
-
end # Client
|
128
|
-
|
129
|
-
end # Openapply
|
6
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
require "openapply/get_students"
|
2
|
+
require "openapply/get_student"
|
3
|
+
require "openapply/convert"
|
4
|
+
require "openapply/client"
|
5
|
+
require "openapply/put"
|
6
|
+
require 'httparty'
|
7
|
+
|
8
|
+
module Openapply
|
9
|
+
|
10
|
+
# OpenApply CLIENT is a service to manage admissions -
|
11
|
+
# this gem allows access to OpenApply API calls via HTTParty
|
12
|
+
#
|
13
|
+
class Client
|
14
|
+
|
15
|
+
# PUT api calls
|
16
|
+
include Put
|
17
|
+
|
18
|
+
# GET api calls
|
19
|
+
include Get
|
20
|
+
|
21
|
+
# Convert student data to various formats
|
22
|
+
include Convert
|
23
|
+
|
24
|
+
# Library for API calls to OpenApply
|
25
|
+
include HTTParty
|
26
|
+
|
27
|
+
# Defines OpenApply domain name from ENV-VARS
|
28
|
+
API_URL = (ENV['OA_BASE_URI'] || 'demo.openapply.com')
|
29
|
+
|
30
|
+
# Defines the OpenApply path from ENV-VARS - default is 5 seconds
|
31
|
+
API_TIMEOUT = (ENV['OA_TIMEOUT'].to_i || 5)
|
32
|
+
|
33
|
+
base_uri API_URL
|
34
|
+
default_timeout API_TIMEOUT
|
35
|
+
|
36
|
+
# Makes OpenApply domain name visible:
|
37
|
+
def api_url
|
38
|
+
API_URL
|
39
|
+
end
|
40
|
+
|
41
|
+
# make OpenApply timeout visible
|
42
|
+
def api_reply_count
|
43
|
+
API_TIMEOUT
|
44
|
+
end
|
45
|
+
alias_method :api_timeout, :api_reply_count
|
46
|
+
|
47
|
+
# Defines & makes visible OpenApply secret access key with ENV-VARS
|
48
|
+
def api_key
|
49
|
+
ENV['OA_AUTH_TOKEN'] || 'demo_site_api_key'
|
50
|
+
end
|
51
|
+
|
52
|
+
# Defines and makes visib le the OpenApply path with ENV-VARS
|
53
|
+
def api_path
|
54
|
+
ENV['OA_API_PATH'] || "/api/v1/students/"
|
55
|
+
end
|
56
|
+
|
57
|
+
# Defines and makes visible the maximum records OpenApply should return
|
58
|
+
# (code default is 50 - OA default is 10 - doc says 100)
|
59
|
+
def api_records
|
60
|
+
ENV['OA_REPLY_RECORDS'] || '50'
|
61
|
+
end
|
62
|
+
|
63
|
+
# Does the actual api call to OpenApply & handles API timeouts gracefully
|
64
|
+
#
|
65
|
+
# ==== Attributes
|
66
|
+
# * +url+ - this is the url to do the call
|
67
|
+
# /api/v1/students/95?auth_token=demo_site_api_key
|
68
|
+
# is the url passed when wanting to do the following cli api call
|
69
|
+
# curl http://demo.openapply.com/api/v1/students/95?auth_token=demo_site_api_key
|
70
|
+
# * +options+ - see httparty options [http://www.rubydoc.info/github/jnunemaker/httparty]
|
71
|
+
def oa_api_call(url, options={})
|
72
|
+
# https://stackoverflow.com/questions/26251422/handling-netreadtimeout-error-in-httparty
|
73
|
+
max_retries = 3
|
74
|
+
times_retried = 0
|
75
|
+
begin
|
76
|
+
self.class.get(url, options)
|
77
|
+
rescue Net::ReadTimeout, Net::OpenTimeout => error
|
78
|
+
if times_retried < max_retries
|
79
|
+
times_retried += 1
|
80
|
+
# puts "TIMEOUT RETRY: #{times_retried} of #{max_retries} - USING: #{url.inspect}"
|
81
|
+
retry
|
82
|
+
else
|
83
|
+
# puts "TIME-OUT URI FAILED: #{url.inspect}"
|
84
|
+
{ error: "no response (timeout) from URL: #{url}" }
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# Does checks the info for validity & unpacks the json retubed to a JS formatt
|
90
|
+
#
|
91
|
+
# ==== Attributes
|
92
|
+
# * +url+ - this is the url to do the call
|
93
|
+
# /api/v1/students/95?auth_token=demo_site_api_key
|
94
|
+
# is the url passed when wanting to do the following cli api call
|
95
|
+
# curl http://demo.openapply.com/api/v1/students/95?auth_token=demo_site_api_key
|
96
|
+
# * +options+ - see httparty options [http://www.rubydoc.info/github/jnunemaker/httparty]
|
97
|
+
def oa_answer(url, options={})
|
98
|
+
# puts
|
99
|
+
# puts "GIVEN URL: #{ url.inspect }"
|
100
|
+
return { error: 'no url given' } if url.nil? or url.to_s.eql? ""
|
101
|
+
return { error: 'bad url - has space' } if url.include? " "
|
102
|
+
return { error: 'bad api_path' } unless url.include? "#{api_path}"
|
103
|
+
return { error: 'bad auth_token' } unless url.include? "auth_token=#{api_key}"
|
104
|
+
api_answer = nil
|
105
|
+
|
106
|
+
api_answer = oa_api_call(url, options)
|
107
|
+
|
108
|
+
return api_answer unless api_answer.respond_to? "response" # and not api_answer[:error].nil?
|
109
|
+
# return { error: 'no response' } unless api_answer.respond_to? "response"
|
110
|
+
return { error: 'no response' } if api_answer.response.nil?
|
111
|
+
return { error: 'no response' } if api_answer.response.to_s.eql? ""
|
112
|
+
return JSON.parse(api_answer.response.body, symbolize_names: true)
|
113
|
+
end
|
114
|
+
# alias_method :openapply_answer, :oa_answer
|
115
|
+
|
116
|
+
end # Client
|
117
|
+
|
118
|
+
end # Openapply
|
data/lib/openapply/convert.rb
CHANGED
data/lib/openapply/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openapply
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bill Tihen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -186,6 +186,7 @@ files:
|
|
186
186
|
- examples/demo/README.md
|
187
187
|
- examples/demo/demo_site.rb
|
188
188
|
- lib/openapply.rb
|
189
|
+
- lib/openapply/client.rb
|
189
190
|
- lib/openapply/convert.rb
|
190
191
|
- lib/openapply/get_student.rb
|
191
192
|
- lib/openapply/get_students.rb
|