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 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