facebook-stub 0.0.1.3 → 0.0.1.4
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.
- data/facebook-stub.js +78 -9
- data/lib/facebook-stub/version.rb +1 -1
- data/src/facebook.js +78 -9
- metadata +8 -8
data/facebook-stub.js
CHANGED
@@ -9,18 +9,35 @@
|
|
9
9
|
state('appId', data.appId);
|
10
10
|
}
|
11
11
|
|
12
|
+
function missingPermissions(desired){
|
13
|
+
var missing = [];
|
14
|
+
var perms = getStatus('standard').perms.split(',');
|
15
|
+
for (i=0; i<desired.length; i++){
|
16
|
+
if (perms.indexOf(desired[i]) == -1) {
|
17
|
+
missing.push(desired[i]);
|
18
|
+
}
|
19
|
+
}
|
20
|
+
return missing;
|
21
|
+
}
|
22
|
+
|
12
23
|
// login
|
13
24
|
function login(callback, options) {
|
14
25
|
if (calledBeforeInit('login')) return;
|
15
26
|
if (FBWorld.state('loggedIn')) {
|
16
27
|
console.log('FB.login() called when user is already connected.');
|
17
28
|
if (FBWorld.state('connected')) {
|
18
|
-
|
29
|
+
var missing = missingPermissions(options.scope.split(','));
|
30
|
+
if (missing.length === 0){
|
31
|
+
callback(getStatus('standard'));
|
32
|
+
}else{
|
33
|
+
options.missing_perms = missing;
|
34
|
+
promptToAddPermissions(options, callback);
|
35
|
+
}
|
19
36
|
}else{
|
20
|
-
promptToConnect(options, callback)
|
37
|
+
promptToConnect(options, callback);
|
21
38
|
}
|
22
39
|
}else{
|
23
|
-
promptToLogin(options, callback)
|
40
|
+
promptToLogin(options, callback);
|
24
41
|
}
|
25
42
|
}
|
26
43
|
|
@@ -29,8 +46,7 @@
|
|
29
46
|
FBWorld.beingPromptedToLogin = true;
|
30
47
|
FBWorld.beingPromptedToLoginOptions = options;
|
31
48
|
FBWorld.beingPromptedToLoginCallback = callback;
|
32
|
-
}
|
33
|
-
|
49
|
+
}
|
34
50
|
|
35
51
|
// simulates resolving a login prompt in one of three ways
|
36
52
|
function resolveLoginPrompt(successfull, facebook_uid) {
|
@@ -59,7 +75,7 @@
|
|
59
75
|
FBWorld.notLoggedIn();
|
60
76
|
callback(getStatus());
|
61
77
|
}
|
62
|
-
}
|
78
|
+
}
|
63
79
|
|
64
80
|
function successfullyLogin(facebook_uid){
|
65
81
|
resolveLoginPrompt(true, facebook_uid);
|
@@ -106,18 +122,61 @@
|
|
106
122
|
|
107
123
|
function acceptPromptToConnect() {
|
108
124
|
resolvePromptToConnect(true);
|
109
|
-
}
|
125
|
+
}
|
110
126
|
|
111
127
|
function denyPromptToConnect() {
|
112
128
|
resolvePromptToConnect(false);
|
113
|
-
}
|
129
|
+
}
|
114
130
|
|
115
131
|
function cancelPromptToConnect() {
|
116
132
|
resolvePromptToConnect(false);
|
117
|
-
}
|
133
|
+
}
|
118
134
|
|
119
135
|
|
120
136
|
|
137
|
+
function promptToAddPermissions(options, callback){
|
138
|
+
FBWorld.beingPromptedToAddPermissions = true;
|
139
|
+
FBWorld.beingPromptedToAddPermissionsOptions = options;
|
140
|
+
FBWorld.beingPromptedToAddPermissionsCallback = callback;
|
141
|
+
}
|
142
|
+
|
143
|
+
function beingPromptedToAddThesePermissions(permissions){
|
144
|
+
// sort and stringify permissions arrays to make them easier to compare. maybe not fast, but succinct
|
145
|
+
return FBWorld.beingPromptedToAddPermissions && FBWorld.beingPromptedToAddPermissionsOptions.missing_perms.sort().toString() == permissions.split(',').sort().toString();
|
146
|
+
}
|
147
|
+
|
148
|
+
function resolvePromptToAddPermissions(approved, permissions) {
|
149
|
+
if (!FBWorld.beingPromptedToAddPermissions) throw "you are not being prompted to add permissions";
|
150
|
+
var
|
151
|
+
options = FBWorld.beingPromptedToAddPermissionsOptions,
|
152
|
+
callback = FBWorld.beingPromptedToAddPermissionsCallback;
|
153
|
+
|
154
|
+
// reset the FBWorld state
|
155
|
+
FBWorld.beingPromptedToAddPermissions = false;
|
156
|
+
FBWorld.beingPromptedToAddPermissionsOptions = undefined;
|
157
|
+
FBWorld.beingPromptedToAddPermissionsCallback = undefined;
|
158
|
+
|
159
|
+
if (approved){
|
160
|
+
FBWorld.state('perms', 'standard', permissions);
|
161
|
+
}
|
162
|
+
callback(getStatus('standard'));
|
163
|
+
}
|
164
|
+
|
165
|
+
function acceptPromptToAddPermissions(add) {
|
166
|
+
var perms = getStatus("standard").perms;
|
167
|
+
var separator = perms.length ? ',' : '';
|
168
|
+
resolvePromptToAddPermissions(true, perms + separator + add);
|
169
|
+
}
|
170
|
+
|
171
|
+
function denyPromptToAddPermissions() {
|
172
|
+
resolvePromptToAddPermissions(false);
|
173
|
+
}
|
174
|
+
|
175
|
+
function cancelPromptToAddPermissions() {
|
176
|
+
resolvePromptToAddPermissions(false);
|
177
|
+
}
|
178
|
+
|
179
|
+
|
121
180
|
|
122
181
|
|
123
182
|
function logout(callback) {
|
@@ -196,6 +255,7 @@
|
|
196
255
|
function loggedIn() {
|
197
256
|
createConnectedCookie();
|
198
257
|
FBWorld.state('loggedIn', true);
|
258
|
+
FBWorld.state('perms', 'standard', '');
|
199
259
|
return true;
|
200
260
|
}
|
201
261
|
|
@@ -309,6 +369,15 @@
|
|
309
369
|
denyPromptToConnect : denyPromptToConnect,
|
310
370
|
cancelPromptToConnect : cancelPromptToConnect,
|
311
371
|
|
372
|
+
// adding permissions
|
373
|
+
beingPromptedToAddPermissions : false,
|
374
|
+
beingPromptedToAddThesePermissions : beingPromptedToAddThesePermissions,
|
375
|
+
beingPromptedToAddPermissionsOptions : undefined,
|
376
|
+
beingPromptedToAddPermissionsCallback : undefined,
|
377
|
+
acceptPromptToAddPermissions : acceptPromptToAddPermissions,
|
378
|
+
denyPromptToAddPermissions : denyPromptToAddPermissions,
|
379
|
+
cancelPromptToAddPermissions : cancelPromptToAddPermissions,
|
380
|
+
|
312
381
|
//sharing
|
313
382
|
beingPromptedToShare : false,
|
314
383
|
beingPromptedToShareOptions : undefined,
|
data/src/facebook.js
CHANGED
@@ -9,18 +9,35 @@
|
|
9
9
|
state('appId', data.appId);
|
10
10
|
}
|
11
11
|
|
12
|
+
function missingPermissions(desired){
|
13
|
+
var missing = [];
|
14
|
+
var perms = getStatus('standard').perms.split(',');
|
15
|
+
for (i=0; i<desired.length; i++){
|
16
|
+
if (perms.indexOf(desired[i]) == -1) {
|
17
|
+
missing.push(desired[i]);
|
18
|
+
}
|
19
|
+
}
|
20
|
+
return missing;
|
21
|
+
}
|
22
|
+
|
12
23
|
// login
|
13
24
|
function login(callback, options) {
|
14
25
|
if (calledBeforeInit('login')) return;
|
15
26
|
if (FBWorld.state('loggedIn')) {
|
16
27
|
console.log('FB.login() called when user is already connected.');
|
17
28
|
if (FBWorld.state('connected')) {
|
18
|
-
|
29
|
+
var missing = missingPermissions(options.scope.split(','));
|
30
|
+
if (missing.length === 0){
|
31
|
+
callback(getStatus('standard'));
|
32
|
+
}else{
|
33
|
+
options.missing_perms = missing;
|
34
|
+
promptToAddPermissions(options, callback);
|
35
|
+
}
|
19
36
|
}else{
|
20
|
-
promptToConnect(options, callback)
|
37
|
+
promptToConnect(options, callback);
|
21
38
|
}
|
22
39
|
}else{
|
23
|
-
promptToLogin(options, callback)
|
40
|
+
promptToLogin(options, callback);
|
24
41
|
}
|
25
42
|
}
|
26
43
|
|
@@ -29,8 +46,7 @@
|
|
29
46
|
FBWorld.beingPromptedToLogin = true;
|
30
47
|
FBWorld.beingPromptedToLoginOptions = options;
|
31
48
|
FBWorld.beingPromptedToLoginCallback = callback;
|
32
|
-
}
|
33
|
-
|
49
|
+
}
|
34
50
|
|
35
51
|
// simulates resolving a login prompt in one of three ways
|
36
52
|
function resolveLoginPrompt(successfull, facebook_uid) {
|
@@ -59,7 +75,7 @@
|
|
59
75
|
FBWorld.notLoggedIn();
|
60
76
|
callback(getStatus());
|
61
77
|
}
|
62
|
-
}
|
78
|
+
}
|
63
79
|
|
64
80
|
function successfullyLogin(facebook_uid){
|
65
81
|
resolveLoginPrompt(true, facebook_uid);
|
@@ -106,16 +122,59 @@
|
|
106
122
|
|
107
123
|
function acceptPromptToConnect() {
|
108
124
|
resolvePromptToConnect(true);
|
109
|
-
}
|
125
|
+
}
|
110
126
|
|
111
127
|
function denyPromptToConnect() {
|
112
128
|
resolvePromptToConnect(false);
|
113
|
-
}
|
129
|
+
}
|
114
130
|
|
115
131
|
function cancelPromptToConnect() {
|
116
132
|
resolvePromptToConnect(false);
|
117
|
-
}
|
133
|
+
}
|
134
|
+
|
135
|
+
|
118
136
|
|
137
|
+
function promptToAddPermissions(options, callback){
|
138
|
+
FBWorld.beingPromptedToAddPermissions = true;
|
139
|
+
FBWorld.beingPromptedToAddPermissionsOptions = options;
|
140
|
+
FBWorld.beingPromptedToAddPermissionsCallback = callback;
|
141
|
+
}
|
142
|
+
|
143
|
+
function beingPromptedToAddThesePermissions(permissions){
|
144
|
+
// sort and stringify permissions arrays to make them easier to compare. maybe not fast, but succinct
|
145
|
+
return FBWorld.beingPromptedToAddPermissions && FBWorld.beingPromptedToAddPermissionsOptions.missing_perms.sort().toString() == permissions.split(',').sort().toString();
|
146
|
+
}
|
147
|
+
|
148
|
+
function resolvePromptToAddPermissions(approved, permissions) {
|
149
|
+
if (!FBWorld.beingPromptedToAddPermissions) throw "you are not being prompted to add permissions";
|
150
|
+
var
|
151
|
+
options = FBWorld.beingPromptedToAddPermissionsOptions,
|
152
|
+
callback = FBWorld.beingPromptedToAddPermissionsCallback;
|
153
|
+
|
154
|
+
// reset the FBWorld state
|
155
|
+
FBWorld.beingPromptedToAddPermissions = false;
|
156
|
+
FBWorld.beingPromptedToAddPermissionsOptions = undefined;
|
157
|
+
FBWorld.beingPromptedToAddPermissionsCallback = undefined;
|
158
|
+
|
159
|
+
if (approved){
|
160
|
+
FBWorld.state('perms', 'standard', permissions);
|
161
|
+
}
|
162
|
+
callback(getStatus('standard'));
|
163
|
+
}
|
164
|
+
|
165
|
+
function acceptPromptToAddPermissions(add) {
|
166
|
+
var perms = getStatus("standard").perms;
|
167
|
+
var separator = perms.length ? ',' : '';
|
168
|
+
resolvePromptToAddPermissions(true, perms + separator + add);
|
169
|
+
}
|
170
|
+
|
171
|
+
function denyPromptToAddPermissions() {
|
172
|
+
resolvePromptToAddPermissions(false);
|
173
|
+
}
|
174
|
+
|
175
|
+
function cancelPromptToAddPermissions() {
|
176
|
+
resolvePromptToAddPermissions(false);
|
177
|
+
}
|
119
178
|
|
120
179
|
|
121
180
|
|
@@ -196,6 +255,7 @@
|
|
196
255
|
function loggedIn() {
|
197
256
|
createConnectedCookie();
|
198
257
|
FBWorld.state('loggedIn', true);
|
258
|
+
FBWorld.state('perms', 'standard', '');
|
199
259
|
return true;
|
200
260
|
}
|
201
261
|
|
@@ -309,6 +369,15 @@
|
|
309
369
|
denyPromptToConnect : denyPromptToConnect,
|
310
370
|
cancelPromptToConnect : cancelPromptToConnect,
|
311
371
|
|
372
|
+
// adding permissions
|
373
|
+
beingPromptedToAddPermissions : false,
|
374
|
+
beingPromptedToAddThesePermissions : beingPromptedToAddThesePermissions,
|
375
|
+
beingPromptedToAddPermissionsOptions : undefined,
|
376
|
+
beingPromptedToAddPermissionsCallback : undefined,
|
377
|
+
acceptPromptToAddPermissions : acceptPromptToAddPermissions,
|
378
|
+
denyPromptToAddPermissions : denyPromptToAddPermissions,
|
379
|
+
cancelPromptToAddPermissions : cancelPromptToAddPermissions,
|
380
|
+
|
312
381
|
//sharing
|
313
382
|
beingPromptedToShare : false,
|
314
383
|
beingPromptedToShareOptions : undefined,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: facebook-stub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 67
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
9
|
- 1
|
10
|
-
-
|
11
|
-
version: 0.0.1.
|
10
|
+
- 4
|
11
|
+
version: 0.0.1.4
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Change.org
|
@@ -16,10 +16,12 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2012-04-
|
19
|
+
date: 2012-04-18 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
25
|
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
@@ -28,10 +30,8 @@ dependencies:
|
|
28
30
|
segments:
|
29
31
|
- 0
|
30
32
|
version: "0"
|
31
|
-
|
32
|
-
prerelease: false
|
33
|
+
version_requirements: *id001
|
33
34
|
name: rake
|
34
|
-
type: :development
|
35
35
|
description: facebook-stub is a gem for stubbing out the Facebook JavaScript API in acceptance and integration tests.
|
36
36
|
email:
|
37
37
|
- techops@change.org
|