libertree-model 0.9.11 → 0.9.16

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 9a84aeab884f0cc3db24026c3b4063a2a7ce7ece
4
- data.tar.gz: f29e7defa9f0dc6cc60885bc4ee213bd737f65f2
2
+ SHA256:
3
+ metadata.gz: 1d084f6691620280affdb0defc6e7ab1d2f7c0b3a7966add5adee31907afb088
4
+ data.tar.gz: 7a521d8ba93a593d3d07b8fcf91489b45a6df057d7a557777d72ced929fdd9d8
5
5
  SHA512:
6
- metadata.gz: 4bfa2f35c02ee6f76aa8701ed525593fcd18433f19fd9bfa2dcd21bde958f84b35f0716ff91e2c38b79d48d2331c4150bcd65ac49c7dafae275835382189c46c
7
- data.tar.gz: ac2e3ab424a0d6daee34cfd9c0db9cab87c77c7d42b9be887211306f54379b7592ddbef9b3be77aa5a5ea679bca37079b97a4140fbcbc54b6c5bdf9347f71bdb
6
+ metadata.gz: 8dc52396d815bd7e0b76d3212bc30151ded903bb1a285b2858ed1482857191eaf2cea655604c39cdde58cb07c2731f9c8a425e412d67c262c726c438c142e247
7
+ data.tar.gz: 3c1d4b88e5962951d6e438af844527c5ba5ffb2f1f86abad523d33f139642d6c7f8da158fea829021e3919e38e10e5ac03fa01a3aed9f3e0e573c017559d85f3
@@ -42,8 +42,13 @@ module Libertree
42
42
 
43
43
  def self.authenticate_db(creds)
44
44
  if creds['password_reset_code'].to_s
45
- account = Account.where(%{password_reset_code = ? AND NOW() <= password_reset_expiry},
46
- creds['password_reset_code'].to_s).first
45
+ account = Account.where(
46
+ Sequel.lit(
47
+ %{password_reset_code = ? AND NOW() <= password_reset_expiry},
48
+ creds['password_reset_code'].to_s
49
+ )
50
+ ).first
51
+
47
52
  if account
48
53
  return account
49
54
  end
@@ -286,7 +291,9 @@ module Libertree
286
291
  end
287
292
 
288
293
  def invitations_not_accepted
289
- Invitation.where("inviter_account_id = ? AND account_id IS NULL", self.id).order(:id).all
294
+ Invitation.where(
295
+ Sequel.lit("inviter_account_id = ? AND account_id IS NULL", self.id)
296
+ ).order(:id).all
290
297
  end
291
298
 
292
299
  def new_invitation
@@ -362,7 +369,10 @@ module Libertree
362
369
  # @return [Boolean] true iff password reset was successfully set up
363
370
  def self.set_up_password_reset_for(email)
364
371
  # TODO: Don't allow registration of accounts with the same email but different case
365
- account = self.where('LOWER(email) = ?', email.downcase).first
372
+ account = self.where(
373
+ Sequel.lit('LOWER(email) = ?', email.downcase)
374
+ ).first
375
+
366
376
  if account
367
377
  account.password_reset_code = SecureRandom.hex(16)
368
378
  account.password_reset_expiry = Time.now + 60 * 60
@@ -67,8 +67,13 @@ module Libertree
67
67
  def self.mark_seen_between(account, member_id)
68
68
  return if account.nil?
69
69
 
70
- self.where("from_member_id = ? AND to_member_id = ?", member_id.to_i, account.member.id).
71
- update(seen: true)
70
+ self.where(
71
+ Sequel.lit(
72
+ "from_member_id = ? AND to_member_id = ?",
73
+ member_id.to_i,
74
+ account.member.id
75
+ )
76
+ ).update(seen: true)
72
77
  end
73
78
  end
74
79
  end
@@ -9,10 +9,12 @@ module Libertree
9
9
  else
10
10
  dict = 'english'
11
11
  end
12
- self.where("(to_tsvector('simple', text) || to_tsvector('english', text)) @@ plainto_tsquery('#{dict}', ?)", q).
13
- reverse_order(:time_created).
14
- limit(limit.to_i).
15
- all
12
+
13
+ self.where(
14
+ Sequel.lit("(to_tsvector('simple', text) || to_tsvector('english', text)) @@ plainto_tsquery('#{dict}', ?)", q)
15
+ ).reverse_order(:time_created)
16
+ .limit(limit.to_i)
17
+ .all
16
18
  end
