commendo 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/bin/commendo-time-ruby.rb +47 -0
- data/lib/commendo.rb +4 -0
- data/lib/commendo/content_set.rb +1 -0
- data/lib/commendo/ruby-backed/content_set.rb +133 -0
- data/lib/commendo/ruby-backed/tag_set.rb +43 -0
- data/lib/commendo/ruby-backed/weighted_group.rb +38 -0
- data/lib/commendo/tag_set.rb +1 -0
- data/lib/commendo/version.rb +1 -1
- data/lib/commendo/weighted_group.rb +1 -0
- data/model 2.mwb +0 -0
- data/test/ruby_content_set_test.rb +33 -0
- data/test/ruby_tag_set_test.rb +27 -0
- data/test/ruby_weighted_group_test.rb +43 -0
- metadata +13 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 469912023220e7c8d711e40f37225461644e24db
|
4
|
+
data.tar.gz: f4e79eccf3eee391ff0829720914d82d535d283a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58a603eb4e13bd0a9f09c3e8e5fb34fd6b86a2a0944c86da3389792b76a505b808a03ec9ab35aa39e0b6152c3ba20dbfb69d83c2dced898b1ae09a152792aa07
|
7
|
+
data.tar.gz: c9af132db981e73748ed917fe42b3aa10f43135bc55f7340570e955c5dbb3c14da0f4d6aa295ae8003f86e923368d9404894fdc545ed8e9e38895718ef636ab1
|
data/CHANGELOG.md
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'redis'
|
4
|
+
require 'commendo'
|
5
|
+
require 'progressbar'
|
6
|
+
|
7
|
+
def timer(msg)
|
8
|
+
start = Time.now
|
9
|
+
value = yield
|
10
|
+
finish = Time.now
|
11
|
+
$stderr.puts "#{msg} took #{finish - start}"
|
12
|
+
return value
|
13
|
+
end
|
14
|
+
|
15
|
+
infile = ARGV[0]
|
16
|
+
key_base = ARGV[1]
|
17
|
+
limit = ARGV[2].to_i
|
18
|
+
|
19
|
+
Commendo.config do |config|
|
20
|
+
config.backend = :ruby
|
21
|
+
end
|
22
|
+
cs = Commendo::ContentSet.new(key_base: key_base)
|
23
|
+
|
24
|
+
resource_to_sets = nil
|
25
|
+
timer('Loading') do
|
26
|
+
lines = File.open(infile).readlines
|
27
|
+
resource_to_sets = lines.map { |line| line.strip!; line = line.split("\t"); r = line.shift; [r, line] }
|
28
|
+
resource_to_sets.each do |resource, sets|
|
29
|
+
cs.add(resource, *sets)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
timer('calculate_similarity') do
|
34
|
+
cs.calculate_similarity
|
35
|
+
end
|
36
|
+
|
37
|
+
names_to_query = timer("Select #{limit} random names to use") do
|
38
|
+
resource_to_sets.map { |resource, sets| resource }.sort_by { rand }.first(limit)
|
39
|
+
end
|
40
|
+
|
41
|
+
# pbar = ProgressBar.new('Querying similar_to', names_to_query.length)
|
42
|
+
names_to_query.each do |name|
|
43
|
+
timer('Similarity') { cs.similar_to(name) }
|
44
|
+
# pbar.inc
|
45
|
+
end
|
46
|
+
# pbar.finish
|
47
|
+
|
data/lib/commendo.rb
CHANGED
@@ -17,6 +17,10 @@ require 'commendo/mysql-backed/content_set'
|
|
17
17
|
require 'commendo/mysql-backed/tag_set'
|
18
18
|
require 'commendo/mysql-backed/weighted_group'
|
19
19
|
|
20
|
+
require 'commendo/ruby-backed/content_set'
|
21
|
+
require 'commendo/ruby-backed/tag_set'
|
22
|
+
require 'commendo/ruby-backed/weighted_group'
|
23
|
+
|
20
24
|
module Commendo
|
21
25
|
|
22
26
|
def self.config
|
data/lib/commendo/content_set.rb
CHANGED
@@ -14,6 +14,7 @@ module Commendo
|
|
14
14
|
def initialize(args)
|
15
15
|
@backend = RedisBacked::ContentSet.new(args[:key_base], args[:tag_set]) if Commendo.config.backend == :redis
|
16
16
|
@backend = MySqlBacked::ContentSet.new(args[:key_base], args[:tag_set]) if Commendo.config.backend == :mysql
|
17
|
+
@backend = RubyBacked::ContentSet.new(args[:key_base], args[:tag_set]) if Commendo.config.backend == :ruby
|
17
18
|
raise 'Unrecognised backend type, try :redis or :mysql' if @backend.nil?
|
18
19
|
end
|
19
20
|
|
@@ -0,0 +1,133 @@
|
|
1
|
+
module Commendo
|
2
|
+
module RubyBacked
|
3
|
+
|
4
|
+
class ContentSet
|
5
|
+
|
6
|
+
attr_accessor :key_base, :tag_set
|
7
|
+
|
8
|
+
DEFAULT_LIMIT = 1000
|
9
|
+
|
10
|
+
def initialize(key_base, tag_set = nil)
|
11
|
+
@resource_group_score = Hash.new { |h, k| h[k] = Hash.new { |h, k| h[k] = 0 } }
|
12
|
+
@key_base = key_base
|
13
|
+
@tag_set = tag_set
|
14
|
+
@threshold = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_by_group(group, *resources)
|
18
|
+
resources.map! { |r| r.is_a?(Array) ? r : [r, 1] } #sets default score of 1
|
19
|
+
resources.each { |r| add_single(r[0], group, r[1]) }
|
20
|
+
end
|
21
|
+
|
22
|
+
def add(resource, *groups)
|
23
|
+
resource = resource.to_s
|
24
|
+
groups.map! { |g| g.is_a?(Array) ? g : [g, 1] } #sets default score of 1
|
25
|
+
groups.each do |(group, score)|
|
26
|
+
@resource_group_score[resource][group.to_s] += score
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def add_single(resource, group, score)
|
31
|
+
add(resource, [group, score])
|
32
|
+
end
|
33
|
+
|
34
|
+
def add_and_calculate(resource, *groups)
|
35
|
+
add(resource, *groups)
|
36
|
+
calculate_similarity
|
37
|
+
end
|
38
|
+
|
39
|
+
def groups(resource)
|
40
|
+
resource = resource.to_s
|
41
|
+
@resource_group_score[resource].keys
|
42
|
+
end
|
43
|
+
|
44
|
+
def delete(resource)
|
45
|
+
resource = resource.to_s
|
46
|
+
@resource_group_score[resource].each { |group,score| @group_resource_scores[group].delete(resource) }
|
47
|
+
@resource_group_score.delete(resource)
|
48
|
+
@resource_totals.delete(resource)
|
49
|
+
end
|
50
|
+
|
51
|
+
def calculate_similarity_for_resource(resource, threshold = 0)
|
52
|
+
calculate_similarity(threshold)
|
53
|
+
end
|
54
|
+
|
55
|
+
def calculate_similarity(threshold = nil)
|
56
|
+
@resource_totals = Hash[@resource_group_score.map { |resource, groups| [resource, groups.map { |group, score| score }.inject(0, :+)] }]
|
57
|
+
flat_resource_group_score = @resource_group_score.flat_map do |resource, groups|
|
58
|
+
groups.map do |group, score|
|
59
|
+
[resource, group, score]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
@group_resource_scores = Hash.new { |h, k| h[k] = {} }
|
63
|
+
flat_resource_group_score.each { |(resource, group, score)| @group_resource_scores[group][resource] = score }
|
64
|
+
|
65
|
+
@threshold = threshold
|
66
|
+
end
|
67
|
+
|
68
|
+
def similar_to(resource, limit = DEFAULT_LIMIT)
|
69
|
+
if resource.is_a? Array
|
70
|
+
return similar_to_array(resource, limit)
|
71
|
+
else
|
72
|
+
return similar_to_single(resource, limit)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def similar_to_array(resources, limit)
|
77
|
+
similar = resources.flat_map { |r| similar_to_single(r, limit) }
|
78
|
+
similar = similar.group_by { |h| h[:resource] }
|
79
|
+
similar = similar.map { |resource, sims| {resource: resource, similarity: sims.inject(0) { |sum, sim| sum += sim[:similarity] }} }
|
80
|
+
similar.map! { |h| {resource: h[:resource], similarity: h[:similarity].round(3)} }
|
81
|
+
similar.keep_if { |sim| @threshold.nil? || sim[:similarity] > @threshold }
|
82
|
+
similar = similar.sort_by { |h| [h[:similarity], h[:resource]] }.reverse.first(limit)
|
83
|
+
similar
|
84
|
+
end
|
85
|
+
|
86
|
+
def similar_to_single(resource, limit)
|
87
|
+
resource = resource.to_s
|
88
|
+
my_groups = @resource_group_score[resource]
|
89
|
+
|
90
|
+
similar = Hash.new { |h, k| h[k] = 0 }
|
91
|
+
|
92
|
+
my_groups.each do |group, my_score|
|
93
|
+
@group_resource_scores[group].each do |other_resource, score|
|
94
|
+
next if other_resource == resource
|
95
|
+
similarity = (my_score + score).to_f / (@resource_totals[resource] + @resource_totals[other_resource]).to_f
|
96
|
+
similar[other_resource] += similarity
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
similar = similar.map { |resource, similarity| {resource: resource, similarity: similarity.round(3)} }.sort_by { |h| [h[:similarity], h[:resource]] }.reverse.first(limit)
|
101
|
+
similar.keep_if { |sim| @threshold.nil? || sim[:similarity] > @threshold }
|
102
|
+
similar
|
103
|
+
end
|
104
|
+
|
105
|
+
def filtered_similar_to(resource, options = {})
|
106
|
+
if @tag_set.nil? || (options[:include].nil? && options[:exclude].nil?) || @tag_set.empty?
|
107
|
+
return similar_to(resource, options[:limit] || DEFAULT_LIMIT)
|
108
|
+
else
|
109
|
+
similar = similar_to(resource)
|
110
|
+
limit = options[:limit] || similar.length
|
111
|
+
filtered = []
|
112
|
+
similar.each do |s|
|
113
|
+
return filtered if filtered.length >= limit
|
114
|
+
filtered << s if @tag_set.matches(s[:resource], options[:include], options[:exclude])
|
115
|
+
end
|
116
|
+
return filtered
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def remove_from_groups(resource, *groups)
|
121
|
+
resource = resource.to_s
|
122
|
+
groups.each { |g| @resource_group_score[resource].delete(g.to_s) }
|
123
|
+
end
|
124
|
+
|
125
|
+
def remove_from_groups_and_calculate(resource, *groups)
|
126
|
+
remove_from_groups(resource, *groups)
|
127
|
+
calculate_similarity_for_resource(resource)
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Commendo
|
2
|
+
module RubyBacked
|
3
|
+
class TagSet
|
4
|
+
|
5
|
+
attr_accessor :key_base
|
6
|
+
|
7
|
+
def initialize(key_base)
|
8
|
+
@key_base = key_base
|
9
|
+
@resource_to_tags = Hash.new { |h, k| h[k] = [] }
|
10
|
+
end
|
11
|
+
|
12
|
+
def empty?
|
13
|
+
@resource_to_tags.keys.empty?
|
14
|
+
end
|
15
|
+
|
16
|
+
def get(resource)
|
17
|
+
@resource_to_tags[resource.to_s]
|
18
|
+
end
|
19
|
+
|
20
|
+
def add(resource, *tags)
|
21
|
+
@resource_to_tags[resource.to_s] += tags
|
22
|
+
end
|
23
|
+
|
24
|
+
def set(resource, *tags)
|
25
|
+
@resource_to_tags[resource.to_s] = tags
|
26
|
+
end
|
27
|
+
|
28
|
+
def matches(resource, include, exclude = [])
|
29
|
+
resource_tags = get(resource)
|
30
|
+
can_include = include.nil? || include.empty? || (resource_tags & include).length > 0
|
31
|
+
should_exclude = !exclude.nil? && !exclude.empty? && (resource_tags & exclude).length > 0
|
32
|
+
return can_include && !should_exclude
|
33
|
+
end
|
34
|
+
|
35
|
+
def delete(resource, *tags)
|
36
|
+
@resource_to_tags.delete(resource.to_s) if tags.empty?
|
37
|
+
@resource_to_tags[resource.to_s] -= tags unless tags.empty?
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Commendo
|
2
|
+
module RubyBacked
|
3
|
+
|
4
|
+
class WeightedGroup
|
5
|
+
|
6
|
+
attr_accessor :content_sets, :key_base, :tag_set
|
7
|
+
|
8
|
+
def initialize(key_base, *content_sets)
|
9
|
+
@key_base = key_base
|
10
|
+
@content_sets = content_sets
|
11
|
+
end
|
12
|
+
|
13
|
+
def similar_to(resource, limit = 0)
|
14
|
+
similar = @content_sets.flat_map { |cs| cs[:cs].similar_to(resource).map { |s| {resource: s[:resource], similarity: (s[:similarity] * cs[:weight]).round(3)} } }
|
15
|
+
grouped = similar.group_by { |r| r[:resource] }
|
16
|
+
totaled_similar = grouped.map { |resource, similar| {resource: resource, similarity: similar.inject(0.0) { |sum, s| sum += s[:similarity] }} }.sort_by { |h| [h[:similarity], h[:resource]] }.reverse
|
17
|
+
limit > 0 ? totaled_similar[0..limit-1] : totaled_similar
|
18
|
+
end
|
19
|
+
|
20
|
+
def filtered_similar_to(resource, options = {})
|
21
|
+
if @tag_set.nil? || (options[:include].nil? && options[:exclude].nil?)
|
22
|
+
return similar_to(resource, options[:limit] || 0)
|
23
|
+
else
|
24
|
+
similar = similar_to(resource)
|
25
|
+
limit = options[:limit] || similar.length
|
26
|
+
filtered = []
|
27
|
+
similar.each do |s|
|
28
|
+
return filtered if filtered.length >= limit
|
29
|
+
filtered << s if @tag_set.matches(s[:resource], options[:include], options[:exclude])
|
30
|
+
end
|
31
|
+
return filtered
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
data/lib/commendo/tag_set.rb
CHANGED
@@ -7,6 +7,7 @@ module Commendo
|
|
7
7
|
def initialize(args)
|
8
8
|
@backend = RedisBacked::TagSet.new(args[:key_base]) if Commendo.config.backend == :redis
|
9
9
|
@backend = MySqlBacked::TagSet.new(args[:key_base]) if Commendo.config.backend == :mysql
|
10
|
+
@backend = RubyBacked::TagSet.new(args[:key_base]) if Commendo.config.backend == :ruby
|
10
11
|
raise 'Unrecognised backend type, try :redis or :mysql' if @backend.nil?
|
11
12
|
end
|
12
13
|
|
data/lib/commendo/version.rb
CHANGED
@@ -6,6 +6,7 @@ module Commendo
|
|
6
6
|
def initialize(args)
|
7
7
|
@backend = RedisBacked::WeightedGroup.new(args[:key_base], *args[:content_sets]) if Commendo.config.backend == :redis
|
8
8
|
@backend = MySqlBacked::WeightedGroup.new(args[:key_base], *args[:content_sets]) if Commendo.config.backend == :mysql
|
9
|
+
@backend = RubyBacked::WeightedGroup.new(args[:key_base], *args[:content_sets]) if Commendo.config.backend == :ruby
|
9
10
|
raise 'Unrecognised backend type, try :redis or :mysql' if @backend.nil?
|
10
11
|
end
|
11
12
|
|
data/model 2.mwb
CHANGED
Binary file
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative 'tests_for_content_sets.rb'
|
2
|
+
gem 'minitest'
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'minitest/pride'
|
5
|
+
require 'minitest/mock'
|
6
|
+
require 'mocha/setup'
|
7
|
+
require 'commendo'
|
8
|
+
|
9
|
+
module Commendo
|
10
|
+
|
11
|
+
class RubyContentSetTest < Minitest::Test
|
12
|
+
|
13
|
+
def setup
|
14
|
+
Commendo.config do |config|
|
15
|
+
config.backend = :ruby
|
16
|
+
end
|
17
|
+
@key_base = 'CommendoTests'
|
18
|
+
@cs = ContentSet.new(key_base: @key_base)
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_tag_set(kb)
|
22
|
+
Commendo::TagSet.new(key_base: kb)
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_content_set(key_base, ts = nil)
|
26
|
+
Commendo::ContentSet.new(key_base: key_base, tag_set: ts)
|
27
|
+
end
|
28
|
+
|
29
|
+
include TestsForContentSets
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'tests_for_tag_sets'
|
2
|
+
gem 'minitest'
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'minitest/pride'
|
5
|
+
require 'minitest/mock'
|
6
|
+
require 'mocha/setup'
|
7
|
+
require 'commendo'
|
8
|
+
|
9
|
+
module Commendo
|
10
|
+
|
11
|
+
class RubyTagSetTest < Minitest::Test
|
12
|
+
|
13
|
+
def setup
|
14
|
+
Commendo.config do |config|
|
15
|
+
config.backend = :ruby
|
16
|
+
end
|
17
|
+
@ts = TagSet.new(key_base: 'TagSetTest')
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_tag_set(kb)
|
21
|
+
Commendo::TagSet.new(key_base: kb)
|
22
|
+
end
|
23
|
+
|
24
|
+
include TestsForTagSets
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require_relative 'tests_for_weighted_groups'
|
2
|
+
gem 'minitest'
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'minitest/pride'
|
5
|
+
require 'minitest/mock'
|
6
|
+
require 'mocha/setup'
|
7
|
+
require 'commendo'
|
8
|
+
|
9
|
+
module Commendo
|
10
|
+
|
11
|
+
class RubyWeightedGroupTest < Minitest::Test
|
12
|
+
|
13
|
+
def setup
|
14
|
+
@tag_set = TagSet.new(key_base: 'CommendoTests:Tags')
|
15
|
+
@cs1 = ContentSet.new(key_base: 'CommendoTests:ContentSet1', tag_set: @tag_set)
|
16
|
+
@cs2 = ContentSet.new(key_base: 'CommendoTests:ContentSet2', tag_set: @tag_set)
|
17
|
+
@cs3 = ContentSet.new(key_base: 'CommendoTests:ContentSet3', tag_set: @tag_set)
|
18
|
+
(3..23).each do |group|
|
19
|
+
(3..23).each do |res|
|
20
|
+
@cs1.add_by_group(group, res) if res.modulo(group).zero? && res.modulo(2).zero?
|
21
|
+
@cs2.add_by_group(group, res) if res.modulo(group).zero? && res.modulo(3).zero?
|
22
|
+
@cs3.add_by_group(group, res) if res.modulo(group).zero? && res.modulo(6).zero?
|
23
|
+
@tag_set.add(res, 'mod3') if res.modulo(3).zero?
|
24
|
+
@tag_set.add(res, 'mod4') if res.modulo(4).zero?
|
25
|
+
@tag_set.add(res, 'mod5') if res.modulo(5).zero?
|
26
|
+
@tag_set.add(res, 'mod7') if res.modulo(7).zero?
|
27
|
+
end
|
28
|
+
end
|
29
|
+
[@cs1, @cs2, @cs3].each { |cs| cs.calculate_similarity }
|
30
|
+
@weighted_group = Commendo::WeightedGroup.new(key_base: 'CommendoTests:WeightedGroup',
|
31
|
+
content_sets: [{cs: @cs1, weight: 1.0},
|
32
|
+
{cs: @cs2, weight: 10.0},
|
33
|
+
{cs: @cs3, weight: 100.0}]
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
include TestsForWeightedGroups
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: commendo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob Styles
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
@@ -150,6 +150,7 @@ executables:
|
|
150
150
|
- commendo-recommendations-distribution
|
151
151
|
- commendo-similarity-distribution
|
152
152
|
- commendo-time-mysql.rb
|
153
|
+
- commendo-time-ruby.rb
|
153
154
|
extensions: []
|
154
155
|
extra_rdoc_files: []
|
155
156
|
files:
|
@@ -169,6 +170,7 @@ files:
|
|
169
170
|
- bin/commendo-recommendations-distribution
|
170
171
|
- bin/commendo-similarity-distribution
|
171
172
|
- bin/commendo-time-mysql.rb
|
173
|
+
- bin/commendo-time-ruby.rb
|
172
174
|
- commendo.gemspec
|
173
175
|
- lib/commendo.rb
|
174
176
|
- lib/commendo/configuration.rb
|
@@ -181,6 +183,9 @@ files:
|
|
181
183
|
- lib/commendo/redis-backed/similarity.lua
|
182
184
|
- lib/commendo/redis-backed/tag_set.rb
|
183
185
|
- lib/commendo/redis-backed/weighted_group.rb
|
186
|
+
- lib/commendo/ruby-backed/content_set.rb
|
187
|
+
- lib/commendo/ruby-backed/tag_set.rb
|
188
|
+
- lib/commendo/ruby-backed/weighted_group.rb
|
184
189
|
- lib/commendo/tag_set.rb
|
185
190
|
- lib/commendo/version.rb
|
186
191
|
- lib/commendo/weighted_group.rb
|
@@ -194,6 +199,9 @@ files:
|
|
194
199
|
- test/redis_content_set_test.rb
|
195
200
|
- test/redis_tag_set_test.rb
|
196
201
|
- test/redis_weighted_group_test.rb
|
202
|
+
- test/ruby_content_set_test.rb
|
203
|
+
- test/ruby_tag_set_test.rb
|
204
|
+
- test/ruby_weighted_group_test.rb
|
197
205
|
- test/tests_for_content_sets.rb
|
198
206
|
- test/tests_for_tag_sets.rb
|
199
207
|
- test/tests_for_weighted_groups.rb
|
@@ -229,6 +237,9 @@ test_files:
|
|
229
237
|
- test/redis_content_set_test.rb
|
230
238
|
- test/redis_tag_set_test.rb
|
231
239
|
- test/redis_weighted_group_test.rb
|
240
|
+
- test/ruby_content_set_test.rb
|
241
|
+
- test/ruby_tag_set_test.rb
|
242
|
+
- test/ruby_weighted_group_test.rb
|
232
243
|
- test/tests_for_content_sets.rb
|
233
244
|
- test/tests_for_tag_sets.rb
|
234
245
|
- test/tests_for_weighted_groups.rb
|