redis_counters-dumpers 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +5 -0
- data/Appraisals +19 -0
- data/Gemfile +5 -0
- data/Makefile +28 -0
- data/gemfiles/.gitignore +1 -0
- data/gemfiles/rails3.1.gemfile +12 -0
- data/gemfiles/rails3.2.gemfile +12 -0
- data/gemfiles/rails4.0.gemfile +12 -0
- data/gemfiles/rails4.1.gemfile +12 -0
- data/lib/redis_counters/dumpers/destination.rb +15 -5
- data/lib/redis_counters/dumpers/dsl/destination.rb +1 -0
- data/lib/redis_counters/dumpers/engine.rb +7 -0
- data/lib/redis_counters/dumpers/version.rb +1 -1
- data/lib/redis_counters/dumpers.rb +1 -0
- data/redis_counters-dumpers.gemspec +9 -0
- data/spec/internal/app/models/stats_agg_total.rb +2 -0
- data/spec/internal/app/models/stats_by_day.rb +2 -0
- data/spec/internal/app/models/stats_total.rb +2 -0
- data/spec/internal/config/.gitignore +1 -0
- data/spec/internal/db/schema.rb +25 -0
- data/spec/internal/log/.gitignore +1 -0
- data/spec/lib/redis_counters/dumpers/engine_spec.rb +97 -0
- data/spec/spec_helper.rb +18 -0
- metadata +139 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9be0aa7c67e74438f7bad1434ffb9f606d81d9f2
|
4
|
+
data.tar.gz: 93c77edc5d86974e29a26607bc3bf086263b0acd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e22229c899e2a94b309164023ba10e1d1536037214feb3d5a1ef52cd5b71dcbd585f988bb765f23887f07d5317cb603ee706455c6b585fc90114cd708bfb24e
|
7
|
+
data.tar.gz: d9a35017f37676ffa039f0c9c9f24833e390bae5473454a07dc0d4602886bd890438832193b92eed8697357765c71b440e6aa1bf7617116a3d2bac9dc163c0c8
|
data/.rspec
ADDED
data/Appraisals
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
appraise 'rails3.1' do
|
2
|
+
gem 'activesupport', '~> 3.1.0'
|
3
|
+
gem 'activerecord', '~> 3.1.0'
|
4
|
+
end
|
5
|
+
|
6
|
+
appraise 'rails3.2' do
|
7
|
+
gem 'activesupport', '~> 3.2.0'
|
8
|
+
gem 'activerecord', '~> 3.2.0'
|
9
|
+
end
|
10
|
+
|
11
|
+
appraise 'rails4.0' do
|
12
|
+
gem 'activesupport', '~> 4.0.0'
|
13
|
+
gem 'activerecord', '~> 4.0.0'
|
14
|
+
end
|
15
|
+
|
16
|
+
appraise 'rails4.1' do
|
17
|
+
gem 'activesupport', '~> 4.1.0'
|
18
|
+
gem 'activerecord', '~> 4.1.0'
|
19
|
+
end
|
data/Gemfile
CHANGED
data/Makefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
RAILS_ENV = test
|
2
|
+
BUNDLE = RAILS_ENV=${RAILS_ENV} bundle
|
3
|
+
BUNDLE_OPTIONS = -j 2
|
4
|
+
RSPEC = rspec
|
5
|
+
APPRAISAL = appraisal
|
6
|
+
|
7
|
+
all: test
|
8
|
+
|
9
|
+
test: config/database bundler/install appraisal/install
|
10
|
+
${BUNDLE} exec ${APPRAISAL} ${RSPEC} spec 2>&1
|
11
|
+
|
12
|
+
config/database:
|
13
|
+
touch spec/internal/config/database.yml
|
14
|
+
echo 'test:' >> spec/internal/config/database.yml
|
15
|
+
echo ' adapter: postgresql' >> spec/internal/config/database.yml
|
16
|
+
echo ' database: docker' >> spec/internal/config/database.yml
|
17
|
+
echo ' username: docker' >> spec/internal/config/database.yml
|
18
|
+
echo ' host: localhost' >> spec/internal/config/database.yml
|
19
|
+
echo ' min_messages: warning' >> spec/internal/config/database.yml
|
20
|
+
|
21
|
+
bundler/install:
|
22
|
+
if ! gem list bundler -i > /dev/null; then \
|
23
|
+
gem install bundler; \
|
24
|
+
fi
|
25
|
+
${BUNDLE} install ${BUNDLE_OPTIONS}
|
26
|
+
|
27
|
+
appraisal/install:
|
28
|
+
${BUNDLE} exec ${APPRAISAL} install
|
data/gemfiles/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
*.gemfile.lock
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "activesupport", "~> 3.1.0"
|
6
|
+
gem "activerecord", "~> 3.1.0"
|
7
|
+
|
8
|
+
group :development, :test do
|
9
|
+
gem "combustion", :github => "pat/combustion", :ref => "7d0d24c3f36ce0eb336177fc493be0721bc26665"
|
10
|
+
end
|
11
|
+
|
12
|
+
gemspec :path => "../"
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "activesupport", "~> 3.2.0"
|
6
|
+
gem "activerecord", "~> 3.2.0"
|
7
|
+
|
8
|
+
group :development, :test do
|
9
|
+
gem "combustion", :github => "pat/combustion", :ref => "7d0d24c3f36ce0eb336177fc493be0721bc26665"
|
10
|
+
end
|
11
|
+
|
12
|
+
gemspec :path => "../"
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "activesupport", "~> 4.0.0"
|
6
|
+
gem "activerecord", "~> 4.0.0"
|
7
|
+
|
8
|
+
group :development, :test do
|
9
|
+
gem "combustion", :github => "pat/combustion", :ref => "7d0d24c3f36ce0eb336177fc493be0721bc26665"
|
10
|
+
end
|
11
|
+
|
12
|
+
gemspec :path => "../"
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "activesupport", "~> 4.1.0"
|
6
|
+
gem "activerecord", "~> 4.1.0"
|
7
|
+
|
8
|
+
group :development, :test do
|
9
|
+
gem "combustion", :github => "pat/combustion", :ref => "7d0d24c3f36ce0eb336177fc493be0721bc26665"
|
10
|
+
end
|
11
|
+
|
12
|
+
gemspec :path => "../"
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
require 'forwardable'
|
3
3
|
require 'active_support/core_ext/hash/indifferent_access'
|
4
|
+
require 'active_support/core_ext/object/blank'
|
4
5
|
require_relative 'dsl/destination'
|
5
6
|
|
6
7
|
module RedisCounters
|
@@ -48,6 +49,9 @@ module RedisCounters
|
|
48
49
|
# а целевое поле :date, указывает на поле :start_month_date, дампера.
|
49
50
|
attr_accessor :fields_map
|
50
51
|
|
52
|
+
# Список полей по которым будет группироваться таблицы с исходными данным, Array
|
53
|
+
attr_accessor :group_by
|
54
|
+
|
51
55
|
# Список дополнительных условий, которые применяются при обновлении целевой таблицы, Array of String.
|
52
56
|
# Каждое условие представляет собой строку - часть SQL выражения, которое может включать именованные
|
53
57
|
# параметры из числа доступных в хеше оббщих параметров дампера: engine.common_params.
|
@@ -68,7 +72,8 @@ module RedisCounters
|
|
68
72
|
source AS
|
69
73
|
(
|
70
74
|
SELECT #{selected_fields_expression}
|
71
|
-
|
75
|
+
FROM #{source_table}
|
76
|
+
#{group_by_expression}
|
72
77
|
),
|
73
78
|
updated AS
|
74
79
|
(
|
@@ -83,11 +88,11 @@ module RedisCounters
|
|
83
88
|
INSERT INTO #{target_table} (#{target_fields})
|
84
89
|
SELECT #{target_fields}
|
85
90
|
FROM source
|
86
|
-
|
87
|
-
|
91
|
+
WHERE NOT EXISTS (
|
92
|
+
SELECT 1
|
88
93
|
FROM updated target
|
89
|
-
|
90
|
-
|
94
|
+
WHERE #{matching_expression}
|
95
|
+
#{extra_conditions}
|
91
96
|
)
|
92
97
|
SQL
|
93
98
|
|
@@ -105,6 +110,11 @@ module RedisCounters
|
|
105
110
|
full_fields_map.map { |target_field, source_field| "#{source_field} as #{target_field}" }.join(', ')
|
106
111
|
end
|
107
112
|
|
113
|
+
def group_by_expression
|
114
|
+
return if group_by.blank?
|
115
|
+
'GROUP BY %s' % [group_by.join(', ')]
|
116
|
+
end
|
117
|
+
|
108
118
|
def full_fields_map
|
109
119
|
fields_map.reverse_merge(Hash[fields.zip(fields)])
|
110
120
|
end
|
@@ -4,6 +4,7 @@ require 'callbacks_rb'
|
|
4
4
|
require 'active_support/core_ext/hash/indifferent_access'
|
5
5
|
require 'redis'
|
6
6
|
require 'redis/namespace'
|
7
|
+
require 'redis_counters'
|
7
8
|
require_relative 'dsl/engine'
|
8
9
|
|
9
10
|
module RedisCounters
|
@@ -179,6 +180,8 @@ module RedisCounters
|
|
179
180
|
destinations.each { |dest| dest.merge }
|
180
181
|
|
181
182
|
fire_callback(:on_after_merge, self, db_connection)
|
183
|
+
|
184
|
+
drop_temp_table
|
182
185
|
end
|
183
186
|
|
184
187
|
def fill_temp_table
|
@@ -245,6 +248,10 @@ module RedisCounters
|
|
245
248
|
SQL
|
246
249
|
end
|
247
250
|
|
251
|
+
def drop_temp_table
|
252
|
+
db_connection.execute "DROP TABLE #{temp_table_name}"
|
253
|
+
end
|
254
|
+
|
248
255
|
def analyze_table
|
249
256
|
db_connection.execute <<-SQL
|
250
257
|
ANALYZE #{temp_table_name}
|
@@ -19,10 +19,19 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_dependency 'activesupport', '>= 3.0'
|
21
21
|
spec.add_dependency 'activerecord', '>= 3.0'
|
22
|
+
spec.add_dependency 'pg'
|
22
23
|
spec.add_dependency 'redis', '>= 3.0'
|
23
24
|
spec.add_dependency 'redis-namespace', '>= 1.3'
|
24
25
|
spec.add_dependency 'callbacks_rb', '>= 0.0.1'
|
26
|
+
spec.add_dependency 'redis_counters', '>= 1.3'
|
27
|
+
|
25
28
|
|
26
29
|
spec.add_development_dependency 'bundler', '>= 1.7'
|
27
30
|
spec.add_development_dependency 'rake', '>= 10.0'
|
31
|
+
spec.add_development_dependency 'rspec', '>= 3.2'
|
32
|
+
spec.add_development_dependency 'rspec-rails', '>= 3.2'
|
33
|
+
spec.add_development_dependency 'rspec-given', '>= 3.5'
|
34
|
+
spec.add_development_dependency 'appraisal', '>= 1.0.2'
|
35
|
+
spec.add_development_dependency 'mock_redis'
|
36
|
+
spec.add_development_dependency 'apress-changelogger'
|
28
37
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
database.yml
|
@@ -0,0 +1,25 @@
|
|
1
|
+
ActiveRecord::Schema.define do
|
2
|
+
create_table :stats_by_days do |t|
|
3
|
+
t.integer :record_id, null: false
|
4
|
+
t.integer :column_id, null: false
|
5
|
+
t.date :date, null: false
|
6
|
+
t.integer :hits, null: false, default: 0
|
7
|
+
end
|
8
|
+
|
9
|
+
add_index :stats_by_days, [:record_id, :column_id, :date], unique: true
|
10
|
+
|
11
|
+
create_table :stats_totals do |t|
|
12
|
+
t.integer :record_id, null: false
|
13
|
+
t.integer :column_id, null: false
|
14
|
+
t.integer :hits, null: false, default: 0
|
15
|
+
end
|
16
|
+
|
17
|
+
add_index :stats_totals, [:record_id, :column_id], unique: true
|
18
|
+
|
19
|
+
create_table :stats_agg_totals do |t|
|
20
|
+
t.integer :record_id, null: false
|
21
|
+
t.integer :hits, null: false, default: 0
|
22
|
+
end
|
23
|
+
|
24
|
+
add_index :stats_agg_totals, [:record_id], unique: true
|
25
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
*.log
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RedisCounters::Dumpers::Engine do
|
4
|
+
let(:dumper) do
|
5
|
+
RedisCounters::Dumpers::Engine.build do
|
6
|
+
name :stats_totals
|
7
|
+
fields record_id: :integer,
|
8
|
+
column_id: :integer,
|
9
|
+
value: :integer,
|
10
|
+
date: :date
|
11
|
+
|
12
|
+
destination do
|
13
|
+
model StatsByDay
|
14
|
+
take :record_id, :column_id, :hits, :date
|
15
|
+
key_fields :record_id, :column_id, :date
|
16
|
+
increment_fields :hits
|
17
|
+
map :hits, to: :value
|
18
|
+
condition 'target.date = :date'
|
19
|
+
end
|
20
|
+
|
21
|
+
destination do
|
22
|
+
model StatsTotal
|
23
|
+
take :record_id, :column_id, :hits
|
24
|
+
key_fields :record_id, :column_id
|
25
|
+
increment_fields :hits
|
26
|
+
map :hits, to: :value
|
27
|
+
end
|
28
|
+
|
29
|
+
destination do
|
30
|
+
model StatsAggTotal
|
31
|
+
take :record_id, :hits
|
32
|
+
key_fields :record_id
|
33
|
+
increment_fields :hits
|
34
|
+
map :hits, to: 'sum(value)'
|
35
|
+
group_by :record_id
|
36
|
+
end
|
37
|
+
|
38
|
+
on_before_merge do |dumper, _connection|
|
39
|
+
dumper.common_params = {date: dumper.date.strftime('%Y-%m-%d')}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
let(:prev_date) { Date.new(2015, 1, 19) }
|
45
|
+
let(:prev_date_s) { prev_date.strftime('%Y-%m-%d') }
|
46
|
+
|
47
|
+
let(:date) { Date.new(2015, 1, 20) }
|
48
|
+
let(:date_s) { date.strftime('%Y-%m-%d') }
|
49
|
+
|
50
|
+
let(:counter) do
|
51
|
+
RedisCounters.create_counter(Redis.current,
|
52
|
+
counter_class: RedisCounters::HashCounter,
|
53
|
+
counter_name: :record_hits_by_day,
|
54
|
+
group_keys: [:record_id, :column_id],
|
55
|
+
partition_keys: [:date]
|
56
|
+
)
|
57
|
+
end
|
58
|
+
|
59
|
+
before do
|
60
|
+
allow(dumper).to receive(:redis_session).and_return(MockRedis.new)
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '#process!' do
|
64
|
+
before do
|
65
|
+
counter.increment(date: prev_date_s, record_id: 1, column_id: 100)
|
66
|
+
counter.increment(date: prev_date_s, record_id: 1, column_id: 200)
|
67
|
+
counter.increment(date: prev_date_s, record_id: 1, column_id: 200)
|
68
|
+
counter.increment(date: prev_date_s, record_id: 2, column_id: 100)
|
69
|
+
|
70
|
+
dumper.process!(counter, prev_date)
|
71
|
+
|
72
|
+
counter.increment(date: date_s, record_id: 1, column_id: 100)
|
73
|
+
counter.increment(date: date_s, record_id: 1, column_id: 200)
|
74
|
+
counter.increment(date: date_s, record_id: 1, column_id: 200)
|
75
|
+
counter.increment(date: date_s, record_id: 2, column_id: 100)
|
76
|
+
|
77
|
+
dumper.process!(counter, date)
|
78
|
+
end
|
79
|
+
|
80
|
+
Then { expect(StatsByDay.count).to eq 6 }
|
81
|
+
And { expect(StatsByDay.where(record_id: 1, column_id: 100, date: prev_date).first.hits).to eq 1 }
|
82
|
+
And { expect(StatsByDay.where(record_id: 1, column_id: 200, date: prev_date).first.hits).to eq 2 }
|
83
|
+
And { expect(StatsByDay.where(record_id: 2, column_id: 100, date: prev_date).first.hits).to eq 1 }
|
84
|
+
And { expect(StatsByDay.where(record_id: 1, column_id: 100, date: date).first.hits).to eq 1 }
|
85
|
+
And { expect(StatsByDay.where(record_id: 1, column_id: 200, date: date).first.hits).to eq 2 }
|
86
|
+
And { expect(StatsByDay.where(record_id: 2, column_id: 100, date: date).first.hits).to eq 1 }
|
87
|
+
|
88
|
+
And { expect(StatsTotal.count).to eq 3 }
|
89
|
+
And { expect(StatsTotal.where(record_id: 1, column_id: 100).first.hits).to eq 2 }
|
90
|
+
And { expect(StatsTotal.where(record_id: 1, column_id: 200).first.hits).to eq 4 }
|
91
|
+
And { expect(StatsTotal.where(record_id: 2, column_id: 100).first.hits).to eq 2 }
|
92
|
+
|
93
|
+
And { expect(StatsAggTotal.count).to eq 2 }
|
94
|
+
And { expect(StatsAggTotal.where(record_id: 1).first.hits).to eq 6 }
|
95
|
+
And { expect(StatsAggTotal.where(record_id: 2).first.hits).to eq 2 }
|
96
|
+
end
|
97
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'redis_counters/dumpers'
|
4
|
+
|
5
|
+
require 'combustion'
|
6
|
+
Combustion.initialize! :active_record
|
7
|
+
|
8
|
+
require 'rspec/rails'
|
9
|
+
require 'rspec/given'
|
10
|
+
|
11
|
+
require 'mock_redis'
|
12
|
+
require 'redis'
|
13
|
+
Redis.current = MockRedis.new
|
14
|
+
|
15
|
+
RSpec.configure do |config|
|
16
|
+
config.use_transactional_fixtures = true
|
17
|
+
config.before { Redis.current.flushdb }
|
18
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redis_counters-dumpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Merkushin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
prerelease: false
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
version: '3.0'
|
39
39
|
type: :runtime
|
40
40
|
name: activerecord
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
prerelease: false
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
type: :runtime
|
54
|
+
name: pg
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
prerelease: false
|
43
57
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -80,6 +94,20 @@ dependencies:
|
|
80
94
|
version: 0.0.1
|
81
95
|
type: :runtime
|
82
96
|
name: callbacks_rb
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
prerelease: false
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1.3'
|
104
|
+
requirement: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '1.3'
|
109
|
+
type: :runtime
|
110
|
+
name: redis_counters
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
prerelease: false
|
85
113
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -108,6 +136,90 @@ dependencies:
|
|
108
136
|
version: '10.0'
|
109
137
|
type: :development
|
110
138
|
name: rake
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
prerelease: false
|
141
|
+
version_requirements: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '3.2'
|
146
|
+
requirement: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - '>='
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '3.2'
|
151
|
+
type: :development
|
152
|
+
name: rspec
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
prerelease: false
|
155
|
+
version_requirements: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '3.2'
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - '>='
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '3.2'
|
165
|
+
type: :development
|
166
|
+
name: rspec-rails
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
prerelease: false
|
169
|
+
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '3.5'
|
174
|
+
requirement: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - '>='
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '3.5'
|
179
|
+
type: :development
|
180
|
+
name: rspec-given
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
prerelease: false
|
183
|
+
version_requirements: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - '>='
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: 1.0.2
|
188
|
+
requirement: !ruby/object:Gem::Requirement
|
189
|
+
requirements:
|
190
|
+
- - '>='
|
191
|
+
- !ruby/object:Gem::Version
|
192
|
+
version: 1.0.2
|
193
|
+
type: :development
|
194
|
+
name: appraisal
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
prerelease: false
|
197
|
+
version_requirements: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - '>='
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
requirement: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - '>='
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
207
|
+
type: :development
|
208
|
+
name: mock_redis
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
prerelease: false
|
211
|
+
version_requirements: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - '>='
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
requirement: !ruby/object:Gem::Requirement
|
217
|
+
requirements:
|
218
|
+
- - '>='
|
219
|
+
- !ruby/object:Gem::Version
|
220
|
+
version: '0'
|
221
|
+
type: :development
|
222
|
+
name: apress-changelogger
|
111
223
|
description:
|
112
224
|
email:
|
113
225
|
- bibendi@bk.ru
|
@@ -116,10 +228,18 @@ extensions: []
|
|
116
228
|
extra_rdoc_files: []
|
117
229
|
files:
|
118
230
|
- .gitignore
|
231
|
+
- .rspec
|
232
|
+
- Appraisals
|
119
233
|
- Gemfile
|
120
234
|
- LICENSE.txt
|
235
|
+
- Makefile
|
121
236
|
- README.md
|
122
237
|
- Rakefile
|
238
|
+
- gemfiles/.gitignore
|
239
|
+
- gemfiles/rails3.1.gemfile
|
240
|
+
- gemfiles/rails3.2.gemfile
|
241
|
+
- gemfiles/rails4.0.gemfile
|
242
|
+
- gemfiles/rails4.1.gemfile
|
123
243
|
- lib/redis_counters/dumpers.rb
|
124
244
|
- lib/redis_counters/dumpers/destination.rb
|
125
245
|
- lib/redis_counters/dumpers/dsl/base.rb
|
@@ -130,6 +250,14 @@ files:
|
|
130
250
|
- lib/redis_counters/dumpers/list.rb
|
131
251
|
- lib/redis_counters/dumpers/version.rb
|
132
252
|
- redis_counters-dumpers.gemspec
|
253
|
+
- spec/internal/app/models/stats_agg_total.rb
|
254
|
+
- spec/internal/app/models/stats_by_day.rb
|
255
|
+
- spec/internal/app/models/stats_total.rb
|
256
|
+
- spec/internal/config/.gitignore
|
257
|
+
- spec/internal/db/schema.rb
|
258
|
+
- spec/internal/log/.gitignore
|
259
|
+
- spec/lib/redis_counters/dumpers/engine_spec.rb
|
260
|
+
- spec/spec_helper.rb
|
133
261
|
homepage: https://github.com/abak-press/redis_counters-dumpers
|
134
262
|
licenses:
|
135
263
|
- MIT
|
@@ -154,4 +282,12 @@ rubygems_version: 2.4.2
|
|
154
282
|
signing_key:
|
155
283
|
specification_version: 4
|
156
284
|
summary: Dump statistics from Redis to DB
|
157
|
-
test_files:
|
285
|
+
test_files:
|
286
|
+
- spec/internal/app/models/stats_agg_total.rb
|
287
|
+
- spec/internal/app/models/stats_by_day.rb
|
288
|
+
- spec/internal/app/models/stats_total.rb
|
289
|
+
- spec/internal/config/.gitignore
|
290
|
+
- spec/internal/db/schema.rb
|
291
|
+
- spec/internal/log/.gitignore
|
292
|
+
- spec/lib/redis_counters/dumpers/engine_spec.rb
|
293
|
+
- spec/spec_helper.rb
|