timed-rediscounter 1.0.8 → 1.1.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.
- checksums.yaml +4 -4
- data/README.md +15 -7
- data/lib/timed/rediscounter.rb +24 -7
- data/lib/timed/rediscounter/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ab171bfcc29c9c01be174d50a66d73d5cd17c66
|
4
|
+
data.tar.gz: 696ebb57d229433cdb0501d4bddcab570e25edfe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53088c48c58c7244c5fa60b8460fe547ba91da289e33219ed377ae1d7a468320faf67d3e09b8c15bc25dac820a89eded9a0b74be29a432779d4316faa11cebbc
|
7
|
+
data.tar.gz: c755cdf26a99c8c715826893e5631a91a043b6700d64d36dd7b528957ea5cf1d91fddb5cf5da1f8c8f9fad54737a96cbbfb7f47644ec751c654f2e6d3bdd8335
|
data/README.md
CHANGED
@@ -1,8 +1,5 @@
|
|
1
1
|
# Timed::Rediscounter
|
2
2
|
|
3
|
-
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/timed/rediscounter`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
|
-
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
6
3
|
|
7
4
|
## Installation
|
8
5
|
|
@@ -48,8 +45,6 @@ obj.test1.incr()
|
|
48
45
|
obj.test1.incr(offset: 10)
|
49
46
|
#if you want to increment for a specific timestamp
|
50
47
|
obj.test1.incr(time: 10.years.ago)
|
51
|
-
#if you want to increment for a specific timestamp
|
52
|
-
obj.test1.incr(time: 10.years.ago)
|
53
48
|
#if you only want to increment for specific periods
|
54
49
|
obj.test1.incr(periods: [:year])
|
55
50
|
|
@@ -57,12 +52,25 @@ obj.test1.incr(periods: [:year])
|
|
57
52
|
##Results
|
58
53
|
|
59
54
|
#return a timestamp hash with timestamp as key and count as value
|
60
|
-
obj.history(1.minute.ago)
|
55
|
+
obj.test1.history(1.minute.ago)
|
56
|
+
|
57
|
+
|
58
|
+
#optional with step as second argument.
|
59
|
+
#normally the step will be calculated by given range
|
60
|
+
obj.test1.history(1.year.ago,:minute)
|
61
|
+
|
61
62
|
|
62
63
|
#returns the sum in the given range
|
63
|
-
obj.sum(1.minute.ago..Time.now) #or obj.sum(1.minute.ago)
|
64
|
+
obj.test1.sum(1.minute.ago..Time.now) #or obj.sum(1.minute.ago)
|
65
|
+
|
64
66
|
|
67
|
+
```
|
65
68
|
|
69
|
+
## Deleting and expiring
|
70
|
+
|
71
|
+
```ruby
|
72
|
+
obj.test1.delete_keys
|
73
|
+
obj.test1.expire_keys(10) #in seconds
|
66
74
|
```
|
67
75
|
|
68
76
|
## Development
|
data/lib/timed/rediscounter.rb
CHANGED
@@ -70,13 +70,15 @@ module Timed
|
|
70
70
|
|
71
71
|
Periods = [:minute, :hour, :day, :month, :year].freeze
|
72
72
|
|
73
|
-
attr_reader :periods,:key
|
73
|
+
attr_reader :periods,:key,:expires_in
|
74
|
+
|
74
75
|
def initialize(key,default_options={})
|
75
76
|
@key = key
|
76
77
|
@periods = (default_options.delete(:periods) || Periods)
|
77
78
|
@redis = (default_options.delete(:redis) || Timed::Rediscounter.redis)
|
78
79
|
raise_if_not_valid_periods(@periods)
|
79
80
|
@default_options = default_options.to_h
|
81
|
+
@expires_in = @default_options.fetch(:expires_in, 2.year.to_i)
|
80
82
|
end
|
81
83
|
|
82
84
|
# Increments all given period keys by a given offset
|
@@ -89,15 +91,20 @@ module Timed
|
|
89
91
|
periods = (opt[:periods] || @periods)
|
90
92
|
raise_if_not_valid_periods(periods)
|
91
93
|
|
94
|
+
result = []
|
92
95
|
if offset != 0
|
93
|
-
|
96
|
+
|
97
|
+
redis.multi do
|
94
98
|
periods.each do |period|
|
95
|
-
|
99
|
+
p_key = period_key(period)
|
100
|
+
result << (redis.hincrby p_key, convert_time_to_period_hash_key(time,period), offset)
|
101
|
+
redis.expire p_key, @expires_in if @expires_in
|
96
102
|
end
|
97
103
|
end
|
104
|
+
|
98
105
|
end
|
99
106
|
|
100
|
-
return
|
107
|
+
return result.collect(&:value)
|
101
108
|
end
|
102
109
|
|
103
110
|
# Returns a Hash by a given range or a period
|
@@ -121,6 +128,17 @@ module Timed
|
|
121
128
|
end
|
122
129
|
end
|
123
130
|
|
131
|
+
def summed_up_history(range_arg,period=nil)
|
132
|
+
redis_key, hash_keys = build_redishash_arguments(range_arg,period)
|
133
|
+
h = {}
|
134
|
+
return h if hash_keys.empty?
|
135
|
+
redis.mapped_hmget(redis_key, *hash_keys).inject(0) do |s,(k,v)|
|
136
|
+
h[Time.at(k)] = (s += v.to_i)
|
137
|
+
s
|
138
|
+
end
|
139
|
+
return h
|
140
|
+
end
|
141
|
+
|
124
142
|
def sum(range_arg,period=nil)
|
125
143
|
redis_key, hash_keys = build_redishash_arguments(range_arg,period)
|
126
144
|
return 0 if hash_keys.empty?
|
@@ -130,8 +148,7 @@ module Timed
|
|
130
148
|
#Expiring all period Keys
|
131
149
|
#
|
132
150
|
#expire_in in seconds
|
133
|
-
def expire_keys(expire_in
|
134
|
-
expire_in ||= @default_options.fetch(:expire_in, 1.year).to_i
|
151
|
+
def expire_keys(expire_in=@expires_in)
|
135
152
|
redis.multi do
|
136
153
|
Periods.each { |period| redis.expire period_key(period), expire_in }
|
137
154
|
end
|
@@ -155,7 +172,7 @@ module Timed
|
|
155
172
|
def build_redishash_arguments(range_arg,period=nil)
|
156
173
|
case range_arg
|
157
174
|
when Time,Date
|
158
|
-
range = (range_arg..Time.current)
|
175
|
+
range = (range_arg.to_time..Time.current)
|
159
176
|
when String
|
160
177
|
range = (Time.parse(range_arg)..Time.current)
|
161
178
|
when Range
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timed-rediscounter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christopher Geduhn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
@@ -118,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
118
|
version: '0'
|
119
119
|
requirements: []
|
120
120
|
rubyforge_project:
|
121
|
-
rubygems_version: 2.
|
121
|
+
rubygems_version: 2.6.13
|
122
122
|
signing_key:
|
123
123
|
specification_version: 4
|
124
124
|
summary: A timed counter based on redis hashes
|