From 2d6737ce5ce134fbb7f3cbbeaa43a5b093c35f75 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 3 Oct 2017 15:35:27 +0800 Subject: [PATCH] REFACTOR: Remove hardcoded base `KEY_PREFIX`. --- app/models/channel.rb | 6 ++++-- app/models/plugin_model.rb | 16 +++++++++------- app/models/rule.rb | 6 ++++-- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/app/models/channel.rb b/app/models/channel.rb index 575071f..d2f545b 100644 --- a/app/models/channel.rb +++ b/app/models/channel.rb @@ -1,6 +1,4 @@ class DiscourseChat::Channel < DiscourseChat::PluginModel - KEY_PREFIX = 'channel:' - # Setup ActiveRecord::Store to use the JSON field to read/write these values store :value, accessors: [ :provider, :error_key, :data ], coder: JSON @@ -12,6 +10,10 @@ class DiscourseChat::Channel < DiscourseChat::PluginModel validate :provider_valid?, :data_valid? + def self.key_prefix + 'channel:'.freeze + end + def rules DiscourseChat::Rule.with_channel_id(id).order_by_precedence end diff --git a/app/models/plugin_model.rb b/app/models/plugin_model.rb index d92080e..b275579 100644 --- a/app/models/plugin_model.rb +++ b/app/models/plugin_model.rb @@ -1,6 +1,5 @@ class DiscourseChat::PluginModel < PluginStoreRow PLUGIN_NAME = 'discourse-chat-integration' - KEY_PREFIX = 'unimplemented' default_scope { self.default_scope } @@ -10,7 +9,11 @@ class DiscourseChat::PluginModel < PluginStoreRow def self.default_scope where(type_name: 'JSON') .where(plugin_name: self::PLUGIN_NAME) - .where("key LIKE ?", "#{self::KEY_PREFIX}%") + .where("key LIKE ?", "#{self.key_prefix}%") + end + + def self.key_prefix + raise 'Not implemented' end private @@ -25,12 +28,11 @@ class DiscourseChat::PluginModel < PluginStoreRow end def self.alloc_key - raise "KEY_PREFIX must be defined" if self::KEY_PREFIX == 'unimplemented' - DistributedMutex.synchronize("#{self::PLUGIN_NAME}_#{self::KEY_PREFIX}_id") do - max_id = PluginStore.get(self::PLUGIN_NAME, "#{self::KEY_PREFIX}_id") + DistributedMutex.synchronize("#{self::PLUGIN_NAME}_#{self.key_prefix}_id") do + max_id = PluginStore.get(self::PLUGIN_NAME, "#{self.key_prefix}_id") max_id = 1 unless max_id - PluginStore.set(self::PLUGIN_NAME, "#{self::KEY_PREFIX}_id", max_id + 1) - "#{self::KEY_PREFIX}#{max_id}" + PluginStore.set(self::PLUGIN_NAME, "#{self.key_prefix}_id", max_id + 1) + "#{self.key_prefix}#{max_id}" end end diff --git a/app/models/rule.rb b/app/models/rule.rb index 33d2af9..3e50a9b 100644 --- a/app/models/rule.rb +++ b/app/models/rule.rb @@ -1,6 +1,4 @@ class DiscourseChat::Rule < DiscourseChat::PluginModel - KEY_PREFIX = 'rule:' - # Setup ActiveRecord::Store to use the JSON field to read/write these values store :value, accessors: [ :channel_id, :type, :group_id, :category_id, :tags, :filter ], coder: JSON @@ -47,6 +45,10 @@ class DiscourseChat::Rule < DiscourseChat::PluginModel validate :channel_valid?, :category_valid?, :group_valid?, :tags_valid? + def self.key_prefix + 'rule:'.freeze + end + # We never want an empty array, set it to nil instead def tags=(array) if array.nil? || array.empty?