17
19
  end
18
20
  end
@@ -45,7 +45,12 @@ module Libertree
45
45
 
46
46
  # @return [Job] nil if no job was reserved
47
47
  def self.reserve(tasks)
48
- job = self.where("task IN ? AND pid IS NULL AND tries < #{MAX_TRIES} AND time_to_start <= NOW()", tasks).order(:time_to_start).limit(1).first
48
+ job = self.where(
49
+ Sequel.lit("task IN ? AND pid IS NULL AND tries < #{MAX_TRIES} AND time_to_start <= NOW()", tasks)
50
+ ).order(:time_to_start)
51
+ .limit(1)
52
+ .first
53
+
49
54
  return nil if job.nil?
50
55
 
51
56
  self.where({ id: job.id, pid: nil }).
@@ -72,20 +77,22 @@ module Libertree
72
77
  params = args[1..-1]
73
78
 
74
79
  self.where(
75
- query + %{
76
- AND time_finished IS NULL
77
- AND tries < ?
78
- },
79
- *params,
80
- MAX_TRIES
80
+ Sequel.lit(
81
+ query + %{
82
+ AND time_finished IS NULL
83
+ AND tries < ?
84
+ },
85
+ *params,
86
+ MAX_TRIES
87
+ )
81
88
  )
82
89
  end
83
90
 
84
91
  def self.unfinished(task=nil)
85
92
  if task
86
- self.where("task = ? AND time_finished IS NULL", task).all
93
+ self.where(Sequel.lit("task = ? AND time_finished IS NULL", task)).all
87
94
  else
88
- self.where("time_finished IS NULL").all
95
+ self.where(Sequel.lit("time_finished IS NULL")).all
89
96
  end
90
97
  end
91
98
  end
@@ -80,18 +80,23 @@ module Libertree
80
80
  if local
81
81
  self.qualify.
82
82
  join(:accounts, :id=>:account_id).
83
- where(:accounts__username => username).
83
+ where(Sequel.qualify(:accounts, :username) => username).
84
84
  limit(1).
85
85
  first
86
86
  else
87
87
  # TODO: servers.name_given is no longer used. Remove it after
88
88
  # migrating user rivers/contact lists etc.
89
- self.qualify.
90
- join(:servers, :id=>:server_id).
91
- where(:members__username => username).
92
- where(Sequel.or(:servers__domain => host, :servers__name_given => host)).
93
- limit(1).
94
- first
89
+ self.qualify
90
+ .join(:servers, :id=>:server_id)
91
+ .where(Sequel.qualify(:members, :username) => username)
92
+ .where(
93
+ Sequel.or(
94
+ Sequel.qualify(:servers, :domain) => host,
95
+ Sequel.qualify(:servers, :name_given) => host
96
+ )
97
+ )
98
+ .limit(1)
99
+ .first
95
100
  end
96
101
  end
97
102
 
@@ -100,7 +105,7 @@ module Libertree
100
105
  def self.with_display_name(name)
101
106
  self.qualify.
102
107
  join(:profiles, :member_id=>:id).
103
- where(:profiles__name_display => name).
108
+ where(Sequel.qualify(:profiles, :name_display) => name).
104
109
  limit(1).
105
110
  first
106
111
  end
@@ -7,6 +7,7 @@ module Libertree
7
7
  :subscribed ]
8
8
 
9
9
  many_to_one :node
10
+ set_primary_key :id
10
11
 
11
12
  def self.for(jid_or_host)
12
13
  return self unless jid_or_host
@@ -14,7 +15,7 @@ module Libertree
14
15
  if jid_or_host.include?('@')
15
16
  self.where(jid: jid_or_host)
16
17
  else
17
- host_pattern = self.where.escape_like(jid_or_host.to_s)
18
+ host_pattern = self.where(Sequel.lit('true')).escape_like(jid_or_host.to_s)
18
19
  self.where(Sequel.like(:jid, "%@#{host_pattern}"))
19
20
  end
20
21
  end
@@ -46,8 +46,14 @@ module Libertree
46
46
  end
47
47
 
48
48
  def self.mark_seen_for_account_and_message(account, message)
