minuteman 1.0.3 → 2.0.0.pre

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 (44) hide show
  1. checksums.yaml +7 -0
  2. data/.gems +3 -0
  3. data/.travis.yml +4 -3
  4. data/ORIGIN.md +21 -0
  5. data/README.md +115 -122
  6. data/Rakefile +3 -3
  7. data/SPEC.md +21 -0
  8. data/lib/minuteman.rb +88 -122
  9. data/lib/minuteman/analyzable.rb +96 -0
  10. data/lib/minuteman/analyzer.rb +21 -0
  11. data/lib/minuteman/configuration.rb +25 -0
  12. data/lib/minuteman/counter.rb +21 -0
  13. data/lib/minuteman/event.rb +12 -0
  14. data/lib/minuteman/lua/operations.lua +37 -0
  15. data/lib/minuteman/model.rb +36 -0
  16. data/lib/minuteman/result.rb +12 -0
  17. data/lib/minuteman/trigger.rb +4 -0
  18. data/lib/minuteman/user.rb +38 -0
  19. data/minuteman.gemspec +4 -5
  20. data/test/helper.rb +2 -0
  21. data/test/minuteman_bench.rb +72 -0
  22. data/test/minuteman_test.rb +204 -0
  23. metadata +44 -73
  24. data/Gemfile +0 -4
  25. data/Gemfile.lock +0 -30
  26. data/lib/minuteman/bit_operations.rb +0 -97
  27. data/lib/minuteman/bit_operations/data.rb +0 -33
  28. data/lib/minuteman/bit_operations/operation.rb +0 -115
  29. data/lib/minuteman/bit_operations/plain.rb +0 -34
  30. data/lib/minuteman/bit_operations/result.rb +0 -15
  31. data/lib/minuteman/bit_operations/with_data.rb +0 -56
  32. data/lib/minuteman/keys_methods.rb +0 -23
  33. data/lib/minuteman/time_events.rb +0 -18
  34. data/lib/minuteman/time_span.rb +0 -36
  35. data/lib/minuteman/time_spans.rb +0 -7
  36. data/lib/minuteman/time_spans/day.rb +0 -17
  37. data/lib/minuteman/time_spans/hour.rb +0 -19
  38. data/lib/minuteman/time_spans/minute.rb +0 -19
  39. data/lib/minuteman/time_spans/month.rb +0 -17
  40. data/lib/minuteman/time_spans/week.rb +0 -18
  41. data/lib/minuteman/time_spans/year.rb +0 -17
  42. data/test/bench/minuteman_bench.rb +0 -37
  43. data/test/test_helper.rb +0 -9
  44. data/test/unit/minuteman_test.rb +0 -225
metadata CHANGED
@@ -1,80 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minuteman
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
5
- prerelease:
4
+ version: 2.0.0.pre
6
5
  platform: ruby
7
6
  authors:
8
7
  - elcuervo
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-14 00:00:00.000000000 Z
11
+ date: 2015-10-27 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: redis
14
+ name: redic
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: 3.0.3
19
+ version: 1.5.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: 3.0.3
26
+ version: 1.5.0
30
27
  - !ruby/object:Gem::Dependency
31
- name: minitest
28
+ name: ohm
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
- version: 4.3.0
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 4.3.0
46
- - !ruby/object:Gem::Dependency
47
- name: minitest-given
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- version: 3.0.0
54
- type: :development
33
+ version: 2.3.0
34
+ type: :runtime
55
35
  prerelease: false
56
36
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
37
  requirements:
59
- - - ~>
38
+ - - "~>"
60
39
  - !ruby/object:Gem::Version
61
- version: 3.0.0
40
+ version: 2.3.0
62
41
  - !ruby/object:Gem::Dependency
63
- name: redis-namespace
42
+ name: cutest
64
43
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
44
  requirements:
67
- - - ~>
45
+ - - "~>"
68
46
  - !ruby/object:Gem::Version
69
- version: 1.2.1
47
+ version: 1.2.2
70
48
  type: :development
71
49
  prerelease: false
72
50
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
51
  requirements:
75
- - - ~>
52
+ - - "~>"
76
53
  - !ruby/object:Gem::Version
77
- version: 1.2.1
54
+ version: 1.2.2
78
55
  description: Fast and furious tracking system using Redis bitwise operations
79
56
  email:
80
57
  - yo@brunoaguirre.com
@@ -82,61 +59,55 @@ executables: []
82
59
  extensions: []
83
60
  extra_rdoc_files: []
84
61
  files:
85
- - .travis.yml
86
- - Gemfile
87
- - Gemfile.lock
62
+ - ".gems"
63
+ - ".travis.yml"
88
64
  - HUGS
89
65
  - LICENSE
66
+ - ORIGIN.md
90
67
  - README.md
91
68
  - Rakefile
69
+ - SPEC.md
92
70
  - lib/minuteman.rb
