yiffspace 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aca3308a25bbf6b426ea3a8d52a9bfe7a41452cc7e500332accab52ee0d2fde0
4
- data.tar.gz: 2cac0c503de3fa0141b0a923c0fadeb4225b01640b74dac33c8f743127a5273e
3
+ metadata.gz: 545c4eff4fa91bac9206bf942d654ac16ad84f4788033970f7c1596e218b3cf3
4
+ data.tar.gz: 105eb1b229fa13772e12cf0f1d0def0148fbd158d4e05edd6c8766eeef865f09
5
5
  SHA512:
6
- metadata.gz: 62946e5dfb3a8593ae125882c845652babac22b5d4b55cb421a8de1cf6503b1940ada9b1e00b640b3d3d0af4f8f8867be832c0600e4f2de18f5c7acff71b8182
7
- data.tar.gz: bb2435f4fd6d6f7ab4b4d6d4110e90b4bf1aceb36109db94af99078f652a59acfdc569fbe28b57367de014aa5443d9b413ad3ecdceced070321979a2b5537ccd
6
+ metadata.gz: 82794b3e23644b0b84ff2312debc37b55cf48930714773f0f770a3ad0a2df787b8fb4bc2bca9ff91239c07c5c15835f09a87ef9135ef6a0a82b1a5a0749e71d2
7
+ data.tar.gz: 78431124a99c4b7f97afec204db10b3af3c8145b9cbf68545bebb100cf225ae3d0ce8496c964322bcaa263db3c3f9cb64b774e02210362bc328fc268ac48bd59
@@ -11,11 +11,15 @@ module YiffSpace
11
11
 
12
12
  # The application's User model class. Used by Utils::Current, Search::QueryDSL, etc.
13
13
  # Falls back to ::User at call time when nil.
14
- attr_accessor(:user_class)
14
+ attr_writer(:user_class)
15
+
16
+ # The application's User model class. Used by Utils::UserResolvable
17
+ # Falls back to ::UserLike at call time when nil.
18
+ attr_writer(:user_like_class)
15
19
 
16
20
  # The application's UserResolvable class. Used by Utils::Current.
17
21
  # Falls back to ::UserResolvable at call time when nil.
18
- attr_accessor(:user_resolvable_class)
22
+ attr_writer(:user_resolvable_class)
19
23
 
20
24
  # The CurrentAttributes class used to access the current user in model concerns.
21
25
  # Defaults to YiffSpace::Utils::Current.
@@ -39,12 +43,25 @@ module YiffSpace
39
43
  @max_multi_count = -> { 100 }
40
44
  @redis_url = -> {}
41
45
  @user_class = nil
46
+ @user_like_class = nil
42
47
  @user_resolvable_class = nil
43
48
  @current_class = nil
44
49
  @default_ip_address = "127.0.0.1"
45
50
  @anonymous_user_name = -> { "Anonymous" }
46
51
  end
47
52
 
53
+ def user_class
54
+ @user_class || ::User
55
+ end
56
+
57
+ def user_like_class
58
+ @user_like_class || Utils::UserLike
59
+ end
60
+
61
+ def user_resolable_class
62
+ @user_resolvable_class || Utils::UserResolvable
63
+ end
64
+
48
65
  # Returns the configured current class, defaulting to YiffSpace::Utils::Current.
49
66
  def current_class
50
67
  @current_class || Utils::Current
@@ -52,12 +69,12 @@ module YiffSpace
52
69
 
53
70
  # Lazily built: calls user_class (or ::User) at invocation time, not config time.
54
71
  def anonymous_user_getter
55
- @anonymous_user_getter ||= -> { (user_class || ::User).anonymous }
72
+ @anonymous_user_getter ||= -> { user_class.anonymous }
56
73
  end
57
74
 
58
75
  # Lazily built: calls user_class (or ::User) at invocation time, not config time.
59
76
  def system_user_getter
60
- @system_user_getter ||= -> { (user_class || ::User).system }
77
+ @system_user_getter ||= -> { user_class.system }
61
78
  end
62
79
 
63
80
  def redis_url=(value)
