facebook-stub 0.0.1.3 → 0.0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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
- callback(getStatus('standard'));
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,
@@ -1,5 +1,5 @@
1
1
  module Facebook
2
2
  module Stub
3
- VERSION = "0.0.1.3"
3
+ VERSION = "0.0.1.4"
4
4
  end
5
5
  end
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
- callback(getStatus('standard'));
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: 77
4
+ hash: 67
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
9
  - 1
10
- - 3
11
- version: 0.0.1.3
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-03 00:00:00 Z
19
+ date: 2012-04-18 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
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
- requirement: *id001
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