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 CHANGED
@@ -16,7 +16,7 @@ GIT
16
16
  PATH
17
17
  remote: .
18
18
  specs:
19
- rails_bridge (0.0.7)
19
+ rails_bridge (0.0.8)
20
20
  activesupport
21
21
  rails_bridge
22
22
  typhoeus (~> 0.2.0)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.8
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
- @@on_success = Proc.new
35
+ self.on_success= Proc.new
36
36
  else
37
- @@on_success
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 process_remote_and_options( remote, options )
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
- if remote.is_a? RailsBridge::ContentRequest
65
- content_request = remote
66
- remote_url = content_request.url
67
- options[:params] = content_request.params.merge( options[:params] || {} )
68
- options[:request_timeout] ||= content_request.request_timeout
69
- options[:cache_timeout] ||= content_request.cache_timeout
70
- options[:default_content] ||= content_request.default_content
71
- on_success = content_request.on_success
72
- else
73
- remote_url = remote
74
- on_sucess = nil
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
- hydra = Typhoeus::Hydra.hydra # the singleton Hydra
84
- hydra.disable_memoization
85
- remote_url, options = process_remote_and_options( remote, options )
86
- default_content = options.delete(:default_content) || self.default_content
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
- request = Typhoeus::Request.new(remote_url, options)
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 = on_success.call(result) if on_success
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 #{remote_url}"
101
+ logger.warn "ContentBridge : Request Timeout for #{content_request.url}"
103
102
  else
104
- logger.warn "ContentBridge : Request for #{remote_url}\mRequest Failed with HTTP result code: #{response.code}\n#{response.body}"
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"
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-05}
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
- remote_url, options = ContentBridgeTestA.process_remote_and_options(ContentBridgeTestA.content_requests[:yang], :params=>{:p2=>'p2'})
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
- - 8
9
- version: 0.0.8
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-05 00:00:00 -06:00
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: -987999199138465577
334
+ hash: 2155733246513016336
335
335
  segments:
336
336
  - 0
337
337
  version: "0"