rest-core 0.4.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +2 -7
- data/CHANGES.md +13 -2
- data/Gemfile +0 -3
- data/README.md +30 -34
- data/Rakefile +5 -46
- data/lib/rest-core.rb +0 -6
- data/lib/rest-core/version.rb +1 -1
- data/rest-core.gemspec +5 -83
- metadata +11 -87
- data/example/rails2/Gemfile +0 -21
- data/example/rails2/README +0 -4
- data/example/rails2/Rakefile +0 -11
- data/example/rails2/app/controllers/application_controller.rb +0 -128
- data/example/rails2/app/views/application/helper.html.erb +0 -2
- data/example/rails2/config/boot.rb +0 -130
- data/example/rails2/config/environment.rb +0 -15
- data/example/rails2/config/environments/development.rb +0 -17
- data/example/rails2/config/environments/production.rb +0 -28
- data/example/rails2/config/environments/test.rb +0 -30
- data/example/rails2/config/initializers/cookie_verification_secret.rb +0 -7
- data/example/rails2/config/initializers/new_rails_defaults.rb +0 -21
- data/example/rails2/config/initializers/session_store.rb +0 -15
- data/example/rails2/config/preinitializer.rb +0 -23
- data/example/rails2/config/rest-core.yaml +0 -16
- data/example/rails2/config/routes.rb +0 -43
- data/example/rails2/log +0 -0
- data/example/rails2/test/functional/application_controller_test.rb +0 -197
- data/example/rails2/test/test_helper.rb +0 -18
- data/example/rails2/test/unit/rails_util_test.rb +0 -44
- data/example/rails3/Gemfile +0 -20
- data/example/rails3/README +0 -4
- data/example/rails3/Rakefile +0 -7
- data/example/rails3/app/controllers/application_controller.rb +0 -128
- data/example/rails3/app/views/application/helper.html.erb +0 -2
- data/example/rails3/config.ru +0 -4
- data/example/rails3/config/application.rb +0 -23
- data/example/rails3/config/environment.rb +0 -5
- data/example/rails3/config/environments/development.rb +0 -26
- data/example/rails3/config/environments/production.rb +0 -49
- data/example/rails3/config/environments/test.rb +0 -30
- data/example/rails3/config/initializers/secret_token.rb +0 -7
- data/example/rails3/config/initializers/session_store.rb +0 -8
- data/example/rails3/config/rest-core.yaml +0 -16
- data/example/rails3/config/routes.rb +0 -5
- data/example/rails3/test/functional/application_controller_test.rb +0 -197
- data/example/rails3/test/test_helper.rb +0 -18
- data/example/rails3/test/unit/rails_util_test.rb +0 -44
- data/example/sinatra/config.ru +0 -16
- data/lib/rest-core/client/facebook.rb +0 -251
- data/lib/rest-core/client/facebook/rails_util.rb +0 -333
- data/lib/rest-core/client/flurry.rb +0 -96
- data/lib/rest-core/client/flurry/rails_util.rb +0 -74
- data/lib/rest-core/client/github.rb +0 -18
- data/lib/rest-core/client/linkedin.rb +0 -59
- data/lib/rest-core/client/mixi.rb +0 -47
- data/lib/rest-core/client/twitter.rb +0 -101
- data/test/client/facebook/config/rest-core.yaml +0 -8
- data/test/client/facebook/test_api.rb +0 -97
- data/test/client/facebook/test_cache.rb +0 -58
- data/test/client/facebook/test_default.rb +0 -23
- data/test/client/facebook/test_error.rb +0 -65
- data/test/client/facebook/test_handler.rb +0 -84
- data/test/client/facebook/test_load_config.rb +0 -39
- data/test/client/facebook/test_misc.rb +0 -72
- data/test/client/facebook/test_oauth.rb +0 -38
- data/test/client/facebook/test_old.rb +0 -114
- data/test/client/facebook/test_page.rb +0 -106
- data/test/client/facebook/test_parse.rb +0 -128
- data/test/client/facebook/test_serialize.rb +0 -43
- data/test/client/facebook/test_timeout.rb +0 -22
- data/test/client/flurry/test_metrics.rb +0 -83
- data/test/client/twitter/test_api.rb +0 -37
@@ -1,96 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core'
|
3
|
-
|
4
|
-
require 'time' # for Time.parse
|
5
|
-
|
6
|
-
RestCore::Flurry = RestCore::Builder.client(:api_key, :access_code) do
|
7
|
-
s = self.class # this is only for ruby 1.8!
|
8
|
-
use s::Timeout , 10
|
9
|
-
|
10
|
-
use s::DefaultSite , 'http://api.flurry.com/'
|
11
|
-
use s::DefaultHeaders, {'Accept' => 'application/json'}
|
12
|
-
use s::DefaultQuery , {}
|
13
|
-
|
14
|
-
use s::CommonLogger , nil
|
15
|
-
use s::Cache , nil, 600 do
|
16
|
-
use s::ErrorHandler, lambda{|env| raise env[s::RESPONSE_BODY]['message']}
|
17
|
-
use s::ErrorDetectorHttp
|
18
|
-
use s::JsonDecode , true
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
module RestCore::Flurry::Client
|
23
|
-
# see: http://wiki.flurry.com/index.php?title=AppInfo
|
24
|
-
# >> f.app_info
|
25
|
-
# => {"@platform"=>"iPhone", "@name"=>"PicCollage",
|
26
|
-
# "@createdDate"=>"2011-07-24", "@category"=>"Photography",
|
27
|
-
# "@version"=>"1.0", "@generatedDate"=>"9/15/11 7:08 AM",
|
28
|
-
# "version"=>[{"@name"=>"2.1", ...
|
29
|
-
def app_info query={}
|
30
|
-
get('appInfo/getApplication', query)
|
31
|
-
end
|
32
|
-
|
33
|
-
# see: http://wiki.flurry.com/index.php?title=EventMetrics
|
34
|
-
# >> f.event_matrics(:startDate => '2011-09-14', :endDate => '2011-09-15')
|
35
|
-
# => {"@type"=>"Summary", "@startDate"=>"2011-09-14",
|
36
|
-
# "@endDate"=>"2011-09-15", "@version"=>"1.0",
|
37
|
-
# "@generatedDate"=>"9/15/117:08 AM",
|
38
|
-
# "event"=>[{"@usersLastWeek"=>"164", "@usersLastMonth"=>"642", ...
|
39
|
-
def event_metrics query={}
|
40
|
-
get('eventMetrics/Summary', query)
|
41
|
-
end
|
42
|
-
|
43
|
-
# see: http://wiki.flurry.com/index.php?title=AppMetrics
|
44
|
-
# >> f.metrics('ActiveUsers', {}, :weeks => 4)
|
45
|
-
# => [["2011-09-19", 6516], ["2011-09-18", 43920], ["2011-09-17", 45412],
|
46
|
-
# ["2011-09-16", 40972], ["2011-09-15", 37587], ["2011-09-14", 34918],
|
47
|
-
# ["2011-09-13", 35223], ["2011-09-12", 37750], ["2011-09-11", 45057],
|
48
|
-
# ["2011-09-10", 44077], ["2011-09-09", 36683], ["2011-09-08", 34871],
|
49
|
-
# ["2011-09-07", 35960], ["2011-09-06", 35829], ["2011-09-05", 37777],
|
50
|
-
# ["2011-09-04", 40233], ["2011-09-03", 39306], ["2011-09-02", 33467],
|
51
|
-
# ["2011-09-01", 31558], ["2011-08-31", 32096], ["2011-08-30", 34076],
|
52
|
-
# ["2011-08-29", 34950], ["2011-08-28", 40456], ["2011-08-27", 41332],
|
53
|
-
# ["2011-08-26", 37737], ["2011-08-25", 34392], ["2011-08-24", 33560],
|
54
|
-
# ["2011-08-23", 34722]]
|
55
|
-
def metrics path, query={}, opts={}
|
56
|
-
if weeks = opts.delete(:weeks)
|
57
|
-
query[:startDate] =
|
58
|
-
(Time.now + 86400 - 86400*7*weeks).strftime('%Y-%m-%d')
|
59
|
-
end
|
60
|
-
|
61
|
-
query[:endDate] ||= Time.now.strftime('%Y-%m-%d')
|
62
|
-
|
63
|
-
get("appMetrics/#{path}", query, opts)['day'].
|
64
|
-
map{ |i| [i['@date'], i['@value'].to_i] }.reverse
|
65
|
-
end
|
66
|
-
|
67
|
-
# >> f.weekly(f.metrics('ActiveUsers', {}, :weeks => 4))
|
68
|
-
# => [244548, 270227, 248513, 257149]
|
69
|
-
def weekly array
|
70
|
-
start = Time.parse(array.first.first, nil).to_i
|
71
|
-
array.group_by{ |(date, value)|
|
72
|
-
current = Time.parse(date, nil).to_i
|
73
|
-
- (current - start) / (86400*7)
|
74
|
-
# calling .last to discard week numbers created by group_by
|
75
|
-
}.sort.map(&:last).map{ |week|
|
76
|
-
week.map{ |(date, num)| num }.inject(&:+) }
|
77
|
-
end
|
78
|
-
|
79
|
-
# >> f.sum(f.weekly(f.metrics('ActiveUsers', {}, :weeks => 4)))
|
80
|
-
# => [1020437, 775889, 505662, 257149]
|
81
|
-
def sum array
|
82
|
-
reverse = array.reverse
|
83
|
-
(0...reverse.size).map{ |index|
|
84
|
-
reverse[1, index].inject(reverse.first, &:+)
|
85
|
-
}.reverse
|
86
|
-
end
|
87
|
-
|
88
|
-
def query
|
89
|
-
{'apiKey' => api_key ,
|
90
|
-
'apiAccessCode' => access_code}
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
RestCore::Flurry.send(:include, RestCore::Flurry::Client)
|
95
|
-
require 'rest-core/client/flurry/rails_util' if
|
96
|
-
Object.const_defined?(:Rails)
|
@@ -1,74 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core/util/rails_util_util'
|
3
|
-
|
4
|
-
module RestCore::Flurry::DefaultAttributes
|
5
|
-
def default_log_method ; Rails.logger.method(:debug); end
|
6
|
-
def default_cache ; Rails.cache ; end
|
7
|
-
def default_api_key ; nil ; end
|
8
|
-
def default_access_code; nil ; end
|
9
|
-
end
|
10
|
-
|
11
|
-
module RestCore::Flurry::RailsUtil
|
12
|
-
def self.init app=Rails
|
13
|
-
RestCore::Config.load_for_rails(RestCore::Flurry, 'flurry', app)
|
14
|
-
end
|
15
|
-
|
16
|
-
module Helper
|
17
|
-
def rc_flurry
|
18
|
-
controller.send(:rc_flurry)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.included controller
|
23
|
-
# skip if included already, any better way to detect this?
|
24
|
-
return if controller.respond_to?(:rc_flurry, true)
|
25
|
-
|
26
|
-
controller.helper(RestCore::Flurry::RailsUtil::Helper)
|
27
|
-
controller.instance_methods.select{ |method|
|
28
|
-
method.to_s =~ /^rc_flurry/
|
29
|
-
}.each{ |method| controller.send(:protected, method) }
|
30
|
-
end
|
31
|
-
|
32
|
-
def rc_flurry_setup options={}
|
33
|
-
rc_flurry_options_ctl.merge!(
|
34
|
-
RestCore::RailsUtilUtil.extract_options(
|
35
|
-
RestCore::Flurry.members, options, :reject))
|
36
|
-
rc_flurry_options_new.merge!(
|
37
|
-
RestCore::RailsUtilUtil.extract_options(
|
38
|
-
RestCore::Flurry.members, options, :select))
|
39
|
-
|
40
|
-
# we'll need to reinitialize rc_flurry with the new options,
|
41
|
-
# otherwise if you're calling rc_flurry before rc_flurry_setup,
|
42
|
-
# you'll end up with default options without the ones you've passed
|
43
|
-
# into rc_flurry_setup.
|
44
|
-
rc_flurry.send(:initialize, rc_flurry_options_new)
|
45
|
-
|
46
|
-
true # keep going
|
47
|
-
end
|
48
|
-
|
49
|
-
def rc_flurry
|
50
|
-
@rc_flurry ||= RestCore::Flurry.new(rc_flurry_options_new)
|
51
|
-
end
|
52
|
-
|
53
|
-
module_function
|
54
|
-
|
55
|
-
# ==================== begin options utility =======================
|
56
|
-
def rc_flurry_oget key
|
57
|
-
if rc_flurry_options_ctl.has_key?(key)
|
58
|
-
rc_flurry_options_ctl[key]
|
59
|
-
else
|
60
|
-
RestCore::Flurry.send("default_#{key}")
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def rc_flurry_options_ctl
|
65
|
-
@rc_flurry_options_ctl ||= {}
|
66
|
-
end
|
67
|
-
|
68
|
-
def rc_flurry_options_new
|
69
|
-
@rc_flurry_options_new ||= {}
|
70
|
-
end
|
71
|
-
# ==================== end options utility =======================
|
72
|
-
end
|
73
|
-
|
74
|
-
RestCore::Flurry::RailsUtil.init(Rails)
|
@@ -1,18 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core'
|
3
|
-
|
4
|
-
RestCore::Github = RestCore::Builder.client do
|
5
|
-
s = self.class # this is only for ruby 1.8!
|
6
|
-
use s::Timeout , 10
|
7
|
-
|
8
|
-
use s::DefaultSite , 'https://api.github.com/'
|
9
|
-
use s::DefaultHeaders, {'Accept' => 'application/json'}
|
10
|
-
use s::Oauth2Query , 'access_token', nil
|
11
|
-
|
12
|
-
use s::CommonLogger , nil
|
13
|
-
use s::Cache , nil, 600 do
|
14
|
-
use s::ErrorHandler, lambda{|env| raise env[s::RESPONSE_BODY]['message']}
|
15
|
-
use s::ErrorDetectorHttp
|
16
|
-
use s::JsonDecode , true
|
17
|
-
end
|
18
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core'
|
3
|
-
|
4
|
-
RestCore::Linkedin = RestCore::Builder.client(:data) do
|
5
|
-
s = self.class # this is only for ruby 1.8!
|
6
|
-
use s::Timeout , 10
|
7
|
-
|
8
|
-
use s::DefaultSite , 'https://api.linkedin.com/'
|
9
|
-
use s::DefaultHeaders, {'Accept' => 'application/json'}
|
10
|
-
use s::DefaultQuery , {'format' => 'json'}
|
11
|
-
|
12
|
-
use s::Oauth1Header ,
|
13
|
-
'uas/oauth/requestToken', 'uas/oauth/accessToken',
|
14
|
-
'https://www.linkedin.com/uas/oauth/authorize'
|
15
|
-
|
16
|
-
use s::CommonLogger , nil
|
17
|
-
use s::Cache , nil, 600 do
|
18
|
-
use s::ErrorHandler, lambda{|env|
|
19
|
-
if (body = env[s::RESPONSE_BODY]).kind_of?(Hash)
|
20
|
-
raise body['message']
|
21
|
-
else
|
22
|
-
raise body
|
23
|
-
end
|
24
|
-
}
|
25
|
-
use s::ErrorDetectorHttp
|
26
|
-
use s::JsonDecode , true
|
27
|
-
end
|
28
|
-
|
29
|
-
use s::Defaults , :data => lambda{{}}
|
30
|
-
end
|
31
|
-
|
32
|
-
module RestCore::Linkedin::Client
|
33
|
-
include RestCore
|
34
|
-
|
35
|
-
def oauth_token
|
36
|
-
data['oauth_token'] if data.kind_of?(Hash)
|
37
|
-
end
|
38
|
-
def oauth_token= token
|
39
|
-
data['oauth_token'] = token if data.kind_of?(Hash)
|
40
|
-
end
|
41
|
-
def oauth_token_secret
|
42
|
-
data['oauth_token_secret'] if data.kind_of?(Hash)
|
43
|
-
end
|
44
|
-
def oauth_token_secret= secret
|
45
|
-
data['oauth_token_secret'] = secret if data.kind_of?(Hash)
|
46
|
-
end
|
47
|
-
|
48
|
-
def me queries={}, opts={}
|
49
|
-
get('v1/people/~', queries, opts)
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
def set_token query
|
54
|
-
self.data = query
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
RestCore::Linkedin.send(:include, RestCore::ClientOauth1)
|
59
|
-
RestCore::Linkedin.send(:include, RestCore::Linkedin::Client)
|
@@ -1,47 +0,0 @@
|
|
1
|
-
|
2
|
-
RestCore::Mixi = RestCore::Builder.client(
|
3
|
-
:data, :consumer_key, :consumer_secret, :redirect_uri) do
|
4
|
-
s = self.class # this is only for ruby 1.8!
|
5
|
-
use s::Timeout , 10
|
6
|
-
|
7
|
-
use s::DefaultSite , 'http://api.mixi-platform.com/'
|
8
|
-
use s::DefaultHeaders, {'Accept' => 'application/json'}
|
9
|
-
|
10
|
-
use s::Oauth2Header , nil
|
11
|
-
|
12
|
-
use s::CommonLogger , nil
|
13
|
-
use s::Cache , nil, 600 do
|
14
|
-
use s::ErrorHandler , lambda{ |env| p env }
|
15
|
-
use s::ErrorDetectorHttp
|
16
|
-
use s::JsonDecode , true
|
17
|
-
end
|
18
|
-
|
19
|
-
use s::Defaults , :data => lambda{{}}
|
20
|
-
end
|
21
|
-
|
22
|
-
module RestCore::Mixi::Client
|
23
|
-
include RestCore
|
24
|
-
|
25
|
-
def access_token
|
26
|
-
data['access_token'] if data.kind_of?(Hash)
|
27
|
-
end
|
28
|
-
|
29
|
-
def authorize_url queries={}
|
30
|
-
url('https://mixi.jp/connect_authorize.pl',
|
31
|
-
{:client_id => consumer_key,
|
32
|
-
:response_type => 'code',
|
33
|
-
:scope => 'r_profile'}.merge(queries))
|
34
|
-
end
|
35
|
-
|
36
|
-
def authorize! code, payload={}, opts={}
|
37
|
-
pl = {:client_id => consumer_key ,
|
38
|
-
:client_secret => consumer_secret,
|
39
|
-
:redirect_uri => redirect_uri ,
|
40
|
-
:grant_type => 'authorization_code',
|
41
|
-
:code => code}.merge(payload)
|
42
|
-
|
43
|
-
self.data = post('https://secure.mixi-platform.com/2/token', pl, {}, opts)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
RestCore::Mixi.send(:include, RestCore::Mixi::Client)
|
@@ -1,101 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core'
|
3
|
-
|
4
|
-
RestCore::Twitter = RestCore::Builder.client(:data) do
|
5
|
-
s = self.class # this is only for ruby 1.8!
|
6
|
-
use s::Timeout , 10
|
7
|
-
|
8
|
-
use s::DefaultSite , 'https://api.twitter.com/'
|
9
|
-
use s::DefaultHeaders, {'Accept' => 'application/json'}
|
10
|
-
|
11
|
-
use s::Oauth1Header ,
|
12
|
-
'oauth/request_token', 'oauth/access_token', 'oauth/authorize'
|
13
|
-
|
14
|
-
use s::CommonLogger , nil
|
15
|
-
use s::Cache , nil, 600 do
|
16
|
-
use s::ErrorHandler, lambda{ |env|
|
17
|
-
raise ::RestCore::Twitter::Error.call(env) }
|
18
|
-
use s::ErrorDetectorHttp
|
19
|
-
use s::JsonDecode , true
|
20
|
-
end
|
21
|
-
|
22
|
-
use s::Defaults , :data => lambda{{}}
|
23
|
-
end
|
24
|
-
|
25
|
-
class RestCore::Twitter::Error < RestCore::Error
|
26
|
-
include RestCore
|
27
|
-
class ServerError < Twitter::Error; end
|
28
|
-
|
29
|
-
class BadRequest < Twitter::Error; end
|
30
|
-
class Unauthorized < Twitter::Error; end
|
31
|
-
class Forbidden < Twitter::Error; end
|
32
|
-
class NotFound < Twitter::Error; end
|
33
|
-
class NotAcceptable < Twitter::Error; end
|
34
|
-
class EnhanceYourCalm < Twitter::Error; end
|
35
|
-
|
36
|
-
class InternalServerError < Twitter::Error::ServerError; end
|
37
|
-
class BadGateway < Twitter::Error::ServerError; end
|
38
|
-
class ServiceUnavailable < Twitter::Error::ServerError; end
|
39
|
-
|
40
|
-
attr_reader :error, :url
|
41
|
-
def initialize error, url=''
|
42
|
-
@error, @url = error, url
|
43
|
-
super("#{error.inspect} from #{url}")
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.call env
|
47
|
-
error, url = env[RESPONSE_BODY], Middleware.request_uri(env)
|
48
|
-
return new(env[FAIL], url) unless error.kind_of?(Hash)
|
49
|
-
case env[RESPONSE_STATUS]
|
50
|
-
when 400; BadRequest
|
51
|
-
when 401; Unauthorized
|
52
|
-
when 403; Forbidden
|
53
|
-
when 404; NotFound
|
54
|
-
when 406; NotAcceptable
|
55
|
-
when 420; EnhanceYourCalm
|
56
|
-
when 500; InternalServerError
|
57
|
-
when 502; BadGateway
|
58
|
-
when 503; ServiceUnavailable
|
59
|
-
else ; self
|
60
|
-
end.new(error, url)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
module RestCore::Twitter::Client
|
65
|
-
include RestCore
|
66
|
-
|
67
|
-
def oauth_token
|
68
|
-
data['oauth_token'] if data.kind_of?(Hash)
|
69
|
-
end
|
70
|
-
def oauth_token= token
|
71
|
-
data['oauth_token'] = token if data.kind_of?(Hash)
|
72
|
-
end
|
73
|
-
def oauth_token_secret
|
74
|
-
data['oauth_token_secret'] if data.kind_of?(Hash)
|
75
|
-
end
|
76
|
-
def oauth_token_secret= secret
|
77
|
-
data['oauth_token_secret'] = secret if data.kind_of?(Hash)
|
78
|
-
end
|
79
|
-
|
80
|
-
def tweet status, media=nil, opts={}
|
81
|
-
if media
|
82
|
-
post('https://upload.twitter.com/1/statuses/update_with_media.json',
|
83
|
-
{:status => status, 'media[]' => media},
|
84
|
-
{}, opts)
|
85
|
-
else
|
86
|
-
post('1/statuses/update.json', {:status => status}, {}, opts)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def statuses user, queries={}, opts={}
|
91
|
-
get('1/statuses/user_timeline.json', {:id => user}.merge(queries), opts)
|
92
|
-
end
|
93
|
-
|
94
|
-
private
|
95
|
-
def set_token query
|
96
|
-
self.data = query
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
RestCore::Twitter.send(:include, RestCore::ClientOauth1)
|
101
|
-
RestCore::Twitter.send(:include, RestCore::Twitter::Client)
|
@@ -1,97 +0,0 @@
|
|
1
|
-
|
2
|
-
require 'rest-core/test'
|
3
|
-
|
4
|
-
describe RestCore::Facebook do
|
5
|
-
after do
|
6
|
-
WebMock.reset!
|
7
|
-
RR.verify
|
8
|
-
end
|
9
|
-
|
10
|
-
should 'generate correct url' do
|
11
|
-
TestHelper.normalize_url(
|
12
|
-
RestCore::Facebook.new(:access_token => 'awesome').
|
13
|
-
url('path', :query => 'str')).should.eq \
|
14
|
-
'https://graph.facebook.com/path?access_token=awesome&query=str'
|
15
|
-
end
|
16
|
-
|
17
|
-
should 'request to correct server' do
|
18
|
-
stub_request(:get, 'http://nothing.godfat.org/me').with(
|
19
|
-
:headers => {'Accept' => 'text/plain',
|
20
|
-
'Accept-Language' => 'zh-tw',
|
21
|
-
'Accept-Encoding' => 'gzip, deflate', # this is by ruby
|
22
|
-
}.merge(RUBY_VERSION < '1.9.2' ?
|
23
|
-
{} :
|
24
|
-
{'User-Agent' => 'Ruby'})). # this is by ruby
|
25
|
-
to_return(:body => '{"data": []}')
|
26
|
-
|
27
|
-
RestCore::Facebook.new(:site => 'http://nothing.godfat.org/',
|
28
|
-
:lang => 'zh-tw',
|
29
|
-
:accept => 'text/plain').
|
30
|
-
get('me').should.eq({'data' => []})
|
31
|
-
end
|
32
|
-
|
33
|
-
should 'pass custom headers' do
|
34
|
-
stub_request(:get, 'http://example.com/').with(
|
35
|
-
:headers => {'Accept' => 'application/json',
|
36
|
-
'Accept-Language' => 'en-us',
|
37
|
-
'Accept-Encoding' => 'gzip, deflate', # this is by ruby
|
38
|
-
'X-Forwarded-For' => '127.0.0.1',
|
39
|
-
}.merge(RUBY_VERSION < '1.9.2' ?
|
40
|
-
{} :
|
41
|
-
{'User-Agent' => 'Ruby'})). # this is by ruby
|
42
|
-
to_return(:body => '{"data": []}')
|
43
|
-
|
44
|
-
RestCore::Facebook.new.get('http://example.com', {},
|
45
|
-
{:headers => {'X-Forwarded-For' => '127.0.0.1'}} ).
|
46
|
-
should.eq({'data' => []})
|
47
|
-
end
|
48
|
-
|
49
|
-
should 'post right' do
|
50
|
-
stub_request(:post, 'https://graph.facebook.com/feed/me').
|
51
|
-
with(:body => 'message=hi%20there').to_return(:body => 'ok')
|
52
|
-
|
53
|
-
RestCore::Facebook.new(:json_decode => false).
|
54
|
-
post('feed/me', :message => 'hi there').should == 'ok'
|
55
|
-
end
|
56
|
-
|
57
|
-
should 'use secret_access_token' do
|
58
|
-
stub_request(:get,
|
59
|
-
'https://graph.facebook.com/me?access_token=1|2').
|
60
|
-
to_return(:body => 'ok')
|
61
|
-
|
62
|
-
rg = RestCore::Facebook.new(
|
63
|
-
:json_decode => false, :access_token => 'wrong',
|
64
|
-
:app_id => '1', :secret => '2')
|
65
|
-
rg.get('me', {}, :secret => true).should.eq 'ok'
|
66
|
-
rg.url('me', {}, :secret => true).should.eq \
|
67
|
-
'https://graph.facebook.com/me?access_token=1%7C2'
|
68
|
-
rg.url('me', {}, :secret => true, :site => '/').should.eq \
|
69
|
-
'/me?access_token=1%7C2'
|
70
|
-
end
|
71
|
-
|
72
|
-
should 'suppress auto-decode in an api call' do
|
73
|
-
stub_request(:get, 'https://graph.facebook.com/woot').
|
74
|
-
to_return(:body => 'bad json')
|
75
|
-
|
76
|
-
rg = RestCore::Facebook.new(:json_decode => true)
|
77
|
-
rg.get('woot', {}, :json_decode => false).should.eq 'bad json'
|
78
|
-
rg.json_decode.should == true
|
79
|
-
end
|
80
|
-
|
81
|
-
should 'not raise exception when encountering error' do
|
82
|
-
[500, 401, 402, 403].each{ |status|
|
83
|
-
stub_request(:delete, 'https://graph.facebook.com/123').to_return(
|
84
|
-
:body => '[]', :status => status)
|
85
|
-
|
86
|
-
RestCore::Facebook.new.delete('123').should.eq []
|
87
|
-
}
|
88
|
-
end
|
89
|
-
|
90
|
-
should 'convert query to string' do
|
91
|
-
stub(o = Object.new).to_s{ 'i am mock' }
|
92
|
-
stub_request(:get, "https://graph.facebook.com/search?q=i%20am%20mock").
|
93
|
-
to_return(:body => 'ok')
|
94
|
-
RestCore::Facebook.new(:json_decode => false).
|
95
|
-
get('search', :q => o).should.eq 'ok'
|
96
|
-
end
|
97
|
-
end
|