waterpig 0.5.0 → 0.6.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8e28d950091067eb55145f9a2a031cc9ccd2aa41
4
- data.tar.gz: bd5e3b73c0eb55fa931b56a779f33a0729b113f0
3
+ metadata.gz: 2302e9b10ed3f0a42d946396094cf816e4232996
4
+ data.tar.gz: f4865aa1135e03154302b85d905d66d15bc22c64
5
5
  SHA512:
6
- metadata.gz: 88cc48ee51e663dbd01ac906b9db6ab19461cb6c39ea7670be1cbf2e990b33730689b9972856ec5fa121bd9c212be8c29ae338b80e72ab6befdc661366fc0817
7
- data.tar.gz: 29ea658e3a49c190a40e5e8327b87b87be8f462b344716a31c721cfb831165e2b01c27ad629161bcba6e2c9b71132861b398c5ea2f031b821dbe5e1a2371fa56
6
+ metadata.gz: 14ffed5cfb8bdf24a35e61a417b9a973604b15cc07a1a12519485e30f69c185eb265e82632732f3af483c6c59875651a265da229d4602908c07d883acc60e472
7
+ data.tar.gz: 78cfec302ed71689e329584dd0144e1bd4a055bc4b20a1fc118df966a3fb58e05716c8fab29bac8d757717a555a32ece1b74d46a84ef43c464c38f0a236fbcee
@@ -0,0 +1,120 @@
1
+ require 'singleton'
2
+ module Waterpig
3
+ class BrowserConsoleLogger
4
+ include Singleton
5
+
6
+ require 'text-table'
7
+ attr_writer :file
8
+ attr_accessor :path
9
+
10
+ def file
11
+ @file ||= File.new(path, "w")
12
+ end
13
+
14
+ def emit_header(string)
15
+ file.write("#{bold(string)}\n")
16
+ end
17
+
18
+ def emit_log(entry)
19
+ file.write( entry['time'] + "\n")
20
+ if entry['type'] == 'table'
21
+ emit_table(entry['value'])
22
+ else
23
+ file.write(entry['value'].to_s + "\n\n")
24
+ end
25
+ end
26
+
27
+ # Tables are either a simple hash, or a hash of hashes. See documentation
28
+ # on emit_simple_table and emit_complex_table.
29
+ def emit_table(hash)
30
+ table = Text::Table.new
31
+ if hash.values.any?{ |val| val.is_a?(Hash) }
32
+ emit_complex_table(hash, table)
33
+ else
34
+ emit_simple_table(hash, table)
35
+ end
36
+ @file.write(table.to_s + "\n\n")
37
+ end
38
+
39
+ # Simple hashes emit as a two-column table, with keys making up the index
40
+ # column:
41
+ # { a: 1, b: 4, c: 'foo'}
42
+ #
43
+ # Will render as:
44
+ #
45
+ # +-------+--------+
46
+ # | index | Values |
47
+ # +-------+--------+
48
+ # | a | 1 |
49
+ # +-------+--------+
50
+ # | b | 4 |
51
+ # +-------+--------+
52
+ # | c | 'foo' |
53
+ # +-------+--------+
54
+ def emit_simple_table(hash, table)
55
+ table.head = [ "index", "values" ]
56
+ hash.each do | key, val |
57
+ table.rows << [ key, val ]
58
+ end
59
+ end
60
+
61
+ # When they are a hash of hashes, used as follows:
62
+ # * The keys of the top-level hashes will be the leftmost column, "index".
63
+ # * The merged keys of the inner hashes will be the column headers
64
+ # * The values of the inner hashes will fill the table cells.
65
+ #
66
+ # So for example:
67
+ # { foo: { a: 1, b: 2 },
68
+ # bar: { a: 5, c: 3 }}
69
+ #
70
+ # Will render as:
71
+ # +-------+---+---+---+
72
+ # | index | a | b | c |
73
+ # +-------+---+---+---+
74
+ # | foo | 1 | 2 | |
75
+ # +-------+---+---+---+
76
+ # | bar | 5 | | 3 |
77
+ # +-------+---+---+---+
78
+ def emit_complex_table(hash, table)
79
+ keys = hash.reduce([]){ |memo, arr| memo + arr[1].keys }.uniq
80
+ table.head = [ "index" ] + keys
81
+ hash.each do |name, row|
82
+ table.rows << [ name ] + keys.map{ |key| row.fetch(key, nil)}
83
+ end
84
+ end
85
+
86
+ def bold(string)
87
+ "\e[1m#{string}\e[0m"
88
+ end
89
+
90
+ class << self
91
+ def configure(config)
92
+ config.add_setting :waterpig_browser_console_log_path, :default => nil
93
+ config.add_setting :waterpig_log_browser_console, :default => ENV['LOG_BROWSER_CONSOLE']
94
+
95
+ config.before(:suite) do
96
+ if config.waterpig_log_browser_console
97
+ config.waterpig_browser_console_log_path ||= Rails.root.join("log/#{Rails.env}_browser_console.log")
98
+ config.waterpig_clearable_logs << 'test_browser_console'
99
+ end
100
+ end
101
+
102
+ config.after(:each,:type => proc{|value|
103
+ config.waterpig_log_types && config.waterpig_log_types.include?(value)
104
+ }) do |example|
105
+ if config.waterpig_log_browser_console
106
+ logger = Waterpig::BrowserConsoleLogger.instance
107
+ logger.path = config.waterpig_browser_console_log_path
108
+ logger.emit_header "Browser console for #{example.full_description}"
109
+ console_entries = page.evaluate_script("console.history");
110
+ console_entries.each do |entry|
111
+ logger.emit_log(entry)
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+
119
+
120
+ end
@@ -10,6 +10,7 @@ require 'waterpig/ckeditor-tools'
10
10
  require 'waterpig/tinymce-tools'
