3 Commits

Author SHA1 Message Date
  Dylan Baker 903a329ffb Link directly to post 3 years ago
  Dylan Baker 7db28d294b Truncate post body in results 3 years ago
  Dylan Baker a4601594ea Allow running old migratinos 3 years ago
5 changed files with 66 additions and 37 deletions
  1. 2
    0
      Gemfile
  2. 5
    0
      Gemfile.lock
  3. 52
    35
      db/migrate.rb
  4. 5
    0
      web/server.rb
  5. 2
    2
      web/views/results.erb

+ 2
- 0
Gemfile View File

13
 gem 'sassc', '~> 2.2'
13
 gem 'sassc', '~> 2.2'
14
 gem 'sequel', '~> 5.30'
14
 gem 'sequel', '~> 5.30'
15
 gem 'sinatra', '~> 2.0'
15
 gem 'sinatra', '~> 2.0'
16
+
17
+gem "truncato", "~> 0.7.11"

+ 5
- 0
Gemfile.lock View File

4
     diff-lcs (1.3)
4
     diff-lcs (1.3)
5
     dotenv (2.7.5)
5
     dotenv (2.7.5)
6
     ffi (1.12.2)
6
     ffi (1.12.2)
7
+    htmlentities (4.3.4)
7
     httparty (0.18.0)
8
     httparty (0.18.0)
8
       mime-types (~> 3.0)
9
       mime-types (~> 3.0)
9
       multi_xml (>= 0.5.2)
10
       multi_xml (>= 0.5.2)
44
       rack-protection (= 2.0.8.1)
45
       rack-protection (= 2.0.8.1)
45
       tilt (~> 2.0)
46
       tilt (~> 2.0)
46
     tilt (2.0.10)
47
     tilt (2.0.10)
48
+    truncato (0.7.11)
49
+      htmlentities (~> 4.3.1)
50
+      nokogiri (>= 1.7.0, <= 2.0)
47
 
51
 
48
 PLATFORMS
52
 PLATFORMS
49
   ruby
53
   ruby
59
   sassc (~> 2.2)
63
   sassc (~> 2.2)
60
   sequel (~> 5.30)
64
   sequel (~> 5.30)
61
   sinatra (~> 2.0)
65
   sinatra (~> 2.0)
66
+  truncato (~> 0.7.11)
62
 
67
 
63
 BUNDLED WITH
68
 BUNDLED WITH
64
    2.1.4
69
    2.1.4

+ 52
- 35
db/migrate.rb View File

1
+require 'pg'
1
 require 'sequel'
2
 require 'sequel'
2
 
3
 
3
 require_relative 'connect'
4
 require_relative 'connect'
4
 
5
 
5
 def migrate
6
 def migrate
6
-  db = connect
7
+  db = DB
7
   db.create_table? :threads do
8
   db.create_table? :threads do
8
     primary_key :id
9
     primary_key :id
9
     String :title
10
     String :title
24
     column :tsv, 'tsvector'
25
     column :tsv, 'tsvector'
25
   end
26
   end
26
 
27
 
