ait_connect 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/.DS_Store ADDED
Binary file
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in ait_connect.gemspec
4
+ gemspec
5
+ gem 'rspec'
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ (The MIT-License)
2
+
3
+ Copyright (c) 2011 GroupMe
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ait_connect/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "ait_connect"
7
+ s.version = AITConnect::VERSION
8
+ s.authors = ["Daniel Morgan"]
9
+ s.email = ["danmorgz@googlemail.com"]
10
+ s.homepage = ""
11
+ s.summary = "Write a gem summary"
12
+ s.description = "Write a gem description"
13
+
14
+ s.rubyforge_project = "ait_connect"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ # s.add_runtime_dependency "rest-client"
24
+
25
+ s.add_dependency(%q<typhoeus>, [">= 0"])
26
+ s.add_dependency(%q<json>, [">= 0"])
27
+ end
data/lib/.DS_Store ADDED
Binary file
@@ -0,0 +1,32 @@
1
+ module ActiveInTime
2
+ class Error < StandardError ; end
3
+ class InvalidAuth < ActiveInTime::Error; end
4
+ class ServiceUnavailable < ActiveInTime::Error; end
5
+ class EndPointMissing < ActiveInTime::Error; end
6
+
7
+ def self.verbose=(setting)
8
+ @verbose = setting
9
+ end
10
+
11
+ def self.verbose?
12
+ @verbose
13
+ end
14
+
15
+ def self.log(msg)
16
+ return unless verbose?
17
+ puts "[activeintime] #{msg}"
18
+ end
19
+
20
+ ERRORS = {
21
+ "invalid_auth" => "OAuth token was not provided or was invalid.",
22
+ "param_error" => "A required parameter was missing or a parameter was malformed. This is also used if the resource ID in the path is incorrect.",
23
+ "endpoint_error" => "The requested path does not exist.",
24
+ "not_authorized" => "Although authentication succeeded, the acting user is not allowed to see this information due to privacy restrictions.",
25
+ "rate_limit_exceeded" => "Rate limit for this hour exceeded.",
26
+ "deprecated" => "Something about this request is using deprecated functionality, or the response format may be about to change.",
27
+ "server_error" => "Server is currently experiencing issues. Check status.activeintime.com for udpates.",
28
+ "other" => "Some other type of error occurred."
29
+ }
30
+
31
+ end
32
+
@@ -0,0 +1,148 @@
1
+ module ActiveInTime
2
+ class Base
3
+ API = "https://api.activeintime.com/v1/"
4
+ #API = "http://api.lvh.me:3000/v1/"
5
+
6
+ def initialize(*args)
7
+ case args.size
8
+ when 1
9
+ @access_token = args.first
10
+ when 2
11
+ @key, @secret = args
12
+ else
13
+ raise ArgumentError, "You need to pass either an access_token or key and secret"
14
+ end
15
+ end
16
+
17
+ # def users
18
+ # ActiveInTime::UserProxy.new(self)
19
+ # end
20
+
21
+ # def checkins
22
+ # ActiveInTime::CheckinProxy.new(self)
23
+ # end
24
+
25
+ def sites
26
+ ActiveInTime::SiteProxy.new(self)
27
+ end
28
+
29
+ def timetables
30
+ ActiveInTime::TimetableProxy.new(self)
31
+ end
32
+
33
+ def timetable_entries
34
+ ActiveInTime::TimetableEntryProxy.new(self)
35
+ end
36
+
37
+ # def settings
38
+ # @settings ||= ActiveInTime::Settings.new(self)
39
+ # end
40
+
41
+ def get(path, params={})
42
+ params = camelize(params)
43
+ ActiveInTime.log("GET #{API + path}")
44
+ ActiveInTime.log("PARAMS: #{params.inspect}")
45
+ merge_auth_params(params)
46
+ response = JSON.parse(Typhoeus::Request.get(API + path + '.json', :params => params).body)
47
+ ActiveInTime.log(response.inspect)
48
+ error(response) || response["response"]
49
+ end
50
+
51
+ def post(path, params={})
52
+ params = camelize(params)
53
+ ActiveInTime.log("POST #{API + path}")
54
+ ActiveInTime.log("PARAMS: #{params.inspect}")
55
+ merge_auth_params(params)
56
+ response = JSON.parse(Typhoeus::Request.post(API + path, :params => params).body)
57
+ ActiveInTime.log(response.inspect)
58
+ error(response) || response["response"]
59
+ end
60
+
61
+ def authorize_url(redirect_uri)
62
+ # http://developer.foursquare.com/docs/oauth.html
63
+
64
+ # check params
65
+ raise "you need to define a client id before" if @key.blank?
66
+ raise "no callback url provided" if redirect_uri.blank?
67
+
68
+ # params
69
+ params = {}
70
+ params["key"] = @key
71
+ params["response_type"] = "code"
72
+ params["redirect_uri"] = redirect_uri
73
+
74
+ # url
75
+ oauth2_url('authenticate', params)
76
+ end
77
+
78
+ def access_token(code, redirect_uri)
79
+ # http://developer.foursquare.com/docs/oauth.html
80
+
81
+ # check params
82
+ raise "you need to define a client id before" if @key.blank?
83
+ raise "you need to define a client secret before" if @secret.blank?
84
+ raise "no code provided" if code.blank?
85
+ raise "no redirect_uri provided" if redirect_uri.blank?
86
+
87
+ # params
88
+ params = {}
89
+ params["key"] = @key
90
+ params["secret"] = @secret
91
+ params["grant_type"] = "authorization_code"
92
+ params["redirect_uri"] = redirect_uri
93
+ params["code"] = code
94
+
95
+ # url
96
+ url = oauth2_url('access_token', params)
97
+
98
+ # response
99
+ # http://developer.foursquare.com/docs/oauth.html
100
+ response = JSON.parse(Typhoeus::Request.get(url).body)
101
+ response["access_token"]
102
+ end
103
+
104
+ private
105
+
106
+ # def oauth2_url(method_name, params)
107
+ # "https://foursquare.com/oauth2/#{method_name}?#{params.to_query}"
108
+ # end
109
+
110
+ def camelize(params)
111
+ params.inject({}) { |o, (k, v)|
112
+ o[k.to_s.gsub(/(_[a-z])/) { |m| m[1..1].upcase }] = v
113
+ o
114
+ }
115
+ end
116
+
117
+ def error(response)
118
+ case response["meta"]["error"]
119
+ when nil
120
+ # It's all good.
121
+ when "deprecated"
122
+ ActiveInTime.log(ActiveInTime::ERRORS[response['meta']['error']])
123
+ nil
124
+ else
125
+ code = response['meta']['status']
126
+ error = response['meta']['error']['error_message']
127
+ case code
128
+ when 403
129
+ raise ActiveInTime::InvalidAuth.new(error)
130
+ when 501
131
+ raise ActiveInTime::ServiceUnavailable.new(error)
132
+ when 404
133
+ raise ActiveInTime::EndPointMissing.new(error)
134
+ else
135
+ raise ActiveInTime::Error.new(error)
136
+ end
137
+ end
138
+ end
139
+
140
+ def merge_auth_params(params)
141
+ if @access_token
142
+ params.merge!(:oauth_token => @access_token)
143
+ else
144
+ params.merge!(:key => @key, :secret => @secret)
145
+ end
146
+ end
147
+ end
148
+ end
@@ -0,0 +1,35 @@
1
+ module ActiveInTime
2
+ class Facility
3
+ attr_reader :json
4
+
5
+ def initialize(active_in_time, json)
6
+ @active_in_time, @json = active_in_time, json
7
+ end
8
+
9
+ # def fetch
10
+ # @json = @active_in_time.get("timetables/#{id}")["timetable"]
11
+ # self
12
+ # end
13
+
14
+ def id
15
+ @json["id"]
16
+ end
17
+
18
+ def name
19
+ @json["primary_name"]
20
+ end
21
+
22
+ def tldc_approved
23
+ @json['tldc_approved']
24
+ end
25
+
26
+ def length
27
+ @json['length']
28
+ end
29
+
30
+ def facility_type
31
+ ActiveInTime::FacilityType.new(@active_in_time, @json['facility_type'])
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,27 @@
1
+ module ActiveInTime
2
+ class FacilityType
3
+ attr_reader :json
4
+
5
+ def initialize(active_in_time, json)
6
+ @active_in_time, @json = active_in_time, json
7
+ end
8
+
9
+ # def fetch
10
+ # @json = @active_in_time.get("timetables/#{id}")["timetable"]
11
+ # self
12
+ # end
13
+
14
+ def id
15
+ @json["id"]
16
+ end
17
+
18
+ def name
19
+ @json["name"]
20
+ end
21
+
22
+ def facility_type_category
23
+ ActiveInTime::FacilityTypeCategory.new(@active_in_time, @json)
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,24 @@
1
+ module ActiveInTime
2
+ class FacilityTypeCategory
3
+ attr_reader :json
4
+
5
+ def initialize(active_in_time, json)
6
+ @active_in_time, @json = active_in_time, json
7
+ end
8
+
9
+ # def fetch
10
+ # @json = @active_in_time.get("timetables/#{id}")["timetable"]
11
+ # self
12
+ # end
13
+
14
+ def id
15
+ @json["id"]
16
+ end
17
+
18
+ def name
19
+ @json["name"]
20
+ end
21
+
22
+
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ module ActiveInTime
2
+ class Instructor
3
+ attr_reader :json
4
+
5
+ def initialize(active_in_time, json)
6
+ @active_in_time, @json = active_in_time, json
7
+ end
8
+
9
+ def id
10
+ @json["id"]
11
+ end
12
+
13
+ def name
14
+ @json["name"]
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module ActiveInTime
2
+ class Level
3
+ attr_reader :json
4
+
5
+ def initialize(active_in_time, json)
6
+ @active_in_time, @json = active_in_time, json
7
+ end
8
+
9
+ def id
10
+ @json["id"]
11
+ end
12
+
13
+ def name
14
+ @json["name"]
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,132 @@
1
+ module ActiveInTime
2
+ class Site
3
+ attr_reader :json
4
+
5
+ def initialize(active_in_time, json)
6
+ @active_in_time, @json = active_in_time, json
7
+ end
8
+
9
+ def fetch
10
+ @json = @active_in_time.get("sites/#{id}")
11
+ self
12
+ end
13
+
14
+ def id
15
+ @json["id"]
16
+ end
17
+
18
+ def tldc_approved
19
+ @json['tldc_approved']
20
+ end
21
+
22
+ def name
23
+ @json["name"]
24
+ end
25
+
26
+ #####
27
+ ##
28
+ ## Contact info
29
+
30
+ def contact
31
+ @json["contact"]
32
+ end
33
+
34
+ def post_town
35
+ self.contact['post_town']
36
+ end
37
+
38
+ def country
39
+ self.contact['country']
40
+ end
41
+
42
+ def borough
43
+ self.contact['borough']
44
+ end
45
+
46
+ def address_line_1
47
+ self.contact['address_line_1']
48
+ end
49
+
50
+ def address_line_2
51
+ self.contact['address_line_2']
52
+ end
53
+
54
+ def post_code
55
+ self.contact['post_code']
56
+ end
57
+
58
+ def latitude
59
+ self.contact['latitude']
60
+ end
61
+
62
+ def longitude
63
+ self.contact['longitude']
64
+ end
65
+
66
+ def telephone
67
+ self.contact['telephone']
68
+ end
69
+
70
+ def email
71
+ self.contact['email']
72
+ end
73
+
74
+ def website
75
+ self.contact['website']
76
+ end
77
+
78
+ def timetables
79
+ return [] if !@json["timetables"] || @json["timetables"].empty?
80
+ timetables = []
81
+ @json['timetables'].each do |timetable|
82
+ timetables << ActiveInTime::Timetable.new(@active_in_time, timetable)
83
+ end
84
+ timetables
85
+
86
+ end
87
+
88
+ def facilities
89
+ return [] if !@json["facilities"] || @json["facilities"].empty?
90
+
91
+ facilities = []
92
+ json['facilities'].each do |facility|
93
+ facilities << ActiveInTime::Facility.new(@active_in_time, facility)
94
+ end
95
+ facilities
96
+
97
+ end
98
+
99
+
100
+ # # not all photos may be present here (but we try to avoid one extra API call)
101
+ # # if you want to get all the photos, try all_photos
102
+ # def photos
103
+ # return all_photos if @json["photos"].blank?
104
+ # @json["photos"]["groups"].select { |g| g["type"] == "venue" }.first["items"].map do |item|
105
+ # Foursquare::Photo.new(@foursquare, item)
106
+ # end
107
+ # end
108
+ #
109
+ # # https://developer.foursquare.com/docs/venues/photos.html
110
+ # def all_photos(options={:group => "venue"})
111
+ # @foursquare.get("venues/#{id}/photos", options)["photos"]["items"].map do |item|
112
+ # Foursquare::Photo.new(@foursquare, item)
113
+ # end
114
+ # end
115
+ #
116
+ # # count the people who have checked-in at the venue in the last two hours
117
+ # def here_now_count
118
+ # fetch unless @json.has_key?("hereNow")
119
+ # @json["hereNow"]["count"]
120
+ # end
121
+ #
122
+ # # returns a list of checkins (only if a valid oauth token from a user is provided)
123
+ # # https://developer.foursquare.com/docs/venues/herenow.html
124
+ # # options: limit, offset, aftertimestamp
125
+ # def here_now_checkins(options={:limit => "50"})
126
+ # @foursquare.get("venues/#{id}/herenow", options)["hereNow"]["items"].map do |item|
127
+ # Foursquare::Checkin.new(@foursquare, item)
128
+ # end
129
+ # end
130
+
131
+ end
132
+ end
@@ -0,0 +1,44 @@
1
+ module ActiveInTime
2
+ class SiteProxy
3
+ def initialize(active_in_time)
4
+ @active_in_time = active_in_time
5
+ end
6
+
7
+ def find(id)
8
+ ActiveInTime::Site.new(@active_in_time, @active_in_time.get("sites/#{id}"))
9
+ end
10
+
11
+ def nearby(options={})
12
+ raise ArgumentError, "You must include :ll" unless options[:ll]
13
+
14
+ sites = []
15
+ response = @active_in_time.get('sites', options).each do |site_json|
16
+ sites << ActiveInTime::Site.new(@active_in_time, site_json)
17
+ end
18
+
19
+ sites
20
+ end
21
+
22
+ # def trending(options={})
23
+ # search_group("trending", options)
24
+ # end
25
+ #
26
+ # def favorites(options={})
27
+ # search_group("favorites", options)
28
+ # end
29
+
30
+ #def nearby(options={})
31
+ # search_group("nearby", options)
32
+ #end
33
+
34
+ private
35
+
36
+ # def search_group(name, options)
37
+ # raise ArgumentError, "You must include :ll" unless options[:ll]
38
+ # response = @foursquare.get('venues/search', options)["groups"].detect { |group| group["type"] == name }
39
+ # response ? response["items"].map do |json|
40
+ # Foursquare::Venue.new(@foursquare, json)
41
+ # end : []
42
+ # end
43
+ end
44
+ end
@@ -0,0 +1,18 @@
1
+ module ActiveInTime
2
+ class TermType
3
+ attr_reader :json
4
+
5
+ def initialize(active_in_time, json)
6
+ @active_in_time, @json = active_in_time, json
7
+ end
8
+
9
+ def id
10
+ @json["id"]
11
+ end
12
+
13
+ def name
14
+ @json["name"]
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1 @@
1
+ test.rb
@@ -0,0 +1,27 @@
1
+ module ActiveInTime
2
+ class Timetable
3
+ attr_reader :json
4
+
5
+ def initialize(active_in_time, json)
6
+ @active_in_time, @json = active_in_time, json
7
+ end
8
+
9
+ def fetch
10
+ @json = @active_in_time.get("timetables/#{id}")["timetable"]
11
+ self
12
+ end
13
+
14
+ def id
15
+ @json["id"]
16
+ end
17
+
18
+ def name
19
+ @json["name"]
20
+ end
21
+
22
+ def timetable_entries(options = {})
23
+ @active_in_time.timetable_entries.find(self.id,options)
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,76 @@
1
+ require 'time'
2
+ require 'date'
3
+
4
+ module ActiveInTime
5
+ class TimetableEntry
6
+ attr_reader :json
7
+
8
+ def initialize(active_in_time, json)
9
+ @active_in_time, @json = active_in_time, json
10
+ end
11
+
12
+ # def fetch
13
+ # @json = @active_in_time.get("timetables/#{timetable_id}/timetable_entries/#{id}")["timetable_entry"]
14
+ # self
15
+ # end
16
+
17
+ def id
18
+ @json["id"]
19
+ end
20
+
21
+ def start_time
22
+ Time.parse(@json["start_time"])
23
+ end
24
+
25
+ def end_time
26
+ Time.parse(@json["end_time"])
27
+ end
28
+
29
+ def date
30
+ Date.parse(@json["date"])
31
+ end
32
+
33
+ def facility
34
+ return nil if !@json['facility']
35
+ ActiveInTime::Facility.new(@active_in_time,@json['facility'])
36
+ end
37
+
38
+ def term_type
39
+ ActiveInTime::TermType.new(@active_in_time,@json['term_type'])
40
+ end
41
+
42
+ def timetable_session
43
+ return nil if !@json['timetable_session']
44
+ ActiveInTime::TimetableSession.new(@active_in_time,@json['timetable_session'])
45
+ end
46
+
47
+ def instructor
48
+ return nil if !@json['instructor']
49
+ ActiveInTime::Instructor.new(@active_in_time,@json['instructor'])
50
+ end
51
+
52
+ def level
53
+ return nil if !@json['level']
54
+ ActiveInTime::Level.new(@active_in_time,@json['level'])
55
+
56
+ end
57
+
58
+
59
+ def timetable_id
60
+ @json["timetable_id"]
61
+ end
62
+
63
+ def name
64
+ @json["name"]
65
+ end
66
+
67
+ def is_cancelled
68
+ @json["is_cancelled"]
69
+ end
70
+
71
+ def cancellation_reason
72
+ @json["cancellation_reason"]
73
+ end
74
+
75
+ end
76
+ end
@@ -0,0 +1,27 @@
1
+ module ActiveInTime
2
+ class TimetableEntryProxy
3
+ def initialize(active_in_time)
4
+ @active_in_time = active_in_time
5
+ end
6
+
7
+ def find(id, options = {})
8
+
9
+ entries = []
10
+ @active_in_time.get("timetables/#{id}/timetable_entries", options).each { |te|
11
+ entries << ActiveInTime::TimetableEntry.new(@active_in_time,te)
12
+ }
13
+ entries
14
+
15
+ end
16
+
17
+ private
18
+
19
+ # def search_group(name, options)
20
+ # raise ArgumentError, "You must include :ll" unless options[:ll]
21
+ # response = @foursquare.get('venues/search', options)["groups"].detect { |group| group["type"] == name }
22
+ # response ? response["items"].map do |json|
23
+ # Foursquare::Venue.new(@foursquare, json)
24
+ # end : []
25
+ # end
26
+ end
27
+ end
@@ -0,0 +1,21 @@
1
+ module ActiveInTime
2
+ class TimetableProxy
3
+ def initialize(active_in_time)
4
+ @active_in_time = active_in_time
5
+ end
6
+
7
+ def find(id)
8
+ ActiveInTime::Timetable.new(@active_in_time, @active_in_time.get("timetables/#{id}"))
9
+ end
10
+
11
+ private
12
+
13
+ # def search_group(name, options)
14
+ # raise ArgumentError, "You must include :ll" unless options[:ll]
15
+ # response = @foursquare.get('venues/search', options)["groups"].detect { |group| group["type"] == name }
16
+ # response ? response["items"].map do |json|
17
+ # Foursquare::Venue.new(@foursquare, json)
18
+ # end : []
19
+ # end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ module ActiveInTime
2
+ class TimetableSession
3
+ attr_reader :json
4
+
5
+ def initialize(active_in_time, json)
6
+ @active_in_time, @json = active_in_time, json
7
+ end
8
+
9
+ def id
10
+ @json["id"]
11
+ end
12
+
13
+ def name
14
+ @json["name"]
15
+ end
16
+
17
+ def timetable_session_category
18
+ return nil if !@json['timetable_session_category']
19
+ ActiveInTime::TimetableSessionCategory.new(@active_in_time,@json['timetable_session_category'])
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ module ActiveInTime
2
+ class TimetableSessionCategory
3
+ attr_reader :json
4
+
5
+ def initialize(active_in_time, json)
6
+ @active_in_time, @json = active_in_time, json
7
+ end
8
+
9
+ def id
10
+ @json["id"]
11
+ end
12
+
13
+ def name
14
+ @json["name"]
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,3 @@
1
+ module AITConnect
2
+ VERSION = "0.0.6"
3
+ end
@@ -0,0 +1,29 @@
1
+ $LOAD_PATH << File.dirname(__FILE__)
2
+
3
+ require "rubygems"
4
+ require "typhoeus"
5
+ require "json"
6
+ require "cgi"
7
+ require "ait_connect/base"
8
+ # require "ait_connect/checkin_proxy"
9
+ # require "ait_connect/checkin"
10
+ # require "ait_connect/user_proxy"
11
+ # require "ait_connect/user"
12
+ require "ait_connect/site_proxy"
13
+ require "ait_connect/site"
14
+ require "ait_connect/timetable"
15
+ require "ait_connect/timetable_proxy"
16
+ require "ait_connect/timetable_entry_proxy"
17
+ require "ait_connect/timetable_entry"
18
+
19
+ require "ait_connect/term_type"
20
+ require "ait_connect/timetable_session"
21
+ require "ait_connect/instructor"
22
+ require "ait_connect/level"
23
+ require "ait_connect/timetable_session_category"
24
+
25
+ require "ait_connect/facility"
26
+ require "ait_connect/facility_type"
27
+ require "ait_connect/facility_type_category"
28
+
29
+ require 'active_in_time'
data/lib/test.rb ADDED
@@ -0,0 +1,38 @@
1
+ require File.join(File.dirname(__FILE__), "ait_connect")
2
+
3
+ ##Localhost
4
+ API_KEY = ''
5
+ API_SECRET = ''
6
+ ##activeintime.com
7
+ ait = ActiveInTime::Base.new(API_KEY,API_SECRET) #localhost
8
+
9
+ # With activities and facility_types
10
+ #response = ait.sites.nearby(:ll => "51.5,-0.09", :facility_types => "1,2,3,4,5,35", :activity_type_categories => '1')
11
+
12
+ #Just plain long lat
13
+ #response = ait.sites.nearby(:ll => "51.5,-0.09")
14
+
15
+ #With a radius
16
+ #response = ait.sites.nearby(:ll => "51.5,-0.09", :radius => 20)
17
+
18
+ #With pagination
19
+ response = ait.sites.nearby(:ll => "51.5,-0.09", :radius => 20, :page => 1, :per_page => 1).first.fetch
20
+
21
+
22
+
23
+ ##############
24
+ ##
25
+ ## Timetables
26
+ ##
27
+ #response = ait.timetable_entries.find(response.first.timetables.first.id)
28
+ #response = response.first.timetables
29
+
30
+
31
+ #response = ait.sites.find(1)
32
+
33
+ puts response.inspect
34
+
35
+ #puts 'NOW UPDATING'
36
+
37
+ #puts response.fetch.inspect
38
+
data/spec/base_spec.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe ActiveInTime::Base do
5
+
6
+ it "should not pass through sites without a valid API key testing sites" do
7
+ response = lambda {invalid_api_client.sites.nearby(:ll => "51.5,-0.09", :radius => 20)}.should raise_error(ActiveInTime::InvalidAuth)
8
+ end
9
+
10
+ it "should not pass through timetables without a valid API key testing sites" do
11
+ response = lambda {invalid_api_client.timetables.find(1)}.should raise_error(ActiveInTime::InvalidAuth)
12
+ end
13
+
14
+ it "should not pass through timetable_entries without a valid API key testing sites" do
15
+ response = lambda {invalid_api_client.timetable_entries.find(1)}.should raise_error(ActiveInTime::InvalidAuth)
16
+ end
17
+
18
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveInTime::SiteProxy do
4
+
5
+ it "should raise an argument error withouta longitude and latitude param" do
6
+ response = lambda {valid_api_client.sites.nearby(:radius => 20)}.should raise_error(ArgumentError)
7
+ end
8
+
9
+ it "searching Central London should return a list of sites with valid longitude and latitude" do
10
+ response = valid_api_client.sites.nearby(:ll => "51.5,-0.09", :radius => 20)
11
+ response.is_a?([].class).should == true
12
+ response.size.should > 1
13
+ response.first.is_a?(ActiveInTime::Site).should == true
14
+ end
15
+
16
+ it "searching for a single site should bring back a single site with matching id" do
17
+ response = valid_api_client.sites.find(1)
18
+ response.is_a?(ActiveInTime::Site).should == true
19
+ response.id.should == 1
20
+ end
21
+
22
+
23
+ it "fetching updating information on a single site should bring back a single site with matching id" do
24
+ response = valid_api_client.sites.find(1)
25
+ site_id = response.id
26
+
27
+ #Use our conveinence method to fetch updated details
28
+ response = response.fetch
29
+ response.is_a?(ActiveInTime::Site).should == true
30
+ response.id.should == site_id
31
+
32
+
33
+ end
34
+
35
+
36
+ it "searching with pagination (1 per page) should bring back 1 result only" do
37
+ response = valid_api_client.sites.nearby(:ll => "51.5,-0.09", :radius => 20, :per_page => 1)
38
+ response.is_a?([].class).should == true
39
+ response.size.should == 1
40
+ response.first.is_a?(ActiveInTime::Site).should == true
41
+ end
42
+
43
+ it "searching with pagination (1 per page) should bring back 2 different results on 2 pages" do
44
+ response = valid_api_client.sites.nearby(:ll => "51.5,-0.09", :radius => 20, :per_page => 1, :page => 1)
45
+ first_site = response.first
46
+
47
+ response = valid_api_client.sites.nearby(:ll => "51.5,-0.09", :radius => 20, :per_page => 1, :page => 2)
48
+ second_site = response.first
49
+
50
+ first_site.should_not == second_site
51
+
52
+ end
53
+
54
+ it "should return facilities if they exist" do
55
+ response = valid_api_client.sites.find(1)
56
+ response.facilities.is_a?([].class).should == true
57
+ response.facilities.first.is_a?(ActiveInTime::Facility).should == true
58
+ end
59
+
60
+
61
+ it "if a facility exists it should bring back a facility type" do
62
+ response = valid_api_client.sites.find(1)
63
+
64
+ facility = response.facilities.first
65
+ facility.facility_type.is_a?(ActiveInTime::FacilityType).should == true
66
+
67
+ end
68
+
69
+
70
+
71
+
72
+ end
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'ait_connect' # and any other gems you need
5
+
6
+ RSpec.configure do |config|
7
+ # some (optional) config here
8
+
9
+ def invalid_api_client
10
+ ActiveInTime::Base.new("bollocks key","pizza is goood")
11
+ end
12
+
13
+ def valid_api_client
14
+ #ActiveInTime::Base.new("","") #production
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe ActiveInTime::TimetableProxy do
5
+
6
+ it "searching for a single site should bring back timetables in the json" do
7
+ response = valid_api_client.sites.find(1)
8
+ response.timetables.is_a?([].class).should == true
9
+ response.timetables.size > 0
10
+ response.timetables.first.is_a?(ActiveInTime::Timetable).should == true
11
+ end
12
+
13
+ it "searching for a single timetable should bring back a single timetables" do
14
+ response = valid_api_client.timetables.find(1)
15
+ response.is_a?(ActiveInTime::Timetable).should == true
16
+ response.id.should == 1
17
+ end
18
+
19
+ it "searching with pagination (1 per page) should bring back 1 result only" do
20
+ response = valid_api_client.sites.nearby(:ll => "51.5,-0.09", :radius => 20, :per_page => 1)
21
+ response.is_a?([].class).should == true
22
+ response.size.should == 1
23
+ response.first.is_a?(ActiveInTime::Site).should == true
24
+ end
25
+
26
+ it "searching with pagination (1 per page) should bring back 2 different results on 2 pages" do
27
+ response = valid_api_client.sites.nearby(:ll => "51.5,-0.09", :radius => 20, :per_page => 1, :page => 1)
28
+ first_site = response.first
29
+
30
+ response = valid_api_client.sites.nearby(:ll => "51.5,-0.09", :radius => 20, :per_page => 1, :page => 2)
31
+ second_site = response.first
32
+
33
+ first_site.should_not == second_site
34
+
35
+ end
36
+
37
+
38
+
39
+
40
+
41
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ait_connect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-04-25 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: typhoeus
16
- requirement: &70280661774780 !ruby/object:Gem::Requirement
16
+ requirement: &70097647504840 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70280661774780
24
+ version_requirements: *70097647504840
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: json
27
- requirement: &70280661774260 !ruby/object:Gem::Requirement
27
+ requirement: &70097647504320 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,14 +32,46 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70280661774260
35
+ version_requirements: *70097647504320
36
36
  description: Write a gem description
