roger_url_relativizer 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f2bd40aa2b98bd9c07595790ebbf267d16295c5b2be558e17d58d9282a742dad
4
+ data.tar.gz: 25f508bc0c9da4abd26d8e051b6a0dbfb827216f85f00a5a5e710ef8e610b2fd
5
+ SHA512:
6
+ metadata.gz: 8397bc5b578d2146311cb3fee07e0a225795bddbd64ff0667bcddbbb5ba9296053b0923b7ddeaeb085ef4259edd67f6e74eeba029cf61eb8adca8b1c80af5ed5
7
+ data.tar.gz: f44dad8e9bbf794b67ca316809a84182114c1821e164421fe2bbaeb08b0f958821d065c886bbca6c09a8e3f8d6ea6119e10e2d3445862d0d1bc7e9b94f1de12b
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem "roger", path: "/Users/flurin/Projects/roger/roger"
4
+
5
+ gemspec name: "roger_url_relativizer"
6
+
7
+ gem "rake"
data/Gemfile.lock ADDED
@@ -0,0 +1,46 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ roger_url_relativizer (1.0.0)
5
+ hpricot (= 0.8.6)
6
+ roger (>= 1.8.0)
7
+
8
+ PATH
9
+ remote: /Users/flurin/Projects/roger/roger
10
+ specs:
11
+ roger (1.8.0)
12
+ mime-types (~> 3.1)
13
+ rack (>= 2.0.0)
14
+ redcarpet (>= 3.1.1)
15
+ test_construct (~> 2.0)
16
+ thor (~> 0.19.0)
17
+ tilt (~> 2.0.1)
18
+
19
+ GEM
20
+ remote: https://rubygems.org/
21
+ specs:
22
+ hpricot (0.8.6)
23
+ mime-types (3.2.2)
24
+ mime-types-data (~> 3.2015)
25
+ mime-types-data (3.2018.0812)
26
+ power_assert (1.1.1)
27
+ rack (2.0.5)
28
+ rake (12.3.1)
29
+ redcarpet (3.4.0)
30
+ test-unit (3.0.9)
31
+ power_assert
32
+ test_construct (2.0.1)
33
+ thor (0.19.4)
34
+ tilt (2.0.8)
35
+
36
+ PLATFORMS
37
+ ruby
38
+
39
+ DEPENDENCIES
40
+ rake
41
+ roger!
42
+ roger_url_relativizer!
43
+ test-unit (~> 3.0.0)
44
+
45
+ BUNDLED WITH
46
+ 1.16.3
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 DigitPaint
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,14 @@
1
+ # Roger URL Relativizer
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/roger_url_relativizer.png)](http://badge.fury.io/rb/roger_url_relativizer)
4
+ [![Build Status](https://travis-ci.org/DigitPaint/roger_url_relativizer.png?branch=master)](https://travis-ci.org/DigitPaint/roger_url_relativizer)
5
+
6
+ Url Relativizer processor for Roger
7
+
8
+ ## Contributors
9
+
10
+ [View contributors](https://github.com/digitpaint/roger_yuicompressor/graphs/contributors)
11
+
12
+ ## License
13
+
14
+ MIT License, see [LICENSE](LICENSE) for more info.
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ task :default => [:test]
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << "test"
8
+ t.test_files = FileList['test/unit/**/*_test.rb']
9
+ t.verbose = true
10
+ end
@@ -0,0 +1,5 @@
1
+ module RogerUrlRelativizer
2
+ end
3
+
4
+ # Load modules
5
+ require File.dirname(__FILE__) + "/roger_url_relativizer/processor"
@@ -0,0 +1,73 @@
1
+ require 'roger/release'
2
+ require 'roger/release/processors'
3
+ require 'roger/resolver'
4
+ require "hpricot"
5
+
6
+ module RogerUrlRelativizer
7
+ class UrlRelativizer < ::Roger::Release::Processors::Base
8
+ self.name = :url_relativizer
9
+
10
+ def default_options
11
+ {
12
+ url_attributes: %w(src href action),
13
+ match: ["**/*.html"],
14
+ skip: []
15
+ }
16
+ end
17
+
18
+ def perform
19
+ log_call
20
+
21
+ @resolver = Roger::Resolver.new(release.build_path)
22
+
23
+ relativize_attributes_in_files(
24
+ release,
25
+ options[:url_attributes],
26
+ release.get_files(options[:match], options[:skip])
27
+ )
28
+ end
29
+
30
+ protected
31
+
32
+ def log_call
33
+ log_message = "Relativizing all URLS in #{@options[:match].inspect}"
34
+ log_message << "files in attributes #{@options[:url_attributes].inspect},"
35
+ log_message << "skipping #{@options[:skip].any? ? @options[:skip].inspect : 'none'}"
36
+ release.log(self, log_message)
37
+ end
38
+
39
+ def relativize_attributes_in_files(release, attributes, files)
40
+ files.each do |file_path|
41
+ release.debug(self, "Relativizing URLS in #{file_path}") do
42
+ relativize_attributes_in_file(release, attributes, file_path)
43
+ end
44
+ end
45
+ end
46
+
47
+ def relativize_attributes_in_file(release, attributes, file_path)
48
+ orig_source = File.read(file_path)
49
+ File.open(file_path, "w") do |f|
50
+ f.write(relativize_attributes_in_source(release, attributes, orig_source, file_path))
51
+ end
52
+ end
53
+
54
+ def relativize_attributes_in_source(release, attributes, source, file_path)
55
+ doc = Hpricot(source)
56
+ attributes.each do |attribute|
57
+ (doc / "*[@#{attribute}]").each do |tag|
58
+ converted_url = @resolver.url_to_relative_url(tag[attribute], file_path)
59
+ release.debug(self, "Converting '#{tag[attribute]}' to '#{converted_url}'")
60
+ case converted_url
61
+ when String
62
+ tag[attribute] = converted_url
63
+ when nil
64
+ release.log(self, "Could not resolve link #{tag[attribute]} in #{file_path}")
65
+ end
66
+ end
67
+ end
68
+ doc.to_original_html
69
+ end
70
+ end
71
+ end
72
+
73
+ Roger::Release::Processors.register(RogerUrlRelativizer::UrlRelativizer)
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "roger_url_relativizer"
5
+ s.version = "1.0.0"
6
+
7
+ s.authors = ["Flurin Egger"]
8
+ s.email = ["info@digitpaint.nl", "flurin@digitpaint.nl"]
9
+ s.homepage = "http://github.com/digitpaint/roger_url_relativizer"
10
+ s.summary = "Processor for relativizing URL's templates"
11
+ s.licenses = ["MIT"]
12
+
13
+ s.date = Time.now.strftime("%Y-%m-%d")
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
21
+
22
+ s.add_dependency("roger", [">= 1.8.0"])
23
+ s.add_dependency("hpricot", ["= 0.8.6"])
24
+
25
+ s.add_development_dependency("test-unit", "~> 3.0.0")
26
+ end
@@ -0,0 +1,33 @@
1
+ require File.dirname(__FILE__) + "/../../lib/roger_url_relativizer/processor"
2
+ require "test/unit"
3
+ require "roger/testing/mock_release"
4
+
5
+ class UrlRelativizerTest < ::Test::Unit::TestCase
6
+ def setup
7
+ @release = Roger::Testing::MockRelease.new
8
+ @processor = RogerUrlRelativizer::UrlRelativizer.new
9
+ end
10
+
11
+ def teardown
12
+ @release.destroy
13
+ @release = nil
14
+ end
15
+
16
+ def test_empty_release_runs
17
+ files = @processor.call(@release)
18
+ assert_equal 0, files.length
19
+ end
20
+
21
+ def test_basic_relativization
22
+ @release.project.construct.directory "build/sub" do |dir|
23
+ dir.file "test.html", "<a href='/test.html'>link</a>"
24
+ end
25
+ @release.project.construct.file "build/test.html"
26
+
27
+ files = @processor.call(@release)
28
+ assert_equal 2, files.length
29
+
30
+ contents = File.read((@release.build_path + "sub/test.html").to_s)
31
+ assert contents.include?("../test.html")
32
+ end
33
+ end
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: roger_url_relativizer
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Flurin Egger
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-09-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: roger
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.8.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.8.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: hpricot
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.8.6
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.8.6
41
+ - !ruby/object:Gem::Dependency
42
+ name: test-unit
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.0.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.0
55
+ description:
56
+ email:
57
+ - info@digitpaint.nl
58
+ - flurin@digitpaint.nl
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - Gemfile
64
+ - Gemfile.lock
65
+ - LICENSE
66
+ - README.md
67
+ - Rakefile
68
+ - lib/roger_url_relativizer.rb
69
+ - lib/roger_url_relativizer/processor.rb
70
+ - roger_url_relativizer.gemspec
71
+ - test/unit/processor_test.rb
72
+ homepage: http://github.com/digitpaint/roger_url_relativizer
73
+ licenses:
74
+ - MIT
75
+ metadata: {}
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubyforge_project:
92
+ rubygems_version: 2.7.7
93
+ signing_key:
94
+ specification_version: 4
95
+ summary: Processor for relativizing URL's templates
96
+ test_files:
97
+ - test/unit/processor_test.rb