likadan 0.0.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ba7c704150fa0176ec40681e44e1b605cd5dff34
4
+ data.tar.gz: 9ecd0dc4806257c91574b12e1d336b3c82ab60ce
5
+ SHA512:
6
+ metadata.gz: 6862ffbbcf213a66b4c6ccc24142880ce6646f91885451eb647035558a3e1a1212e7b9f2cb2a2701fe02b1eb1b5383838d19fe104edabe71a73e3aa6276a6986
7
+ data.tar.gz: 2a77b00434e19e1e82094899338c3ca2ae372ae47eeab3cc28fd9d7efb7939734f299dd3d8cea9845907085eff712d8de3a3553b074e3ddaa0d9782d1c65caf3
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ Thread.new do # trivial example work thread
4
+ begin
5
+ require 'likadan_runner'
6
+ ensure
7
+ exit
8
+ end
9
+ end
10
+
11
+ require 'likadan_server'
12
+
@@ -0,0 +1,58 @@
1
+ require 'selenium-webdriver'
2
+ require 'diffux_core/snapshot_comparer'
3
+ require 'diffux_core/snapshot_comparison_image/base'
4
+ require 'diffux_core/snapshot_comparison_image/gutter'
5
+ require 'diffux_core/snapshot_comparison_image/before'
6
+ require 'diffux_core/snapshot_comparison_image/overlayed'
7
+ require 'diffux_core/snapshot_comparison_image/after'
8
+ require 'chunky_png'
9
+ require 'yaml'
10
+
11
+ driver = Selenium::WebDriver.for :firefox
12
+ begin
13
+ config = YAML.load_file('.likadan.yaml')
14
+ snapshots_folder = config['snapshots_folder'] || './snapshots'
15
+
16
+ driver.navigate.to 'http://localhost:4567/'
17
+
18
+ while current = driver.execute_script('return window.likadan.next()') do
19
+ now = Time.now.to_i
20
+ normalized_name = current['name'].gsub(/[^a-zA-Z0-9\-_]/, '_')
21
+ file = "#{snapshots_folder}/#{normalized_name}/snapshot_#{now}.png"
22
+ dirname = File.dirname(file)
23
+ unless File.directory?(dirname)
24
+ FileUtils.mkdir_p(dirname)
25
+ end
26
+
27
+ previous_png = Dir.glob(File.join(dirname, 'snapshot_*.png')).max do |a,b|
28
+ File.ctime(a) <=> File.ctime(b)
29
+ end
30
+
31
+ driver.save_screenshot(file)
32
+ to_crop = ChunkyPNG::Image.from_file(file)
33
+ to_crop.crop!(0, 0, current['width'], current['height'])
34
+ to_crop.save(file)
35
+
36
+ print "Checking \"#{current['name']}\"... "
37
+
38
+ if previous_png
39
+ comparison = Diffux::SnapshotComparer.new(
40
+ ChunkyPNG::Image.from_file(previous_png),
41
+ ChunkyPNG::Image.from_file(file),
42
+ ).compare!
43
+
44
+ if img = comparison[:diff_image]
45
+ diff_output = File.join(dirname, "diff_#{now}.png")
46
+ img.save(diff_output)
47
+ puts "#{comparison[:diff_in_percent]}% (#{diff_output})"
48
+ else
49
+ puts 'No diff.'
50
+ end
51
+ else
52
+ puts "First snapshot created (#{file})"
53
+ end
54
+ end
55
+ ensure
56
+ driver.quit
57
+ end
58
+
@@ -0,0 +1,38 @@
1
+ require 'sinatra/base'
2
+ require 'yaml'
3
+
4
+ def get_configuration
5
+ config = {
6
+ 'source_files' => [],
7
+ 'stylesheets' => [],
8
+ 'port' => 4567
9
+ }
10
+ config_file = '.likadan.yaml'
11
+ if File.exist? config_file
12
+ config = config.merge(YAML.load_file(config_file))
13
+ end
14
+ config
15
+ end
16
+
17
+ class LikadanServer < Sinatra::Base
18
+ configure do
19
+ enable :static
20
+ set :port, get_configuration['port']
21
+ end
22
+
23
+ get '/' do
24
+ @config = get_configuration
25
+ erb :index
26
+ end
27
+
28
+ get '/resource' do
29
+ file = params[:file]
30
+ if file.start_with? 'http'
31
+ redirect file
32
+ else
33
+ send_file file
34
+ end
35
+ end
36
+
37
+ run!
38
+ end
@@ -0,0 +1,28 @@
1
+ window.likadan = {
2
+ defined: [],
3
+
4
+ define: function(name, func) {
5
+ this.defined.push({
6
+ name: name,
7
+ func: func
8
+ });
9
+ },
10
+
11
+ next: function() {
12
+ var next = this.defined.shift();
13
+ if (!next) {
14
+ return;
15
+ }
16
+ var out = document.getElementById('likadan-output');
17
+ out.innerHTML = '';
18
+ next.func(out);
19
+
20
+ var elem = out.firstChild;
21
+
22
+ return {
23
+ name: next.name,
24
+ width: elem.offsetWidth,
25
+ height: elem.offsetHeight
26
+ };
27
+ }
28
+ };
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <% @config['stylesheets'].each do |stylesheet| %>
5
+ <link rel="stylesheet" type="text/css"
6
+ href="/resource?file=<%= ERB::Util.url_encode(stylesheet) %>">
7
+ <% end %>
8
+ </head>
9
+ <body style="margin: 0;">
10
+ <div id="likadan-output"/>
11
+ <script src="/likadan-runner.js"></script>
12
+ <% @config['source_files'].each do |source_file| %>
13
+ <script src="/resource?file=<%= ERB::Util.url_encode(source_file) %>"></script>
14
+ <% end %>
15
+ </body>
16
+ </html>
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: likadan
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Henric Trotzig
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: diffux-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.0.2
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.0.2
33
+ - !ruby/object:Gem::Dependency
34
+ name: chunky_png
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.3'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.3.4
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.3'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.3.4
53
+ - !ruby/object:Gem::Dependency
54
+ name: selenium-webdriver
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '2.44'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 2.44.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '2.44'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 2.44.0
73
+ - !ruby/object:Gem::Dependency
74
+ name: thin
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.6'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.6.3
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.6'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 1.6.3
93
+ - !ruby/object:Gem::Dependency
94
+ name: sinatra
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '1.4'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.4.5
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.4'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 1.4.5
113
+ description: Likadan, a perceptual diff tool for JS components
114
+ email: henric.trotzig@gmail.com
115
+ executables:
116
+ - likadan
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - bin/likadan
121
+ - lib/likadan_runner.rb
122
+ - lib/likadan_server.rb
123
+ - lib/public/likadan-runner.js
124
+ - lib/views/index.erb
125
+ homepage: http://rubygems.org/gems/likadan
126
+ licenses:
127
+ - MIT
128
+ metadata: {}
129
+ post_install_message:
130
+ rdoc_options: []
131
+ require_paths:
132
+ - lib
133
+ required_ruby_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ required_rubygems_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubyforge_project:
145
+ rubygems_version: 2.2.2
146
+ signing_key:
147
+ specification_version: 4
148
+ summary: Likadan
149
+ test_files: []
150
+ has_rdoc: