redis-objects-daily-counter 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +23 -20
  3. data/.github/dependabot.yml +19 -0
  4. data/.rubocop.yml +4 -4
  5. data/CHANGELOG.md +38 -16
  6. data/Dockerfile +1 -1
  7. data/Gemfile +1 -1
  8. data/Gemfile.lock +30 -27
  9. data/README.md +81 -33
  10. data/bin/console +1 -2
  11. data/lib/redis/base_counter_object.rb +4 -0
  12. data/lib/redis/base_hash_key_object.rb +40 -0
  13. data/lib/redis/base_set_object.rb +4 -0
  14. data/lib/redis/objects/daily-counter/version.rb +1 -1
  15. data/lib/redis/objects/periodical_counters.rb +40 -0
  16. data/lib/redis/objects/periodical_hashes.rb +50 -0
  17. data/lib/redis/objects/periodical_sets.rb +50 -0
  18. data/lib/redis/periodical_counter.rb +15 -0
  19. data/lib/redis/periodical_hash_key.rb +15 -0
  20. data/lib/redis/periodical_set.rb +15 -0
  21. data/lib/redis/recurring_at_intervals.rb +1 -1
  22. data/lib/redis-objects-daily-counter.rb +16 -38
  23. data/redis-objects-daily-counter.gemspec +1 -1
  24. metadata +12 -28
  25. data/lib/redis/annual_counter.rb +0 -13
  26. data/lib/redis/annual_set.rb +0 -13
  27. data/lib/redis/daily_counter.rb +0 -13
  28. data/lib/redis/daily_set.rb +0 -13
  29. data/lib/redis/hourly_counter.rb +0 -13
  30. data/lib/redis/hourly_set.rb +0 -13
  31. data/lib/redis/minutely_counter.rb +0 -13
  32. data/lib/redis/minutely_set.rb +0 -13
  33. data/lib/redis/monthly_counter.rb +0 -13
  34. data/lib/redis/monthly_set.rb +0 -13
  35. data/lib/redis/objects/annual_counters.rb +0 -41
  36. data/lib/redis/objects/annual_sets.rb +0 -49
  37. data/lib/redis/objects/daily_counters.rb +0 -41
  38. data/lib/redis/objects/daily_sets.rb +0 -49
  39. data/lib/redis/objects/hourly_counters.rb +0 -41
  40. data/lib/redis/objects/hourly_sets.rb +0 -49
  41. data/lib/redis/objects/minutely_counters.rb +0 -41
  42. data/lib/redis/objects/minutely_sets.rb +0 -49
  43. data/lib/redis/objects/monthly_counters.rb +0 -41
  44. data/lib/redis/objects/monthly_sets.rb +0 -49
  45. data/lib/redis/objects/weekly_counters.rb +0 -41
  46. data/lib/redis/objects/weekly_sets.rb +0 -49
  47. data/lib/redis/weekly_counter.rb +0 -13
  48. data/lib/redis/weekly_set.rb +0 -13
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'redis/periodical_hash_key'
4
+
5
+ Redis::PERIODICALS.each do |periodical| # rubocop:disable Metrics/BlockLength
6
+ new_module = Module.new
7
+ new_module.module_eval <<~RUBY, __FILE__, __LINE__ + 1
8
+ def self.included(klass)
9
+ klass.extend ClassMethods
10
+ end
11
+
12
+ # Class methods that appear in your class when you include Redis::Objects.
13
+ module ClassMethods
14
+ # Define a new hash key. It will function like a regular instance
15
+ # method, so it can be used alongside ActiveRecord, DataMapper, etc.
16
+ def #{periodical}_hash_key(name, options = {})
17
+ redis_objects[name.to_sym] = options.merge(type: :dict)
18
+
19
+ mod = Module.new do
20
+ define_method(name) do
21
+ Redis::#{periodical.capitalize}HashKey.new(
22
+ redis_field_key(name), redis_field_redis(name), redis_options(name)
23
+ )
24
+ end
25
+
26
+ define_method(:"#\{name\}=") do |values|
27
+ hash_key = public_send(name)
28
+
29
+ redis.pipelined do
30
+ hash_key.clear
31
+ hash_key.bulk_set(values)
32
+ end
33
+ end
34
+ end
35
+
36
+ if options[:global]
37
+ extend mod
38
+
39
+ # dispatch to class methods
40
+ define_method(name) do
41
+ self.class.public_send(name)
42
+ end
43
+ else
44
+ include mod
45
+ end
46
+ end
47
+ end
48
+ RUBY
49
+ Redis::Objects.const_set("#{periodical.capitalize}Hashes", new_module)
50
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'redis/periodical_set'
4
+
5
+ Redis::PERIODICALS.each do |periodical| # rubocop:disable Metrics/BlockLength
6
+ new_module = Module.new
7
+ new_module.module_eval <<~RUBY, __FILE__, __LINE__ + 1
8
+ def self.included(klass)
9
+ klass.extend ClassMethods
10
+ end
11
+
12
+ # Class methods that appear in your class when you include Redis::Objects.
13
+ module ClassMethods
14
+ # Define a new list. It will function like a regular instance
15
+ # method, so it can be used alongside ActiveRecord, DataMapper, etc.
16
+ def #{periodical}_set(name, options = {})
17
+ redis_objects[name.to_sym] = options.merge(type: :set)
18
+
19
+ mod = Module.new do
20
+ define_method(name) do
21
+ Redis::#{periodical.capitalize}Set.new(
22
+ redis_field_key(name), redis_field_redis(name), redis_options(name)
23
+ )
24
+ end
25
+
26
+ define_method(:"#\{name\}=") do |values|
27
+ set = public_send(name)
28
+
29
+ redis.pipelined do
30
+ set.clear
31
+ set.merge(*values)
32
+ end
33
+ end
34
+ end
35
+
36
+ if options[:global]
37
+ extend mod
38
+
39
+ # dispatch to class methods
40
+ define_method(name) do
41
+ self.class.public_send(name)
42
+ end
43
+ else
44
+ include mod
45
+ end
46
+ end
47
+ end
48
+ RUBY
49
+ Redis::Objects.const_set("#{periodical.capitalize}Sets", new_module)
50
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "#{File.dirname(__FILE__)}/recurring_at_intervals"
4
+ require "#{File.dirname(__FILE__)}/base_counter_object"
5
+
6
+ Redis::PERIODICALS.each do |periodical|
7
+ require "#{File.dirname(__FILE__)}/recurring_at_intervals/#{periodical}"
8
+
9
+ new_class = Class.new(Redis::Counter) do
10
+ include Redis::RecurringAtIntervals
11
+ include Redis::BaseCounterObject
12
+ include const_get("Redis::RecurringAtIntervals::#{periodical.capitalize}")
13
+ end
14
+ Redis.const_set("#{periodical.capitalize}Counter", new_class)
15
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "#{File.dirname(__FILE__)}/recurring_at_intervals"
4
+ require "#{File.dirname(__FILE__)}/base_hash_key_object"
5
+
6
+ Redis::PERIODICALS.each do |periodical|
7
+ require "#{File.dirname(__FILE__)}/recurring_at_intervals/#{periodical}"
8
+
9
+ new_class = Class.new(Redis::HashKey) do
10
+ include Redis::RecurringAtIntervals
11
+ include Redis::BaseHashKeyObject
12
+ include const_get("Redis::RecurringAtIntervals::#{periodical.capitalize}")
13
+ end
14
+ Redis.const_set("#{periodical.capitalize}HashKey", new_class)
15
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "#{File.dirname(__FILE__)}/recurring_at_intervals"
4
+ require "#{File.dirname(__FILE__)}/base_set_object"
5
+
6
+ Redis::PERIODICALS.each do |periodical|
7
+ require "#{File.dirname(__FILE__)}/recurring_at_intervals/#{periodical}"
8
+
9
+ new_class = Class.new(Redis::Set) do
10
+ include Redis::RecurringAtIntervals
11
+ include Redis::BaseSetObject
12
+ include const_get("Redis::RecurringAtIntervals::#{periodical.capitalize}")
13
+ end
14
+ Redis.const_set("#{periodical.capitalize}Set", new_class)
15
+ end
@@ -15,7 +15,7 @@ class Redis
15
15
  elsif length
16
16
  case length <=> 0
17
17
  when 1 then range(date_or_time, next_key(date_or_time, length - 1))
18
- when 0 then []
18
+ when 0 then empty_value
19
19
  when -1 then nil # Ruby does this (a bit weird)
20
20
  end
21
21
  else
@@ -3,34 +3,20 @@
3
3
  require 'redis-objects'
4
4
 
5
5
  class Redis
6
- autoload :DailyCounter, 'redis/daily_counter'
7
- autoload :WeeklyCounter, 'redis/weekly_counter'
8
- autoload :MonthlyCounter, 'redis/monthly_counter'
9
- autoload :AnnualCounter, 'redis/annual_counter'
10
- autoload :HourlyCounter, 'redis/hourly_counter'
11
- autoload :MinutelyCounter, 'redis/minutely_counter'
6
+ PERIODICALS = %w[daily weekly monthly annual hourly minutely].freeze
12
7
 
13
- autoload :DailySet, 'redis/daily_set'
14
- autoload :WeeklySet, 'redis/weekly_set'
15
- autoload :MonthlySet, 'redis/monthly_set'
16
- autoload :AnnualSet, 'redis/annual_set'
17
- autoload :HourlySet, 'redis/hourly_set'
18
- autoload :MinutelySet, 'redis/minutely_set'
8
+ PERIODICALS.each do |periodical|
9
+ autoload :"#{periodical.capitalize}Counter", 'redis/periodical_counter'
10
+ autoload :"#{periodical.capitalize}HashKey", 'redis/periodical_hash_key'
11
+ autoload :"#{periodical.capitalize}Set", 'redis/periodical_set'
12
+ end
19
13
 
20
14
  module Objects
21
- autoload :DailyCounters, 'redis/objects/daily_counters'
22
- autoload :WeeklyCounters, 'redis/objects/weekly_counters'
23
- autoload :MonthlyCounters, 'redis/objects/monthly_counters'
24
- autoload :AnnualCounters, 'redis/objects/annual_counters'
25
- autoload :HourlyCounters, 'redis/objects/hourly_counters'
26
- autoload :MinutelyCounters, 'redis/objects/minutely_counters'
27
-
28
- autoload :DailySets, 'redis/objects/daily_sets'
29
- autoload :WeeklySets, 'redis/objects/weekly_sets'
30
- autoload :MonthlySets, 'redis/objects/monthly_sets'
31
- autoload :AnnualSets, 'redis/objects/annual_sets'
32
- autoload :HourlySets, 'redis/objects/hourly_sets'
33
- autoload :MinutelySets, 'redis/objects/minutely_sets'
15
+ PERIODICALS.each do |periodical|
16
+ autoload :"#{periodical.capitalize}Counters", 'redis/objects/periodical_counters'
17
+ autoload :"#{periodical.capitalize}Hashes", 'redis/objects/periodical_hashes'
18
+ autoload :"#{periodical.capitalize}Sets", 'redis/objects/periodical_sets'
19
+ end
34
20
 
35
21
  class << self
36
22
  alias original_included included
@@ -39,19 +25,11 @@ class Redis
39
25
  original_included(klass)
40
26
 
41
27
  # Pull in each object type
42
- klass.send :include, Redis::Objects::DailyCounters
43
- klass.send :include, Redis::Objects::WeeklyCounters
44
- klass.send :include, Redis::Objects::MonthlyCounters
45
- klass.send :include, Redis::Objects::AnnualCounters
46
- klass.send :include, Redis::Objects::HourlyCounters
47
- klass.send :include, Redis::Objects::MinutelyCounters
48
-
49
- klass.send :include, Redis::Objects::DailySets
50
- klass.send :include, Redis::Objects::WeeklySets
51
- klass.send :include, Redis::Objects::MonthlySets
52
- klass.send :include, Redis::Objects::AnnualSets
53
- klass.send :include, Redis::Objects::HourlySets
54
- klass.send :include, Redis::Objects::MinutelySets
28
+ PERIODICALS.each do |periodical|
29
+ klass.send :include, const_get("Redis::Objects::#{periodical.capitalize}Counters")
30
+ klass.send :include, const_get("Redis::Objects::#{periodical.capitalize}Hashes")
31
+ klass.send :include, const_get("Redis::Objects::#{periodical.capitalize}Sets")
32
+ end
55
33
  end
56
34
  end
57
35
  end
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ['lib']
28
28
 
29
- spec.required_ruby_version = '>= 2.6.0'
29
+ spec.required_ruby_version = '>= 2.7.0'
30
30
 
31
31
  spec.add_dependency 'redis-objects'
32
32
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-objects-daily-counter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ryz310
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-23 00:00:00.000000000 Z
11
+ date: 2022-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis-objects
@@ -33,6 +33,7 @@ extra_rdoc_files: []
33
33
  files:
34
34
  - ".circleci/config.yml"
35
35
  - ".gem_comet.yml"
36
+ - ".github/dependabot.yml"
36
37
  - ".gitignore"
37
38
  - ".rspec"
38
39
  - ".rubocop.yml"
@@ -49,31 +50,16 @@ files:
49
50
  - bin/setup
50
51
  - docker-compose.yml
51
52
  - lib/redis-objects-daily-counter.rb
52
- - lib/redis/annual_counter.rb
53
- - lib/redis/annual_set.rb
54
53
  - lib/redis/base_counter_object.rb
54
+ - lib/redis/base_hash_key_object.rb
55
55
  - lib/redis/base_set_object.rb
56
- - lib/redis/daily_counter.rb
57
- - lib/redis/daily_set.rb
58
- - lib/redis/hourly_counter.rb
59
- - lib/redis/hourly_set.rb
60
- - lib/redis/minutely_counter.rb
61
- - lib/redis/minutely_set.rb
62
- - lib/redis/monthly_counter.rb
63
- - lib/redis/monthly_set.rb
64
- - lib/redis/objects/annual_counters.rb
65
- - lib/redis/objects/annual_sets.rb
66
56
  - lib/redis/objects/daily-counter/version.rb
67
- - lib/redis/objects/daily_counters.rb
68
- - lib/redis/objects/daily_sets.rb
69
- - lib/redis/objects/hourly_counters.rb
70
- - lib/redis/objects/hourly_sets.rb
71
- - lib/redis/objects/minutely_counters.rb
72
- - lib/redis/objects/minutely_sets.rb
73
- - lib/redis/objects/monthly_counters.rb
74
- - lib/redis/objects/monthly_sets.rb
75
- - lib/redis/objects/weekly_counters.rb
76
- - lib/redis/objects/weekly_sets.rb
57
+ - lib/redis/objects/periodical_counters.rb
58
+ - lib/redis/objects/periodical_hashes.rb
59
+ - lib/redis/objects/periodical_sets.rb
60
+ - lib/redis/periodical_counter.rb
61
+ - lib/redis/periodical_hash_key.rb
62
+ - lib/redis/periodical_set.rb
77
63
  - lib/redis/recurring_at_intervals.rb
78
64
  - lib/redis/recurring_at_intervals/annual.rb
79
65
  - lib/redis/recurring_at_intervals/daily.rb
@@ -81,8 +67,6 @@ files:
81
67
  - lib/redis/recurring_at_intervals/minutely.rb
82
68
  - lib/redis/recurring_at_intervals/monthly.rb
83
69
  - lib/redis/recurring_at_intervals/weekly.rb
84
- - lib/redis/weekly_counter.rb
85
- - lib/redis/weekly_set.rb
86
70
  - redis-objects-daily-counter.gemspec
87
71
  homepage: https://github.com/ryz310/redis-objects-daily-counter
88
72
  licenses:
@@ -99,14 +83,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
83
  requirements:
100
84
  - - ">="
101
85
  - !ruby/object:Gem::Version
102
- version: 2.6.0
86
+ version: 2.7.0
103
87
  required_rubygems_version: !ruby/object:Gem::Requirement
104
88
  requirements:
105
89
  - - ">="
106
90
  - !ruby/object:Gem::Version
107
91
  version: '0'
108
92
  requirements: []
109
- rubygems_version: 3.2.22
93
+ rubygems_version: 3.3.11
110
94
  signing_key:
