community_engine 2.3.0 → 2.3.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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OTUxNzQzYzY5OGRjZDgzZjRiNDIxNmMyNDg1NmUxNTFiN2NkOGFlNg==
4
+ ZjU1NTFjMTI0MzAzMmE4ZGFjNWJhZTIxOWRlMzdjOTgyOTQwMzRjMQ==
5
5
  data.tar.gz: !binary |-
6
- NGE1ODk0ODU2MjhmNmNiZWVkMWI2NGU5MDdhMzNlMDY2ZDJiZDIxOA==
6
+ N2YyNjY5YTliNTE0N2Q1YTNmOTY1ZTcwMzcwNzRhYjg5ODJiNDY1OA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- M2M0MTBmMWIyMGIxZDAxMGMwMDVhMWYwZGVlZDVjZTE3YmYzMGZhNDIxNjdh
10
- M2RjYTFiODk4OTY2NzJiZjFiZWY3ZDg1Yzc4NzBmMjljOGZhN2MwMGE2Mzc1
11
- MTNhMzcxZGJjYmQ4ZTBlN2E3ZGZmY2M1OGRjY2UwYzk1YmY2ZmY=
9
+ NTdmZGFlZTY4NzgyZDFkYTNmZGIzZjI4ZjM1MTU2MmVjOTE4NmJlMzk2Yjhj
10
+ NDI3YWM0MzRiMzBjYmY0ZjA3ZTQ5NzgwZDZjMTEyNjE5ZTM5NWRlMzZiMDA4
11
+ MWU4OWY5N2IyM2M2OTlmODllMjU3ZTc2YzFkMGY4Njk3NmZiNzk=
12
12
  data.tar.gz: !binary |-
13
- MGQ3YTNmYmUwMjJhYTc3OWE3OTRmMjM5YWVkNTJiYjI5YzA2OGIzYTAyNjQ1
14
- ZWQxOTFjYzkzOTg2Y2ZjZmU5NjJlNDM1ZWI1MjgyZjRjNGI4ZWJmYTQ1NDRh
15
- ZTYzYmZlMjhiMzVkZmUyYTQzYTNkMzg2NmM1NzhjMzdlMDdiMzc=
13
+ MTgyNDJlYzYwYmY4MTMzOTY3MTM5OWI2MjgyZDUyOTk0NDc5NjBhY2VlYWVi
14
+ YTQzM2FkMjcxOWUwMDA4YjhiYmM1NGNlZmM0OTZkOGExMWQ3ZDA0N2FlODll
15
+ ZTZmNDQ5ZWE1NTUxNjQyMDdmYWMxMDQ0ZDY2NTZmOTQ4OTgwNjI=
@@ -2,7 +2,9 @@ bundler_args: --binstubs
2
2
 
3
3
  rvm:
4
4
  - 1.9.2
5
- - 2.0.0
6
- env: "RAILS_ENV='test' "
7
-
5
+ - 2.0.0
6
+ env:
7
+ - "RAILS_ENV='test' RAILS_VERSION=3.2.0"
8
+ - "RAILS_ENV='test' RAILS_VERSION=3.2.14"
9
+
8
10
  script: "bundle exec rake db:drop db:create db:migrate test"
data/CHANGELOG CHANGED
@@ -5,6 +5,8 @@
5
5
  * swap jquery for prototype
6
6
  * Upgrade to bcrybt crypto method
7
7
 
8
+ =2.3.1
9
+ * Remove automatic loading of omniauth middleware, in favor of letting users load it themselves as specified in the README (this was causing bugs with duplicate inits of omniauth-facebook middleware)
8
10
 
9
11
  =2.3.0
10
12
  * Upgrade omniauth to 1.1
data/Gemfile CHANGED
@@ -6,4 +6,18 @@ group :test do
6
6
  gem 'sqlite3'
7
7
  end
8
8
 
9
- gemspec
9
+ rails_version = ENV["RAILS_VERSION"] || "default"
10
+
11
+ rails = case rails_version
12
+ when "master"
13
+ {github: "rails/rails"}
14
+ when "default"
15
+ ">= 3.2.0"
16
+ else
17
+ "~> #{rails_version}"
18
+ end
19
+
20
+ gem "rails", rails
21
+
22
+
23
+ gemspec
@@ -1,6 +1,8 @@
1
1
  class CategoriesController < BaseController
2
2
  before_filter :login_required, :except => [:show, :most_viewed, :rss]
3
3
  before_filter :admin_required, :only => [:new, :edit, :update, :create, :destroy, :index]
4
+
5
+ cache_sweeper :category_sweeper, :only => [:create, :update, :destroy]
4
6
 
5
7
  # GET /categories
6
8
  # GET /categories.xml
