almicube 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9fa0b027e6a3cbdfc138f59cc9a9b9a6704227bd
4
- data.tar.gz: ffb6baa33b5d9940c5fe10c1dd3571d1d44427c1
3
+ metadata.gz: eb295b819df1854c96c9b2fbf911ab09b5063f8f
4
+ data.tar.gz: 861bf7962f333e61d85bd695c9d3ab92a8611fbd
5
5
  SHA512:
6
- metadata.gz: e23331dfcd4ef85a623a8bb406172cefa9f4fb411931e11532d29becf51f610f9006db9ac6b79b76111da3a627afa2615685225bb70feae891365e041a8d1ea3
7
- data.tar.gz: abbdecc865510ee154bfec2350167b1b5a8252d0348a89f7455eb8fb35a389e40487ff17b8f5f8713b59e315e59875379a595bed359b5f22c6470de4fbeb1ece
6
+ metadata.gz: 191a40acc01416bf0b3f4b50ff9601939f679dbe10c212a0eb4f4ebe82631f42d635988945cb3d0b3969511e6bfb41c592351be108b54da8923f1ac345c2fc72
7
+ data.tar.gz: 1acffa0eeaed6337e4a8601b0df6890b57363594fe29c6faa1d6cf175a00cf61f727d32cf9b60944e3355666dfa3470781b34b77cf4ff425e3ff155a00dc8d6c
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- almicube (0.0.5)
4
+ almicube (0.0.7)
5
5
  activemodel (~> 4.0)
6
6
  activesupport (~> 4.0)
7
7
  redis (~> 3.0)
@@ -20,9 +20,11 @@ GEM
20
20
  tzinfo (~> 1.1)
21
21
  builder (3.2.2)
22
22
  diff-lcs (1.2.5)
23
+ docile (1.1.3)
23
24
  i18n (0.6.9)
24
25
  json (1.8.1)
25
26
  minitest (5.3.3)
27
+ multi_json (1.10.0)
26
28
  redis (3.0.7)
27
29
  rspec (2.14.1)
28
30
  rspec-core (~> 2.14.0)
@@ -32,6 +34,11 @@ GEM
32
34
  rspec-expectations (2.14.5)
33
35
  diff-lcs (>= 1.1.3, < 2.0)
34
36
  rspec-mocks (2.14.6)
37
+ simplecov (0.8.2)
38
+ docile (~> 1.1.0)
39
+ multi_json
40
+ simplecov-html (~> 0.8.0)
41
+ simplecov-html (0.8.0)
35
42
  thread_safe (0.3.3)
36
43
  tzinfo (1.1.0)
37
44
  thread_safe (~> 0.1)
@@ -42,3 +49,4 @@ PLATFORMS
42
49
  DEPENDENCIES
43
50
  almicube!
44
51
  rspec (~> 2.0)
52
+ simplecov
@@ -22,4 +22,5 @@ Gem::Specification.new do |spec|
22
22
  spec.add_dependency "activemodel", "~> 4.0"
23
23
 
24
24
  spec.add_development_dependency "rspec", "~> 2.0"
25
+ spec.add_development_dependency "simplecov"
25
26
  end
@@ -12,8 +12,6 @@ module Almicube
12
12
  def aggregate(ranking=nil)
13
13
  self.ranking = ranking unless active? || ranking.nil?
14
14
 
15
- self.ranking.selector.before_aggregate unless self.ranking.selector.nil?
16
-
17
15
  if self.ranking.data?
18
16
  data_aggregate self.ranking.key
19
17
  else
@@ -1,9 +1,6 @@
1
1
  module Almicube
2
2
  module Bundler
3
3
  class TodayBundler < Base
4
- def keys
5
- []
6
- end
7
4
  end
8
5
  end
9
6
  end
@@ -7,5 +7,11 @@ module Almicube
7
7
  end
8
8
 
9
9
  alias :has_ranking? :active?
10
+
11
+ def before_aggregate
12
+ end
13
+
14
+ def after_aggregate
15
+ end
10
16
  end
11
17
  end
@@ -10,10 +10,15 @@ module Almicube
10
10
 
11
11
  def initialize(ranking, options={})
12
12
  @ranking = ranking
13
- @options = ranking.options.merge(options).select { |k| self.class::ALLOWED_OPTIONS.include? k.to_sym }
13
+ @options = select ranking.options.merge(options)
14
14
  @config ||= Config.config
15
15
  end
16
16
 
