solarsearch 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.9
1
+ 0.0.10
@@ -19,7 +19,7 @@ class ArticleController < ApplicationController
19
19
  if params[:q]
20
20
  query = params[:q]
21
21
  search = Sunspot.search(Article) do
22
- keywords query
22
+ keywords "#{query} #{User::QUERY_AUGMENT_PARTIAL}"
23
23
  paginate(:page => page)
24
24
  order_by(:published_at, :desc)
25
25
  end
@@ -1,4 +1,4 @@
1
- class ArticleStatusesController < ApplicationController
1
+ class ArticleStatusController < ApplicationController
2
2
 
3
3
  access_control do
4
4
  allow logged_in
@@ -0,0 +1,3 @@
1
+ module ArticleStatusHelper
2
+ MAX_ARTICLE_TITLE_VIEW_SIZE = 50
3
+ end
@@ -27,9 +27,12 @@ class User < ActiveRecord::Base
27
27
  EMAIL_MAX_LENGTH = 50
28
28
  USERNAME_RANGE = USERNAME_MIN_LENGTH..USERNAME_MAX_LENGTH
29
29
  PASSWORD_RANGE = PASSWORD_MIN_LENGTH..PASSWORD_MAX_LENGTH
30
+
31
+ #configuration settings
30
32
  MAX_NUMBER_OF_ARTICLES_PER_NEWSUPDATE = 10
31
- MAX_SIZE_OF_A_MAIL_IN_CHARACTERS = 10000
33
+ MAX_SIZE_OF_A_MAIL_IN_CHARACTERS = 20000
32
34
  NEWSUPDATE_RECENT_NUMBER_OF_DAYS = 120
35
+ QUERY_AUGMENT_PARTIAL = ''
33
36
 
34
37
  =begin
35
38
  validates_uniqueness_of :username, :email
@@ -95,7 +98,9 @@ class User < ActiveRecord::Base
95
98
  set_all_articles += article_update
96
99
  end
97
100
  arr_all_articles = set_all_articles.to_a
98
- arr_all_articles = arr_all_articles.find_all { |article| article_condition.call(article) } if article_condition
101
+ arr_all_articles = arr_all_articles.find_all do |article|
102
+ article_condition.call(article)
103
+ end if article_condition
99
104
  arr_all_articles.sort! { |article1, article2| article2.published_at <=> article1.published_at }
100
105
  arr_all_articles = arr_all_articles[0, MAX_NUMBER_OF_ARTICLES_PER_NEWSUPDATE]
101
106
  arr_all_articles
@@ -105,7 +110,7 @@ class User < ActiveRecord::Base
105
110
  searchquery = search_keyword.query
106
111
  self_user = self
107
112
  search = Sunspot.search(Article) do
108
- keywords searchquery
113
+ keywords "#{searchquery} #{QUERY_AUGMENT_PARTIAL}"
109
114
  with(:published_at).greater_than Time.now - NEWSUPDATE_RECENT_NUMBER_OF_DAYS.day
110
115
  dynamic :status do
111
116
  without Article.give_user_status_symbol(self_user, ArticleStatus::STATUS_VIEWED), true
@@ -114,7 +119,9 @@ class User < ActiveRecord::Base
114
119
  order_by(:published_at, :desc)
115
120
  paginate(:page => 1, :per_page => MAX_NUMBER_OF_ARTICLES_PER_NEWSUPDATE)
116
121
  end
117
- search.results
122
+ #FIXME: This is for debugging purposes, trying to catch a hardly reproducably bug, which I dont understand why happens
123
+ STDERR << search.results.to_a.to_s
124
+ search.results.to_a
118
125
  end
119
126
 
120
127
  def can_be_modified_by(user)
@@ -7,5 +7,5 @@
7
7
  - article = article_status.article
8
8
  %li
9
9
  = t :article_status_line, :article_status => h(ArticleStatus::WORD_FOR_STATUS[article_status.status]), :status_update_date => h(I18n.localize(article_status.updated_at, :format => :short))