@@ -0,0 +1,27 @@
1
+ class CategorySweeper < ActionController::Caching::Sweeper
2
+ observe Category # This sweeper is going to keep an eye on the Category model
3
+
4
+ # If our sweeper detects that a Category was created call this
5
+ def after_create(category)
6
+ expire_cache_for(category)
7
+ end
8
+
9
+ # If our sweeper detects that a Category was updated call this
10
+ def after_update(category)
11
+ expire_cache_for(category)
12
+ end
13
+
14
+ # If our sweeper detects that a Category was deleted call this
15
+ def after_destroy(category)
16
+ expire_cache_for(category)
17
+ end
18
+
19
+ private
20
+ def expire_cache_for(record)
21
+ # Expire the home page
22
+ expire_action(:controller => 'base', :action => 'site_index')
23
+
24
+ # Also expire the sitemap
25
+ expire_action(:controller => 'sitemap', :action => 'index')
26
+ end
27
+ end
@@ -4,30 +4,28 @@ class CommentSweeper < ActionController::Caching::Sweeper
4
4
  def after_create(comment)
5
5
  expire_cache_for(comment)
6
6
  end
7
-
7
+
8
8
  # If our sweeper detects that a comment was updated call this
9
9
  def after_update(comment)
10
10
  expire_cache_for(comment)
11
11
  end
12
-
12
+
13
13
  # If our sweeper detects that a comment was deleted call this
14
14
  def after_destroy(comment)
15
15
  expire_cache_for(comment)
16
16
  end
17
-
17
+
18
18
  private
19
19
  def expire_cache_for(record)
20
20
  # Expire the footer content
21
21
  expire_action :controller => 'base', :action => 'footer_content'
22
22
 
23
- if record.commentable_type.eql?('Post')
23
+ if record.commentable_type.eql?('Post')
24
24
  expire_action :controller => 'posts', :action => 'show', :id => record.commentable.to_param , :user_id => record.commentable.user.to_param
25
-
25
+
26
26
  if Post.find_recent(:limit => 16).include?(record.commentable)
27
- # Expire the home page
27
+ # Expire the home page
28
28
  expire_action :controller => 'base', :action => 'site_index'
29
- # Expire the category pages
30
- expire_action :controller => 'categories', :action => 'show', :id => record.commentable.category
31
29
  end
32
30
  end
33
31
 
@@ -12,7 +12,7 @@ class CommentsController < BaseController
12
12
  end
13
13
 
14
14
  cache_sweeper :comment_sweeper, :only => [:create, :destroy]
15
-
15
+
16
16
  def edit
17
17
  @comment = Comment.find(params[:id])
18
18
  respond_to do |format|
@@ -22,10 +22,10 @@ class CommentsController < BaseController
22
22
 
23
23
  def update
24
24
  @comment = Comment.find(params[:id])
25
- @comment.update_attributes(params[:comment])
25
+ @comment.update_attributes(params[:comment])
26
26
  respond_to do |format|
27
27
  format.js
28
- end
28
+ end
29
29
  end
30
30
 
31
31
 
@@ -34,15 +34,15 @@ class CommentsController < BaseController
34
34
  commentable_class = commentable_type.singularize.constantize
35
35
  commentable_type_humanized = commentable_type.humanize
36
36
  commentable_type_tableized = commentable_type.tableize
37
-
37
+
38
38
  if @commentable = commentable_class.find(params[:commentable_id])
39
39
  unless logged_in? || (@commentable.owner && @commentable.owner.profile_public?)
40
40
  flash.now[:error] = :private_user_profile_message.l
41
41
  redirect_to login_path and return
42
42
  end
43
-
43
+
44
44
  @comments = @commentable.comments.recent.page(params[:page])
45
- @title = commentable_type_humanized
45
+ @title = commentable_type_humanized
46
46
  @rss_url = commentable_comments_url(commentable_type_tableized, @commentable, :format => :rss)
47
47
 
48
48
  if @comments.any?
@@ -51,12 +51,12 @@ class CommentsController < BaseController
51
51
  @title = first_comment.commentable_name
52
52
  @back_url = commentable_url(first_comment)
53
53
  respond_to do |format|
54
- @rss_title = "#{configatron.community_name}: #{commentable_type_humanized} Comments - #{@title}"
54
+ @rss_title = "#{configatron.community_name}: #{commentable_type_humanized} Comments - #{@title}"
55
55
  format.html
56
56
  format.rss {
57
57
  render_comments_rss_feed_for(@comments, @commentable, @rss_title) and return
58
58
  }
59
- end
59
+ end
60
60
  else
61
61
  if @commentable.is_a?(User)
62
62
  @user = @commentable
@@ -66,19 +66,19 @@ class CommentsController < BaseController
66
66
  @title = @commentable.respond_to?(:title) ? @commentable.title : @title
67
67
  @back_url = url_for([@user, @commentable])
68
68
  end
69
-
69
+
70
70
  respond_to do |format|
71
71
  format.html
72
72
  format.rss {
73
- @rss_title = "#{configatron.community_name}: #{commentable_type_humanized} Comments - #{@title}"
73
+ @rss_title = "#{configatron.community_name}: #{commentable_type_humanized} Comments - #{@title}"
74
74
  render_comments_rss_feed_for([], @commentable, @rss_title) and return
75
75
  }
76
- end
77
- end
76
+ end
77
+ end
78
78
  else
79
79
  flash[:notice] = :no_comments_found.l_with_args(:type => commentable_type_humanized)
80
80
  redirect_to home_path
81
- end
81
+ end
82
82
  end
83
83
 
84
84
  def new
