rails_bridge 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/VERSION +1 -1
- data/lib/rails_bridge/content_bridge.rb +36 -35
- data/rails_bridge.gemspec +2 -2
- data/spec/integration/content_bridge_spec.rb +22 -0
- data/spec/unit/content_bridge_spec.rb +2 -1
- metadata +4 -4
data/Gemfile.lock
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.9
|
@@ -14,9 +14,8 @@ module RailsBridge
|
|
14
14
|
|
15
15
|
# Class Attributes
|
16
16
|
class_inheritable_accessor :protocol, :host, :port, :path, :params, :request_timeout, :cache_timeout, :default_content
|
17
|
-
class_inheritable_accessor :cache, :logger
|
17
|
+
class_inheritable_accessor :cache, :logger, :on_success
|
18
18
|
@@content_requests = {}
|
19
|
-
@@on_success = nil
|
20
19
|
|
21
20
|
# Initialize Default Class Attribute Values
|
22
21
|
self.request_timeout = DEFAULT_REQUEST_TIMEOUT
|
@@ -30,18 +29,14 @@ module RailsBridge
|
|
30
29
|
# custom accessor methods
|
31
30
|
def content_requests; @@content_requests; end
|
32
31
|
|
32
|
+
alias :cia_on_sucess :on_success
|
33
33
|
def on_success
|
34
34
|
if block_given?
|
35
|
-
|
35
|
+
self.on_success= Proc.new
|
36
36
|
else
|
37
|
-
|
37
|
+
self.cia_on_sucess
|
38
38
|
end
|
39
39
|
end
|
40
|
-
|
41
|
-
def on_success=(proc)
|
42
|
-
@@on_success = proc
|
43
|
-
end
|
44
|
-
|
45
40
|
|
46
41
|
def cache_set key, content, expires_in
|
47
42
|
logger.debug "set key: #{key}"
|
@@ -53,41 +48,45 @@ module RailsBridge
|
|
53
48
|
content = self.cache.fetch(key, :race_condition_ttl=>5.seconds)
|
54
49
|
end
|
55
50
|
|
56
|
-
def
|
51
|
+
def get_content_request_from_remote( remote )
|
57
52
|
if remote.is_a? Symbol
|
58
53
|
raise "Undefined content_request :#{remote}" unless remote = @@content_requests[remote]
|
59
54
|
end
|
60
55
|
if remote.is_a? Hash
|
61
56
|
remote = RailsBridge::ContentRequest.new remote
|
62
57
|
remote.content_bridge = self
|
58
|
+
elsif remote.is_a? String
|
59
|
+
remote = RailsBridge::ContentRequest.new(:url=>remote)
|
60
|
+
remote.content_bridge = self
|
61
|
+
elsif !remote.is_a? RailsBridge::ContentRequest
|
62
|
+
raise "Unexpected remote type: #{remote.class}"
|
63
63
|
end
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
options[:
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
end
|
76
|
-
options[:request_timeout] ||= self.request_timeout
|
77
|
-
options[:cache_timeout] ||= self.cache_timeout
|
78
|
-
options[:timeout] = options.delete(:request_timeout) # Rename the request timeout param for Typhoeus
|
79
|
-
[remote_url, options]
|
64
|
+
remote
|
65
|
+
end
|
66
|
+
|
67
|
+
# collect options by precedence
|
68
|
+
def get_merged_options( content_request, options )
|
69
|
+
options[:params] = content_request.params.merge( options[:params] || {} )
|
70
|
+
options[:request_timeout] ||= content_request.request_timeout || self.request_timeout
|
71
|
+
options[:cache_timeout] ||= content_request.cache_timeout || self.cache_timeout
|
72
|
+
options[:on_success] ||= content_request.on_success || self.on_success
|
73
|
+
options[:default_content] ||= content_request.default_content || self.default_content
|
74
|
+
options
|
80
75
|
end
|
81
76
|
|
82
77
|
def request_remote_content( remote, options={}, &block )
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
78
|
+
content_request = get_content_request_from_remote( remote )
|
79
|
+
options = get_merged_options( content_request, options )
|
80
|
+
|
81
|
+
# convert options for Typhoeus
|
82
|
+
options[:timeout] = options.delete(:request_timeout) # Rename the request timeout param for Typhoeus
|
83
|
+
on_success_proc = options.delete(:on_success)
|
84
|
+
default_content = options.delete(:default_content)
|
85
|
+
|
87
86
|
# options[:verbose] = true # for debugging only
|
88
|
-
|
87
|
+
|
88
|
+
request = Typhoeus::Request.new(content_request.url, options)
|
89
89
|
if self.cache && request.cache_timeout && request.cache_timeout > 0 && result = cache_get( request.cache_key )
|
90
|
-
# result = on_success.call(result) if on_success
|
91
90
|
block.call(result)
|
92
91
|
else
|
93
92
|
result = default_content
|
@@ -95,16 +94,18 @@ module RailsBridge
|
|
95
94
|
case response.code
|
96
95
|
when 200
|
97
96
|
result = response.body
|
98
|
-
result =
|
97
|
+
result = on_success_proc.call(result) if on_success_proc
|
99
98
|
cache_set( request.cache_key, result, request.cache_timeout ) if self.cache && request.cache_timeout && request.cache_timeout > 0
|
100
99
|
logger.debug "ContentBridge : Request Succeeded - Content: #{result}"
|
101
100
|
when 0
|
102
|
-
logger.warn "ContentBridge : Request Timeout for #{
|
101
|
+
logger.warn "ContentBridge : Request Timeout for #{content_request.url}"
|
103
102
|
else
|
104
|
-
logger.warn "ContentBridge : Request for #{
|
103
|
+
logger.warn "ContentBridge : Request for #{content_request.url}\mRequest Failed with HTTP result code: #{response.code}\n#{response.body}"
|
105
104
|
end
|
106
105
|
block.call(result)
|
107
106
|
end
|
107
|
+
hydra = Typhoeus::Hydra.hydra # the singleton Hydra
|
108
|
+
hydra.disable_memoization
|
108
109
|
hydra.queue request
|
109
110
|
end
|
110
111
|
nil
|
data/rails_bridge.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rails_bridge}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.9"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["shock"]
|
12
|
-
s.date = %q{2011-01-
|
12
|
+
s.date = %q{2011-01-06}
|
13
13
|
s.description = %q{Allows for easy embedding of content from a remote HTTP server and exporting of the Rails HTML layout into another template.}
|
14
14
|
s.email = %q{billdoughty@capitalthought.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -60,6 +60,28 @@ describe RailsBridge::ContentBridge do
|
|
60
60
|
cbt.get_chang(:params=>{:sleep=>20},:request_timeout=>10).should == cbt.content_requests[:chang].default_content
|
61
61
|
end
|
62
62
|
|
63
|
+
it "calls the bridge's on_success proc when defined" do
|
64
|
+
cbt = ContentBridgeTest
|
65
|
+
cbt.on_success do |content|
|
66
|
+
content +"ext"
|
67
|
+
end
|
68
|
+
cbt.get_chang(:cache_timeout=>0).should == DEFAULT_RETURN_DATA+"ext"
|
69
|
+
cbt.on_success = nil
|
70
|
+
end
|
71
|
+
|
72
|
+
it "calls the request's on_success proc when defined" do
|
73
|
+
cbt = ContentBridgeTest
|
74
|
+
cbt.on_success do |content|
|
75
|
+
content +"ext"
|
76
|
+
end
|
77
|
+
ContentBridgeTest.content_requests[:chang].on_success do |content|
|
78
|
+
content +"ext2"
|
79
|
+
end
|
80
|
+
cbt.get_chang(:cache_timeout=>0).should == DEFAULT_RETURN_DATA+"ext2"
|
81
|
+
cbt.on_success = nil
|
82
|
+
ContentBridgeTest.content_requests[:chang].on_success = nil
|
83
|
+
end
|
84
|
+
|
63
85
|
it "does not cache a request's content when the cache_timeout is 0 or nil" do
|
64
86
|
cbt = ContentBridgeTest
|
65
87
|
cbt.get_chang(:cache_timeout=>0).should == DEFAULT_RETURN_DATA
|
@@ -50,7 +50,8 @@ describe RailsBridge::ContentBridge do
|
|
50
50
|
self.params = {:p1=>'p1'}
|
51
51
|
content_request( :yang, :params=>{:p3=>'p3'} )
|
52
52
|
end
|
53
|
-
|
53
|
+
content_request = ContentBridgeTestA.get_content_request_from_remote(ContentBridgeTestA.content_requests[:yang])
|
54
|
+
options = ContentBridgeTestA.get_merged_options( content_request, :params=>{:p2=>'p2'} )
|
54
55
|
options[:params].should == {:p1=>'p1', :p2=>'p2', :p3=>'p3'}
|
55
56
|
end
|
56
57
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 9
|
9
|
+
version: 0.0.9
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- shock
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-06 00:00:00 -06:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -331,7 +331,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
331
331
|
requirements:
|
332
332
|
- - ">="
|
333
333
|
- !ruby/object:Gem::Version
|
334
|
-
hash:
|
334
|
+
hash: 2155733246513016336
|
335
335
|
segments:
|
336
336
|
- 0
|
337
337
|
version: "0"
|