simple-feed 2.0.2 → 3.1.2
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 +5 -5
- data/.envrc +3 -0
- data/.github/workflows/rubocop.yml +33 -0
- data/.github/workflows/ruby.yml +34 -0
- data/.gitignore +2 -1
- data/.relaxed-rubocop-2.4.yml +174 -0
- data/.rspec +1 -1
- data/.rubocop.yml +43 -1150
- data/.rubocop_todo.yml +203 -0
- data/.travis.yml +7 -10
- data/CHANGELOG.md +120 -0
- data/Gemfile +4 -0
- data/Guardfile +3 -3
- data/README.adoc +601 -0
- data/Rakefile +5 -6
- data/bin/console +1 -0
- data/codecov.yml +28 -0
- data/examples/shared/provider_example.rb +51 -26
- data/lib/simple-feed.rb +2 -0
- data/lib/simple_feed.rb +2 -0
- data/lib/simplefeed/activity/base.rb +2 -0
- data/lib/simplefeed/activity/multi_user.rb +8 -6
- data/lib/simplefeed/activity/single_user.rb +7 -6
- data/lib/simplefeed/dsl/activities.rb +4 -3
- data/lib/simplefeed/dsl/formatter.rb +79 -40
- data/lib/simplefeed/dsl.rb +3 -1
- data/lib/simplefeed/event.rb +52 -13
- data/lib/simplefeed/feed.rb +36 -28
- data/lib/simplefeed/providers/base/provider.rb +7 -4
- data/lib/simplefeed/providers/hash.rb +2 -0
- data/lib/simplefeed/providers/key.rb +60 -36
- data/lib/simplefeed/providers/proxy.rb +28 -14
- data/lib/simplefeed/providers/redis/driver.rb +25 -27
- data/lib/simplefeed/providers/redis/provider.rb +41 -39
- data/lib/simplefeed/providers/redis/stats.rb +12 -13
- data/lib/simplefeed/providers/redis.rb +2 -0
- data/lib/simplefeed/providers.rb +24 -10
- data/lib/simplefeed/response.rb +7 -7
- data/lib/simplefeed/version.rb +3 -1
- data/lib/simplefeed.rb +27 -21
- data/man/running-example-redis-debug.png +0 -0
- data/man/running-example.png +0 -0
- data/man/sf-color-dump.png +0 -0
- data/simple-feed.gemspec +23 -16
- metadata +115 -44
- data/README.md +0 -415
- data/examples/hash_provider_example.rb +0 -24
- data/lib/simplefeed/key/template.rb +0 -52
- data/lib/simplefeed/key/type.rb +0 -26
- data/lib/simplefeed/providers/hash/paginator.rb +0 -31
- data/lib/simplefeed/providers/hash/provider.rb +0 -198
@@ -1,198 +0,0 @@
|
|
1
|
-
require 'base62-rb'
|
2
|
-
require 'hashie'
|
3
|
-
require 'set'
|
4
|
-
|
5
|
-
begin
|
6
|
-
require 'knjrbfw'
|
7
|
-
rescue LoadError
|
8
|
-
end
|
9
|
-
|
10
|
-
require 'simplefeed/event'
|
11
|
-
require_relative 'paginator'
|
12
|
-
require_relative '../key'
|
13
|
-
require_relative '../base/provider'
|
14
|
-
|
15
|
-
module SimpleFeed
|
16
|
-
module Providers
|
17
|
-
module Hash
|
18
|
-
class Provider < ::SimpleFeed::Providers::Base::Provider
|
19
|
-
attr_accessor :h
|
20
|
-
|
21
|
-
include SimpleFeed::Providers::Hash::Paginator
|
22
|
-
|
23
|
-
def self.from_yaml(file)
|
24
|
-
self.new(YAML.load(File.read(file)))
|
25
|
-
end
|
26
|
-
|
27
|
-
def initialize(**opts)
|
28
|
-
self.h = {}
|
29
|
-
h.merge!(opts)
|
30
|
-
end
|
31
|
-
|
32
|
-
def store(user_ids:, value:, at: Time.now)
|
33
|
-
event = create_event(value, at)
|
34
|
-
with_response_batched(user_ids) do |key|
|
35
|
-
add_event(event, key)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def delete(user_ids:, value:, at: nil)
|
40
|
-
event = create_event(value, at)
|
41
|
-
with_response_batched(user_ids) do |key|
|
42
|
-
changed_activity_size?(key) do
|
43
|
-
__delete(key, event)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def delete_if(user_ids:, &block)
|
49
|
-
with_response_batched(user_ids) do |key|
|
50
|
-
activity(key).map do |event|
|
51
|
-
if yield(event, key.user_id)
|
52
|
-
__delete(key, event)
|
53
|
-
event
|
54
|
-
else
|
55
|
-
nil
|
56
|
-
end
|
57
|
-
end.compact
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def wipe(user_ids:)
|
62
|
-
with_response_batched(user_ids) do |key|
|
63
|
-
deleted = activity(key).size > 0
|
64
|
-
wipe_user_record(key)
|
65
|
-
deleted
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def paginate(user_ids:,
|
70
|
-
page:,
|
71
|
-
per_page: feed.per_page,
|
72
|
-
with_total: false,
|
73
|
-
reset_last_read: false)
|
74
|
-
|
75
|
-
reset_last_read_value(user_ids: user_ids, at: reset_last_read) if reset_last_read
|
76
|
-
|
77
|
-
with_response_batched(user_ids) do |key|
|
78
|
-
activity = activity(key)
|
79
|
-
result = (page && page > 0) ? activity[((page - 1) * per_page)...(page * per_page)] : activity
|
80
|
-
with_total ? { events: result, total_count: activity.length } : result
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def fetch(user_ids:, since: nil, reset_last_read: false)
|
85
|
-
response = with_response_batched(user_ids) do |key|
|
86
|
-
if since == :unread
|
87
|
-
activity(key).reject { |event| event.at < user_record(key).last_read.to_f }
|
88
|
-
elsif since
|
89
|
-
activity(key).reject { |event| event.at < since.to_f }
|
90
|
-
else
|
91
|
-
activity(key)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
reset_last_read_value(user_ids: user_ids, at: reset_last_read) if reset_last_read
|
95
|
-
|
96
|
-
response
|
97
|
-
end
|
98
|
-
|
99
|
-
def reset_last_read(user_ids:, at: Time.now)
|
100
|
-
with_response_batched(user_ids) do |key|
|
101
|
-
user_record(key)[:last_read] = at
|
102
|
-
at
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def total_count(user_ids:)
|
107
|
-
with_response_batched(user_ids) do |key|
|
108
|
-
activity(key).size
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
def unread_count(user_ids:)
|
113
|
-
with_response_batched(user_ids) do |key|
|
114
|
-
activity(key).count { |event| event.at > user_record(key).last_read.to_f }
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
def last_read(user_ids:)
|
119
|
-
with_response_batched(user_ids) do |key|
|
120
|
-
user_record(key).last_read
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
def total_memory_bytes
|
125
|
-
if defined?(::Knj)
|
126
|
-
analyzer = Knj::Memory_analyzer::Object_size_counter.new(self.h)
|
127
|
-
analyzer.calculate_size
|
128
|
-
else
|
129
|
-
raise LoadError, 'Please run "gem install knjrbfw" to get accurate hash size'
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
def total_users
|
134
|
-
self.h.size
|
135
|
-
end
|
136
|
-
|
137
|
-
private
|
138
|
-
|
139
|
-
#===================================================================
|
140
|
-
# Methods below operate on a single user only
|
141
|
-
#
|
142
|
-
|
143
|
-
|
144
|
-
def changed_activity_size?(key)
|
145
|
-
ua = activity(key)
|
146
|
-
size_before = ua.size
|
147
|
-
yield(key, ua)
|
148
|
-
size_after = activity(key).size
|
149
|
-
(size_before > size_after)
|
150
|
-
end
|
151
|
-
|
152
|
-
def create_user_record
|
153
|
-
Hashie::Mash.new(
|
154
|
-
{ last_read: 0, activity: SortedSet.new }
|
155
|
-
)
|
156
|
-
end
|
157
|
-
|
158
|
-
def user_record(key)
|
159
|
-
h[key.data] ||= create_user_record
|
160
|
-
end
|
161
|
-
|
162
|
-
def wipe_user_record(key)
|
163
|
-
h[key.data] = create_user_record
|
164
|
-
end
|
165
|
-
|
166
|
-
def activity(key, event = nil)
|
167
|
-
user_record(key)[:activity] << event if event
|
168
|
-
user_record(key)[:activity].to_a
|
169
|
-
end
|
170
|
-
|
171
|
-
def add_event(event, key)
|
172
|
-
uas = user_record(key)[:activity]
|
173
|
-
if uas.include?(event)
|
174
|
-
false
|
175
|
-
else
|
176
|
-
uas << event.dup
|
177
|
-
if uas.size > feed.max_size
|
178
|
-
uas.delete(uas.to_a.last)
|
179
|
-
end
|
180
|
-
true
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
|
-
def __last_read(key, value = nil)
|
185
|
-
user_record(key)[:last_read]
|
186
|
-
end
|
187
|
-
|
188
|
-
def __delete(key, event)
|
189
|
-
user_record(key)[:activity].delete(event)
|
190
|
-
end
|
191
|
-
|
192
|
-
def create_event(*args, **opts)
|
193
|
-
::SimpleFeed::Event.new(*args, **opts)
|
194
|
-
end
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|
198
|
-
end
|