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 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"