CollegiateLink 0.0.2 → 0.0.3

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.
@@ -4,6 +4,7 @@ require 'net/ssh'
4
4
  require 'guid'
5
5
  require 'nokogiri'
6
6
  require 'happymapper'
7
+ require 'socksify/http'
7
8
 
8
9
  require 'collegiatelink/response'
9
10
  require 'collegiatelink/request'
@@ -15,10 +16,6 @@ require 'collegiatelink/organization'
15
16
  # development, so let me know if you plan to use it. (tomdooner@gmail.com)
16
17
  #
17
18
  module CollegiateLink
18
- # URL base for all requests. The API key will be substituted into this when
19
- # the request is made.
20
- URL_BASE = 'https://%s.collegiatelink.net/ws/'
21
-
22
19
  # Currently-supported CollegiateLink action request types
23
20
  ACTIONS = [
24
21
  'organization/list',
@@ -13,11 +13,20 @@ module CollegiateLink
13
13
  def initialize(apikey, ip, sharedkey)
14
14
  @params = {
15
15
  apikey: apikey,
16
- ip: ip
16
+ ip: ip,
17
17
  }
18
18
  @opts = {
19
- sharedkey: sharedkey
19
+ sharedkey: sharedkey,
20
20
  }
21
+ @@proxy = Net::HTTP
22
+ end
23
+
24
+ def self.proxy
25
+ @@proxy
26
+ end
27
+
28
+ def use_socks_proxy(host, port)
29
+ @@proxy = Net::HTTP.SOCKSProxy(host, port)
21
30
  end
22
31
 
23
32
  ##
@@ -31,8 +40,7 @@ module CollegiateLink
31
40
  # See CollegiateLink::Request#initialize for a list of optional parameters
32
41
  #
33
42
  def organizations(params = {})
34
- orgs = request('organization/list', params)
35
- orgs.map{ |o| CollegiateLink::Organization.parse(o.to_s) }
43
+ orgs = request('organization/list', CollegiateLink::Organization, params)
36
44
  end
37
45
 
38
46
  ##
@@ -56,21 +64,27 @@ module CollegiateLink
56
64
  params[:startdate] = params[:startdate].to_i * 1000
57
65
  params[:enddate] = params[:enddate].to_i * 1000
58
66
 
59
- events = request('event/list', params)
60
- events.map{ |o| CollegiateLink::Event.parse(o.to_s) }
67
+ events = request('event/list', CollegiateLink::Event, params)
68
+ end
69
+
70
+ def roster(id, params = {})
71
+ params.merge!(:id => id)
72
+
73
+ members = request('organization/roster', CollegiateLink::Member, params)
61
74
  end
62
75
 
63
76
  private
64
77
 
65
- def request(action, params = {})
78
+ def request(action, model, params = {})
66
79
  cl_request = CollegiateLink::Request.new(action, params.merge(@params), @opts)
67
80
  cl_resp = cl_request.perform
68
81
 
69
- all_items = cl_resp.items
82
+ all_items = cl_resp.items.map { |i| model.parse(i.to_s) }
70
83
 
71
84
  while cl_resp.has_next_page?
72
- cl_resp = cl_request.request_for_next_page.perform
73
- all_items += cl_resp.items
85
+ cl_request = cl_request.request_for_next_page
86
+ cl_resp = cl_request.perform
87
+ all_items += cl_resp.items.map { |i| model.parse(i.to_s) }
74
88
  end
75
89
 
76
90
  all_items
@@ -45,10 +45,15 @@ module CollegiateLink
45
45
  #
46
46
  # ==== Properties:
47
47
  # * <tt>:id </tt> - Integer
48
- # * <tt>:ishidden</tt> - String
48
+ # * <tt>:parentId</tt> - Integer
49
49
  # * <tt>:name </tt> - String
50
- # * <tt>:addresses </tt> - Array of Address objects
51
- # * <tt>:categories </tt> - Array of Category objects
50
+ # * <tt>:description </tt> - String
51
+ # * <tt>:shortName </tt> - String
52
+ # * <tt>:siteUrl </tt> - String
53
+ # * <tt>:status </tt> - String
54
+ # * <tt>:type </tt> - String
55
+ # * <tt>:addresses </tt> - Array of CollegiateLink::Address
56
+ # * <tt>:categories </tt> - Array of CollegiateLink::Category
52
57
  class Organization
53
58
  include HappyMapper
54
59
 
@@ -95,4 +100,53 @@ module CollegiateLink
95
100
 
96
101
  has_one :organization, Organization
97
102
  end
103
+
104
+ ##
105
+ # A position of someone in an organization
106
+ #
107
+ class Position
108
+ include HappyMapper
109
+
110
+ element :name, String
111
+ element :enddate, Integer
112
+ element :startdate, Integer
113
+ element :userstartdate, Integer
114
+ element :userenddate, Integer
115
+
116
+ def current?
117
+ use_startdate = (userstartdate > 0) ? userstartdate : startdate
118
+ indefinite = (userenddate < 0) && (enddate < 0)
119
+
120
+ starts = Time.at(use_startdate / 1000, use_startdate % 1000)
121
+
122
+ if indefinite
123
+ return (starts < Time.now)
124
+ else
125
+ use_enddate = (userenddate > 0) ? userenddate : enddate
126
+ ends = Time.at(use_enddate / 1000, use_enddate % 1000)
127
+ return (starts < Time.now && Time.now < ends)
128
+ end
129
+ end
130
+ end
131
+
132
+ ##
133
+ # A Member record returned by CollegiateLink
134
+ #
135
+ class Member
136
+ include HappyMapper
137
+
138
+ #element :affiliation # Not sure the format of this...
139
+ element :campusemail, String
140
+ element :firstname, String
141
+ element :id, Integer
142
+ element :lastname, String
143
+ element :preferredemail, String
144
+ element :username, String
145
+
146
+ has_many :positions, Position
147
+
148
+ def active_positions
149
+ positions.keep_if { |p| p.current? }
150
+ end
151
+ end
98
152
  end
@@ -33,6 +33,9 @@ module CollegiateLink
33
33
  @params[:page] ||= 1
34
34
  @params[:pagesize] ||= 100
35
35
  @params[:modelformatting] ||= 'normal'
36
+
37
+ # Default values for optional parameters
38
+ @opts[:url_base] ||= 'https://%s.collegiatelink.net/ws/' % @params[:apikey]
36
39
  end
37
40
 
38
41
  ##
@@ -48,16 +51,16 @@ module CollegiateLink
48
51
 
49
52
  # Then, compute the URL...
50
53
  url = URI([
51
- URL_BASE % @params[:apikey]
52
- @action
53
- '?'
54
- URI.encode_www_form(request_params)
54
+ @opts[:url_base],
55
+ @action,
56
+ '?',
57
+ URI.encode_www_form(request_params),
55
58
  ].join)
56
59
 
57
60
  puts "requesting: \n#{url}" if @opts[:debug]
58
61
 
59
62
  # Make the Request!
60
- res = Net::HTTP.new(url.host, url.port)
63
+ res = CollegiateLink::Client.proxy.new(url.host, url.port)
61
64
  res.use_ssl = true
62
65
  res.verify_mode = OpenSSL::SSL::VERIFY_NONE
63
66
 
@@ -4,7 +4,7 @@ module CollegiateLink
4
4
  #
5
5
  class Response
6
6
  # Create the response.
7
- #
7
+ #
8
8
  # ==== Parameters:
9
9
  # * +document+ - The Nokogiri document of the returned XML
10
10
  def initialize(document)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: CollegiateLink
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-13 00:00:00.000000000 Z
12
+ date: 2012-02-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: guid
@@ -59,6 +59,22 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: socksify
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
62
78
  - !ruby/object:Gem::Dependency
63
79
  name: rspec
64
80
  requirement: !ruby/object:Gem::Requirement
@@ -83,7 +99,7 @@ dependencies:
83
99
  - - ! '>='
84
100
  - !ruby/object:Gem::Version
85
101
  version: '0'
86
- type: :development
102
+ type: :runtime
87
103
  prerelease: false
88
104
  version_requirements: !ruby/object:Gem::Requirement
89
105
  none: false
@@ -125,6 +141,5 @@ rubyforge_project:
125
141
  rubygems_version: 1.8.24
126
142
  signing_key:
127
143
  specification_version: 3
128
- summary: CollegiateLink Client Gem
144
+ summary: Old, deprecated gem. Use the lowercased gem "collegiatelink" instead!
129
145
  test_files: []
130
- has_rdoc: