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.
Files changed (51) hide show
  1. checksums.yaml +5 -5
  2. data/.envrc +3 -0
  3. data/.github/workflows/rubocop.yml +33 -0
  4. data/.github/workflows/ruby.yml +34 -0
  5. data/.gitignore +2 -1
  6. data/.relaxed-rubocop-2.4.yml +174 -0
  7. data/.rspec +1 -1
  8. data/.rubocop.yml +43 -1150
  9. data/.rubocop_todo.yml +203 -0
  10. data/.travis.yml +7 -10
  11. data/CHANGELOG.md +120 -0
  12. data/Gemfile +4 -0
  13. data/Guardfile +3 -3
  14. data/README.adoc +601 -0
  15. data/Rakefile +5 -6
  16. data/bin/console +1 -0
  17. data/codecov.yml +28 -0
  18. data/examples/shared/provider_example.rb +51 -26
  19. data/lib/simple-feed.rb +2 -0
  20. data/lib/simple_feed.rb +2 -0
  21. data/lib/simplefeed/activity/base.rb +2 -0
  22. data/lib/simplefeed/activity/multi_user.rb +8 -6
  23. data/lib/simplefeed/activity/single_user.rb +7 -6
  24. data/lib/simplefeed/dsl/activities.rb +4 -3
  25. data/lib/simplefeed/dsl/formatter.rb +79 -40
  26. data/lib/simplefeed/dsl.rb +3 -1
  27. data/lib/simplefeed/event.rb +52 -13
  28. data/lib/simplefeed/feed.rb +36 -28
  29. data/lib/simplefeed/providers/base/provider.rb +7 -4
  30. data/lib/simplefeed/providers/hash.rb +2 -0
  31. data/lib/simplefeed/providers/key.rb +60 -36
  32. data/lib/simplefeed/providers/proxy.rb +28 -14
  33. data/lib/simplefeed/providers/redis/driver.rb +25 -27
  34. data/lib/simplefeed/providers/redis/provider.rb +41 -39
  35. data/lib/simplefeed/providers/redis/stats.rb +12 -13
  36. data/lib/simplefeed/providers/redis.rb +2 -0
  37. data/lib/simplefeed/providers.rb +24 -10
  38. data/lib/simplefeed/response.rb +7 -7
  39. data/lib/simplefeed/version.rb +3 -1
  40. data/lib/simplefeed.rb +27 -21
  41. data/man/running-example-redis-debug.png +0 -0
  42. data/man/running-example.png +0 -0
  43. data/man/sf-color-dump.png +0 -0
  44. data/simple-feed.gemspec +23 -16
  45. metadata +115 -44
  46. data/README.md +0 -415
  47. data/examples/hash_provider_example.rb +0 -24
  48. data/lib/simplefeed/key/template.rb +0 -52
  49. data/lib/simplefeed/key/type.rb +0 -26
  50. data/lib/simplefeed/providers/hash/paginator.rb +0 -31
  51. 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