17
+ def merge!(options={})
18
+ @options = select @options.merge(options)
19
+ self
20
+ end
21
+
17
22
  def [](name)
18
23
  options[name.to_sym]
19
24
  end
@@ -43,5 +48,11 @@ module Almicube
43
48
 
44
49
  alias :to_s :to_str
45
50
  alias :inspect :to_str
51
+
52
+ protected
53
+
54
+ def select(options={})
55
+ options.select { |k| self.class::ALLOWED_OPTIONS.include? k.to_sym }
56
+ end
46
57
  end
47
58
  end
@@ -23,16 +23,18 @@ module Almicube
23
23
  Almicube::AssociationProxy.new(self.class.#{ranker}_ranking(date), self)
24
24
  end
25
25
 
26
- def #{ranker}_rank(date = Date.today)
27
- self.#{ranker}_ranking(date).rank
26
+ attr_accessor :current_ranking
27
+
28
+ def #{ranker}_rank
29
+ @current_ranking.rank(self)
28
30
  end
29
31
 
30
- def #{ranker}_score(date = Date.today)
31
- self.#{ranker}_ranking(date).score
32
+ def #{ranker}_score
33
+ @current_ranking.score(self)
32
34
  end
33
35
 
34
- def #{ranker}_incr(date = Date.today, score = 1)
35
- self.#{ranker}_ranking(date).incr(score)
36
+ def #{ranker}_incr
37
+ @current_ranking.incr(score)
36
38
  end
37
39
  EVAL
38
40
  end
@@ -5,19 +5,15 @@ module Almicube
5
5
  attr_accessor :per_page
6
6
 
7
7
  def initialize(options={})
8
- @selector = options[:selector]
9
- @aggregator = options[:aggregator] || Aggregator::SumAggregator.new
10
- @bundler = options[:bundler]
8
+ self.selector = options[:selector]
9
+ self.aggregator = options[:aggregator] || Aggregator::SumAggregator.new
10
+ self.bundler = options[:bundler]
11
11
  @prefix = options[:prefix]
12
12
  @suffix = options[:suffix]
13
13
  @date = options[:date] || Date.today
14
14
  @class_name = options[:class_name]
15
15
  @class_name = @class_name.constantize if @class_name.is_a? String
16
16
  @per_page = options[:per_page] || 10
17
-
18
- @selector.ranking = self unless @selector.nil?
19
- @aggregator.ranking = self unless @aggregator.nil?
20
- @bundler.ranking = self unless @bundler.nil?
21
17
  end
22
18
 
23
19
  def records
@@ -35,12 +31,38 @@ module Almicube
35
31
  def page(page=1)
36
32
  page = [1, page.to_i].max
37
33
  revrange = connection.zrevrange(key, (page - 1) * per_page, page * per_page - 1)
38
- records = class_name.where("id IN (?)", revrange).all
34
+ records = class_name.where("id IN (?)", revrange)
35
+ records.each { |record| record.current_ranking = self }
39
36
  revrange.inject([]) { |l, v| l << records.detect { |r| r.to_param == v } }
40
37
  end
41
38
 
39
+ def selector=(value)
40
+ @selector = value
41
+ @selector.ranking = self unless @selector.nil?
42
+ end
43
+
44
+ def aggregator=(value)
45
+ @aggregator = value
46
+ @aggregator.ranking = self unless @aggregator.nil?
47
+ end
48
+
49
+ def bundler=(value)
50
+ @bundler = value
51
+ @bundler.ranking = self unless @bundler.nil?
52
+ end
53
+
54
+ def cogs
55
+ cogs = []
56
+ cogs << @selector unless @selector.nil?
57
+ cogs << @aggregator unless @aggregator.nil?
58
+ cogs << @bundler unless @bundler.nil?
59
+ cogs
60
+ end
61
+
42
62
  def aggregate!(options = {})
63
+ cogs.each { |cog| cog.before_aggregate }
43
64
  @aggregator.aggregate self
65
+ cogs.each { |cog| cog.after_aggregate }
44
66
  end
45
67
 
46
68
  def aggregate(options = {})
@@ -54,6 +76,18 @@ module Almicube
54
76
  false
55
77
  end
56
78
 
79
+ def score(item)
80
+ ( connection.zscore key, item.to_param ) || @options.fetch(:default_score, 0)
81
+ end
82
+
83
+ def rank(item)
84
+ connection.zrevrank(key, item.to_param) + 1
85
+ end
86
+
87
+ def incr(item, score = 1)
88
+ connection.zincrby key, score, item.to_param
89
+ end
90
+
57
91
  protected
58
92
 
59
93
  attr_reader :prefix, :suffix
@@ -17,10 +17,6 @@ module Almicube
17
17
  default_score: 0,
18
18
  class_name: nil }
19
19
  end
20
-
21
- def build(options={})
22
- self.new options
23
- end
24
20
  end
25
21
 
26
22
  def initialize(options={})
@@ -72,10 +68,6 @@ module Almicube
72
68
  SubRanking.new(self).ranged(name)
73
69
  end
74
70
 
75
- def per_page=(value)
76
- @options[:per_page] = value
77
- end
78
-
79
71
  def options
80
72
  @options.select{ |k| k != :type }.merge({ selector: selector, aggregator: aggregator })
81
73
  end
@@ -91,38 +83,6 @@ module Almicube
91
83
  def default_score
92
84
  @options.fetch(:default_score, 0)
93
85
  end
94
-
95
- def score(item)
96
- actual_score = ( connection.zscore key, item.to_param ) || @options.fetch(:default_score, 0)
97
- case @options[:as].to_s
98
- when "Integer"
99
- actual_score.to_i
100
- when "Float"
101
- actual_score.to_f
102
- else
103
- actual_score
104
- end
105
- end
106
-
107
- def rank(item)
108
- connection.zrevrank(key, item.to_param) + 1
109
- end
110
-
111
- def incr(item, score = 1)
112
- connection.zincrby key, score, item.to_param
113
- end
114
-
115
- protected
116
-
117
- def key_format(key_base, options)
118
- key = key_base.to_s.clone
119
- tmp_options = options.merge date: options.fetch(:date, Date.today).strftime(@options[:date_format])
120
- tmp_options[:type] ||= :data
121
- key.match( self.class::KEY_PATTERN ) do |m|
122
- key.gsub! m[0], tmp_options.fetch(m[1].to_sym, '').to_s
123
- end while key =~ self.class::KEY_PATTERN
124
- key
125
- end
126
86
  end
127
87
  end
128
88
  end
@@ -13,10 +13,7 @@ module Almicube
13
13
  end
14
14
 
15
15
  def key
16
- key = ranking.key
17
- key[:type] = :built
18
- key[:suffix] = suffix
19
- key[:selector] = selector
16
+ key = ranking.key.merge!( type: :built, suffix: suffix, selector: selector )
20
17
  key[:distinction] = "%{date}:in-%{selector}" unless selector.is_a? Selector::AllSelector
21
18
  key
22
19
  end
@@ -25,16 +22,6 @@ module Almicube
25
22
  ranking.key
26
23
  end
27
24
 
28
- def bundler=(value)
29
- @bundler = value
30
- value.ranking = self
31
- end
32
-
33
- def selector=(value)
34
- @selector = value
35
- value.ranking = self
36
- end
37
-
38
25
  def ranged(name)
39
26
  bundler_class = "Almicube::Bundler::#{name.to_s.classify}Bundler".constantize
40
27
  self.bundler = bundler_class.new if bundler_class.is_a? Class
@@ -1,3 +1,3 @@
1
1
  module Almicube
2
- VERSION = '0.0.6'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -8,31 +8,53 @@ describe Almicube::Aggregator::SumAggregator do
8
8
  end
9
9
 
10
10
  describe "#aggregate" do
11
- [10, 100, 300].each do |size|
12
- describe "with #{size} records" do
13
- let(:key) { "sample" }
14
- let(:ranking) { double( records: records, selector: nil, data?: true, key: key, attribute_name: attribute ) }
15
- let(:records) { size.times.map { |i| double( to_param: i+1, score: 100, access: (i + 2) * 12 ) } }
16
- let(:aggregator) { described_class.new }
17
- let(:attribute) { :score }
18
-
19
- before { aggregator.ranking = ranking }
20
-
21
- it { expect(records.length).to eq size }
22
- it { expect{ aggregator.aggregate }.not_to raise_error }
23
- it { expect{ aggregator.aggregate }.to change{ @connection.zcard(key) }.by size }
24
-
25
- describe "for score" do
26
- before { aggregator.aggregate }
27
- it { records.each { |record| expect(@connection.zscore(key, record.to_param)).to eq 100 } }
28
- end
11
+ let(:key) { "sample" }
12
+ let(:aggregator) { described_class.new }
13
+ let(:attribute) { :score }
14
+
15
+ context "with data ranking" do
16
+ [10, 100, 300].each do |size|
17
+ describe "and #{size} records" do
18
+ let(:ranking) { double( records: records, selector: nil, data?: true, key: key, attribute_name: attribute ) }
19
+ let(:records) { size.times.map { |i| double( to_param: i+1, score: 100, access: (i + 2) * 12 ) } }
20
+
21
+ before { aggregator.ranking = ranking }
29
22
 
30
- describe "for access" do
31
- let(:attribute) { :access }
32
- before { aggregator.aggregate }
33
- it { records.each { |record| expect(@connection.zscore(key, record.to_param)).to eq (record.to_param+1)*12} }
23
+ it { expect(records.length).to eq size }
24
+ it { expect{ aggregator.aggregate }.not_to raise_error }
25
+ it { expect{ aggregator.aggregate }.to change{ @connection.zcard(key) }.by size }
26
+
27
+ describe "for score" do
28
+ before { aggregator.aggregate }
29
+ it { records.each { |record| expect(@connection.zscore(key, record.to_param)).to eq 100 } }
30
+ end
31
+
32
+ describe "for access" do
33
+ let(:attribute) { :access }
34
+ before { aggregator.aggregate }
35
+ it { records.each { |record| expect(@connection.zscore(key, record.to_param)).to eq (record.to_param+1)*12} }
36
+ end
34
37
  end
35
38
  end
36
39
  end
40
+
41
+ context "with sub ranking" do
42
+ let(:size) { 10 }
43
+ let(:keys) { ["sample1", "sample2"] }
44
+ let(:selector) { double( interstore: nil, before_aggregate: nil ) }
45
+ let(:ranking) { double( bundled_keys: keys, selector: selector, data?: false, key: key ) }
46
+
47
+ before do
48
+ keys.each { |key| size.times { |i| @connection.zadd(key, 10, i) } }
49
+ aggregator.ranking = ranking
50
+ end
51
+
52
+ it { expect{ aggregator.aggregate }.to change{ @connection.zcard(key) }.by size }
53
+
54
+ describe "for score" do
55
+ before { aggregator.aggregate }
56
+ it { size.times { |i| expect(@connection.zscore(key, i)).to eq 20 } }
57
+ end
58
+ end
37
59
  end
38
60
  end
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe Almicube::Bundler::TodayBundler do
4
+ let(:bundler) { described_class.new }
5
+ describe "#keys" do
6
+ it { expect(bundler.keys).to eq [] }
7
+ end
8
+ end
@@ -1,9 +1,63 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Almicube::Ranking::Base do
4
+ before { @connection = Redis.new }
5
+
6
+ def setup_datastore(key)
7
+ @connection.del key
8
+ @connection.zadd key, 10, 1
9
+ @connection.zadd key, 20, 2
10
+ end
11
+
4
12
  describe "#bundled_keys" do
5
13
  let(:bundler) { double( keys: ["1", "2"], :"ranking=" => nil ) }
6
14
  let(:ranking) { described_class.new bundler: bundler }
7
15
  it { expect(ranking.bundled_keys).to eq ["1", "2"] }
8
16
  end
17
+
18
+ describe "#page" do
19
+ let(:ranking) { described_class.new class_name: MockModel }
20
+ before do
21
+ ranking.stub(:key) { "sample" }
22
+ setup_datastore "sample"
23
+ Almicube::Config.config.stub(:connection) { @connection }
24
+ MockModel.should_receive(:where).with("id IN (?)", ["2", "1"]) { [] }
25
+ end
26
+ it { ranking.page 1 }
27
+ end
28
+
29
+ describe "#data?" do
30
+ let(:ranking) { described_class.new }
31
+ it { expect(ranking).not_to be_data }
32
+ end
33
+
34
+ describe "score" do
35
+ let(:ranking) { described_class.new class_name: MockModel }
36
+ before do
37
+ ranking.stub(:key) { "sample" }
38
+ setup_datastore "sample"
39
+ Almicube::Config.config.stub(:connection) { @connection }
40
+ end
41
+ it { expect(ranking.score(1)).to eq 10 }
42
+ it { expect(ranking.score(2)).to eq 20 }
43
+ end
44
+
45
+ describe "rank" do
46
+ let(:ranking) { described_class.new class_name: MockModel }
47
+ before do
48
+ ranking.stub(:key) { "sample" }
49
+ setup_datastore "sample"
50
+ Almicube::Config.config.stub(:connection) { @connection }
51
+ end
52
+ it { expect(ranking.rank(1)).to eq 2 }
53
+ it { expect(ranking.rank(2)).to eq 1 }
54
+ end
55
+
56
+ describe "#aggregate" do
57
+ context "raises exception from aggregator" do
58
+ let(:ranking) { described_class.new class_name: MockModel }
59
+ before { ranking.stub(:aggregate!).and_raise "exception" }
60
+ it { expect(ranking.aggregate).to eq false }
61
+ end
62
+ end
9
63
  end
@@ -35,6 +35,47 @@ describe Almicube::Ranking::DataRanking do
35
35
  it { expect(ranking.per_page).to eq 10 }
36
36
  end
37
37
 
38
+ describe "#default_score" do
39
+ context "don't set default_score" do
40
+ let(:ranking) { described_class.new }
41
+ it { expect(ranking.default_score).to eq 0 }
42
+ end
43
+
44
+ context "sets default_score by options" do
45
+ let(:ranking) { described_class.new default_score: 0 }
46
+ it { expect(ranking.default_score).to eq 0 }
47
+ end
48
+ end
49
+
50
+ describe "#attribute_name" do
51
+ context "don't set attribute_name" do
52
+ let(:ranking) { described_class.new }
53
+ it { expect(ranking.attribute_name).to eq :score }
54
+ end
55
+
56
+ context "sets attribute_name by options" do
57
+ %i[score access].each do |name|
58
+ describe "to #{name}" do
59
+ let(:ranking) { described_class.new attribute_name: :score }
60
+ it { expect(ranking.attribute_name).to eq :score }
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+ describe "#date" do
67
+ context "don't set date" do
68
+ let(:ranking) { described_class.new }
69
+ it { expect(ranking.date).to eq Date.today }
70
+ end
71
+
72
+ context "sets date by options" do
73
+ let(:date) { Date.today - 12.days }
74
+ let(:ranking) { described_class.new date: date }
75
+ it { expect(ranking.date).to eq date }
76
+ end
77
+ end
78
+
38
79
  describe "#class_name" do
39
80
  let(:ranking) { described_class.new class_name: MockModel }
40
81
  it { expect(ranking.class_name).to eq MockModel }
@@ -96,8 +137,55 @@ describe Almicube::Ranking::DataRanking do
96
137
  it { expect(options).to have_key key }
97
138
  end
98
139
 
99
- %i[type].each do |key|
100
- it { expect(options).not_to have_key key }
140
+ %i[type].each { |key| it { expect(options).not_to have_key key } }
141
+ end
142
+
143
+ describe "#in" do
144
+ context "with correct instance" do
145
+ let(:ranking) { described_class.new class_name: MockModel }
146
+ let(:target) { double( mock_models: [] ) }
147
+
148
+ before do
149
+ Almicube::Selector::HasManySelector.any_instance.stub(:"ranking=")
150
+ end
151
+
152
+ it { expect(ranking.in(target)).to be_kind_of Almicube::Ranking::SubRanking }
153
+ end
154
+
155
+ context "without correct instance" do
156
+ let(:ranking) { described_class.new }
157
+ let(:target) { double() }
158
+
159
+ before do
160
+ Almicube::Selector::HasManySelector.any_instance.stub(:"ranking=")
161
+ end
162
+
163
+ it { expect(ranking.in(target)).not_to be_kind_of Almicube::Ranking::SubRanking }
101
164
  end
102
165
  end
166
+
167
+ describe "#exists?" do
168
+ let(:ranking) { described_class.new }
169
+ let(:key) { "sample" }
170
+ before do
171
+ @connection = Redis.new
172
+ Almicube::Config.config.stub(:connection) { @connection }
173
+ ranking.stub(:key).and_return(key)
174
+ end
175
+
176
+ context "exists key in redis" do
177
+ before { @connection.del key }
178
+ it { expect(ranking).not_to be_exists }
179
+ end
180
+
181
+ context "don't exist key in redis" do
182
+ before { @connection.zadd key, 10, 10 }
183
+ it { expect(ranking).to be_exists }
184
+ end
185
+ end
186
+
187
+ describe "#ranged" do
188
+ let(:ranking) { described_class.new }
189
+ it { expect(ranking.ranged(:yesterday)).to be_kind_of Almicube::Ranking::SubRanking }
190
+ end
103
191
  end
@@ -16,6 +16,11 @@ describe Almicube::Selector::AllSelector do
16
16
  end
17
17
  end
18
18
 
19
+ describe "#label" do
20
+ let(:selector) { described_class.new }
21
+ it { expect(selector.label).to eq :data }
22
+ end
23
+
19
24
  it_behaves_like "ranking cog" do
20
25
  let(:target) { described_class.new }
21
26
  end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe Almicube::Selector::HasManySelector do
4
+ before { @connection = Redis.new }
5
+
6
+ describe "#before_aggregate" do
7
+ let(:target) { double( items: [double(to_param: 10)] ) }
8
+ let(:selector) { described_class.new target: target, association_name: :items }
9
+ before { Almicube::Config.config.stub(:connection) { @connection } }
10
+ before { selector.stub(:interstore_key) { "sample-has-many-selector" } }
11
+ it { expect{ selector.before_aggregate }.to change{ @connection.zcard("sample-has-many-selector") }.by 1 }
12
+ end
13
+
14
+ describe "#label" do
15
+ let(:target) { double( items: [double(to_param: 10)], to_param: 10) }
16
+ let(:selector) { described_class.new target: target, association_name: :items }
17
+ it { expect(selector.label).to eq "r_spec/mocks/mock-10" }
18
+ end
19
+
20
+ describe "#interstore" do
21
+ let(:target) { double( items: [double(to_param: 10)], to_param: 10) }
22
+ let(:key) { Almicube::Key.new double(options: {}), {} }
23
+ let(:selector) { described_class.new target: target, association_name: :items }
24
+ before { selector.ranking = double(key: key) }
25
+ it { expect(selector.interstore.to_s).to match /r_spec\/mocks\/mock-10/ }
26
+ end
27
+ end
@@ -4,6 +4,12 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__)))
4
4
  require 'bundler/setup'
5
5
  Bundler.require
6
6
 
7
+ require 'simplecov'
8
+ SimpleCov.start 'rails' do
9
+ add_filter '/tmp/'
10
+ add_filter '/spec/'
11
+ end
12
+
7
13
  Dir[File.join(File.dirname(__FILE__), "supports", "*.rb")].each {|f| require f}
8
14
  Dir[File.join(File.dirname(__FILE__), "mocks", "*.rb")].each {|f| require f}
9
15
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: almicube
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - niaeashes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-11 00:00:00.000000000 Z
11
+ date: 2014-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: Provide raking system for your ActiveRecord Model on Rails 4 with SortedSet
70
84
  of Redis DataBase.
71
85
  email:
@@ -106,6 +120,7 @@ files:
106
120
  - lib/almicube/selector/method_selector.rb
107
121
  - lib/almicube/version.rb
108
122
  - spec/almicube/aggregator/sum_aggregator_spec.rb
123
+ - spec/almicube/builder/today_bundler_spec.rb
109
124
  - spec/almicube/builder_sprc.rb
110
125
  - spec/almicube/bundler/days_ago_bundler_spec.rb
111
126
  - spec/almicube/bundler/today_bundler_spec.rb
@@ -116,6 +131,7 @@ files:
116
131
  - spec/almicube/ranking/data_ranking_spec.rb
117
132
  - spec/almicube/ranking/sub_ranking_spec.rb
118
133
  - spec/almicube/selector/all_selector_spec.rb
134
+ - spec/almicube/selector/has_many_selector_spec.rb
119
135
  - spec/almicube/selector/method_selector_spec.rb
120
136
  - spec/almicube/selector/mock_spec.rb
121
137
  - spec/mocks/aggregator.rb
@@ -150,6 +166,7 @@ specification_version: 4
150
166
  summary: Ranking extension for your model
151
167
  test_files:
152
168
  - spec/almicube/aggregator/sum_aggregator_spec.rb
169
+ - spec/almicube/builder/today_bundler_spec.rb
153
170
  - spec/almicube/builder_sprc.rb
154
171
  - spec/almicube/bundler/days_ago_bundler_spec.rb
155
172
  - spec/almicube/bundler/today_bundler_spec.rb
@@ -160,6 +177,7 @@ test_files:
160
177
  - spec/almicube/ranking/data_ranking_spec.rb
161
178
  - spec/almicube/ranking/sub_ranking_spec.rb
162
179
  - spec/almicube/selector/all_selector_spec.rb
180
+ - spec/almicube/selector/has_many_selector_spec.rb
163
181
  - spec/almicube/selector/method_selector_spec.rb
164
182
  - spec/almicube/selector/mock_spec.rb
165
183
  - spec/mocks/aggregator.rb