49
- self.where("account_id = ? AND data = ?", account.id, %|{"type":"message","message_id":#{message.id}}|).
50
- update(seen: true)
49
+ self.where(
50
+ Sequel.lit(
51
+ "account_id = ? AND data = ?",
52
+ account.id,
53
+ %|{"type":"message","message_id":#{message.id}}|
54
+ )
55
+ ).update(seen: true)
56
+
51
57
  account.dirty
52
58
  end
53
59
 
@@ -76,21 +76,29 @@ module Libertree
76
76
  def posts( opts = {} )
77
77
  limit = opts.fetch(:limit, 30)
78
78
  time = Time.at( opts.fetch(:time, Time.now.to_f) ).strftime("%Y-%m-%d %H:%M:%S.%6N%z")
79
- time_clause = if opts[:newer]
80
- proc { time_created > time }
81
- else
82
- proc { time_created < time }
83
- end
84
-
85
- res = Post.qualify.
86
- join(:pools_posts, :post_id=>:id).
87
- where(&time_clause).
88
- where(:pool_id => self.id).
89
- reverse_order(:posts__id).
90
- limit(limit)
79
+ if opts[:newer]
80
+ time_clause = proc { time_created > time }
81
+ else
82
+ time_clause = proc { time_created < time }
83
+ end
84
+
85
+ order_by_updated = opts.fetch(:order_by_updated, false)
86
+ if order_by_updated
87
+ order = Sequel.lit("GREATEST(posts.time_commented, posts.time_updated)")
88
+ else
89
+ order = Sequel.qualify(:posts, :id)
90
+ end
91
+
92
+ res = Post.qualify
93
+ .join(:pools_posts, post_id: :id)
94
+ .where(&time_clause)
95
+ .where(pool_id: self.id)
96
+ .reverse_order(order)
97
+ .limit(limit)
91
98
 
92
99
  # optionally restrict to Internet visible posts
93
100
  res = res.where(visibility: 'internet') if opts[:public]
101
+
94
102
  res
95
103
  end
96
104
 
@@ -96,7 +96,13 @@ module Libertree
96
96
  def mark_as_unread_by_all( options = {} )
97
97
  except_accounts = options.fetch(:except, [])
98
98
  if except_accounts.any?
99
- DB.dbh[:posts_read].where('post_id = ? AND NOT account_id IN ?', self.id, except_accounts.map(&:id)).delete
99
+ DB.dbh[:posts_read].where(
100
+ Sequel.lit(
101
+ 'post_id = ? AND NOT account_id IN ?',
102
+ self.id,
103
+ except_accounts.map(&:id)
104
+ )
105
+ ).delete
100
106
  else
101
107
  DB.dbh[ "DELETE FROM posts_read WHERE post_id = ?", self.id ].get
102
108
  end
@@ -351,47 +357,47 @@ module Libertree
351
357
  posts.
352
358
  qualify.
353
359
  left_outer_join(:posts_hidden,
354
- :posts_hidden__post_id => :posts__id,
355
- :posts_hidden__account_id => account.id).
356
- where(:posts_hidden__post_id => nil)
360
+ Sequel.qualify(:posts_hidden, :post_id) => Sequel.qualify(:posts, :id),
361
+ Sequel.qualify(:posts_hidden, :account_id) => account.id).
362
+ where(Sequel.qualify(:posts_hidden, :post_id) => nil)
357
363
  end
358
364
 
359
365
  def self.read_by(account, posts=self)
360
366
  posts.
361
367
  qualify.
362
368
  join(:posts_read,
363
- :posts_read__post_id => :posts__id,
364
- :posts_read__account_id => account.id)
369
+ Sequel.qualify(:posts_read, :post_id) => Sequel.qualify(:posts, :id),
370
+ Sequel.qualify(:posts_read, :account_id) => account.id)
365
371
  end
366
372
 
367
373
  def self.unread_by(account, posts=self)
368
374
  posts.
369
375
  qualify.
370
376
  left_outer_join(:posts_read,
371
- :posts_read__post_id => :posts__id,
372
- :posts_read__account_id => account.id).
373
- where(:posts_read__post_id => nil)
377
+ Sequel.qualify(:posts_read, :post_id) => Sequel.qualify(:posts, :id),
378
+ Sequel.qualify(:posts_read, :account_id) => account.id).
379
+ where(Sequel.qualify(:posts_read, :post_id) => nil)
374
380
  end
