rest-core 0.4.0.pre.0 → 0.4.0.pre.1
Sign up to get free protection for your applications and to get access to all the features.
- data/example/rails2/app/controllers/application_controller.rb +4 -0
- data/example/rails2/test/functional/application_controller_test.rb +6 -0
- data/example/rails3/app/controllers/application_controller.rb +4 -0
- data/example/rails3/test/functional/application_controller_test.rb +6 -0
- data/lib/rest-core/client/facebook/rails_util.rb +9 -9
- data/lib/rest-core/client/flurry/rails_util.rb +8 -8
- data/lib/rest-core/client/flurry.rb +18 -10
- data/lib/rest-core/client/mixi.rb +0 -4
- data/lib/rest-core/version.rb +1 -1
- data/rest-core.gemspec +4 -2
- data/test/client/facebook/test_load_config.rb +4 -4
- data/test/client/flurry/test_metrics.rb +83 -0
- metadata +6 -4
@@ -182,4 +182,10 @@ class ApplicationControllerTest < ActionController::TestCase
|
|
182
182
|
"#{RestCore::Flurry .default_api_key}",
|
183
183
|
@response.body.strip
|
184
184
|
end
|
185
|
+
|
186
|
+
def test_no_ns_pollution
|
187
|
+
get(:no_ns_pollution)
|
188
|
+
assert_response :success
|
189
|
+
assert_equal 'Timeout::Error', @response.body.strip
|
190
|
+
end
|
185
191
|
end
|
@@ -182,4 +182,10 @@ class ApplicationControllerTest < ActionController::TestCase
|
|
182
182
|
"#{RestCore::Flurry .default_api_key}",
|
183
183
|
@response.body.strip
|
184
184
|
end
|
185
|
+
|
186
|
+
def test_no_ns_pollution
|
187
|
+
get(:no_ns_pollution)
|
188
|
+
assert_response :success
|
189
|
+
assert_equal 'Timeout::Error', @response.body.strip
|
190
|
+
end
|
185
191
|
end
|
@@ -18,10 +18,8 @@ module RestCore::Facebook::DefaultAttributes
|
|
18
18
|
end
|
19
19
|
|
20
20
|
module RestCore::Facebook::RailsUtil
|
21
|
-
include RestCore
|
22
|
-
|
23
21
|
def self.init app=Rails
|
24
|
-
Config.load_for_rails(Facebook, 'facebook', app)
|
22
|
+
RestCore::Config.load_for_rails(RestCore::Facebook, 'facebook', app)
|
25
23
|
end
|
26
24
|
|
27
25
|
module Helper
|
@@ -34,9 +32,9 @@ module RestCore::Facebook::RailsUtil
|
|
34
32
|
# skip if included already, any better way to detect this?
|
35
33
|
return if controller.respond_to?(:rc_facebook, true)
|
36
34
|
|
37
|
-
controller.rescue_from(Facebook::Error::AccessToken,
|
35
|
+
controller.rescue_from(RestCore::Facebook::Error::AccessToken,
|
38
36
|
:with => :rc_facebook_on_access_token_error)
|
39
|
-
controller.helper(Facebook::RailsUtil::Helper)
|
37
|
+
controller.helper(RestCore::Facebook::RailsUtil::Helper)
|
40
38
|
controller.instance_methods.select{ |method|
|
41
39
|
method.to_s =~ /^rc_facebook/
|
42
40
|
}.each{ |method| controller.send(:protected, method) }
|
@@ -44,9 +42,11 @@ module RestCore::Facebook::RailsUtil
|
|
44
42
|
|
45
43
|
def rc_facebook_setup options={}
|
46
44
|
rc_facebook_options_ctl.merge!(
|
47
|
-
RailsUtilUtil.extract_options(
|
45
|
+
RestCore::RailsUtilUtil.extract_options(
|
46
|
+
RestCore::Facebook.members, options, :reject))
|
48
47
|
rc_facebook_options_new.merge!(
|
49
|
-
RailsUtilUtil.extract_options(
|
48
|
+
RestCore::RailsUtilUtil.extract_options(
|
49
|
+
RestCore::Facebook.members, options, :select))
|
50
50
|
|
51
51
|
# we'll need to reinitialize rc_facebook with the new options,
|
52
52
|
# otherwise if you're calling rc_facebook before rc_facebook_setup,
|
@@ -78,7 +78,7 @@ module RestCore::Facebook::RailsUtil
|
|
78
78
|
|
79
79
|
# override this if you need different app_id and secret
|
80
80
|
def rc_facebook
|
81
|
-
@rc_facebook ||= Facebook.new(rc_facebook_options_new)
|
81
|
+
@rc_facebook ||= RestCore::Facebook.new(rc_facebook_options_new)
|
82
82
|
end
|
83
83
|
|
84
84
|
def rc_facebook_on_access_token_error error=nil
|
@@ -151,7 +151,7 @@ module RestCore::Facebook::RailsUtil
|
|
151
151
|
if rc_facebook_options_ctl.has_key?(key)
|
152
152
|
rc_facebook_options_ctl[key]
|
153
153
|
else
|
154
|
-
Facebook.send("default_#{key}")
|
154
|
+
RestCore::Facebook.send("default_#{key}")
|
155
155
|
end
|
156
156
|
end
|
157
157
|
|
@@ -7,10 +7,8 @@ module RestCore::Flurry::DefaultAttributes
|
|
7
7
|
end
|
8
8
|
|
9
9
|
module RestCore::Flurry::RailsUtil
|
10
|
-
include RestCore
|
11
|
-
|
12
10
|
def self.init app=Rails
|
13
|
-
Config.load_for_rails(Flurry, 'flurry', app)
|
11
|
+
RestCore::Config.load_for_rails(RestCore::Flurry, 'flurry', app)
|
14
12
|
end
|
15
13
|
|
16
14
|
module Helper
|
@@ -23,7 +21,7 @@ module RestCore::Flurry::RailsUtil
|
|
23
21
|
# skip if included already, any better way to detect this?
|
24
22
|
return if controller.respond_to?(:rc_flurry, true)
|
25
23
|
|
26
|
-
controller.helper(Flurry::RailsUtil::Helper)
|
24
|
+
controller.helper(RestCore::Flurry::RailsUtil::Helper)
|
27
25
|
controller.instance_methods.select{ |method|
|
28
26
|
method.to_s =~ /^rc_flurry/
|
29
27
|
}.each{ |method| controller.send(:protected, method) }
|
@@ -31,9 +29,11 @@ module RestCore::Flurry::RailsUtil
|
|
31
29
|
|
32
30
|
def rc_flurry_setup options={}
|
33
31
|
rc_flurry_options_ctl.merge!(
|
34
|
-
RailsUtilUtil.extract_options(
|
32
|
+
RestCore::RailsUtilUtil.extract_options(
|
33
|
+
RestCore::Flurry.members, options, :reject))
|
35
34
|
rc_flurry_options_new.merge!(
|
36
|
-
RailsUtilUtil.extract_options(
|
35
|
+
RestCore::RailsUtilUtil.extract_options(
|
36
|
+
RestCore::Flurry.members, options, :select))
|
37
37
|
|
38
38
|
# we'll need to reinitialize rc_flurry with the new options,
|
39
39
|
# otherwise if you're calling rc_flurry before rc_flurry_setup,
|
@@ -45,7 +45,7 @@ module RestCore::Flurry::RailsUtil
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def rc_flurry
|
48
|
-
@rc_flurry ||= Flurry.new(rc_flurry_options_new)
|
48
|
+
@rc_flurry ||= RestCore::Flurry.new(rc_flurry_options_new)
|
49
49
|
end
|
50
50
|
|
51
51
|
module_function
|
@@ -55,7 +55,7 @@ module RestCore::Flurry::RailsUtil
|
|
55
55
|
if rc_flurry_options_ctl.has_key?(key)
|
56
56
|
rc_flurry_options_ctl[key]
|
57
57
|
else
|
58
|
-
Flurry.send("default_#{key}")
|
58
|
+
RestCore::Flurry.send("default_#{key}")
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
@@ -43,9 +43,16 @@ module RestCore::Flurry::Client
|
|
43
43
|
|
44
44
|
# see: http://wiki.flurry.com/index.php?title=AppMetrics
|
45
45
|
# >> f.metrics('ActiveUsers', {}, :weeks => 4)
|
46
|
-
# => [["2011-09-
|
47
|
-
# ["2011-09-
|
48
|
-
# ["2011-09-
|
46
|
+
# => [["2011-09-19", 6516], ["2011-09-18", 43920], ["2011-09-17", 45412],
|
47
|
+
# ["2011-09-16", 40972], ["2011-09-15", 37587], ["2011-09-14", 34918],
|
48
|
+
# ["2011-09-13", 35223], ["2011-09-12", 37750], ["2011-09-11", 45057],
|
49
|
+
# ["2011-09-10", 44077], ["2011-09-09", 36683], ["2011-09-08", 34871],
|
50
|
+
# ["2011-09-07", 35960], ["2011-09-06", 35829], ["2011-09-05", 37777],
|
51
|
+
# ["2011-09-04", 40233], ["2011-09-03", 39306], ["2011-09-02", 33467],
|
52
|
+
# ["2011-09-01", 31558], ["2011-08-31", 32096], ["2011-08-30", 34076],
|
53
|
+
# ["2011-08-29", 34950], ["2011-08-28", 40456], ["2011-08-27", 41332],
|
54
|
+
# ["2011-08-26", 37737], ["2011-08-25", 34392], ["2011-08-24", 33560],
|
55
|
+
# ["2011-08-23", 34722]]
|
49
56
|
def metrics path, query={}, opts={}
|
50
57
|
if weeks = opts.delete(:weeks)
|
51
58
|
query[:startDate] =
|
@@ -59,23 +66,24 @@ module RestCore::Flurry::Client
|
|
59
66
|
end
|
60
67
|
|
61
68
|
# >> f.weekly(f.metrics('ActiveUsers', {}, :weeks => 4))
|
62
|
-
# => [
|
69
|
+
# => [244548, 270227, 248513, 257149]
|
63
70
|
def weekly array
|
64
|
-
start = Time.parse(array.
|
71
|
+
start = Time.parse(array.first.first).to_i
|
65
72
|
array.group_by{ |(date, value)|
|
66
73
|
current = Time.parse(date).to_i
|
67
|
-
(current - start) / (86400*7)
|
74
|
+
- (current - start) / (86400*7)
|
68
75
|
# calling .last to discard week numbers created by group_by
|
69
76
|
}.sort.map(&:last).map{ |week|
|
70
77
|
week.map{ |(date, num)| num }.inject(&:+) }
|
71
78
|
end
|
72
79
|
|
73
80
|
# >> f.sum(f.weekly(f.metrics('ActiveUsers', {}, :weeks => 4)))
|
74
|
-
# => [
|
81
|
+
# => [1020437, 775889, 505662, 257149]
|
75
82
|
def sum array
|
76
|
-
array.
|
77
|
-
|
78
|
-
|
83
|
+
reverse = array.reverse
|
84
|
+
reverse.map.with_index{ |_, index|
|
85
|
+
reverse[1, index].inject(reverse.first, &:+)
|
86
|
+
}.reverse
|
79
87
|
end
|
80
88
|
|
81
89
|
def query
|
@@ -45,7 +45,3 @@ module RestCore::Mixi::Client
|
|
45
45
|
end
|
46
46
|
|
47
47
|
RestCore::Mixi.send(:include, RestCore::Mixi::Client)
|
48
|
-
|
49
|
-
$m = RestCore::Mixi.new(:consumer_key => '87b9651a2291e4853ac0',
|
50
|
-
:consumer_secret => '98866989c89c42e47d7d38394637faa84341ebb4',
|
51
|
-
:redirect_uri => 'http://pic-collage.com')
|
data/lib/rest-core/version.rb
CHANGED
data/rest-core.gemspec
CHANGED
@@ -2,13 +2,13 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "rest-core"
|
5
|
-
s.version = "0.4.0.pre.
|
5
|
+
s.version = "0.4.0.pre.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = [
|
9
9
|
"Cardinal Blue",
|
10
10
|
"Lin Jen-Shin (godfat)"]
|
11
|
-
s.date = "2011-09-
|
11
|
+
s.date = "2011-09-19"
|
12
12
|
s.description = "A modular Ruby REST client collection/infrastructure\n\nIn this era of web services and mashups, we have seen a blooming of REST\nAPIs. One might wonder, how do we use these APIs easily and elegantly?\nSince REST is very simple compared to SOAP, it is not hard to build a\ndedicated client ourselves.\n\nWe have developed [rest-core][] with composable middlewares to build a\nREST client, based on the effort from [rest-graph][]. In the cases of\ncommon APIs such as Facebook, Github, and Twitter, developers can simply\nuse the built-in dedicated clients provided by rest-core, or do it yourself\nfor any other REST APIs.\n\n[rest-core]: http://github.com/cardinalblue/rest-core\n[rest-graph]: http://github.com/cardinalblue/rest-graph"
|
13
13
|
s.email = ["dev (XD) cardinalblue.com"]
|
14
14
|
s.executables = ["rib-rest-core"]
|
@@ -129,6 +129,7 @@ Gem::Specification.new do |s|
|
|
129
129
|
"test/client/facebook/test_parse.rb",
|
130
130
|
"test/client/facebook/test_serialize.rb",
|
131
131
|
"test/client/facebook/test_timeout.rb",
|
132
|
+
"test/client/flurry/test_metrics.rb",
|
132
133
|
"test/client/twitter/test_api.rb",
|
133
134
|
"test/test_builder.rb",
|
134
135
|
"test/test_client.rb",
|
@@ -152,6 +153,7 @@ Gem::Specification.new do |s|
|
|
152
153
|
"test/client/facebook/test_parse.rb",
|
153
154
|
"test/client/facebook/test_serialize.rb",
|
154
155
|
"test/client/facebook/test_timeout.rb",
|
156
|
+
"test/client/flurry/test_metrics.rb",
|
155
157
|
"test/client/twitter/test_api.rb",
|
156
158
|
"test/test_builder.rb",
|
157
159
|
"test/test_client.rb",
|
@@ -2,7 +2,6 @@
|
|
2
2
|
require 'rest-core/test'
|
3
3
|
|
4
4
|
require 'rest-core/util/config'
|
5
|
-
::Rails = Object.new
|
6
5
|
|
7
6
|
describe RestCore::Config do
|
8
7
|
|
@@ -22,9 +21,10 @@ describe RestCore::Config do
|
|
22
21
|
end
|
23
22
|
|
24
23
|
should 'honor rails config' do
|
25
|
-
|
26
|
-
mock(
|
27
|
-
|
24
|
+
app = Object.new
|
25
|
+
mock(app).env { 'test' }
|
26
|
+
mock(app).root{ File.dirname(__FILE__) }
|
27
|
+
RestCore::Config.load_for_rails(@klass, 'facebook', app)
|
28
28
|
check
|
29
29
|
end
|
30
30
|
|
@@ -0,0 +1,83 @@
|
|
1
|
+
|
2
|
+
require 'rest-core/test'
|
3
|
+
|
4
|
+
require 'time'
|
5
|
+
|
6
|
+
describe RestCore::Flurry do
|
7
|
+
after do
|
8
|
+
WebMock.reset!
|
9
|
+
RR.verify
|
10
|
+
end
|
11
|
+
|
12
|
+
before do
|
13
|
+
startDate = '2011-08-23'
|
14
|
+
endDate = '2011-09-19'
|
15
|
+
@flurry = RestCore::Flurry.new
|
16
|
+
stub(@flurry).Time.stub!.now{ Time.parse(endDate) }
|
17
|
+
stub_request(:get,
|
18
|
+
"http://api.flurry.com/appMetrics/ActiveUsers?" \
|
19
|
+
"startDate=#{startDate}&endDate=#{endDate}").
|
20
|
+
to_return(:body =>
|
21
|
+
'{"@startDate":"2011-08-23",
|
22
|
+
"@metric":"ActiveUsersByDay",
|
23
|
+
"@endDate":"2011-09-19",
|
24
|
+
"@version":"1.0",
|
25
|
+
"@generatedDate":"9/19/11 5:54 AM",
|
26
|
+
"day":
|
27
|
+
[{"@value":"34722","@date":"2011-08-23"},
|
28
|
+
{"@value":"33560","@date":"2011-08-24"},
|
29
|
+
{"@value":"34392","@date":"2011-08-25"},
|
30
|
+
{"@value":"37737","@date":"2011-08-26"},
|
31
|
+
{"@value":"41332","@date":"2011-08-27"},
|
32
|
+
{"@value":"40456","@date":"2011-08-28"},
|
33
|
+
{"@value":"34950","@date":"2011-08-29"},
|
34
|
+
{"@value":"34076","@date":"2011-08-30"},
|
35
|
+
{"@value":"32096","@date":"2011-08-31"},
|
36
|
+
{"@value":"31558","@date":"2011-09-01"},
|
37
|
+
{"@value":"33467","@date":"2011-09-02"},
|
38
|
+
{"@value":"39306","@date":"2011-09-03"},
|
39
|
+
{"@value":"40233","@date":"2011-09-04"},
|
40
|
+
{"@value":"37777","@date":"2011-09-05"},
|
41
|
+
{"@value":"35829","@date":"2011-09-06"},
|
42
|
+
{"@value":"35960","@date":"2011-09-07"},
|
43
|
+
{"@value":"34871","@date":"2011-09-08"},
|
44
|
+
{"@value":"36683","@date":"2011-09-09"},
|
45
|
+
{"@value":"44077","@date":"2011-09-10"},
|
46
|
+
{"@value":"45057","@date":"2011-09-11"},
|
47
|
+
{"@value":"37750","@date":"2011-09-12"},
|
48
|
+
{"@value":"35223","@date":"2011-09-13"},
|
49
|
+
{"@value":"34918","@date":"2011-09-14"},
|
50
|
+
{"@value":"37587","@date":"2011-09-15"},
|
51
|
+
{"@value":"40972","@date":"2011-09-16"},
|
52
|
+
{"@value":"45412","@date":"2011-09-17"},
|
53
|
+
{"@value":"43920","@date":"2011-09-18"},
|
54
|
+
{"@value":"6516","@date":"2011-09-19"}]}')
|
55
|
+
|
56
|
+
@active_users =
|
57
|
+
[["2011-09-19", 6516], ["2011-09-18", 43920], ["2011-09-17", 45412],
|
58
|
+
["2011-09-16", 40972], ["2011-09-15", 37587], ["2011-09-14", 34918],
|
59
|
+
["2011-09-13", 35223], ["2011-09-12", 37750], ["2011-09-11", 45057],
|
60
|
+
["2011-09-10", 44077], ["2011-09-09", 36683], ["2011-09-08", 34871],
|
61
|
+
["2011-09-07", 35960], ["2011-09-06", 35829], ["2011-09-05", 37777],
|
62
|
+
["2011-09-04", 40233], ["2011-09-03", 39306], ["2011-09-02", 33467],
|
63
|
+
["2011-09-01", 31558], ["2011-08-31", 32096], ["2011-08-30", 34076],
|
64
|
+
["2011-08-29", 34950], ["2011-08-28", 40456], ["2011-08-27", 41332],
|
65
|
+
["2011-08-26", 37737], ["2011-08-25", 34392], ["2011-08-24", 33560],
|
66
|
+
["2011-08-23", 34722]]
|
67
|
+
|
68
|
+
@weekly = [244548, 270227, 248513, 257149]
|
69
|
+
end
|
70
|
+
|
71
|
+
should 'metrics("ActiveUsers")' do
|
72
|
+
@flurry.metrics('ActiveUsers', {}, :weeks => 4).should.eq @active_users
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
should 'weekly(metrics("ActiveUsers"))' do
|
77
|
+
@flurry.weekly(@active_users).should.eq @weekly
|
78
|
+
end
|
79
|
+
|
80
|
+
should 'sum(weekly(metrics("ActiveUsers")))' do
|
81
|
+
@flurry.sum(@weekly).should.eq [1020437, 775889, 505662, 257149]
|
82
|
+
end
|
83
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rest-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.0.pre.
|
4
|
+
version: 0.4.0.pre.1
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-09-
|
13
|
+
date: 2011-09-19 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rest-client
|
17
|
-
requirement: &
|
17
|
+
requirement: &2168955760 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,7 +22,7 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2168955760
|
26
26
|
description: ! 'A modular Ruby REST client collection/infrastructure
|
27
27
|
|
28
28
|
|
@@ -172,6 +172,7 @@ files:
|
|
172
172
|
- test/client/facebook/test_parse.rb
|
173
173
|
- test/client/facebook/test_serialize.rb
|
174
174
|
- test/client/facebook/test_timeout.rb
|
175
|
+
- test/client/flurry/test_metrics.rb
|
175
176
|
- test/client/twitter/test_api.rb
|
176
177
|
- test/test_builder.rb
|
177
178
|
- test/test_client.rb
|
@@ -215,6 +216,7 @@ test_files:
|
|
215
216
|
- test/client/facebook/test_parse.rb
|
216
217
|
- test/client/facebook/test_serialize.rb
|
217
218
|
- test/client/facebook/test_timeout.rb
|
219
|
+
- test/client/flurry/test_metrics.rb
|
218
220
|
- test/client/twitter/test_api.rb
|
219
221
|
- test/test_builder.rb
|
220
222
|
- test/test_client.rb
|