93
- - lib/minuteman/bit_operations.rb
94
- - lib/minuteman/bit_operations/data.rb
95
- - lib/minuteman/bit_operations/operation.rb
96
- - lib/minuteman/bit_operations/plain.rb
97
- - lib/minuteman/bit_operations/result.rb
98
- - lib/minuteman/bit_operations/with_data.rb
99
- - lib/minuteman/keys_methods.rb
100
- - lib/minuteman/time_events.rb
101
- - lib/minuteman/time_span.rb
102
- - lib/minuteman/time_spans.rb
103
- - lib/minuteman/time_spans/day.rb
104
- - lib/minuteman/time_spans/hour.rb
105
- - lib/minuteman/time_spans/minute.rb
106
- - lib/minuteman/time_spans/month.rb
107
- - lib/minuteman/time_spans/week.rb
108
- - lib/minuteman/time_spans/year.rb
71
+ - lib/minuteman/analyzable.rb
72
+ - lib/minuteman/analyzer.rb
73
+ - lib/minuteman/configuration.rb
74
+ - lib/minuteman/counter.rb
75
+ - lib/minuteman/event.rb
76
+ - lib/minuteman/lua/operations.lua
77
+ - lib/minuteman/model.rb
78
+ - lib/minuteman/result.rb
79
+ - lib/minuteman/trigger.rb
80
+ - lib/minuteman/user.rb
109
81
  - minuteman.gemspec
110
- - test/bench/minuteman_bench.rb
111
- - test/test_helper.rb
112
- - test/unit/minuteman_test.rb
82
+ - test/helper.rb
83
+ - test/minuteman_bench.rb
84
+ - test/minuteman_test.rb
113
85
  homepage: http://github.com/elcuervo/minuteman
114
86
  licenses:
115
87
  - MIT
116
88
  - HUGWARE
89
+ metadata: {}
117
90
  post_install_message:
118
91
  rdoc_options: []
119
92
  require_paths:
120
93
  - lib
121
94
  required_ruby_version: !ruby/object:Gem::Requirement
122
- none: false
123
95
  requirements:
124
- - - ! '>='
96
+ - - ">="
125
97
  - !ruby/object:Gem::Version
126
98
  version: '0'
127
99
  required_rubygems_version: !ruby/object:Gem::Requirement
128
- none: false
129
100
  requirements:
130
- - - ! '>='
101
+ - - ">"
131
102
  - !ruby/object:Gem::Version
132
- version: '0'
103
+ version: 1.3.1
133
104
  requirements: []
134
105
  rubyforge_project:
135
- rubygems_version: 1.8.23
106
+ rubygems_version: 2.2.2
136
107
  signing_key:
137
- specification_version: 3
108
+ specification_version: 4
138
109
  summary: Bit Analytics
139
110
  test_files:
140
- - test/bench/minuteman_bench.rb
141
- - test/test_helper.rb
142
- - test/unit/minuteman_test.rb
111
+ - test/helper.rb
112
+ - test/minuteman_bench.rb
113
+ - test/minuteman_test.rb
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- gemspec
4
- gem "rake"
@@ -1,30 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- minuteman (1.0.3)
5
- redis (~> 3.0.3)
6
-
7
- GEM
8
- remote: http://rubygems.org/
9
- specs:
10
- given_core (3.0.0)
11
- sorcerer (>= 0.3.7)
12
- minitest (4.3.2)
13
- minitest-given (3.0.0)
14
- given_core (= 3.0.0)
15
- minitest (> 4.3)
16
- rake (0.9.2.2)
17
- redis (3.0.3)
18
- redis-namespace (1.2.1)
19
- redis (~> 3.0.0)
20
- sorcerer (1.0.0)
21
-
22
- PLATFORMS
23
- ruby
24
-
25
- DEPENDENCIES
26
- minitest (~> 4.3.0)
27
- minitest-given (~> 3.0.0)
28
- minuteman!
29
- rake
30
- redis-namespace (~> 1.2.1)
@@ -1,97 +0,0 @@
1
- require "minuteman/bit_operations/operation"
2
-
3
- # Public: Minuteman core classs
4
- #
5
- class Minuteman
6
- module BitOperations
7
- extend Forwardable
8
-
9
- def_delegators :Minuteman, :safe, :redis
10
-
11
- # Public: Checks for the existance of ids on a given set
12
- #
13
- # ids - Array of ids
14
- #
15
- def include?(*ids)
16
- result = ids.map { |id| getbit(id) }
17
- result.size == 1 ? result.first : result
18
- end
19
-
20
- # Public: Resets the current key
21
- #
22
- def reset
23
- safe { redis.rem(key) }
24
- end
25
-
26
- # Public: Cheks for the amount of ids stored on the current key
27
- #
28
- def length
29
- safe { redis.bitcount(key) }
30
- end
31
-
32
- # Public: Calculates the NOT of the current key
33
- #
34
- def -@
35
- operation("NOT", key)
36
- end
37
- alias :~@ :-@
38
-
39
- # Public: Calculates the substract of one set to another
40
- #
41
- # timespan: Another BitOperations enabled class
42
- #
43
- def -(timespan)
44
- operation("MINUS", timespan)
45
- end
46
-
47
- # Public: Calculates the XOR against another timespan
48
- #
49
- # timespan: Another BitOperations enabled class
50
- #
51
- def ^(timespan)
52
- operation("XOR", timespan)
53
- end
54
-
55
- # Public: Calculates the OR against another timespan
56
- #
57
- # timespan: Another BitOperations enabled class or an Array
58
- #
59
- def |(timespan)
60
- operation("OR", timespan)
61
- end
62
- alias :+ :|
63
-
64
- # Public: Calculates the AND against another timespan
65
- #
66
- # timespan: Another BitOperations enabled class or an Array
67
- #
68
- def &(timespan)
69
- operation("AND", timespan)
70
- end
71
-
72
- private
73
-
74
- # Private: Helper to access the value a given bit
75
- #
76
- # id: The bit
77
- #
78
- def getbit(id)
79
- safe { redis.getbit(key, id) == 1 }
80
- end
81
-
82
- # Private: Cxecutes an operation between the current timespan and another
83
- #
84
- # type: The operation type
85
- # timespan: The given timespan
86
- #
87
- def operation(type, timespan)
88
- operate.call(type, timespan)
89
- end
90
-
91
- # Private: Memoizes the operation class
92
- #
93
- def operate
94
- @_operate ||= Operation.new(self)
95
- end
96
- end
97
- end
@@ -1,33 +0,0 @@
1
- require "minuteman/bit_operations"
2
-
3
- # Public: Minuteman core classs
4
- #
5
- class Minuteman
6
- module BitOperations
7
- # Public: The conversion of an array to an operable class
8
- #
9
- # key - The key where the result it's stored
10
- # data - The original data of the intersection
11
- #
12
- class Data < Struct.new(:key, :data)
13
- include BitOperations
14
- include Enumerable
15
-
16
- def to_ary
17
- data
18
- end
19
-
20
- def size
21
- data.size
22
- end
23
-
24
- def each(&block)
25
- data.each(&block)
26
- end
27
-
28
- def ==(other)
29
- other == data
30
- end
31
- end
32
- end
33
- end
@@ -1,115 +0,0 @@
1
- require "minuteman/bit_operations/plain"
2
- require "minuteman/bit_operations/with_data"
3
-
4
- # Public: Minuteman core classs
5
- #
6
- class Minuteman
7
- module BitOperations
8
- # Public: Handles the operations between two timespans
9
- #
10
- # type: The operation type
11
- # timespan: One of the timespans to be permuted
12
- # other: The other timespan to be permuted
13
- #
14
- class Operation < Struct.new(:timespan)
15
- # Public: Caches operations against Array
16
- #
17
- class Cache
18
- attr_reader :cache
19
-
20
- def initialize
21
- @cache = {}
22
- end
23
-
24
- # Public: Access a cached object
25
- #
26
- # array: The original data set
27
- #
28
- def [](array)
29
- cache.fetch(array.sort.hash)
30
- end
31
-
32
- # Public: Caches an object
33
- #
34
- # array: The original data set
35
- # object: The object to be cached
36
- #
37
- def []=(array, object)
38
- cache[array.sort.hash] = object
39
- end
40
-
41
- # Public: Checks for the existance of an array in the cache
42
- #
43
- # array: The original data set
44
- #
45
- def include?(array)
46
- cache.keys.include?(array.sort.hash) if array.is_a?(Array)
47
- end
48
- end
49
-
50
- attr_reader :other
51
- attr_accessor :cache
52
-
53
- # Public: Initializes the Operation and starts the cache
54
- #
55
- def initialize(*)
56
- super
57
-
58
- @cache = Cache.new
59
- end
60
-
61
- # Public: Executes an operation
62
- #
63
- # type: The string type of the operation
64
- # other: The other set to be operated, can be Array or BitOperations
65
- #
66
- def call(type, other)
67
- @other = other
68
-
69
- return minus_operation if type == "MINUS" && operable?
70
- return cache[other] if cache.include?(other)
71
-
72
- caching { klass.new(type, other, timespan.key).call }
73
- end
74
-
75
- private
76
-
77
- # Private: Executes a minus operation between the sets
78
- #
79
- def minus_operation
80
- timespan ^ (timespan & other)
81
- end
82
-
83
- # Private: Caches any caching capable operation
84
- #
85
- def caching
86
- executed_class = yield
87
- if other.is_a?(Array) && Minuteman.options[:cache]
88
- cache[other] = executed_class
89
- end
90
-
91
- executed_class
92
- end
93
-
94
- # Private: returns the class to use for the operation
95
- #
96
- # timespan: The given timespan
97
- #
98
- def klass
99
- case true
100
- when other.is_a?(String), operable? then Plain
101
- when other.is_a?(Array) then WithData
102
- else raise(TypeError, "Unsupported type")
103
- end
104
- end
105
-
106
- # Private: Checks if a timespan is operable
107
- #
108
- # timespan: The given timespan
109
- #
110
- def operable?
111
- other.class.ancestors.include?(BitOperations)
112
- end
113
- end
114
- end
115
- end