godmin 2.0.0 → 2.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67092da8f88553787c49e63ffee072d0a6c3a726c8daec0f36b1f9e85db399b9
4
- data.tar.gz: 04ed7ef417dbf573a0d882395a92cb8af1cf969a562c82b1b9d03710c23ad75d
3
+ metadata.gz: 48acefb7a163b19b58779a565c05f70f21c01be49dd45ded049826a7f5f39df7
4
+ data.tar.gz: e4306796ece713a6e24eba897fc18e4ea0f24f97bea075ca5e7a883739239113
5
5
  SHA512:
6
- metadata.gz: d65bdb37843317f059d2ff74fc240e64fbfa91f8670f2c1a47982abcd6bc2d6598f51dbe80b245ff6d195c7bd388eda6db901c4c99ef986d37036c11aa089df7
7
- data.tar.gz: 30b1c04eda1aa9990c2f6279db72de486f32787cea0ed2ce1d35e94b5b3c66a577e1b87b4beaba222c4066a5b12043ecf56547d28f1cf96b5341191e70dcbb90
6
+ metadata.gz: 16b5838830c7ff5f6662b166023bda316ba63faf2aba9d5968152db85a92e5bbcb3cf1634bb1f9e879113ea23e49245d732af7eef58357b9f822bf7ef92dd613
7
+ data.tar.gz: e12509e0e4efa91597e6cfdc4b578253647c0a1a4a8683d6f3c9714346f0a6ab9bc26ce5d4a8d35a78f814352f0e063b0f48d24a2075785c4de6230885bd3a04
data/.codeclimate.yml CHANGED
@@ -6,8 +6,6 @@ engines:
6
6
  enabled: true
7
7
  csslint:
8
8
  enabled: true
9
- bundler-audit:
10
- enabled: true
11
9
  ratings:
12
10
  paths:
13
11
  - "**.rb"
data/.travis.yml CHANGED
@@ -1,24 +1,21 @@
1
- bundler_args: --without debug
1
+ bundler_args: "--without debug"
2
2
  cache: bundler
3
- script: "bundle exec rake test"
4
- sudo: false
5
-
3
+ script: bundle exec rake test
4
+ dist: focal
6
5
  rvm:
7
- - 2.2.2
8
- - 2.3.5
9
- - 2.5.1
10
-
6
+ - 2.6.7
7
+ - 2.7.3
8
+ - 3.0.1
11
9
  gemfile:
12
10
  - gemfiles/rails_5.gemfile
13
11
  - gemfiles/rails_6.gemfile
14
12
 
15
13
  matrix:
16
14
  exclude:
17
- - rvm: 2.2.2
18
- gemfile: gemfiles/rails_6.gemfile
19
- - rvm: 2.3.5
20
- gemfile: gemfiles/rails_6.gemfile
15
+ - rvm: 3.0.1
16
+ gemfile: gemfiles/rails_5.gemfile
21
17
 
22
18
  addons:
23
19
  code_climate:
24
- repo_token: 7e7ee66c976bdfe7a0d40d41958b97a1cf8a03b0462df5cba415f624c07c2071
20
+ repo_token:
21
+ secure: WBszVdtEvWM2KugFre9BpwkCduY6hjrmK7xo1GLiru4NMqr4ZoRXruQ5ijhZE79YqduR6zudKr72g9yG4R+4CK7ghYu4x5JB76IW8gFWpI9teTWrF4hdSbJgwxSH5JNkqWF4f6ic4Xr1Vgc43agzt+1KmA9imoGs2Q0EbAY3H2M=
data/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ### 2.2.2 - 2021-11-08
4
+
5
+ Fix
6
+ - Render values in columns (https://github.com/varvet/godmin/pull/263)
7
+ - Correct README to match Godmin 2 (https://github.com/varvet/godmin/pull/262)
8
+
9
+ ### 2.2.1 - 2021-05-20
10
+
11
+ Fix
12
+ - Use Pundit >= 2.0.0 so that namespaces are handled correctly (https://github.com/varvet/godmin/pull/260)
13
+
14
+ ### 2.2.0 - 2021-05-20
15
+
16
+ Other
17
+ - Build and test against Ruby 3.0
18
+
19
+ Bug fixes
20
+ - Regression: within an Engine, always look for Pundit policies in the engine (https://github.com/varvet/godmin/pull/259)
21
+
22
+ ### 2.1.0 - 2021-05-10
23
+
24
+ Bug fixes
25
+ - Use symbol in path for compatibility with the latest Rails security patches (https://github.com/varvet/godmin/pull/256)
26
+
27
+ Other
28
+ - Build and test against Ruby 2.6 and 2.7
29
+ - Stop building and testing against unsupported rubies (2.5 and older). These may still work and PRs may still be accepted.
30
+
3
31
  ### 2.0.0 - 2019-12-06
4
32
 
5
33
  Features
data/README.md CHANGED
@@ -2,9 +2,8 @@
2
2
 
3
3
  [![Gem Version](http://img.shields.io/gem/v/godmin.svg)](https://rubygems.org/gems/godmin)
4
4
  [![Build Status](https://img.shields.io/travis/varvet/godmin/master.svg)](https://travis-ci.org/varvet/godmin)
5
- [![Code Climate](https://img.shields.io/codeclimate/github/varvet/godmin.svg)](https://codeclimate.com/github/varvet/godmin)
6
-
7
- **If you are looking for the current stable version, which is Rails 4+ compatible, see the [v1.5](https://github.com/varvet/godmin/tree/v1.5) branch**
5
+ [![Code Climate](https://api.codeclimate.com/v1/badges/d8e5c7c54c1dba073689/maintainability)](https://codeclimate.com/github/varvet/godmin)
6
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/d8e5c7c54c1dba073689/test_coverage)](https://codeclimate.com/github/varvet/godmin)
8
7
 
9
8
  Godmin is an admin framework for Rails 5+. Use it to build dedicated admin sections for your apps, or stand alone admin apps such as internal tools. It has support for common features such as scoping, filtering and performing batch actions on your models. Check out the [demo app](http://godmin-sandbox.herokuapp.com) and its [source code](https://github.com/varvet/godmin-sandbox) to get a feel for how it works.
10
9
 
@@ -734,7 +733,7 @@ module Admin
734
733
  include Godmin::ApplicationController
735
734
  include Godmin::Authentication
736
735
 
737
- def authenticate_admin_user
736
+ def authenticate
738
737
  authenticate_user!
739
738
  end
740
739
 
@@ -873,6 +872,51 @@ class ArticlesController < ApplicationController
873
872
  end
874
873
  ```
875
874
 
875
+ ### Authorization in Engines
876
+
877
+ When Godmin is installed as an engine, it expects policies to be defined
878
+ within the engine: eg. `Admin::ArticlePolicy` defined in
879
+ `admin/app/policies/article_policy.rb`.
880
+
881
+ If your admin application is itself broken up into several engines, then
882
+ either
883
+
884
+ 1. the policies for those engines need to live in the main engine, or
885
+ 2. those engines need to be namespaced under the namespace of the main engine.
886
+
887
+ Here is one example of a directory structure for approach 2:
888
+
889
+ ```
890
+ admin
891
+ ├── app
892
+   │   └── policies
893
+ │      └── admin
894
+ │      └── article_policy.rb
895
+ └── engines
896
+    └── content
897
+      └── policies
898
+       └── admin
899
+    └── content
900
+       └── text_block_policy.rb
901
+ app
902
+   └── models
903
+    └── article.rb
904
+ engines
905
+   └── content
906
+      └── models
907
+    └── content
908
+       └── text_block.rb
909
+ ```
910
+ ```ruby
911
+ # admin/engines/content/policies/admin/content/text_block_policy.rb
912
+ module Admin
913
+ module Content
914
+ class TextBlockPolicy < ::Admin::ApplicationPolicy
915
+ end
916
+ end
917
+ end
918
+ ```
919
+
876
920
  ## Localization
877
921
 
878
922
  Godmin supports localization out of the box. For a list of translatable strings, [look here](https://github.com/varvet/godmin/blob/master/config/locales/en.yml).
data/Rakefile CHANGED
@@ -36,14 +36,14 @@ namespace :sandbox do
36
36
  task :deploy do
37
37
  message = "Generated from: https://github.com/varvet/godmin/commit/#{`git rev-parse HEAD`.strip}"
38
38
  template_path = File.expand_path("../template.rb", __FILE__)
39
- Bundler.with_clean_env do
39
+ Bundler.with_unbundled_env do
40
40
  Dir.mktmpdir do |dir|
41
41
  Dir.chdir(dir)
42
- system("git clone https://github.com/varvet/godmin-sandbox.git")
42
+ system("git clone git@github.com:varvet/godmin-sandbox.git")
43
43
  if $CHILD_STATUS.success?
44
44
  Dir.chdir("godmin-sandbox")
45
45
  system("rm -rf *")
46
- system("rails new . -d postgresql -m #{template_path} --without-engine --skip-spring")
46
+ system("rails _5.2.5_ new . -d postgresql -m #{template_path} --without-engine --skip-spring")
47
47
  if $CHILD_STATUS.success?
48
48
  system("git add --all")
49
49
  system("git commit -m '#{message}'")
@@ -1,3 +1,3 @@
1
1
  <% if policy(@resource_service.build_resource({})).new? %>
2
- <%= link_to t("helpers.submit.create", model: @resource_class.model_name.human), [:new, *@resource_parents, @resource_class.model_name.singular_route_key], class: "btn btn-default" %>
2
+ <%= link_to t("helpers.submit.create", model: @resource_class.model_name.human), [:new, *@resource_parents, @resource_class.model_name.singular_route_key.to_sym], class: "btn btn-default" %>
3
3
  <% end %>
@@ -27,14 +27,14 @@
27
27
  </div>
28
28
  <div class="pagination-entries pull-right hidden-xs">
29
29
  <% if @resources.length == 0 %>
30
- <%= translate_scoped("pagination.entries.zero", {
30
+ <%= translate_scoped("pagination.entries.zero",
31
31
  resource: @resource_class.model_name.human(count: @resources.length).downcase
32
- }) %>
32
+ ) %>
33
33
  <% else %>
34
- <%= translate_scoped("pagination.entries.other", {
34
+ <%= translate_scoped("pagination.entries.other",
35
35
  resource: @resource_class.model_name.human(count: @resources.length).downcase,
36
36
  count: @resources.length,
37
37
  total: @resource_service.paginator.total_resources
38
- }) %>
38
+ ) %>
39
39
  <% end %>
40
40
  </div>
@@ -3,6 +3,6 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "admin", path: "../test/dummy/admin", group: [:test, :development]
6
- gem "rails", "~> 5.0"
6
+ gem "rails", "~> 5.2"
7
7
 
8
8
  gemspec path: "../"
@@ -3,6 +3,6 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "admin", path: "../test/dummy/admin", group: [:test, :development]
6
- gem "rails", "~> 6.0"
6
+ gem "rails", "~> 6.1"
7
7
 
8
8
  gemspec path: "../"
data/godmin.gemspec CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |gem|
25
25
  gem.add_dependency "csv_builder", "~> 2.1"
26
26
  gem.add_dependency "jquery-rails", [">= 4.0", "< 5.0"]
27
27
  gem.add_dependency "momentjs-rails", "~> 2.8"
28
- gem.add_dependency "pundit", [">= 1.1", "< 2.0"]
28
+ gem.add_dependency "pundit", [">= 2.0.0", "< 3.0"]
29
29
  gem.add_dependency "rails", [">= 5.0", "< 7.0"]
30
30
  gem.add_dependency "sass-rails", [">= 5.0", "< 7.0"]
31
31
  gem.add_dependency "selectize-rails", "~> 0.12"
@@ -13,8 +13,42 @@ module Godmin
13
13
  end
14
14
  end
15
15
 
16
+ def policy(record)
17
+ policies[record] ||= Pundit.policy!(pundit_user, namespaced_record(record))
18
+ end
19
+
16
20
  def pundit_user
17
21
  admin_user
18
22
  end
23
+
24
+ def namespaced_record(record)
25
+ return record unless engine_wrapper.namespaced?
26
+
27
+ class_name = find_class_name(record)
28
+ if already_namespaced?(class_name)
29
+ record
30
+ else
31
+ engine_wrapper.namespaced_path.map(&:to_sym) << record
32
+ end
33
+ end
34
+
35
+ # Borrowed from Pundit::PolicyFinder
36
+ def find_class_name(subject)
37
+ if subject.respond_to?(:model_name)
38
+ subject.model_name
39
+ elsif subject.class.respond_to?(:model_name)
40
+ subject.class.model_name
41
+ elsif subject.is_a?(Class)
42
+ subject
43
+ elsif subject.is_a?(Symbol)
44
+ subject.to_s.camelize
45
+ else
46
+ subject.class
47
+ end
48
+ end
49
+
50
+ def already_namespaced?(subject)
51
+ subject.to_s.start_with?("#{engine_wrapper.namespace.name}::")
52
+ end
19
53
  end
20
54
  end
@@ -33,7 +33,7 @@ module Godmin
33
33
  column_value = t(column_value.to_s)
34
34
  end
35
35
 
36
- column_value
36
+ return column_value
37
37
  end
38
38
  end
39
39
  end
@@ -1,3 +1,3 @@
1
1
  module Godmin
2
- VERSION = "2.0.0"
2
+ VERSION = "2.2.2"
3
3
  end
data/template.rb CHANGED
@@ -21,6 +21,7 @@ def install_standalone
21
21
  modify_author_service
22
22
  modify_article_controller
23
23
  modify_article_service
24
+ modify_readme
24
25
 
25
26
  migrate_and_seed
26
27
  end
@@ -64,6 +65,7 @@ def install_engine
64
65
  modify_author_service("admin")
65
66
  modify_article_controller("admin")
66
67
  modify_article_service("admin")
68
+ modify_readme
67
69
 
68
70
  migrate_and_seed
69
71
  end
@@ -308,6 +310,18 @@ def modify_author_service(namespace = nil)
308
310
  end
309
311
  end
310
312
 
313
+ def modify_readme
314
+ readme_file = "README.md"
315
+ run "rm #{readme_file}"
316
+ readme_text = <<~README
317
+ # README
318
+
319
+ This is the source code for a demo application of the [Godmin](https://github.com/varvet/godmin) admin framework for Rails.
320
+ It is generated by running `rake sandbox:deploy` inside the Godmin repo.
321
+ README
322
+ File.open(readme_file, 'w') { |file| file.write(readme_text) }
323
+ end
324
+
311
325
  def migrate_and_seed
312
326
  rake("db:migrate")
313
327
  rake("db:seed")
@@ -8,6 +8,20 @@ module Admin
8
8
  "admin"
9
9
  end
10
10
 
11
+ def new
12
+ # The following calls to #policy are to check that the Authorization
13
+ # module can handle various different scenarios:
14
+ policy(Magazine).index?
15
+ policy(::Magazine).index?
16
+ policy(Magazine.new).index?
17
+ policy(Magazine.all).index?
18
+ policy(Admin::Magazine).index?
19
+ policy(Admin::Magazine.new).index?
20
+ policy(Admin::Magazine.where(name: "name")).index?
21
+
22
+ super
23
+ end
24
+
11
25
  def resource_service_class
12
26
  Admin::ArticleService
13
27
  end
@@ -0,0 +1,4 @@
1
+ module Admin
2
+ class Magazine < ::Magazine
3
+ end
4
+ end
@@ -3,5 +3,9 @@ module Admin
3
3
  def index?
4
4
  false
5
5
  end
6
+
7
+ def new?
8
+ true
9
+ end
6
10
  end
7
11
  end
@@ -0,0 +1,4 @@
1
+ module Admin
2
+ class MagazinePolicy < Godmin::Authorization::Policy
3
+ end
4
+ end
@@ -1 +1,6 @@
1
1
  <%= navbar_item Article %>
2
+ <% if policy(Article).index? %>
3
+ Can index
4
+ <% else %>
5
+ Can't index
6
+ <% end %>
@@ -0,0 +1,2 @@
1
+ class Magazine < ActiveRecord::Base
2
+ end
@@ -0,0 +1,9 @@
1
+ class CreateMagazines < ActiveRecord::Migration[6.1]
2
+ def change
3
+ create_table :magazines do |t|
4
+ t.string :name
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -2,15 +2,15 @@
2
2
  # of editing this file, please use the migrations feature of Active Record to
3
3
  # incrementally modify your database, and then regenerate this schema definition.
4
4
  #
5
- # Note that this schema.rb definition is the authoritative source for your
6
- # database schema. If you need to create the application database on another
7
- # system, you should be using db:schema:load, not running all the migrations
8
- # from scratch. The latter is a flawed and unsustainable approach (the more migrations
9
- # you'll amass, the slower it'll run and the greater likelihood for issues).
5
+ # This file is the source Rails uses to define your schema when running `bin/rails
6
+ # db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
7
+ # be faster and is potentially less error prone than running all of your
8
+ # migrations from scratch. Old migrations may fail to apply correctly if those
9
+ # migrations use external dependencies or application code.
10
10
  #
11
11
  # It's strongly recommended that you check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(version: 20170207081043) do
13
+ ActiveRecord::Schema.define(version: 2021_05_19_215502) do
14
14
 
15
15
  create_table "admin_users", force: :cascade do |t|
16
16
  t.string "email"
@@ -43,4 +43,11 @@ ActiveRecord::Schema.define(version: 20170207081043) do
43
43
  t.index ["article_id"], name: "index_comments_on_article_id"
44
44
  end
45
45
 
46
+ create_table "magazines", force: :cascade do |t|
47
+ t.string "name"
48
+ t.datetime "created_at", precision: 6, null: false
49
+ t.datetime "updated_at", precision: 6, null: false
50
+ end
51
+
52
+ add_foreign_key "comments", "articles"
46
53
  end
@@ -6,6 +6,7 @@ module Godmin
6
6
  tests ResourceGenerator
7
7
  destination File.expand_path("../../tmp", __FILE__)
8
8
  setup :prepare_destination
9
+ teardown :prepare_destination
9
10
 
10
11
  def test_resource_generator_in_standalone_install
11
12
  system "cd #{destination_root} && rails new . --skip-test --skip-spring --skip-bundle --skip-git --quiet"
@@ -34,4 +34,12 @@ class AuthorizationTest < ActionDispatch::IntegrationTest
34
34
  visit admin.authorized_articles_path
35
35
  assert_equal 403, page.status_code
36
36
  end
37
+
38
+ def test_uses_engine_policy_in_engine?
39
+ visit admin.new_authorized_article_path
40
+
41
+ assert_equal 200, page.status_code
42
+
43
+ assert page.has_content?("Can't index"), "when used in an engine, the `policy` method is using the policy from the main app, not the engine"
44
+ end
37
45
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: godmin
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Ljungblad
8
8
  - Linus Pettersson
9
9
  - Varvet
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-12-06 00:00:00.000000000 Z
13
+ date: 2021-11-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bcrypt
@@ -114,20 +114,20 @@ dependencies:
114
114
  requirements:
115
115
  - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: '1.1'
117
+ version: 2.0.0
118
118
  - - "<"
119
119
  - !ruby/object:Gem::Version
120
- version: '2.0'
120
+ version: '3.0'
121
121
  type: :runtime
122
122
  prerelease: false
123
123
  version_requirements: !ruby/object:Gem::Requirement
124
124
  requirements:
125
125
  - - ">="
126
126
  - !ruby/object:Gem::Version
127
- version: '1.1'
127
+ version: 2.0.0
128
128
  - - "<"
129
129
  - !ruby/object:Gem::Version
130
- version: '2.0'
130
+ version: '3.0'
131
131
  - !ruby/object:Gem::Dependency
132
132
  name: rails
133
133
  requirement: !ruby/object:Gem::Requirement
@@ -432,7 +432,9 @@ files:
432
432
  - test/dummy/admin/app/controllers/admin/articles_controller.rb
433
433
  - test/dummy/admin/app/controllers/admin/authorized_articles_controller.rb
434
434
  - test/dummy/admin/app/models/admin/article.rb
435
+ - test/dummy/admin/app/models/admin/magazine.rb
435
436
  - test/dummy/admin/app/policies/admin/article_policy.rb
437
+ - test/dummy/admin/app/policies/admin/magazine_policy.rb
436
438
  - test/dummy/admin/app/services/admin/article_service.rb
437
439
  - test/dummy/admin/app/views/admin/articles/.keep
438
440
  - test/dummy/admin/app/views/admin/articles/columns/.keep
@@ -461,6 +463,7 @@ files:
461
463
  - test/dummy/app/models/another_admin_user.rb
462
464
  - test/dummy/app/models/article.rb
463
465
  - test/dummy/app/models/comment.rb
466
+ - test/dummy/app/models/magazine.rb
464
467
  - test/dummy/app/policies/article_policy.rb
465
468
  - test/dummy/app/services/article_service.rb
466
469
  - test/dummy/app/services/comment_service.rb
@@ -494,6 +497,7 @@ files:
494
497
  - test/dummy/db/migrate/20150907133753_create_admin_users.rb
495
498
  - test/dummy/db/migrate/20160713134238_create_comment.rb
496
499
  - test/dummy/db/migrate/20170207081043_create_another_admin_user.rb
500
+ - test/dummy/db/migrate/20210519215502_create_magazines.rb
497
501
  - test/dummy/db/schema.rb
498
502
  - test/dummy/lib/assets/.keep
499
503
  - test/dummy/log/.keep
@@ -534,7 +538,7 @@ homepage: https://github.com/varvet/godmin
534
538
  licenses:
535
539
  - MIT
536
540
  metadata: {}
537
- post_install_message:
541
+ post_install_message:
538
542
  rdoc_options: []
539
543
  require_paths:
540
544
  - lib
@@ -549,8 +553,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
549
553
  - !ruby/object:Gem::Version
550
554
  version: '0'
551
555
  requirements: []
552
- rubygems_version: 3.0.3
553
- signing_key:
556
+ rubygems_version: 3.1.6
557
+ signing_key:
554
558
  specification_version: 4
555
559
  summary: Godmin is an admin framework for Rails 5+
556
560
  test_files:
@@ -562,7 +566,9 @@ test_files:
562
566
  - test/dummy/admin/app/controllers/admin/articles_controller.rb
563
567
  - test/dummy/admin/app/controllers/admin/authorized_articles_controller.rb
564
568
  - test/dummy/admin/app/models/admin/article.rb
569
+ - test/dummy/admin/app/models/admin/magazine.rb
565
570
  - test/dummy/admin/app/policies/admin/article_policy.rb
571
+ - test/dummy/admin/app/policies/admin/magazine_policy.rb
566
572
  - test/dummy/admin/app/services/admin/article_service.rb
567
573
  - test/dummy/admin/app/views/admin/articles/.keep
568
574
  - test/dummy/admin/app/views/admin/articles/columns/.keep
@@ -591,6 +597,7 @@ test_files:
591
597
  - test/dummy/app/models/another_admin_user.rb
592
598
  - test/dummy/app/models/article.rb
593
599
  - test/dummy/app/models/comment.rb
600
+ - test/dummy/app/models/magazine.rb
594
601
  - test/dummy/app/policies/article_policy.rb
595
602
  - test/dummy/app/services/article_service.rb
596
603
  - test/dummy/app/services/comment_service.rb
@@ -624,6 +631,7 @@ test_files:
624
631
  - test/dummy/db/migrate/20150907133753_create_admin_users.rb
625
632
  - test/dummy/db/migrate/20160713134238_create_comment.rb
626
633
  - test/dummy/db/migrate/20170207081043_create_another_admin_user.rb
634
+ - test/dummy/db/migrate/20210519215502_create_magazines.rb
627
635
  - test/dummy/db/schema.rb
628
636
  - test/dummy/lib/assets/.keep
629
637
  - test/dummy/log/.keep