375
381
 
376
382
  def self.liked_by(member, posts=self)
377
383
  posts.
378
384
  qualify.
379
385
  join(:post_likes,
380
- :post_likes__post_id => :posts__id,
381
- :post_likes__member_id => member.id)
386
+ Sequel.qualify(:post_likes, :post_id) => Sequel.qualify(:posts, :id),
387
+ Sequel.qualify(:post_likes, :member_id) => member.id)
382
388
  end
383
389
 
384
390
  def self.without_liked_by(member, posts=self)
385
391
  posts.
386
392
  qualify.
387
393
  join(:post_likes,
388
- :post_likes__post_id => :posts__id,
389
- :post_likes__member_id => member.id)
394
+ Sequel.qualify(:post_likes, :post_id) => Sequel.qualify(:posts, :id),
395
+ Sequel.qualify(:post_likes, :member_id) => member.id)
390
396
  end
391
397
 
392
398
  def self.commented_on_by(member, posts=self)
393
399
  posts.
394
- where(:posts__id => Comment.
400
+ where(Sequel.qualify(:posts, :id) => Comment.
395
401
  select(:post_id).
396
402
  distinct(:post_id).
397
403
  where(:member_id => member.id))
@@ -399,7 +405,7 @@ module Libertree
399
405
 
400
406
  def self.without_commented_on_by(member, posts=self)
401
407
  posts.
402
- exclude(:posts__id => Comment.
408
+ exclude(Sequel.qualify(:posts, :id) => Comment.
403
409
  select(:post_id).
404
410
  distinct(:post_id).
405
411
  where(:member_id => member.id))
@@ -409,17 +415,17 @@ module Libertree
409
415
  posts.
410
416
  qualify.
411
417
  join(:post_subscriptions,
412
- :post_subscriptions__post_id => :posts__id,
413
- :post_subscriptions__account_id => account.id)
418
+ Sequel.qualify(:post_subscriptions, :post_id) => Sequel.qualify(:posts, :id),
419
+ Sequel.qualify(:post_subscriptions, :account_id) => account.id)
414
420
  end
415
421
 
416
422
  def self.without_subscribed_to_by(account, posts=self)
417
423
  posts.
418
424
  qualify.
419
425
  left_outer_join(:post_subscriptions,
420
- :post_subscriptions__post_id => :posts__id,
421
- :post_subscriptions__account_id => account.id).
422
- where(:post_subscriptions__post_id => nil)
426
+ Sequel.qualify(:post_subscriptions, :post_id) => Sequel.qualify(:posts, :id),
427
+ Sequel.qualify(:post_subscriptions, :account_id) => account.id).
428
+ where(Sequel.qualify(:post_subscriptions, :post_id) => nil)
423
429
  end
424
430
 
425
431
  def self.filter_by_query(parsed_query, account, posts=self)
@@ -518,13 +524,19 @@ module Libertree
518
524
 
519
525
  # filter by simple terms first to avoid having to check so many posts
520
526
  # TODO: prevent empty arguments to to_tsquery
521
- posts = posts.where(%{to_tsvector('simple', text)
522
- @@ (to_tsquery('simple', ?)
523
- && to_tsquery('simple', ?)
524
- && to_tsquery('simple', ?))},
525
- words[:negations].map{|w| "!#{w}" }.join(' & '),
526
- words[:requirements].join(' & '),
527
- words[:regular].join(' | '))
527
+ posts = posts.where(
528
+ Sequel.lit(
529
+ %{
530
+ to_tsvector('simple', text)
531
+ @@ (to_tsquery('simple', ?)
532
+ && to_tsquery('simple', ?)
533
+ && to_tsquery('simple', ?))
534
+ },
535
+ words[:negations].map{|w| "!#{w}" }.join(' & '),
536
+ words[:requirements].join(' & '),
537
+ words[:regular].join(' | ')
538
+ )
539
+ )
528
540
  end
529
541
 