27
-  db.run('CREATE INDEX tsv_idx ON posts USING gin(tsv);')
28
-
29
-  db.create_function?(:update_last_post, <<-SQL, language: :plpgsql, returns: :trigger)
30
-    BEGIN
31
-      UPDATE threads
32
-      SET
33
-        last_post_created_at = NEW.created_at,
34
-        last_post_creator = NEW.creator
35
-      WHERE
36
-        threads.id = NEW.thread_id;
37
-      RETURN NEW;
38
-    END
39
-  SQL
40
-
41
-  db.create_function?(:set_posts_tsv, <<-SQL, language: :plpgsql, returns: :trigger)
42
-    BEGIN
43
-      NEW.tsv = to_tsvector(new.body);
44
-      RETURN NEW;
45
-    END
46
-  SQL
47
-
48
-  db.run(<<-SQL)
49
-    CREATE TRIGGER update_last_post
50
-    AFTER INSERT ON posts
51
-    FOR EACH ROW
52
-    EXECUTE PROCEDURE update_last_post();
53
-  SQL
54
-
55
-  db.run(<<-SQL)
56
-    CREATE TRIGGER set_posts_tsv
57
-    BEFORE INSERT OR UPDATE ON posts
58
-    FOR EACH ROW
59
-    EXECUTE PROCEDURE set_posts_tsv();
60
-  SQL
28
+  db.run('CREATE INDEX IF NOT EXISTS tsv_idx ON posts USING gin(tsv);')
29
+
30
+  begin
31
+    db.create_function(:update_last_post, <<-SQL, language: :plpgsql, returns: :trigger)
32
+      BEGIN
33
+        UPDATE threads
34
+        SET
35
+          last_post_created_at = NEW.created_at,
36
+          last_post_creator = NEW.creator
37
+        WHERE
38
+          threads.id = NEW.thread_id;
39
+        RETURN NEW;
40
+      END
41
+    SQL
42
+  rescue Sequel::DatabaseError => e
43
+    raise e unless e.wrapped_exception.is_a?(PG::DuplicateFunction)
44
+  end
45
+
46
+  begin
47
+    db.create_function(:set_posts_tsv, <<-SQL, language: :plpgsql, returns: :trigger)
48
+      BEGIN
49
+        NEW.tsv = to_tsvector(new.body);
50
+        RETURN NEW;
51
+      END
52
+    SQL
53
+  rescue Sequel::DatabaseError => e
54
+    raise e unless e.wrapped_exception.is_a?(PG::DuplicateFunction)
55
+  end
56
+
57
+  begin
58
+    db.run(<<-SQL)
59
+      CREATE TRIGGER update_last_post
60
+      AFTER INSERT ON posts
61
+      FOR EACH ROW
62
+      EXECUTE PROCEDURE update_last_post();
63
+    SQL
64
+  rescue Sequel::DatabaseError => e
65
+    raise e unless e.wrapped_exception.is_a?(PG::DuplicateObject)
66
+  end
67
+
68
+  begin
69
+    db.run(<<-SQL)
70
+      CREATE TRIGGER set_posts_tsv
71
+      BEFORE INSERT OR UPDATE ON posts
72
+      FOR EACH ROW
73
+      EXECUTE PROCEDURE set_posts_tsv();
74
+    SQL
75
+  rescue Sequel::DatabaseError => e
76
+    raise e unless e.wrapped_exception.is_a?(PG::DuplicateObject)
77
+  end
61
 end
78
 end

+ 5
- 0
web/server.rb View File

1
 require 'dotenv/load'
1
 require 'dotenv/load'
2
 require 'sequel'
2
 require 'sequel'
3
 require 'sinatra'
3
 require 'sinatra'
4
+require 'truncato'
4
 
5
 
5
 require_relative '../db/connect'
6
 require_relative '../db/connect'
6
 require_relative '../lib/auth'
7
 require_relative '../lib/auth'
122
     def external_link(url, text)
123
     def external_link(url, text)
123
       "<a href=\"#{url}\" target=\"_blank\">#{text}</a>"
124
       "<a href=\"#{url}\" target=\"_blank\">#{text}</a>"
124
     end
125
     end
126
+
127
+    def truncate(s)
128
+      Truncato.truncate(s, max_length: 500)
129
+    end
125
   end
130
   end
126
 
131
 
127
   run! if __FILE__ == $0
132
   run! if __FILE__ == $0

+ 2
- 2
web/views/results.erb View File

32
               In thread:
32
               In thread:
33
               <strong>
33
               <strong>
34
                 <%= external_link(
34
                 <%= external_link(
35
-                  "http://board.vivalavinyl.com/thread/view/#{result[:remote_thread_id]}",
35
+                  "http://board.vivalavinyl.com/thread/view/#{result[:remote_thread_id]}#post_#{result[:remote_id]}",
36
                   result[:thread_title]
36
                   result[:thread_title]
37
                 ) %>
37
                 ) %>
38
               </strong>
38
               </strong>
41
               <%= result[:creator] %> posted this at <%= result[:created_at] %>
41
               <%= result[:creator] %> posted this at <%= result[:created_at] %>
42
             </p>
42
             </p>
43
             <p class="result__body">
43
             <p class="result__body">
44
-              <%= result[:body] %>
44
+              <%= truncate(result[:body]) %>
45
             </p>
45
             </p>
46
           <% end %>
46
           <% end %>
47
         </div>
47
         </div>

Loading…
Cancel
Save