@@ -131,7 +131,7 @@ class CommentsController < BaseController
131
131
  }
132
132
  end
133
133
  end
134
-
134
+
135
135
  def delete_selected
136
136
  if request.post?
137
137
  if params[:delete]
@@ -141,12 +141,12 @@ class CommentsController < BaseController
141
141
  comment.destroy if comment.can_be_deleted_by(current_user)
142
142
  }
143
143
  end
144
- flash[:notice] = :comments_deleted.l
144
+ flash[:notice] = :comments_deleted.l
145
145
  redirect_to admin_comments_path
146
146
  end
147
- end
147
+ end
148
+
148
149
 
149
-
150
150
  def unsubscribe
151
151
  @comment = Comment.find(params[:id])
152
152
  if @comment.token_for(params[:email]).eql?(params[:token])
@@ -158,11 +158,11 @@ class CommentsController < BaseController
158
158
 
159
159
 
160
160
  private
161
-
161
+
162
162
  def get_commentable_type(string)
163
163
  string.camelize
164
164
  end
165
-
165
+
166
166
  def render_comments_rss_feed_for(comments, commentable, title)
167
167
  render_rss_feed_for(comments,
168
168
  { :class => commentable.class,
@@ -175,5 +175,5 @@ class CommentsController < BaseController
175
175
  }
176
176
  })
177
177
  end
178
-
178
+
179
179
  end
@@ -20,9 +20,6 @@ class PageSweeper < ActionController::Caching::Sweeper
20
20
  def expire_cache_for(record)
21
21
  # Expire the home page
22
22
  expire_action(:controller => 'base', :action => 'site_index')
23
-
24
- # Expire the footer content
25
- expire_action(:controller => 'base', :action => 'footer_content')
26
23
 
27
24
  # Also expire the sitemap
28
25
  expire_action(:controller => 'sitemap', :action => 'index')
@@ -8,7 +8,7 @@ class PagesController < BaseController
8
8
 
9
9
  def cache_action?
10
10
  !logged_in? && controller_name.eql?('pages')
11
- end
11
+ end
12
12
 
13
13
  before_filter :login_required, :only => [:index, :new, :edit, :update, :destroy, :create, :preview]
14
14
  before_filter :require_moderator, :only => [:index, :new, :edit, :update, :destroy, :create, :preview]
@@ -26,7 +26,7 @@ class PagesController < BaseController
26
26
  @page = Page.live.find(params[:id])
27
27
  unless logged_in? || @page.page_public
28
28
  flash[:error] = :page_not_public_warning.l
29
- redirect_to :controller => 'sessions', :action => 'new'
29
+ redirect_to :controller => 'sessions', :action => 'new'
30
30
  end
31
31
  rescue
32
32
  flash[:error] = :page_not_found.l
@@ -59,7 +59,7 @@ class PagesController < BaseController
59
59
  end
60
60
 
61
61
  private
62
-
62
+
63
63
  def require_moderator
64
64
  @page ||= Page.find(params[:id]) if params[:id]
65
65
  unless admin? || moderator?
@@ -5,17 +5,17 @@ class PostSweeper < ActionController::Caching::Sweeper
5
5
  def after_create(post)
6
6
  expire_cache_for(post)
7
7
  end
8
-
8
+
9
9
  # If our sweeper detects that a Post was updated call this
10
10
  def after_update(post)
11
11
  expire_cache_for(post)
12
12
  end
13
-
13
+
14
14
  # If our sweeper detects that a Post was deleted call this
15
15
  def after_destroy(post)
16
16
  expire_cache_for(post)
17
17
  end
18
-
18
+
19
19
  private
20
20
  def expire_cache_for(record)
21
21
  # Expire the home page
@@ -23,13 +23,10 @@ class PostSweeper < ActionController::Caching::Sweeper
23
23
 
24
24
  # Expire the footer content
25
25
  expire_action(:controller => 'base', :action => 'footer_content')
26
-
26
+
27
27
  # Also expire the sitemap
28
28
  expire_action(:controller => 'sitemap', :action => 'index')
29
29
 
30
- # Expire the category pages
31
- expire_action(:controller => 'categories', :action => 'index')
32
-
33
30
  # Also expire the show pages, in case we just edited a blog entry
34
31
  expire_action(:controller => 'posts', :action => 'show', :id => record.to_param, :user_id => record.user.to_param)
35
32
  end
@@ -8,17 +8,17 @@ class PostsController < BaseController
8
8
  uses_tiny_mce do
9
9
  {:only => [:show], :options => configatron.simple_mce_options}
10
10
  end
11
-
11
+
12
12
  cache_sweeper :post_sweeper, :only => [:create, :update, :destroy]
13
- cache_sweeper :taggable_sweeper, :only => [:create, :update, :destroy]
13
+ cache_sweeper :taggable_sweeper, :only => [:create, :update, :destroy]
14
14
  caches_action :show, :if => Proc.new{|c| !logged_in? }
15
-
15
+
16
16
  before_filter :login_required, :only => [:new, :edit, :update, :destroy, :create, :manage, :preview]
17
17
  before_filter :find_user, :only => [:new, :edit, :index, :show, :update_views, :manage, :preview]