11
11
  require 'waterpig/browser-tools'
12
12
  require 'waterpig/browser-size'
13
+ require 'waterpig/browser-console-logger'
13
14
  require 'waterpig/snap-step'
14
15
 
15
16
  module Waterpig
@@ -56,6 +57,7 @@ RSpec.configure do |config|
56
57
  config.add_setting :waterpig_autosnap, :default => ENV['WATERPIG_AUTOSNAP']
57
58
  config.add_setting :waterpig_driver, :default => ENV['CAPYBARA_DRIVER']
58
59
  config.add_setting :waterpig_js_driver, :default => ENV['CAPYBARA_JS_DRIVER']
60
+ config.add_setting :waterpig_clearable_logs, :default => [ 'test' ]
59
61
 
60
62
  config.add_setting :waterpig_browser_sizes, :default => {
61
63
  :mobile => { :width => 320, :height => 480 },
@@ -64,10 +66,18 @@ RSpec.configure do |config|
64
66
  :desktop => { :width => 1024, :height => 1024 }
65
67
  }
66
68
 
69
+ Waterpig::BrowserConsoleLogger.configure(config)
67
70
 
68
71
  config.before(:suite) do
69
72
  Capybara.default_driver = Waterpig.pick_capybara_driver(config.waterpig_driver)
70
73
  Capybara.javascript_driver = Waterpig.pick_capybara_driver(config.waterpig_js_driver)
74
+ config.waterpig_clearable_logs.each do |logfile|
75
+ if File.directory?('log')
76
+ File::open("log/#{logfile}.log", "w") do |log|
77
+ log.write ""
78
+ end
79
+ end
80
+ end
71
81
  end
72
82
 
73
83
  if defined?(Timecop)
@@ -87,6 +97,7 @@ RSpec.configure do |config|
87
97
  config.include Waterpig::BrowserSize, :type => proc{|value|
88
98
  config.waterpig_browser_size_types && config.waterpig_browser_size_types.include?(value)
89
99
  }
100
+
90
101
  end
91
102
 
92
103
  RSpec.configure do |config|
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: waterpig
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Judson Lester
8
+ - Evan Dorn
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-12-31 00:00:00.000000000 Z
12
+ date: 2015-03-17 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: capybara
@@ -52,10 +53,25 @@ dependencies:
52
53
  - - '>'
53
54
  - !ruby/object:Gem::Version
54
55
  version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: text-table
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: 1.2.3
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.2.3
55
70
  description: |2
56
71
  Because waterpig is what the scientific name for a capybara translates to, that's why.
57
72
  email:
58
73
  - nyarly@gmail.com
74
+ - evan@lrdesign.com
59
75
  executables: []
60
76
  extensions: []
61
77
  extra_rdoc_files: []
@@ -68,6 +84,7 @@ files:
68
84
  - lib/waterpig/deadbeat-connections.rb
69
85
  - lib/waterpig/tinymce-tools.rb
70
86
  - lib/waterpig/browser-integration.rb
87
+ - lib/waterpig/browser-console-logger.rb
71
88
  - lib/waterpig/poltergeist.rb
72
89
  - lib/waterpig/warning-suppressor.rb
73
90
  - lib/waterpig/snap-step.rb
@@ -86,7 +103,7 @@ rdoc_options:
86
103
  - --main
87
104
  - doc/README
88
105
  - --title
89
- - waterpig-0.5.0 Documentation
106
+ - waterpig-0.6.0 Documentation
90
107
  require_paths:
91
108
  - lib/
92
109
  required_ruby_version: !ruby/object:Gem::Requirement