Class: Vanagon::Component::Source::Rewrite
- Inherits:
-
Object
- Object
- Vanagon::Component::Source::Rewrite
- Defined in:
- lib/vanagon/component/source/rewrite.rb
Overview
This class has been extracted from Vanagon::Component::Source for the sake of isolation and in service of its pending removal. Rewrite rules should be considered deprecated. The removal will be carried out before Vanagon 1.0.0 is released.
Class Attribute Summary collapse
-
.rewrite_rules ⇒ Object
readonly
Returns the value of attribute rewrite_rules.
Class Method Summary collapse
-
.parse_and_rewrite(uri) ⇒ Object
deprecated
Deprecated.
Please use the component DSL method #mirror(<URI>) instead. This method will be removed before Vanagon 1.0.0.
- .proc_rewrite(rule, url) ⇒ Object
-
.register_rewrite_rule(protocol, rule) ⇒ Object
deprecated
Deprecated.
Please use the component DSL method #mirror(<URI>) instead. This method will be removed before Vanagon 1.0.0.
- .rewrite(url, protocol) ⇒ Object
- .string_rewrite(rule, original_url) ⇒ Object
Class Attribute Details
.rewrite_rules ⇒ Object (readonly)
Returns the value of attribute rewrite_rules.
15 16 17 |
# File 'lib/vanagon/component/source/rewrite.rb', line 15 def rewrite_rules @rewrite_rules end |
Class Method Details
.parse_and_rewrite(uri) ⇒ Object
Please use the component DSL method #mirror(<URI>) instead. This method will be removed before Vanagon 1.0.0.
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/vanagon/component/source/rewrite.rb', line 77 def parse_and_rewrite(uri) return uri if rewrite_rules.empty? if !!uri.match(/^git:http/) VanagonLogger.info <<-HERE.undent `build-uri` parsing doesn't get along with how we specify the source type by prefixing `git`. As `rewrite_rules` are deprecated, we'll replace `git:http` with `http` in your uri. At some point this will break. HERE # build-uri does not support git:http://host/path uri.sub!(/^git:http/, 'http') end url = URI.parse(uri) return url unless url.scheme rewrite(url.to_s, url.scheme) end |
.proc_rewrite(rule, url) ⇒ Object
56 57 58 59 60 61 62 |
# File 'lib/vanagon/component/source/rewrite.rb', line 56 def proc_rewrite(rule, url) if rule.arity == 1 rule.call(url) else raise Vanagon::Error, "Unable to use provided rewrite rule. Expected Proc with one argument, Proc has #{rule.arity} arguments" end end |
.register_rewrite_rule(protocol, rule) ⇒ Object
Please use the component DSL method #mirror(<URI>) instead. This method will be removed before Vanagon 1.0.0.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/vanagon/component/source/rewrite.rb', line 19 def register_rewrite_rule(protocol, rule) VanagonLogger.info <<-HERE.undent rewrite rule support is deprecated and will be removed before Vanagon 1.0.0. Rewritten URLs will be automatically converted into mirror URLs for now but please use the component DSL method '#mirror url' to define new mirror URL sources for a given component. HERE if rule.is_a?(String) || rule.is_a?(Proc) if Vanagon::Component::Source::SUPPORTED_PROTOCOLS.include?(protocol) @rewrite_rules[protocol] = rule else raise Vanagon::Error, "#{protocol} is not a supported protocol for rewriting" end else raise Vanagon::Error, "String or Proc is required as a rewrite_rule." end end |
.rewrite(url, protocol) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/vanagon/component/source/rewrite.rb', line 37 def rewrite(url, protocol) # Vanagon did not originally distinguish between http and https # when looking up rewrite rules; this is no longer true, but it # means that we should try to preserve old, dumb behavior until # the rewrite engine is removed. return rewrite(url, "http") if protocol == "https" rule = @rewrite_rules[protocol] if rule if rule.is_a?(Proc) return proc_rewrite(rule, url) elsif rule.is_a?(String) return string_rewrite(rule, url) end end return url end |
.string_rewrite(rule, original_url) ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/vanagon/component/source/rewrite.rb', line 64 def string_rewrite(rule, original_url) url = original_url.to_s target_match = url.match(/.*\/([^\/]*)$/) if target_match target = target_match[1] return File.join(rule, target) else raise Vanagon::Error, "Unable to apply url rewrite to '#{url}', expected to find at least one '/' in the url." end end |