about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Yip <yipdw@member.fsf.org>2017-10-09 17:28:28 -0500
committerDavid Yip <yipdw@member.fsf.org>2017-10-21 14:53:41 -0500
commit9093e2de7a133470eec1049a13465f81928d0119 (patch)
treefd8264bbc6312cd599031cfdd944564b33008e4e
parentd589dd7cd0512b558412a38a935b1a9cdcbf0ce7 (diff)
Add KeywordMute model.
Gist of the proposed keyword mute implementation:

Keyword mutes are represented server-side as one keyword per record.
For each account, there exists a keyword regex that is generated as one
big alternation of all keywords.  This regex is cached (in Redis, I
guess) so we can quickly get it when filtering in FeedManager.
-rw-r--r--app/models/keyword_mute.rb13
-rw-r--r--db/migrate/20171009222537_create_keyword_mutes.rb11
-rw-r--r--db/schema.rb9
-rw-r--r--spec/fabricators/keyword_mute_fabricator.rb2
-rw-r--r--spec/models/keyword_mute_spec.rb5
5 files changed, 40 insertions, 0 deletions
diff --git a/app/models/keyword_mute.rb b/app/models/keyword_mute.rb
new file mode 100644
index 000000000..91816eed9
--- /dev/null
+++ b/app/models/keyword_mute.rb
@@ -0,0 +1,13 @@
+# == Schema Information
+#
+# Table name: keyword_mutes
+#
+#  id         :integer          not null, primary key
+#  account_id :integer          not null
+#  keyword    :string           not null
+#  created_at :datetime         not null
+#  updated_at :datetime         not null
+#
+
+class KeywordMute < ApplicationRecord
+end
diff --git a/db/migrate/20171009222537_create_keyword_mutes.rb b/db/migrate/20171009222537_create_keyword_mutes.rb
new file mode 100644
index 000000000..ee690e799
--- /dev/null
+++ b/db/migrate/20171009222537_create_keyword_mutes.rb
@@ -0,0 +1,11 @@
+class CreateKeywordMutes < ActiveRecord::Migration[5.1]
+  def change
+    create_table :keyword_mutes do |t|
+      t.references :account, null: false
+      t.string :keyword, null: false
+      t.timestamps
+    end
+
+    add_foreign_key :keyword_mutes, :accounts, on_delete: :cascade
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 128f51ee7..420bb0d2e 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -167,6 +167,14 @@ ActiveRecord::Schema.define(version: 20171010025614) do
     t.bigint "account_id", null: false
   end
 
+  create_table "keyword_mutes", force: :cascade do |t|
+    t.bigint "account_id", null: false
+    t.string "keyword", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["account_id"], name: "index_keyword_mutes_on_account_id"
+  end
+
   create_table "media_attachments", force: :cascade do |t|
     t.bigint "status_id"
     t.string "file_file_name"
@@ -473,6 +481,7 @@ ActiveRecord::Schema.define(version: 20171010025614) do
   add_foreign_key "follows", "accounts", column: "target_account_id", name: "fk_745ca29eac", on_delete: :cascade
   add_foreign_key "follows", "accounts", name: "fk_32ed1b5560", on_delete: :cascade
   add_foreign_key "imports", "accounts", name: "fk_6db1b6e408", on_delete: :cascade
+  add_foreign_key "keyword_mutes", "accounts", on_delete: :cascade
   add_foreign_key "media_attachments", "accounts", name: "fk_96dd81e81b", on_delete: :nullify
   add_foreign_key "media_attachments", "statuses", on_delete: :nullify
   add_foreign_key "mentions", "accounts", name: "fk_970d43f9d1", on_delete: :cascade
diff --git a/spec/fabricators/keyword_mute_fabricator.rb b/spec/fabricators/keyword_mute_fabricator.rb
new file mode 100644
index 000000000..82cf845c8
--- /dev/null
+++ b/spec/fabricators/keyword_mute_fabricator.rb
@@ -0,0 +1,2 @@
+Fabricator(:keyword_mute) do
+end
diff --git a/spec/models/keyword_mute_spec.rb b/spec/models/keyword_mute_spec.rb
new file mode 100644
index 000000000..cd0881565
--- /dev/null
+++ b/spec/models/keyword_mute_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe KeywordMute, type: :model do
+  pending "add some examples to (or delete) #{__FILE__}"
+end