hermitage 0.0.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.
Files changed (80) hide show
  1. data/.gitignore +20 -0
  2. data/.rspec +2 -0
  3. data/.rvmrc +1 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +175 -0
  8. data/Rakefile +7 -0
  9. data/app/assets/javascripts/hermitage.js.coffee +263 -0
  10. data/config.ru +7 -0
  11. data/hermitage.gemspec +33 -0
  12. data/lib/generators/hermitage/install_generator.rb +17 -0
  13. data/lib/generators/hermitage/templates/hermitage.rb +29 -0
  14. data/lib/hermitage/defaults.rb +31 -0
  15. data/lib/hermitage/engine.rb +6 -0
  16. data/lib/hermitage/railtie.rb +9 -0
  17. data/lib/hermitage/version.rb +3 -0
  18. data/lib/hermitage/view_helpers.rb +42 -0
  19. data/lib/hermitage.rb +13 -0
  20. data/spec/dummy/README.rdoc +28 -0
  21. data/spec/dummy/Rakefile +6 -0
  22. data/spec/dummy/app/assets/images/.keep +0 -0
  23. data/spec/dummy/app/assets/images/0-full.png +0 -0
  24. data/spec/dummy/app/assets/images/0-thumbnail.png +0 -0
  25. data/spec/dummy/app/assets/images/1-full.png +0 -0
  26. data/spec/dummy/app/assets/images/1-thumbnail.png +0 -0
  27. data/spec/dummy/app/assets/images/2-full.png +0 -0
  28. data/spec/dummy/app/assets/images/2-thumbnail.png +0 -0
  29. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  30. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  31. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  32. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  33. data/spec/dummy/app/controllers/images_controller.rb +8 -0
  34. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  35. data/spec/dummy/app/mailers/.keep +0 -0
  36. data/spec/dummy/app/models/.keep +0 -0
  37. data/spec/dummy/app/models/concerns/.keep +0 -0
  38. data/spec/dummy/app/models/dummy.rb +32 -0
  39. data/spec/dummy/app/views/images/index.html.erb +1 -0
  40. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  41. data/spec/dummy/bin/bundle +3 -0
  42. data/spec/dummy/bin/rails +4 -0
  43. data/spec/dummy/bin/rake +4 -0
  44. data/spec/dummy/config/application.rb +31 -0
  45. data/spec/dummy/config/boot.rb +5 -0
  46. data/spec/dummy/config/database.yml +25 -0
  47. data/spec/dummy/config/environment.rb +5 -0
  48. data/spec/dummy/config/environments/development.rb +29 -0
  49. data/spec/dummy/config/environments/production.rb +80 -0
  50. data/spec/dummy/config/environments/test.rb +36 -0
  51. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  52. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  53. data/spec/dummy/config/initializers/inflections.rb +16 -0
  54. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  55. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  56. data/spec/dummy/config/initializers/session_store.rb +3 -0
  57. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  58. data/spec/dummy/config/locales/en.yml +23 -0
  59. data/spec/dummy/config/routes.rb +3 -0
  60. data/spec/dummy/config.ru +4 -0
  61. data/spec/dummy/db/schema.rb +16 -0
  62. data/spec/dummy/lib/assets/.keep +0 -0
  63. data/spec/dummy/log/.keep +0 -0
  64. data/spec/dummy/log/development.log +0 -0
  65. data/spec/dummy/public/404.html +58 -0
  66. data/spec/dummy/public/422.html +58 -0
  67. data/spec/dummy/public/500.html +57 -0
  68. data/spec/dummy/public/favicon.ico +0 -0
  69. data/spec/features/engine_spec.rb +8 -0
  70. data/spec/features/navigation_spec.rb +90 -0
  71. data/spec/features/render_gallery_spec.rb +19 -0
  72. data/spec/features/scale_spec.rb +78 -0
  73. data/spec/features/viewer_spec.rb +40 -0
  74. data/spec/generators/install_spec.rb +19 -0
  75. data/spec/lib/hermitage/defaults_spec.rb +18 -0
  76. data/spec/lib/hermitage/railtie_spec.rb +7 -0
  77. data/spec/lib/hermitage/view_helpers_spec.rb +71 -0
  78. data/spec/lib/hermitage_spec.rb +11 -0
  79. data/spec/spec_helper.rb +26 -0
  80. metadata +362 -0
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/422.html -->
52
+ <div class="dialog">
53
+ <h1>The change you wanted was rejected.</h1>
54
+ <p>Maybe you tried to change something you didn't have access to.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,57 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/500.html -->
52
+ <div class="dialog">
53
+ <h1>We're sorry, but something went wrong.</h1>
54
+ </div>
55
+ <p>If you are the application owner check the logs for more information.</p>
56
+ </body>
57
+ </html>
File without changes
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'engine', type: :feature do
4
+ it 'adds hermitage javascript file to project' do
5
+ visit '/assets/hermitage.js'
6
+ page.status_code.should be 200
7
+ end
8
+ end
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'navigation', type: :feature, js: true do
4
+
5
+ # Workaround for clicking exactly on the specified position of the element
6
+ def click_at(selector, offset_x, offset_y)
7
+ x = evaluate_script("$('#{selector}').position().left + $('#{selector}').outerWidth() * #{offset_x}")
8
+ y = evaluate_script("$('#{selector}').position().top + $('#{selector}').outerHeight() * #{offset_y}")
9
+ page.driver.click(x, y)
10
+ end
11
+
12
+ def click_at_left(selector)
13
+ click_at(selector, 0.25, 0.5)
14
+ end
15
+
16
+ def click_at_right(selector)
17
+ click_at(selector, 0.75, 0.5)
18
+ end
19
+
20
+
21
+ shared_examples 'navigation to next' do
22
+ before(:each) { click_action.call() }
23
+
24
+ it 'shows next image and shows the first image after end of the gallery' do
25
+ # Wait until 2-full.png image will be shown
26
+ page.should have_no_css('img[src="/assets/1-full.png"]')
27
+ page.should have_css('img[src="/assets/2-full.png"]')
28
+ page.all('img.current').length.should == 1
29
+
30
+ # Then click
31
+ click_action.call()
32
+
33
+ # Now there is only 0-full.png image on the screen
34
+ page.should have_no_css('img[src="/assets/2-full.png"]')
35
+ page.should have_css('img[src="/assets/0-full.png"]')
36
+ page.all('img.current').length.should == 1
37
+ end
38
+ end
39
+
40
+ shared_examples 'navigation to previous' do
41
+ before(:each) { click_action.call() }
42
+
43
+ it 'shows previous image and shows the last image after first' do
44
+ # Wait until 0-full.png image will be shown
45
+ page.should have_no_css('img[src="/assets/1-full.png"]')
46
+ page.should have_css('img[src="/assets/0-full.png"]')
47
+ page.all('img.current').length.should == 1
48
+
49
+ # Then click
50
+ click_action.call()
51
+
52
+ # Now there is only 2-full.png image on the screen
53
+ page.should have_no_css('img[src="/assets/0-full.png"]')
54
+ page.should have_css('img[src="/assets/2-full.png"]')
55
+ page.all('img.current').length.should == 1
56
+ end
57
+ end
58
+
59
+
60
+ before(:each) do
61
+ visit images_path
62
+ page.first('a[href="/assets/1-full.png"]').click
63
+ page.should have_css('img.current') # Wait for loading before testing
64
+ end
65
+
66
+ describe 'by clicking on image' do
67
+ describe 'at the right side' do
68
+ let(:click_action) { Proc.new { click_at_right('img.current') } }
69
+ it_behaves_like 'navigation to next'
70
+ end
71
+
72
+ describe 'at the left side' do
73
+ let(:click_action) { Proc.new { click_at_left('img.current') } }
74
+ it_behaves_like 'navigation to previous'
75
+ end
76
+ end
77
+
78
+ describe 'by clicking on navigation button' do
79
+ describe 'right' do
80
+ let(:click_action) { Proc.new { page.find('#navigation-right').click() } }
81
+ it_behaves_like 'navigation to next'
82
+ end
83
+
84
+ describe 'left' do
85
+ let(:click_action) { Proc.new { page.find('#navigation-left').click() } }
86
+ it_behaves_like 'navigation to previous'
87
+ end
88
+ end
89
+
90
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'render gallery', type: :feature, js: true do
4
+
5
+ before(:each) { visit images_path }
6
+
7
+ it 'renders unordered list of links that contain images' do
8
+ page.should have_selector('ul li a[rel=hermitage] img')
9
+ end
10
+
11
+ it 'has invisible layer for hermitage' do
12
+ page.should have_css('div#hermitage', visible: false)
13
+ end
14
+
15
+ it 'fills images array' do
16
+ evaluate_script("images").should == ['/assets/0-full.png', '/assets/1-full.png', '/assets/2-full.png']
17
+ end
18
+
19
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'scale', type: :feature, js: true do
4
+
5
+ def width(selector)
6
+ evaluate_script("$('#{selector}').outerWidth()")
7
+ end
8
+
9
+ def height(selector)
10
+ evaluate_script("$('#{selector}').outerHeight()")
11
+ end
12
+
13
+ before(:each) do
14
+ visit images_path
15
+ page.driver.resize(window_width, window_height)
16
+ page.first('a[rel=hermitage]').click
17
+ page.should have_css('img.current')
18
+ end
19
+
20
+ context 'exceed the bounds of window by width' do
21
+ let(:window_width) { 400 }
22
+ let(:window_height) { 1000 }
23
+
24
+ it 'scales the image' do
25
+ width('.current').should == 176
26
+ height('.current').should == 176
27
+ end
28
+ end
29
+
30
+ context 'exceed the bounds of window by height' do
31
+ let(:window_width) { 1000 }
32
+ let(:window_height) { 300 }
33
+
34
+ it 'scales the image' do
35
+ width('.current').should == 200
36
+ height('.current').should == 200
37
+ end
38
+ end
39
+
40
+ context 'exceed the bounds of window by both dimensions' do
41
+ let(:window_width) { 400 }
42
+ let(:window_height) { 300 }
43
+
44
+ it 'scales the image to the minimum scale coefficient' do
45
+ width('.current').should == 176
46
+ height('.current').should == 176
47
+ end
48
+ end
49
+
50
+ context 'window is smaller than minimum allowed size' do
51
+
52
+ shared_examples 'minimum allowed size' do
53
+ it 'scales the image to the minimal allowed size' do
54
+ width('.current').should == 100
55
+ height('.current').should == 100
56
+ end
57
+ end
58
+
59
+ context 'by width' do
60
+ let(:window_width) { 200 }
61
+ let(:window_height) { 1000 }
62
+ it_behaves_like 'minimum allowed size'
63
+ end
64
+
65
+ context 'by height' do
66
+ let(:window_width) { 1000 }
67
+ let(:window_height) { 200 }
68
+ it_behaves_like 'minimum allowed size'
69
+ end
70
+
71
+ context 'by both dimensions' do
72
+ let(:window_width) { 200 }
73
+ let(:window_height) { 200 }
74
+ it_behaves_like 'minimum allowed size'
75
+ end
76
+ end
77
+
78
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'viewer', type: :feature, js: true do
4
+
5
+ before(:each) do
6
+ visit images_path
7
+ page.first('a[rel=hermitage]').click
8
+ end
9
+
10
+ it 'makes hermitage layer visible' do
11
+ page.should have_css('div#hermitage')
12
+ end
13
+
14
+ it 'has shadow overlay' do
15
+ page.should have_css('div#hermitage div#overlay')
16
+ end
17
+
18
+ it 'has full size image' do
19
+ page.should have_css("div#hermitage img[src='/assets/0-full.png']")
20
+ end
21
+
22
+ it 'has left navigation button' do
23
+ page.should have_css("div#hermitage div#navigation-left")
24
+ end
25
+
26
+ it 'has right navigation button' do
27
+ page.should have_css("div#hermitage div#navigation-right")
28
+ end
29
+
30
+ describe 'visitor clicks on shadow in the viewer' do
31
+ # Workaround for clicking at the shadow div
32
+ before(:each) { evaluate_script "$('#overlay').click()" }
33
+
34
+ it 'hides hermitage layer and removes everything from it' do
35
+ page.should_not have_css('div#hermitage')
36
+ page.find('div#hermitage', visible: false).all('*').length.should == 0
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+ require 'genspec'
3
+
4
+ describe 'hermitage:install' do
5
+
6
+ within_source_root do
7
+ FileUtils.mkdir_p 'app/assets/javascripts'
8
+ FileUtils.touch 'app/assets/javascripts/application.js'
9
+ end
10
+
11
+ it 'generates configuration file at config/initializer' do
12
+ subject.should generate('config/initializers/hermitage.rb')
13
+ end
14
+
15
+ it "should inject a require into application.js file" do
16
+ subject.should inject_into_file('app/assets/javascripts/application.js', "\n//= require hermitage", after: %r{^//= require +['"]?jquery['"]?$})
17
+ end
18
+ end
19
+
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hermitage::Defaults do
4
+ describe '#to_hash' do
5
+ it "returns hash with symbolized constants' names as keys" do
6
+ Hermitage::Defaults.to_hash().should == {
7
+ attribute_full_size: 'file.url',
8
+ attribute_thumbnail: 'file.url(:thumbnail)',
9
+ list_tag: :ul,
10
+ item_tag: :li,
11
+ list_class: 'thumbnails',
12
+ item_class: 'span4',
13
+ link_class: 'thumbnail',
14
+ image_class: nil
15
+ }
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hermitage::Railtie do
4
+ it 'adds #render_gallery_for method to ActionView::Base class' do
5
+ ActionView::Base.new.respond_to?(:render_gallery_for).should be_true
6
+ end
7
+ end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+ require 'dummy/app/models/dummy'
3
+
4
+ describe Hermitage::ViewHelpers, type: :helper do
5
+
6
+ # Reset Hermitage configs because they should not be shared among specs
7
+ before(:each) { Hermitage.configs = { default: Hermitage::Defaults.to_hash() } }
8
+
9
+ let(:template) { ActionView::Base.new }
10
+
11
+ describe '#render_gallery_for' do
12
+ let(:images) { Array.new(2) { |i| DummyImage.new(i.to_s) } }
13
+ let(:expected) { '<ul class="thumbnails"><li class="span4"><a class="thumbnail" href="/assets/0-full.png" rel="hermitage"><img alt="0 thumbnail" src="/assets/0-thumbnail.png" /></a></li><li class="span4"><a class="thumbnail" href="/assets/1-full.png" rel="hermitage"><img alt="1 thumbnail" src="/assets/1-thumbnail.png" /></a></li></ul>' }
14
+
15
+ context 'no options' do
16
+ subject { template.render_gallery_for images }
17
+ it { should == expected }
18
+ end
19
+
20
+ context 'with options' do
21
+
22
+ context 'attribute_full_size and attribute_thumbnail' do
23
+ subject { template.render_gallery_for images, attribute_full_size: 'photo', attribute_thumbnail: 'photo(:thumbnail)' }
24
+ let(:images) { Array.new(2) { |i| DummyPhoto.new(i.to_s) } }
25
+ it { should == expected }
26
+ end
27
+
28
+ context 'list_tag and item_tag' do
29
+ subject { template.render_gallery_for images, list_tag: :div, item_tag: :div }
30
+ let(:expected) { '<div class="thumbnails"><div class="span4"><a class="thumbnail" href="/assets/0-full.png" rel="hermitage"><img alt="0 thumbnail" src="/assets/0-thumbnail.png" /></a></div><div class="span4"><a class="thumbnail" href="/assets/1-full.png" rel="hermitage"><img alt="1 thumbnail" src="/assets/1-thumbnail.png" /></a></div></div>' }
31
+ it { should == expected }
32
+ end
33
+
34
+ context 'list_class, item_class, link_class and image_class' do
35
+ subject { template.render_gallery_for images, list_class: nil, item_class: nil, link_class: 'thumb link', image_class: 'thumb' }
36
+ let(:expected) { '<ul><li><a class="thumb link" href="/assets/0-full.png" rel="hermitage"><img alt="0 thumbnail" class="thumb" src="/assets/0-thumbnail.png" /></a></li><li><a class="thumb link" href="/assets/1-full.png" rel="hermitage"><img alt="1 thumbnail" class="thumb" src="/assets/1-thumbnail.png" /></a></li></ul>' }
37
+ it { should == expected }
38
+ end
39
+ end
40
+
41
+ context 'with configs' do
42
+
43
+ before(:each) { Hermitage.configs[:dummy_images] = { list_class: 'images-thumbnails' } }
44
+
45
+ let(:expected) { '<ul class="images-thumbnails"><li class="span4"><a class="thumbnail" href="/assets/0-full.png" rel="hermitage"><img alt="0 thumbnail" src="/assets/0-thumbnail.png" /></a></li><li class="span4"><a class="thumbnail" href="/assets/1-full.png" rel="hermitage"><img alt="1 thumbnail" src="/assets/1-thumbnail.png" /></a></li></ul>' }
46
+ subject { template.render_gallery_for images }
47
+ it { should == expected }
48
+
49
+ context 'with overwritten defaults' do
50
+
51
+ before(:each) do
52
+ Hermitage.configs[:default].merge!({
53
+ list_class: 'default-thumbnails',
54
+ item_class: 'span3'
55
+ })
56
+ end
57
+
58
+ let(:expected) { '<ul class="images-thumbnails"><li class="span3"><a class="thumbnail" href="/assets/0-full.png" rel="hermitage"><img alt="0 thumbnail" src="/assets/0-thumbnail.png" /></a></li><li class="span3"><a class="thumbnail" href="/assets/1-full.png" rel="hermitage"><img alt="1 thumbnail" src="/assets/1-thumbnail.png" /></a></li></ul>' }
59
+ it { should == expected }
60
+
61
+ context 'and with options' do
62
+ subject { template.render_gallery_for images, list_class: 'custom-thumbnails' }
63
+ let(:expected) { '<ul class="custom-thumbnails"><li class="span3"><a class="thumbnail" href="/assets/0-full.png" rel="hermitage"><img alt="0 thumbnail" src="/assets/0-thumbnail.png" /></a></li><li class="span3"><a class="thumbnail" href="/assets/1-full.png" rel="hermitage"><img alt="1 thumbnail" src="/assets/1-thumbnail.png" /></a></li></ul>' }
64
+ it { should == expected }
65
+ end
66
+
67
+ end
68
+ end
69
+
70
+ end
71
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hermitage do
4
+ it 'should has a version' do
5
+ Hermitage::VERSION.should_not be_nil
6
+ end
7
+
8
+ it { should respond_to(:configs) }
9
+ its(:configs) { should be_kind_of(Hash) }
10
+ its(:configs) { should include(:default) }
11
+ end
@@ -0,0 +1,26 @@
1
+ # Configure Rails Envinronment
2
+ ENV["RAILS_ENV"] = "test"
3
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
4
+
5
+ require 'rspec/rails'
6
+ require 'capybara/poltergeist'
7
+
8
+ ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../')
9
+
10
+ # Requires supporting ruby files with custom matchers and macros, etc,
11
+ # in spec/support/ and its subdirectories.
12
+ Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f }
13
+
14
+ RSpec.configure do |config|
15
+ config.treat_symbols_as_metadata_keys_with_true_values = true
16
+ config.run_all_when_everything_filtered = true
17
+ config.filter_run :focus
18
+
19
+ # Run specs in random order to surface order dependencies. If you find an
20
+ # order dependency and want to debug it, you can fix the order by providing
21
+ # the seed, which is printed after each run.
22
+ # --seed 1234
23
+ config.order = 'random'
24
+ end
25
+
26
+ Capybara.javascript_driver = :poltergeist