111
95
  specification_version: 4
112
96
  summary: Daily counter within Redis::Objects
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "#{File.dirname(__FILE__)}/recurring_at_intervals"
4
- require "#{File.dirname(__FILE__)}/base_counter_object"
5
- require "#{File.dirname(__FILE__)}/recurring_at_intervals/annual"
6
-
7
- class Redis
8
- class AnnualCounter < Counter
9
- include RecurringAtIntervals
10
- include BaseCounterObject
11
- include Annual
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "#{File.dirname(__FILE__)}/recurring_at_intervals"
4
- require "#{File.dirname(__FILE__)}/base_set_object"
5
- require "#{File.dirname(__FILE__)}/recurring_at_intervals/annual"
6
-
7
- class Redis
8
- class AnnualSet < Set
9
- include RecurringAtIntervals
10
- include BaseSetObject
11
- include Annual
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "#{File.dirname(__FILE__)}/recurring_at_intervals"
4
- require "#{File.dirname(__FILE__)}/base_counter_object"
5
- require "#{File.dirname(__FILE__)}/recurring_at_intervals/daily"
6
-
7
- class Redis
8
- class DailyCounter < Counter
9
- include RecurringAtIntervals
10
- include BaseCounterObject
11
- include Daily
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "#{File.dirname(__FILE__)}/recurring_at_intervals"
4
- require "#{File.dirname(__FILE__)}/base_set_object"
5
- require "#{File.dirname(__FILE__)}/recurring_at_intervals/daily"
6
-
7
- class Redis
8
- class DailySet < Set
9
- include RecurringAtIntervals
10
- include BaseSetObject
11
- include Daily
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "#{File.dirname(__FILE__)}/recurring_at_intervals"
4
- require "#{File.dirname(__FILE__)}/base_counter_object"
5
- require "#{File.dirname(__FILE__)}/recurring_at_intervals/hourly"
6
-
7
- class Redis
8
- class HourlyCounter < Counter
9
- include RecurringAtIntervals
10
- include BaseCounterObject
11
- include Hourly
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "#{File.dirname(__FILE__)}/recurring_at_intervals"
4
- require "#{File.dirname(__FILE__)}/base_set_object"
5
- require "#{File.dirname(__FILE__)}/recurring_at_intervals/hourly"
6
-
7
- class Redis
8
- class HourlySet < Set
9
- include RecurringAtIntervals
10
- include BaseSetObject
11
- include Hourly
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "#{File.dirname(__FILE__)}/recurring_at_intervals"
4
- require "#{File.dirname(__FILE__)}/base_counter_object"
5
- require "#{File.dirname(__FILE__)}/recurring_at_intervals/minutely"
6
-
7
- class Redis
8
- class MinutelyCounter < Counter
9
- include RecurringAtIntervals
10
- include BaseCounterObject
11
- include Minutely
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "#{File.dirname(__FILE__)}/recurring_at_intervals"
4
- require "#{File.dirname(__FILE__)}/base_set_object"
5
- require "#{File.dirname(__FILE__)}/recurring_at_intervals/minutely"
6
-
7
- class Redis
8
- class MinutelySet < Set
9
- include RecurringAtIntervals
10
- include BaseSetObject
11
- include Minutely
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "#{File.dirname(__FILE__)}/recurring_at_intervals"
4
- require "#{File.dirname(__FILE__)}/base_counter_object"
5
- require "#{File.dirname(__FILE__)}/recurring_at_intervals/monthly"
6
-
7
- class Redis
8
- class MonthlyCounter < Counter
9
- include RecurringAtIntervals
10
- include BaseCounterObject
11
- include Monthly
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "#{File.dirname(__FILE__)}/recurring_at_intervals"
4
- require "#{File.dirname(__FILE__)}/base_set_object"
5
- require "#{File.dirname(__FILE__)}/recurring_at_intervals/monthly"
6
-
7
- class Redis
8
- class MonthlySet < Set
9
- include RecurringAtIntervals
10
- include BaseSetObject
11
- include Monthly
12
- end
13
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'redis/annual_counter'
4
- class Redis
5
- module Objects
6
- module AnnualCounters
7
- class << self
8
- def included(klass)
9
- klass.extend ClassMethods
10
- end
11
- end
12
-
13
- module ClassMethods
14
- def annual_counter(name, options = {}) # rubocop:disable Metrics/MethodLength
15
- options[:start] ||= 0
16
- options[:type] ||= (options[:start]).zero? ? :increment : :decrement
17
- redis_objects[name.to_sym] = options.merge(type: :counter)
18
-
19
- mod = Module.new do
20
- define_method(name) do
21
- Redis::AnnualCounter.new(
22
- redis_field_key(name), redis_field_redis(name), redis_options(name)
23
- )
24
- end
25
- end
26
-
27
- if options[:global]
28
- extend mod
29
-
30
- # dispatch to class methods
31
- define_method(name) do
32
- self.class.public_send(name)
33
- end
34
- else
35
- include mod
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'redis/annual_set'
4
- class Redis
5
- module Objects
6
- module AnnualSets
7
- def self.included(klass)
8
- klass.extend ClassMethods
9
- end
10
-
11
- # Class methods that appear in your class when you include Redis::Objects.
12
- module ClassMethods
13
- # Define a new list. It will function like a regular instance
14
- # method, so it can be used alongside ActiveRecord, DataMapper, etc.
15
- def annual_set(name, options = {}) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
16
- redis_objects[name.to_sym] = options.merge(type: :set)
17
-
18
- mod = Module.new do
19
- define_method(name) do
20
- Redis::AnnualSet.new(
21
- redis_field_key(name), redis_field_redis(name), redis_options(name)
22
- )
23
- end
24
-
25
- define_method(:"#{name}=") do |values|
26
- set = public_send(name)
27
-
28
- redis.pipelined do
29
- set.clear
30
- set.merge(*values)
31
- end
32
- end
33
- end
34
-
35
- if options[:global]
36
- extend mod
37
-
38
- # dispatch to class methods
39
- define_method(name) do
40
- self.class.public_send(name)
41
- end
42
- else
43
- include mod
44
- end
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'redis/daily_counter'
4
- class Redis
5
- module Objects
6
- module DailyCounters
7
- class << self
8
- def included(klass)
9
- klass.extend ClassMethods
10
- end
11
- end
12
-
13
- module ClassMethods
14
- def daily_counter(name, options = {}) # rubocop:disable Metrics/MethodLength
15
- options[:start] ||= 0
16
- options[:type] ||= (options[:start]).zero? ? :increment : :decrement
17
- redis_objects[name.to_sym] = options.merge(type: :counter)
18
-
19
- mod = Module.new do
20
- define_method(name) do
21
- Redis::DailyCounter.new(
22
- redis_field_key(name), redis_field_redis(name), redis_options(name)
23
- )
24
- end
25
- end
26
-
27
- if options[:global]
28
- extend mod
29
-
30
- # dispatch to class methods
31
- define_method(name) do
32
- self.class.public_send(name)
33
- end
34
- else
35
- include mod
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'redis/daily_set'
4
- class Redis
5
- module Objects
6
- module DailySets
7
- def self.included(klass)
8
- klass.extend ClassMethods
9
- end
10
-
11
- # Class methods that appear in your class when you include Redis::Objects.
12
- module ClassMethods
13
- # Define a new list. It will function like a regular instance
14
- # method, so it can be used alongside ActiveRecord, DataMapper, etc.
15
- def daily_set(name, options = {}) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
16
- redis_objects[name.to_sym] = options.merge(type: :set)
17
-
18
- mod = Module.new do
19
- define_method(name) do
20
- Redis::DailySet.new(
21
- redis_field_key(name), redis_field_redis(name), redis_options(name)
22
- )
23
- end
24
-
25
- define_method(:"#{name}=") do |values|
26
- set = public_send(name)
27
-
28
- redis.pipelined do
29
- set.clear
30
- set.merge(*values)
31
- end
32
- end
33
- end
34
-
35
- if options[:global]
36
- extend mod
37
-
38
- # dispatch to class methods
39
- define_method(name) do
40
- self.class.public_send(name)
41
- end
42
- else
43
- include mod
44
- end
45
- end
46
- end
47
- end
48
- end
49
- end