sitediff 0.0.2 → 1.1.1
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.
- checksums.yaml +7 -0
- data/bin/sitediff +9 -3
- data/lib/sitediff.rb +153 -79
- data/lib/sitediff/api.rb +265 -0
- data/lib/sitediff/cache.rb +110 -47
- data/lib/sitediff/cli.rb +219 -165
- data/lib/sitediff/config.rb +439 -58
- data/lib/sitediff/config/creator.rb +93 -99
- data/lib/sitediff/config/preset.rb +75 -0
- data/lib/sitediff/crawler.rb +108 -72
- data/lib/sitediff/diff.rb +60 -12
- data/lib/sitediff/exception.rb +3 -1
- data/lib/sitediff/fetch.rb +62 -41
- data/lib/sitediff/files/diff.html.erb +20 -2
- data/lib/sitediff/files/jquery.min.js +2 -0
- data/lib/sitediff/files/normalize.css +349 -0
- data/lib/sitediff/files/report.html.erb +171 -0
- data/lib/sitediff/files/sidebyside.html.erb +5 -2
- data/lib/sitediff/files/sitediff.css +303 -30
- data/lib/sitediff/files/sitediff.js +367 -0
- data/lib/sitediff/report.rb +254 -0
- data/lib/sitediff/result.rb +59 -23
- data/lib/sitediff/sanitize.rb +222 -150
- data/lib/sitediff/sanitize/dom_transform.rb +111 -73
- data/lib/sitediff/sanitize/regexp.rb +69 -43
- data/lib/sitediff/uriwrapper.rb +104 -34
- data/lib/sitediff/webserver.rb +89 -77
- data/lib/sitediff/webserver/resultserver.rb +113 -77
- metadata +92 -76
- data/lib/sitediff/files/html_report.html.erb +0 -63
- data/lib/sitediff/files/rules/drupal.yaml +0 -33
- data/lib/sitediff/rules.rb +0 -65
data/lib/sitediff/webserver.rb
CHANGED
@@ -1,82 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'webrick'
|
2
4
|
|
3
5
|
class SiteDiff
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
def
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
6
|
+
# SiteDiff Web Server.
|
7
|
+
class Webserver
|
8
|
+
# Simple web server for testing purposes.
|
9
|
+
DEFAULT_PORT = 13_080
|
10
|
+
|
11
|
+
attr_accessor :ports
|
12
|
+
|
13
|
+
##
|
14
|
+
# Serve a list of directories.
|
15
|
+
def initialize(start_port, dirs, opts = {})
|
16
|
+
start_port ||= DEFAULT_PORT
|
17
|
+
@ports = (start_port...(start_port + dirs.size)).to_a
|
18
|
+
@dirs = dirs
|
19
|
+
@opts = opts
|
20
|
+
|
21
|
+
setup
|
22
|
+
start_servers
|
23
|
+
|
24
|
+
if block_given?
|
25
|
+
yield self
|
26
|
+
kill
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
31
|
+
# Kills the server.
|
32
|
+
def kill
|
33
|
+
@threads.each(&:kill)
|
34
|
+
end
|
35
|
+
|
36
|
+
##
|
37
|
+
# Waits for the server.
|
38
|
+
def wait
|
39
|
+
@threads.each(&:join)
|
40
|
+
end
|
41
|
+
|
42
|
+
##
|
43
|
+
# Maps URIs to defined ports and returns a list of URIs.
|
44
|
+
def uris
|
45
|
+
ports.map { |p| "http://localhost:#{p}" }
|
46
|
+
end
|
47
|
+
|
48
|
+
protected
|
49
|
+
|
50
|
+
def setup
|
51
|
+
@server_opts = {}
|
52
|
+
if @opts[:quiet]
|
53
|
+
@server_opts[:Logger] = WEBrick::Log.new(IO::NULL)
|
54
|
+
@server_opts[:AccessLog] = []
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def server(opts)
|
59
|
+
WEBrick::HTTPServer.new(opts)
|
60
|
+
end
|
61
|
+
|
62
|
+
def start_servers
|
63
|
+
@threads = []
|
64
|
+
@dirs.each_with_index do |dir, idx|
|
65
|
+
@server_opts[:Port] = @ports[idx]
|
66
|
+
@server_opts[:DocumentRoot] = dir
|
67
|
+
srv = server(@server_opts)
|
68
|
+
@threads << Thread.new { srv.start }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
public
|
73
|
+
|
74
|
+
# SiteDiff Fixture Server.
|
75
|
+
class FixtureServer < Webserver
|
76
|
+
PORT = DEFAULT_PORT + 1
|
77
|
+
BASE = 'spec/sites/ruby-doc.org'
|
78
|
+
NAMES = %w[core-1.9.3 core-2.0].freeze
|
79
|
+
|
80
|
+
def initialize(port = PORT, base = BASE, names = NAMES)
|
81
|
+
dirs = names.map { |n| File.join(base, n) }
|
82
|
+
super(port, dirs, quiet: true)
|
83
|
+
end
|
84
|
+
|
85
|
+
def before
|
86
|
+
uris.first
|
87
|
+
end
|
88
|
+
|
89
|
+
def after
|
90
|
+
uris.last
|
91
|
+
end
|
92
|
+
end
|
58
93
|
end
|
59
94
|
end
|
60
|
-
|
61
|
-
public
|
62
|
-
|
63
|
-
class FixtureServer < Webserver
|
64
|
-
PORT = DEFAULT_PORT + 1
|
65
|
-
BASE = 'spec/fixtures/ruby-doc.org'
|
66
|
-
NAMES = %w[core-1.9.3 core-2.0]
|
67
|
-
|
68
|
-
def initialize(port = PORT, base = BASE, names = NAMES)
|
69
|
-
dirs = names.map { |n| File.join(base, n) }
|
70
|
-
super(port, dirs, :quiet => true)
|
71
|
-
end
|
72
|
-
|
73
|
-
def before
|
74
|
-
uris.first
|
75
|
-
end
|
76
|
-
def after
|
77
|
-
uris.last
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
end
|
82
|
-
end
|
@@ -1,98 +1,134 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'sitediff'
|
4
|
+
require 'sitediff/report'
|
2
5
|
require 'sitediff/webserver'
|
3
6
|
require 'erb'
|
4
7
|
|
5
8
|
class SiteDiff
|
6
|
-
class Webserver
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
class Webserver
|
10
|
+
# SiteDiff Result Server.
|
11
|
+
class ResultServer < Webserver
|
12
|
+
# Display a page from the cache
|
13
|
+
class CacheServlet < WEBrick::HTTPServlet::AbstractServlet
|
14
|
+
##
|
15
|
+
# Creates a Cache Servlet.
|
16
|
+
def initialize(_server, cache)
|
17
|
+
@cache = cache
|
18
|
+
end
|
13
19
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
20
|
+
##
|
21
|
+
# Performs a GET request.
|
22
|
+
def do_GET(req, res)
|
23
|
+
path = req.path_info
|
24
|
+
(md = %r{^/([^/]+)(/.*)$}.match(path)) ||
|
25
|
+
raise(WEBrick::HTTPStatus::NotFound)
|
26
|
+
tag, path = *md.captures
|
27
|
+
(r = @cache.get(tag.to_sym, path)) ||
|
28
|
+
raise(WEBrick::HTTPStatus::NotFound)
|
21
29
|
|
22
|
-
|
23
|
-
|
30
|
+
raise WEBrick::HTTPStatus[r.error_code] if r.error_code
|
31
|
+
raise WEBrick::HTTPStatus::InternalServerError, r.error if r.error
|
24
32
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
33
|
+
res['content-type'] = 'text/html'
|
34
|
+
res.body = r.content
|
35
|
+
end
|
36
|
+
end
|
29
37
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
38
|
+
##
|
39
|
+
# Display two pages side by side.
|
40
|
+
class SideBySideServlet < WEBrick::HTTPServlet::AbstractServlet
|
41
|
+
##
|
42
|
+
# Creates a Side By Side Servlet.
|
43
|
+
def initialize(_server, cache, settings)
|
44
|
+
@cache = cache
|
45
|
+
@settings = settings
|
46
|
+
end
|
36
47
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
48
|
+
##
|
49
|
+
# Generates URLs for a given path.
|
50
|
+
def urls(path)
|
51
|
+
%w[before after].map do |tag|
|
52
|
+
base = @settings[tag]
|
53
|
+
base = "/cache/#{tag}" if @settings['cached'].include? tag
|
54
|
+
base + path
|
55
|
+
end
|
56
|
+
end
|
44
57
|
|
45
|
-
|
46
|
-
|
47
|
-
|
58
|
+
##
|
59
|
+
# Performs a GET request.
|
60
|
+
def do_GET(req, res)
|
61
|
+
path = req.path_info
|
62
|
+
before, after = *urls(path)
|
48
63
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
64
|
+
res['content-type'] = 'text/html'
|
65
|
+
erb = File.join(SiteDiff::FILES_DIR, 'sidebyside.html.erb')
|
66
|
+
res.body = ERB.new(File.read(erb)).result(binding)
|
67
|
+
end
|
68
|
+
end
|
54
69
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
70
|
+
##
|
71
|
+
# Creates a Result Server.
|
72
|
+
def initialize(port, dir, opts = {})
|
73
|
+
unless File.exist?(File.join(dir, Report::SETTINGS_FILE))
|
74
|
+
raise SiteDiffException,
|
75
|
+
"Please run 'sitediff diff' before running 'sitediff serve'"
|
76
|
+
end
|
60
77
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
"/files/#{SiteDiff::REPORT_FILE}")
|
67
|
-
end
|
78
|
+
@settings = YAML.load_file(File.join(dir, Report::SETTINGS_FILE))
|
79
|
+
puts @settings
|
80
|
+
@cache = opts[:cache]
|
81
|
+
super(port, [dir], opts)
|
82
|
+
end
|
68
83
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
84
|
+
##
|
85
|
+
# TODO: Document what this method does.
|
86
|
+
def server(opts)
|
87
|
+
dir = opts.delete(:DocumentRoot)
|
88
|
+
srv = super(opts)
|
89
|
+
srv.mount_proc('/') do |req, res|
|
90
|
+
if req.path == '/'
|
91
|
+
res.set_redirect(WEBrick::HTTPStatus::Found,
|
92
|
+
"/files/#{Report::REPORT_FILE_HTML}")
|
93
|
+
else
|
94
|
+
res.set_redirect(WEBrick::HTTPStatus::TemporaryRedirect,
|
95
|
+
"#{@settings['after']}#{req.path}")
|
96
|
+
end
|
97
|
+
end
|
74
98
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
end
|
99
|
+
srv.mount('/files', WEBrick::HTTPServlet::FileHandler, dir, true)
|
100
|
+
srv.mount('/cache', CacheServlet, @cache)
|
101
|
+
srv.mount('/sidebyside', SideBySideServlet, @cache, @settings)
|
102
|
+
srv
|
103
|
+
end
|
81
104
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
105
|
+
##
|
106
|
+
# Sets up the server.
|
107
|
+
def setup
|
108
|
+
super
|
109
|
+
root = uris.first
|
110
|
+
puts "Serving at #{root}"
|
111
|
+
open_in_browser(root) if @opts[:browse]
|
112
|
+
end
|
113
|
+
|
114
|
+
##
|
115
|
+
# Opens a URL in a browser.
|
116
|
+
def open_in_browser(url)
|
117
|
+
commands = %w[xdg-open open]
|
118
|
+
cmd = commands.find { |c| which(c) }
|
119
|
+
system(cmd, url) if cmd
|
120
|
+
cmd
|
121
|
+
end
|
88
122
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
123
|
+
##
|
124
|
+
# TODO: Document what this method does.
|
125
|
+
def which(cmd)
|
126
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
127
|
+
file = File.join(path, cmd)
|
128
|
+
return file if File.executable?(file)
|
129
|
+
end
|
130
|
+
nil
|
131
|
+
end
|
93
132
|
end
|
94
|
-
return nil
|
95
133
|
end
|
96
134
|
end
|
97
|
-
end
|
98
|
-
end
|
metadata
CHANGED
@@ -1,176 +1,192 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sitediff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Alex Dergachev
|
9
8
|
- Amir Kadivar
|
10
9
|
- Dave Vasilevsky
|
11
|
-
autorequire:
|
10
|
+
autorequire:
|
12
11
|
bindir: bin
|
13
12
|
cert_chain: []
|
14
|
-
date:
|
13
|
+
date: 2020-08-06 00:00:00.000000000 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
|
-
name:
|
16
|
+
name: pkg-config
|
18
17
|
requirement: !ruby/object:Gem::Requirement
|
19
|
-
none: false
|
20
18
|
requirements:
|
21
|
-
- -
|
19
|
+
- - "~>"
|
22
20
|
- !ruby/object:Gem::Version
|
23
|
-
version: '
|
21
|
+
version: '1.1'
|
24
22
|
type: :runtime
|
25
23
|
prerelease: false
|
26
24
|
version_requirements: !ruby/object:Gem::Requirement
|
27
|
-
none: false
|
28
25
|
requirements:
|
29
|
-
- -
|
26
|
+
- - "~>"
|
30
27
|
- !ruby/object:Gem::Version
|
31
|
-
version: '
|
28
|
+
version: '1.1'
|
32
29
|
- !ruby/object:Gem::Dependency
|
33
|
-
name:
|
30
|
+
name: minitar
|
34
31
|
requirement: !ruby/object:Gem::Requirement
|
35
|
-
none: false
|
36
32
|
requirements:
|
37
|
-
- -
|
33
|
+
- - "~>"
|
38
34
|
- !ruby/object:Gem::Version
|
39
|
-
version: '0'
|
35
|
+
version: '0.9'
|
40
36
|
type: :runtime
|
41
37
|
prerelease: false
|
42
38
|
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
none: false
|
44
39
|
requirements:
|
45
|
-
- -
|
40
|
+
- - "~>"
|
46
41
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
42
|
+
version: '0.9'
|
48
43
|
- !ruby/object:Gem::Dependency
|
49
|
-
name:
|
44
|
+
name: thor
|
50
45
|
requirement: !ruby/object:Gem::Requirement
|
51
|
-
none: false
|
52
46
|
requirements:
|
53
|
-
- -
|
47
|
+
- - "~>"
|
54
48
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
49
|
+
version: 0.20.0
|
56
50
|
type: :runtime
|
57
51
|
prerelease: false
|
58
52
|
version_requirements: !ruby/object:Gem::Requirement
|
59
|
-
none: false
|
60
53
|
requirements:
|
61
|
-
- -
|
54
|
+
- - "~>"
|
62
55
|
- !ruby/object:Gem::Version
|
63
|
-
version:
|
56
|
+
version: 0.20.0
|
64
57
|
- !ruby/object:Gem::Dependency
|
65
58
|
name: typhoeus
|
66
59
|
requirement: !ruby/object:Gem::Requirement
|
67
|
-
none: false
|
68
60
|
requirements:
|
69
|
-
- -
|
61
|
+
- - "~>"
|
70
62
|
- !ruby/object:Gem::Version
|
71
|
-
version: '0'
|
63
|
+
version: '1.0'
|
72
64
|
type: :runtime
|
73
65
|
prerelease: false
|
74
66
|
version_requirements: !ruby/object:Gem::Requirement
|
75
|
-
none: false
|
76
67
|
requirements:
|
77
|
-
- -
|
68
|
+
- - "~>"
|
78
69
|
- !ruby/object:Gem::Version
|
79
|
-
version: '0'
|
70
|
+
version: '1.0'
|
80
71
|
- !ruby/object:Gem::Dependency
|
81
72
|
name: rainbow
|
82
73
|
requirement: !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
74
|
requirements:
|
85
|
-
- -
|
75
|
+
- - "~>"
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 3.0.0
|
78
|
+
type: :runtime
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - "~>"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 3.0.0
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: nokogiri
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
86
90
|
- !ruby/object:Gem::Version
|
87
|
-
version:
|
91
|
+
version: 1.10.4
|
88
92
|
type: :runtime
|
89
93
|
prerelease: false
|
90
94
|
version_requirements: !ruby/object:Gem::Requirement
|
91
|
-
none: false
|
92
95
|
requirements:
|
93
|
-
- -
|
96
|
+
- - ">="
|
94
97
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
98
|
+
version: 1.10.4
|
96
99
|
- !ruby/object:Gem::Dependency
|
97
100
|
name: addressable
|
98
101
|
requirement: !ruby/object:Gem::Requirement
|
99
|
-
none: false
|
100
102
|
requirements:
|
101
|
-
- -
|
103
|
+
- - "~>"
|
102
104
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
105
|
+
version: 2.5.2
|
104
106
|
type: :runtime
|
105
107
|
prerelease: false
|
106
108
|
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
none: false
|
108
109
|
requirements:
|
109
|
-
- -
|
110
|
+
- - "~>"
|
110
111
|
- !ruby/object:Gem::Version
|
111
|
-
version:
|
112
|
-
|
112
|
+
version: 2.5.2
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: diffy
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: 3.3.0
|
120
|
+
type: :runtime
|
121
|
+
prerelease: false
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
requirements:
|
124
|
+
- - "~>"
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: 3.3.0
|
127
|
+
description: " SiteDiff makes it easy to see differences between two versions of
|
113
128
|
a website. It accepts a set of paths to compare two versions of the site together
|
114
129
|
with potential normalization/sanitization rules. From the provided paths and configuration
|
115
130
|
SiteDiff generates an HTML report of all the status of HTML comparison between the
|
116
131
|
given paths together with a readable diff-like HTML for each specified path containing
|
117
132
|
the differences between the two versions of the site. It is useful tool for QAing
|
118
|
-
re-deployments, site upgrades, etc
|
119
|
-
|
120
|
-
'
|
133
|
+
re-deployments, site upgrades, etc.\n"
|
121
134
|
email: alex@evolvingweb.ca
|
122
135
|
executables:
|
123
136
|
- sitediff
|
124
137
|
extensions: []
|
125
138
|
extra_rdoc_files: []
|
126
139
|
files:
|
140
|
+
- bin/sitediff
|
127
141
|
- lib/sitediff.rb
|
128
|
-
- lib/sitediff/
|
129
|
-
- lib/sitediff/sanitize/dom_transform.rb
|
130
|
-
- lib/sitediff/sanitize/regexp.rb
|
131
|
-
- lib/sitediff/config/creator.rb
|
132
|
-
- lib/sitediff/cli.rb
|
133
|
-
- lib/sitediff/fetch.rb
|
134
|
-
- lib/sitediff/exception.rb
|
142
|
+
- lib/sitediff/api.rb
|
135
143
|
- lib/sitediff/cache.rb
|
144
|
+
- lib/sitediff/cli.rb
|
136
145
|
- lib/sitediff/config.rb
|
137
|
-
- lib/sitediff/
|
138
|
-
- lib/sitediff/
|
139
|
-
- lib/sitediff/
|
140
|
-
- lib/sitediff/webserver/resultserver.rb
|
141
|
-
- lib/sitediff/rules.rb
|
142
|
-
- lib/sitediff/webserver.rb
|
146
|
+
- lib/sitediff/config/creator.rb
|
147
|
+
- lib/sitediff/config/preset.rb
|
148
|
+
- lib/sitediff/crawler.rb
|
143
149
|
- lib/sitediff/diff.rb
|
150
|
+
- lib/sitediff/exception.rb
|
151
|
+
- lib/sitediff/fetch.rb
|
144
152
|
- lib/sitediff/files/diff.html.erb
|
153
|
+
- lib/sitediff/files/jquery.min.js
|
154
|
+
- lib/sitediff/files/normalize.css
|
155
|
+
- lib/sitediff/files/pretty_print.xsl
|
156
|
+
- lib/sitediff/files/report.html.erb
|
145
157
|
- lib/sitediff/files/sidebyside.html.erb
|
146
158
|
- lib/sitediff/files/sitediff.css
|
147
|
-
- lib/sitediff/files/
|
148
|
-
- lib/sitediff/
|
149
|
-
- lib/sitediff/
|
150
|
-
-
|
151
|
-
|
159
|
+
- lib/sitediff/files/sitediff.js
|
160
|
+
- lib/sitediff/report.rb
|
161
|
+
- lib/sitediff/result.rb
|
162
|
+
- lib/sitediff/sanitize.rb
|
163
|
+
- lib/sitediff/sanitize/dom_transform.rb
|
164
|
+
- lib/sitediff/sanitize/regexp.rb
|
165
|
+
- lib/sitediff/uriwrapper.rb
|
166
|
+
- lib/sitediff/webserver.rb
|
167
|
+
- lib/sitediff/webserver/resultserver.rb
|
168
|
+
homepage: https://sitediff.io/
|
152
169
|
licenses:
|
153
|
-
- GPL-2
|
154
|
-
|
170
|
+
- GPL-2.0
|
171
|
+
metadata:
|
172
|
+
source_code_uri: https://github.com/evolvingweb/sitediff
|
173
|
+
post_install_message:
|
155
174
|
rdoc_options: []
|
156
175
|
require_paths:
|
157
176
|
- lib
|
158
177
|
required_ruby_version: !ruby/object:Gem::Requirement
|
159
|
-
none: false
|
160
178
|
requirements:
|
161
|
-
- -
|
179
|
+
- - ">="
|
162
180
|
- !ruby/object:Gem::Version
|
163
|
-
version:
|
181
|
+
version: '2.6'
|
164
182
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
|
-
none: false
|
166
183
|
requirements:
|
167
|
-
- -
|
184
|
+
- - ">="
|
168
185
|
- !ruby/object:Gem::Version
|
169
186
|
version: '0'
|
170
187
|
requirements: []
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
specification_version: 3
|
188
|
+
rubygems_version: 3.1.2
|
189
|
+
signing_key:
|
190
|
+
specification_version: 4
|
175
191
|
summary: Compare two versions of a site with ease!
|
176
192
|
test_files: []
|