solarsearch 0.0.6
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/.gitignore +23 -0
- data/.specification +294 -0
- data/LICENSE +20 -0
- data/README.rdoc +17 -0
- data/Rakefile +76 -0
- data/Solarsearch.gemspec +176 -0
- data/VERSION +1 -0
- data/app/controllers/article_controller.rb +30 -0
- data/app/controllers/article_statuses_controller.rb +12 -0
- data/app/controllers/infosources_controller.rb +143 -0
- data/app/controllers/search_keywords_controller.rb +99 -0
- data/app/controllers/user_sessions_controller.rb +48 -0
- data/app/controllers/users_controller.rb +62 -0
- data/app/helpers/article_helper.rb +25 -0
- data/app/helpers/article_statuses_helper.rb +2 -0
- data/app/helpers/infosources_helper.rb +2 -0
- data/app/helpers/layout_helper.rb +22 -0
- data/app/helpers/search_keywords_helper.rb +2 -0
- data/app/helpers/site_helper.rb +2 -0
- data/app/helpers/user_sessions_helper.rb +2 -0
- data/app/helpers/users_helper.rb +2 -0
- data/app/models/article.rb +74 -0
- data/app/models/article_status.rb +20 -0
- data/app/models/infosource.rb +83 -0
- data/app/models/role.rb +2 -0
- data/app/models/roles_users.rb +2 -0
- data/app/models/search_keyword.rb +14 -0
- data/app/models/user.rb +132 -0
- data/app/models/user_mailer.rb +12 -0
- data/app/models/user_session.rb +2 -0
- data/config/locales/hu.yml +111 -0
- data/config/locales/sk.yml +111 -0
- data/init.rb +1 -0
- data/install.rb +1 -0
- data/lib/solarsearch.rb +9 -0
- data/lib/solarsearch/locales.rb +3 -0
- data/lib/solarsearch/routing.rb +31 -0
- data/rails/init.rb +1 -0
- data/solarsearch.gemspec +178 -0
- data/tasks/solarsearch_tasks.rake +4 -0
- data/test/blueprints.rb +34 -0
- data/test/blueprints/articles.rb +37 -0
- data/test/blueprints/infosources.rb +53 -0
- data/test/blueprints/infosources_files/pretty.html +17 -0
- data/test/blueprints/infosources_files/ugly.html +399 -0
- data/test/blueprints/search_keywords.rb +13 -0
- data/test/blueprints/users.rb +17 -0
- data/test/content_scrapper.rb +13 -0
- data/test/database.yml +7 -0
- data/test/functional/article_controller_test.rb +40 -0
- data/test/functional/email_controller_test.rb +9 -0
- data/test/functional/infosources_controller_test.rb +65 -0
- data/test/functional/restricted_logged_exceptions_controller_test.rb +38 -0
- data/test/functional/search_keywords_controller_test.rb +108 -0
- data/test/functional/user_sessions_controller_test.rb +39 -0
- data/test/functional/users_controller_test.rb +109 -0
- data/test/schema.rb +92 -0
- data/test/test_helper.rb +48 -0
- data/test/unit/article_test.rb +56 -0
- data/test/unit/helpers/article_helper_test.rb +20 -0
- data/test/unit/helpers/email_helper_test.rb +4 -0
- data/test/unit/helpers/user_sessions_helper_test.rb +4 -0
- data/test/unit/helpers/users_helper_test.rb +4 -0
- data/test/unit/infosource_test.rb +132 -0
- data/test/unit/role_test.rb +6 -0
- data/test/unit/roles_users_test.rb +6 -0
- data/test/unit/user_mailer_test.rb +24 -0
- data/test/unit/user_test.rb +103 -0
- data/uninstall.rb +1 -0
- metadata +297 -0
data/test/test_helper.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
ENV['RAILS_ENV'] = 'test'
|
2
|
+
ENV['RAILS_ROOT'] ||= "#{File.dirname(__FILE__)}/../../../.."
|
3
|
+
|
4
|
+
require File.expand_path("#{ENV['RAILS_ROOT']}/config/environment")
|
5
|
+
|
6
|
+
require 'test_help'
|
7
|
+
require 'authlogic/test_case'
|
8
|
+
require 'mocha'
|
9
|
+
require "#{File.dirname(__FILE__)}/blueprints"
|
10
|
+
|
11
|
+
require 'content_scrapper'
|
12
|
+
require 'content_scrapper/feedzirra'
|
13
|
+
ContentScrapper.create_new_default("#{File.dirname(__FILE__)}/content_scrapper.rb")
|
14
|
+
|
15
|
+
class ActiveSupport::TestCase
|
16
|
+
def login_as_test_user
|
17
|
+
post
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def load_schema
|
22
|
+
config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
|
23
|
+
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
|
24
|
+
db_adapter = ENV['DB']
|
25
|
+
|
26
|
+
# no db passed, try one of these fine config-free DBs before bombing.
|
27
|
+
db_adapter ||=
|
28
|
+
begin
|
29
|
+
require 'rubygems'
|
30
|
+
require 'sqlite'
|
31
|
+
'sqlite'
|
32
|
+
rescue MissingSourceFile
|
33
|
+
begin
|
34
|
+
require 'sqlite3'
|
35
|
+
'sqlite3'
|
36
|
+
rescue MissingSourceFile
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
if db_adapter.nil?
|
41
|
+
raise "No DB Adapter selected. Pass the DB= option to pick one, or install Sqlite or Sqlite3."
|
42
|
+
end
|
43
|
+
|
44
|
+
ActiveRecord::Base.establish_connection(config[db_adapter])
|
45
|
+
load(File.dirname(__FILE__) + "/schema.rb")
|
46
|
+
require File.dirname(__FILE__) + '/../rails/init.rb'
|
47
|
+
end
|
48
|
+
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ArticleTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
context "for sunspot" do
|
6
|
+
|
7
|
+
should "create valid article" do
|
8
|
+
assert_difference('Article.count') do
|
9
|
+
article = Article.make
|
10
|
+
assert article.valid?
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
should "create invalid article, the URL is invalid" do
|
15
|
+
article = Article.make_unsaved(:url => Sham.incorrect_url)
|
16
|
+
assert !article.valid?
|
17
|
+
end
|
18
|
+
|
19
|
+
should "create duplicate article, should fail as the guid is the same" do
|
20
|
+
article = Article.make
|
21
|
+
article_duplicate = Article.make_unsaved(:guid => article.guid)
|
22
|
+
assert !article_duplicate.valid?
|
23
|
+
end
|
24
|
+
|
25
|
+
should "modify valid article, should fail when the URL changed to invalid" do
|
26
|
+
article = Article.make
|
27
|
+
article.url = Sham.incorrect_url
|
28
|
+
assert !article.valid?
|
29
|
+
end
|
30
|
+
|
31
|
+
context "on indexing and searching central-european characters" do
|
32
|
+
setup do
|
33
|
+
Sunspot.remove_all!
|
34
|
+
10.times { Article.make }
|
35
|
+
[:accent_in_title, :accent_in_summary, :accent_in_body].each { |i| Article.make(i) }
|
36
|
+
Sunspot.commit
|
37
|
+
end
|
38
|
+
should "find articles with accents" do
|
39
|
+
search = Sunspot.search(Article) { keywords Sham.accented_word }
|
40
|
+
assert_equal 3, search.results.count
|
41
|
+
end
|
42
|
+
should "find articles with no accents" do
|
43
|
+
search = Sunspot.search(Article) { keywords Sham.unaccented_word }
|
44
|
+
assert_equal 3, search.results.count
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "on indexing characters prohibited in XML documents" do
|
49
|
+
setup { Sunspot.remove_all! }
|
50
|
+
should "not raise expcetion" do
|
51
|
+
assert_nothing_raised { Article.make(:with_corrupt_xml_chars) }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ArticleHelperTest < ActionView::TestCase
|
4
|
+
|
5
|
+
test "text shortening" do
|
6
|
+
text = 'This text here should remain. This still has to remain after shortening. But this should not.'
|
7
|
+
|
8
|
+
shortened_text = shorten_text(text, number_of_characters = 70, more_link = '..')
|
9
|
+
assert_equal 'This text here should remain. This still has to remain after shortening...', shortened_text
|
10
|
+
end
|
11
|
+
|
12
|
+
test "text shortening with nill or empty text" do
|
13
|
+
assert_equal '', shorten_text(nil)
|
14
|
+
assert_equal '', shorten_text('')
|
15
|
+
end
|
16
|
+
|
17
|
+
test "test shortener should return the same text if it short" do
|
18
|
+
assert_equal 'this is short', shorten_text('this is short', 20)
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'mocha'
|
4
|
+
|
5
|
+
class InfosourceTest < ActiveSupport::TestCase
|
6
|
+
|
7
|
+
test "create valid infosource" do
|
8
|
+
infosource = Infosource.make
|
9
|
+
assert infosource.valid?
|
10
|
+
end
|
11
|
+
|
12
|
+
test "should fail when the sourcename is not in the given range" do
|
13
|
+
infosource_1 = Infosource.make_unsaved(:sourcename => 'x' * (Infosource::MIN_SOURCENAME_SIZE - 1))
|
14
|
+
assert !infosource_1.valid?
|
15
|
+
infosource_2 = Infosource.make_unsaved(:sourcename => 'x' * (Infosource::MAX_SOURCENAME_SIZE + 1))
|
16
|
+
assert !infosource_2.valid?
|
17
|
+
end
|
18
|
+
|
19
|
+
test "should fail when infosource with incorrect value is created" do
|
20
|
+
infosource = Infosource.make_unsaved(:sourcefeed => Sham.incorrect_url)
|
21
|
+
assert !infosource.valid?
|
22
|
+
infosource.save
|
23
|
+
assert_nil Infosource.find_by_sourcename(infosource.sourcename)
|
24
|
+
end
|
25
|
+
|
26
|
+
test "should fail when duplicate infosource is created" do
|
27
|
+
infosource = Infosource.make
|
28
|
+
|
29
|
+
infosource_duplicate = Infosource.make_unsaved(:sourcename => infosource.sourcename,
|
30
|
+
:sourcefeed => infosource.sourcefeed)
|
31
|
+
|
32
|
+
assert !infosource_duplicate.valid?
|
33
|
+
end
|
34
|
+
|
35
|
+
test "should accept empty sourcefeed" do
|
36
|
+
infosource = Infosource.make(:sourcefeed => '')
|
37
|
+
assert infosource.valid?
|
38
|
+
assert_equal infosource, Infosource.find_by_sourcename(infosource.sourcename)
|
39
|
+
end
|
40
|
+
|
41
|
+
#TODO create blueprints for the feed parsers
|
42
|
+
test "fetch feeds for an infosource" do
|
43
|
+
entry_1 = FeedEntry.make
|
44
|
+
entry_2 = FeedEntry.make
|
45
|
+
entries = [entry_1, entry_2]
|
46
|
+
|
47
|
+
parser_1 = Feedzirra::Parser::RSS.new
|
48
|
+
parser_1.stubs(:entries).returns(entries)
|
49
|
+
infosource = Infosource.make
|
50
|
+
Feedzirra::Feed.expects(:fetch_and_parse).with(infosource.sourcefeed).returns(parser_1)
|
51
|
+
|
52
|
+
Kernel.expects(:open).never
|
53
|
+
|
54
|
+
assert_equal 2, infosource.fetch_source
|
55
|
+
assert_equal 2, Article.count
|
56
|
+
|
57
|
+
article = Article.find_by_title(entry_1.title)
|
58
|
+
[:title, :summary, [:body, :content], :url, [:guid, :id]].each do |attribute|
|
59
|
+
#FIXME [:published_at, :published], temporarily removed, donot pass dont know why yet
|
60
|
+
if attribute.class == Array
|
61
|
+
article_attr, entry_attr = attribute[0], attribute[1]
|
62
|
+
else
|
63
|
+
article_attr = entry_attr = attribute
|
64
|
+
end
|
65
|
+
assert_equal entry_1.send(entry_attr), article[article_attr], "#{entry_attr.to_s} differs"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
test "should not read feed if the feedsource is empty or nil" do
|
70
|
+
Feedzirra::Feed.expects(:fetch_and_parse).never
|
71
|
+
infosource = Infosource.make(:sourcefeed => '')
|
72
|
+
assert_nil infosource.fetch_source
|
73
|
+
end
|
74
|
+
|
75
|
+
test "update new entries of the infosource" do
|
76
|
+
entry_1 = FeedEntry.make
|
77
|
+
entry_2 = FeedEntry.make
|
78
|
+
entries_1 = [entry_1, entry_2]
|
79
|
+
|
80
|
+
entry_3 = FeedEntry.make
|
81
|
+
entries_2 = [entry_2, entry_3]
|
82
|
+
|
83
|
+
infosource = Infosource.make
|
84
|
+
|
85
|
+
parser_1 = Feedzirra::Parser::RSS.new
|
86
|
+
parser_1.stubs(:entries).returns(entries_1)
|
87
|
+
Feedzirra::Feed.expects(:fetch_and_parse).with(infosource.sourcefeed).returns(parser_1)
|
88
|
+
|
89
|
+
parser_2 = Feedzirra::Parser::RSS.new
|
90
|
+
parser_2.stubs(:entries).returns(entries_2)
|
91
|
+
parser_2.stubs(:updated?).returns(true)
|
92
|
+
Feedzirra::Feed.expects(:fetch_and_parse).with(infosource.sourcefeed).returns(parser_2)
|
93
|
+
|
94
|
+
Kernel.expects(:open).never
|
95
|
+
|
96
|
+
assert_equal 2, infosource.fetch_source
|
97
|
+
assert_equal 1, infosource.fetch_source
|
98
|
+
|
99
|
+
assert_equal 3, Article.count
|
100
|
+
end
|
101
|
+
|
102
|
+
test "should not fail when the rss feed in not accessible" do
|
103
|
+
infosource = Infosource.make
|
104
|
+
Feedzirra::Feed.expects(:fetch_and_parse).with(infosource.sourcefeed).returns(0)
|
105
|
+
assert_equal nil, infosource.fetch_source
|
106
|
+
end
|
107
|
+
|
108
|
+
test "should fetch all sources" do
|
109
|
+
feed_1 = [ FeedEntry.make ]
|
110
|
+
feed_2 = [ FeedEntry.make ]
|
111
|
+
feed_3 = [ FeedEntry.make ]
|
112
|
+
|
113
|
+
infosource_1 = Infosource.make
|
114
|
+
infosource_2 = Infosource.make(:sourcefeed => '')
|
115
|
+
infosource_3 = Infosource.make
|
116
|
+
|
117
|
+
parser_1 = Feedzirra::Parser::RSS.new
|
118
|
+
parser_1.stubs(:entries).returns(feed_1)
|
119
|
+
Feedzirra::Feed.expects(:fetch_and_parse).with(infosource_1.sourcefeed).returns(parser_1)
|
120
|
+
|
121
|
+
parser_2 = Feedzirra::Parser::RSS.new
|
122
|
+
parser_2.stubs(:entries).returns(feed_2)
|
123
|
+
Feedzirra::Feed.expects(:fetch_and_parse).with(infosource_2.sourcefeed).never #returns(parser_2)
|
124
|
+
|
125
|
+
parser_3 = Feedzirra::Parser::RSS.new
|
126
|
+
parser_3.stubs(:entries).returns(feed_3)
|
127
|
+
Feedzirra::Feed.expects(:fetch_and_parse).with(infosource_3.sourcefeed).returns(parser_3)
|
128
|
+
|
129
|
+
assert_equal 2, Infosource.fetch_all_sources
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
|
2
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
3
|
+
require 'user_mailer'
|
4
|
+
|
5
|
+
class UserMailerTest < ActionMailer::TestCase
|
6
|
+
CHARSET = "utf-8"
|
7
|
+
|
8
|
+
include ActionMailer::Quoting
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@user = User.make
|
12
|
+
@article = Article.make
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_newsupdate
|
16
|
+
newsupdate = UserMailer.create_newsupdate(@user, @article)
|
17
|
+
assert_equal 'fificium@gmail.com', newsupdate.from.first
|
18
|
+
assert_equal I18n.t(:usermailer_newsupdate_subject), newsupdate.subject
|
19
|
+
assert_equal @user.email, newsupdate.to.first
|
20
|
+
assert_match /#{@article.body}/, newsupdate.body
|
21
|
+
assert_match /#{@article.summary}/, newsupdate.body
|
22
|
+
assert_match /#{@article.title}/, newsupdate.body
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
#TODO test validations!!!!! email, username and others
|
4
|
+
|
5
|
+
class UserTest < ActiveSupport::TestCase
|
6
|
+
|
7
|
+
test "create valid user" do
|
8
|
+
user = User.make
|
9
|
+
assert user.valid?
|
10
|
+
assert_equal 1, User.count
|
11
|
+
end
|
12
|
+
|
13
|
+
test "create invalid user, the passwords differ" do
|
14
|
+
user = User.make_unsaved(:differing_password)
|
15
|
+
assert !user.valid?
|
16
|
+
end
|
17
|
+
|
18
|
+
test "create duplicate users" do
|
19
|
+
user = User.make
|
20
|
+
duplicate_user = User.make_unsaved(:username => user.username,
|
21
|
+
:email => user.email)
|
22
|
+
assert !duplicate_user.valid?
|
23
|
+
assert_equal 2, duplicate_user.errors.count
|
24
|
+
assert_equal 1, User.count
|
25
|
+
end
|
26
|
+
|
27
|
+
context "on search" do
|
28
|
+
setup do
|
29
|
+
Sunspot.remove_all!
|
30
|
+
@user = User.make
|
31
|
+
end
|
32
|
+
|
33
|
+
context "for results having a common item for two search queries" do
|
34
|
+
setup do
|
35
|
+
query1 = SearchKeyword.make(:user => @user)
|
36
|
+
query2 = SearchKeyword.make(:user => @user)
|
37
|
+
article1 = Article.make(:body => query1.query, :published_at => Time.now)
|
38
|
+
article2 = Article.make(:body => query2.query, :published_at => Time.now)
|
39
|
+
article3 = Article.make(:body => "#{query1.query} #{query2.query}",
|
40
|
+
:published_at => Time.now)
|
41
|
+
Sunspot.commit
|
42
|
+
end
|
43
|
+
should("find every article only once") { assert_equal 3, @user.collect_recent_articles.count }
|
44
|
+
end
|
45
|
+
|
46
|
+
context "for more results then can be collected for the user once" do
|
47
|
+
setup do
|
48
|
+
@search_keyword = SearchKeyword.make(:user => @user)
|
49
|
+
query = @search_keyword.query
|
50
|
+
(User::MAX_NUMBER_OF_ARTICLES_PER_NEWSUPDATE+1).times do |iteration|
|
51
|
+
Article.make(:body => query, :published_at => Time.now)
|
52
|
+
end
|
53
|
+
Sunspot.commit
|
54
|
+
end
|
55
|
+
should "not fetch more than allowed number of articles for a search keyword" do
|
56
|
+
assert_equal User::MAX_NUMBER_OF_ARTICLES_PER_NEWSUPDATE,
|
57
|
+
@user.recent_articles_for_search_keyword(@search_keyword).count
|
58
|
+
end
|
59
|
+
should "not collect more than allowed number of articles" do
|
60
|
+
assert_equal User::MAX_NUMBER_OF_ARTICLES_PER_NEWSUPDATE, @user.collect_recent_articles.count
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context "on articles with different publication times" do
|
65
|
+
setup do
|
66
|
+
@search_keyword = SearchKeyword.make(:user => @user)
|
67
|
+
query = @search_keyword.query
|
68
|
+
articles = []
|
69
|
+
User::MAX_NUMBER_OF_ARTICLES_PER_NEWSUPDATE.times do |iteration|
|
70
|
+
articles[iteration] = Article.make(:body => query,
|
71
|
+
:published_at => (Time.now - iteration.day))
|
72
|
+
end
|
73
|
+
end
|
74
|
+
should "sort the recent articles fetched for one source" do
|
75
|
+
recent_articles = @user.recent_articles_for_search_keyword(@search_keyword)
|
76
|
+
(recent_articles.count - 1).times do |item|
|
77
|
+
assert recent_articles[item].published_at > recent_articles[item+1].published_at ,
|
78
|
+
'the articles has to be sorted from newer to older'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
should "sort the collected list of recent articles" do
|
82
|
+
collected_articles = @user.collect_recent_articles
|
83
|
+
(collected_articles.count - 1).times do |item|
|
84
|
+
assert collected_articles[item].published_at > collected_articles[item+1].published_at ,
|
85
|
+
'the articles has to be sorted from newer to older'
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "on filtering spams using the article condition block" do
|
91
|
+
setup do
|
92
|
+
@search_keyword = SearchKeyword.make(:user => @user, :query => 'spam')
|
93
|
+
Article.make(:body => "spam #{'x'*User::MAX_SIZE_OF_A_MAIL_IN_CHARACTERS}", :published_at => Time.now)
|
94
|
+
end
|
95
|
+
should "filter the long articles out, we do not want to send spams" do
|
96
|
+
collected_articles = @user.collect_recent_articles do |article|
|
97
|
+
article.size <= User::MAX_SIZE_OF_A_MAIL_IN_CHARACTERS
|
98
|
+
end
|
99
|
+
assert_equal 0, collected_articles.count
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
data/uninstall.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# Uninstall hook code here
|
metadata
ADDED
@@ -0,0 +1,297 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: solarsearch
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.6
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gyorgy Frivolt
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-02-25 00:00:00 +01:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: thoughtbot-shoulda
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: content_scrapper
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.4
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: compass
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: "0"
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: haml
|
47
|
+
type: :runtime
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0"
|
54
|
+
version:
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: authlogic
|
57
|
+
type: :runtime
|
58
|
+
version_requirement:
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: "0"
|
64
|
+
version:
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: will_paginate
|
67
|
+
type: :runtime
|
68
|
+
version_requirement:
|
69
|
+
version_requirements: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: "0"
|
74
|
+
version:
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: whenever
|
77
|
+
type: :runtime
|
78
|
+
version_requirement:
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: "0"
|
84
|
+
version:
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: acl9
|
87
|
+
type: :runtime
|
88
|
+
version_requirement:
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: "0"
|
94
|
+
version:
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: sunspot
|
97
|
+
type: :runtime
|
98
|
+
version_requirement:
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: "0"
|
104
|
+
version:
|
105
|
+
- !ruby/object:Gem::Dependency
|
106
|
+
name: sunspot_rails
|
107
|
+
type: :runtime
|
108
|
+
version_requirement:
|
109
|
+
version_requirements: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: "0"
|
114
|
+
version:
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: RedCloth
|
117
|
+
type: :runtime
|
118
|
+
version_requirement:
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: "0"
|
124
|
+
version:
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: sanitize
|
127
|
+
type: :runtime
|
128
|
+
version_requirement:
|
129
|
+
version_requirements: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: "0"
|
134
|
+
version:
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: nokogiri
|
137
|
+
type: :runtime
|
138
|
+
version_requirement:
|
139
|
+
version_requirements: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - ">="
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: "0"
|
144
|
+
version:
|
145
|
+
- !ruby/object:Gem::Dependency
|
146
|
+
name: feedzirra
|
147
|
+
type: :runtime
|
148
|
+
version_requirement:
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: "0"
|
154
|
+
version:
|
155
|
+
- !ruby/object:Gem::Dependency
|
156
|
+
name: mysql
|
157
|
+
type: :runtime
|
158
|
+
version_requirement:
|
159
|
+
version_requirements: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - ">="
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: "0"
|
164
|
+
version:
|
165
|
+
description: 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.
|
166
|
+
email: gyorgy.frivolt@gmail.com
|
167
|
+
executables: []
|
168
|
+
|
169
|
+
extensions: []
|
170
|
+
|
171
|
+
extra_rdoc_files:
|
172
|
+
- LICENSE
|
173
|
+
- README.rdoc
|
174
|
+
files:
|
175
|
+
- .gitignore
|
176
|
+
- .specification
|
177
|
+
- LICENSE
|
178
|
+
- README.rdoc
|
179
|
+
- Rakefile
|
180
|
+
- Solarsearch.gemspec
|
181
|
+
- VERSION
|
182
|
+
- app/controllers/article_controller.rb
|
183
|
+
- app/controllers/article_statuses_controller.rb
|
184
|
+
- app/controllers/infosources_controller.rb
|
185
|
+
- app/controllers/search_keywords_controller.rb
|
186
|
+
- app/controllers/user_sessions_controller.rb
|
187
|
+
- app/controllers/users_controller.rb
|
188
|
+
- app/helpers/article_helper.rb
|
189
|
+
- app/helpers/article_statuses_helper.rb
|
190
|
+
- app/helpers/infosources_helper.rb
|
191
|
+
- app/helpers/layout_helper.rb
|
192
|
+
- app/helpers/search_keywords_helper.rb
|
193
|
+
- app/helpers/site_helper.rb
|
194
|
+
- app/helpers/user_sessions_helper.rb
|
195
|
+
- app/helpers/users_helper.rb
|
196
|
+
- app/models/article.rb
|
197
|
+
- app/models/article_status.rb
|
198
|
+
- app/models/infosource.rb
|
199
|
+
- app/models/role.rb
|
200
|
+
- app/models/roles_users.rb
|
201
|
+
- app/models/search_keyword.rb
|
202
|
+
- app/models/user.rb
|
203
|
+
- app/models/user_mailer.rb
|
204
|
+
- app/models/user_session.rb
|
205
|
+
- config/locales/hu.yml
|
206
|
+
- config/locales/sk.yml
|
207
|
+
- init.rb
|
208
|
+
- install.rb
|
209
|
+
- lib/solarsearch.rb
|
210
|
+
- lib/solarsearch/locales.rb
|
211
|
+
- lib/solarsearch/routing.rb
|
212
|
+
- rails/init.rb
|
213
|
+
- solarsearch.gemspec
|
214
|
+
- tasks/solarsearch_tasks.rake
|
215
|
+
- test/blueprints.rb
|
216
|
+
- test/blueprints/articles.rb
|
217
|
+
- test/blueprints/infosources.rb
|
218
|
+
- test/blueprints/infosources_files/pretty.html
|
219
|
+
- test/blueprints/infosources_files/ugly.html
|
220
|
+
- test/blueprints/search_keywords.rb
|
221
|
+
- test/blueprints/users.rb
|
222
|
+
- test/content_scrapper.rb
|
223
|
+
- test/database.yml
|
224
|
+
- test/functional/article_controller_test.rb
|
225
|
+
- test/functional/email_controller_test.rb
|
226
|
+
- test/functional/infosources_controller_test.rb
|
227
|
+
- test/functional/restricted_logged_exceptions_controller_test.rb
|
228
|
+
- test/functional/search_keywords_controller_test.rb
|
229
|
+
- test/functional/user_sessions_controller_test.rb
|
230
|
+
- test/functional/users_controller_test.rb
|
231
|
+
- test/schema.rb
|
232
|
+
- test/test_helper.rb
|
233
|
+
- test/unit/article_test.rb
|
234
|
+
- test/unit/helpers/article_helper_test.rb
|
235
|
+
- test/unit/helpers/email_helper_test.rb
|
236
|
+
- test/unit/helpers/user_sessions_helper_test.rb
|
237
|
+
- test/unit/helpers/users_helper_test.rb
|
238
|
+
- test/unit/infosource_test.rb
|
239
|
+
- test/unit/role_test.rb
|
240
|
+
- test/unit/roles_users_test.rb
|
241
|
+
- test/unit/user_mailer_test.rb
|
242
|
+
- test/unit/user_test.rb
|
243
|
+
- uninstall.rb
|
244
|
+
has_rdoc: true
|
245
|
+
homepage: http://github.com/fifigyuri/solarsearch
|
246
|
+
licenses: []
|
247
|
+
|
248
|
+
post_install_message:
|
249
|
+
rdoc_options:
|
250
|
+
- --charset=UTF-8
|
251
|
+
require_paths:
|
252
|
+
- lib
|
253
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - ">="
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: "0"
|
258
|
+
version:
|
259
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
260
|
+
requirements:
|
261
|
+
- - ">="
|
262
|
+
- !ruby/object:Gem::Version
|
263
|
+
version: "0"
|
264
|
+
version:
|
265
|
+
requirements: []
|
266
|
+
|
267
|
+
rubyforge_project:
|
268
|
+
rubygems_version: 1.3.5
|
269
|
+
signing_key:
|
270
|
+
specification_version: 3
|
271
|
+
summary: Searching made so simple that it is even a fun
|
272
|
+
test_files:
|
273
|
+
- test/blueprints/users.rb
|
274
|
+
- test/blueprints/articles.rb
|
275
|
+
- test/blueprints/search_keywords.rb
|
276
|
+
- test/blueprints/infosources.rb
|
277
|
+
- test/schema.rb
|
278
|
+
- test/functional/search_keywords_controller_test.rb
|
279
|
+
- test/functional/users_controller_test.rb
|
280
|
+
- test/functional/infosources_controller_test.rb
|
281
|
+
- test/functional/article_controller_test.rb
|
282
|
+
- test/functional/restricted_logged_exceptions_controller_test.rb
|
283
|
+
- test/functional/user_sessions_controller_test.rb
|
284
|
+
- test/functional/email_controller_test.rb
|
285
|
+
- test/test_helper.rb
|
286
|
+
- test/unit/user_test.rb
|
287
|
+
- test/unit/roles_users_test.rb
|
288
|
+
- test/unit/infosource_test.rb
|
289
|
+
- test/unit/role_test.rb
|
290
|
+
- test/unit/article_test.rb
|
291
|
+
- test/unit/user_mailer_test.rb
|
292
|
+
- test/unit/helpers/article_helper_test.rb
|
293
|
+
- test/unit/helpers/email_helper_test.rb
|
294
|
+
- test/unit/helpers/user_sessions_helper_test.rb
|
295
|
+
- test/unit/helpers/users_helper_test.rb
|
296
|
+
- test/content_scrapper.rb
|
297
|
+
- test/blueprints.rb
|