10
- = link_to shorten_text(article.title,50,'..'), :controller => 'article', :action => 'show', :id => article
10
+ = link_to h(article.title[0, ArticleStatusHelper::MAX_ARTICLE_TITLE_VIEW_SIZE]), :controller => 'article', :action => 'show', :id => article
11
11
  = will_paginate @article_statuses
@@ -3,7 +3,7 @@ module SolarSearch #:nodoc:
3
3
  module MapperExtensions
4
4
  def solarsearch_routes
5
5
  @set.draw do |map|
6
- map.myevents 'myevents', :controller => 'article_statuses', :action => 'index'
6
+ map.myevents 'myevents', :controller => 'article_status', :action => 'index'
7
7
 
8
8
  map.tester 'tester', :controller => 'infosources', :action => 'tester'
9
9
  map.mynews 'mynews', :controller => 'search_keywords', :action => 'newsupdate'
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{solarsearch}
8
- s.version = "0.0.9"
8
+ s.version = "0.0.10"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Gyorgy Frivolt"]
12
- s.date = %q{2010-02-28}
12
+ s.date = %q{2010-03-01}
13
13
  s.description = %q{Have a search motor built on the top of Solr, a highly customizable, scalable and well performing search engine. You are only few steps away from creating your own search motor.}
14
14
  s.email = %q{gyorgy.frivolt@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -24,13 +24,13 @@ Gem::Specification.new do |s|
24
24
  "Rakefile",
25
25
  "VERSION",
26
26
  "app/controllers/article_controller.rb",
27
- "app/controllers/article_statuses_controller.rb",
27
+ "app/controllers/article_status_controller.rb",
28
28
  "app/controllers/infosources_controller.rb",
29
29
  "app/controllers/search_keywords_controller.rb",
30
30
  "app/controllers/user_sessions_controller.rb",
31
31
  "app/controllers/users_controller.rb",
32
32
  "app/helpers/article_helper.rb",
33
- "app/helpers/article_statuses_helper.rb",
33
+ "app/helpers/article_status_helper.rb",
34
34
  "app/helpers/infosources_helper.rb",
35
35
  "app/helpers/layout_helper.rb",
36
36
  "app/helpers/search_keywords_helper.rb",
@@ -53,7 +53,7 @@ Gem::Specification.new do |s|
53
53
  "app/views/article/_search_form.html.haml",
54
54
  "app/views/article/search.html.haml",
55
55
  "app/views/article/show.html.haml",
56
- "app/views/article_statuses/index.html.haml",
56
+ "app/views/article_status/index.html.haml",
57
57
  "app/views/infosources/edit.html.haml",
58
58
  "app/views/infosources/index.html.haml",
59
59
  "app/views/infosources/new.html.haml",
@@ -100,6 +100,7 @@ Gem::Specification.new do |s|
100
100
  "test/content_scrapper.rb",
101
101
  "test/database.yml",
102
102
  "test/functional/article_controller_test.rb",
103
+ "test/functional/article_status_controller_test.rb",
103
104
  "test/functional/email_controller_test.rb",
104
105
  "test/functional/infosources_controller_test.rb",
105
106
  "test/functional/restricted_logged_exceptions_controller_test.rb",
@@ -135,6 +136,7 @@ Gem::Specification.new do |s|
135
136
  "test/functional/infosources_controller_test.rb",
136
137
  "test/functional/article_controller_test.rb",
137
138
  "test/functional/restricted_logged_exceptions_controller_test.rb",
139
+ "test/functional/article_status_controller_test.rb",
138
140
  "test/functional/user_sessions_controller_test.rb",
139
141
  "test/functional/email_controller_test.rb",
140
142
  "test/test_helper.rb",
@@ -18,22 +18,40 @@ class ArticleControllerTest < ActionController::TestCase
18
18
  should_render_template :show
19
19
  end
20
20
 
21
- context "on GET to search" do
22
- setup do
23
- Sunspot.remove_all!
24
- 2.times { Article.make }
25
- (Article::per_page + 1).times { Article.make(:accent_in_body) }
26
- Sunspot.commit
27
- get :search, :q => Sham.accented_word
21
+ context "on common search setup" do
22
+
23
+ setup { Sunspot.remove_all! }
24
+
25
+ context "on searching accented characters" do
26
+ setup do
27
+ User::QUERY_AUGMENT_PARTIAL = ''
28
+ 2.times { Article.make }
29
+ (Article::per_page + 1).times { Article.make(:accent_in_body) }
30
+ Sunspot.commit
31
+ get :search, :q => Sham.accented_word
32
+ end
33
+ should_respond_with :success
34
+ should "have articles value set" do
35
+ articles = assigns(:articles)
36
+ assert_not_nil assigns(:articles)
37
+ assert_equal 1, articles.current_page
38
+ assert_equal Article::per_page + 1, articles.total_entries
39
+ end
40
+ should_render_template :search
28
41
  end
29
- should_respond_with :success
30
- should "have articles value set" do
31
- articles = assigns(:articles)
32
- assert_not_nil assigns(:articles)
33
- assert_equal 1, articles.current_page
34
- assert_equal Article::per_page + 1, articles.total_entries
42
+
43
+ context "on searching with query augment string" do
44
+ setup do
45
+ User::QUERY_AUGMENT_PARTIAL = '-wedontwantthis'
46
+ @article = Article.make
47
+ Article.make(:body => "#{@article.body} wedontwantthis")
48
+ Sunspot.commit
49
+ get :search, :q => @article.body
50
+ end
51
+ should "find only one result" do
52
+ assert_match (I18n.t :search_summary_number_of_articles, :articles_total => 1), @response.body
53
+ end
35
54
  end
36
- should_render_template :search
37
55
  end
38
56
  #TODO should be tested for cases when the user is not logged in
39
57
  end
@@ -0,0 +1,43 @@
1
+ require 'test_helper'
2
+
3
+ class ArticleStatusControllerTest < ActionController::TestCase
4
+
5
+ context "for logged in user" do
6
+
7
+ setup do
8
+ activate_authlogic
9
+ UserSession.create(@user = User.make)
10
+ @article = Article.make
11
+ end
12
+
13
+ context "on GET to index on empty list of statuses" do
14
+ setup { get :index }
15
+ should_respond_with :success
16
+ should_render_template :index
17
+ should "assign article_statuses" do
18
+ assert_not_nil assigns(:article_statuses)
19
+ end
20
+ end
21
+
22
+ context "on GET to index on one article status set" do
23
+ setup do
24
+ @article_status = ArticleStatus.new
25
+ @article_status.user = @user
26
+ @article_status.article = @article
27
+ @article_status.status = ArticleStatus::STATUS_VIEWED
28
+ @article_status.save
29
+ get :index
30
+ end
31
+ should_respond_with :success
32
+ should_render_template :index
33
+ should "have article status containing an element" do
34
+ assert !assigns(:article_statuses).empty?
35
+ end
36
+ should "contain reference to the article" do
37
+ assert_match(@article.body[0, ArticleStatusHelper::MAX_ARTICLE_TITLE_VIEW_SIZE], @response.body)
38
+ end
39
+ end
40
+
41
+ #TODO should be tested for cases when the user is not logged in
42
+ end
43
+ end
@@ -28,6 +28,22 @@ class UserTest < ActiveSupport::TestCase
28
28
  setup do
29
29
  Sunspot.remove_all!
30
30
  @user = User.make
31
+ User::QUERY_AUGMENT_PARTIAL = ''
32
+ end
33
+
34
+ context "on empty set of collected articles" do
35
+ setup do
36
+ ActionMailer::Base.deliveries = []
37
+ query = SearchKeyword.make(:user => @user)
38
+ Sunspot.commit
39
+ end
40
+ should "not collect any articles" do
41
+ assert_equal 0, @user.collect_recent_articles.count
42
+ end
43
+ should "not post any article" do
44
+ @user.post_recent_news
45
+ assert_did_not_send_email
46
+ end
31
47
  end
32
48
 
33
49
  context "for results having a common item for two search queries" do
@@ -85,6 +101,7 @@ class UserTest < ActiveSupport::TestCase
85
101
  articles[iteration] = Article.make(:body => query,
86
102
  :published_at => (Time.now - iteration.day))
87
103
  end
104
+ Sunspot.commit
88
105
  end
89
106
  should "sort the recent articles fetched for one source" do
90
107
  recent_articles = @user.recent_articles_for_search_keyword(@search_keyword)
@@ -108,6 +125,7 @@ class UserTest < ActiveSupport::TestCase
108
125
  @search_keyword = SearchKeyword.make(:user => @user, :query => 'spam')
109
126
  Article.make(:body => "spam #{'x'*User::MAX_SIZE_OF_A_MAIL_IN_CHARACTERS}",
110
127
  :published_at => Time.now)
128
+ Sunspot.commit
111
129
  end
112
130
  should "filter the long articles out, we do not want to send spams" do
113
131
  collected_articles = @user.collect_recent_articles do |article|
@@ -120,5 +138,17 @@ class UserTest < ActiveSupport::TestCase
120
138
  assert_did_not_send_email
121
139
  end
122
140
  end
141
+
142
+ context "on query augmenting partial" do
143
+ setup do
144
+ User::QUERY_AUGMENT_PARTIAL = '-dontwantthis'
145
+ @search_keyword = SearchKeyword.make(:user => @user)
146
+ Article.make(:body => "#{@search_keyword.query} dontwantthis", :published_at => Time.now)
147
+ Sunspot.commit
148
+ end
149
+ should "not find the article as it was excluded by query augmentation" do
150
+ assert @user.recent_articles_for_search_keyword(@search_keyword).empty?
151
+ end
152
+ end
123
153
  end
124
154
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solarsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gyorgy Frivolt
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-28 00:00:00 +01:00
12
+ date: 2010-03-01 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -179,13 +179,13 @@ files:
179
179
  - Rakefile
180
180
  - VERSION
181
181
  - app/controllers/article_controller.rb
182
- - app/controllers/article_statuses_controller.rb
182
+ - app/controllers/article_status_controller.rb
183
183
  - app/controllers/infosources_controller.rb
184
184
  - app/controllers/search_keywords_controller.rb
185
185
  - app/controllers/user_sessions_controller.rb
186
186
  - app/controllers/users_controller.rb
187
187
  - app/helpers/article_helper.rb
188
- - app/helpers/article_statuses_helper.rb
188
+ - app/helpers/article_status_helper.rb
189
189
  - app/helpers/infosources_helper.rb
190
190
  - app/helpers/layout_helper.rb
191
191
  - app/helpers/search_keywords_helper.rb
@@ -208,7 +208,7 @@ files:
208
208
  - app/views/article/_search_form.html.haml
209
209
  - app/views/article/search.html.haml
210
210
  - app/views/article/show.html.haml
211
- - app/views/article_statuses/index.html.haml
211
+ - app/views/article_status/index.html.haml
212
212
  - app/views/infosources/edit.html.haml
213
213
  - app/views/infosources/index.html.haml
214
214
  - app/views/infosources/new.html.haml
@@ -255,6 +255,7 @@ files:
255
255
  - test/content_scrapper.rb
256
256
  - test/database.yml
257
257
  - test/functional/article_controller_test.rb
258
+ - test/functional/article_status_controller_test.rb
258
259
  - test/functional/email_controller_test.rb
259
260
  - test/functional/infosources_controller_test.rb
260
261
  - test/functional/restricted_logged_exceptions_controller_test.rb
@@ -312,6 +313,7 @@ test_files:
312
313
  - test/functional/infosources_controller_test.rb
313
314
  - test/functional/article_controller_test.rb
314
315
  - test/functional/restricted_logged_exceptions_controller_test.rb
316
+ - test/functional/article_status_controller_test.rb
315
317
  - test/functional/user_sessions_controller_test.rb
316
318
  - test/functional/email_controller_test.rb
317
319
  - test/test_helper.rb
@@ -1,2 +0,0 @@
1
- module ArticleStatusesHelper
2
- end