Class: BadgePostsViewManager

Inherits:
Object
  • Object
show all
Defined in:
lib/badge_posts_view_manager.rb

Constant Summary collapse

VIEW_NAME =
"badge_posts"

Class Method Summary collapse

Class Method Details

.badge_posts_view_exists?Boolean

Returns:

  • (Boolean)


30
31
32
33
34
35
36
37
38
39
40
# File 'lib/badge_posts_view_manager.rb', line 30

def self.badge_posts_view_exists?
  sql = <<~SQL
  SELECT 1
  FROM pg_catalog.pg_views
  WHERE schemaname
  IN ('public')
  AND viewname = '#{VIEW_NAME}';
  SQL

  DB.exec(sql) == 1
end

.create!Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/badge_posts_view_manager.rb', line 6

def self.create!
  sql = <<~SQL
  CREATE VIEW #{VIEW_NAME} AS
  SELECT p.*
  FROM posts p
  JOIN topics t ON t.id = p.topic_id
  JOIN categories c ON c.id = t.category_id
  WHERE c.allow_badges AND
        p.deleted_at IS NULL AND
        t.deleted_at IS NULL AND
        NOT c.read_restricted AND
        t.visible AND
        p.post_type IN (1,2,3)
  SQL

  DB.exec(sql)
  raise "Failed to create '#{VIEW_NAME}' view" unless badge_posts_view_exists?
end

.drop!Object



25
26
27
28
# File 'lib/badge_posts_view_manager.rb', line 25

def self.drop!
  DB.exec("DROP VIEW #{VIEW_NAME}")
  raise "Failed to drop '#{VIEW_NAME}' view" if badge_posts_view_exists?
end