norton 0.0.18 → 0.0.19
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 +4 -4
- data/.rspec +2 -0
- data/lib/norton/counter.rb +14 -2
- data/lib/norton/helper.rb +29 -0
- data/lib/norton/version.rb +1 -1
- data/lib/norton.rb +1 -0
- data/norton.gemspec +4 -1
- data/spec/norton/counter_spec.rb +23 -4
- data/spec/norton/helper_spec.rb +62 -0
- data/spec/norton/timestamp_spec.rb +8 -9
- data/spec/norton_spec.rb +2 -3
- data/spec/spec_helper.rb +20 -5
- metadata +51 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6535a6a6aa0b6aafc903750f29736fdb867e436e
|
4
|
+
data.tar.gz: f6a843aaa3aac77be86602b45dc8f4181cb03a10
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ec3d694c9179a844a3f4b48915f7a62e32ce0d130d14b5e4685f08f8d87d8e9a05c4f68693af28d02dd07037af0b8b8e3b60f8de4d7c248fe7eea1b5e05acd1b
|
7
|
+
data.tar.gz: e86b51e2e964fbd2a646ef88cbbd59504506fe7bd553be74c688ffb8463a8ed1478038a7bee66d77ad671942ea73b0efab9f27546f9a601d841e1d58e98c6875
|
data/.rspec
ADDED
data/lib/norton/counter.rb
CHANGED
@@ -29,6 +29,18 @@ module Norton
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
define_method("incr_#{name}_by") do |increment|
|
33
|
+
Norton.redis.with do |conn|
|
34
|
+
conn.incrby("#{self.class.to_s.pluralize.underscore}:#{self.id}:#{name}", increment)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
define_method("decr_#{name}_by") do |decrement|
|
39
|
+
Norton.redis.with do |conn|
|
40
|
+
conn.decrby("#{self.class.to_s.pluralize.underscore}:#{self.id}:#{name}", decrement)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
32
44
|
define_method("#{name}=") do |v|
|
33
45
|
Norton.redis.with do |conn|
|
34
46
|
conn.set("#{self.class.to_s.pluralize.underscore}:#{self.id}:#{name}", v)
|
@@ -48,7 +60,7 @@ module Norton
|
|
48
60
|
conn.del("#{self.class.to_s.pluralize.underscore}:#{self.id}:#{name}")
|
49
61
|
end
|
50
62
|
end
|
51
|
-
send(:after_destroy, "remove_#{name}".to_sym)
|
63
|
+
send(:after_destroy, "remove_#{name}".to_sym) if respond_to? :after_destroy
|
52
64
|
|
53
65
|
# Add Increment callback
|
54
66
|
unless options[:incr].nil?
|
@@ -66,4 +78,4 @@ module Norton
|
|
66
78
|
end
|
67
79
|
end
|
68
80
|
end
|
69
|
-
end
|
81
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Norton
|
2
|
+
module Helper
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
#
|
6
|
+
# 批量取出当前对象的多个 Norton value
|
7
|
+
#
|
8
|
+
# @param [Array] *value_keys 直接传入需要的值的 key,例如: :key1, :key2, :key3
|
9
|
+
#
|
10
|
+
# @return [Hash]
|
11
|
+
#
|
12
|
+
def norton_values(*keys)
|
13
|
+
ret = {}
|
14
|
+
|
15
|
+
redis_keys = keys.map { |k| "#{self.class.to_s.pluralize.underscore}:#{self.id}:#{k}" }
|
16
|
+
|
17
|
+
redis_values = Norton.redis.with do |conn|
|
18
|
+
conn.mget(redis_keys)
|
19
|
+
end
|
20
|
+
|
21
|
+
keys.each_with_index do |key, index|
|
22
|
+
ret[key] = redis_values[index].try(:to_i)
|
23
|
+
end
|
24
|
+
|
25
|
+
ret
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
data/lib/norton/version.rb
CHANGED
data/lib/norton.rb
CHANGED
data/norton.gemspec
CHANGED
@@ -24,7 +24,10 @@ Gem::Specification.new do |spec|
|
|
24
24
|
|
25
25
|
spec.add_development_dependency "bundler", "~> 1.5"
|
26
26
|
spec.add_development_dependency "rake"
|
27
|
-
spec.add_development_dependency "
|
27
|
+
spec.add_development_dependency "rspec", "~> 3.5.0"
|
28
|
+
spec.add_development_dependency "fuubar"
|
29
|
+
spec.add_development_dependency "pry"
|
30
|
+
spec.add_development_dependency "pry-nav"
|
28
31
|
spec.add_development_dependency "activerecord", "~> 4.1"
|
29
32
|
spec.add_development_dependency "activerecord-nulldb-adapter"
|
30
33
|
end
|
data/spec/norton/counter_spec.rb
CHANGED
@@ -9,7 +9,7 @@ class Dummy
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def id
|
12
|
-
Random.rand(10000)
|
12
|
+
@id ||= Random.rand(10000)
|
13
13
|
end
|
14
14
|
|
15
15
|
def candies
|
@@ -23,7 +23,7 @@ describe Norton::Counter do
|
|
23
23
|
dummy = Dummy.new
|
24
24
|
dummy.reset_candies_count
|
25
25
|
|
26
|
-
dummy.candies_count.
|
26
|
+
expect(dummy.candies_count).to eq(15)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
@@ -32,7 +32,26 @@ describe Norton::Counter do
|
|
32
32
|
dummy = Dummy.new
|
33
33
|
dummy.candies_count = 200
|
34
34
|
|
35
|
-
dummy.candies_count.
|
35
|
+
expect(dummy.candies_count).to eq(200)
|
36
36
|
end
|
37
37
|
end
|
38
|
-
|
38
|
+
|
39
|
+
describe ".incr_value_by" do
|
40
|
+
it "should increase the value of the given amount" do
|
41
|
+
dummy = Dummy.new
|
42
|
+
dummy.incr_candies_count_by(3)
|
43
|
+
|
44
|
+
expect(dummy.candies_count).to eq(3)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe ".decr_value_by" do
|
49
|
+
it "should decrease the value of the given amount" do
|
50
|
+
dummy = Dummy.new
|
51
|
+
dummy.candies_count = 15
|
52
|
+
dummy.decr_candies_count_by(5)
|
53
|
+
|
54
|
+
expect(dummy.candies_count).to eq(10)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class Dummy
|
4
|
+
include Norton::Counter
|
5
|
+
include Norton::Timestamp
|
6
|
+
include Norton::Helper
|
7
|
+
|
8
|
+
counter :counter1
|
9
|
+
counter :counter2
|
10
|
+
counter :counter3
|
11
|
+
|
12
|
+
timestamp :time1
|
13
|
+
|
14
|
+
def id
|
15
|
+
@id ||= Random.rand(10000)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe Norton::Helper do
|
20
|
+
describe ".norton_values" do
|
21
|
+
it "should respond to `:norton_values`" do
|
22
|
+
dummy = Dummy.new
|
23
|
+
|
24
|
+
expect(dummy).to respond_to(:norton_values)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return the specific values" do
|
28
|
+
dummy = Dummy.new
|
29
|
+
|
30
|
+
dummy.counter1 = 10
|
31
|
+
dummy.counter2 = 15
|
32
|
+
dummy.counter3 = 100
|
33
|
+
|
34
|
+
dummy.touch_time1
|
35
|
+
|
36
|
+
values = dummy.norton_values(:counter1, :time1)
|
37
|
+
|
38
|
+
expect(values).to include(:counter1, :time1)
|
39
|
+
expect(values.size).to eq(2)
|
40
|
+
expect(values[:counter1]).to eq(dummy.counter1)
|
41
|
+
expect(values[:time1]).to eq(dummy.time1)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should return nil if the specific key does not exist" do
|
45
|
+
dummy = Dummy.new
|
46
|
+
|
47
|
+
dummy.counter1 = 10
|
48
|
+
dummy.counter2 = 15
|
49
|
+
dummy.counter3 = 100
|
50
|
+
|
51
|
+
dummy.touch_time1
|
52
|
+
|
53
|
+
values = dummy.norton_values(:counter1, :counter2, :time2)
|
54
|
+
|
55
|
+
expect(values).to include(:counter1, :counter2, :time2)
|
56
|
+
expect(values.size).to eq(3)
|
57
|
+
expect(values[:counter1]).to eq(dummy.counter1)
|
58
|
+
expect(values[:counter2]).to eq(dummy.counter2)
|
59
|
+
expect(values[:time2]).to be_nil
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -7,22 +7,21 @@ class Dummy
|
|
7
7
|
# timestamp :graduated_at, before_save: -> { title_changed? || content_changed? }
|
8
8
|
|
9
9
|
def id
|
10
|
-
|
10
|
+
@id ||= Random.rand(10000)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
describe Norton::Timestamp do
|
15
15
|
describe "#timestamp" do
|
16
16
|
it "should add a class method timestamp to the class" do
|
17
|
-
Dummy.
|
17
|
+
expect(Dummy).to respond_to(:timestamp)
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'should create timestamp accessors and touch method' do
|
21
21
|
dummy = Dummy.new
|
22
22
|
|
23
|
-
dummy.
|
24
|
-
|
25
|
-
dummy.must_respond_to :touch_born_at
|
23
|
+
expect(dummy).to respond_to(:born_at)
|
24
|
+
expect(dummy).to respond_to(:touch_born_at)
|
26
25
|
end
|
27
26
|
end
|
28
27
|
|
@@ -33,7 +32,7 @@ describe Norton::Timestamp do
|
|
33
32
|
|
34
33
|
Norton.redis.with do |conn|
|
35
34
|
born_at = conn.get("#{Dummy.to_s.pluralize.downcase}:#{dummy.id}:born_at")
|
36
|
-
born_at.to_i.
|
35
|
+
expect(born_at.to_i).to be > 0
|
37
36
|
end
|
38
37
|
end
|
39
38
|
end
|
@@ -42,8 +41,8 @@ describe Norton::Timestamp do
|
|
42
41
|
it 'should get the timestamp' do
|
43
42
|
dummy = Dummy.new
|
44
43
|
dummy.touch_born_at
|
45
|
-
dummy.born_at.
|
46
|
-
dummy.born_at.
|
44
|
+
expect(dummy.born_at).not_to be_nil
|
45
|
+
expect(dummy.born_at).to be_a(Fixnum)
|
47
46
|
end
|
48
47
|
end
|
49
|
-
end
|
48
|
+
end
|
data/spec/norton_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,26 @@
|
|
1
1
|
require 'active_record'
|
2
2
|
require 'nulldb'
|
3
3
|
require 'norton'
|
4
|
-
require '
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
require 'rspec'
|
5
|
+
|
6
|
+
RSpec.configure do |config|
|
7
|
+
config.expect_with :rspec do |expectations|
|
8
|
+
expectations.syntax = :expect
|
9
|
+
end
|
10
|
+
|
11
|
+
config.mock_with :rspec do |mocks|
|
12
|
+
mocks.syntax = :expect
|
13
|
+
mocks.verify_partial_doubles = true
|
14
|
+
end
|
15
|
+
|
16
|
+
config.order = :random
|
17
|
+
|
18
|
+
# Clean Up Redis
|
19
|
+
config.before(:each) do
|
20
|
+
Norton.redis.with { |conn| conn.flushdb }
|
21
|
+
end
|
22
|
+
end
|
8
23
|
|
9
24
|
Norton.setup url: 'redis://localhost:6379/0'
|
10
25
|
|
11
|
-
ActiveRecord::Base.establish_connection :adapter => :nulldb
|
26
|
+
ActiveRecord::Base.establish_connection :adapter => :nulldb
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: norton
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Larry Zhao
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
@@ -81,19 +81,61 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 3.5.0
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 3.5.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: fuubar
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pry
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pry-nav
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
97
139
|
- !ruby/object:Gem::Dependency
|
98
140
|
name: activerecord
|
99
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,6 +172,7 @@ extensions: []
|
|
130
172
|
extra_rdoc_files: []
|
131
173
|
files:
|
132
174
|
- ".gitignore"
|
175
|
+
- ".rspec"
|
133
176
|
- Gemfile
|
134
177
|
- LICENSE
|
135
178
|
- LICENSE.txt
|
@@ -137,11 +180,13 @@ files:
|
|
137
180
|
- Rakefile
|
138
181
|
- lib/norton.rb
|
139
182
|
- lib/norton/counter.rb
|
183
|
+
- lib/norton/helper.rb
|
140
184
|
- lib/norton/timed_value.rb
|
141
185
|
- lib/norton/timestamp.rb
|
142
186
|
- lib/norton/version.rb
|
143
187
|
- norton.gemspec
|
144
188
|
- spec/norton/counter_spec.rb
|
189
|
+
- spec/norton/helper_spec.rb
|
145
190
|
- spec/norton/timestamp_spec.rb
|
146
191
|
- spec/norton_spec.rb
|
147
192
|
- spec/spec_helper.rb
|
@@ -172,6 +217,7 @@ summary: Provide simple helpers on persist values in redis for performance. Work
|
|
172
217
|
with ActiveRecord.
|
173
218
|
test_files:
|
174
219
|
- spec/norton/counter_spec.rb
|
220
|
+
- spec/norton/helper_spec.rb
|
175
221
|
- spec/norton/timestamp_spec.rb
|
176
222
|
- spec/norton_spec.rb
|
177
223
|
- spec/spec_helper.rb
|