casual_helper 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/casual_helper.rb +165 -0
  2. metadata +63 -0
@@ -0,0 +1,165 @@
1
+ require 'rest-client'
2
+ require 'json'
3
+ require "casual_helper/version"
4
+
5
+ =begin
6
+
7
+ assumptions
8
+ * helper users require that error information be logged, not returned
9
+ * helper users won't ever deal with API URIs
10
+ * the SDK should implement ActiveRecord classes
11
+ * model classes should define variables and set them to default values
12
+
13
+ design decisions
14
+ * log errors and return nil
15
+
16
+ todo
17
+ * improve error handling
18
+ * handle each exception type differently
19
+
20
+ =end
21
+
22
+ JSON_CONTENT = {:content_type => :json, :accept => :json}
23
+
24
+ module CasualHelper
25
+ class Api
26
+
27
+ def initialize(api_server)
28
+ @api_server = api_server
29
+ end
30
+
31
+ attr_reader :api_server
32
+
33
+ # return true when all environment variables are set
34
+ def self.validate_env_variables(env_vars)
35
+ p "Enivonrment variables at runtime"
36
+ env_vars.all? {|env_var|
37
+ if ENV.has_key? env_var
38
+ p " #{env_var}=#{ENV[env_var]}"
39
+ true
40
+ else
41
+ p " #{env_var} is not set! The application will not start."
42
+ false
43
+ end
44
+ }
45
+ end
46
+
47
+ def get_drop(tap_id, drop_id)
48
+ return if are_invalid tap_id, drop_id
49
+ get "#{@api_server.to_s}/v0/taps/#{tap_id}/drops/#{drop_id}"
50
+ end
51
+
52
+ def add_tap(options)
53
+ return if are_invalid tap_id
54
+ post "#{@api_server.to_s}/v0/taps", options
55
+ end
56
+
57
+ def get_tap(tap_id)
58
+ return if are_invalid tap_id
59
+ get "#{@api_server.to_s}/v0/taps/#{tap_id}"
60
+ end
61
+
62
+ def get_taps
63
+ get "#{@api_server.to_s}/v0/taps"
64
+ end
65
+
66
+ def add_drop(tap_id, options)
67
+ return if are_invalid tap_id, options
68
+ post "#{@api_server.to_s}/v0/taps/#{tap_id.to_s}/drops", options
69
+ end
70
+
71
+ # authenticates the user with the API and returns their Casual profile
72
+ def auth_user(auth)
73
+ return if are_invalid auth
74
+ # note - differences from 'post': (1) no .to_json (2) return response hash
75
+ response_json = RestClient.post "#{@api_server.to_s}/v0/users/authenticate", auth, JSON_CONTENT
76
+ response = JSON.parse(response_json)
77
+ response['response']
78
+ rescue => e
79
+ log_error url, e
80
+ end
81
+
82
+ def get_user(id)
83
+ return if are_invalid id
84
+ get "#{@api_server.to_s}/v0/users/#{id}"
85
+ end
86
+
87
+ # add email address to signup list
88
+ # returns true if successful
89
+ def signup_email(email_address)
90
+ return if are_invalid email
91
+ post "#{@api_server.to_s}/v0/register", { :address => email_address.to_s }
92
+ end
93
+
94
+ def update_drop_feedback(tap_id, drop_id, update)
95
+ return if are_invalid tap_id, drop_id, update
96
+ post "#{@api_server.to_s}/v0/taps/#{tap_id}/drops/#{drop_id}/update", update
97
+ end
98
+
99
+ def lookup_alias(element_alias)
100
+ return if are_invalid element_alias
101
+ get "#{@api_server.to_s}/v0/aliases/#{element_alias}"
102
+ end
103
+
104
+ def update_location(drop_uri, longitude, latitude)
105
+ return if are_invalid drop_uri, longitude, latitude
106
+ put drop_uri, { :location => [longitude, latitude] }
107
+ end
108
+
109
+ def update_user(user_id, body)
110
+ return if are_invalid user_id, body
111
+ put "#{@api_server.to_s}/v0/users/#{user_id}", body.to_json
112
+ end
113
+
114
+ def add_comment_tap(tap_id, comment_string)
115
+ return if are_invalid tap_id, comment_string
116
+ post "#{@api_server.to_s}/v0/taps/#{tap_id}/update", { :feedback => { :comments => [comment_string] } }
117
+ end
118
+
119
+ private
120
+
121
+ def get(url)
122
+ response = RestClient.get url
123
+ parsed_response = JSON.parse(response)
124
+ parsed_response['response']
125
+ rescue => e
126
+ log_error url, e
127
+ end
128
+
129
+ def put(url, body)
130
+ response_json = RestClient.put url, body, JSON_CONTEN
131
+ response = JSON.parse(response_json)
132
+ response['meta']['code'] >= 200 && response['meta']['code'] <= 300
133
+ rescue => e
134
+ log_error url, e
135
+ end
136
+
137
+ def post(url, body)
138
+ response_json = RestClient.post url, body.to_json, JSON_CONTENT
139
+ response = JSON.parse(response_json)
140
+ response['meta']['code'] >= 200 && response['meta']['code'] <= 300
141
+ rescue => e
142
+ log_error url, e
143
+ end
144
+
145
+ def are_invalid(*params)
146
+ if params.nil? || params.any? {|param| param.nil? }
147
+ p "Error in #{calling_method} - one or more parameters is nil - #{params.to_json}"
148
+ true
149
+ else
150
+ false
151
+ end
152
+ end
153
+
154
+ # logs error with method name of caller
155
+ # always returns nil
156
+ def log_error(url, message)
157
+ calling_method = caller[1][/`.*'/][1..-2]
158
+ p "Error in #{self.class.name}.#{calling_method}"
159
+ p " url: #{url}"
160
+ p " message: #{message}"
161
+ nil
162
+ end
163
+
164
+ end
165
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: casual_helper
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - matthewspivey
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2012-09-20 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: Casual gem
22
+ email:
23
+ - spivey.mathew@gmail.com
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files: []
29
+
30
+ files:
31
+ - lib/casual_helper.rb
32
+ has_rdoc: true
33
+ homepage: ""
34
+ licenses: []
35
+
36
+ post_install_message:
37
+ rdoc_options: []
38
+
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ segments:
53
+ - 0
54
+ version: "0"
55
+ requirements: []
56
+
57
+ rubyforge_project:
58
+ rubygems_version: 1.3.6
59
+ signing_key:
60
+ specification_version: 3
61
+ summary: A casual gem, that probably isn't what you're looking for
62
+ test_files: []
63
+