cas-cms 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +43 -0
- data/Rakefile +37 -0
- data/app/assets/config/cas_manifest.js +2 -0
- data/app/assets/images/cas/black-star.svg +4 -0
- data/app/assets/images/cas/check.svg +4 -0
- data/app/assets/images/cas/dropzone-in.svg +4 -0
- data/app/assets/images/cas/loading.gif +0 -0
- data/app/assets/images/cas/white-star.svg +4 -0
- data/app/assets/javascripts/cas/application.js +51 -0
- data/app/assets/javascripts/cas/fileupload_manifest.js +269 -0
- data/app/assets/javascripts/cas/plugins/cas_image_gallery.js +353 -0
- data/app/assets/javascripts/cas/vendor/file_upload/canvas-to-blob.min.js +2 -0
- data/app/assets/javascripts/cas/vendor/file_upload/jquery.fileupload-image.js +326 -0
- data/app/assets/javascripts/cas/vendor/file_upload/jquery.fileupload-process.js +178 -0
- data/app/assets/javascripts/cas/vendor/file_upload/jquery.fileupload.js +1482 -0
- data/app/assets/javascripts/cas/vendor/file_upload/jquery.iframe-transport.js +224 -0
- data/app/assets/javascripts/cas/vendor/file_upload/jquery.ui.widget.js +572 -0
- data/app/assets/javascripts/cas/vendor/file_upload/load-image.all.min.js +2 -0
- data/app/assets/javascripts/cas/vendor/jquery.ui.touch-punch.min.js +11 -0
- data/app/assets/javascripts/cas/vendor/selectize.min.js +3 -0
- data/app/assets/stylesheets/cas/application.sass +17 -0
- data/app/assets/stylesheets/cas/colors.sass +6 -0
- data/app/assets/stylesheets/cas/form.sass +99 -0
- data/app/assets/stylesheets/cas/layout.sass +68 -0
- data/app/assets/stylesheets/cas/mixins.sass +34 -0
- data/app/assets/stylesheets/cas/plugins/attachments_form.sass +16 -0
- data/app/assets/stylesheets/cas/plugins/image_gallery.sass +128 -0
- data/app/assets/stylesheets/cas/tables.sass +13 -0
- data/app/assets/stylesheets/cas/typography.sass +27 -0
- data/app/assets/stylesheets/cas/vendors/selectize.default.css +394 -0
- data/app/assets/stylesheets/cas/vendors/simplegrid.css +298 -0
- data/app/controllers/cas/api/files_controller.rb +88 -0
- data/app/controllers/cas/application_controller.rb +17 -0
- data/app/controllers/cas/devise/sessions_controller.rb +9 -0
- data/app/controllers/cas/file_uploads_controller.rb +14 -0
- data/app/controllers/cas/sections/application_controller.rb +23 -0
- data/app/controllers/cas/sections/categories_controller.rb +47 -0
- data/app/controllers/cas/sections/contents_controller.rb +144 -0
- data/app/controllers/cas/sections_controller.rb +7 -0
- data/app/controllers/cas/users_controller.rb +61 -0
- data/app/helpers/cas/application_helper.rb +4 -0
- data/app/helpers/cas/form_helper.rb +11 -0
- data/app/jobs/cas/application_job.rb +4 -0
- data/app/jobs/cas/images/delete_job.rb +11 -0
- data/app/jobs/cas/images/promote_job.rb +11 -0
- data/app/jobs/cas/increment_pageviews_job.rb +11 -0
- data/app/models/cas/application_record.rb +5 -0
- data/app/models/cas/category.rb +6 -0
- data/app/models/cas/content.rb +59 -0
- data/app/models/cas/media_file.rb +77 -0
- data/app/models/cas/section.rb +10 -0
- data/app/models/cas/site.rb +5 -0
- data/app/models/cas/user.rb +39 -0
- data/app/uploaders/file_uploader.rb +26 -0
- data/app/views/cas/devise/sessions/new.html.erb +24 -0
- data/app/views/cas/sections/categories/_form.html.erb +19 -0
- data/app/views/cas/sections/categories/edit.html.erb +5 -0
- data/app/views/cas/sections/categories/index.html.erb +28 -0
- data/app/views/cas/sections/categories/new.html.erb +5 -0
- data/app/views/cas/sections/contents/_form_attachments.html.erb +42 -0
- data/app/views/cas/sections/contents/_form_attachments_template.html.erb +11 -0
- data/app/views/cas/sections/contents/_form_for_content.html.erb +85 -0
- data/app/views/cas/sections/contents/_form_for_survey.html.erb +36 -0
- data/app/views/cas/sections/contents/_form_images.html.erb +86 -0
- data/app/views/cas/sections/contents/edit.html.erb +6 -0
- data/app/views/cas/sections/contents/index.html.erb +71 -0
- data/app/views/cas/sections/contents/new.html.erb +5 -0
- data/app/views/cas/sections/index.html.erb +21 -0
- data/app/views/cas/shared/_error_messages.html.erb +12 -0
- data/app/views/cas/users/_form.html.erb +11 -0
- data/app/views/cas/users/edit.html.erb +2 -0
- data/app/views/cas/users/index.html.erb +34 -0
- data/app/views/cas/users/new.html.erb +2 -0
- data/app/views/layouts/cas/application.html.erb +71 -0
- data/config/initializers/acts_as_taggable.rb +1 -0
- data/config/initializers/devise.rb +277 -0
- data/config/initializers/shrine.rb +50 -0
- data/config/initializers/simple_form.rb +169 -0
- data/config/locales/devise.en.yml +64 -0
- data/config/locales/pt-BR.yml +242 -0
- data/config/locales/simple_form.en.yml +31 -0
- data/config/routes.rb +31 -0
- data/db/migrate/20170129212144_create_cas_sites.rb +15 -0
- data/db/migrate/20170219172958_create_cas_sections.rb +12 -0
- data/db/migrate/20170219175007_create_cas_contents.rb +17 -0
- data/db/migrate/20170612204500_create_cas_users.rb +14 -0
- data/db/migrate/20170613174724_create_cas_media_files.rb +20 -0
- data/db/migrate/20170613175912_create_cas_categories.rb +14 -0
- data/db/migrate/20170614171928_add_columns_to_cas_contents.rb +12 -0
- data/db/migrate/20170614172904_add_column_to_cas_sections.rb +6 -0
- data/db/migrate/20170615235532_add_devise_to_cas_users.rb +49 -0
- data/db/migrate/20170616011202_remove_password_from_cas_users.rb +5 -0
- data/db/migrate/20170618014204_v3_migration_fields.rb +30 -0
- data/db/migrate/20170623182702_add_column_category_id_to_cas_content.rb +6 -0
- data/db/migrate/20170624024648_rename_url_to_path_in_files.rb +7 -0
- data/db/migrate/20170625192119_acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb +36 -0
- data/db/migrate/20170625192120_add_missing_unique_indices.acts_as_taggable_on_engine.rb +26 -0
- data/db/migrate/20170625192121_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb +20 -0
- data/db/migrate/20170625192122_add_missing_taggable_index.acts_as_taggable_on_engine.rb +15 -0
- data/db/migrate/20170625192123_change_collation_for_tag_names.acts_as_taggable_on_engine.rb +15 -0
- data/db/migrate/20170625192124_add_missing_indexes_on_taggings.acts_as_taggable_on_engine.rb +23 -0
- data/db/migrate/20170713210101_add_location_to_cas_content.rb +5 -0
- data/db/migrate/20170714043036_add_url_to_content.rb +5 -0
- data/db/migrate/20170718201535_add_embedded_to_content.rb +5 -0
- data/db/migrate/20170801171952_categories_with_jsonb_metadata.rb +6 -0
- data/db/migrate/20170801173256_add_published_at_to_cas_contents.rb +6 -0
- data/db/migrate/20170801175407_add_description_to_cas_categories.rb +5 -0
- data/db/migrate/20170830000000_add_data_search_extensions.rb +17 -0
- data/db/migrate/20170830000001_add_search_index_to_cas_contents.rb +20 -0
- data/db/migrate/20170830000002_use_uuid_with_acts_as_taggable_references.rb +17 -0
- data/db/migrate/20170919181809_pageviews_default_to_zero.rb +9 -0
- data/db/migrate/20171201191059_add_domains_to_cas_site.rb +6 -0
- data/lib/cas.rb +22 -0
- data/lib/cas/config.rb +42 -0
- data/lib/cas/engine.rb +33 -0
- data/lib/cas/form_field.rb +54 -0
- data/lib/cas/remote_callbacks.rb +36 -0
- data/lib/cas/section_config.rb +84 -0
- data/lib/cas/setup.rb +43 -0
- data/lib/cas/version.rb +3 -0
- data/lib/devise/custom_failure.rb +16 -0
- data/lib/tasks/cas_tasks.rake +4 -0
- data/lib/templates/erb/scaffold/_form.html.erb +13 -0
- metadata +560 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
en:
|
2
|
+
simple_form:
|
3
|
+
"yes": 'Yes'
|
4
|
+
"no": 'No'
|
5
|
+
required:
|
6
|
+
text: 'required'
|
7
|
+
mark: '*'
|
8
|
+
# You can uncomment the line below if you need to overwrite the whole required html.
|
9
|
+
# When using html, text and mark won't be used.
|
10
|
+
# html: '<abbr title="required">*</abbr>'
|
11
|
+
error_notification:
|
12
|
+
default_message: "Please review the problems below:"
|
13
|
+
# Examples
|
14
|
+
# labels:
|
15
|
+
# defaults:
|
16
|
+
# password: 'Password'
|
17
|
+
# user:
|
18
|
+
# new:
|
19
|
+
# email: 'E-mail to sign in.'
|
20
|
+
# edit:
|
21
|
+
# email: 'E-mail.'
|
22
|
+
# hints:
|
23
|
+
# defaults:
|
24
|
+
# username: 'User name to sign in.'
|
25
|
+
# password: 'No special characters, please.'
|
26
|
+
# include_blanks:
|
27
|
+
# defaults:
|
28
|
+
# age: 'Rather not say'
|
29
|
+
# prompts:
|
30
|
+
# defaults:
|
31
|
+
# age: 'Select your age'
|
data/config/routes.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'sidekiq/web'
|
2
|
+
Sidekiq::Web.set :session_secret, Rails.application.secrets[:secret_key_base]
|
3
|
+
|
4
|
+
Cas::Engine.routes.draw do
|
5
|
+
mount Shrine.presign_endpoint(:cache) => "/files/cache/presign"
|
6
|
+
|
7
|
+
authenticate :user, ->(u){ u.roles.include?('admin') } do
|
8
|
+
mount Sidekiq::Web => '/sidekiq'
|
9
|
+
end
|
10
|
+
|
11
|
+
devise_for :users,
|
12
|
+
class_name: "Cas::User",
|
13
|
+
module: :devise,
|
14
|
+
controllers: { sessions: "cas/devise/sessions" },
|
15
|
+
skip: :registrations
|
16
|
+
|
17
|
+
resources :users, controller: 'users'
|
18
|
+
|
19
|
+
resources :sections, only: [:index] do
|
20
|
+
resources :contents, controller: 'sections/contents'
|
21
|
+
resources :categories, controller: 'sections/categories'
|
22
|
+
end
|
23
|
+
|
24
|
+
# used by tinymce editor
|
25
|
+
resources :file_uploads, only: :create
|
26
|
+
namespace :api, module: "api" do
|
27
|
+
resources :files, only: [:create, :destroy]
|
28
|
+
end
|
29
|
+
|
30
|
+
root 'sections#index'
|
31
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateCasSites < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
reversible do |dir|
|
4
|
+
dir.up do
|
5
|
+
enable_extension "uuid-ossp"
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
create_table :cas_sites, id: :uuid do |t|
|
10
|
+
t.string :name
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
add_index :cas_sites, :name
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateCasSections < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
create_table :cas_sections, id: :uuid do |t|
|
4
|
+
t.string :name, null: false
|
5
|
+
t.string :section_type, null: false
|
6
|
+
t.column :site_id, :uuid
|
7
|
+
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
add_index :cas_sections, :site_id
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CreateCasContents < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
create_table :cas_contents, id: :uuid do |t|
|
4
|
+
t.column :section_id, :uuid
|
5
|
+
t.string :title
|
6
|
+
t.text :text
|
7
|
+
t.column :author_id, :uuid
|
8
|
+
t.datetime :date
|
9
|
+
t.boolean :published
|
10
|
+
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
add_index :cas_contents, :section_id
|
14
|
+
add_index :cas_contents, :author_id
|
15
|
+
add_index :cas_contents, :published
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateCasUsers < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
create_table :cas_users, id: :uuid do |t|
|
4
|
+
t.string :name, null: false
|
5
|
+
t.string :login
|
6
|
+
t.string :password, null: false
|
7
|
+
t.uuid :author_id
|
8
|
+
t.string :roles, array: true, default: []
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
add_index :cas_users, :author_id
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class CreateCasMediaFiles < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
create_table :cas_media_files, id: :uuid do |t|
|
4
|
+
t.uuid :attachable_id, polymorphic: true
|
5
|
+
t.string :attachable_type, polymorphic: true
|
6
|
+
t.uuid :author_id, null: false
|
7
|
+
t.string :service, null: false
|
8
|
+
t.text :title
|
9
|
+
t.string :url
|
10
|
+
t.string :mime_type
|
11
|
+
t.string :original_name
|
12
|
+
t.integer :size
|
13
|
+
t.text :file_data
|
14
|
+
|
15
|
+
t.timestamps
|
16
|
+
end
|
17
|
+
add_index :cas_media_files, :author_id
|
18
|
+
add_index :cas_media_files, [:attachable_id, :attachable_type]
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateCasCategories < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
create_table :cas_categories, id: :uuid do |t|
|
4
|
+
t.uuid :section_id, null: false
|
5
|
+
t.string :name, null: false
|
6
|
+
t.string :slug
|
7
|
+
t.jsonb :metadata, default: '{}'
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
add_index :cas_categories, :section_id
|
12
|
+
add_index :cas_categories, :slug
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class AddColumnsToCasContents < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
add_column :cas_contents, :pageviews, :integer
|
4
|
+
add_column :cas_contents, :metadata, :jsonb, default: '{}'
|
5
|
+
add_column :cas_contents, :summary, :text
|
6
|
+
add_column :cas_contents, :details, :jsonb, default: '{}'
|
7
|
+
add_column :cas_contents, :slug, :string
|
8
|
+
change_column :cas_contents, :section_id, :uuid, null: false
|
9
|
+
change_column :cas_contents, :author_id, :uuid, null: false
|
10
|
+
add_index :cas_contents, :slug
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
class AddDeviseToCasUsers < ActiveRecord::Migration[5.0]
|
2
|
+
def self.up
|
3
|
+
change_table :cas_users do |t|
|
4
|
+
## Database authenticatable
|
5
|
+
t.string :email, null: false, default: ""
|
6
|
+
t.string :encrypted_password, null: false, default: ""
|
7
|
+
|
8
|
+
## Recoverable
|
9
|
+
t.string :reset_password_token
|
10
|
+
t.datetime :reset_password_sent_at
|
11
|
+
|
12
|
+
## Rememberable
|
13
|
+
t.datetime :remember_created_at
|
14
|
+
|
15
|
+
## Trackable
|
16
|
+
t.integer :sign_in_count, default: 0, null: false
|
17
|
+
t.datetime :current_sign_in_at
|
18
|
+
t.datetime :last_sign_in_at
|
19
|
+
t.string :current_sign_in_ip
|
20
|
+
t.string :last_sign_in_ip
|
21
|
+
|
22
|
+
## Confirmable
|
23
|
+
# t.string :confirmation_token
|
24
|
+
# t.datetime :confirmed_at
|
25
|
+
# t.datetime :confirmation_sent_at
|
26
|
+
# t.string :unconfirmed_email # Only if using reconfirmable
|
27
|
+
|
28
|
+
## Lockable
|
29
|
+
# t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
|
30
|
+
# t.string :unlock_token # Only if unlock strategy is :email or :both
|
31
|
+
# t.datetime :locked_at
|
32
|
+
|
33
|
+
|
34
|
+
# Uncomment below if timestamps were not included in your original model.
|
35
|
+
# t.timestamps null: false
|
36
|
+
end
|
37
|
+
|
38
|
+
add_index :cas_users, :email, unique: true
|
39
|
+
add_index :cas_users, :reset_password_token, unique: true
|
40
|
+
# add_index :cas_users, :confirmation_token, unique: true
|
41
|
+
# add_index :cas_users, :unlock_token, unique: true
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.down
|
45
|
+
# By default, we don't want to make any assumption about how to roll back a migration when your
|
46
|
+
# model already existed. Please edit below which fields you would like to remove in this migration.
|
47
|
+
raise ActiveRecord::IrreversibleMigration
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class V3MigrationFields < ActiveRecord::Migration[5.0]
|
2
|
+
def change
|
3
|
+
add_column :cas_sites, :slug, :string
|
4
|
+
add_column :cas_users, :metadata, :jsonb, default: {}
|
5
|
+
add_column :cas_media_files, :cover, :boolean, null: false, default: false
|
6
|
+
add_column :cas_media_files, :order, :integer, default: 1
|
7
|
+
add_column :cas_media_files, :text, :text
|
8
|
+
add_column :cas_media_files, :metadata, :jsonb, default: {}
|
9
|
+
|
10
|
+
reversible do |dir|
|
11
|
+
dir.up do
|
12
|
+
change_column :cas_users,
|
13
|
+
:email,
|
14
|
+
:string,
|
15
|
+
null: true,
|
16
|
+
default: nil
|
17
|
+
change_column :cas_media_files,
|
18
|
+
:author_id,
|
19
|
+
:uuid,
|
20
|
+
null: true
|
21
|
+
end
|
22
|
+
dir.down do
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
add_index :cas_sites, :slug
|
27
|
+
add_index :cas_users, :encrypted_password
|
28
|
+
add_index :cas_media_files, :cover
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# This migration comes from acts_as_taggable_on_engine (originally 1)
|
2
|
+
if ActiveRecord.gem_version >= Gem::Version.new('5.0')
|
3
|
+
class ActsAsTaggableOnMigration < ActiveRecord::Migration[4.2]; end
|
4
|
+
else
|
5
|
+
class ActsAsTaggableOnMigration < ActiveRecord::Migration; end
|
6
|
+
end
|
7
|
+
ActsAsTaggableOnMigration.class_eval do
|
8
|
+
def self.up
|
9
|
+
create_table :tags do |t|
|
10
|
+
t.string :name
|
11
|
+
end
|
12
|
+
|
13
|
+
create_table :taggings do |t|
|
14
|
+
t.references :tag
|
15
|
+
|
16
|
+
# You should make sure that the column created is
|
17
|
+
# long enough to store the required class names.
|
18
|
+
t.references :taggable, polymorphic: true
|
19
|
+
t.references :tagger, polymorphic: true
|
20
|
+
|
21
|
+
# Limit is created to prevent MySQL error on index
|
22
|
+
# length for MyISAM table type: http://bit.ly/vgW2Ql
|
23
|
+
t.string :context, limit: 128
|
24
|
+
|
25
|
+
t.datetime :created_at
|
26
|
+
end
|
27
|
+
|
28
|
+
add_index :taggings, :tag_id
|
29
|
+
add_index :taggings, [:taggable_id, :taggable_type, :context]
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.down
|
33
|
+
drop_table :taggings
|
34
|
+
drop_table :tags
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# This migration comes from acts_as_taggable_on_engine (originally 2)
|
2
|
+
if ActiveRecord.gem_version >= Gem::Version.new('5.0')
|
3
|
+
class AddMissingUniqueIndices < ActiveRecord::Migration[4.2]; end
|
4
|
+
else
|
5
|
+
class AddMissingUniqueIndices < ActiveRecord::Migration; end
|
6
|
+
end
|
7
|
+
AddMissingUniqueIndices.class_eval do
|
8
|
+
def self.up
|
9
|
+
add_index :tags, :name, unique: true
|
10
|
+
|
11
|
+
remove_index :taggings, :tag_id if index_exists?(:taggings, :tag_id)
|
12
|
+
remove_index :taggings, [:taggable_id, :taggable_type, :context]
|
13
|
+
add_index :taggings,
|
14
|
+
[:tag_id, :taggable_id, :taggable_type, :context, :tagger_id, :tagger_type],
|
15
|
+
unique: true, name: 'taggings_idx'
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.down
|
19
|
+
remove_index :tags, :name
|
20
|
+
|
21
|
+
remove_index :taggings, name: 'taggings_idx'
|
22
|
+
|
23
|
+
add_index :taggings, :tag_id unless index_exists?(:taggings, :tag_id)
|
24
|
+
add_index :taggings, [:taggable_id, :taggable_type, :context]
|
25
|
+
end
|
26
|
+
end
|
data/db/migrate/20170625192121_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# This migration comes from acts_as_taggable_on_engine (originally 3)
|
2
|
+
if ActiveRecord.gem_version >= Gem::Version.new('5.0')
|
3
|
+
class AddTaggingsCounterCacheToTags < ActiveRecord::Migration[4.2]; end
|
4
|
+
else
|
5
|
+
class AddTaggingsCounterCacheToTags < ActiveRecord::Migration; end
|
6
|
+
end
|
7
|
+
AddTaggingsCounterCacheToTags.class_eval do
|
8
|
+
def self.up
|
9
|
+
add_column :tags, :taggings_count, :integer, default: 0
|
10
|
+
|
11
|
+
ActsAsTaggableOn::Tag.reset_column_information
|
12
|
+
ActsAsTaggableOn::Tag.find_each do |tag|
|
13
|
+
ActsAsTaggableOn::Tag.reset_counters(tag.id, :taggings)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.down
|
18
|
+
remove_column :tags, :taggings_count
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# This migration comes from acts_as_taggable_on_engine (originally 4)
|
2
|
+
if ActiveRecord.gem_version >= Gem::Version.new('5.0')
|
3
|
+
class AddMissingTaggableIndex < ActiveRecord::Migration[4.2]; end
|
4
|
+
else
|
5
|
+
class AddMissingTaggableIndex < ActiveRecord::Migration; end
|
6
|
+
end
|
7
|
+
AddMissingTaggableIndex.class_eval do
|
8
|
+
def self.up
|
9
|
+
add_index :taggings, [:taggable_id, :taggable_type, :context]
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.down
|
13
|
+
remove_index :taggings, [:taggable_id, :taggable_type, :context]
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# This migration comes from acts_as_taggable_on_engine (originally 5)
|
2
|
+
# This migration is added to circumvent issue #623 and have special characters
|
3
|
+
# work properly
|
4
|
+
if ActiveRecord.gem_version >= Gem::Version.new('5.0')
|
5
|
+
class ChangeCollationForTagNames < ActiveRecord::Migration[4.2]; end
|
6
|
+
else
|
7
|
+
class ChangeCollationForTagNames < ActiveRecord::Migration; end
|
8
|
+
end
|
9
|
+
ChangeCollationForTagNames.class_eval do
|
10
|
+
def up
|
11
|
+
if ActsAsTaggableOn::Utils.using_mysql?
|
12
|
+
execute("ALTER TABLE tags MODIFY name varchar(255) CHARACTER SET utf8 COLLATE utf8_bin;")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# This migration comes from acts_as_taggable_on_engine (originally 6)
|
2
|
+
if ActiveRecord.gem_version >= Gem::Version.new('5.0')
|
3
|
+
class AddMissingIndexesOnTaggings < ActiveRecord::Migration[4.2]; end
|
4
|
+
else
|
5
|
+
class AddMissingIndexesOnTaggings < ActiveRecord::Migration; end
|
6
|
+
end
|
7
|
+
AddMissingIndexesOnTaggings.class_eval do
|
8
|
+
def change
|
9
|
+
add_index :taggings, :tag_id unless index_exists? :taggings, :tag_id
|
10
|
+
add_index :taggings, :taggable_id unless index_exists? :taggings, :taggable_id
|
11
|
+
add_index :taggings, :taggable_type unless index_exists? :taggings, :taggable_type
|
12
|
+
add_index :taggings, :tagger_id unless index_exists? :taggings, :tagger_id
|
13
|
+
add_index :taggings, :context unless index_exists? :taggings, :context
|
14
|
+
|
15
|
+
unless index_exists? :taggings, [:tagger_id, :tagger_type]
|
16
|
+
add_index :taggings, [:tagger_id, :tagger_type]
|
17
|
+
end
|
18
|
+
|
19
|
+
unless index_exists? :taggings, [:taggable_id, :taggable_type, :tagger_id, :context], name: 'taggings_idy'
|
20
|
+
add_index :taggings, [:taggable_id, :taggable_type, :tagger_id, :context], name: 'taggings_idy'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|