diff --git a/Gemfile b/Gemfile index 903d37f..6db22ce 100644 --- a/Gemfile +++ b/Gemfile @@ -6,4 +6,6 @@ group :development, :test do gem 'combustion', github: 'pat/combustion', ref: '7d0d24c3f36ce0eb336177fc493be0721bc26665' end +gem 'rack', '< 2' if RUBY_VERSION < '2.2.0' + gemspec diff --git a/lib/redis_counters/dumpers/engine.rb b/lib/redis_counters/dumpers/engine.rb index 3f54c6c..f78a310 100644 --- a/lib/redis_counters/dumpers/engine.rb +++ b/lib/redis_counters/dumpers/engine.rb @@ -272,7 +272,11 @@ def columns_definition when :boolean 'boolean' else - raise 'Unknown datatype %s for %s field' % [type, field] + if type.is_a?(Array) && type.first == :enum + type.last.fetch(:name) + else + raise 'Unknown datatype %s for %s field' % [type, field] + end end "#{field} #{pg_field_type}" diff --git a/redis_counters-dumpers.gemspec b/redis_counters-dumpers.gemspec index 22ca275..4b0ad7a 100644 --- a/redis_counters-dumpers.gemspec +++ b/redis_counters-dumpers.gemspec @@ -25,7 +25,6 @@ Gem::Specification.new do |spec| spec.add_dependency 'callbacks_rb', '>= 0.0.1' spec.add_dependency 'redis_counters', '>= 1.3' - spec.add_development_dependency 'bundler', '>= 1.7' spec.add_development_dependency 'rake', '>= 10.0' spec.add_development_dependency 'rspec', '>= 3.2' diff --git a/spec/internal/db/schema.rb b/spec/internal/db/schema.rb index 90f408c..47a7b55 100644 --- a/spec/internal/db/schema.rb +++ b/spec/internal/db/schema.rb @@ -1,9 +1,14 @@ ActiveRecord::Schema.define do + execute <<-SQL + CREATE TYPE subject_types AS ENUM (''); + SQL + create_table :stats_by_days do |t| t.integer :record_id, null: false t.integer :column_id, null: false t.date :date, null: false t.integer :hits, null: false, default: 0 + t.column :subject, :subject_types end add_index :stats_by_days, [:record_id, :column_id, :date], unique: true @@ -12,6 +17,7 @@ t.integer :record_id, null: false t.integer :column_id, null: false t.integer :hits, null: false, default: 0 + t.column :subject, :subject_types end add_index :stats_totals, [:record_id, :column_id], unique: true @@ -19,6 +25,7 @@ create_table :stats_agg_totals do |t| t.integer :record_id, null: false t.integer :hits, null: false, default: 0 + t.column :subject, :subject_types end add_index :stats_agg_totals, [:record_id], unique: true diff --git a/spec/lib/redis_counters/dumpers/engine_spec.rb b/spec/lib/redis_counters/dumpers/engine_spec.rb index 6ee43bf..681c6f5 100644 --- a/spec/lib/redis_counters/dumpers/engine_spec.rb +++ b/spec/lib/redis_counters/dumpers/engine_spec.rb @@ -7,7 +7,8 @@ fields record_id: :integer, column_id: :integer, value: :integer, - date: :date + date: :date, + subject: [:enum, {name: :subject_types}] destination do model StatsByDay @@ -51,7 +52,7 @@ RedisCounters.create_counter(Redis.current, counter_class: RedisCounters::HashCounter, counter_name: :record_hits_by_day, - group_keys: [:record_id, :column_id], + group_keys: [:record_id, :column_id, :subject], partition_keys: [:date] ) end @@ -62,17 +63,17 @@ describe '#process!' do before do - counter.increment(date: prev_date_s, record_id: 1, column_id: 100) - counter.increment(date: prev_date_s, record_id: 1, column_id: 200) - counter.increment(date: prev_date_s, record_id: 1, column_id: 200) - counter.increment(date: prev_date_s, record_id: 2, column_id: 100) + counter.increment(date: prev_date_s, record_id: 1, column_id: 100, subject: '') + counter.increment(date: prev_date_s, record_id: 1, column_id: 200, subject: '') + counter.increment(date: prev_date_s, record_id: 1, column_id: 200, subject: '') + counter.increment(date: prev_date_s, record_id: 2, column_id: 100, subject: nil) dumper.process!(counter, prev_date) - counter.increment(date: date_s, record_id: 1, column_id: 100) - counter.increment(date: date_s, record_id: 1, column_id: 200) - counter.increment(date: date_s, record_id: 1, column_id: 200) - counter.increment(date: date_s, record_id: 2, column_id: 100) + counter.increment(date: date_s, record_id: 1, column_id: 100, subject: '') + counter.increment(date: date_s, record_id: 1, column_id: 200, subject: '') + counter.increment(date: date_s, record_id: 1, column_id: 200, subject: '') + counter.increment(date: date_s, record_id: 2, column_id: 100, subject: nil) dumper.process!(counter, date) end