530
542
  { 'visibility' => :visibility,
@@ -618,14 +630,16 @@ module Libertree
618
630
 
619
631
  get_comments = lambda do
620
632
  comments = Comment.on_post(post, viewing_account: viewing_account)
621
- comment_likes = CommentLike.where('comment_id IN ?', comments.map(&:id)).reduce({}) do |hash, like|
633
+ comment_likes = CommentLike.where(
634
+ Sequel.lit('comment_id IN ?', comments.map(&:id))
635
+ ).reduce({}) { |hash, like|
622
636
  if hash[like.comment_id]
623
637
  hash[like.comment_id] << like
624
638
  else
625
639
  hash[like.comment_id] = [like]
626
640
  end
627
641
  hash
628
- end
642
+ }
629
643
 
630
644
  comments.map do |comment|
631
645
  likes = if comment_likes[comment.id]
@@ -699,9 +713,14 @@ module Libertree
699
713
  end
700
714
 
701
715
  def pools_by_member(member_id)
702
- Libertree::Model::Pool.qualify.
703
- join(:pools_posts, :pools_posts__pool_id => :pools__id).
704
- where(pools_posts__post_id: self.id, pools__member_id: member_id)
716
+ Libertree::Model::Pool.qualify
717
+ .join(
718
+ :pools_posts,
719
+ Sequel.qualify(:pools_posts, :pool_id) => Sequel.qualify(:pools, :id)
720
+ ).where(
721
+ Sequel.qualify(:pools_posts, :post_id) => self.id,
722
+ Sequel.qualify(:pools, :member_id) => member_id
723
+ )
705
724
  end
706
725
 
707
726
  def update_collection_status_for_member(member_id, pool_ids)
@@ -18,7 +18,11 @@ module Libertree
18
18
  end
19
19
 
20
20
  def self.search(query)
21
- self.where("(to_tsvector('simple', description) || to_tsvector('english', description)) @@ plainto_tsquery(?)", query).or("name_display ILIKE '%' || ? || '%'", query)
21
+ self.where(
22
+ Sequel.lit("(to_tsvector('simple', description) || to_tsvector('english', description)) @@ plainto_tsquery(?)", query)
23
+ ).or(
24
+ Sequel.lit("name_display ILIKE '%' || ? || '%'", query)
25
+ )
22
26
  end
23
27
  end
24
28
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libertree-model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.11
4
+ version: 0.9.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pistos
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-11-18 00:00:00.000000000 Z
12
+ date: 2020-07-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ruby-oembed
@@ -17,112 +17,112 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 0.8.8
20
+ version: 0.13.1
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 0.8.8
27
+ version: 0.13.1
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: gpgme
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ">="
32
+ - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '0'
34
+ version: 2.0.20
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ">="
39
+ - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '0'
41
+ version: 2.0.20
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: pg
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ">="
46
+ - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '0'
48
+ version: 1.2.3
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ">="
53
+ - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '0'
55
+ version: 1.2.3
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: sequel
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - "<"
60
+ - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '5'
62
+ version: 5.34.0
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - "<"
67
+ - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '5'
69
+ version: 5.34.0
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: bcrypt-ruby
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - '='
74
+ - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: 3.0.1
76
+ version: 3.1.5
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - '='
81
+ - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: 3.0.1
83
+ version: 3.1.5
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: nokogiri
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
- version: '1.5'
90
+ version: 1.10.10
91
91
  type: :runtime
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - "~>"
96
96
  - !ruby/object:Gem::Version
97
- version: '1.5'
97
+ version: 1.10.10
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: net-ldap
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - "~>"
103
103
  - !ruby/object:Gem::Version
104
- version: 0.5.1
104
+ version: 0.16.1
105
105
  type: :runtime
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - "~>"
110
110
  - !ruby/object:Gem::Version
111
- version: 0.5.1
111
+ version: 0.16.1
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: parkdown-libertree
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - "~>"
117
117
  - !ruby/object:Gem::Version
118
- version: 1.4.27
118
+ version: 1.4.26
119
119
  type: :runtime
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - "~>"
124
124
  - !ruby/object:Gem::Version
125
- version: 1.4.27
125
+ version: 1.4.26
126
126
  description: Database library for Libertree
127
127
  email:
128
128
  executables: []
@@ -190,8 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
190
  - !ruby/object:Gem::Version
191
191
  version: '0'
192
192
  requirements: []
193
- rubyforge_project:
194
- rubygems_version: 2.6.11
193
+ rubygems_version: 3.1.2
195
194
  signing_key:
196
195
  specification_version: 4
197
196
  summary: Database library for Libertree