37
37
  email:
38
38
  - danmorgz@googlemail.com
39
39
  executables: []
40
40
  extensions: []
41
41
  extra_rdoc_files: []
42
- files: []
42
+ files:
43
+ - .DS_Store
44
+ - .gitignore
45
+ - .rspec
46
+ - Gemfile
47
+ - LICENSE
48
+ - Rakefile
49
+ - ait_connect.gemspec
50
+ - lib/.DS_Store
51
+ - lib/active_in_time.rb
52
+ - lib/ait_connect.rb
53
+ - lib/ait_connect/base.rb
54
+ - lib/ait_connect/facility.rb
55
+ - lib/ait_connect/facility_type.rb
56
+ - lib/ait_connect/facility_type_category.rb
57
+ - lib/ait_connect/instructor.rb
58
+ - lib/ait_connect/level.rb
59
+ - lib/ait_connect/site.rb
60
+ - lib/ait_connect/site_proxy.rb
61
+ - lib/ait_connect/term_type.rb
62
+ - lib/ait_connect/test.rb
63
+ - lib/ait_connect/timetable.rb
64
+ - lib/ait_connect/timetable_entry.rb
65
+ - lib/ait_connect/timetable_entry_proxy.rb
66
+ - lib/ait_connect/timetable_proxy.rb
67
+ - lib/ait_connect/timetable_session.rb
68
+ - lib/ait_connect/timetable_session_category.rb
69
+ - lib/ait_connect/version.rb
70
+ - lib/test.rb
71
+ - spec/base_spec.rb
72
+ - spec/site_proxy_spec.rb
73
+ - spec/spec_helper.rb
74
+ - spec/timetable_proxy_spec.rb
43
75
  homepage: ''
44
76
  licenses: []
45
77
  post_install_message:
@@ -64,4 +96,8 @@ rubygems_version: 1.8.6
64
96
  signing_key:
65
97
  specification_version: 3
66
98
  summary: Write a gem summary
67
- test_files: []
99
+ test_files:
100
+ - spec/base_spec.rb
101
+ - spec/site_proxy_spec.rb
102
+ - spec/spec_helper.rb
103
+ - spec/timetable_proxy_spec.rb