18
18
  before_filter :require_ownership_or_moderator, :only => [:edit, :update, :destroy, :create, :manage, :new]
19
19
 
20
- skip_before_filter :verify_authenticity_token, :only => [:update_views, :send_to_friend] #called from ajax on cached pages
21
-
20
+ skip_before_filter :verify_authenticity_token, :only => [:update_views, :send_to_friend] #called from ajax on cached pages
21
+
22
22
  def manage
23
23
  Post.unscoped do
24
24
  @search = Post.search(params[:search])
@@ -28,20 +28,20 @@ class PostsController < BaseController
28
28
  end
29
29
 
30
30
  def index
31
- @user = User.find(params[:user_id])
31
+ @user = User.find(params[:user_id])
32
32
  @category = Category.find_by_name(params[:category_name]) if params[:category_name]
33
33
 
34
34
  @posts = @user.posts.recent
35
35
  @posts = @post.where('category_id = ?', @category.id) if @category
36
36
  @posts = @posts.page(params[:page]).per(10)
37
-
37
+
38
38
  @is_current_user = @user.eql?(current_user)
39
39
 
40
40
  @popular_posts = @user.posts.order("view_count DESC").limit(10).all
41
-
41
+
42
42
  @rss_title = "#{configatron.community_name}: #{@user.login}'s posts"
43
43
  @rss_url = user_posts_path(@user,:format => :rss)
44
-
44
+
45
45
  respond_to do |format|
46
46
  format.html # index.rhtml
47
47
  format.rss {
@@ -54,14 +54,13 @@ class PostsController < BaseController
54
54
  }
55
55
  end
56
56
  end
57
-
58
-
57
+
59
58
  # GET /posts/1
60
59
  # GET /posts/1.xml
61
60
  def show
62
61
  @rss_title = "#{configatron.community_name}: #{@user.login}'s posts"
63
62
  @rss_url = user_posts_path(@user,:format => :rss)
64
-
63
+
65
64
  @post = Post.unscoped.find(params[:id])
66
65
 
67
66
  @user = @post.user
@@ -71,31 +70,31 @@ class PostsController < BaseController
71
70
  @comments = @post.comments.includes(:user).order('created_at DESC').limit(20)
72
71
 
73
72
  @previous = @post.previous_post
74
- @next = @post.next_post
73
+ @next = @post.next_post
75
74
  @popular_posts = @user.posts.except(:order).order('view_count DESC').limit(10).all
76
75
  @related = Post.find_related_to(@post)
77
- @most_commented = Post.find_most_commented
76
+ @most_commented = Post.find_most_commented
78
77
  end
79
-
78
+
80
79
  def update_views
81
80
  @post = Post.find(params[:id])
82
81
  updated = update_view_count(@post)
83
82
  render :text => updated ? 'updated' : 'duplicate'
84
83
  end
85
-
84
+
86
85
  def preview
87
86
  @post = Post.unscoped.find(params[:id])
88
87
  redirect_to(:controller => 'sessions', :action => 'new') and return false unless @post.user.eql?(current_user) || admin? || moderator?
89
88
  end
90
-
89
+
91
90
  # GET /posts/new
92
91
  def new
93
- @user = User.find(params[:user_id])
92
+ @user = User.find(params[:user_id])
94
93
  @post = Post.new(params[:post])
95
94
  @post.published_as = 'live'
96
95
  @categories = Category.find(:all)
97
96
  end
98
-
97
+
99
98
  # GET /posts/1;edit
100
99
  def edit
101
100
  @post = Post.unscoped.find(params[:id])
@@ -103,20 +102,20 @@ class PostsController < BaseController
103
102
 
104
103
  # POST /posts
105
104
  # POST /posts.xml
106
- def create
105
+ def create
107
106
  @user = User.find(params[:user_id])
108
107
  @post = Post.new(params[:post])
109
108
  @post.user = @user
110
109
  @post.tag_list = params[:tag_list] || ''
111
-
110
+
112
111
  respond_to do |format|
113
112
  if @post.save
114
113
  @post.create_poll(params[:poll], params[:choices]) if params[:poll]
115
-
114
+
116
115
  flash[:notice] = @post.category ? :post_created_for_category.l_with_args(:category => @post.category.name.singularize) : :your_post_was_successfully_created.l