@@ -14,3 +14,5 @@ require_relative("routes")
14
14
  require_relative("table_builder")
15
15
  require_relative("trace_logger")
16
16
  require_relative("user_attribute")
17
+ require_relative("user_like")
18
+ require_relative("user_resolvable")
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative("../utils/user_like")
4
+
5
+ UserLike = YiffSpace::Utils::UserLike
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative("../utils/user_resolvable")
4
+
5
+ UserResolvable = YiffSpace::Utils::UserResolvable
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module YiffSpace
4
+ module Utils
5
+ module UserLike
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module YiffSpace
4
+ module Utils
5
+ class UserResolvable
6
+ attr_reader(:user, :ip_addr)
7
+
8
+ def initialize(user, ip_addr, validate: true)
9
+ if user.is_a?(UserResolvable)
10
+ TraceLogger.warn("UserResolvable", "Unexpectedly received UserResolvable for user argument")
11
+ user = recursive_resolve(user)
12
+ end
13
+ @user = user
14
+ ip_addr = ip_addr.to_s if ip_addr.is_a?(IPAddr)
15
+ @ip_addr = ip_addr
16
+ return unless validate
17
+ raise(ArgumentError, "Expected User for user argument, got #{user.inspect} (#{user.class.name})") unless user.is_a?(YiffSpace.config.user_class)
18
+ raise(ArgumentError, "Expected String for ip_addr argument, got #{ip_addr.inspect} (#{ip_addr.class.name})") unless ip_addr.is_a?(String)
19
+ end
20
+
21
+ alias resolve user
22
+
23
+ def resolvable(ip_addr = nil)
24
+ @ip_addr = ip_addr if ip_addr.present?
25
+ self
26
+ end
27
+
28
+ delegate(:recursive_resolve, to: :class)
29
+ delegate(:to_param, :serializable_hash, :as_json, :to_json, to: :user)
30
+ delegate_missing_to(:user, allow_nil: true)
31
+
32
+ # needed to allow passing the class around when creating records, active record attempts to call several methods on the provided record's class
33
+ class << self
34
+ delegate_missing_to(:User, allow_nil: false)
35
+ end
36
+
37
+ def self.recursive_resolve(resolvable)
38
+ result = resolvable
39
+ result = result.resolve while result.is_a?(UserResolvable)
40
+ result
41
+ end
42
+
43
+ def ==(other)
44
+ return other == user if other.is_a?(YiffSpace.config.user_class)
45
+
46
+ other.is_a?(UserResolvable) && user == other.user
47
+ end
48
+
49
+ def ===(other)
50
+ (other == YiffSpace.config.user_like_class && user.is_a?(YiffSpace.config.user_class)) || super
51
+ end
52
+
53
+ def is_a?(other)
54
+ (other == YiffSpace.config.user_like_class && user.is_a?(YiffSpace.config.user_class)) || super
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module YiffSpace
4
- VERSION = "0.0.3"
4
+ VERSION = "0.0.4"
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yiffspace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Donovan_DMC
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-05-28 00:00:00.000000000 Z
10
+ date: 2026-05-29 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: abbrev
@@ -195,6 +195,8 @@ files:
195
195
  - lib/yiffspace/include/table_builder.rb
196
196
  - lib/yiffspace/include/trace_logger.rb
197
197
  - lib/yiffspace/include/user_attribute.rb
198
+ - lib/yiffspace/include/user_like.rb
199
+ - lib/yiffspace/include/user_resolvable.rb
198
200
  - lib/yiffspace/search/query_builder.rb
199
201
  - lib/yiffspace/search/query_dsl.rb
200
202
  - lib/yiffspace/search/query_helper.rb
@@ -211,6 +213,8 @@ files:
211
213
  - lib/yiffspace/utils/table_builder.rb
212
214
  - lib/yiffspace/utils/trace_logger.rb
213
215
  - lib/yiffspace/utils/user_attribute.rb
216
+ - lib/yiffspace/utils/user_like.rb
217
+ - lib/yiffspace/utils/user_resolvable.rb
214
218
  - lib/yiffspace/version.rb
215
219
  homepage: https://yiff.space
216
220
  licenses: