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 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