godmin 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/.travis.yml +1 -0
- data/CHANGELOG.md +12 -0
- data/README.md +58 -8
- data/Rakefile +45 -16
- data/app/views/godmin/resource/show.html.erb +1 -1
- data/app/views/layouts/godmin/_layout.html.erb +1 -0
- data/app/views/layouts/godmin/application.html.erb +7 -1
- data/config/locales/en.yml +1 -1
- data/config/locales/pt-BR.yml +44 -0
- data/config/locales/sv.yml +1 -1
- data/godmin.gemspec +2 -1
- data/lib/generators/godmin/authentication/authentication_generator.rb +1 -1
- data/lib/godmin/application_controller.rb +1 -1
- data/lib/godmin/generators/named_base.rb +8 -0
- data/lib/godmin/resolver.rb +44 -18
- data/lib/godmin/resources/resource_controller.rb +17 -30
- data/lib/godmin/resources/resource_controller/batch_actions.rb +49 -0
- data/lib/godmin/version.rb +1 -1
- data/template.rb +180 -18
- data/test/dummy/admin/app/assets/javascripts/admin/application.js +1 -0
- data/test/dummy/app/assets/javascripts/application.js +1 -0
- data/test/dummy/app/controllers/application_controller.rb +2 -2
- data/test/dummy/app/controllers/articles_controller.rb +10 -0
- data/test/dummy/app/services/article_service.rb +31 -0
- data/test/dummy/app/services/secret_article_service.rb +0 -7
- data/test/dummy/db/migrate/20150717121532_create_articles.rb +1 -1
- data/test/dummy/db/schema.rb +3 -3
- data/test/integration/batch_actions_test.rb +51 -0
- data/test/integration/filters_test.rb +21 -0
- data/test/integration/scopes_test.rb +23 -0
- data/test/lib/godmin/resolver_test.rb +22 -8
- data/test/test_helper.rb +19 -3
- metadata +25 -3
@@ -1,3 +1,13 @@
|
|
1
1
|
class ArticlesController < ApplicationController
|
2
2
|
include Godmin::Resources::ResourceController
|
3
|
+
|
4
|
+
private
|
5
|
+
|
6
|
+
def redirect_after_batch_action_publish
|
7
|
+
articles_path(scope: :published)
|
8
|
+
end
|
9
|
+
|
10
|
+
def redirect_after_batch_action_unpublish
|
11
|
+
articles_path(scope: :unpublished)
|
12
|
+
end
|
3
13
|
end
|
@@ -5,5 +5,36 @@ class ArticleService
|
|
5
5
|
attrs_for_show :id, :title, :body, :published
|
6
6
|
attrs_for_form :title, :body, :published
|
7
7
|
|
8
|
+
scope :unpublished
|
9
|
+
scope :published
|
10
|
+
|
11
|
+
def scope_unpublished(articles)
|
12
|
+
articles.where(published: false)
|
13
|
+
end
|
14
|
+
|
15
|
+
def scope_published(articles)
|
16
|
+
articles.where(published: true)
|
17
|
+
end
|
18
|
+
|
8
19
|
filter :title
|
20
|
+
|
21
|
+
def filter_title(articles, value)
|
22
|
+
articles.where(title: value)
|
23
|
+
end
|
24
|
+
|
25
|
+
batch_action :destroy
|
26
|
+
batch_action :publish
|
27
|
+
batch_action :unpublish
|
28
|
+
|
29
|
+
def batch_action_destroy(articles)
|
30
|
+
articles.destroy_all
|
31
|
+
end
|
32
|
+
|
33
|
+
def batch_action_publish(articles)
|
34
|
+
articles.update_all(published: true)
|
35
|
+
end
|
36
|
+
|
37
|
+
def batch_action_unpublish(articles)
|
38
|
+
articles.update_all(published: false)
|
39
|
+
end
|
9
40
|
end
|
data/test/dummy/db/schema.rb
CHANGED
@@ -23,9 +23,9 @@ ActiveRecord::Schema.define(version: 20150907133753) do
|
|
23
23
|
create_table "articles", force: :cascade do |t|
|
24
24
|
t.string "title"
|
25
25
|
t.text "body"
|
26
|
-
t.boolean "published"
|
27
|
-
t.datetime "created_at",
|
28
|
-
t.datetime "updated_at",
|
26
|
+
t.boolean "published", default: false
|
27
|
+
t.datetime "created_at", null: false
|
28
|
+
t.datetime "updated_at", null: false
|
29
29
|
end
|
30
30
|
|
31
31
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class BatchActionsTest < ActionDispatch::IntegrationTest
|
4
|
+
def test_batch_action
|
5
|
+
Capybara.current_driver = Capybara.javascript_driver
|
6
|
+
|
7
|
+
Article.create! title: "foo"
|
8
|
+
Article.create! title: "bar"
|
9
|
+
|
10
|
+
visit articles_path
|
11
|
+
|
12
|
+
all("[data-behavior~=batch-actions-checkbox]").each(&:click)
|
13
|
+
within "#actions" do
|
14
|
+
click_link "Destroy"
|
15
|
+
end
|
16
|
+
|
17
|
+
assert_equal 200, page.status_code
|
18
|
+
assert page.has_no_content? "foo"
|
19
|
+
assert page.has_no_content? "bar"
|
20
|
+
|
21
|
+
Capybara.use_default_driver
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_batch_action_redirect
|
25
|
+
Capybara.current_driver = Capybara.javascript_driver
|
26
|
+
|
27
|
+
Article.create! title: "foo"
|
28
|
+
|
29
|
+
visit articles_path
|
30
|
+
|
31
|
+
all("[data-behavior~=batch-actions-checkbox]").each(&:click)
|
32
|
+
within "#actions" do
|
33
|
+
click_link "Publish"
|
34
|
+
end
|
35
|
+
|
36
|
+
assert_equal articles_path(scope: :published), current_path_with_params
|
37
|
+
assert_equal 200, page.status_code
|
38
|
+
|
39
|
+
Capybara.use_default_driver
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def current_path_with_params
|
45
|
+
"#{current_uri.path}?#{current_uri.query}"
|
46
|
+
end
|
47
|
+
|
48
|
+
def current_uri
|
49
|
+
URI.parse(page.current_url)
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class FiltersTest < ActionDispatch::IntegrationTest
|
4
|
+
def test_filter
|
5
|
+
Article.create! title: "foo"
|
6
|
+
Article.create! title: "bar"
|
7
|
+
|
8
|
+
visit articles_path
|
9
|
+
|
10
|
+
fill_in "Title", with: "foo"
|
11
|
+
click_button "Filter"
|
12
|
+
assert_equal 200, page.status_code
|
13
|
+
assert page.has_content? "foo"
|
14
|
+
assert page.has_no_content? "bar"
|
15
|
+
|
16
|
+
click_link "Clear filter"
|
17
|
+
assert_equal 200, page.status_code
|
18
|
+
assert page.has_content? "foo"
|
19
|
+
assert page.has_content? "bar"
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
class ScopesTest < ActionDispatch::IntegrationTest
|
4
|
+
def test_scopes
|
5
|
+
Article.create! title: "foo"
|
6
|
+
Article.create! title: "bar"
|
7
|
+
Article.create! title: "baz", published: true
|
8
|
+
|
9
|
+
visit articles_path
|
10
|
+
|
11
|
+
assert page.has_content? "foo"
|
12
|
+
assert page.has_content? "bar"
|
13
|
+
assert page.has_no_content? "baz"
|
14
|
+
|
15
|
+
within "#scopes" do
|
16
|
+
click_link "Published"
|
17
|
+
end
|
18
|
+
|
19
|
+
assert page.has_no_content? "foo"
|
20
|
+
assert page.has_no_content? "bar"
|
21
|
+
assert page.has_content? "baz"
|
22
|
+
end
|
23
|
+
end
|
@@ -17,23 +17,37 @@ module Godmin
|
|
17
17
|
@engine_wrapper_2 = EngineWrapper.new(Admin::Controller)
|
18
18
|
end
|
19
19
|
|
20
|
+
def test_engine_resolver_when_not_namespaced
|
21
|
+
resolver = EngineResolver.new("articles", @engine_wrapper_1)
|
22
|
+
|
23
|
+
assert_equal [
|
24
|
+
"resource"
|
25
|
+
], resolver.template_paths("articles")
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_engine_resolver_when_namespaced
|
29
|
+
resolver = EngineResolver.new("godmin/resolver_test/admin/articles", @engine_wrapper_2)
|
30
|
+
|
31
|
+
assert_equal [
|
32
|
+
"godmin/resolver_test/admin/resource"
|
33
|
+
], resolver.template_paths("godmin/resolver_test/admin/articles")
|
34
|
+
end
|
35
|
+
|
20
36
|
def test_godmin_resolver_when_not_namespaced
|
21
|
-
resolver =
|
37
|
+
resolver = GodminResolver.new("articles", @engine_wrapper_1)
|
22
38
|
|
23
39
|
assert_equal [
|
24
|
-
|
25
|
-
|
26
|
-
File.join(Godmin::Engine.root, "app/views/godmin/resource")
|
40
|
+
"articles",
|
41
|
+
"resource"
|
27
42
|
], resolver.template_paths("articles")
|
28
43
|
end
|
29
44
|
|
30
45
|
def test_godmin_resolver_when_namespaced
|
31
|
-
resolver =
|
46
|
+
resolver = GodminResolver.new("godmin/resolver_test/admin/articles", @engine_wrapper_2)
|
32
47
|
|
33
48
|
assert_equal [
|
34
|
-
|
35
|
-
|
36
|
-
File.join(Godmin::Engine.root, "app/views/godmin/resource")
|
49
|
+
"articles",
|
50
|
+
"resource"
|
37
51
|
], resolver.template_paths("godmin/resolver_test/admin/articles")
|
38
52
|
end
|
39
53
|
end
|
data/test/test_helper.rb
CHANGED
@@ -4,15 +4,16 @@ CodeClimate::TestReporter.start
|
|
4
4
|
# Configure Rails Environment
|
5
5
|
ENV["RAILS_ENV"] = "test"
|
6
6
|
|
7
|
-
require File.expand_path("../dummy/config/environment.rb",
|
7
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
8
8
|
require "rails/test_help"
|
9
9
|
require "capybara/rails"
|
10
|
+
require "capybara/poltergeist"
|
10
11
|
require "minitest/reporters"
|
11
12
|
require "pry"
|
12
13
|
|
13
14
|
# TODO: what to call these?
|
14
|
-
require File.expand_path("../fakes/article.rb",
|
15
|
-
require File.expand_path("../fakes/article_service.rb",
|
15
|
+
require File.expand_path("../fakes/article.rb", __FILE__)
|
16
|
+
require File.expand_path("../fakes/article_service.rb", __FILE__)
|
16
17
|
|
17
18
|
Minitest::Reporters.use! [Minitest::Reporters::DefaultReporter.new(
|
18
19
|
color: true
|
@@ -28,6 +29,21 @@ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
|
|
28
29
|
ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
|
29
30
|
end
|
30
31
|
|
32
|
+
class ActiveRecord::Base
|
33
|
+
mattr_accessor :shared_connection
|
34
|
+
@@shared_connection = nil
|
35
|
+
|
36
|
+
def self.connection
|
37
|
+
@@shared_connection || retrieve_connection
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# Forces all threads to share the same connection. This works on
|
42
|
+
# Capybara because it starts the web server in a thread.
|
43
|
+
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
|
44
|
+
|
45
|
+
Capybara.javascript_driver = :poltergeist
|
46
|
+
|
31
47
|
class ActionDispatch::IntegrationTest
|
32
48
|
include Capybara::DSL
|
33
49
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: godmin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jens Ljungblad
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2015-
|
13
|
+
date: 2015-12-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bcrypt
|
@@ -186,6 +186,20 @@ dependencies:
|
|
186
186
|
- - ">="
|
187
187
|
- !ruby/object:Gem::Version
|
188
188
|
version: '0'
|
189
|
+
- !ruby/object:Gem::Dependency
|
190
|
+
name: minitest-reporters
|
191
|
+
requirement: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - ">="
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
196
|
+
type: :development
|
197
|
+
prerelease: false
|
198
|
+
version_requirements: !ruby/object:Gem::Requirement
|
199
|
+
requirements:
|
200
|
+
- - ">="
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: '0'
|
189
203
|
- !ruby/object:Gem::Dependency
|
190
204
|
name: minitest
|
191
205
|
requirement: !ruby/object:Gem::Requirement
|
@@ -201,7 +215,7 @@ dependencies:
|
|
201
215
|
- !ruby/object:Gem::Version
|
202
216
|
version: '0'
|
203
217
|
- !ruby/object:Gem::Dependency
|
204
|
-
name:
|
218
|
+
name: poltergeist
|
205
219
|
requirement: !ruby/object:Gem::Requirement
|
206
220
|
requirements:
|
207
221
|
- - ">="
|
@@ -294,6 +308,7 @@ files:
|
|
294
308
|
- app/views/layouts/godmin/application.html.erb
|
295
309
|
- app/views/layouts/godmin/login.html.erb
|
296
310
|
- config/locales/en.yml
|
311
|
+
- config/locales/pt-BR.yml
|
297
312
|
- config/locales/sv.yml
|
298
313
|
- config/routes.rb
|
299
314
|
- godmin.gemspec
|
@@ -327,6 +342,7 @@ files:
|
|
327
342
|
- lib/godmin/paginator.rb
|
328
343
|
- lib/godmin/resolver.rb
|
329
344
|
- lib/godmin/resources/resource_controller.rb
|
345
|
+
- lib/godmin/resources/resource_controller/batch_actions.rb
|
330
346
|
- lib/godmin/resources/resource_service.rb
|
331
347
|
- lib/godmin/resources/resource_service/batch_actions.rb
|
332
348
|
- lib/godmin/resources/resource_service/filters.rb
|
@@ -410,10 +426,13 @@ files:
|
|
410
426
|
- test/dummy/public/favicon.ico
|
411
427
|
- test/fakes/article.rb
|
412
428
|
- test/fakes/article_service.rb
|
429
|
+
- test/integration/batch_actions_test.rb
|
413
430
|
- test/integration/column_ordering_test.rb
|
414
431
|
- test/integration/column_overriding_test.rb
|
415
432
|
- test/integration/filter_overriding_test.rb
|
433
|
+
- test/integration/filters_test.rb
|
416
434
|
- test/integration/partial_overriding_test.rb
|
435
|
+
- test/integration/scopes_test.rb
|
417
436
|
- test/integration/sign_in_test.rb
|
418
437
|
- test/integration/template_overriding_test.rb
|
419
438
|
- test/integration/welcome_test.rb
|
@@ -529,10 +548,13 @@ test_files:
|
|
529
548
|
- test/dummy/public/favicon.ico
|
530
549
|
- test/fakes/article.rb
|
531
550
|
- test/fakes/article_service.rb
|
551
|
+
- test/integration/batch_actions_test.rb
|
532
552
|
- test/integration/column_ordering_test.rb
|
533
553
|
- test/integration/column_overriding_test.rb
|
534
554
|
- test/integration/filter_overriding_test.rb
|
555
|
+
- test/integration/filters_test.rb
|
535
556
|
- test/integration/partial_overriding_test.rb
|
557
|
+
- test/integration/scopes_test.rb
|
536
558
|
- test/integration/sign_in_test.rb
|
537
559
|
- test/integration/template_overriding_test.rb
|
538
560
|
- test/integration/welcome_test.rb
|