rails_bridge 0.0.8 → 0.0.9
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/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"
|