117
- format.html {
116
+ format.html {
118
117
  if @post.is_live?
119
- redirect_to @post.category ? category_path(@post.category) : user_post_path(@user, @post)
118
+ redirect_to @post.category ? category_path(@post.category) : user_post_path(@user, @post)
120
119
  else
121
120
  redirect_to manage_user_posts_path(@user)
122
121
  end
@@ -124,51 +123,51 @@ class PostsController < BaseController
124
123
  format.js
125
124
  else
126
125
  format.html { render :action => "new" }
127
- format.js
126
+ format.js
128
127
  end
129
128
  end
130
129
  end
131
-
130
+
132
131
  # PUT /posts/1
133
132
  # PUT /posts/1.xml
134
133
  def update
135
134
  @post = Post.unscoped.find(params[:id])
136
135
  @user = @post.user
137
136
  @post.tag_list = params[:tag_list] || ''
138
-
137
+
139
138
  respond_to do |format|
140
139
  if @post.update_attributes(params[:post])
141
140
  @post.update_poll(params[:poll], params[:choices]) if params[:poll]
142
-
141
+
143
142
  format.html { redirect_to user_post_path(@post.user, @post) }
144
143
  else
145
- format.html { render :action => "edit" }
144
+ format.html { render :action => "edit" }
146
145
  end
147
146
  end
148
147
  end
149
-
148
+
150
149
  # DELETE /posts/1
151
150
  # DELETE /posts/1.xml
152
151
  def destroy
153
152
  @user = User.find(params[:user_id])
154
153
  @post = Post.find(params[:id])
155
154
  @post.destroy
156
-
155
+
157
156
  respond_to do |format|
158
- format.html {
157
+ format.html {
159
158
  flash[:notice] = :your_post_was_deleted.l
160
- redirect_to manage_user_posts_url(@user)
159
+ redirect_to manage_user_posts_url(@user)
161
160
  }
162
161
  end
163
162
  end
164
-
163
+
165
164
  def send_to_friend
166
165
  unless params[:emails]
167
166
  render :partial => 'posts/send_to_friend', :locals => {:user_id => params[:user_id], :post_id => params[:post_id]} and return
168
167
  end
169
168
  @post = Post.find(params[:id])
170
169
  if @post.send_to(params[:emails], params[:message], (current_user || nil))
171
- render :inline => "It worked!"
170
+ render :inline => "It worked!"
172
171
  else
173
172
  render :inline => "You entered invalid addresses: <ul>"+ @post.invalid_emails.collect{|email| '<li>'+email+'</li>' }.join+"</ul> Please correct these and try again.", :status => 500
174
173
  end
@@ -179,13 +178,13 @@ class PostsController < BaseController
179
178
  @posts = Post.find_popular({:limit => 15, :since => 3.days})
180
179
 
181
180
  @monthly_popular_posts = Post.find_popular({:limit => 20, :since => 30.days})
182
-
183
- @related_tags = ActsAsTaggableOn::Tag.find_by_sql("SELECT tags.id, tags.name, count(*) AS count
184
- FROM taggings, tags
181
+
182
+ @related_tags = ActsAsTaggableOn::Tag.find_by_sql("SELECT tags.id, tags.name, count(*) AS count
183
+ FROM taggings, tags
185
184
  WHERE tags.id = taggings.tag_id GROUP BY tags.id, tags.name");
186
185
 
187
186
  @rss_title = "#{configatron.community_name} "+:popular_posts.l
188
- @rss_url = popular_rss_url
187
+ @rss_url = popular_rss_url
189
188
  respond_to do |format|
190
189
  format.html # index.rhtml
191
190
  format.rss {
@@ -195,51 +194,51 @@ class PostsController < BaseController
195
194
  }
196
195
  end
197
196
  end
198
-
197
+
199
198
  def recent
200
199
  @posts = Post.recent.page(params[:page]).per(20)
201
200
 
202
201
  @recent_clippings = Clipping.find_recent(:limit => 15)
203
202
  @recent_photos = Photo.find_recent(:limit => 10)
204
-
203
+
205
204
  @rss_title = "#{configatron.community_name} "+:recent_posts.l
206
205
  @rss_url = recent_rss_url
207
206
  respond_to do |format|
208
- format.html
207
+ format.html
209
208
  format.rss {
210
209
  render_rss_feed_for(@posts, { :feed => {:title => @rss_title, :link => recent_url},
211
210
  :item => {:title => :title, :link => Proc.new {|post| user_post_url(post.user, post)}, :description => :post, :pub_date => :published_at}
212
211
  })
213
212
  }
214
- end
213
+ end
215
214
  end
216
-
215
+
217
216
  def featured
218
217
  @posts = Post.by_featured_writers.recent.page(params[:page])
219
218
  @featured_writers = User.featured
220
-
219
+
221
220
  @rss_title = "#{configatron.community_name} "+:featured_posts.l
222
221
  @rss_url = featured_rss_url
223
222
  respond_to do |format|
224
- format.html
223
+ format.html
225
224
  format.rss {
226
225
  render_rss_feed_for(@posts, { :feed => {:title => @rss_title, :link => recent_url},
227
226
  :item => {:title => :title, :link => Proc.new {|post| user_post_url(post.user, post)}, :description => :post, :pub_date => :published_at}
228
227
  })
229
228
  }
230
- end
231
- end
232
-
229
+ end
230
+ end
231
+
233
232
  def category_tips_update
234
233
  return unless request.xhr?
235
234
  @category = Category.find(params[:post_category_id] )
236
- render :partial => "categories/tips", :locals => {:category => @category}
235
+ render :partial => "categories/tips", :locals => {:category => @category}
237
236
  rescue ActiveRecord::RecordNotFound
238
- render :partial => "categories/tips", :locals => {:category => nil}
237
+ render :partial => "categories/tips", :locals => {:category => nil}
239
238
  end
240
-
239
+
241
240
  private
242
-
241
+
243
242
  def require_ownership_or_moderator
244
243
  @user ||= User.find(params[:user_id])
245
244
  @post ||= Post.unscoped.find(params[:id]) if params[:id]
@@ -248,5 +247,5 @@ class PostsController < BaseController
248
247
  end
249
248
  return @user
250
249
  end
251
-
250
+
252
251
  end
@@ -2,7 +2,7 @@ class Category < ActiveRecord::Base
2
2
  has_many :posts, :order => "published_at desc"
3
3
  validates_presence_of :name
4
4
 
5
- attr_accessible :name
5
+ attr_accessible :name, :tips, :new_post_text, :nav_text
6
6
 
7
7
  has_friendly_id :name, :use_slug => true
8
8
 
@@ -16,6 +16,8 @@ class Clipping < ActiveRecord::Base
16
16
 
17
17
  acts_as_taggable
18
18
  acts_as_activity :user
19
+
20
+ attr_accessible :user, :url, :description, :image_url
19
21
 
20
22
  scope :recent, :order => 'clippings.created_at DESC'
21
23
 
@@ -25,7 +25,9 @@ class Invitation < ActiveRecord::Base
25
25
  record.email_addresses = (emails - invalid_emails).join(', ')
26
26
  end
27
27
  end
28
-
28
+
29
+ attr_accessible :email_addresses, :message
30
+
29
31
  def send_invite
30
32
  emails = self.email_addresses.split(",").collect{|email| email.strip }.uniq
31
33
  emails.each{|email|
@@ -24,7 +24,7 @@ class Photo < ActiveRecord::Base
24
24
  #Named scopes
25
25
  scope :recent, :order => "photos.created_at DESC"
26
26
  scope :new_this_week, :order => "photos.created_at DESC", :conditions => ["photos.created_at > ?", 7.days.ago.iso8601]
27
- attr_accessible :name, :description, :photo, :photo_remote_url, :crop_x, :crop_y, :crop_w, :crop_h, :user_id
27
+ attr_accessible :name, :description, :photo, :photo_remote_url, :crop_x, :crop_y, :crop_w, :crop_h, :user_id, :album_id
28
28
 
29
29
  def display_name
30
30
  (self.name && self.name.length>0) ? self.name : "#{:created_at.l.downcase}: #{I18n.l(self.created_at, :format => :published_date)}"
@@ -18,7 +18,7 @@
18
18
  %label
19
19
  =:tags.l
20
20
  %em="(#{:optional_keywords_describing_this_clipping_separated_by_commas.l})"
21
- = text_field_tag 'tag_list', @clipping.tag_list
21
+ = text_field_tag 'tag_list', @clipping.tag_list.to_s
22
22
 
23
23
  %p
24
24
  = submit_tag :save.l
@@ -12,7 +12,7 @@
12
12
  %label
13
13
  =:tags.l
14
14
  %em="(#{:optional_keywords_describing_this_forum_separated_by_commas.l})"
15
- = text_field_tag 'tag_list', @forum.tag_list, {:autocomplete => "off", :size => 35}
15
+ = text_field_tag 'tag_list', @forum.tag_list.to_s, {:autocomplete => "off", :size => 35}
16
16
  #tag_list_auto_complete.auto_complete
17
17
 
18
18
  -content_for :end_javascript do
@@ -22,7 +22,7 @@
22
22
  %label
23
23
  = :tags.l
24
24
  %em="(#{:optional_keywords_describing_this_photo_separated_by_commas.l})"
25
- = text_field_tag 'tag_list', @photo.tag_list.join(', '), {:autocomplete => "off", :size => 35}
25
+ = text_field_tag 'tag_list', @photo.tag_list.to_s, {:autocomplete => "off", :size => 35}
26
26
  #tag_list_auto_complete.auto_complete{"class"=>"auto_complete"}
27
27
  -content_for :end_javascript do
28
28
  = auto_complete_field 'tag_list', {:url => { :controller => "tags", :action => 'auto_complete_for_tag_name'}, :tokens => [','] }
@@ -1,9 +1,4 @@
1
1
  #hd
2
- - if !configatron.community_locale
3
- %div
4
- %a{:href=>url_for(:subdomain => 'ru', :only_path => false ), :title=>"#{configatron.community_locale} russian translation"}= "rus"
5
- %a{:href=>url_for(:subdomain => 'en', :only_path =>false), :title=>"english translation" }= "eng"
6
-
7
2
  %h1
8
3
  %a{:href=>home_url, :title=>"#{configatron.community_name}"}= configatron.community_name
9
4
  - if logged_in?
@@ -13,7 +13,7 @@
13
13
  %label
14
14
  = :tags.l
15
15
  %em="(#{:optional_keywords_describing_this_topic_separated_by_commas.l})"
16
- = text_field_tag 'tag_list', @topic.tag_list, {:autocomplete => "off", :size => 35}
16
+ = text_field_tag 'tag_list', @topic.tag_list.to_s, {:autocomplete => "off", :size => 35}
17
17
  #tag_list_auto_complete.auto_complete
18
18
 
19
19
  -content_for :end_javascript do
@@ -52,7 +52,7 @@
52
52
  -box do
53
53
  %h3= :tags.l
54
54
  #user_tags
55
- = text_field_tag 'tag_list', @user.tag_list.join(", "), {:autocomplete => "off"}
55
+ = text_field_tag 'tag_list', @user.tag_list.join.to_s, {:autocomplete => "off"}
56
56
  #tag_list_auto_complete.auto_complete
57
57
  -content_for :end_javascript do
58
58
  = auto_complete_field 'tag_list', {:url => { :controller => "tags", :action => 'auto_complete_for_tag_name'}, :tokens => [','] }
@@ -25,7 +25,7 @@ Gem::Specification.new do |s|
25
25
  s.files = `git ls-files`.split("\n") rescue ''
26
26
  s.test_files = `git ls-files -- {test}/*`.split("\n")
27
27
 
28
- s.add_dependency(%q<rails>, ["~> 3.2.0"])
28
+ s.add_dependency(%q<rails>, [">= 3.2.0"])
29
29
  s.add_dependency(%q<rack>, [">= 1.4.1"])
30
30
  s.add_dependency(%q<authlogic>, [">= 0"])
31
31
  s.add_dependency(%q<bcrypt-ruby>, [">= 0"])
@@ -36,12 +36,12 @@ Gem::Specification.new do |s|
36
36
  s.add_dependency(%q<sass-rails>, ["~> 3.2.3"])
37
37
  s.add_dependency(%q<ri_cal>, [">= 0"])
38
38
  s.add_dependency(%q<rakismet>, [">= 0"])
39
- s.add_dependency(%q<aws-s3>, [">= 0"])
39
+ s.add_dependency(%q<aws-sdk>, [">= 0"])
40
40
  s.add_dependency(%q<kaminari>, [">= 0"])
41
41
  s.add_dependency(%q<dynamic_form>, [">= 0"])
42
42
  s.add_dependency(%q<friendly_id>, ["~> 3.3"])
43
- s.add_dependency(%q<paperclip>, ["~> 2.4.3"])
44
- s.add_dependency(%q<cocaine>, ["0.3.2"])
43
+ s.add_dependency(%q<paperclip>, ["~> 3.5.1"])
44
+ s.add_dependency(%q<cocaine>, ["0.5.1"])
45
45
  s.add_dependency(%q<acts_as_commentable>, ["= 3.0.1"])
46
46
  s.add_dependency(%q<recaptcha>, [">= 0"])
47
47
  s.add_dependency(%q<omniauth>, ["~> 1.1.0"])
@@ -52,6 +52,9 @@ configuration = {
52
52
  :missing_thumb => '/assets/icon_missing_thumb.gif',
53
53
  :missing_medium => "/assets/icon_missing_medium.gif",
54
54
  :paperclip_options => {
55
+ :default_url => "",
56
+ :path => "#{Rails.root}/public/system/:attachment/:id/:style/:filename",
57
+ :url => "/system/:attachment/:id/:style/:filename",
55
58
  :styles => {
56
59
  :thumb => {
57
60
  :geometry => "100x100#",
@@ -71,6 +74,9 @@ configuration = {
71
74
  :use_thumbs => true,
72
75
  :dimensions => [150, 635],
73
76
  :paperclip_options => {
77
+ :default_url => "",
78
+ :path => "#{Rails.root}/public/system/:attachment/:id/:style/:filename",
79
+ :url => "/system/:attachment/:id/:style/:filename",
74
80
  :styles => {
75
81
  :original => '465>',
76
82
  :thumb => "45x45#",
@@ -85,6 +91,9 @@ configuration = {
85
91
 
86
92
  :clipping => {
87
93
  :paperclip_options => {
94
+ :default_url => "",
95
+ :path => "#{Rails.root}/public/system/:attachment/:id/:style/:filename",
96
+ :url => "/system/:attachment/:id/:style/:filename",
88
97
  :styles => {
89
98
  :thumb => "100x100#",
90
99
  :medium => "290x320#",
@@ -7,35 +7,22 @@ module CommunityEngine
7
7
 
8
8
  initializer engine_name do |app|
9
9
  require root.join('config','application_config.rb')
10
- require app.root.join('config','application_config.rb')
10
+ require app.root.join('config','application_config.rb')
11
11
  end
12
-
13
- initializer "#{engine_name}.initializers", :before => :load_config_initializers do
14
- Dir["#{root}/config/initializers/**/*.rb"].each do |initializer|
12
+
13
+ initializer "#{engine_name}.initializers", :before => :load_config_initializers do
14
+ Dir["#{root}/config/initializers/**/*.rb"].each do |initializer|
15
15
  load(initializer) unless File.exists?("#{root.to_s}/config/initializers/#{File.basename(initializer)}")
16
- end
16
+ end
17
17
  end
18
-
18
+
19
19
  initializer "#{engine_name}.rakismet_config", :before => "rakismet.setup" do |app|
20
20
  if !configatron.akismet_key.nil?
21
21
  app.config.rakismet.key = configatron.akismet_key
22
22
  app.config.rakismet.url = configatron.app_host
23
23
  end
24
24
  end
25
-
26
- initializer "#{engine_name}.load_middleware", :after => :load_config_initializers do
27
- if !configatron.auth_providers.nil?
28
- configatron.protect(:auth_providers)
29
- configatron.auth_providers.to_hash.each do |name, hash|
30
- provider = "::OmniAuth::Strategies::#{name.to_s.classify}".constantize
31
- config.app_middleware.use provider, hash[:key], hash[:secret]
32
- end
33
- end
34
- end
35
-
36
-
37
25
 
38
-
39
26
  end
40
27
  end
41
28
 
@@ -2,7 +2,7 @@ module CommunityEngine
2
2
  module Version
3
3
  MAJOR = 2
4
4
  MINOR = 3
5
- PATCH = 0
5
+ PATCH = 1
6
6
  BUILD = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
@@ -1,17 +1,17 @@
1
1
  development:
2
- bucket_name: bucket
2
+ bucket: bucket
3
3
  access_key_id: 'KEY'
4
4
  secret_access_key: 'SECRET_KEY'
5
5
  use_persistent: true
6
6
 
7
7
  test:
8
- bucket_name: bucket
8
+ bucket: bucket
9
9
  access_key_id: 'KEY'
10
10
  secret_access_key: 'SECRET_KEY'
11
11
  use_persistent: false
12
12
 
13
13
  production:
14
- bucket_name: bucket
14
+ bucket: bucket
15
15
  access_key_id: 'KEY'
16
16
  secret_access_key: 'SECRET_KEY'
17
17
  use_persistent: false
@@ -12,14 +12,16 @@ class InvitationTest < ActiveSupport::TestCase
12
12
 
13
13
  def test_send_with_names_in_emails
14
14
  addresses = '"Valid Example" <valid@example.com>, valid_2@example.com'
15
- invitation = Invitation.new(:email_addresses => addresses, :user => users(:quentin))
15
+ invitation = Invitation.new(:email_addresses => addresses)
16
+ invitation.user = users(:quentin)
16
17
  assert invitation.valid?
17
18
  assert invitation.send_invite
18
19
  end
19
20
 
20
21
  def test_send_invite
21
22
  addresses = "valid@example.com, valid_2@example.com"
22
- invitation = Invitation.new(:email_addresses => addresses, :user => users(:quentin))
23
+ invitation = Invitation.new(:email_addresses => addresses)
24
+ invitation.user = users(:quentin)
23
25
  assert invitation.valid?
24
26
  assert invitation.send_invite
25
27
  end
@@ -14,6 +14,7 @@ module ActiveRecord
14
14
  valid_keys = [:conditions, :order, :on_lookup_failure]
15
15
  options.assert_valid_keys(*valid_keys)
16
16
  valid_keys.each do |key|
17
+ class_attribute :acts_enumerated_on_lookup_failure
17
18
  class_attribute "acts_enumerated_#{key.to_s}"
18
19
  if options.has_key?( key )
19
20
  self.send "acts_enumerated_#{key.to_s}=", options[key]
@@ -55,7 +56,7 @@ module ActiveRecord
55
56
  else
56
57
  raise TypeError, "#{self.name}[]: argument should be a String, Symbol or Fixnum but got a: #{arg.class.name}"
57
58
  end
58
- self.send((read_inheritable_attribute(:acts_enumerated_on_lookup_failure) || :enforce_strict_literals), arg)
59
+ self.send(:acts_enumerated_on_lookup_failure) || self.send(:enforce_strict_literals, arg)
59
60
  end
60
61
 
61
62
  def lookup_id(arg)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: community_engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno Bornsztein
@@ -14,14 +14,14 @@ dependencies:
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - ! '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 3.2.0
27
27
  - !ruby/object:Gem::Dependency
@@ -165,7 +165,7 @@ dependencies:
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
- name: aws-s3
168
+ name: aws-sdk
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - ! '>='
@@ -226,28 +226,28 @@ dependencies:
226
226
  requirements:
227
227
  - - ~>
228
228
  - !ruby/object:Gem::Version
229
- version: 2.4.3
229
+ version: 3.5.1
230
230
  type: :runtime
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - ~>
235
235
  - !ruby/object:Gem::Version
236
- version: 2.4.3
236
+ version: 3.5.1
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: cocaine
239
239
  requirement: !ruby/object:Gem::Requirement
240
240
  requirements:
241
241
  - - '='
242
242
  - !ruby/object:Gem::Version
243
- version: 0.3.2
243
+ version: 0.5.1
244
244
  type: :runtime
245
245
  prerelease: false
246
246
  version_requirements: !ruby/object:Gem::Requirement
247
247
  requirements:
248
248
  - - '='
249
249
  - !ruby/object:Gem::Version
250
- version: 0.3.2
250
+ version: 0.5.1
251
251
  - !ruby/object:Gem::Dependency
252
252
  name: acts_as_commentable
253
253
  requirement: !ruby/object:Gem::Requirement
@@ -526,6 +526,7 @@ files:
526
526
  - app/controllers/authorizations_controller.rb
527
527
  - app/controllers/base_controller.rb
528
528
  - app/controllers/categories_controller.rb
529
+ - app/controllers/category_sweeper.rb
529
530
  - app/controllers/clippings_controller.rb
530
531
  - app/controllers/comment_sweeper.rb
531
532
  - app/controllers/comments_controller.rb