facebook-stub 0.0.1.7 → 0.0.1.8
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/.gitignore +1 -0
- data/Rakefile +12 -2
- data/bin/facebook-stub.js +91 -14
- data/facebook-stub.gemspec +1 -0
- data/lib/facebook_stub/core.js +91 -14
- data/lib/facebook_stub/version.rb +1 -1
- data/spec/acceptance/facebook-stub_spec.rb +1 -1
- data/spec/javascripts/FacebookStubSpec.js +59 -0
- data/spec/javascripts/helpers/SpecHelper.js +23 -0
- data/spec/javascripts/support/jasmine.yml +73 -0
- data/spec/javascripts/support/jasmine_config.rb +23 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- metadata +37 -56
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -7,7 +7,7 @@ LIB = ROOT + 'lib'
|
|
7
7
|
PKG = ROOT + 'pkg'
|
8
8
|
BIN = ROOT + 'bin'
|
9
9
|
|
10
|
-
task :
|
10
|
+
task :build_js do
|
11
11
|
require 'sprockets'
|
12
12
|
environment = Sprockets::Environment.new
|
13
13
|
environment.append_path LIB.to_s
|
@@ -20,6 +20,16 @@ RSpec::Core::RakeTask.new do |t|
|
|
20
20
|
t.pattern = ROOT.join("spec/**/*_spec.rb").to_s
|
21
21
|
end
|
22
22
|
|
23
|
-
task :test => [:
|
23
|
+
task :test => [:build_js, :spec, 'jasmine:ci']
|
24
24
|
|
25
25
|
task :default => :test
|
26
|
+
|
27
|
+
begin
|
28
|
+
require 'jasmine'
|
29
|
+
Rake::Task[:build_js].invoke
|
30
|
+
load 'jasmine/tasks/jasmine.rake'
|
31
|
+
rescue LoadError
|
32
|
+
task :jasmine do
|
33
|
+
abort "Jasmine is not available. In order to run jasmine, you must: (sudo) gem install jasmine"
|
34
|
+
end
|
35
|
+
end
|
data/bin/facebook-stub.js
CHANGED
@@ -231,21 +231,73 @@
|
|
231
231
|
return getStatus().session;
|
232
232
|
}
|
233
233
|
|
234
|
-
function api(
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
234
|
+
function api(path, method, params, callback) {
|
235
|
+
// Curry arguments to allow multiple forms:
|
236
|
+
// api(path, callback)
|
237
|
+
// api(path, method, callback)
|
238
|
+
// api(path, params, callback)
|
239
|
+
// api(path, method, params, callback)
|
240
|
+
if (callback === undefined) {
|
241
|
+
if (params === undefined) {
|
242
|
+
callback = method;
|
243
|
+
method = undefined;
|
244
|
+
} else {
|
245
|
+
callback = params;
|
246
|
+
if (typeof method == 'string')
|
247
|
+
params = undefined;
|
248
|
+
else {
|
249
|
+
params = method;
|
250
|
+
method = undefined;
|
251
|
+
}
|
244
252
|
}
|
245
|
-
|
253
|
+
}
|
254
|
+
|
255
|
+
if (!FBWorld.state('connected')) {
|
256
|
+
callback(apiUnconnectedMessage());
|
257
|
+
return;
|
258
|
+
}
|
259
|
+
|
260
|
+
switch (path) {
|
261
|
+
case '/me/friends':
|
262
|
+
callback({data:FBWorld.friendList()});
|
263
|
+
break;
|
264
|
+
case '/me/permissions':
|
265
|
+
var theState = FBWorld.state();
|
266
|
+
var perms;
|
267
|
+
if (theState && theState.perms && theState.perms.data)
|
268
|
+
perms = {data:[theState.perms.data]};
|
269
|
+
callback(perms);
|
270
|
+
break;
|
271
|
+
case '/me/feed':
|
272
|
+
if (method == 'post') {
|
273
|
+
callback({id: Math.floor(Math.random() * 100000)});
|
274
|
+
break;
|
275
|
+
}
|
276
|
+
default:
|
277
|
+
callback(apiFailMessage(path));
|
246
278
|
}
|
247
279
|
}
|
248
280
|
|
281
|
+
function apiUnconnectedMessage() {
|
282
|
+
return {
|
283
|
+
"error": {
|
284
|
+
"message": "An active access token must be used to query information about the current user.",
|
285
|
+
"type": "OAuthException",
|
286
|
+
"code": 2500
|
287
|
+
}
|
288
|
+
};
|
289
|
+
}
|
290
|
+
|
291
|
+
function apiFailMessage(path) {
|
292
|
+
return {
|
293
|
+
"error": {
|
294
|
+
"message": "(#803) Some of the aliases you requested do not exist: " + path,
|
295
|
+
"type": "OAuthException",
|
296
|
+
"code": 803
|
297
|
+
}
|
298
|
+
};
|
299
|
+
}
|
300
|
+
|
249
301
|
// FBWorld Functions
|
250
302
|
//3 states: loggedOut, loggedIn, connected
|
251
303
|
function state() {
|
@@ -273,6 +325,10 @@
|
|
273
325
|
return FBWorld.state('uid', newUid);
|
274
326
|
}
|
275
327
|
|
328
|
+
function appId() {
|
329
|
+
return FBWorld.state('appId');
|
330
|
+
}
|
331
|
+
|
276
332
|
function setPermissions(newPermissions) {
|
277
333
|
return FBWorld.state('perms', 'data', convertPermsToData(newPermissions));
|
278
334
|
}
|
@@ -281,10 +337,10 @@
|
|
281
337
|
return state('secret', newSecret);
|
282
338
|
}
|
283
339
|
|
284
|
-
function loggedIn() {
|
340
|
+
function loggedIn(perms) {
|
285
341
|
createConnectedCookie();
|
286
342
|
FBWorld.state('loggedIn', true);
|
287
|
-
|
343
|
+
if (perms) setPermissions(perms);
|
288
344
|
return true;
|
289
345
|
}
|
290
346
|
|
@@ -345,6 +401,25 @@
|
|
345
401
|
resolveSharePrompt('cancel');
|
346
402
|
}
|
347
403
|
|
404
|
+
function reset() {
|
405
|
+
|
406
|
+
FBWorld.beingPromptedToLogin = false;
|
407
|
+
FBWorld.beingPromptedToLoginOptions = undefined;
|
408
|
+
FBWorld.beingPromptedToLoginCallback = undefined;
|
409
|
+
FBWorld.beingPromptedToConnect = false;
|
410
|
+
FBWorld.beingPromptedToConnectOptions = undefined;
|
411
|
+
FBWorld.beingPromptedToConnectCallback = undefined;
|
412
|
+
FBWorld.beingPromptedToAddPermissions = false;
|
413
|
+
FBWorld.beingPromptedToAddPermissionsOptions = undefined;
|
414
|
+
FBWorld.beingPromptedToAddPermissionsCallback = undefined;
|
415
|
+
FBWorld.beingPromptedToShare = false;
|
416
|
+
FBWorld.beingPromptedToShareOptions = undefined;
|
417
|
+
FBWorld.beingPromptedToShareCallback = undefined;
|
418
|
+
|
419
|
+
// reset cookie
|
420
|
+
FBWorld.Helpers.makeMeACookie('fb-stub', null);
|
421
|
+
}
|
422
|
+
|
348
423
|
var XFBML = {
|
349
424
|
parse: function(element, callback) {
|
350
425
|
callback();
|
@@ -372,14 +447,16 @@
|
|
372
447
|
loggedIn : loggedIn,
|
373
448
|
notLoggedIn : notLoggedIn,
|
374
449
|
setUid : setUid,
|
450
|
+
appId : appId,
|
375
451
|
setSecret : setSecret,
|
376
452
|
uid : uid,
|
377
453
|
connected : connected,
|
378
454
|
notConnected : notConnected,
|
379
455
|
setPermissions : setPermissions,
|
380
456
|
getPermissions : getPermissions,
|
457
|
+
reset : reset,
|
381
458
|
|
382
|
-
initialized
|
459
|
+
initialized : false,
|
383
460
|
|
384
461
|
// Simulate interactions with Facebook
|
385
462
|
|
data/facebook-stub.gemspec
CHANGED
data/lib/facebook_stub/core.js
CHANGED
@@ -231,21 +231,73 @@
|
|
231
231
|
return getStatus().session;
|
232
232
|
}
|
233
233
|
|
234
|
-
function api(
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
234
|
+
function api(path, method, params, callback) {
|
235
|
+
// Curry arguments to allow multiple forms:
|
236
|
+
// api(path, callback)
|
237
|
+
// api(path, method, callback)
|
238
|
+
// api(path, params, callback)
|
239
|
+
// api(path, method, params, callback)
|
240
|
+
if (callback === undefined) {
|
241
|
+
if (params === undefined) {
|
242
|
+
callback = method;
|
243
|
+
method = undefined;
|
244
|
+
} else {
|
245
|
+
callback = params;
|
246
|
+
if (typeof method == 'string')
|
247
|
+
params = undefined;
|
248
|
+
else {
|
249
|
+
params = method;
|
250
|
+
method = undefined;
|
251
|
+
}
|
244
252
|
}
|
245
|
-
|
253
|
+
}
|
254
|
+
|
255
|
+
if (!FBWorld.state('connected')) {
|
256
|
+
callback(apiUnconnectedMessage());
|
257
|
+
return;
|
258
|
+
}
|
259
|
+
|
260
|
+
switch (path) {
|
261
|
+
case '/me/friends':
|
262
|
+
callback({data:FBWorld.friendList()});
|
263
|
+
break;
|
264
|
+
case '/me/permissions':
|
265
|
+
var theState = FBWorld.state();
|
266
|
+
var perms;
|
267
|
+
if (theState && theState.perms && theState.perms.data)
|
268
|
+
perms = {data:[theState.perms.data]};
|
269
|
+
callback(perms);
|
270
|
+
break;
|
271
|
+
case '/me/feed':
|
272
|
+
if (method == 'post') {
|
273
|
+
callback({id: Math.floor(Math.random() * 100000)});
|
274
|
+
break;
|
275
|
+
}
|
276
|
+
default:
|
277
|
+
callback(apiFailMessage(path));
|
246
278
|
}
|
247
279
|
}
|
248
280
|
|
281
|
+
function apiUnconnectedMessage() {
|
282
|
+
return {
|
283
|
+
"error": {
|
284
|
+
"message": "An active access token must be used to query information about the current user.",
|
285
|
+
"type": "OAuthException",
|
286
|
+
"code": 2500
|
287
|
+
}
|
288
|
+
};
|
289
|
+
}
|
290
|
+
|
291
|
+
function apiFailMessage(path) {
|
292
|
+
return {
|
293
|
+
"error": {
|
294
|
+
"message": "(#803) Some of the aliases you requested do not exist: " + path,
|
295
|
+
"type": "OAuthException",
|
296
|
+
"code": 803
|
297
|
+
}
|
298
|
+
};
|
299
|
+
}
|
300
|
+
|
249
301
|
// FBWorld Functions
|
250
302
|
//3 states: loggedOut, loggedIn, connected
|
251
303
|
function state() {
|
@@ -273,6 +325,10 @@
|
|
273
325
|
return FBWorld.state('uid', newUid);
|
274
326
|
}
|
275
327
|
|
328
|
+
function appId() {
|
329
|
+
return FBWorld.state('appId');
|
330
|
+
}
|
331
|
+
|
276
332
|
function setPermissions(newPermissions) {
|
277
333
|
return FBWorld.state('perms', 'data', convertPermsToData(newPermissions));
|
278
334
|
}
|
@@ -281,10 +337,10 @@
|
|
281
337
|
return state('secret', newSecret);
|
282
338
|
}
|
283
339
|
|
284
|
-
function loggedIn() {
|
340
|
+
function loggedIn(perms) {
|
285
341
|
createConnectedCookie();
|
286
342
|
FBWorld.state('loggedIn', true);
|
287
|
-
|
343
|
+
if (perms) setPermissions(perms);
|
288
344
|
return true;
|
289
345
|
}
|
290
346
|
|
@@ -345,6 +401,25 @@
|
|
345
401
|
resolveSharePrompt('cancel');
|
346
402
|
}
|
347
403
|
|
404
|
+
function reset() {
|
405
|
+
|
406
|
+
FBWorld.beingPromptedToLogin = false;
|
407
|
+
FBWorld.beingPromptedToLoginOptions = undefined;
|
408
|
+
FBWorld.beingPromptedToLoginCallback = undefined;
|
409
|
+
FBWorld.beingPromptedToConnect = false;
|
410
|
+
FBWorld.beingPromptedToConnectOptions = undefined;
|
411
|
+
FBWorld.beingPromptedToConnectCallback = undefined;
|
412
|
+
FBWorld.beingPromptedToAddPermissions = false;
|
413
|
+
FBWorld.beingPromptedToAddPermissionsOptions = undefined;
|
414
|
+
FBWorld.beingPromptedToAddPermissionsCallback = undefined;
|
415
|
+
FBWorld.beingPromptedToShare = false;
|
416
|
+
FBWorld.beingPromptedToShareOptions = undefined;
|
417
|
+
FBWorld.beingPromptedToShareCallback = undefined;
|
418
|
+
|
419
|
+
// reset cookie
|
420
|
+
FBWorld.Helpers.makeMeACookie('fb-stub', null);
|
421
|
+
}
|
422
|
+
|
348
423
|
var XFBML = {
|
349
424
|
parse: function(element, callback) {
|
350
425
|
callback();
|
@@ -372,14 +447,16 @@
|
|
372
447
|
loggedIn : loggedIn,
|
373
448
|
notLoggedIn : notLoggedIn,
|
374
449
|
setUid : setUid,
|
450
|
+
appId : appId,
|
375
451
|
setSecret : setSecret,
|
376
452
|
uid : uid,
|
377
453
|
connected : connected,
|
378
454
|
notConnected : notConnected,
|
379
455
|
setPermissions : setPermissions,
|
380
456
|
getPermissions : getPermissions,
|
457
|
+
reset : reset,
|
381
458
|
|
382
|
-
initialized
|
459
|
+
initialized : false,
|
383
460
|
|
384
461
|
// Simulate interactions with Facebook
|
385
462
|
|
@@ -0,0 +1,59 @@
|
|
1
|
+
describe("FB.api", function() {
|
2
|
+
beforeEach(function() {
|
3
|
+
setup();
|
4
|
+
});
|
5
|
+
|
6
|
+
afterEach(function() {
|
7
|
+
FBWorld.reset();
|
8
|
+
});
|
9
|
+
|
10
|
+
describe("when loggedIn, connected, and granted permissions", function() {
|
11
|
+
|
12
|
+
beforeEach(function() {
|
13
|
+
FBWorld.loggedIn('publish_actions');
|
14
|
+
FBWorld.connected();
|
15
|
+
});
|
16
|
+
|
17
|
+
describe("when I call FB.api('/me/friends', callback)", function() {
|
18
|
+
it("should callback with FBWorld.friendList", function() {
|
19
|
+
FB.api('/me/friends', function (r) {
|
20
|
+
expect(r.data).toBeDefined();
|
21
|
+
expect(r.data).toEqual(FBWorld.friendList());
|
22
|
+
});
|
23
|
+
});
|
24
|
+
});
|
25
|
+
|
26
|
+
describe("when I call FB.api('/me/permissions', callback)", function() {
|
27
|
+
it("should callback with FBWorld.state.perms", function() {
|
28
|
+
FB.api('/me/permissions', function (r) {
|
29
|
+
expect(r).toBeDefined();
|
30
|
+
expect(r.data).toBeDefined();
|
31
|
+
expect(r.data).toEqual([FBWorld.state().perms.data]);
|
32
|
+
});
|
33
|
+
});
|
34
|
+
});
|
35
|
+
|
36
|
+
describe("when I call FB.api('/me/feed', 'post', params, callback)", function() {
|
37
|
+
it("should callback with a random id", function() {
|
38
|
+
FB.api('/me/feed', 'post', {}, function (r) {
|
39
|
+
expect(r.id).toBeDefined();
|
40
|
+
});
|
41
|
+
});
|
42
|
+
});
|
43
|
+
|
44
|
+
});
|
45
|
+
|
46
|
+
describe("when not connected", function () {
|
47
|
+
it("should callback with the unconnected error object", function() {
|
48
|
+
FB.api('/me/friends', function (r) {
|
49
|
+
expect(r).toEqual(apiUnconnectedMessage());
|
50
|
+
});
|
51
|
+
FB.api('/me/permissions', function (r) {
|
52
|
+
expect(r).toEqual(apiUnconnectedMessage());
|
53
|
+
});
|
54
|
+
FB.api('/me/feed', 'post', {}, function (r) {
|
55
|
+
expect(r).toEqual(apiUnconnectedMessage());
|
56
|
+
});
|
57
|
+
});
|
58
|
+
});
|
59
|
+
});
|
@@ -0,0 +1,23 @@
|
|
1
|
+
function setup() {
|
2
|
+
FBWorld.setSecret('00000000000000000000000000000000');
|
3
|
+
|
4
|
+
FB.init({
|
5
|
+
appId : '000000000000000',
|
6
|
+
status : true, // check login status
|
7
|
+
cookie : true, // enable cookies to allow the server to access the session
|
8
|
+
xfbml : false, // parse XFBML
|
9
|
+
channelUrl : '/facebook/channel.html',
|
10
|
+
oauth : true
|
11
|
+
});
|
12
|
+
|
13
|
+
}
|
14
|
+
|
15
|
+
function apiUnconnectedMessage() {
|
16
|
+
return {
|
17
|
+
"error": {
|
18
|
+
"message": "An active access token must be used to query information about the current user.",
|
19
|
+
"type": "OAuthException",
|
20
|
+
"code": 2500
|
21
|
+
}
|
22
|
+
};
|
23
|
+
}
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# src_files
|
2
|
+
#
|
3
|
+
# Return an array of filepaths relative to src_dir to include before jasmine specs.
|
4
|
+
# Default: []
|
5
|
+
#
|
6
|
+
# EXAMPLE:
|
7
|
+
#
|
8
|
+
# src_files:
|
9
|
+
# - lib/source1.js
|
10
|
+
# - lib/source2.js
|
11
|
+
# - dist/**/*.js
|
12
|
+
#
|
13
|
+
src_files:
|
14
|
+
- bin/*.js
|
15
|
+
|
16
|
+
# stylesheets
|
17
|
+
#
|
18
|
+
# Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs.
|
19
|
+
# Default: []
|
20
|
+
#
|
21
|
+
# EXAMPLE:
|
22
|
+
#
|
23
|
+
# stylesheets:
|
24
|
+
# - css/style.css
|
25
|
+
# - stylesheets/*.css
|
26
|
+
#
|
27
|
+
stylesheets:
|
28
|
+
|
29
|
+
# helpers
|
30
|
+
#
|
31
|
+
# Return an array of filepaths relative to spec_dir to include before jasmine specs.
|
32
|
+
# Default: ["helpers/**/*.js"]
|
33
|
+
#
|
34
|
+
# EXAMPLE:
|
35
|
+
#
|
36
|
+
# helpers:
|
37
|
+
# - helpers/**/*.js
|
38
|
+
#
|
39
|
+
helpers:
|
40
|
+
|
41
|
+
# spec_files
|
42
|
+
#
|
43
|
+
# Return an array of filepaths relative to spec_dir to include.
|
44
|
+
# Default: ["**/*[sS]pec.js"]
|
45
|
+
#
|
46
|
+
# EXAMPLE:
|
47
|
+
#
|
48
|
+
# spec_files:
|
49
|
+
# - **/*[sS]pec.js
|
50
|
+
#
|
51
|
+
spec_files:
|
52
|
+
|
53
|
+
# src_dir
|
54
|
+
#
|
55
|
+
# Source directory path. Your src_files must be returned relative to this path. Will use root if left blank.
|
56
|
+
# Default: project root
|
57
|
+
#
|
58
|
+
# EXAMPLE:
|
59
|
+
#
|
60
|
+
# src_dir: public
|
61
|
+
#
|
62
|
+
src_dir:
|
63
|
+
|
64
|
+
# spec_dir
|
65
|
+
#
|
66
|
+
# Spec directory path. Your spec_files must be returned relative to this path.
|
67
|
+
# Default: spec/javascripts
|
68
|
+
#
|
69
|
+
# EXAMPLE:
|
70
|
+
#
|
71
|
+
# spec_dir: spec/javascripts
|
72
|
+
#
|
73
|
+
spec_dir:
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Jasmine
|
2
|
+
class Config
|
3
|
+
|
4
|
+
# Add your overrides or custom config code here
|
5
|
+
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
# Note - this is necessary for rspec2, which has removed the backtrace
|
11
|
+
module Jasmine
|
12
|
+
class SpecBuilder
|
13
|
+
def declare_spec(parent, spec)
|
14
|
+
me = self
|
15
|
+
example_name = spec["name"]
|
16
|
+
@spec_ids << spec["id"]
|
17
|
+
backtrace = @example_locations[parent.description + " " + example_name]
|
18
|
+
parent.it example_name, {} do
|
19
|
+
me.report_spec(spec["id"])
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
$:.unshift(ENV['JASMINE_GEM_PATH']) if ENV['JASMINE_GEM_PATH'] # for gem testing purposes
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'jasmine'
|
5
|
+
jasmine_config_overrides = File.expand_path(File.join(File.dirname(__FILE__), 'jasmine_config.rb'))
|
6
|
+
require jasmine_config_overrides if File.exist?(jasmine_config_overrides)
|
7
|
+
if Jasmine::Dependencies.rspec2?
|
8
|
+
require 'rspec'
|
9
|
+
else
|
10
|
+
require 'spec'
|
11
|
+
end
|
12
|
+
|
13
|
+
jasmine_config = Jasmine::Config.new
|
14
|
+
spec_builder = Jasmine::SpecBuilder.new(jasmine_config)
|
15
|
+
|
16
|
+
should_stop = false
|
17
|
+
|
18
|
+
if Jasmine::Dependencies.rspec2?
|
19
|
+
RSpec.configuration.after(:suite) do
|
20
|
+
spec_builder.stop if should_stop
|
21
|
+
end
|
22
|
+
else
|
23
|
+
Spec::Runner.configure do |config|
|
24
|
+
config.after(:suite) do
|
25
|
+
spec_builder.stop if should_stop
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
spec_builder.start
|
31
|
+
should_stop = true
|
32
|
+
spec_builder.declare_suites
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: facebook-stub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1.
|
4
|
+
version: 0.0.1.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: debugger
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70272822136920 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,15 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0'
|
24
|
+
version_requirements: *70272822136920
|
30
25
|
- !ruby/object:Gem::Dependency
|
31
26
|
name: sprockets
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &70272822136500 !ruby/object:Gem::Requirement
|
33
28
|
none: false
|
34
29
|
requirements:
|
35
30
|
- - ! '>='
|
@@ -37,15 +32,10 @@ dependencies:
|
|
37
32
|
version: '0'
|
38
33
|
type: :development
|
39
34
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
35
|
+
version_requirements: *70272822136500
|
46
36
|
- !ruby/object:Gem::Dependency
|
47
37
|
name: rake
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70272822136080 !ruby/object:Gem::Requirement
|
49
39
|
none: false
|
50
40
|
requirements:
|
51
41
|
- - ! '>='
|
@@ -53,15 +43,10 @@ dependencies:
|
|
53
43
|
version: '0'
|
54
44
|
type: :development
|
55
45
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
46
|
+
version_requirements: *70272822136080
|
62
47
|
- !ruby/object:Gem::Dependency
|
63
48
|
name: sinatra
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirement: &70272822135660 !ruby/object:Gem::Requirement
|
65
50
|
none: false
|
66
51
|
requirements:
|
67
52
|
- - ! '>='
|
@@ -69,15 +54,10 @@ dependencies:
|
|
69
54
|
version: '0'
|
70
55
|
type: :development
|
71
56
|
prerelease: false
|
72
|
-
version_requirements:
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
57
|
+
version_requirements: *70272822135660
|
78
58
|
- !ruby/object:Gem::Dependency
|
79
59
|
name: shotgun
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirement: &70272822135240 !ruby/object:Gem::Requirement
|
81
61
|
none: false
|
82
62
|
requirements:
|
83
63
|
- - ! '>='
|
@@ -85,15 +65,10 @@ dependencies:
|
|
85
65
|
version: '0'
|
86
66
|
type: :development
|
87
67
|
prerelease: false
|
88
|
-
version_requirements:
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
68
|
+
version_requirements: *70272822135240
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: haml
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirement: &70272822134820 !ruby/object:Gem::Requirement
|
97
72
|
none: false
|
98
73
|
requirements:
|
99
74
|
- - ! '>='
|
@@ -101,15 +76,10 @@ dependencies:
|
|
101
76
|
version: '0'
|
102
77
|
type: :development
|
103
78
|
prerelease: false
|
104
|
-
version_requirements:
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
79
|
+
version_requirements: *70272822134820
|
110
80
|
- !ruby/object:Gem::Dependency
|
111
81
|
name: rspec
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
82
|
+
requirement: &70272822134380 !ruby/object:Gem::Requirement
|
113
83
|
none: false
|
114
84
|
requirements:
|
115
85
|
- - ! '>='
|
@@ -117,15 +87,10 @@ dependencies:
|
|
117
87
|
version: '0'
|
118
88
|
type: :development
|
119
89
|
prerelease: false
|
120
|
-
version_requirements:
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ! '>='
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
90
|
+
version_requirements: *70272822134380
|
126
91
|
- !ruby/object:Gem::Dependency
|
127
92
|
name: capybara
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirement: &70272822133960 !ruby/object:Gem::Requirement
|
129
94
|
none: false
|
130
95
|
requirements:
|
131
96
|
- - ! '>='
|
@@ -133,12 +98,18 @@ dependencies:
|
|
133
98
|
version: '0'
|
134
99
|
type: :development
|
135
100
|
prerelease: false
|
136
|
-
version_requirements:
|
101
|
+
version_requirements: *70272822133960
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: jasmine
|
104
|
+
requirement: &70272822133540 !ruby/object:Gem::Requirement
|
137
105
|
none: false
|
138
106
|
requirements:
|
139
107
|
- - ! '>='
|
140
108
|
- !ruby/object:Gem::Version
|
141
109
|
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *70272822133540
|
142
113
|
description: facebook-stub is a gem for stubbing out the Facebook JavaScript API in
|
143
114
|
acceptance and integration tests.
|
144
115
|
email:
|
@@ -165,6 +136,11 @@ files:
|
|
165
136
|
- lib/facebook_stub/utf8_encode.js
|
166
137
|
- lib/facebook_stub/version.rb
|
167
138
|
- spec/acceptance/facebook-stub_spec.rb
|
139
|
+
- spec/javascripts/FacebookStubSpec.js
|
140
|
+
- spec/javascripts/helpers/SpecHelper.js
|
141
|
+
- spec/javascripts/support/jasmine.yml
|
142
|
+
- spec/javascripts/support/jasmine_config.rb
|
143
|
+
- spec/javascripts/support/jasmine_runner.rb
|
168
144
|
- spec/spec_helper.rb
|
169
145
|
- test/config.ru
|
170
146
|
- test/server.rb
|
@@ -183,7 +159,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
183
159
|
version: '0'
|
184
160
|
segments:
|
185
161
|
- 0
|
186
|
-
hash: -
|
162
|
+
hash: -4225699949950565184
|
187
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
164
|
none: false
|
189
165
|
requirements:
|
@@ -192,15 +168,20 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
192
168
|
version: '0'
|
193
169
|
segments:
|
194
170
|
- 0
|
195
|
-
hash: -
|
171
|
+
hash: -4225699949950565184
|
196
172
|
requirements: []
|
197
173
|
rubyforge_project: facebook-stub
|
198
|
-
rubygems_version: 1.8.
|
174
|
+
rubygems_version: 1.8.11
|
199
175
|
signing_key:
|
200
176
|
specification_version: 3
|
201
177
|
summary: Stub out the FB JS API
|
202
178
|
test_files:
|
203
179
|
- spec/acceptance/facebook-stub_spec.rb
|
180
|
+
- spec/javascripts/FacebookStubSpec.js
|
181
|
+
- spec/javascripts/helpers/SpecHelper.js
|
182
|
+
- spec/javascripts/support/jasmine.yml
|
183
|
+
- spec/javascripts/support/jasmine_config.rb
|
184
|
+
- spec/javascripts/support/jasmine_runner.rb
|
204
185
|
- spec/spec_helper.rb
|
205
186
|
- test/config.ru
|
206
187
|
- test/server.rb
|