login_radius 0.0.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/hash.rb +12 -12
- data/lib/login_radius.rb +12 -11
- data/lib/login_radius/exception.rb +4 -4
- data/lib/login_radius/messages.rb +41 -102
- data/lib/login_radius/related.rb +34 -0
- data/lib/login_radius/user_profile.rb +101 -102
- data/lib/login_radius/user_profile_getters.rb +151 -105
- data/lib/login_radius/version.rb +3 -3
- data/lib/string.rb +7 -8
- metadata +20 -91
- data/.DS_Store +0 -0
- data/.gitignore +0 -18
- data/Gemfile +0 -25
- data/LICENSE +0 -22
- data/LoginRadiusTestApp/.gitignore +0 -15
- data/LoginRadiusTestApp/Gemfile +0 -42
- data/LoginRadiusTestApp/Gemfile.lock +0 -136
- data/LoginRadiusTestApp/README.rdoc +0 -261
- data/LoginRadiusTestApp/Rakefile +0 -7
- data/LoginRadiusTestApp/app/assets/images/rails.png +0 -0
- data/LoginRadiusTestApp/app/assets/javascripts/application.js +0 -15
- data/LoginRadiusTestApp/app/assets/stylesheets/application.css +0 -13
- data/LoginRadiusTestApp/app/controllers/application_controller.rb +0 -17
- data/LoginRadiusTestApp/app/helpers/application_helper.rb +0 -2
- data/LoginRadiusTestApp/app/mailers/.gitkeep +0 -0
- data/LoginRadiusTestApp/app/models/.gitkeep +0 -0
- data/LoginRadiusTestApp/app/views/application/callback.html.erb +0 -1
- data/LoginRadiusTestApp/app/views/application/index.html.erb +0 -7
- data/LoginRadiusTestApp/app/views/layouts/application.html.erb +0 -14
- data/LoginRadiusTestApp/config.ru +0 -4
- data/LoginRadiusTestApp/config/application.rb +0 -62
- data/LoginRadiusTestApp/config/boot.rb +0 -6
- data/LoginRadiusTestApp/config/database.yml +0 -25
- data/LoginRadiusTestApp/config/environment.rb +0 -5
- data/LoginRadiusTestApp/config/environments/development.rb +0 -37
- data/LoginRadiusTestApp/config/environments/production.rb +0 -67
- data/LoginRadiusTestApp/config/environments/test.rb +0 -37
- data/LoginRadiusTestApp/config/initializers/backtrace_silencers.rb +0 -7
- data/LoginRadiusTestApp/config/initializers/inflections.rb +0 -15
- data/LoginRadiusTestApp/config/initializers/mime_types.rb +0 -5
- data/LoginRadiusTestApp/config/initializers/secret_token.rb +0 -7
- data/LoginRadiusTestApp/config/initializers/session_store.rb +0 -8
- data/LoginRadiusTestApp/config/initializers/wrap_parameters.rb +0 -14
- data/LoginRadiusTestApp/config/locales/en.yml +0 -5
- data/LoginRadiusTestApp/config/routes.rb +0 -61
- data/LoginRadiusTestApp/db/seeds.rb +0 -7
- data/LoginRadiusTestApp/lib/assets/.gitkeep +0 -0
- data/LoginRadiusTestApp/lib/tasks/.gitkeep +0 -0
- data/LoginRadiusTestApp/log/.gitkeep +0 -0
- data/LoginRadiusTestApp/public/404.html +0 -26
- data/LoginRadiusTestApp/public/422.html +0 -26
- data/LoginRadiusTestApp/public/500.html +0 -25
- data/LoginRadiusTestApp/public/favicon.ico +0 -0
- data/LoginRadiusTestApp/public/robots.txt +0 -5
- data/LoginRadiusTestApp/script/rails +0 -6
- data/LoginRadiusTestApp/test/fixtures/.gitkeep +0 -0
- data/LoginRadiusTestApp/test/functional/.gitkeep +0 -0
- data/LoginRadiusTestApp/test/integration/.gitkeep +0 -0
- data/LoginRadiusTestApp/test/performance/browsing_test.rb +0 -12
- data/LoginRadiusTestApp/test/test_helper.rb +0 -13
- data/LoginRadiusTestApp/test/unit/.gitkeep +0 -0
- data/LoginRadiusTestApp/vendor/assets/javascripts/.gitkeep +0 -0
- data/LoginRadiusTestApp/vendor/assets/stylesheets/.gitkeep +0 -0
- data/LoginRadiusTestApp/vendor/plugins/.gitkeep +0 -0
- data/README.md +0 -417
- data/Rakefile +0 -2
- data/login_radius.gemspec +0 -20
- data/test/.DS_Store +0 -0
- data/test/basic_async_test.rb +0 -29
- data/test/unit/.DS_Store +0 -0
- data/test/unit/base_test.rb +0 -11
- data/test/unit/user_profile_test.rb +0 -68
@@ -1,7 +0,0 @@
|
|
1
|
-
# This file should contain all the record creation needed to seed the database with its default values.
|
2
|
-
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
|
3
|
-
#
|
4
|
-
# Examples:
|
5
|
-
#
|
6
|
-
# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
|
7
|
-
# Mayor.create(name: 'Emanuel', city: cities.first)
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,26 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<title>The page you were looking for doesn't exist (404)</title>
|
5
|
-
<style type="text/css">
|
6
|
-
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
7
|
-
div.dialog {
|
8
|
-
width: 25em;
|
9
|
-
padding: 0 4em;
|
10
|
-
margin: 4em auto 0 auto;
|
11
|
-
border: 1px solid #ccc;
|
12
|
-
border-right-color: #999;
|
13
|
-
border-bottom-color: #999;
|
14
|
-
}
|
15
|
-
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
16
|
-
</style>
|
17
|
-
</head>
|
18
|
-
|
19
|
-
<body>
|
20
|
-
<!-- This file lives in public/404.html -->
|
21
|
-
<div class="dialog">
|
22
|
-
<h1>The page you were looking for doesn't exist.</h1>
|
23
|
-
<p>You may have mistyped the address or the page may have moved.</p>
|
24
|
-
</div>
|
25
|
-
</body>
|
26
|
-
</html>
|
@@ -1,26 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<title>The change you wanted was rejected (422)</title>
|
5
|
-
<style type="text/css">
|
6
|
-
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
7
|
-
div.dialog {
|
8
|
-
width: 25em;
|
9
|
-
padding: 0 4em;
|
10
|
-
margin: 4em auto 0 auto;
|
11
|
-
border: 1px solid #ccc;
|
12
|
-
border-right-color: #999;
|
13
|
-
border-bottom-color: #999;
|
14
|
-
}
|
15
|
-
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
16
|
-
</style>
|
17
|
-
</head>
|
18
|
-
|
19
|
-
<body>
|
20
|
-
<!-- This file lives in public/422.html -->
|
21
|
-
<div class="dialog">
|
22
|
-
<h1>The change you wanted was rejected.</h1>
|
23
|
-
<p>Maybe you tried to change something you didn't have access to.</p>
|
24
|
-
</div>
|
25
|
-
</body>
|
26
|
-
</html>
|
@@ -1,25 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<title>We're sorry, but something went wrong (500)</title>
|
5
|
-
<style type="text/css">
|
6
|
-
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
7
|
-
div.dialog {
|
8
|
-
width: 25em;
|
9
|
-
padding: 0 4em;
|
10
|
-
margin: 4em auto 0 auto;
|
11
|
-
border: 1px solid #ccc;
|
12
|
-
border-right-color: #999;
|
13
|
-
border-bottom-color: #999;
|
14
|
-
}
|
15
|
-
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
16
|
-
</style>
|
17
|
-
</head>
|
18
|
-
|
19
|
-
<body>
|
20
|
-
<!-- This file lives in public/500.html -->
|
21
|
-
<div class="dialog">
|
22
|
-
<h1>We're sorry, but something went wrong.</h1>
|
23
|
-
</div>
|
24
|
-
</body>
|
25
|
-
</html>
|
File without changes
|
@@ -1,6 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
|
-
|
4
|
-
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
5
|
-
require File.expand_path('../../config/boot', __FILE__)
|
6
|
-
require 'rails/commands'
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,12 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'rails/performance_test_help'
|
3
|
-
|
4
|
-
class BrowsingTest < ActionDispatch::PerformanceTest
|
5
|
-
# Refer to the documentation for all available options
|
6
|
-
# self.profile_options = { :runs => 5, :metrics => [:wall_time, :memory]
|
7
|
-
# :output => 'tmp/performance', :formats => [:flat] }
|
8
|
-
|
9
|
-
def test_homepage
|
10
|
-
get '/'
|
11
|
-
end
|
12
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
ENV["RAILS_ENV"] = "test"
|
2
|
-
require File.expand_path('../../config/environment', __FILE__)
|
3
|
-
require 'rails/test_help'
|
4
|
-
|
5
|
-
class ActiveSupport::TestCase
|
6
|
-
# Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
|
7
|
-
#
|
8
|
-
# Note: You'll currently still have to declare fixtures explicitly in integration tests
|
9
|
-
# -- they do not yet inherit this setting
|
10
|
-
fixtures :all
|
11
|
-
|
12
|
-
# Add more helper methods to be used by all tests here...
|
13
|
-
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/README.md
DELETED
@@ -1,417 +0,0 @@
|
|
1
|
-
# LoginRadius
|
2
|
-
|
3
|
-
Ruby wrapper for the LoginRadius API. Get social graph information and send messages using LoginRadius'
|
4
|
-
many social network clients!
|
5
|
-
|
6
|
-
Optional Asynchronous EventMachine friendly option!
|
7
|
-
|
8
|
-
## Installation
|
9
|
-
|
10
|
-
Add this line to your application's Gemfile:
|
11
|
-
|
12
|
-
gem 'login_radius'
|
13
|
-
|
14
|
-
And then execute:
|
15
|
-
|
16
|
-
$ bundle
|
17
|
-
|
18
|
-
Or install it yourself as:
|
19
|
-
|
20
|
-
$ gem install login_radius
|
21
|
-
|
22
|
-
## Usage
|
23
|
-
|
24
|
-
Take a peek:
|
25
|
-
|
26
|
-
@user_profile = LoginRadius::UserProfile.new({
|
27
|
-
:token => "TOKEN",
|
28
|
-
:secret => "SECRET",
|
29
|
-
:async => false #Set to true if using EventMachine driven frameworks(must use Em Synchrony)
|
30
|
-
})
|
31
|
-
@user_profile.login
|
32
|
-
my_contacts = @user_profile.contacts
|
33
|
-
|
34
|
-
That's right, folks. It's that simple. In order to get access to LoginRadius API, you only
|
35
|
-
need to create a UserProfile object with a user's login token and your apps secret, and login.
|
36
|
-
|
37
|
-
### How to get a token and actually make a client
|
38
|
-
|
39
|
-
On the LoginRadius website, you are able to enter your own callback URL for your app. You will need
|
40
|
-
to setup a route on whatever framework you use, maybe "/callback." Then, get the gem forward(www.forwardhq.com)
|
41
|
-
and use it to set up a public web address for your localhost server. Then, you can enter the callback on LoginRadius
|
42
|
-
as https://jordanmatthew.fwd.wf/callback, for instance.
|
43
|
-
|
44
|
-
Paste their example login stuff onto your index page, and then enter your FB/Twitter credentials on their site.
|
45
|
-
|
46
|
-
Now you're ready to go with testing!
|
47
|
-
|
48
|
-
When LoginRadius hits your callback after a user logs in, you'll see parameters like this:
|
49
|
-
|
50
|
-
Parameters: {"token"=>"yourtokenhere"}
|
51
|
-
|
52
|
-
This token is the token used in the above example. This is what you'll need to get your user's profile.
|
53
|
-
Just paste it into the code above, and you can immediately grab their user profile on the callback,
|
54
|
-
login, and grab their contacts.
|
55
|
-
|
56
|
-
### Some examples
|
57
|
-
|
58
|
-
Below is just code exemplifying some of the more interesting methods and what they return.
|
59
|
-
Note if you have a user authed via facebook, and not twitter, methods like
|
60
|
-
|
61
|
-
@user_profile.twitter_timeline
|
62
|
-
=> false
|
63
|
-
|
64
|
-
Will return false, indicating you don't have access to that stream.
|
65
|
-
|
66
|
-
#### Facebook Stuff
|
67
|
-
|
68
|
-
@user_profile.facebook_groups
|
69
|
-
=> [{:id=>"11111", :name=>"Name"},
|
70
|
-
{:id=>"11111", :name=>"Name"},
|
71
|
-
{:id=>"11111", :name=>"Name"},
|
72
|
-
{:id=>"11111", :name=>"Name"},
|
73
|
-
{:id=>"11111", :name=>"Name"},
|
74
|
-
{:id=>"11111", :name=>"Name"},
|
75
|
-
{:id=>"11111", :name=>"Name"},
|
76
|
-
{:id=>"11111", :name=>"Name"},
|
77
|
-
{:id=>"11111", :name=>"Name"}]
|
78
|
-
|
79
|
-
@user_profile.facebook_groups
|
80
|
-
=> [{:id=>"11111", :name=>"Name"},
|
81
|
-
{:id=>"11111", :name=>"Name"}]
|
82
|
-
|
83
|
-
|
84
|
-
@user_profile.facebook_events
|
85
|
-
=> [{:id=>"11111",
|
86
|
-
:name=>"Name",
|
87
|
-
:start_time=>"3/14/2015 9:00:00 AM",
|
88
|
-
:rsvp_status=>"attending",
|
89
|
-
:location=>"Across the world!"}]
|
90
|
-
|
91
|
-
And, finally, you can also make facebook posts:
|
92
|
-
|
93
|
-
params = {
|
94
|
-
:title => "Testing",
|
95
|
-
:url => "www.loginradius.com",
|
96
|
-
:status => "Wizzup",
|
97
|
-
:caption => "Testly",
|
98
|
-
:description => "Testing"
|
99
|
-
}
|
100
|
-
@user_profile.make_facebook_post(params)
|
101
|
-
=> true
|
102
|
-
|
103
|
-
Note that as of publishing, the :to option on facebook params does not work. You can't post to
|
104
|
-
other people's walls.
|
105
|
-
|
106
|
-
#### LinkedIn Stuff
|
107
|
-
|
108
|
-
To send messages over linked in:
|
109
|
-
|
110
|
-
@user_profile.send_linked_in_message(@user_profile.contacts.first[:id], "Testing", "This is a test.")
|
111
|
-
=> true
|
112
|
-
|
113
|
-
Notice how I grabbed my first contact and used his :id property.
|
114
|
-
|
115
|
-
Also, you can grab a user's linked in companies:
|
116
|
-
|
117
|
-
@user_profile.linked_in_companies
|
118
|
-
=> [{:id=>11111, :name=>"Name"}]
|
119
|
-
|
120
|
-
#### Twitter Stuff
|
121
|
-
|
122
|
-
To send messages over twitter:
|
123
|
-
|
124
|
-
@user_profile.send_linked_in_message(@user_profile.contacts.first[:id], "Testing", "This is a test.")
|
125
|
-
=> true
|
126
|
-
|
127
|
-
Notice how I grabbed my first contact and used his :id property.
|
128
|
-
|
129
|
-
Grab your timelines and mentions:
|
130
|
-
|
131
|
-
@user_profile.twitter_timeline
|
132
|
-
=> [{:id=>"11111",
|
133
|
-
:text=>"Stuff",
|
134
|
-
:date_time=>"5/20/2013 4:53:52 PM",
|
135
|
-
:likes=>0,
|
136
|
-
:place=>"",
|
137
|
-
:source=>
|
138
|
-
"<a href=\"http://twitterfeed.com\" rel=\"nofollow\">twitterfeed</a>",
|
139
|
-
:image_url=>nil,
|
140
|
-
:link_url=>nil,
|
141
|
-
:name=>"Name"}]
|
142
|
-
|
143
|
-
@user_profile.twitter_mentions
|
144
|
-
=> [{:id=>"11111",
|
145
|
-
:text=>"Stuff",
|
146
|
-
:date_time=>"3/31/2013 7:54:10 PM",
|
147
|
-
:likes=>0,
|
148
|
-
:place=>"",
|
149
|
-
:source=>"web",
|
150
|
-
:image_url=>nil,
|
151
|
-
:link_url=>nil,
|
152
|
-
:name=>"Name"}]
|
153
|
-
|
154
|
-
#### Social Network Contacts
|
155
|
-
|
156
|
-
Note this is all the contacts from every social network the user is connected to.
|
157
|
-
|
158
|
-
@user_profile.contacts
|
159
|
-
=> [{:name=>"Name",
|
160
|
-
:email_id=>"",
|
161
|
-
:phone_number=>"",
|
162
|
-
:id=>"11111",
|
163
|
-
:profile_url=>nil,
|
164
|
-
:image_url=>nil,
|
165
|
-
:status=>nil,
|
166
|
-
:industry=>nil,
|
167
|
-
:country=>nil,
|
168
|
-
:gender=>nil}]
|
169
|
-
|
170
|
-
#### User Profile Stuff
|
171
|
-
|
172
|
-
When you login, the API returns a hash of user profile information, which is then turned into methods
|
173
|
-
on the LoginRadius::UserProfile object for your accessing pleasure. A quick call to methods will show this.
|
174
|
-
|
175
|
-
@user_profile.methods
|
176
|
-
=>[:id,
|
177
|
-
:provider,
|
178
|
-
:prefix,
|
179
|
-
:first_name,
|
180
|
-
:middle_name,
|
181
|
-
:last_name,
|
182
|
-
:suffix,
|
183
|
-
:full_name,
|
184
|
-
:nick_name,
|
185
|
-
:profile_name,
|
186
|
-
:birth_date,
|
187
|
-
:gender,
|
188
|
-
:website,
|
189
|
-
:email,
|
190
|
-
:country,
|
191
|
-
...]
|
192
|
-
|
193
|
-
Calling .methods on a user profile right after a successful login call will reveal these.
|
194
|
-
For more information, please read the section in caveats on the matter, as it's a bit esoteric.
|
195
|
-
|
196
|
-
## Caveats
|
197
|
-
|
198
|
-
This section is for the nitpickers. It's got notes about the finer pickings of this API for those
|
199
|
-
who are wondering, but is not strictly necessary reading.
|
200
|
-
|
201
|
-
### The Bang Methods
|
202
|
-
|
203
|
-
When authenticated, a method like contacts will return
|
204
|
-
|
205
|
-
@user_profile.authenticated?
|
206
|
-
=> true
|
207
|
-
@user_profile.contacts
|
208
|
-
=> [{:name=>"Name",
|
209
|
-
:email_id=>"",
|
210
|
-
:phone_number=>"",
|
211
|
-
:id=>"11111",
|
212
|
-
:profile_url=>nil,
|
213
|
-
:image_url=>nil,
|
214
|
-
:status=>nil,
|
215
|
-
:industry=>nil,
|
216
|
-
:country=>nil,
|
217
|
-
:gender=>nil},
|
218
|
-
...
|
219
|
-
|
220
|
-
When unauthenticated, a method like contacts will return false.
|
221
|
-
|
222
|
-
@user_profile.authenticated?
|
223
|
-
=> false
|
224
|
-
@user_profile.contacts
|
225
|
-
=> false
|
226
|
-
|
227
|
-
However, if you want to be a bit more flammable, try using contacts!, the bang version. It still returns
|
228
|
-
the same results when authed, but when unauthed, will actually raise a LoginRadius::Exception.
|
229
|
-
|
230
|
-
### The LoginRadius::UserProfile object before and after login
|
231
|
-
|
232
|
-
Once you've got a valid user_profile, you have many methods available to you. Let's quickly take a look
|
233
|
-
at the methods in a LoginRadius::UserProfile object that hasn't yet been authenticated:
|
234
|
-
|
235
|
-
@user_profile.authenticated?
|
236
|
-
=> false
|
237
|
-
|
238
|
-
@user_profile.methods - Object.new.methods
|
239
|
-
=> [:secret,
|
240
|
-
:secret=,
|
241
|
-
:token,
|
242
|
-
:token=,
|
243
|
-
:async,
|
244
|
-
:async=,
|
245
|
-
:guid_valid?,
|
246
|
-
:authenticated?,
|
247
|
-
:call_api,
|
248
|
-
:send_twitter_message,
|
249
|
-
:send_linkedin_message,
|
250
|
-
:make_facebook_post,
|
251
|
-
:login!,
|
252
|
-
:login,
|
253
|
-
:twitter_mentions!,
|
254
|
-
:twitter_mentions,
|
255
|
-
:twitter_timeline!,
|
256
|
-
:twitter_timeline,
|
257
|
-
:linked_in_companies!,
|
258
|
-
:linked_in_companies,
|
259
|
-
:contacts!,
|
260
|
-
:contacts,
|
261
|
-
:facebook_groups!,
|
262
|
-
:facebook_groups,
|
263
|
-
:facebook_posts!,
|
264
|
-
:facebook_posts,
|
265
|
-
:facebook_events!,
|
266
|
-
:facebook_events]
|
267
|
-
|
268
|
-
Notice we've got a lot of stuff we can access. But we're not yet authenticated. Running login and then checking
|
269
|
-
the new methods created, we see we have much more than before!
|
270
|
-
|
271
|
-
@user_profile.login
|
272
|
-
=> true
|
273
|
-
@user_profile.authenticated?
|
274
|
-
=> true
|
275
|
-
@user_profile.methods - Object.new.methods
|
276
|
-
=> [:id,
|
277
|
-
:provider,
|
278
|
-
:prefix,
|
279
|
-
:first_name,
|
280
|
-
:middle_name,
|
281
|
-
:last_name,
|
282
|
-
:suffix,
|
283
|
-
:full_name,
|
284
|
-
:nick_name,
|
285
|
-
:profile_name,
|
286
|
-
:birth_date,
|
287
|
-
:gender,
|
288
|
-
:website,
|
289
|
-
:email,
|
290
|
-
:country,
|
291
|
-
:thumbnail_image_url,
|
292
|
-
:image_url,
|
293
|
-
:favicon,
|
294
|
-
:profile_url,
|
295
|
-
:home_town,
|
296
|
-
:state,
|
297
|
-
:city,
|
298
|
-
:industry,
|
299
|
-
:about,
|
300
|
-
:time_zone,
|
301
|
-
:local_language,
|
302
|
-
:language,
|
303
|
-
:verified,
|
304
|
-
:updated_time,
|
305
|
-
:positions,
|
306
|
-
:educations,
|
307
|
-
:phone_numbers,
|
308
|
-
:im_accounts,
|
309
|
-
:addresses,
|
310
|
-
:main_address,
|
311
|
-
:created,
|
312
|
-
:local_city,
|
313
|
-
:profile_city,
|
314
|
-
:local_country,
|
315
|
-
:profile_country,
|
316
|
-
:relationship_status,
|
317
|
-
:quota,
|
318
|
-
:interested_in,
|
319
|
-
:interests,
|
320
|
-
:religion,
|
321
|
-
:political,
|
322
|
-
:sports,
|
323
|
-
:inspirational_people,
|
324
|
-
:https_image_url,
|
325
|
-
:followers_count,
|
326
|
-
:friends_count,
|
327
|
-
:is_geo_enabled,
|
328
|
-
:total_statuses_count,
|
329
|
-
:associations,
|
330
|
-
:num_recommenders,
|
331
|
-
:honors,
|
332
|
-
:skills,
|
333
|
-
:current_status,
|
334
|
-
:certifications,
|
335
|
-
:courses,
|
336
|
-
:volunteer,
|
337
|
-
:recommendations_received,
|
338
|
-
:languages,
|
339
|
-
:public_repository,
|
340
|
-
:hireable,
|
341
|
-
:repository_url,
|
342
|
-
:age,
|
343
|
-
:patents,
|
344
|
-
:favorite_things,
|
345
|
-
:professional_headline,
|
346
|
-
:provider_access_credential,
|
347
|
-
:secret,
|
348
|
-
:secret=,
|
349
|
-
:token,
|
350
|
-
:token=,
|
351
|
-
:async,
|
352
|
-
:async=,
|
353
|
-
:guid_valid?,
|
354
|
-
:authenticated?,
|
355
|
-
:call_api,
|
356
|
-
:send_twitter_message,
|
357
|
-
:send_linkedin_message,
|
358
|
-
:make_facebook_post,
|
359
|
-
:login!,
|
360
|
-
:login,
|
361
|
-
:twitter_mentions!,
|
362
|
-
:twitter_mentions,
|
363
|
-
:twitter_timeline!,
|
364
|
-
:twitter_timeline,
|
365
|
-
:linked_in_companies!,
|
366
|
-
:linked_in_companies,
|
367
|
-
:contacts!,
|
368
|
-
:contacts,
|
369
|
-
:facebook_groups!,
|
370
|
-
:facebook_groups,
|
371
|
-
:facebook_posts!,
|
372
|
-
:facebook_posts,
|
373
|
-
:facebook_events!,
|
374
|
-
:facebook_events]
|
375
|
-
|
376
|
-
Holy moly we got a whole bunch of new methods! That's because on login, all the user profile information
|
377
|
-
returned by the API is turned into dynamically generated GETTERs on the object that you can then use later.
|
378
|
-
|
379
|
-
### Running the tests in test/unit
|
380
|
-
|
381
|
-
The base_test.rb file isn't meant to be run, it is inherited by user_profile_test.rb. In that file
|
382
|
-
you'll notice the lines at the top of the file:
|
383
|
-
|
384
|
-
TOKEN = "yourtokenhere"
|
385
|
-
SECRET = "yoursecrethere"
|
386
|
-
|
387
|
-
These are meant to be changed to your API secret and some user's token. What I do is I run a dummy
|
388
|
-
rails app locally and use the forward gem so that it can receive requests from the internet. Then I setup
|
389
|
-
a callback route and login page on the app and use it to have LoginRadius ping me with tokens that I can
|
390
|
-
paste into this test file.
|
391
|
-
|
392
|
-
*Beware, LoginRadius invalidates any token after 15 minutes, so during testing, you'll have to repeat the token
|
393
|
-
creation A LOT*
|
394
|
-
|
395
|
-
To run the tests, do:
|
396
|
-
|
397
|
-
bundle exec ruby -Itest test/unit/user_profile_test.rb
|
398
|
-
|
399
|
-
If you login with a facebook user, for instance, you'll notice all the twitter/linked in tests failing.
|
400
|
-
This is to be expected, you don't have access to those streams!
|
401
|
-
|
402
|
-
### Evented Frameworks
|
403
|
-
|
404
|
-
I've built this gem to work with frameworks like Cramp. I've done a little bit of testing by creating
|
405
|
-
a basic event loop script in basic_async_test.rb in the test folder, which you can run to see that
|
406
|
-
things work there.
|
407
|
-
|
408
|
-
I've also done some AB testing using a Cramp framework elsewhere, but you should take caution in using
|
409
|
-
this gem in evented frameworks and make sure to use apache bench to test it for nonblocking yourself.
|
410
|
-
|
411
|
-
## Contributing
|
412
|
-
|
413
|
-
1. Fork it
|
414
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
415
|
-
3. Commit your changes (`git commit -am 'Added some feature'`)
|
416
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
417
|
-
5. Create new Pull Request
|