rostra 0.3.1 → 0.3.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 +10 -10
- data/app/controllers/rostra/application_controller.rb +2 -2
- data/app/helpers/rostra/base/application_helper.rb +4 -4
- data/app/views/layouts/rostra/application.html.erb +2 -2
- data/lib/generators/rostra/templates/app/helpers/rostra/application_helper.rb +3 -3
- data/lib/rostra.rb +7 -7
- data/lib/rostra/version.rb +1 -1
- metadata +44 -44
data/README.rdoc
CHANGED
@@ -5,11 +5,11 @@ Rostra allows you to quickly add a question and answer forum to your application
|
|
5
5
|
<b>NOTE: Rostra is not production ready.</b>
|
6
6
|
|
7
7
|
== Installation
|
8
|
-
Include the gem to your
|
8
|
+
Include the gem to your +Gemfile+:
|
9
9
|
|
10
10
|
gem 'rostra'
|
11
11
|
|
12
|
-
Mount the engine in
|
12
|
+
Mount the engine in +config/routes.rb+:
|
13
13
|
|
14
14
|
mount Rostra::Engine => "/rostra" # or whatever path you like
|
15
15
|
|
@@ -18,31 +18,31 @@ Install and run the necessary migrations:
|
|
18
18
|
rake rostra:install:migrations
|
19
19
|
rake db:migrate
|
20
20
|
|
21
|
-
Run the generator to create
|
21
|
+
Run the generator to create +config/initializers/rostra.rb+ and +app/helpers/application_helper.rb+:
|
22
22
|
|
23
23
|
rails generate rostra:install
|
24
24
|
|
25
|
-
Call
|
25
|
+
Call +rostra+ in your user model:
|
26
26
|
|
27
27
|
class User < ActiveRecord::Base
|
28
28
|
rostra
|
29
29
|
end
|
30
30
|
|
31
31
|
== Basic configuration
|
32
|
-
There's some stuff you'll almost definitely want to do in order to get Rostra working correctly for your app. First, set the
|
32
|
+
There's some stuff you'll almost definitely want to do in order to get Rostra working correctly for your app. First, set the +default_url_options+ for your app. In each of your +config/environment+ files you should have something like:
|
33
33
|
|
34
34
|
config.action_mailer.default_url_options = { :host => 'test.com' } # test.rb
|
35
35
|
config.action_mailer.default_url_options = { :host => 'localhost:3000' } # development.rb
|
36
36
|
config.action_mailer.default_url_options = { :host => 'your_domain.com' } # production.rb
|
37
37
|
|
38
|
-
Also, be sure to read through
|
38
|
+
Also, be sure to read through +config/initializers/rostra.rb+ and override configuration options to suit your app. At the very least, you'll want to change:
|
39
39
|
|
40
40
|
config.deliver_emails_from = 'change_me@example.com'
|
41
41
|
|
42
|
-
Finally, have a look at
|
42
|
+
Finally, have a look at +app/helpers/rostra/application_helper.rb+, you may need to add/override helper methods.
|
43
43
|
|
44
44
|
== Overriding models
|
45
|
-
Rostra provides a DSL for adding application specific logic to
|
45
|
+
Rostra provides a DSL for adding application specific logic to +Rostra::Question+ and +Rostra:Answer+:
|
46
46
|
|
47
47
|
class User < ActiveRecord::Base
|
48
48
|
rostra do
|
@@ -73,9 +73,9 @@ Rostra provides a DSL for adding application specific logic to <tt>Rostra::Quest
|
|
73
73
|
Added instructions for overriding controllers here (including generators!)
|
74
74
|
|
75
75
|
== Setting permissions
|
76
|
-
Under the hood, Rostra uses
|
76
|
+
Under the hood, Rostra uses +CanCan+ to set permissions. By default anyone can read rostra content - even if they are not logged in. A user can contribute content (i.e. ask questions, give answers, and leave comments) as long as they've logged in.
|
77
77
|
|
78
|
-
If you need to change these defaults, override
|
78
|
+
If you need to change these defaults, override +can_participate_in_rostra?+ in your user model. +CanCan+ will use this method to determine who can participate. If you need to specify even more complicated permissions, override +app/models/rostra/ability.rb+ and go wild.
|
79
79
|
|
80
80
|
|
81
81
|
== Contributing to Rostra
|
@@ -31,13 +31,13 @@ module Rostra
|
|
31
31
|
|
32
32
|
private
|
33
33
|
|
34
|
-
# Override
|
34
|
+
# Override +cancan+'s default class of +Ability+ to user +Rostra::Ability+.
|
35
35
|
#
|
36
36
|
def current_ability
|
37
37
|
@current_ability ||= Rostra::Ability.new(rostra_user)
|
38
38
|
end
|
39
39
|
|
40
|
-
# Override this method to if finer control over what happens when
|
40
|
+
# Override this method to if finer control over what happens when +cancan+ denies access.
|
41
41
|
#
|
42
42
|
def after_access_denied
|
43
43
|
redirect_to root_url, alert: "You don't have access to view this page"
|
@@ -47,7 +47,7 @@ module Rostra
|
|
47
47
|
tag(:meta, { :name => "keywords", :content => keywords })
|
48
48
|
end
|
49
49
|
|
50
|
-
# Used to populate both the
|
50
|
+
# Used to populate both the +title+ and +h1+ elements for each page.
|
51
51
|
#
|
52
52
|
def page_title_helper
|
53
53
|
case "#{controller_name}##{action_name}"
|
@@ -74,9 +74,9 @@ module Rostra
|
|
74
74
|
|
75
75
|
# Finds the url to the user's avatar following this logic:
|
76
76
|
#
|
77
|
-
# 1. Calls
|
77
|
+
# 1. Calls +avatar+ on the user object
|
78
78
|
# 2. Uses the users email address to look for a gravatar
|
79
|
-
# 3. Renders
|
79
|
+
# 3. Renders +app/assets/images/rostra/anonymous_avatar.png+
|
80
80
|
#
|
81
81
|
def rostra_user_avatar(user)
|
82
82
|
if user.respond_to?(:avatar)
|
@@ -101,7 +101,7 @@ module Rostra
|
|
101
101
|
link_to entity_arrow.html_safe, vote_path(resource, direction), method: :put, remote: true, title: "vote #{direction}", class: "vote #{direction} #{selected}"
|
102
102
|
end
|
103
103
|
|
104
|
-
# Returns a rostra object's base class name. For example,
|
104
|
+
# Returns a rostra object's base class name. For example, +@question+ is an instance of
|
105
105
|
# Rostra::Question and so:
|
106
106
|
#
|
107
107
|
# class_name(@question) # => 'question'
|
@@ -11,8 +11,8 @@
|
|
11
11
|
<body id="<%= controller_name %>" class="<%= action_name %>">
|
12
12
|
<div id="page_wrap">
|
13
13
|
|
14
|
-
<% flash.each do |name,
|
15
|
-
<%= content_tag :div,
|
14
|
+
<% flash.each do |name, message| %>
|
15
|
+
<%= content_tag :div, message, id: "flash_#{name}", class: 'flash' %>
|
16
16
|
<% end %>
|
17
17
|
|
18
18
|
<h1><%=page_title_helper %></h1>
|
@@ -60,9 +60,9 @@ module Rostra
|
|
60
60
|
|
61
61
|
# Finds the url to the user's avatar following this logic:
|
62
62
|
#
|
63
|
-
# 1. Calls
|
63
|
+
# 1. Calls +avatar+ on the user object
|
64
64
|
# 2. Uses the users email address to look for a gravatar
|
65
|
-
# 3. Renders
|
65
|
+
# 3. Renders +app/assets/images/rostra/anonymous_avatar.png+
|
66
66
|
#
|
67
67
|
# def rostra_user_avatar(user)
|
68
68
|
# if user.respond_to?(:avatar)
|
@@ -75,7 +75,7 @@ module Rostra
|
|
75
75
|
# image_tag(url, class: 'avatar')
|
76
76
|
# end
|
77
77
|
|
78
|
-
# Used to populate both the
|
78
|
+
# Used to populate both the +title+ and +h1+ elements for each page.
|
79
79
|
#
|
80
80
|
# def page_title_helper
|
81
81
|
# case "#{controller_name}##{action_name}"
|
data/lib/rostra.rb
CHANGED
@@ -10,7 +10,7 @@ module Rostra
|
|
10
10
|
|
11
11
|
module ClassMethods
|
12
12
|
|
13
|
-
# Include this method in your
|
13
|
+
# Include this method in your +rostra+'d model to add the necessary accociations and
|
14
14
|
# and methods:
|
15
15
|
#
|
16
16
|
# class User < ActiveRecord::Base
|
@@ -45,7 +45,7 @@ module Rostra
|
|
45
45
|
|
46
46
|
module InstanceMethods
|
47
47
|
|
48
|
-
# Built atop the
|
48
|
+
# Built atop the +thumbs_up+ API, this method does some conditional voting:
|
49
49
|
#
|
50
50
|
# * Clear the user's existing vote if...
|
51
51
|
# - they've already voted up and attempt to vote up again
|
@@ -72,15 +72,15 @@ module Rostra
|
|
72
72
|
|
73
73
|
# By default anyone can read rostra content - even if they are not logged in. This method
|
74
74
|
# determines if users can contribute content (i.e. ask questions, give answers, and leave
|
75
|
-
# comments). If
|
75
|
+
# comments). If +can_participate_in_rostra?+ returns true, the user can contribute
|
76
76
|
# content, otherwise they're restricted to read only.
|
77
77
|
#
|
78
|
-
# Under the hood, Rostra uses
|
79
|
-
# place where
|
78
|
+
# Under the hood, Rostra uses +CanCan+ to set permissions and this is the only
|
79
|
+
# place where +can_participate_in_rostra?+ is actully used. The default is very
|
80
80
|
# simple, if the user exists (i.e. they are logged in), then they may participate. But
|
81
|
-
# you can override this method in your
|
81
|
+
# you can override this method in your +User+ model to set more complicated
|
82
82
|
# conditions participation. If you need to specify even more complicated permissions,
|
83
|
-
# override
|
83
|
+
# override +app/models/rostra/ability.rb+ and go wild.
|
84
84
|
#
|
85
85
|
def can_participate_in_rostra?
|
86
86
|
!new_record?
|
data/lib/rostra/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rostra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-05-02 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &70297176960800 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,21 +21,21 @@ dependencies:
|
|
21
21
|
version: 3.2.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70297176960800
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: jquery-rails
|
27
|
-
requirement: &
|
27
|
+
requirement: &70297176959940 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 2.0.2
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70297176959940
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: acts-as-taggable-on
|
38
|
-
requirement: &
|
38
|
+
requirement: &70297176959100 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.1.1
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70297176959100
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: cancan
|
49
|
-
requirement: &
|
49
|
+
requirement: &70297176958340 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.6.7
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70297176958340
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: simple_form
|
60
|
-
requirement: &
|
60
|
+
requirement: &70297176957280 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.5.2
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70297176957280
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: client_side_validations
|
71
|
-
requirement: &
|
71
|
+
requirement: &70297176956520 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 3.1.4
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70297176956520
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: thumbs_up
|
82
|
-
requirement: &
|
82
|
+
requirement: &70297176955320 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 0.4.6
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70297176955320
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: acts_as_commentable
|
93
|
-
requirement: &
|
93
|
+
requirement: &70297176953600 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 3.0.1
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70297176953600
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: kaminari
|
104
|
-
requirement: &
|
104
|
+
requirement: &70297176951840 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: 0.13.0
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70297176951840
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: friendly_id
|
115
|
-
requirement: &
|
115
|
+
requirement: &70297176948040 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ~>
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: 4.0.0
|
121
121
|
type: :runtime
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *70297176948040
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: impressionist
|
126
|
-
requirement: &
|
126
|
+
requirement: &70297176946400 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ~>
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
version: 1.0.0
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *70297176946400
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: sqlite3
|
137
|
-
requirement: &
|
137
|
+
requirement: &70297176944900 !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
140
140
|
- - ! '>='
|
@@ -142,10 +142,10 @@ dependencies:
|
|
142
142
|
version: '0'
|
143
143
|
type: :development
|
144
144
|
prerelease: false
|
145
|
-
version_requirements: *
|
145
|
+
version_requirements: *70297176944900
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: cucumber-rails
|
148
|
-
requirement: &
|
148
|
+
requirement: &70297176943460 !ruby/object:Gem::Requirement
|
149
149
|
none: false
|
150
150
|
requirements:
|
151
151
|
- - ! '>='
|
@@ -153,10 +153,10 @@ dependencies:
|
|
153
153
|
version: '0'
|
154
154
|
type: :development
|
155
155
|
prerelease: false
|
156
|
-
version_requirements: *
|
156
|
+
version_requirements: *70297176943460
|
157
157
|
- !ruby/object:Gem::Dependency
|
158
158
|
name: factory_girl_rails
|
159
|
-
requirement: &
|
159
|
+
requirement: &70297176942200 !ruby/object:Gem::Requirement
|
160
160
|
none: false
|
161
161
|
requirements:
|
162
162
|
- - ! '>='
|
@@ -164,10 +164,10 @@ dependencies:
|
|
164
164
|
version: '0'
|
165
165
|
type: :development
|
166
166
|
prerelease: false
|
167
|
-
version_requirements: *
|
167
|
+
version_requirements: *70297176942200
|
168
168
|
- !ruby/object:Gem::Dependency
|
169
169
|
name: launchy
|
170
|
-
requirement: &
|
170
|
+
requirement: &70297176940660 !ruby/object:Gem::Requirement
|
171
171
|
none: false
|
172
172
|
requirements:
|
173
173
|
- - ! '>='
|
@@ -175,10 +175,10 @@ dependencies:
|
|
175
175
|
version: '0'
|
176
176
|
type: :development
|
177
177
|
prerelease: false
|
178
|
-
version_requirements: *
|
178
|
+
version_requirements: *70297176940660
|
179
179
|
- !ruby/object:Gem::Dependency
|
180
180
|
name: database_cleaner
|
181
|
-
requirement: &
|
181
|
+
requirement: &70297176939520 !ruby/object:Gem::Requirement
|
182
182
|
none: false
|
183
183
|
requirements:
|
184
184
|
- - ! '>='
|
@@ -186,10 +186,10 @@ dependencies:
|
|
186
186
|
version: '0'
|
187
187
|
type: :development
|
188
188
|
prerelease: false
|
189
|
-
version_requirements: *
|
189
|
+
version_requirements: *70297176939520
|
190
190
|
- !ruby/object:Gem::Dependency
|
191
191
|
name: rspec-rails
|
192
|
-
requirement: &
|
192
|
+
requirement: &70297176938760 !ruby/object:Gem::Requirement
|
193
193
|
none: false
|
194
194
|
requirements:
|
195
195
|
- - ! '>='
|
@@ -197,10 +197,10 @@ dependencies:
|
|
197
197
|
version: '0'
|
198
198
|
type: :development
|
199
199
|
prerelease: false
|
200
|
-
version_requirements: *
|
200
|
+
version_requirements: *70297176938760
|
201
201
|
- !ruby/object:Gem::Dependency
|
202
202
|
name: devise
|
203
|
-
requirement: &
|
203
|
+
requirement: &70297176937680 !ruby/object:Gem::Requirement
|
204
204
|
none: false
|
205
205
|
requirements:
|
206
206
|
- - ! '>='
|
@@ -208,10 +208,10 @@ dependencies:
|
|
208
208
|
version: '0'
|
209
209
|
type: :development
|
210
210
|
prerelease: false
|
211
|
-
version_requirements: *
|
211
|
+
version_requirements: *70297176937680
|
212
212
|
- !ruby/object:Gem::Dependency
|
213
213
|
name: pry
|
214
|
-
requirement: &
|
214
|
+
requirement: &70297176936760 !ruby/object:Gem::Requirement
|
215
215
|
none: false
|
216
216
|
requirements:
|
217
217
|
- - ! '>='
|
@@ -219,10 +219,10 @@ dependencies:
|
|
219
219
|
version: '0'
|
220
220
|
type: :development
|
221
221
|
prerelease: false
|
222
|
-
version_requirements: *
|
222
|
+
version_requirements: *70297176936760
|
223
223
|
- !ruby/object:Gem::Dependency
|
224
224
|
name: email_spec
|
225
|
-
requirement: &
|
225
|
+
requirement: &70297176936140 !ruby/object:Gem::Requirement
|
226
226
|
none: false
|
227
227
|
requirements:
|
228
228
|
- - ! '>='
|
@@ -230,7 +230,7 @@ dependencies:
|
|
230
230
|
version: '0'
|
231
231
|
type: :development
|
232
232
|
prerelease: false
|
233
|
-
version_requirements: *
|
233
|
+
version_requirements: *70297176936140
|
234
234
|
description: Don't use. Not production ready
|
235
235
|
email:
|
236
236
|
- coryschires@gmail.com
|
@@ -592,7 +592,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
592
592
|
version: '0'
|
593
593
|
requirements: []
|
594
594
|
rubyforge_project:
|
595
|
-
rubygems_version: 1.8.
|
595
|
+
rubygems_version: 1.8.15
|
596
596
|
signing_key:
|
597
597
|
specification_version: 3
|
598
598
|
summary: Don't use. Not production ready
|