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.
@@ -1,82 +1,94 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'webrick'
2
4
 
3
5
  class SiteDiff
4
- class Webserver
5
- # Simple webserver for testing purposes
6
- DEFAULT_PORT = 13080
7
-
8
- attr_accessor :ports
9
-
10
- # Serve a list of directories
11
- def initialize(start_port, dirs, opts = {})
12
- start_port ||= DEFAULT_PORT
13
- @ports = (start_port...(start_port + dirs.size)).to_a
14
- @dirs = dirs
15
- @opts = opts
16
-
17
- setup
18
- start_servers
19
-
20
- if block_given?
21
- yield self
22
- kill
23
- end
24
- end
25
-
26
- def kill
27
- @threads.each { |t| t.kill }
28
- end
29
-
30
- def wait
31
- @threads.each { |t| t.join }
32
- end
33
-
34
- def uris
35
- ports.map { |p| "http://localhost:#{p}" }
36
- end
37
-
38
- protected
39
- def setup
40
- @server_opts = {}
41
- if @opts[:quiet]
42
- @server_opts[:Logger] = WEBrick::Log.new(IO::NULL)
43
- @server_opts[:AccessLog] = []
44
- end
45
- end
46
-
47
- def server(opts)
48
- WEBrick::HTTPServer.new(opts)
49
- end
50
-
51
- def start_servers
52
- @threads = []
53
- @dirs.each_with_index do |dir, idx|
54
- @server_opts[:Port] = @ports[idx]
55
- @server_opts[:DocumentRoot] = dir
56
- srv = server(@server_opts)
57
- @threads << Thread.new { srv.start }
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
- class ResultServer < Webserver
8
- # Display a page from the cache
9
- class CacheServlet < WEBrick::HTTPServlet::AbstractServlet
10
- def initialize(server, cache)
11
- @cache = cache
12
- end
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
- def do_GET(req, res)
15
- path = req.path_info
16
- md = %r[^/([^/]+)(/.*)$].match(path) or
17
- raise WEBrick::HTTPStatus::NotFound
18
- tag, path = *md.captures
19
- r = @cache.get(tag.to_sym, path) or
20
- raise WEBrick::HTTPStatus::NotFound
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
- raise WEBrick::HTTPStatus[r.error_code] if r.error_code
23
- raise WEBrick::HTTPStatus::InternalServerError, r.error if r.error
30
+ raise WEBrick::HTTPStatus[r.error_code] if r.error_code
31
+ raise WEBrick::HTTPStatus::InternalServerError, r.error if r.error
24
32
 
25
- res['content-type'] = 'text/html'
26
- res.body = r.content
27
- end
28
- end
33
+ res['content-type'] = 'text/html'
34
+ res.body = r.content
35
+ end
36
+ end
29
37
 
30
- # Display two pages side by side
31
- class SideBySideServlet < WEBrick::HTTPServlet::AbstractServlet
32
- def initialize(server, cache, settings)
33
- @cache = cache
34
- @settings = settings
35
- end
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
- def urls(path)
38
- %w[before after].map do |tag|
39
- base = @settings[tag]
40
- base = "/cache/#{tag}" if @settings['cached'].include? tag
41
- base + path
42
- end
43
- end
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
- def do_GET(req, res)
46
- path = req.path_info
47
- before, after = *urls(path)
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
- res['content-type'] = 'text/html'
50
- erb = File.join(SiteDiff::FILES_DIR, 'sidebyside.html.erb')
51
- res.body = ERB.new(File.read(erb)).result(binding)
52
- end
53
- end
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
- def initialize(port, dir, opts = {})
56
- @settings = YAML.load_file(File.join(dir, SiteDiff::SETTINGS_FILE))
57
- @cache = opts[:cache]
58
- super(port, [dir], opts)
59
- end
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
- def server(opts)
62
- dir = opts.delete(:DocumentRoot)
63
- srv = super(opts)
64
- srv.mount_proc('/') do |req, res|
65
- res.set_redirect(WEBrick::HTTPStatus::Found,
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
- srv.mount('/files', WEBrick::HTTPServlet::FileHandler, dir, true)
70
- srv.mount('/cache', CacheServlet, @cache)
71
- srv.mount('/sidebyside', SideBySideServlet, @cache, @settings)
72
- return srv
73
- end
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
- def setup
76
- super
77
- root = uris.first
78
- puts "Serving at #{root}"
79
- open_in_browser(root) if @opts[:browse]
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
- def open_in_browser(url)
83
- commands = %w[xdg-open open]
84
- cmd = commands.find { |c| which(c) }
85
- system(cmd, url) if cmd
86
- return cmd
87
- end
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
- def which(cmd)
90
- ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
91
- file = File.join(path, cmd)
92
- return file if File.executable?(file)
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: 0.0.2
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: 2015-05-05 00:00:00.000000000 Z
13
+ date: 2020-08-06 00:00:00.000000000 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
- name: thor
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: '0'
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: '0'
28
+ version: '1.1'
32
29
  - !ruby/object:Gem::Dependency
33
- name: nokogiri
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: diffy
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
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: '0'
112
- description: ! 'SiteDiff makes it easy to see differences between two versions of
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/crawler.rb
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/uriwrapper.rb
138
- - lib/sitediff/result.rb
139
- - lib/sitediff/sanitize.rb
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/html_report.html.erb
148
- - lib/sitediff/files/pretty_print.xsl
149
- - lib/sitediff/files/rules/drupal.yaml
150
- - bin/sitediff
151
- homepage: https://github.com/evolvingweb/sitediff/
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
- post_install_message:
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: 1.9.3
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
- rubyforge_project:
172
- rubygems_version: 1.8.23
173
- signing_key:
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: []