timed-rediscounter 1.0.8 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ad3846ba1020380b3c61805ec42926d803ce47f8
4
- data.tar.gz: 00d190036cca8293da2e1737a38173ab5eaf0db0
3
+ metadata.gz: 3ab171bfcc29c9c01be174d50a66d73d5cd17c66
4
+ data.tar.gz: 696ebb57d229433cdb0501d4bddcab570e25edfe
5
5
  SHA512:
6
- metadata.gz: 3ad65fc08d34f3443e79b4e4acc907536623d79d205ac06fd0c8622cb7d0b7251d0f053e99f0f85364c546d08ace3f708b4bc1d7c09266586074020167a20658
7
- data.tar.gz: 4dbdb39929f5160d2429c0dd14c359b87b494a28d40e6f219ec357beb9d6d24ae30c95b7043fe5a9d9d396aa264acfc0cb75855773f7908288531599f6f85693
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
@@ -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
- return redis.multi do
96
+
97
+ redis.multi do
94
98
  periods.each do |period|
95
- redis.hincrby( period_key(period), convert_time_to_period_hash_key(time,period), offset)
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=nil)
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
@@ -1,5 +1,5 @@
1
1
  module Timed
2
2
  module Rediscounter
3
- VERSION = "1.0.8"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
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.8
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-09-26 00:00:00.000000000 Z
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.4.8
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