active_decorator 1.3.3 → 1.3.4
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 +4 -4
- data/.travis.yml +10 -0
- data/CHANGELOG.md +4 -0
- data/active_decorator.gemspec +3 -3
- data/gemfiles/Gemfile-rails.6.1.x +7 -0
- data/gemfiles/Gemfile-rails.edge +6 -0
- data/lib/active_decorator/monkey/action_view/collection_renderer.rb +12 -0
- data/lib/active_decorator/monkey/action_view/object_renderer.rb +12 -0
- data/lib/active_decorator/monkey/action_view/partial_renderer.rb +20 -8
- data/lib/active_decorator/railtie.rb +8 -0
- data/lib/active_decorator/version.rb +1 -1
- metadata +7 -62
- data/test/configuration_test.rb +0 -28
- data/test/controllers/fake_detection_test.rb +0 -14
- data/test/decorator_test.rb +0 -58
- data/test/fake_app/app/decorators/comic_decorator.rb +0 -5
- data/test/fake_app/app/views/authors/index.html.erb +0 -16
- data/test/fake_app/app/views/authors/show.html.erb +0 -10
- data/test/fake_app/app/views/authors/show.json.jbuilder +0 -2
- data/test/fake_app/app/views/book_mailer/thanks.text.erb +0 -1
- data/test/fake_app/app/views/books/_book.html.erb +0 -2
- data/test/fake_app/app/views/books/_book.json.jbuilder +0 -2
- data/test/fake_app/app/views/books/_book_locals.html.erb +0 -2
- data/test/fake_app/app/views/books/errata.html.erb +0 -1
- data/test/fake_app/app/views/books/errata2.html.erb +0 -1
- data/test/fake_app/app/views/books/error.html.erb +0 -1
- data/test/fake_app/app/views/books/index.html.erb +0 -4
- data/test/fake_app/app/views/books/purchase.html.erb +0 -1
- data/test/fake_app/app/views/books/show.html.erb +0 -4
- data/test/fake_app/app/views/movies/show.html.erb +0 -2
- data/test/fake_app/fake_app.rb +0 -311
- data/test/fake_app/public/images/cover.png +0 -0
- data/test/features/action_controller_api_test.rb +0 -24
- data/test/features/action_view_helpers_test.rb +0 -38
- data/test/features/association_test.rb +0 -41
- data/test/features/controller_ivar_test.rb +0 -41
- data/test/features/jbuilder_test.rb +0 -16
- data/test/features/name_error_handling_test.rb +0 -29
- data/test/features/partial_test.rb +0 -29
- data/test/models/association_test.rb +0 -75
- data/test/test_helper.rb +0 -52
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abd22d415613228c6c98fe9a0bf7255496dabaada709c34ba2cbe032a2fcc9b6
|
4
|
+
data.tar.gz: af38045be9a3de1832be692fa8f349010e7f79c7144d8d1f9f248aa3c311abb3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39f6198f7583dbc4df7bb3071161f234ce858cda7d17a27c07caab910bc3a1c652468cd42dfd7bf094cb53ceedc9da8c9a35d031a0e258398dc41f15b44d2925
|
7
|
+
data.tar.gz: 3b342f062765a460b03b3adbe2562cf01579a4b54427713dd3abe88694e371acee44ded648a218e9a2fd2872285635a08016cf11a0b68ecae0631243c6909c2f
|
data/.travis.yml
CHANGED
@@ -26,12 +26,22 @@ cache: bundler
|
|
26
26
|
|
27
27
|
matrix:
|
28
28
|
include:
|
29
|
+
- rvm: 2.7.1
|
30
|
+
gemfile: gemfiles/Gemfile-rails.6.1.x
|
31
|
+
- rvm: 2.7.1
|
32
|
+
gemfile: gemfiles/Gemfile-rails.6.1.x
|
33
|
+
env: API=1
|
29
34
|
- rvm: 2.7.1
|
30
35
|
gemfile: gemfiles/Gemfile-rails.6.0.x
|
31
36
|
- rvm: 2.7.1
|
32
37
|
gemfile: gemfiles/Gemfile-rails.6.0.x
|
33
38
|
env: API=1
|
34
39
|
|
40
|
+
- rvm: 2.6.6
|
41
|
+
gemfile: gemfiles/Gemfile-rails.6.1.x
|
42
|
+
- rvm: 2.6.6
|
43
|
+
gemfile: gemfiles/Gemfile-rails.6.1.x
|
44
|
+
env: API=1
|
35
45
|
- rvm: 2.6.6
|
36
46
|
gemfile: gemfiles/Gemfile-rails.6.0.x
|
37
47
|
- rvm: 2.6.6
|
data/CHANGELOG.md
CHANGED
data/active_decorator.gemspec
CHANGED
@@ -13,9 +13,9 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.summary = %q{A simple and Rubyish view helper for Rails}
|
14
14
|
s.description = %q{A simple and Rubyish view helper for Rails}
|
15
15
|
|
16
|
-
s.files =
|
17
|
-
|
18
|
-
|
16
|
+
s.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
17
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
end
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
s.add_dependency 'activesupport'
|
data/gemfiles/Gemfile-rails.edge
CHANGED
@@ -5,18 +5,30 @@ module ActiveDecorator
|
|
5
5
|
module Monkey
|
6
6
|
module ActionView
|
7
7
|
module PartialRenderer
|
8
|
+
if Rails.version.to_f >= 6.1
|
9
|
+
def initialize(*)
|
10
|
+
super
|
11
|
+
|
12
|
+
@locals.each_value do |v|
|
13
|
+
ActiveDecorator::Decorator.instance.decorate v
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
8
18
|
private
|
9
19
|
|
10
|
-
|
11
|
-
|
20
|
+
if Rails.version.to_f < 6.1
|
21
|
+
def setup(*)
|
22
|
+
super
|
12
23
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
24
|
+
@locals.each_value do |v|
|
25
|
+
ActiveDecorator::Decorator.instance.decorate v
|
26
|
+
end if @locals
|
27
|
+
ActiveDecorator::Decorator.instance.decorate @object if @object
|
28
|
+
ActiveDecorator::Decorator.instance.decorate @collection unless @collection.blank?
|
18
29
|
|
19
|
-
|
30
|
+
self
|
31
|
+
end
|
20
32
|
end
|
21
33
|
end
|
22
34
|
end
|
@@ -6,6 +6,14 @@ module ActiveDecorator
|
|
6
6
|
ActiveSupport.on_load :action_view do
|
7
7
|
require 'active_decorator/monkey/action_view/partial_renderer'
|
8
8
|
ActionView::PartialRenderer.send :prepend, ActiveDecorator::Monkey::ActionView::PartialRenderer
|
9
|
+
|
10
|
+
if Rails.version.to_f >= 6.1
|
11
|
+
require 'active_decorator/monkey/action_view/collection_renderer'
|
12
|
+
ActionView::CollectionRenderer.send :prepend, ActiveDecorator::Monkey::ActionView::CollectionRenderer
|
13
|
+
|
14
|
+
require 'active_decorator/monkey/action_view/object_renderer'
|
15
|
+
ActionView::ObjectRenderer.send :prepend, ActiveDecorator::Monkey::ActionView::ObjectRenderer
|
16
|
+
end
|
9
17
|
end
|
10
18
|
|
11
19
|
ActiveSupport.on_load :action_controller do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_decorator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akira Matsuda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -142,6 +142,7 @@ files:
|
|
142
142
|
- gemfiles/Gemfile-rails.5.1.x
|
143
143
|
- gemfiles/Gemfile-rails.5.2.x
|
144
144
|
- gemfiles/Gemfile-rails.6.0.x
|
145
|
+
- gemfiles/Gemfile-rails.6.1.x
|
145
146
|
- gemfiles/Gemfile-rails.edge
|
146
147
|
- lib/active_decorator.rb
|
147
148
|
- lib/active_decorator/config.rb
|
@@ -150,6 +151,8 @@ files:
|
|
150
151
|
- lib/active_decorator/helpers.rb
|
151
152
|
- lib/active_decorator/monkey/abstract_controller/rendering.rb
|
152
153
|
- lib/active_decorator/monkey/action_controller/base/rescue_from.rb
|
154
|
+
- lib/active_decorator/monkey/action_view/collection_renderer.rb
|
155
|
+
- lib/active_decorator/monkey/action_view/object_renderer.rb
|
153
156
|
- lib/active_decorator/monkey/action_view/partial_renderer.rb
|
154
157
|
- lib/active_decorator/monkey/active_record/associations.rb
|
155
158
|
- lib/active_decorator/railtie.rb
|
@@ -162,35 +165,6 @@ files:
|
|
162
165
|
- lib/generators/rspec/templates/decorator_spec.rb
|
163
166
|
- lib/generators/test_unit/decorator_generator.rb
|
164
167
|
- lib/generators/test_unit/templates/decorator_test.rb
|
165
|
-
- test/configuration_test.rb
|
166
|
-
- test/controllers/fake_detection_test.rb
|
167
|
-
- test/decorator_test.rb
|
168
|
-
- test/fake_app/app/decorators/comic_decorator.rb
|
169
|
-
- test/fake_app/app/views/authors/index.html.erb
|
170
|
-
- test/fake_app/app/views/authors/show.html.erb
|
171
|
-
- test/fake_app/app/views/authors/show.json.jbuilder
|
172
|
-
- test/fake_app/app/views/book_mailer/thanks.text.erb
|
173
|
-
- test/fake_app/app/views/books/_book.html.erb
|
174
|
-
- test/fake_app/app/views/books/_book.json.jbuilder
|
175
|
-
- test/fake_app/app/views/books/_book_locals.html.erb
|
176
|
-
- test/fake_app/app/views/books/errata.html.erb
|
177
|
-
- test/fake_app/app/views/books/errata2.html.erb
|
178
|
-
- test/fake_app/app/views/books/error.html.erb
|
179
|
-
- test/fake_app/app/views/books/index.html.erb
|
180
|
-
- test/fake_app/app/views/books/purchase.html.erb
|
181
|
-
- test/fake_app/app/views/books/show.html.erb
|
182
|
-
- test/fake_app/app/views/movies/show.html.erb
|
183
|
-
- test/fake_app/fake_app.rb
|
184
|
-
- test/fake_app/public/images/cover.png
|
185
|
-
- test/features/action_controller_api_test.rb
|
186
|
-
- test/features/action_view_helpers_test.rb
|
187
|
-
- test/features/association_test.rb
|
188
|
-
- test/features/controller_ivar_test.rb
|
189
|
-
- test/features/jbuilder_test.rb
|
190
|
-
- test/features/name_error_handling_test.rb
|
191
|
-
- test/features/partial_test.rb
|
192
|
-
- test/models/association_test.rb
|
193
|
-
- test/test_helper.rb
|
194
168
|
homepage: https://github.com/amatsuda/active_decorator
|
195
169
|
licenses:
|
196
170
|
- MIT
|
@@ -210,37 +184,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
184
|
- !ruby/object:Gem::Version
|
211
185
|
version: '0'
|
212
186
|
requirements: []
|
213
|
-
rubygems_version: 3.2.0
|
187
|
+
rubygems_version: 3.2.0
|
214
188
|
signing_key:
|
215
189
|
specification_version: 4
|
216
190
|
summary: A simple and Rubyish view helper for Rails
|
217
|
-
test_files:
|
218
|
-
- test/configuration_test.rb
|
219
|
-
- test/controllers/fake_detection_test.rb
|
220
|
-
- test/decorator_test.rb
|
221
|
-
- test/fake_app/app/decorators/comic_decorator.rb
|
222
|
-
- test/fake_app/app/views/authors/index.html.erb
|
223
|
-
- test/fake_app/app/views/authors/show.html.erb
|
224
|
-
- test/fake_app/app/views/authors/show.json.jbuilder
|
225
|
-
- test/fake_app/app/views/book_mailer/thanks.text.erb
|
226
|
-
- test/fake_app/app/views/books/_book.html.erb
|
227
|
-
- test/fake_app/app/views/books/_book.json.jbuilder
|
228
|
-
- test/fake_app/app/views/books/_book_locals.html.erb
|
229
|
-
- test/fake_app/app/views/books/errata.html.erb
|
230
|
-
- test/fake_app/app/views/books/errata2.html.erb
|
231
|
-
- test/fake_app/app/views/books/error.html.erb
|
232
|
-
- test/fake_app/app/views/books/index.html.erb
|
233
|
-
- test/fake_app/app/views/books/purchase.html.erb
|
234
|
-
- test/fake_app/app/views/books/show.html.erb
|
235
|
-
- test/fake_app/app/views/movies/show.html.erb
|
236
|
-
- test/fake_app/fake_app.rb
|
237
|
-
- test/fake_app/public/images/cover.png
|
238
|
-
- test/features/action_controller_api_test.rb
|
239
|
-
- test/features/action_view_helpers_test.rb
|
240
|
-
- test/features/association_test.rb
|
241
|
-
- test/features/controller_ivar_test.rb
|
242
|
-
- test/features/jbuilder_test.rb
|
243
|
-
- test/features/name_error_handling_test.rb
|
244
|
-
- test/features/partial_test.rb
|
245
|
-
- test/models/association_test.rb
|
246
|
-
- test/test_helper.rb
|
191
|
+
test_files: []
|
data/test/configuration_test.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
Comic = Struct.new(:title, :price)
|
6
|
-
|
7
|
-
module ComicPresenter
|
8
|
-
def price
|
9
|
-
"$#{super}"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
class ConfigurationTest < Test::Unit::TestCase
|
14
|
-
test 'with a custom decorator_suffix' do
|
15
|
-
begin
|
16
|
-
ActiveDecorator.configure do |config|
|
17
|
-
config.decorator_suffix = 'Presenter'
|
18
|
-
end
|
19
|
-
|
20
|
-
comic = ActiveDecorator::Decorator.instance.decorate Comic.new("amatsuda's (Poignant) Guide to ActiveDecorator", 3)
|
21
|
-
assert_equal '$3', comic.price
|
22
|
-
ensure
|
23
|
-
ActiveDecorator.configure do |config|
|
24
|
-
config.decorator_suffix = 'Decorator'
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class MoviesControllerTest < ActionController::TestCase
|
6
|
-
test 'reveals fakes' do
|
7
|
-
movie = Movie.create
|
8
|
-
if Rails::VERSION::MAJOR >= 5
|
9
|
-
assert_nothing_raised { get :show, params: {id: movie.id} }
|
10
|
-
else
|
11
|
-
assert_nothing_raised { get :show, id: movie.id }
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
data/test/decorator_test.rb
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class DecoratorTest < Test::Unit::TestCase
|
6
|
-
test 'it returns the object on decoration' do
|
7
|
-
book = Book.new title: 'Boek'
|
8
|
-
assert_equal book, ActiveDecorator::Decorator.instance.decorate(book)
|
9
|
-
end
|
10
|
-
|
11
|
-
test 'it returns the object when it already is decorated on decorate' do
|
12
|
-
book = Book.new title: 'Boek'
|
13
|
-
assert_equal book, ActiveDecorator::Decorator.instance.decorate(ActiveDecorator::Decorator.instance.decorate(book))
|
14
|
-
end
|
15
|
-
|
16
|
-
test 'it returns the object of ActiveRecord::Relation on decorate' do
|
17
|
-
3.times do |index|
|
18
|
-
Book.create title: "ve#{index}"
|
19
|
-
end
|
20
|
-
|
21
|
-
books = Book.all
|
22
|
-
assert_equal books, ActiveDecorator::Decorator.instance.decorate(books)
|
23
|
-
end
|
24
|
-
|
25
|
-
test 'it returns the object of ActiveRecord::Relation when it already is decorated on decorate' do
|
26
|
-
3.times do |index|
|
27
|
-
Book.create title: "ve#{index}"
|
28
|
-
end
|
29
|
-
|
30
|
-
books = Book.all
|
31
|
-
assert_equal books, ActiveDecorator::Decorator.instance.decorate(ActiveDecorator::Decorator.instance.decorate(books))
|
32
|
-
end
|
33
|
-
|
34
|
-
test 'decorating Array decorates its each element' do
|
35
|
-
array = [Book.new(title: 'Boek')]
|
36
|
-
assert_equal array, ActiveDecorator::Decorator.instance.decorate(array)
|
37
|
-
|
38
|
-
array.each do |value|
|
39
|
-
assert value.is_a?(BookDecorator)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
test 'decorating Hash decorates its each value' do
|
44
|
-
hash = {some_record: Book.new(title: 'Boek')}
|
45
|
-
assert_equal hash, ActiveDecorator::Decorator.instance.decorate(hash)
|
46
|
-
|
47
|
-
hash.values.each do |value|
|
48
|
-
assert value.is_a?(BookDecorator)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
test "Don't use the wrong decorator for nested classes" do
|
53
|
-
comic = Foo::Comic.new
|
54
|
-
|
55
|
-
assert_equal comic, ActiveDecorator::Decorator.instance.decorate(comic)
|
56
|
-
assert !comic.is_a?(ComicDecorator)
|
57
|
-
end
|
58
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
<% @authors.each do |author| %>
|
2
|
-
<%= author.name %>
|
3
|
-
<%= author.reverse_name %>
|
4
|
-
|
5
|
-
<% if params[:partial] == 'collection' %>
|
6
|
-
<%= render author.books %>
|
7
|
-
<% elsif params[:partial] == 'locals' %>
|
8
|
-
<% author.books.each do |book| %>
|
9
|
-
<%= render partial: 'books/book_locals', locals: {b: book} %>
|
10
|
-
<% end %>
|
11
|
-
<% else %>
|
12
|
-
<% author.books.each do |book| %>
|
13
|
-
<%= render book %>
|
14
|
-
<% end %>
|
15
|
-
<% end %>
|
16
|
-
<% end %>
|
@@ -1,10 +0,0 @@
|
|
1
|
-
<%= @author.name %>
|
2
|
-
<%= @author.capitalized_name %>
|
3
|
-
<%= @author.books.first.upcased_title %>
|
4
|
-
<%= @author.books.last.upcased_title %>
|
5
|
-
<% if p = @author.publishers.take %><%= p.upcased_name %><% end %>
|
6
|
-
<% if Rails.version.to_f >= 5.1 && p = @author.publishers.second_to_last %><%= p.reversed_name %><% end %>
|
7
|
-
<% if p = @author.profile %><%= p.address %><% end %>
|
8
|
-
<% if h = @author.profile_history %><%= h.update_date %><% end %>
|
9
|
-
<% if m = @author.magazines.first %><%= m.upcased_title %><% end %>
|
10
|
-
<% if c = @author.company %><%= c.reverse_name %><% end %>
|
@@ -1 +0,0 @@
|
|
1
|
-
Thank you for purchasing <%= @book.upcased_title %>.
|
@@ -1 +0,0 @@
|
|
1
|
-
<%= @book.errata %>
|
@@ -1 +0,0 @@
|
|
1
|
-
<%= @book.errata2 %>
|
@@ -1 +0,0 @@
|
|
1
|
-
<%= @book.error %>
|
@@ -1 +0,0 @@
|
|
1
|
-
done
|
data/test/fake_app/fake_app.rb
DELETED
@@ -1,311 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
ENV['RAILS_ENV'] ||= 'test'
|
4
|
-
|
5
|
-
require 'active_record'
|
6
|
-
require 'action_controller/railtie'
|
7
|
-
require 'action_mailer/railtie'
|
8
|
-
require 'action_view/railtie'
|
9
|
-
require 'ostruct'
|
10
|
-
require 'jbuilder' unless ENV['API']
|
11
|
-
|
12
|
-
# config
|
13
|
-
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
|
14
|
-
|
15
|
-
module ActiveDecoratorTestApp
|
16
|
-
class Application < Rails::Application
|
17
|
-
config.secret_token = '"confusion" will be my epitaph.'
|
18
|
-
config.session_store :cookie_store, key: '_myapp_session'
|
19
|
-
config.active_support.deprecation = :log
|
20
|
-
config.eager_load = false
|
21
|
-
config.action_dispatch.show_exceptions = false
|
22
|
-
config.root = File.dirname(__FILE__)
|
23
|
-
|
24
|
-
config.action_mailer.delivery_method = :test
|
25
|
-
end
|
26
|
-
end
|
27
|
-
ActiveDecoratorTestApp::Application.initialize!
|
28
|
-
|
29
|
-
# routes
|
30
|
-
ActiveDecoratorTestApp::Application.routes.draw do
|
31
|
-
resources :authors, only: [:index, :show] do
|
32
|
-
resources :books, only: [:index, :show] do
|
33
|
-
member do
|
34
|
-
get :errata
|
35
|
-
get :errata2
|
36
|
-
get :error
|
37
|
-
post :purchase
|
38
|
-
end
|
39
|
-
end
|
40
|
-
resources :novels, only: [:index, :show] do
|
41
|
-
member do
|
42
|
-
get :error
|
43
|
-
post :purchase
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
resources :movies, only: :show
|
48
|
-
|
49
|
-
if Rails::VERSION::MAJOR >= 5
|
50
|
-
namespace :api do
|
51
|
-
resources :bookstores, only: :show do
|
52
|
-
collection do
|
53
|
-
get :error
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
# models
|
61
|
-
class Author < ActiveRecord::Base
|
62
|
-
has_many :books
|
63
|
-
has_many :publishers, through: :books
|
64
|
-
has_many :movies
|
65
|
-
has_one :profile
|
66
|
-
has_one :profile_history, through: :profile
|
67
|
-
has_and_belongs_to_many :magazines
|
68
|
-
belongs_to :company
|
69
|
-
end
|
70
|
-
class Book < ActiveRecord::Base
|
71
|
-
belongs_to :author
|
72
|
-
belongs_to :publisher
|
73
|
-
accepts_nested_attributes_for :publisher
|
74
|
-
end
|
75
|
-
class Novel < Book
|
76
|
-
end
|
77
|
-
class Movie < ActiveRecord::Base
|
78
|
-
belongs_to :author
|
79
|
-
end
|
80
|
-
class Publisher < ActiveRecord::Base
|
81
|
-
has_many :books
|
82
|
-
end
|
83
|
-
class Profile < ActiveRecord::Base
|
84
|
-
belongs_to :author
|
85
|
-
has_one :profile_history
|
86
|
-
accepts_nested_attributes_for :profile_history
|
87
|
-
end
|
88
|
-
class ProfileHistory < ActiveRecord::Base
|
89
|
-
belongs_to :profile
|
90
|
-
end
|
91
|
-
class Magazine < ActiveRecord::Base
|
92
|
-
has_and_belongs_to_many :authors
|
93
|
-
end
|
94
|
-
class Company < ActiveRecord::Base
|
95
|
-
has_many :authors
|
96
|
-
end
|
97
|
-
class Bookstore < ActiveRecord::Base
|
98
|
-
end
|
99
|
-
|
100
|
-
# helpers
|
101
|
-
module ApplicationHelper; end
|
102
|
-
|
103
|
-
# decorators
|
104
|
-
module AuthorDecorator
|
105
|
-
def reverse_name
|
106
|
-
name.reverse
|
107
|
-
end
|
108
|
-
|
109
|
-
def capitalized_name
|
110
|
-
name.capitalize
|
111
|
-
end
|
112
|
-
end
|
113
|
-
module BookDecorator
|
114
|
-
def reverse_title
|
115
|
-
title.reverse
|
116
|
-
end
|
117
|
-
|
118
|
-
def upcased_title
|
119
|
-
title.upcase
|
120
|
-
end
|
121
|
-
|
122
|
-
def link
|
123
|
-
link_to title, "#{request.protocol}#{request.host_with_port}/assets/sample.png", class: 'title'
|
124
|
-
end
|
125
|
-
|
126
|
-
def cover_image
|
127
|
-
image_tag 'cover.png'
|
128
|
-
end
|
129
|
-
|
130
|
-
def errata
|
131
|
-
poof!
|
132
|
-
end
|
133
|
-
|
134
|
-
def errata2
|
135
|
-
title.boom!
|
136
|
-
end
|
137
|
-
|
138
|
-
def error
|
139
|
-
"ERROR"
|
140
|
-
end
|
141
|
-
end
|
142
|
-
module PublisherDecorator
|
143
|
-
def upcased_name
|
144
|
-
name.upcase
|
145
|
-
end
|
146
|
-
|
147
|
-
def reversed_name
|
148
|
-
name.reverse
|
149
|
-
end
|
150
|
-
end
|
151
|
-
module ProfileDecorator
|
152
|
-
def address
|
153
|
-
"secret"
|
154
|
-
end
|
155
|
-
end
|
156
|
-
module ProfileHistoryDecorator
|
157
|
-
def update_date
|
158
|
-
updated_on.strftime('%Y/%m/%d')
|
159
|
-
end
|
160
|
-
end
|
161
|
-
module MagazineDecorator
|
162
|
-
def upcased_title
|
163
|
-
title.upcase
|
164
|
-
end
|
165
|
-
end
|
166
|
-
module CompanyDecorator
|
167
|
-
def reverse_name
|
168
|
-
name.reverse
|
169
|
-
end
|
170
|
-
end
|
171
|
-
module BookstoreDecorator
|
172
|
-
def initial
|
173
|
-
name.first
|
174
|
-
end
|
175
|
-
|
176
|
-
def to_json
|
177
|
-
{name: name, initial: initial}
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
# decorator fake
|
182
|
-
class MovieDecorator; end
|
183
|
-
|
184
|
-
# controllers
|
185
|
-
unless ENV['API']
|
186
|
-
class ApplicationController < ActionController::Base
|
187
|
-
self.append_view_path File.dirname(__FILE__)
|
188
|
-
end
|
189
|
-
class AuthorsController < ApplicationController
|
190
|
-
def index
|
191
|
-
# ActiveRecord 4.x
|
192
|
-
if params[:variable_type] == 'array'
|
193
|
-
@authors = Author.all.to_a
|
194
|
-
elsif params[:variable_type] == 'proxy'
|
195
|
-
@authors = RelationProxy.new(Author.all)
|
196
|
-
else
|
197
|
-
@authors = Author.all
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
def show
|
202
|
-
@author = Author.find params[:id]
|
203
|
-
end
|
204
|
-
end
|
205
|
-
class BooksController < ApplicationController
|
206
|
-
class CustomError < StandardError; end
|
207
|
-
|
208
|
-
rescue_from CustomError do
|
209
|
-
render :error
|
210
|
-
end
|
211
|
-
|
212
|
-
def index
|
213
|
-
@author = Author.find params[:author_id]
|
214
|
-
@books = @author.books
|
215
|
-
end
|
216
|
-
|
217
|
-
def show
|
218
|
-
@book = Author.find(params[:author_id]).books.find(params[:id])
|
219
|
-
end
|
220
|
-
|
221
|
-
def errata
|
222
|
-
@book = Author.find(params[:author_id]).books.find(params[:id])
|
223
|
-
end
|
224
|
-
|
225
|
-
def errata2
|
226
|
-
@book = Author.find(params[:author_id]).books.find(params[:id])
|
227
|
-
end
|
228
|
-
|
229
|
-
def error
|
230
|
-
@book = Author.find(params[:author_id]).books.find(params[:id])
|
231
|
-
raise CustomError, "error"
|
232
|
-
end
|
233
|
-
|
234
|
-
def purchase
|
235
|
-
@book = Author.find(params[:author_id]).books.find(params[:id])
|
236
|
-
|
237
|
-
@view_context_before_sending_mail = ActiveDecorator::ViewContext.current
|
238
|
-
BookMailer.thanks(@book).deliver
|
239
|
-
raise 'Wrong ViewContext!' if ActiveDecorator::ViewContext.current != @view_context_before_sending_mail
|
240
|
-
end
|
241
|
-
end
|
242
|
-
class MoviesController < ApplicationController
|
243
|
-
def show
|
244
|
-
@movie = Movie.find params[:id]
|
245
|
-
end
|
246
|
-
end
|
247
|
-
else
|
248
|
-
module Api
|
249
|
-
class BookstoresController < ActionController::API
|
250
|
-
class CustomError < StandardError; end
|
251
|
-
|
252
|
-
rescue_from CustomError do
|
253
|
-
head :internal_server_error
|
254
|
-
end
|
255
|
-
|
256
|
-
def show
|
257
|
-
@bookstore = Bookstore.find params[:id]
|
258
|
-
render json: serialize('bookstore')
|
259
|
-
end
|
260
|
-
|
261
|
-
private def serialize(name)
|
262
|
-
view_assigns[name].to_json
|
263
|
-
end
|
264
|
-
|
265
|
-
def error
|
266
|
-
raise CustomError, 'boom!'
|
267
|
-
end
|
268
|
-
end
|
269
|
-
end
|
270
|
-
end
|
271
|
-
|
272
|
-
# mailers
|
273
|
-
class BookMailer < ActionMailer::Base
|
274
|
-
def thanks(book)
|
275
|
-
@book = book
|
276
|
-
mail from: 'nobody@example.com', to: 'test@example.com', subject: 'Thanks'
|
277
|
-
end
|
278
|
-
end
|
279
|
-
|
280
|
-
# migrations
|
281
|
-
class CreateAllTables < ActiveRecord::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[5.0] : ActiveRecord::Migration
|
282
|
-
def self.up
|
283
|
-
create_table(:authors) {|t| t.string :name; t.references :company}
|
284
|
-
create_table(:books) {|t| t.string :title; t.string :type; t.references :author; t.references :publisher }
|
285
|
-
create_table(:profiles) {|t| t.string :address; t.references :author}
|
286
|
-
create_table(:profile_histories) {|t| t.date :updated_on; t.references :profile}
|
287
|
-
create_table(:publishers) {|t| t.string :name}
|
288
|
-
create_table(:movies) {|t| t.string :name; t.references :author}
|
289
|
-
create_table(:magazines) {|t| t.string :title}
|
290
|
-
create_table(:authors_magazines) {|t| t.references :author; t.references :magazine}
|
291
|
-
create_table(:companies) {|t| t.string :name}
|
292
|
-
create_table(:bookstores) {|t| t.string :name}
|
293
|
-
end
|
294
|
-
end
|
295
|
-
|
296
|
-
# Proxy for ActiveRecord::Relation
|
297
|
-
class RelationProxy < BasicObject
|
298
|
-
attr_accessor :ar_relation
|
299
|
-
|
300
|
-
def initialize(ar_relation)
|
301
|
-
@ar_relation = ar_relation
|
302
|
-
end
|
303
|
-
|
304
|
-
def method_missing(method, *args, &block)
|
305
|
-
@ar_relation.public_send(method, *args, &block)
|
306
|
-
end
|
307
|
-
end
|
308
|
-
|
309
|
-
module Foo
|
310
|
-
class Comic; end
|
311
|
-
end
|
Binary file
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'test_helper'
|
3
|
-
|
4
|
-
if Rails::VERSION::MAJOR >= 5
|
5
|
-
|
6
|
-
class ActionControllerAPITest < ActionDispatch::IntegrationTest
|
7
|
-
setup do
|
8
|
-
Bookstore.create! name: 'junkudo'
|
9
|
-
end
|
10
|
-
|
11
|
-
test 'decorating objects in api only controllers' do
|
12
|
-
get "/api/bookstores/#{Bookstore.last.id}.json"
|
13
|
-
|
14
|
-
assert_equal({"initial" => "j", "name" => "junkudo"}, response.parsed_body)
|
15
|
-
end
|
16
|
-
|
17
|
-
test 'error handling in api only controllers' do
|
18
|
-
get "/api/bookstores/error.json"
|
19
|
-
|
20
|
-
assert_response :error
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class ActionViewHelpersTest < ActionDispatch::IntegrationTest
|
6
|
-
setup do
|
7
|
-
aamine = Author.create! name: 'aamine'
|
8
|
-
@rhg = aamine.books.create! title: 'RHG'
|
9
|
-
@rhg_novel = aamine.books.create! title: 'RHG Novel', type: 'Novel'
|
10
|
-
end
|
11
|
-
|
12
|
-
test 'invoking action_view helper methods' do
|
13
|
-
visit "/authors/#{@rhg.author.id}/books/#{@rhg.id}"
|
14
|
-
within 'a.title' do
|
15
|
-
assert page.has_content? 'RHG'
|
16
|
-
end
|
17
|
-
assert page.has_css?('img')
|
18
|
-
end
|
19
|
-
|
20
|
-
test 'invoking action_view helper methods on model subclass' do
|
21
|
-
visit "/authors/#{@rhg_novel.author.id}/books/#{@rhg_novel.id}"
|
22
|
-
within 'a.title' do
|
23
|
-
assert page.has_content? 'RHG Novel'
|
24
|
-
end
|
25
|
-
assert page.has_css?('img')
|
26
|
-
end
|
27
|
-
|
28
|
-
test 'invoking action_view helper methods in rescue_from view' do
|
29
|
-
visit "/authors/#{@rhg.author.id}/books/#{@rhg.id}/error"
|
30
|
-
assert page.has_content?('ERROR')
|
31
|
-
end
|
32
|
-
|
33
|
-
test 'make sure that action_view + action_mailer works' do
|
34
|
-
visit "/authors/#{@rhg.author.id}/books/#{@rhg.id}"
|
35
|
-
click_link 'purchase'
|
36
|
-
assert page.has_content? 'done'
|
37
|
-
end
|
38
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class AssociationIntegrationTest < ActionDispatch::IntegrationTest
|
6
|
-
setup do
|
7
|
-
company = Company.create! name: 'NaCl'
|
8
|
-
@matz = company.authors.create! name: 'matz'
|
9
|
-
@matz.books.create!(
|
10
|
-
title: 'the world of code',
|
11
|
-
publisher_attributes: { name: 'nikkei linux' }
|
12
|
-
)
|
13
|
-
@matz.books.create!(
|
14
|
-
title: 'the ruby programming language',
|
15
|
-
publisher_attributes: { name: "o'reilly" }
|
16
|
-
)
|
17
|
-
@matz.create_profile! address: 'Matsue city, Shimane'
|
18
|
-
@matz.profile.create_profile_history! updated_on: Date.new(2017, 2, 7)
|
19
|
-
@matz.magazines.create! title: 'rubima'
|
20
|
-
end
|
21
|
-
|
22
|
-
test 'decorating associated objects' do
|
23
|
-
visit "/authors/#{@matz.id}"
|
24
|
-
assert page.has_content? 'the world of code'.upcase
|
25
|
-
assert page.has_content? 'the ruby programming language'.upcase
|
26
|
-
assert page.has_content? 'nikkei linux'.upcase
|
27
|
-
if Rails.version.to_f >= 5.1
|
28
|
-
assert page.has_content? 'nikkei linux'.reverse
|
29
|
-
end
|
30
|
-
assert page.has_content? 'secret'
|
31
|
-
assert page.has_content? '2017/02/07'
|
32
|
-
assert page.has_content? 'rubima'.upcase
|
33
|
-
assert page.has_content? 'NaCl'.reverse
|
34
|
-
end
|
35
|
-
|
36
|
-
test "decorating associated objects that owner doesn't have decorator" do
|
37
|
-
movie = Movie.create! author: @matz
|
38
|
-
visit "/movies/#{movie.id}"
|
39
|
-
assert page.has_content? 'matz'.reverse
|
40
|
-
end
|
41
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class ControllerIvarTest < ActionDispatch::IntegrationTest
|
6
|
-
setup do
|
7
|
-
@matz = Author.create! name: 'matz'
|
8
|
-
@matz.books.create! title: 'the world of code'
|
9
|
-
Author.create! name: 'takahashim'
|
10
|
-
end
|
11
|
-
|
12
|
-
test 'decorating a model object in ivar' do
|
13
|
-
visit "/authors/#{@matz.id}"
|
14
|
-
assert page.has_content? 'matz'
|
15
|
-
assert page.has_content? 'matz'.capitalize
|
16
|
-
end
|
17
|
-
|
18
|
-
test 'decorating model scope in ivar' do
|
19
|
-
visit '/authors'
|
20
|
-
assert page.has_content? 'takahashim'
|
21
|
-
assert page.has_content? 'takahashim'.reverse
|
22
|
-
end
|
23
|
-
|
24
|
-
test "decorating models' array in ivar" do
|
25
|
-
visit '/authors?variable_type=array'
|
26
|
-
assert page.has_content? 'takahashim'
|
27
|
-
assert page.has_content? 'takahashim'.reverse
|
28
|
-
end
|
29
|
-
|
30
|
-
test "decorating models' proxy object in ivar" do
|
31
|
-
visit '/authors?variable_type=proxy'
|
32
|
-
assert page.has_content? 'takahashim'
|
33
|
-
assert page.has_content? 'takahashim'.reverse
|
34
|
-
end
|
35
|
-
|
36
|
-
test 'decorating model association proxy in ivar' do
|
37
|
-
visit "/authors/#{@matz.id}/books"
|
38
|
-
assert page.has_content? 'the world of code'
|
39
|
-
assert page.has_content? 'the world of code'.reverse
|
40
|
-
end
|
41
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class JbuilderTest < ActionDispatch::IntegrationTest
|
6
|
-
setup do
|
7
|
-
Author.create! name: 'aamine'
|
8
|
-
nari = Author.create! name: 'nari'
|
9
|
-
nari.books.create! title: 'the gc book'
|
10
|
-
end
|
11
|
-
|
12
|
-
test 'decorating objects in Jbuilder partials' do
|
13
|
-
visit "/authors/#{Author.last.id}.json"
|
14
|
-
assert_equal '{"name":"nari","books":[{"title":"the gc book","reverse_title":"koob cg eht"}]}', page.source
|
15
|
-
end
|
16
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class NameErrorHandlingTest < ActionDispatch::IntegrationTest
|
6
|
-
setup do
|
7
|
-
aamine = Author.create! name: 'aamine'
|
8
|
-
@rhg = aamine.books.create! title: 'RHG'
|
9
|
-
end
|
10
|
-
|
11
|
-
test 'raising NameError in a decorator' do
|
12
|
-
err = assert_raises ActionView::Template::Error do
|
13
|
-
visit "/authors/#{@rhg.author.id}/books/#{@rhg.id}/errata"
|
14
|
-
end
|
15
|
-
|
16
|
-
assert_match(/undefined method `poof!' for/, err.message)
|
17
|
-
assert_match 'poof!', err.cause.name if err.respond_to?(:cause)
|
18
|
-
end
|
19
|
-
|
20
|
-
test "Don't touch NameError that was not raised from a decorator module but from other classes" do
|
21
|
-
err = assert_raises ActionView::Template::Error do
|
22
|
-
visit "/authors/#{@rhg.author.id}/books/#{@rhg.id}/errata2"
|
23
|
-
end
|
24
|
-
|
25
|
-
assert_match(/undefined method `boom!' for/, err.message)
|
26
|
-
assert_match 'boom!', err.cause.name if err.respond_to?(:cause)
|
27
|
-
assert_not_match(/active_decorator\/lib\/active_decorator\/.* in method_missing'$/, err.backtrace[0])
|
28
|
-
end
|
29
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class PartialTest < ActionDispatch::IntegrationTest
|
6
|
-
setup do
|
7
|
-
Author.create! name: 'aamine'
|
8
|
-
nari = Author.create! name: 'nari'
|
9
|
-
nari.books.create! title: 'the gc book'
|
10
|
-
end
|
11
|
-
|
12
|
-
test 'decorating implicit @object' do
|
13
|
-
visit '/authors'
|
14
|
-
assert page.has_content? 'the gc book'
|
15
|
-
assert page.has_content? 'the gc book'.reverse
|
16
|
-
end
|
17
|
-
|
18
|
-
test 'decorating implicit @collection' do
|
19
|
-
visit '/authors?partial=collection'
|
20
|
-
assert page.has_content? 'the gc book'
|
21
|
-
assert page.has_content? 'the gc book'.reverse
|
22
|
-
end
|
23
|
-
|
24
|
-
test 'decorating objects in @locals' do
|
25
|
-
visit '/authors?partial=locals'
|
26
|
-
assert page.has_content? 'the gc book'
|
27
|
-
assert page.has_content? 'the gc book'.upcase
|
28
|
-
end
|
29
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
|
5
|
-
class AssociationTest < Test::Unit::TestCase
|
6
|
-
setup do
|
7
|
-
a = Author.create! name: 'pragdave'
|
8
|
-
ActiveDecorator::Decorator.instance.decorate a
|
9
|
-
|
10
|
-
@books = a.books
|
11
|
-
|
12
|
-
b = @books.create! title: 'pragprog'
|
13
|
-
@id = b.id
|
14
|
-
end
|
15
|
-
|
16
|
-
test 'build' do
|
17
|
-
b = @books.build title: 'pickaxe'
|
18
|
-
assert b.is_a? ActiveDecorator::Decorated
|
19
|
-
end
|
20
|
-
|
21
|
-
test 'create!' do
|
22
|
-
b = @books.create! title: 'pickaxe'
|
23
|
-
assert b.is_a? ActiveDecorator::Decorated
|
24
|
-
end
|
25
|
-
|
26
|
-
test 'each' do
|
27
|
-
@books.each do |b|
|
28
|
-
assert b.is_a? ActiveDecorator::Decorated
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
test 'first' do
|
33
|
-
assert @books.first.is_a? ActiveDecorator::Decorated
|
34
|
-
end
|
35
|
-
|
36
|
-
test 'last' do
|
37
|
-
assert @books.last.is_a? ActiveDecorator::Decorated
|
38
|
-
end
|
39
|
-
|
40
|
-
test 'find' do
|
41
|
-
assert @books.find(@id).is_a? ActiveDecorator::Decorated
|
42
|
-
end
|
43
|
-
|
44
|
-
test 'take' do
|
45
|
-
assert @books.take.is_a? ActiveDecorator::Decorated
|
46
|
-
end
|
47
|
-
|
48
|
-
sub_test_case 'when method chained' do
|
49
|
-
setup do
|
50
|
-
@books = @books.order(:id)
|
51
|
-
end
|
52
|
-
|
53
|
-
test 'each' do
|
54
|
-
@books.each do |b|
|
55
|
-
assert b.is_a? ActiveDecorator::Decorated
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
test 'first' do
|
60
|
-
assert @books.first.is_a? ActiveDecorator::Decorated
|
61
|
-
end
|
62
|
-
|
63
|
-
test 'last' do
|
64
|
-
assert @books.last.is_a? ActiveDecorator::Decorated
|
65
|
-
end
|
66
|
-
|
67
|
-
test 'find' do
|
68
|
-
assert @books.find(@id).is_a? ActiveDecorator::Decorated
|
69
|
-
end
|
70
|
-
|
71
|
-
test 'take' do
|
72
|
-
assert @books.take.is_a? ActiveDecorator::Decorated
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
4
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
5
|
-
# load Rails first
|
6
|
-
require 'rails'
|
7
|
-
|
8
|
-
# load the plugin
|
9
|
-
require 'active_decorator'
|
10
|
-
|
11
|
-
Bundler.require
|
12
|
-
require 'capybara'
|
13
|
-
require 'selenium/webdriver'
|
14
|
-
require 'byebug'
|
15
|
-
|
16
|
-
# needs to load the app next
|
17
|
-
require 'fake_app/fake_app'
|
18
|
-
|
19
|
-
require 'test/unit/rails/test_help'
|
20
|
-
|
21
|
-
begin
|
22
|
-
require 'action_dispatch/system_test_case'
|
23
|
-
rescue LoadError
|
24
|
-
Capybara.register_driver :chrome do |app|
|
25
|
-
options = Selenium::WebDriver::Chrome::Options.new(args: %w[no-sandbox headless disable-gpu])
|
26
|
-
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
|
27
|
-
end
|
28
|
-
Capybara.javascript_driver = :chrome
|
29
|
-
|
30
|
-
class ActionDispatch::IntegrationTest
|
31
|
-
include Capybara::DSL
|
32
|
-
end
|
33
|
-
else
|
34
|
-
if ActionPack::VERSION::STRING > '5.2'
|
35
|
-
ActionDispatch::SystemTestCase.driven_by :selenium, using: :headless_chrome
|
36
|
-
else
|
37
|
-
ActionDispatch::SystemTestCase.driven_by :selenium_chrome_headless
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
module DatabaseDeleter
|
42
|
-
def setup
|
43
|
-
Book.delete_all
|
44
|
-
Author.delete_all
|
45
|
-
Movie.delete_all
|
46
|
-
super
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
Test::Unit::TestCase.send :prepend, DatabaseDeleter
|
51
|
-
|
52
|
-
CreateAllTables.up unless ActiveRecord::Base.connection.table_exists? 'authors'
|