Skip to content

Commit deff5bb

Browse files
committed
added Subscription#qualified? method & related constants
1 parent 2b9e7fa commit deff5bb

File tree

3 files changed

+23
-7
lines changed

3 files changed

+23
-7
lines changed

app/models/subscription.rb

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
class Subscription < ApplicationRecord
2-
self.inheritance_column = 'sti_type'
3-
42
include CommunityRelated
53
include Timestamped
64

5+
self.inheritance_column = 'sti_type'
6+
7+
BASE_TYPES = ['all', 'tag', 'user', 'interesting', 'category'].freeze
8+
MOD_ONLY_TYPES = ['moderators'].freeze
9+
QUALIFIED_TYPES = ['category', 'tag', 'user'].freeze
10+
711
belongs_to :user
812

9-
validates :type, presence: true, inclusion: ['all', 'tag', 'user', 'interesting', 'category', 'moderators']
13+
validates :type, presence: true, inclusion: BASE_TYPES + MOD_ONLY_TYPES
1014
validates :frequency, numericality: { minimum: 1, maximum: 90 }
1115

1216
validate :qualifier_presence
@@ -15,8 +19,7 @@ class Subscription < ApplicationRecord
1519
# @param user [User] user to check type access for
1620
# @return [Array<String>] list of available types
1721
def self.types_accessible_to(user)
18-
base_types = ['all', 'tag', 'user', 'interesting', 'category']
19-
user.at_least_moderator? ? base_types << 'moderators' : base_types
22+
user.at_least_moderator? ? BASE_TYPES + MOD_ONLY_TYPES : BASE_TYPES
2023
end
2124

2225
def questions
@@ -44,10 +47,17 @@ def questions
4447
end&.order(created_at: :desc)&.limit(25)
4548
end
4649

50+
# Is the subscription's type qualified (bound to an entity)?
51+
# @param type [String] type to check
52+
# @return [Boolean] check result
53+
def qualified?
54+
QUALIFIED_TYPES.include?(type)
55+
end
56+
4757
private
4858

4959
def qualifier_presence
50-
return unless ['tag', 'user', 'category'].include? type
60+
return unless qualified?
5161

5262
if type == 'tag' && (qualifier.blank? || Tag.find_by(name: qualifier).nil?)
5363
errors.add(:qualifier, 'must provide a valid tag name for tag subscriptions')

app/views/subscriptions/new.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
class: 'form-element js-subscription-type-select' %>
1818
</div>
1919

20-
<div class="form-group">
20+
<div class="form-group<%= ' hide' unless @subscription.qualified? %>">
2121
<%= f.label :qualifier, class: "form-element" %>
2222
<div class="form-caption">Should be an id for user subscriptions or name for tag & category subscriptions.
2323
Leave the field blank otherwise.</div>

test/models/subscription_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ class SubscriptionTest < ActiveSupport::TestCase
5959
end
6060
end
6161

62+
test 'qualified? should correctly determine if a subscription should have a qualifier' do
63+
subscriptions.each do |sub|
64+
assert_equal sub.qualified?, Subscription::QUALIFIED_TYPES.include?(sub.type)
65+
end
66+
end
67+
6268
private
6369

6470
def assert_questions_valid(questions)

0 commit comments

Comments
 (0)