opinions 0.0.1
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.
- data/.autotest +18 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +183 -0
- data/Rakefile +30 -0
- data/lib/opinions.rb +270 -0
- data/lib/opinions/version.rb +3 -0
- data/opinions.gemspec +27 -0
- data/test/acceptance_test_key_loader.rb +20 -0
- data/test/acceptance_test_opinions_opinion.rb +110 -0
- data/test/acceptance_test_opinions_opinionated_mixin.rb +140 -0
- data/test/acceptance_test_opinions_pollable_mixin.rb +111 -0
- data/test/integration_test_opinions_opinion.rb +60 -0
- data/test/integration_test_opinions_opinionated_mixin.rb +70 -0
- data/test/integration_test_opinions_pollable_mixin.rb +71 -0
- data/test/opinions_integration_test_redis.conf +6 -0
- data/test/test_helper.rb +112 -0
- data/test/unit_test_opinions_key_builder.rb +56 -0
- data/test/unit_test_opinions_opinion.rb +72 -0
- metadata +137 -0
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Opinions
|
4
|
+
|
5
|
+
class IntegrationTestOpinionsOpinionated < MiniTest::Integration::TestCase
|
6
|
+
|
7
|
+
def test_voting_on_any_confirming_object
|
8
|
+
|
9
|
+
example_target = ExampleTarget.new
|
10
|
+
example_target.id = 456
|
11
|
+
|
12
|
+
ExampleObject.send(:include, Opinionated)
|
13
|
+
ExampleObject.send(:opinions, :example)
|
14
|
+
|
15
|
+
example_object = ExampleObject.new
|
16
|
+
example_object.id = 123
|
17
|
+
|
18
|
+
example_object.example(example_target)
|
19
|
+
|
20
|
+
assert Opinion.new(target: example_target, object: example_object, opinion: :example).exists?
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_cancelling_a_vote_on_any_conforming_object
|
25
|
+
|
26
|
+
example_target = ExampleTarget.new
|
27
|
+
example_target.id = 456
|
28
|
+
|
29
|
+
ExampleObject.send(:include, Opinionated)
|
30
|
+
ExampleObject.send(:opinions, :example)
|
31
|
+
|
32
|
+
example_object = ExampleObject.new
|
33
|
+
example_object.id = 123
|
34
|
+
|
35
|
+
expected_opinion = Opinion.new(target: example_target, object: example_object, opinion: :example)
|
36
|
+
expected_opinion.persist
|
37
|
+
|
38
|
+
example_object.cancel_example(example_target)
|
39
|
+
|
40
|
+
refute Opinion.new(target: example_target, object: example_object, opinion: :example).exists?
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_retrieving_votes_from_the_backend
|
45
|
+
|
46
|
+
example_target_one = ExampleTarget.new
|
47
|
+
example_target_one.id = 456
|
48
|
+
|
49
|
+
example_target_two = ExampleTarget.new
|
50
|
+
example_target_two.id = 789
|
51
|
+
|
52
|
+
ExampleObject.send(:include, Opinionated)
|
53
|
+
ExampleObject.send(:opinions, :example)
|
54
|
+
|
55
|
+
example_object = ExampleObject.new
|
56
|
+
example_object.id = 123
|
57
|
+
|
58
|
+
expected_opinion_one = Opinion.new(target: example_target_one, object: example_object, opinion: :example)
|
59
|
+
expected_opinion_one.persist
|
60
|
+
|
61
|
+
expected_opinion_two = Opinion.new(target: example_target_two, object: example_object, opinion: :example)
|
62
|
+
expected_opinion_two.persist
|
63
|
+
|
64
|
+
assert_equal 2, example_object.example_opinions.count
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Opinions
|
4
|
+
|
5
|
+
class IntegrationTestOpinionsPollable < MiniTest::Integration::TestCase
|
6
|
+
|
7
|
+
def test_being_voted_by_any_conforming_object
|
8
|
+
|
9
|
+
example_object = ExampleObject.new
|
10
|
+
example_object.id = 123
|
11
|
+
|
12
|
+
ExampleTarget.send(:include, Pollable)
|
13
|
+
ExampleTarget.send(:opinions, :example)
|
14
|
+
|
15
|
+
example_target = ExampleTarget.new
|
16
|
+
example_target.id = 456
|
17
|
+
|
18
|
+
example_target.example_by(example_object)
|
19
|
+
|
20
|
+
assert Opinion.new(target: example_target, object: example_object, opinion: :example).exists?
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_cancelling_a_vote_by_any_conforming_object
|
25
|
+
|
26
|
+
example_object = ExampleObject.new
|
27
|
+
example_object.id = 123
|
28
|
+
|
29
|
+
ExampleTarget.send(:include, Pollable)
|
30
|
+
ExampleTarget.send(:opinions, :example)
|
31
|
+
|
32
|
+
example_target = ExampleTarget.new
|
33
|
+
example_target.id = 456
|
34
|
+
|
35
|
+
expected_opinion = Opinion.new(target: example_target, object: example_object, opinion: :example)
|
36
|
+
expected_opinion.persist
|
37
|
+
|
38
|
+
example_target.cancel_example_by(example_object)
|
39
|
+
|
40
|
+
refute Opinion.new(target: example_target, object: example_object, opinion: :example).exists?
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_counting_the_number_of_votes
|
45
|
+
|
46
|
+
example_object_one = ExampleObject.new
|
47
|
+
example_object_one.id = 123
|
48
|
+
|
49
|
+
example_object_two = ExampleObject.new
|
50
|
+
example_object_two.id = 456
|
51
|
+
|
52
|
+
ExampleTarget.send(:include, Pollable)
|
53
|
+
ExampleTarget.send(:opinions, :example)
|
54
|
+
|
55
|
+
example_target = ExampleTarget.new
|
56
|
+
example_target.id = 456
|
57
|
+
|
58
|
+
expected_opinion_one = Opinion.new(target: example_target, object: example_object_one, opinion: :example)
|
59
|
+
expected_opinion_one.persist
|
60
|
+
|
61
|
+
expected_opinion_two = Opinion.new(target: example_target, object: example_object_two, opinion: :example)
|
62
|
+
expected_opinion_two.persist
|
63
|
+
|
64
|
+
assert_equal 2, example_target.example_votes.count
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
|
4
|
+
require 'singleton'
|
5
|
+
require 'tempfile'
|
6
|
+
|
7
|
+
Bundler.setup
|
8
|
+
|
9
|
+
require 'daemon_controller'
|
10
|
+
|
11
|
+
require 'minitest/unit'
|
12
|
+
require 'minitest/spec'
|
13
|
+
require 'minitest/autorun'
|
14
|
+
|
15
|
+
require 'turn'
|
16
|
+
|
17
|
+
require_relative '../lib/opinions'
|
18
|
+
|
19
|
+
Turn.config do |tc|
|
20
|
+
tc.ansi = true
|
21
|
+
tc.format = :dot
|
22
|
+
end
|
23
|
+
|
24
|
+
IntegrationTestRedis = DaemonController.new(
|
25
|
+
identifier: "Opinions Ingration Test Redis Server",
|
26
|
+
start_command: "redis-server #{File.expand_path('./opinions_integration_test_redis.conf', 'test')}",
|
27
|
+
ping_command: [:tcp, '127.0.0.1', 9738],
|
28
|
+
pid_file: "/tmp/opinions_integration_test_redis.pid",
|
29
|
+
log_file: "/tmp/opinions_integration_test_redis.log",
|
30
|
+
start_timeout: 2
|
31
|
+
)
|
32
|
+
|
33
|
+
module Opinions
|
34
|
+
|
35
|
+
module MiniTest
|
36
|
+
|
37
|
+
class Unit
|
38
|
+
TestCase = Class.new(::MiniTest::Unit::TestCase)
|
39
|
+
end
|
40
|
+
|
41
|
+
class Acceptance
|
42
|
+
TestCase = Class.new(Unit::TestCase)
|
43
|
+
end
|
44
|
+
|
45
|
+
class Integration
|
46
|
+
TestCase = Class.new(Acceptance::TestCase)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
Opinions::MiniTest::Unit::TestCase.class_eval do
|
54
|
+
|
55
|
+
def setup_with_clean_objects
|
56
|
+
setup_without_clean_objects
|
57
|
+
instance_methods = Module.new do
|
58
|
+
def ==(other)
|
59
|
+
id == other.id
|
60
|
+
end
|
61
|
+
def initialize(id = nil)
|
62
|
+
@id = id
|
63
|
+
end
|
64
|
+
end
|
65
|
+
class_methods = Module.new do
|
66
|
+
def find(id)
|
67
|
+
new(id)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
::Object.const_set(:ExampleObject, Class.new)
|
71
|
+
::Object.const_set(:ExampleTarget, Class.new)
|
72
|
+
::ExampleObject.class_eval { attr_accessor :id }
|
73
|
+
::ExampleTarget.class_eval { attr_accessor :id }
|
74
|
+
::ExampleObject.send(:include, instance_methods)
|
75
|
+
::ExampleTarget.send(:include, instance_methods)
|
76
|
+
::ExampleObject.send(:extend, class_methods)
|
77
|
+
::ExampleTarget.send(:extend, class_methods)
|
78
|
+
end
|
79
|
+
alias :setup_without_clean_objects :setup
|
80
|
+
alias :setup :setup_with_clean_objects
|
81
|
+
|
82
|
+
def teardown_with_clean_objects
|
83
|
+
teardown_without_clean_objects
|
84
|
+
Object.send(:remove_const, :ExampleObject)
|
85
|
+
Object.send(:remove_const, :ExampleTarget)
|
86
|
+
end
|
87
|
+
alias :teardown_without_clean_objects :teardown
|
88
|
+
alias :teardown :teardown_with_clean_objects
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
Opinions::MiniTest::Integration::TestCase.class_eval do
|
93
|
+
|
94
|
+
def setup_with_live_redis
|
95
|
+
setup_without_live_redis
|
96
|
+
::IntegrationTestRedis.start
|
97
|
+
rb = Opinions::RedisBackend.new
|
98
|
+
rb.redis = ::Redis.new(port: 9738)
|
99
|
+
rb.redis.flushdb
|
100
|
+
Opinions.backend = rb
|
101
|
+
end
|
102
|
+
alias :setup_without_live_redis :setup
|
103
|
+
alias :setup :setup_with_live_redis
|
104
|
+
|
105
|
+
def teardown_with_live_redis
|
106
|
+
teardown_without_live_redis
|
107
|
+
::IntegrationTestRedis.stop
|
108
|
+
end
|
109
|
+
alias :teardown_without_live_redis :teardown
|
110
|
+
alias :teardown :teardown_with_live_redis
|
111
|
+
|
112
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Opinions
|
4
|
+
|
5
|
+
class UnitTestKeyBuilder < MiniTest::Unit::TestCase
|
6
|
+
|
7
|
+
def test_an_argument_error_is_raised_when_instantiated_with_an_empty_hash
|
8
|
+
assert_raises KeyError do
|
9
|
+
KeyBuilder.new({})
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_generating_a_simple_key
|
14
|
+
example_object = ::ExampleObject.new
|
15
|
+
example_object.id = 123
|
16
|
+
assert_equal 'ExampleObject:test:123', KeyBuilder.new(object: example_object, opinion: :test).key
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_generating_a_key_with_a_non_numerical_id
|
20
|
+
example_instance = ::ExampleObject.new
|
21
|
+
example_instance.id = "digest"
|
22
|
+
assert_equal 'ExampleObject:test:digest', KeyBuilder.new(object: example_instance, opinion: :test).key
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_generating_a_key_for_an_object_class_count
|
26
|
+
# Note: This slightly abuses the KeyBuilder (target vs. object)
|
27
|
+
example_target = ::ExampleTarget.new
|
28
|
+
example_target.id = 456
|
29
|
+
assert_equal 'ExampleTarget:like:456', KeyBuilder.new(object: example_target, opinion: :like).key
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_generating_a_key_for_an_object_class
|
33
|
+
example_object = ::ExampleObject.new
|
34
|
+
example_object.id = 123
|
35
|
+
assert_equal 'ExampleObject:like:123:ExampleTarget', KeyBuilder.new(object: example_object, opinion: :like, target: ::ExampleTarget).key
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_generating_a_key_for_a_simple_opinion
|
39
|
+
example_object = ::ExampleObject.new
|
40
|
+
example_object.id = 123
|
41
|
+
example_target = ::ExampleTarget.new
|
42
|
+
example_target.id = 456
|
43
|
+
assert_equal 'ExampleObject:like:123:ExampleTarget', KeyBuilder.new(object: example_object, opinion: :like, target: example_target).key
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_generating_a_key_for_a_less_simple_opinion
|
47
|
+
example_object = ::ExampleObject.new
|
48
|
+
example_object.id = 123
|
49
|
+
example_target = ::ExampleTarget.new
|
50
|
+
example_target.id = 456
|
51
|
+
assert_equal 'ExampleObject:absolute_hate:123:ExampleTarget', KeyBuilder.new(object: example_object, opinion: :absolute_hate, target: example_target).key
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Opinions
|
4
|
+
|
5
|
+
class UnitTestOpinion < MiniTest::Unit::TestCase
|
6
|
+
|
7
|
+
def test_an_argument_error_is_raised_when_instantiated_without_a_target
|
8
|
+
assert_raises KeyError do
|
9
|
+
Opinion.new(object: true, opinion: true)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_an_argument_error_is_raised_when_instantiated_without_an_object
|
14
|
+
assert_raises KeyError do
|
15
|
+
Opinion.new(target: true, opinion: true)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_an_argument_error_is_raised_when_instantiated_without_an_opinion
|
20
|
+
assert_raises KeyError do
|
21
|
+
Opinion.new(object: true, target: true)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_opinions_with_the_same_properties_compare_equal
|
26
|
+
o, t = Class.new, Class.new
|
27
|
+
opinion_one = Opinion.new(opinion: :test, target: t, object: o)
|
28
|
+
opinion_two = Opinion.new(opinion: :test, target: t, object: o)
|
29
|
+
assert_equal opinion_one, opinion_two
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_opinions_with_different_properties_do_not_compare_equal
|
33
|
+
opinion_one = Opinion.new(opinion: :test, target: Class.new, object: Class.new)
|
34
|
+
opinion_two = Opinion.new(opinion: :test, target: Class.new, object: Class.new)
|
35
|
+
refute_equal opinion_one, opinion_two
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_the_creation_time_is_readable_via_an_accessor_default_nil
|
39
|
+
assert_nil Opinion.new(object: true, target: :example, opinion: true).created_at
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_the_target_is_readable_via_an_accessor
|
43
|
+
assert_equal :example, Opinion.new(object: true, target: :example, opinion: true).target
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_the_object_is_readable_via_an_accessor
|
47
|
+
assert_equal :example, Opinion.new(object: :example, target: true, opinion: true).object
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_the_opinion_is_readable_via_an_accessor
|
51
|
+
assert_equal :example, Opinion.new(object: true, target: true, opinion: :example).opinion
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_the_target_key_is_made_available_via_an_accessor
|
55
|
+
example_object = ::ExampleObject.new
|
56
|
+
example_target = ::ExampleTarget.new
|
57
|
+
example_target.id = 456
|
58
|
+
opinion = Opinion.new(object: example_object, target: example_target, opinion: :example)
|
59
|
+
assert_equal 'ExampleTarget:example:456:ExampleObject', opinion.target_key
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_the_object_key_is_made_available_via_an_accessor
|
63
|
+
example_object = ::ExampleObject.new
|
64
|
+
example_object.id = 123
|
65
|
+
example_target = ::ExampleTarget.new
|
66
|
+
opinion = Opinion.new(object: example_object, target: example_target, opinion: :example)
|
67
|
+
assert_equal 'ExampleObject:example:123:ExampleTarget', opinion.object_key
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
metadata
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: opinions
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Lee Hambley
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-10 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: redis
|
16
|
+
requirement: &70143554472800 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70143554472800
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: minitest
|
27
|
+
requirement: &70143554471840 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.11.3
|
33
|
+
- - <
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 2.12.0
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: *70143554471840
|
39
|
+
- !ruby/object:Gem::Dependency
|
40
|
+
name: autotest
|
41
|
+
requirement: &70143554470080 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
type: :development
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: *70143554470080
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: turn
|
52
|
+
requirement: &70143554468980 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ! '>='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
type: :development
|
59
|
+
prerelease: false
|
60
|
+
version_requirements: *70143554468980
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: daemon_controller
|
63
|
+
requirement: &70143554468440 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
type: :development
|
70
|
+
prerelease: false
|
71
|
+
version_requirements: *70143554468440
|
72
|
+
description: A toolkit for storing user votes/opinions in Redis
|
73
|
+
email:
|
74
|
+
- lee.hambley@gmail.com
|
75
|
+
executables: []
|
76
|
+
extensions: []
|
77
|
+
extra_rdoc_files: []
|
78
|
+
files:
|
79
|
+
- .autotest
|
80
|
+
- .gitignore
|
81
|
+
- Gemfile
|
82
|
+
- LICENSE
|
83
|
+
- README.md
|
84
|
+
- Rakefile
|
85
|
+
- lib/opinions.rb
|
86
|
+
- lib/opinions/version.rb
|
87
|
+
- opinions.gemspec
|
88
|
+
- test/acceptance_test_key_loader.rb
|
89
|
+
- test/acceptance_test_opinions_opinion.rb
|
90
|
+
- test/acceptance_test_opinions_opinionated_mixin.rb
|
91
|
+
- test/acceptance_test_opinions_pollable_mixin.rb
|
92
|
+
- test/integration_test_opinions_opinion.rb
|
93
|
+
- test/integration_test_opinions_opinionated_mixin.rb
|
94
|
+
- test/integration_test_opinions_pollable_mixin.rb
|
95
|
+
- test/opinions_integration_test_redis.conf
|
96
|
+
- test/test_helper.rb
|
97
|
+
- test/unit_test_opinions_key_builder.rb
|
98
|
+
- test/unit_test_opinions_opinion.rb
|
99
|
+
homepage: ''
|
100
|
+
licenses: []
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
require_paths:
|
104
|
+
- lib
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
none: false
|
113
|
+
requirements:
|
114
|
+
- - ! '>='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
requirements: []
|
118
|
+
rubyforge_project:
|
119
|
+
rubygems_version: 1.8.10
|
120
|
+
signing_key:
|
121
|
+
specification_version: 3
|
122
|
+
summary: Opinions allows the storage of opinions in Redis, a fast and atomic structured
|
123
|
+
data store. If one's users hate, love, appreciate, despise or just-don-t-care, one
|
124
|
+
can store that easily via a simple API.
|
125
|
+
test_files:
|
126
|
+
- test/acceptance_test_key_loader.rb
|
127
|
+
- test/acceptance_test_opinions_opinion.rb
|
128
|
+
- test/acceptance_test_opinions_opinionated_mixin.rb
|
129
|
+
- test/acceptance_test_opinions_pollable_mixin.rb
|
130
|
+
- test/integration_test_opinions_opinion.rb
|
131
|
+
- test/integration_test_opinions_opinionated_mixin.rb
|
132
|
+
- test/integration_test_opinions_pollable_mixin.rb
|
133
|
+
- test/opinions_integration_test_redis.conf
|
134
|
+
- test/test_helper.rb
|
135
|
+
- test/unit_test_opinions_key_builder.rb
|
136
|
+
- test/unit_test_opinions_opinion.rb
|
137
|
+
has_rdoc:
|