facebook-stub 0.0.1.21 → 0.0.1.22
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/bin/facebook-stub.js +72 -51
- data/lib/facebook_stub/cookie.js +67 -46
- data/lib/facebook_stub/core.js +5 -5
- data/lib/facebook_stub/version.rb +1 -1
- data/spec/javascripts/FBApiSpec.js +13 -7
- data/spec/javascripts/helpers/SpecHelper.js +10 -1
- data/spec/javascripts/support/jasmine.yml +3 -1
- metadata +68 -23
data/bin/facebook-stub.js
CHANGED
@@ -381,7 +381,7 @@
|
|
381
381
|
}
|
382
382
|
|
383
383
|
function setSecret(newSecret) {
|
384
|
-
return state('secret', newSecret);
|
384
|
+
return FBWorld.state('secret', newSecret);
|
385
385
|
}
|
386
386
|
|
387
387
|
function loggedIn(perms) {
|
@@ -648,10 +648,10 @@
|
|
648
648
|
// cookie looks like this: (with the quotes): "access_token=theToken&base_domain=local-change.org&expires=0&secret=theSecret&session_key=theSessionKeysig=theSig-Hashed&uid=theUID"
|
649
649
|
function createConnectedCookie() {
|
650
650
|
var theState = {
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
651
|
+
userID: state('uid'),
|
652
|
+
authToken: 'theAccessToken|hashData',
|
653
|
+
signedRequest: 'ABC123',
|
654
|
+
expiresIn: 2*60*60
|
655
655
|
};
|
656
656
|
|
657
657
|
if (uid() !== null) {
|
@@ -745,55 +745,76 @@ setTimeout(function() { if (typeof fbAsyncInit === 'function') fbAsyncInit(); },
|
|
745
745
|
*/
|
746
746
|
|
747
747
|
// Modified to make it not use jquery
|
748
|
-
FBWorld.Helpers
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
options.expires = -1;
|
754
|
-
} else {
|
755
|
-
options.expires = 100; // 100 days from now
|
756
|
-
}
|
757
|
-
var expires = '';
|
758
|
-
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
|
759
|
-
var date;
|
760
|
-
if (typeof options.expires == 'number') {
|
761
|
-
date = new Date();
|
762
|
-
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
|
763
|
-
} else {
|
764
|
-
date = options.expires;
|
765
|
-
}
|
766
|
-
expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
|
767
|
-
}
|
768
|
-
// CAUTION: Needed to parenthesize options.path and options.domain
|
769
|
-
// in the following expressions, otherwise they evaluate to undefined
|
770
|
-
// in the packed version for some reason...
|
771
|
-
var path = '; path=/';
|
772
|
-
var domain = options.domain ? '; domain=' + (options.domain) : '';
|
773
|
-
var secure = options.secure ? '; secure' : '';
|
774
|
-
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
|
748
|
+
FBWorld.Helpers = {
|
749
|
+
makeMeACookie: function(name, value, options) {
|
750
|
+
if (typeof value !== 'undefined') {
|
751
|
+
// name and value given, set cookie
|
752
|
+
this.setCookieWithValue(name, value, options);
|
775
753
|
} else { // only name given, get cookie
|
776
|
-
|
777
|
-
if (document.cookie && document.cookie != '') {
|
778
|
-
var cookies = document.cookie.split(';');
|
779
|
-
for (var i = 0; i < cookies.length; i++) {
|
780
|
-
var cookie = FBWorld.Helpers.trim(cookies[i]);
|
781
|
-
// Does this cookie string begin with the name we want?
|
782
|
-
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
783
|
-
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
784
|
-
break;
|
785
|
-
}
|
786
|
-
}
|
787
|
-
}
|
788
|
-
return cookieValue;
|
754
|
+
return this.getCookieBasedOnName(name);
|
789
755
|
}
|
790
|
-
}
|
756
|
+
},
|
791
757
|
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
758
|
+
setCookieWithValue: function(name, value, options) {
|
759
|
+
options = options || {};
|
760
|
+
if (value === null) {
|
761
|
+
value = '';
|
762
|
+
options.expires = -1;
|
763
|
+
} else {
|
764
|
+
options.expires = 100; // 100 days from now
|
765
|
+
}
|
766
|
+
|
767
|
+
this.setCookieBasedOnName(name, value, options);
|
768
|
+
},
|
769
|
+
|
770
|
+
//Taken from jQuery
|
771
|
+
trim: function( text ) {
|
772
|
+
return text === null ?
|
773
|
+
"" :
|
774
|
+
text.toString().replace( /^\s+/, "" ).replace( /\s+$/, "" );
|
775
|
+
},
|
776
|
+
|
777
|
+
expirationForCookie: function(expires) {
|
778
|
+
var expireString = '';
|
779
|
+
if (expires && (typeof expires == 'number' || expires.toUTCString)) {
|
780
|
+
var date;
|
781
|
+
if (typeof expires == 'number') {
|
782
|
+
date = new Date();
|
783
|
+
var millisecondsPer24Hours = 24 * 60 * 60 * 1000;
|
784
|
+
date.setTime(date.getTime() + (expires * millisecondsPer24Hours));
|
785
|
+
} else {
|
786
|
+
date = expires;
|
787
|
+
}
|
788
|
+
expireString = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
|
789
|
+
}
|
790
|
+
return expireString;
|
791
|
+
},
|
792
|
+
|
793
|
+
setCookieBasedOnName: function(name, value, options) {
|
794
|
+
var domain = options.domain ? '; domain=' + (options.domain) : '';
|
795
|
+
var secure = options.secure ? '; secure' : '';
|
796
|
+
var cookieString = [encodeURIComponent(value), this.expirationForCookie(options.expires),
|
797
|
+
'; path=/', domain, secure].join('');
|
798
|
+
|
799
|
+
document.cookie = [name, '=', cookieString].join('');
|
800
|
+
},
|
801
|
+
|
802
|
+
getCookieBasedOnName: function(name) {
|
803
|
+
var cookieValue = null;
|
804
|
+
var cookieString = document.cookie;
|
805
|
+
if (cookieString && cookieString !== '') {
|
806
|
+
var cookies = cookieString.split(';');
|
807
|
+
for (var i = 0; i < cookies.length; i++) {
|
808
|
+
var cookie = this.trim(cookies[i]);
|
809
|
+
// Does this cookie string begin with the name we want?
|
810
|
+
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
811
|
+
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
812
|
+
break;
|
813
|
+
}
|
814
|
+
}
|
815
|
+
}
|
816
|
+
return cookieValue;
|
817
|
+
}
|
797
818
|
};
|
798
819
|
/* A JavaScript implementation of the SHA family of hashes, as defined in FIPS
|
799
820
|
* PUB 180-2 as well as the corresponding HMAC implementation as defined in
|
data/lib/facebook_stub/cookie.js
CHANGED
@@ -55,53 +55,74 @@
|
|
55
55
|
*/
|
56
56
|
|
57
57
|
// Modified to make it not use jquery
|
58
|
-
FBWorld.Helpers
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
options.expires = -1;
|
64
|
-
} else {
|
65
|
-
options.expires = 100; // 100 days from now
|
66
|
-
}
|
67
|
-
var expires = '';
|
68
|
-
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
|
69
|
-
var date;
|
70
|
-
if (typeof options.expires == 'number') {
|
71
|
-
date = new Date();
|
72
|
-
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
|
73
|
-
} else {
|
74
|
-
date = options.expires;
|
75
|
-
}
|
76
|
-
expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
|
77
|
-
}
|
78
|
-
// CAUTION: Needed to parenthesize options.path and options.domain
|
79
|
-
// in the following expressions, otherwise they evaluate to undefined
|
80
|
-
// in the packed version for some reason...
|
81
|
-
var path = '; path=/';
|
82
|
-
var domain = options.domain ? '; domain=' + (options.domain) : '';
|
83
|
-
var secure = options.secure ? '; secure' : '';
|
84
|
-
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
|
58
|
+
FBWorld.Helpers = {
|
59
|
+
makeMeACookie: function(name, value, options) {
|
60
|
+
if (typeof value !== 'undefined') {
|
61
|
+
// name and value given, set cookie
|
62
|
+
this.setCookieWithValue(name, value, options);
|
85
63
|
} else { // only name given, get cookie
|
86
|
-
|
87
|
-
if (document.cookie && document.cookie != '') {
|
88
|
-
var cookies = document.cookie.split(';');
|
89
|
-
for (var i = 0; i < cookies.length; i++) {
|
90
|
-
var cookie = FBWorld.Helpers.trim(cookies[i]);
|
91
|
-
// Does this cookie string begin with the name we want?
|
92
|
-
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
93
|
-
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
94
|
-
break;
|
95
|
-
}
|
96
|
-
}
|
97
|
-
}
|
98
|
-
return cookieValue;
|
64
|
+
return this.getCookieBasedOnName(name);
|
99
65
|
}
|
100
|
-
}
|
66
|
+
},
|
67
|
+
|
68
|
+
setCookieWithValue: function(name, value, options) {
|
69
|
+
options = options || {};
|
70
|
+
if (value === null) {
|
71
|
+
value = '';
|
72
|
+
options.expires = -1;
|
73
|
+
} else {
|
74
|
+
options.expires = 100; // 100 days from now
|
75
|
+
}
|
76
|
+
|
77
|
+
this.setCookieBasedOnName(name, value, options);
|
78
|
+
},
|
101
79
|
|
102
|
-
//Taken from jQuery
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
80
|
+
//Taken from jQuery
|
81
|
+
trim: function( text ) {
|
82
|
+
return text === null ?
|
83
|
+
"" :
|
84
|
+
text.toString().replace( /^\s+/, "" ).replace( /\s+$/, "" );
|
85
|
+
},
|
86
|
+
|
87
|
+
expirationForCookie: function(expires) {
|
88
|
+
var expireString = '';
|
89
|
+
if (expires && (typeof expires == 'number' || expires.toUTCString)) {
|
90
|
+
var date;
|
91
|
+
if (typeof expires == 'number') {
|
92
|
+
date = new Date();
|
93
|
+
var millisecondsPer24Hours = 24 * 60 * 60 * 1000;
|
94
|
+
date.setTime(date.getTime() + (expires * millisecondsPer24Hours));
|
95
|
+
} else {
|
96
|
+
date = expires;
|
97
|
+
}
|
98
|
+
expireString = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
|
99
|
+
}
|
100
|
+
return expireString;
|
101
|
+
},
|
102
|
+
|
103
|
+
setCookieBasedOnName: function(name, value, options) {
|
104
|
+
var domain = options.domain ? '; domain=' + (options.domain) : '';
|
105
|
+
var secure = options.secure ? '; secure' : '';
|
106
|
+
var cookieString = [encodeURIComponent(value), this.expirationForCookie(options.expires),
|
107
|
+
'; path=/', domain, secure].join('');
|
108
|
+
|
109
|
+
document.cookie = [name, '=', cookieString].join('');
|
110
|
+
},
|
111
|
+
|
112
|
+
getCookieBasedOnName: function(name) {
|
113
|
+
var cookieValue = null;
|
114
|
+
var cookieString = document.cookie;
|
115
|
+
if (cookieString && cookieString !== '') {
|
116
|
+
var cookies = cookieString.split(';');
|
117
|
+
for (var i = 0; i < cookies.length; i++) {
|
118
|
+
var cookie = this.trim(cookies[i]);
|
119
|
+
// Does this cookie string begin with the name we want?
|
120
|
+
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
121
|
+
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
122
|
+
break;
|
123
|
+
}
|
124
|
+
}
|
125
|
+
}
|
126
|
+
return cookieValue;
|
127
|
+
}
|
107
128
|
};
|
data/lib/facebook_stub/core.js
CHANGED
@@ -381,7 +381,7 @@
|
|
381
381
|
}
|
382
382
|
|
383
383
|
function setSecret(newSecret) {
|
384
|
-
return state('secret', newSecret);
|
384
|
+
return FBWorld.state('secret', newSecret);
|
385
385
|
}
|
386
386
|
|
387
387
|
function loggedIn(perms) {
|
@@ -648,10 +648,10 @@
|
|
648
648
|
// cookie looks like this: (with the quotes): "access_token=theToken&base_domain=local-change.org&expires=0&secret=theSecret&session_key=theSessionKeysig=theSig-Hashed&uid=theUID"
|
649
649
|
function createConnectedCookie() {
|
650
650
|
var theState = {
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
651
|
+
userID: state('uid'),
|
652
|
+
authToken: 'theAccessToken|hashData',
|
653
|
+
signedRequest: 'ABC123',
|
654
|
+
expiresIn: 2*60*60
|
655
655
|
};
|
656
656
|
|
657
657
|
if (uid() !== null) {
|
@@ -1,19 +1,17 @@
|
|
1
1
|
describe("FB.api", function() {
|
2
|
-
beforeEach(function() {
|
3
|
-
setup();
|
4
|
-
});
|
5
|
-
|
6
|
-
afterEach(function() {
|
7
|
-
FBWorld.reset();
|
8
|
-
});
|
9
2
|
|
10
3
|
describe("when loggedIn, connected, and granted permissions", function() {
|
11
4
|
|
12
5
|
beforeEach(function() {
|
6
|
+
setup();
|
13
7
|
FBWorld.loggedIn('publish_actions');
|
14
8
|
FBWorld.connected();
|
15
9
|
});
|
16
10
|
|
11
|
+
afterEach(function() {
|
12
|
+
FBWorld.reset();
|
13
|
+
});
|
14
|
+
|
17
15
|
describe("when I call FB.api('/me/friends', callback)", function() {
|
18
16
|
it("should callback with FBWorld.friendList", function() {
|
19
17
|
FB.api('/me/friends', function (r) {
|
@@ -160,6 +158,14 @@ describe("FB.api", function() {
|
|
160
158
|
});
|
161
159
|
|
162
160
|
describe("when not connected", function () {
|
161
|
+
beforeEach(function() {
|
162
|
+
setup();
|
163
|
+
});
|
164
|
+
|
165
|
+
afterEach(function() {
|
166
|
+
FBWorld.reset();
|
167
|
+
});
|
168
|
+
|
163
169
|
it("should callback with the unconnected error object", function() {
|
164
170
|
FB.api('/me/friends', function (r) {
|
165
171
|
expect(r).toEqual(apiUnconnectedMessage());
|
@@ -1,4 +1,14 @@
|
|
1
1
|
function setup() {
|
2
|
+
FBWorld.Helpers.setCookieBasedOnName = function(name, value, options) {
|
3
|
+
this.fakeCookie = this.fakeCookie || {};
|
4
|
+
this.fakeCookie[name] = value;
|
5
|
+
};
|
6
|
+
|
7
|
+
FBWorld.Helpers.getCookieBasedOnName = function(name) {
|
8
|
+
this.fakeCookie = this.fakeCookie || {};
|
9
|
+
return this.fakeCookie[name];
|
10
|
+
};
|
11
|
+
|
2
12
|
FBWorld.setSecret('00000000000000000000000000000000');
|
3
13
|
|
4
14
|
FB.init({
|
@@ -9,7 +19,6 @@ function setup() {
|
|
9
19
|
channelUrl : '/facebook/channel.html',
|
10
20
|
oauth : true
|
11
21
|
});
|
12
|
-
|
13
22
|
}
|
14
23
|
|
15
24
|
function apiUnconnectedMessage() {
|
@@ -11,7 +11,7 @@
|
|
11
11
|
# - dist/**/*.js
|
12
12
|
#
|
13
13
|
src_files:
|
14
|
-
|
14
|
+
- bin/*.js
|
15
15
|
|
16
16
|
# stylesheets
|
17
17
|
#
|
@@ -37,6 +37,7 @@ stylesheets:
|
|
37
37
|
# - helpers/**/*.js
|
38
38
|
#
|
39
39
|
helpers:
|
40
|
+
- helpers/*.js
|
40
41
|
|
41
42
|
# spec_files
|
42
43
|
#
|
@@ -49,6 +50,7 @@ helpers:
|
|
49
50
|
# - **/*[sS]pec.js
|
50
51
|
#
|
51
52
|
spec_files:
|
53
|
+
- /*Spec.js
|
52
54
|
|
53
55
|
# src_dir
|
54
56
|
#
|
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.22
|
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:
|
12
|
+
date: 2013-01-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: debugger
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: sprockets
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: rake
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: sinatra
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: '0'
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: shotgun
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: '0'
|
66
86
|
type: :development
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: haml
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ! '>='
|
@@ -76,10 +101,15 @@ dependencies:
|
|
76
101
|
version: '0'
|
77
102
|
type: :development
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
111
|
name: rspec
|
82
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
115
|
- - ! '>='
|
@@ -87,10 +117,15 @@ dependencies:
|
|
87
117
|
version: '0'
|
88
118
|
type: :development
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
91
126
|
- !ruby/object:Gem::Dependency
|
92
127
|
name: capybara
|
93
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
94
129
|
none: false
|
95
130
|
requirements:
|
96
131
|
- - ! '>='
|
@@ -98,10 +133,15 @@ dependencies:
|
|
98
133
|
version: '0'
|
99
134
|
type: :development
|
100
135
|
prerelease: false
|
101
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
102
142
|
- !ruby/object:Gem::Dependency
|
103
143
|
name: jasmine
|
104
|
-
requirement:
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
105
145
|
none: false
|
106
146
|
requirements:
|
107
147
|
- - ! '>='
|
@@ -109,7 +149,12 @@ dependencies:
|
|
109
149
|
version: '0'
|
110
150
|
type: :development
|
111
151
|
prerelease: false
|
112
|
-
version_requirements:
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
113
158
|
description: facebook-stub is a gem for stubbing out the Facebook JavaScript API in
|
114
159
|
acceptance and integration tests.
|
115
160
|
email:
|
@@ -160,7 +205,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
160
205
|
version: '0'
|
161
206
|
segments:
|
162
207
|
- 0
|
163
|
-
hash: -
|
208
|
+
hash: -3884959683233776032
|
164
209
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
210
|
none: false
|
166
211
|
requirements:
|
@@ -169,10 +214,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
214
|
version: '0'
|
170
215
|
segments:
|
171
216
|
- 0
|
172
|
-
hash: -
|
217
|
+
hash: -3884959683233776032
|
173
218
|
requirements: []
|
174
219
|
rubyforge_project: facebook-stub
|
175
|
-
rubygems_version: 1.8.
|
220
|
+
rubygems_version: 1.8.24
|
176
221
|
signing_key:
|
177
222
|
specification_version: 3
|
178
223
|
summary: Stub out the FB JS API
|