picky-generators 2.7.0 → 3.0.0.pre1
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/lib/picky-generators/generators/selector.rb +11 -5
- data/lib/picky-generators/generators/server/sinatra.rb +41 -0
- data/lib/picky-generators.rb +1 -0
- data/prototypes/server/empty_unicorn/app/application.rb +1 -1
- data/prototypes/server/shared_unicorn/Gemfile +2 -2
- data/prototypes/server/shared_unicorn/Rakefile +1 -1
- data/prototypes/server/shared_unicorn/app/logging.rb +3 -3
- data/prototypes/server/shared_unicorn/config.ru +2 -2
- data/prototypes/server/shared_unicorn/{unicorn.ru → unicorn.rb} +1 -1
- data/prototypes/server/sinatra/Gemfile +28 -0
- data/prototypes/server/sinatra/Rakefile +6 -0
- data/prototypes/server/sinatra/app.rb +48 -0
- data/prototypes/server/sinatra/config.ru +14 -0
- data/prototypes/server/sinatra/data/development/library.csv +540 -0
- data/prototypes/server/sinatra/data/production/library.csv +540 -0
- data/prototypes/server/sinatra/data/test/library.csv +540 -0
- data/prototypes/server/sinatra/log/README +0 -0
- data/prototypes/server/sinatra/log/unicorn.stderr.log +98 -0
- data/prototypes/server/sinatra/log/unicorn.stdout.log +62 -0
- data/prototypes/server/sinatra/spec/integration_spec.rb +28 -0
- data/prototypes/server/sinatra/spec/spec_helper.rb +5 -0
- data/prototypes/server/sinatra/tmp/pids/README +1 -0
- data/prototypes/server/sinatra/unicorn.rb +17 -0
- data/prototypes/server/unicorn/Rakefile +1 -1
- data/prototypes/server/unicorn/app/application.rb +7 -2
- data/prototypes/server/unicorn/spec/integration_spec.rb +2 -2
- data/prototypes/server/unicorn/spec/spec_helper.rb +2 -2
- data/spec/lib/picky-generators/generators/selector_spec.rb +3 -1
- data/spec/lib/picky-generators/generators/server/sinatra_spec.rb +35 -0
- metadata +25 -8
@@ -1,18 +1,24 @@
|
|
1
1
|
module Picky
|
2
|
-
|
2
|
+
|
3
3
|
module Generators
|
4
4
|
|
5
5
|
# Selects the right generator.
|
6
6
|
#
|
7
7
|
class Selector
|
8
|
-
|
8
|
+
|
9
9
|
attr_reader :types
|
10
10
|
|
11
|
+
# TODO All-in-one-server.
|
12
|
+
#
|
11
13
|
def initialize
|
12
14
|
@types = {
|
13
15
|
:sinatra_client => [Client::Sinatra, :sinatra_client_name],
|
16
|
+
:client => [Client::Sinatra, :client_name],
|
17
|
+
|
14
18
|
:unicorn_server => [Server::Unicorn, :unicorn_server_name],
|
15
|
-
:empty_unicorn_server => [Server::EmptyUnicorn, :empty_unicorn_server_name]
|
19
|
+
:empty_unicorn_server => [Server::EmptyUnicorn, :empty_unicorn_server_name],
|
20
|
+
:sinatra_server => [Server::Sinatra, :sinatra_server_name],
|
21
|
+
:server => [Server::Sinatra, :server_name]
|
16
22
|
}
|
17
23
|
end
|
18
24
|
|
@@ -41,7 +47,7 @@ module Picky
|
|
41
47
|
klass.new *args
|
42
48
|
end
|
43
49
|
end
|
44
|
-
|
50
|
+
|
45
51
|
end
|
46
|
-
|
52
|
+
|
47
53
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Picky
|
2
|
+
|
3
|
+
module Generators
|
4
|
+
|
5
|
+
module Server
|
6
|
+
|
7
|
+
# Generates a new Picky Sinatra/Unicorn Server Example.
|
8
|
+
#
|
9
|
+
# Example:
|
10
|
+
# > picky-generate sinatra_server my_lovely_unicorn
|
11
|
+
#
|
12
|
+
class Sinatra < Picky::Generators::Base
|
13
|
+
|
14
|
+
def initialize identifier, name, *args
|
15
|
+
super identifier, name, 'server/sinatra', *args
|
16
|
+
end
|
17
|
+
|
18
|
+
#
|
19
|
+
#
|
20
|
+
def generate
|
21
|
+
exclaim "Setting up Picky Sinatra Server \"#{name}\"."
|
22
|
+
create_target_directory
|
23
|
+
copy_all_files expand_prototype_path('server/sinatra')
|
24
|
+
exclaim "\"#{name}\" is a great project name! Have fun :)\n"
|
25
|
+
exclaim ""
|
26
|
+
exclaim "Next steps:"
|
27
|
+
exclaim "1. cd #{name}"
|
28
|
+
exclaim "2. bundle install"
|
29
|
+
exclaim "3. rake index"
|
30
|
+
exclaim "4. unicorn -c unicorn.rb"
|
31
|
+
exclaim "5. rake todo # (optional) shows you where Picky needs input from you"
|
32
|
+
exclaim " # if you want to define your own search."
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
data/lib/picky-generators.rb
CHANGED
@@ -4,5 +4,6 @@ require File.expand_path '../picky-generators/generators/base', __FILE__
|
|
4
4
|
require File.expand_path '../picky-generators/generators/client/sinatra', __FILE__
|
5
5
|
require File.expand_path '../picky-generators/generators/server/unicorn', __FILE__
|
6
6
|
require File.expand_path '../picky-generators/generators/server/empty_unicorn', __FILE__
|
7
|
+
require File.expand_path '../picky-generators/generators/server/sinatra', __FILE__
|
7
8
|
|
8
9
|
require File.expand_path '../picky-generators/generators/selector', __FILE__
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# Check the Wiki http://github.com/floere/picky/wiki for more options.
|
4
4
|
# Ask me or the google group if you have questions or specific requests.
|
5
5
|
#
|
6
|
-
class PickySearch < Application
|
6
|
+
class PickySearch < Picky::Application
|
7
7
|
|
8
8
|
# TODO Your search configuration here.
|
9
9
|
|
@@ -2,7 +2,7 @@ source :gemcutter
|
|
2
2
|
|
3
3
|
# Gems required by Picky.
|
4
4
|
#
|
5
|
-
gem 'picky', '
|
5
|
+
gem 'picky', '3.0.0.pre1'
|
6
6
|
gem 'rake'
|
7
7
|
gem 'bundler'
|
8
8
|
gem 'rack', '~> 1.2.2'
|
@@ -30,6 +30,6 @@ gem 'mysql'
|
|
30
30
|
# Integration testing needs the client.
|
31
31
|
#
|
32
32
|
group :test do
|
33
|
+
gem 'picky-client', '3.0.0.pre1'
|
33
34
|
gem 'rspec'
|
34
|
-
gem 'picky-client'
|
35
35
|
end
|
@@ -1 +1 @@
|
|
1
|
-
require 'picky
|
1
|
+
require 'picky/tasks'
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Standard logging.
|
2
2
|
#
|
3
3
|
require 'logger'
|
4
|
-
PickyLog = Loggers::Search.new ::Logger.new(File.expand_path('log/search.log', PICKY_ROOT))
|
4
|
+
PickyLog = Picky::Loggers::Search.new ::Logger.new(File.expand_path('log/search.log', PICKY_ROOT))
|
5
5
|
|
6
6
|
# Example with using the syslog logger.
|
7
7
|
# Falling back to the standard log if it isn't available.
|
@@ -11,10 +11,10 @@ PickyLog = Loggers::Search.new ::Logger.new(File.expand_path('log/search.log', P
|
|
11
11
|
# begin
|
12
12
|
# log_program_name = 'search/query'
|
13
13
|
# logger = SyslogLogger.new log_program_name
|
14
|
-
# PickyLog = Loggers::Search.new logger
|
14
|
+
# PickyLog = Picky::Loggers::Search.new logger
|
15
15
|
# puts "Logging on syslog #{log_program_name}."
|
16
16
|
# rescue StandardError
|
17
17
|
# puts "Could not connect to the syslog, using the normal log."
|
18
18
|
# require 'logger'
|
19
|
-
# PickyLog = Loggers::Search.new ::Logger.new(File.join(PICKY_ROOT, 'log/search.log'))
|
19
|
+
# PickyLog = Picky::Loggers::Search.new ::Logger.new(File.join(PICKY_ROOT, 'log/search.log'))
|
20
20
|
# end
|
@@ -14,11 +14,11 @@ require 'picky'
|
|
14
14
|
#
|
15
15
|
# (in that order).
|
16
16
|
#
|
17
|
-
Loader.load_application
|
17
|
+
Picky::Loader.load_application
|
18
18
|
|
19
19
|
# Load the indexes into the memory.
|
20
20
|
#
|
21
|
-
Indexes.
|
21
|
+
Picky::Indexes.reload
|
22
22
|
|
23
23
|
# TODO Decide if you want to use the Unicorn killing trick. (Good with large data sets)
|
24
24
|
#
|
@@ -0,0 +1,28 @@
|
|
1
|
+
source :gemcutter
|
2
|
+
|
3
|
+
# Gems required by Picky.
|
4
|
+
#
|
5
|
+
gem 'picky', '3.0.0.pre1'
|
6
|
+
gem 'bundler'
|
7
|
+
gem 'rake'
|
8
|
+
gem 'rack'
|
9
|
+
gem 'rack_fast_escape', '2009.06.24' # Optional.
|
10
|
+
gem 'text'
|
11
|
+
gem 'yajl-ruby', :require => 'yajl'
|
12
|
+
|
13
|
+
# Should be optional, but isn't yet.
|
14
|
+
#
|
15
|
+
gem 'activesupport', '~> 3.0', :require => 'active_support/core_ext'
|
16
|
+
gem 'activerecord', '~> 3.0', :require => 'active_record'
|
17
|
+
|
18
|
+
# Required by your project.
|
19
|
+
#
|
20
|
+
gem 'sinatra'
|
21
|
+
gem 'unicorn'
|
22
|
+
gem 'mysql' # Project specific.
|
23
|
+
gem 'redis' # Project specific.
|
24
|
+
|
25
|
+
group :test do
|
26
|
+
gem 'picky-client', '3.0.0.pre1'
|
27
|
+
gem 'rspec'
|
28
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
require 'picky'
|
3
|
+
|
4
|
+
class BookSearch < Sinatra::Application
|
5
|
+
|
6
|
+
# We do this so we don't have to type
|
7
|
+
# Picky:: in front of everything.
|
8
|
+
#
|
9
|
+
include Picky
|
10
|
+
|
11
|
+
# Define an index.
|
12
|
+
#
|
13
|
+
books_index = Indexes::Memory.new :books do
|
14
|
+
source Sources::CSV.new(:title, :author, :year, file: "data/#{PICKY_ENVIRONMENT}/library.csv")
|
15
|
+
indexing removes_characters: /[^a-zA-Z0-9\s\/\-\_\:\"\&\.]/i,
|
16
|
+
stopwords: /\b(and|the|of|it|in|for)\b/i,
|
17
|
+
splits_text_on: /[\s\/\-\_\:\"\&\/]/
|
18
|
+
category :title,
|
19
|
+
similarity: Similarity::DoubleMetaphone.new(3),
|
20
|
+
partial: Partial::Substring.new(from: 1) # Default is from: -3.
|
21
|
+
category :author, partial: Partial::Substring.new(from: 1)
|
22
|
+
category :year, partial: Partial::None.new
|
23
|
+
end
|
24
|
+
|
25
|
+
# Index and load on USR1 signal.
|
26
|
+
#
|
27
|
+
Signal.trap('USR1') do
|
28
|
+
books_index.reindex # kill -USR1 <pid>
|
29
|
+
end
|
30
|
+
|
31
|
+
# Define a search over the books index.
|
32
|
+
#
|
33
|
+
search = Search.new(books_index) do
|
34
|
+
searching removes_characters: /[^a-zA-Z0-9\s\/\-\_\&\.\"\~\*\:\,]/i, # Picky needs control chars *"~:, to pass through.
|
35
|
+
stopwords: /\b(and|the|of|it|in|for)\b/i,
|
36
|
+
splits_text_on: /[\s\/\-\&]+/,
|
37
|
+
substitutes_characters_with: CharacterSubstituters::WestEuropean.new # Normalizes special user input, Ä -> Ae, ñ -> n etc.
|
38
|
+
boost [:title, :author] => +3, [:title] => +1
|
39
|
+
end
|
40
|
+
|
41
|
+
# Route /books to the books search.
|
42
|
+
#
|
43
|
+
get '/books' do
|
44
|
+
results = search.search_with_text params[:query], params[:ids] || 20, params[:offset] || 0
|
45
|
+
results.to_json
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path '../app', __FILE__
|
2
|
+
|
3
|
+
# Load all indexes.
|
4
|
+
#
|
5
|
+
Picky::Indexes.reload
|
6
|
+
|
7
|
+
# Use Harakiri middleware to kill unicorn child after X requests.
|
8
|
+
#
|
9
|
+
# See http://vimeo.com/12614970 for more info.
|
10
|
+
#
|
11
|
+
# Rack::Harakiri.after = 1000
|
12
|
+
# use Rack::Harakiri
|
13
|
+
|
14
|
+
run BookSearch.new
|