redlics 0.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 +7 -0
- data/.gitignore +6 -0
- data/.travis.yml +24 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +64 -0
- data/Rakefile +9 -0
- data/lib/redlics.rb +94 -0
- data/lib/redlics/config.rb +62 -0
- data/lib/redlics/connection.rb +79 -0
- data/lib/redlics/counter.rb +94 -0
- data/lib/redlics/exception.rb +30 -0
- data/lib/redlics/granularity.rb +49 -0
- data/lib/redlics/key.rb +244 -0
- data/lib/redlics/lua/script.lua +82 -0
- data/lib/redlics/operators.rb +51 -0
- data/lib/redlics/query.rb +234 -0
- data/lib/redlics/query/operation.rb +135 -0
- data/lib/redlics/time_frame.rb +110 -0
- data/lib/redlics/tracker.rb +64 -0
- data/lib/redlics/version.rb +4 -0
- data/redlics.gemspec +33 -0
- data/test/redlics_test.rb +13 -0
- metadata +167 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
module Redlics
|
2
|
+
|
3
|
+
# Tracker class
|
4
|
+
module Tracker
|
5
|
+
|
6
|
+
# Context constant for given class.
|
7
|
+
CONTEXT = Redlics::CONTEXTS[:tracker].freeze
|
8
|
+
|
9
|
+
extend self
|
10
|
+
|
11
|
+
|
12
|
+
# Track for a given event and object id with options.
|
13
|
+
#
|
14
|
+
# @param *args [Array] list of arguments for track
|
15
|
+
# @return [Array] list of tracked granularities
|
16
|
+
def track(*args, &block)
|
17
|
+
return track_with_block(&block) if block_given?
|
18
|
+
return track_with_hash if args.first.is_a?(Hash)
|
19
|
+
track_with_args(*args)
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
# Track with hash.
|
26
|
+
#
|
27
|
+
# @param options [Hash] configuration options
|
28
|
+
# @return [Array] list of tracked granularities
|
29
|
+
def track_with_hash(options)
|
30
|
+
Granularity.validate(CONTEXT, options[:granularity]).each do |granularity|
|
31
|
+
key = Key.name(CONTEXT, options[:event], granularity, options[:past])
|
32
|
+
Redlics.redis.pipelined do |redis|
|
33
|
+
redis.setbit(key, options[:id].to_i, 1)
|
34
|
+
redis.expire(key, options[:expiration_for] && options[:expiration_for][granularity] || Redlics.config.tracker_expirations[granularity])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
# Track with hash.
|
41
|
+
#
|
42
|
+
# @param [&Block] a block with configuration options
|
43
|
+
# @return [Array] list of tracked granularities
|
44
|
+
def track_with_block
|
45
|
+
yield options = OpenStruct.new
|
46
|
+
track_with_hash(options)
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
# Track with hash.
|
51
|
+
#
|
52
|
+
# @param *args [Array] list of arguments for track
|
53
|
+
# @return [Array] list of tracked granularities
|
54
|
+
def track_with_args(*args)
|
55
|
+
options = args.last.instance_of?(Hash) ? args.pop : {}
|
56
|
+
options.merge!({
|
57
|
+
event: args[0],
|
58
|
+
id: args[1]
|
59
|
+
})
|
60
|
+
track_with_hash(options)
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
data/redlics.gemspec
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'redlics/version'
|
5
|
+
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = 'redlics'
|
9
|
+
spec.version = Redlics::VERSION
|
10
|
+
spec.authors = ['Egon Zemmer']
|
11
|
+
spec.email = ['office@phlegx.com']
|
12
|
+
spec.date = Time.now.utc.strftime('%Y-%m-%d')
|
13
|
+
spec.homepage = 'http://github.com/phlegx/#{s.name}'
|
14
|
+
|
15
|
+
spec.summary = %q{Redis analytics with tracks and counts.}
|
16
|
+
spec.description = %q{Redis analytics with tracks (using bitmaps) and counts (using buckets)
|
17
|
+
encoding numbers in Redis keys and values.}
|
18
|
+
spec.license = 'MIT'
|
19
|
+
|
20
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
21
|
+
spec.test_files = Dir.glob('test/*_test.rb')
|
22
|
+
spec.require_paths = ['lib']
|
23
|
+
|
24
|
+
spec.required_ruby_version = '>= 2.0.0'
|
25
|
+
spec.add_dependency 'connection_pool', '~> 2.2'
|
26
|
+
spec.add_dependency 'redis', '~> 3.2'
|
27
|
+
spec.add_dependency 'redis-namespace', '~> 1.5'
|
28
|
+
spec.add_dependency 'activesupport', '~> 4.2'
|
29
|
+
spec.add_dependency 'msgpack', '~> 0.7'
|
30
|
+
|
31
|
+
spec.add_development_dependency 'rake', '~> 11.0'
|
32
|
+
spec.add_development_dependency 'minitest', '~> 5.8'
|
33
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
|
3
|
+
|
4
|
+
|
5
|
+
describe Redlics do
|
6
|
+
subject { Redlics }
|
7
|
+
|
8
|
+
|
9
|
+
it 'must respond positively' do
|
10
|
+
subject.redis.namespace.must_equal Redlics.config.namespace
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
metadata
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: redlics
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Egon Zemmer
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-04-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: connection_pool
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: redis
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.2'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.2'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: redis-namespace
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.5'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: activesupport
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.2'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '4.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: msgpack
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.7'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.7'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '11.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '11.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: minitest
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '5.8'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '5.8'
|
111
|
+
description: |-
|
112
|
+
Redis analytics with tracks (using bitmaps) and counts (using buckets)
|
113
|
+
encoding numbers in Redis keys and values.
|
114
|
+
email:
|
115
|
+
- office@phlegx.com
|
116
|
+
executables: []
|
117
|
+
extensions: []
|
118
|
+
extra_rdoc_files: []
|
119
|
+
files:
|
120
|
+
- ".gitignore"
|
121
|
+
- ".travis.yml"
|
122
|
+
- Gemfile
|
123
|
+
- LICENSE.txt
|
124
|
+
- README.md
|
125
|
+
- Rakefile
|
126
|
+
- lib/redlics.rb
|
127
|
+
- lib/redlics/config.rb
|
128
|
+
- lib/redlics/connection.rb
|
129
|
+
- lib/redlics/counter.rb
|
130
|
+
- lib/redlics/exception.rb
|
131
|
+
- lib/redlics/granularity.rb
|
132
|
+
- lib/redlics/key.rb
|
133
|
+
- lib/redlics/lua/script.lua
|
134
|
+
- lib/redlics/operators.rb
|
135
|
+
- lib/redlics/query.rb
|
136
|
+
- lib/redlics/query/operation.rb
|
137
|
+
- lib/redlics/time_frame.rb
|
138
|
+
- lib/redlics/tracker.rb
|
139
|
+
- lib/redlics/version.rb
|
140
|
+
- redlics.gemspec
|
141
|
+
- test/redlics_test.rb
|
142
|
+
homepage: http://github.com/phlegx/#{s.name}
|
143
|
+
licenses:
|
144
|
+
- MIT
|
145
|
+
metadata: {}
|
146
|
+
post_install_message:
|
147
|
+
rdoc_options: []
|
148
|
+
require_paths:
|
149
|
+
- lib
|
150
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: 2.0.0
|
155
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
requirements: []
|
161
|
+
rubyforge_project:
|
162
|
+
rubygems_version: 2.4.8
|
163
|
+
signing_key:
|
164
|
+
specification_version: 4
|
165
|
+
summary: Redis analytics with tracks and counts.
|
166
|
+
test_files:
|
167
|
+
- test/redlics_test.rb
|