simple-feed 2.1.0 → 3.2.0

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.
@@ -1,188 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'base62-rb'
4
- require 'hashie'
5
- require 'set'
6
- require 'objspace'
7
-
8
- require 'simplefeed/event'
9
- require_relative 'paginator'
10
- require_relative '../key'
11
- require_relative '../base/provider'
12
-
13
- module SimpleFeed
14
- module Providers
15
- module Hash
16
- class Provider < ::SimpleFeed::Providers::Base::Provider
17
- attr_accessor :h
18
-
19
- include SimpleFeed::Providers::Hash::Paginator
20
-
21
- def self.from_yaml(file)
22
- new(YAML.parse(File.read(file)))
23
- end
24
-
25
- def initialize(opts)
26
- self.h = {}
27
- h.merge!(opts)
28
- end
29
-
30
- def store(user_ids:, value:, at: Time.now)
31
- event = create_event(value, at)
32
- with_response_batched(user_ids) do |key|
33
- add_event(event, key)
34
- end
35
- end
36
-
37
- def delete(user_ids:, value:, at: nil)
38
- event = create_event(value, at)
39
- with_response_batched(user_ids) do |key|
40
- changed_activity_size?(key) do
41
- __delete(key, event)
42
- end
43
- end
44
- end
45
-
46
- def delete_if(user_ids:)
47
- with_response_batched(user_ids) do |key|
48
- activity(key).map do |event|
49
- if yield(event, key.user_id)
50
- __delete(key, event)
51
- event
52
- end
53
- end.compact
54
- end
55
- end
56
-
57
- def wipe(user_ids:)
58
- with_response_batched(user_ids) do |key|
59
- deleted = !activity(key).empty?
60
- wipe_user_record(key)
61
- deleted
62
- end
63
- end
64
-
65
- def paginate(user_ids:,
66
- page:,
67
- per_page: feed.per_page,
68
- with_total: false,
69
- reset_last_read: false)
70
-
71
- reset_last_read_value(user_ids: user_ids, at: reset_last_read) if reset_last_read
72
-
73
- with_response_batched(user_ids) do |key|
74
- activity = activity(key)
75
- result = page && page > 0 ? activity[((page - 1) * per_page)...(page * per_page)] : activity
76
- with_total ? { events: result, total_count: activity.length } : result
77
- end
78
- end
79
-
80
- def fetch(user_ids:, since: nil, reset_last_read: false)
81
- response = with_response_batched(user_ids) do |key|
82
- if since == :unread
83
- activity(key).reject { |event| event.at < user_record(key).last_read.to_f }
84
- elsif since
85
- activity(key).reject { |event| event.at < since.to_f }
86
- else
87
- activity(key)
88
- end
89
- end
90
- reset_last_read_value(user_ids: user_ids, at: reset_last_read) if reset_last_read
91
-
92
- response
93
- end
94
-
95
- def reset_last_read(user_ids:, at: Time.now)
96
- with_response_batched(user_ids) do |key|
97
- user_record(key)[:last_read] = at
98
- at
99
- end
100
- end
101
-
102
- def total_count(user_ids:)
103
- with_response_batched(user_ids) do |key|
104
- activity(key).size
105
- end
106
- end
107
-
108
- def unread_count(user_ids:)
109
- with_response_batched(user_ids) do |key|
110
- activity(key).count { |event| event.at > user_record(key).last_read.to_f }
111
- end
112
- end
113
-
114
- def last_read(user_ids:)
115
- with_response_batched(user_ids) do |key|
116
- user_record(key).last_read
117
- end
118
- end
119
-
120
- def total_memory_bytes
121
- ObjectSpace.memsize_of(h)
122
- end
123
-
124
- def total_users
125
- h.size
126
- end
127
-
128
- private
129
-
130
- #===================================================================
131
- # Methods below operate on a single user only
132
- #
133
-
134
- def changed_activity_size?(key)
135
- ua = activity(key)
136
- size_before = ua.size
137
- yield(key, ua)
138
- size_after = activity(key).size
139
- (size_before > size_after)
140
- end
141
-
142
- def create_user_record
143
- Hashie::Mash.new(
144
- { last_read: 0, activity: SortedSet.new }
145
- )
146
- end
147
-
148
- def user_record(key)
149
- h[key.data] ||= create_user_record
150
- end
151
-
152
- def wipe_user_record(key)
153
- h[key.data] = create_user_record
154
- end
155
-
156
- def activity(key, event = nil)
157
- user_record(key)[:activity] << event if event
158
- user_record(key)[:activity].to_a
159
- end
160
-
161
- def add_event(event, key)
162
- uas = user_record(key)[:activity]
163
- if uas.include?(event)
164
- false
165
- else
166
- uas << event.dup
167
- if uas.size > feed.max_size
168
- uas.delete(uas.to_a.last)
169
- end
170
- true
171
- end
172
- end
173
-
174
- def __last_read(key, _value = nil)
175
- user_record(key)[:last_read]
176
- end
177
-
178
- def __delete(key, event)
179
- user_record(key)[:activity].delete(event)
180
- end
181
-
182
- def create_event(*args, **opts)
183
- ::SimpleFeed::Event.new(*args, **opts)
184
- end
185
- end
186
- end
187
- end
188
- end