census 0.5.0 → 0.5.2
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/README.rdoc +7 -1
- data/VERSION +1 -1
- data/app/models/choice.rb +5 -0
- data/app/models/question.rb +1 -1
- data/generators/census/templates/migrations/with_users.rb +1 -0
- data/generators/census/templates/migrations/without_users.rb +1 -0
- data/lib/census/user.rb +23 -0
- data/test/models/choice_test.rb +28 -0
- data/test/rails_root/db/migrate/{20100630131015_create_census_tables.rb → 20100802152451_create_census_tables.rb} +1 -0
- data/test/rails_root/db/schema.rb +2 -1
- metadata +6 -6
data/README.rdoc
CHANGED
@@ -70,7 +70,7 @@ Census provides a partial that you can include in a form that collects answers
|
|
70
70
|
from your users. This partial assumes it's inside of a form_for(:user) block. It
|
71
71
|
will render fields for each of the questions you've defined.
|
72
72
|
|
73
|
-
<%= render 'census/
|
73
|
+
<%= render 'census/user_questions', :user => @user %>
|
74
74
|
|
75
75
|
Data groups are rendered as fieldsets that contain a list of input fields, one
|
76
76
|
for each question. If you take a look at the rendered HTML, you'll see several
|
@@ -147,6 +147,12 @@ method to query the database and get back the list of matching users.
|
|
147
147
|
|
148
148
|
users = search.perform
|
149
149
|
|
150
|
+
== Running the tests
|
151
|
+
|
152
|
+
In order to run the test suite for Census, first make sure you have all of the dependencies installed. Then, you need create a blank rails app in the test/rails_root folder and add 'shoulda' and 'factory_girl' as gem dependencies for that app's test environment (test/rails_root/config/environments/test.rb).
|
153
|
+
|
154
|
+
The default rake task runs the test suite for Census.
|
155
|
+
|
150
156
|
== Copyright
|
151
157
|
|
152
158
|
Copyright (c) 2010 Envy Labs LLC. See LICENSE for details.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.2
|
data/app/models/choice.rb
CHANGED
data/app/models/question.rb
CHANGED
data/lib/census/user.rb
CHANGED
@@ -20,6 +20,7 @@ module Census
|
|
20
20
|
model.send(:include, InstanceMethods)
|
21
21
|
model.send(:include, Associations)
|
22
22
|
model.send(:include, Callbacks)
|
23
|
+
model.send(:include, Scopes)
|
23
24
|
end
|
24
25
|
|
25
26
|
module Associations
|
@@ -43,6 +44,28 @@ module Census
|
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
47
|
+
module Scopes
|
48
|
+
#
|
49
|
+
# This scope can be used to find other users who have census answers in common with the
|
50
|
+
# given user. The returned list is sorted such that users with the most answers in
|
51
|
+
# common are at the beginning of the list.
|
52
|
+
#
|
53
|
+
def self.included(model)
|
54
|
+
model.class_eval do
|
55
|
+
named_scope :with_matching_census_answers, lambda { |user, limit|
|
56
|
+
{
|
57
|
+
:select => "DISTINCT users.*, COUNT(answers.id) AS census_match_score",
|
58
|
+
:joins => "LEFT JOIN `answers` AS answers ON answers.user_id = users.id LEFT JOIN `answers` AS other_answers ON other_answers.user_id = #{user.id}",
|
59
|
+
:conditions => ['users.id <> ? AND answers.data = other_answers.data AND answers.question_id = other_answers.question_id', user.id],
|
60
|
+
:group => 'users.id',
|
61
|
+
:order => 'census_match_score DESC',
|
62
|
+
:limit => limit
|
63
|
+
}
|
64
|
+
}
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
46
69
|
module InstanceMethods
|
47
70
|
#
|
48
71
|
# Returns this user's first answer for the given question, or a new empty
|
data/test/models/choice_test.rb
CHANGED
@@ -21,4 +21,32 @@ class ChoiceTest < ActiveSupport::TestCase
|
|
21
21
|
|
22
22
|
end
|
23
23
|
|
24
|
+
context 'A Choice with a Group' do
|
25
|
+
|
26
|
+
setup do
|
27
|
+
@movie_question = Factory(:question, :prompt => 'Favorite Movie')
|
28
|
+
|
29
|
+
@titanic_movie = Factory(:choice, :value => 'Titanic', :group => 'Drama',
|
30
|
+
:question => @movie_question)
|
31
|
+
|
32
|
+
@avatar_movie = Factory(:choice, :value => 'Avatar', :group => 'Adventure',
|
33
|
+
:question => @movie_question)
|
34
|
+
|
35
|
+
@avatar_movie = Factory(:choice, :value => 'The Last Airbender', :group => 'Adventure',
|
36
|
+
:question => @movie_question)
|
37
|
+
end
|
38
|
+
|
39
|
+
should 'belong to that group' do
|
40
|
+
assert_equal 'Drama', @titanic_movie.group
|
41
|
+
assert_equal 'Adventure', @avatar_movie.group
|
42
|
+
end
|
43
|
+
|
44
|
+
should 'return all from a group' do
|
45
|
+
assert_equal 1, @movie_question.choices.from_group('Drama').size
|
46
|
+
assert_equal 2, @movie_question.choices.from_group('Adventure').size
|
47
|
+
assert_equal 0, @movie_question.choices.from_group('Comedy').size
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
24
52
|
end
|
@@ -9,7 +9,7 @@
|
|
9
9
|
#
|
10
10
|
# It's strongly recommended to check this file into your version control system.
|
11
11
|
|
12
|
-
ActiveRecord::Schema.define(:version =>
|
12
|
+
ActiveRecord::Schema.define(:version => 20100802152451) do
|
13
13
|
|
14
14
|
create_table "answers", :force => true do |t|
|
15
15
|
t.integer "question_id"
|
@@ -24,6 +24,7 @@ ActiveRecord::Schema.define(:version => 20100630131015) do
|
|
24
24
|
t.integer "question_id"
|
25
25
|
t.string "value"
|
26
26
|
t.integer "position"
|
27
|
+
t.string "group"
|
27
28
|
t.datetime "created_at"
|
28
29
|
t.datetime "updated_at"
|
29
30
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: census
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 0.5.
|
9
|
+
- 2
|
10
|
+
version: 0.5.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Mark Kendall
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-08-02 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -151,7 +151,7 @@ files:
|
|
151
151
|
- test/rails_root/config/initializers/new_rails_defaults.rb
|
152
152
|
- test/rails_root/config/initializers/session_store.rb
|
153
153
|
- test/rails_root/config/routes.rb
|
154
|
-
- test/rails_root/db/migrate/
|
154
|
+
- test/rails_root/db/migrate/20100802152451_create_census_tables.rb
|
155
155
|
- test/rails_root/db/schema.rb
|
156
156
|
- test/rails_root/test/factories/census.rb
|
157
157
|
- test/rails_root/test/performance/browsing_test.rb
|
@@ -215,7 +215,7 @@ test_files:
|
|
215
215
|
- test/rails_root/config/initializers/new_rails_defaults.rb
|
216
216
|
- test/rails_root/config/initializers/session_store.rb
|
217
217
|
- test/rails_root/config/routes.rb
|
218
|
-
- test/rails_root/db/migrate/
|
218
|
+
- test/rails_root/db/migrate/20100802152451_create_census_tables.rb
|
219
219
|
- test/rails_root/db/schema.rb
|
220
220
|
- test/rails_root/test/factories/census.rb
|
221
221
|
- test/rails_root/test/performance/browsing_test.rb
|