picky-generators 4.12.1 → 4.12.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/lib/picky-generators/generators/all_in_one/sinatra.rb +14 -16
- data/lib/picky-generators/generators/base.rb +19 -0
- data/lib/picky-generators/generators/client/sinatra.rb +13 -13
- data/lib/picky-generators/generators/server/sinatra.rb +13 -13
- data/prototypes/all_in_one/sinatra/app.rb +6 -75
- data/prototypes/all_in_one/sinatra/views/search.haml +6 -7
- data/prototypes/client/sinatra/app.rb +0 -8
- data/prototypes/client/sinatra/views/search.haml +6 -7
- data/prototypes/server/sinatra/app.rb +4 -55
- data/prototypes/shared/server/books_index.rb +39 -0
- data/prototypes/shared/server/books_search.rb +16 -0
- metadata +8 -6
@@ -18,22 +18,20 @@ module Picky
|
|
18
18
|
#
|
19
19
|
#
|
20
20
|
def generate
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
exclaim "6. rake todo # (optional) shows you where Picky needs input from you"
|
36
|
-
exclaim " # if you want to define your own search."
|
21
|
+
generate_for "Sinatra Client/Server",
|
22
|
+
[
|
23
|
+
'shared/server',
|
24
|
+
'shared/both',
|
25
|
+
'shared/client'
|
26
|
+
],
|
27
|
+
[
|
28
|
+
"cd #{name}",
|
29
|
+
"bundle install",
|
30
|
+
"rake index",
|
31
|
+
"unicorn -c unicorn.rb",
|
32
|
+
"open http://localhost:8080/",
|
33
|
+
"rake todo # (optional) Shows you where Picky needs input from you."
|
34
|
+
]
|
37
35
|
end
|
38
36
|
|
39
37
|
end
|
@@ -117,6 +117,25 @@ module Picky
|
|
117
117
|
puts something
|
118
118
|
end
|
119
119
|
|
120
|
+
def generate_for type, prototype_paths, steps
|
121
|
+
exclaim "Setting up Picky #{type} \"#{name}\"."
|
122
|
+
|
123
|
+
create_target_directory
|
124
|
+
copy_all_files
|
125
|
+
|
126
|
+
prototype_paths.each do |path|
|
127
|
+
copy_all_files expand_prototype_path(path)
|
128
|
+
end
|
129
|
+
|
130
|
+
exclaim "\"#{name}\" is a great project name! Have fun :)\n"
|
131
|
+
exclaim ""
|
132
|
+
exclaim "Next steps:"
|
133
|
+
|
134
|
+
steps.each.with_index do |step, i|
|
135
|
+
exclaim "#{i+1}. #{step}"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
120
139
|
end
|
121
140
|
|
122
141
|
end
|
@@ -18,19 +18,19 @@ module Picky
|
|
18
18
|
#
|
19
19
|
#
|
20
20
|
def generate
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
21
|
+
generate_for "Sinatra Client",
|
22
|
+
[
|
23
|
+
'shared/both',
|
24
|
+
'shared/client'
|
25
|
+
],
|
26
|
+
[
|
27
|
+
"cd #{name}",
|
28
|
+
"bundle install",
|
29
|
+
"rake index",
|
30
|
+
"unicorn -p 3000 # (optional) Or use your favorite web server.",
|
31
|
+
"open http://localhost:3000/",
|
32
|
+
"rake todo # (optional) Shows you where Picky needs input from you."
|
33
|
+
]
|
34
34
|
end
|
35
35
|
|
36
36
|
end
|
@@ -18,19 +18,19 @@ module Picky
|
|
18
18
|
#
|
19
19
|
#
|
20
20
|
def generate
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
21
|
+
generate_for "Sinatra Server",
|
22
|
+
[
|
23
|
+
'shared/server',
|
24
|
+
'shared/both'
|
25
|
+
],
|
26
|
+
[
|
27
|
+
"cd #{name}",
|
28
|
+
"bundle install",
|
29
|
+
"rake index",
|
30
|
+
"unicorn -c unicorn.rb",
|
31
|
+
"curl http://localhost:8080/books?query=turing",
|
32
|
+
"rake todo # (optional) Shows you where Picky needs input from you."
|
33
|
+
]
|
34
34
|
end
|
35
35
|
|
36
36
|
end
|
@@ -6,9 +6,10 @@ require 'haml'
|
|
6
6
|
require 'csv'
|
7
7
|
require 'picky'
|
8
8
|
require 'picky-client'
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
require_relative 'book'
|
10
|
+
require_relative 'logging'
|
11
|
+
require_relative 'books_index'
|
12
|
+
require_relative 'books_search'
|
12
13
|
|
13
14
|
# This app shows how to integrate the Picky server directly
|
14
15
|
# inside a web app. However, if you really need performance
|
@@ -16,68 +17,6 @@ require File.expand_path '../logging', __FILE__
|
|
16
17
|
#
|
17
18
|
class BookSearch < Sinatra::Application
|
18
19
|
|
19
|
-
# We do this so we don't have to type
|
20
|
-
# Picky:: in front of everything.
|
21
|
-
#
|
22
|
-
include Picky
|
23
|
-
|
24
|
-
|
25
|
-
# Server.
|
26
|
-
#
|
27
|
-
|
28
|
-
# Data source.
|
29
|
-
#
|
30
|
-
class Books
|
31
|
-
|
32
|
-
def initialize
|
33
|
-
@csv = CSV.new File.open(File.expand_path("../data/#{PICKY_ENVIRONMENT}/library.csv", __FILE__))
|
34
|
-
end
|
35
|
-
|
36
|
-
def each
|
37
|
-
instance = Struct.new :id, :title, :author, :year
|
38
|
-
@csv.each do |row|
|
39
|
-
yield instance.new *row[0..3]
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
# Define an index.
|
46
|
-
#
|
47
|
-
books_index = Index.new :books do
|
48
|
-
source { Books.new }
|
49
|
-
indexing removes_characters: /[^a-z0-9\s\/\-\_\:\"\&\.]/i,
|
50
|
-
stopwords: /\b(and|the|of|it|in|for)\b/i,
|
51
|
-
splits_text_on: /[\s\/\-\_\:\"\&\.]/
|
52
|
-
category :title,
|
53
|
-
similarity: Similarity::DoubleMetaphone.new(3),
|
54
|
-
partial: Partial::Substring.new(from: 1) # Default is from: -3.
|
55
|
-
category :author, partial: Partial::Substring.new(from: 1)
|
56
|
-
category :year, partial: Partial::None.new
|
57
|
-
end
|
58
|
-
|
59
|
-
# Index and load on USR1 signal.
|
60
|
-
#
|
61
|
-
Signal.trap('USR1') do
|
62
|
-
books_index.reindex # kill -USR1 <pid>
|
63
|
-
end
|
64
|
-
|
65
|
-
# Define a search over the books index.
|
66
|
-
#
|
67
|
-
books = Search.new books_index do
|
68
|
-
searching substitutes_characters_with: CharacterSubstituters::WestEuropean.new, # Normalizes special user input, Ä -> Ae, ñ -> n etc.
|
69
|
-
removes_characters: /[^\p{L}\p{N}\s\/\-\_\&\.\"\~\*\:\,]/i, # Picky needs control chars *"~:, to pass through.
|
70
|
-
stopwords: /\b(and|the|of|it|in|for)\b/i,
|
71
|
-
splits_text_on: /[\s\/\-\&]+/
|
72
|
-
|
73
|
-
boost [:title, :author] => +3,
|
74
|
-
[:title] => +1
|
75
|
-
end
|
76
|
-
|
77
|
-
|
78
|
-
# Client.
|
79
|
-
#
|
80
|
-
|
81
20
|
set :static, true
|
82
21
|
set :public_folder, File.dirname(__FILE__)
|
83
22
|
set :views, File.expand_path('../views', __FILE__)
|
@@ -97,7 +36,7 @@ class BookSearch < Sinatra::Application
|
|
97
36
|
# populate the result hash with rendered models.
|
98
37
|
#
|
99
38
|
get '/search/full' do
|
100
|
-
results =
|
39
|
+
results = BooksSearch.search params[:query], params[:ids] || 20, params[:offset] || 0
|
101
40
|
Picky.logger.info results
|
102
41
|
results = results.to_hash
|
103
42
|
results.extend Picky::Convenience
|
@@ -119,16 +58,8 @@ class BookSearch < Sinatra::Application
|
|
119
58
|
# Updates the search count while the user is typing.
|
120
59
|
#
|
121
60
|
get '/search/live' do
|
122
|
-
results =
|
61
|
+
results = BooksSearch.search params[:query], params[:ids] || 20, params[:offset] || 0
|
123
62
|
results.to_json
|
124
63
|
end
|
125
64
|
|
126
|
-
helpers do
|
127
|
-
|
128
|
-
def js path
|
129
|
-
"<script src='javascripts/#{path}.js' type='text/javascript'></script>"
|
130
|
-
end
|
131
|
-
|
132
|
-
end
|
133
|
-
|
134
65
|
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
!!!
|
2
2
|
%html{ :lang => 'en' }
|
3
3
|
%head
|
4
|
-
%link{:href => "stylesheets/application.css", :media => "screen", :rel => "stylesheet", :type => "text/css"}/
|
5
|
-
%link{:href => "stylesheets/picky.css", :media => "screen", :rel => "stylesheet", :type => "text/css"}/
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
%link{ :href => "stylesheets/application.css", :media => "screen", :rel => "stylesheet", :type => "text/css" }/
|
5
|
+
%link{ :href => "stylesheets/picky.css", :media => "screen", :rel => "stylesheet", :type => "text/css" }/
|
6
|
+
%script{ :src => 'javascripts/jquery-1.5.0.min.js', :type => 'text/javascript' }
|
7
|
+
%script{ :src => 'javascripts/history.min.js', :type => 'text/javascript' }
|
8
|
+
%script{ :src => 'javascripts/history.adapter.jquery.min.js', :type => 'text/javascript' }
|
9
|
+
%script{ :src => 'javascripts/picky.min.js', :type => 'text/javascript' }
|
11
10
|
%body
|
12
11
|
%hgroup
|
13
12
|
/ Replace these headers with your code
|
@@ -1,13 +1,12 @@
|
|
1
1
|
!!!
|
2
2
|
%html{ :lang => 'en' }
|
3
3
|
%head
|
4
|
-
%link{:href => "stylesheets/application.css", :media => "screen", :rel => "stylesheet", :type => "text/css"}/
|
5
|
-
%link{:href => "stylesheets/picky.css", :media => "screen", :rel => "stylesheet", :type => "text/css"}/
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
%link{ :href => "stylesheets/application.css", :media => "screen", :rel => "stylesheet", :type => "text/css" }/
|
5
|
+
%link{ :href => "stylesheets/picky.css", :media => "screen", :rel => "stylesheet", :type => "text/css" }/
|
6
|
+
%script{ :src => 'javascripts/jquery-1.5.0.min.js', :type => 'text/javascript' }
|
7
|
+
%script{ :src => 'javascripts/history.min.js', :type => 'text/javascript' }
|
8
|
+
%script{ :src => 'javascripts/history.adapter.jquery.min.js', :type => 'text/javascript' }
|
9
|
+
%script{ :src => 'javascripts/picky.min.js', :type => 'text/javascript' }
|
11
10
|
%body
|
12
11
|
%hgroup
|
13
12
|
/ Replace these headers with your code
|
@@ -3,67 +3,16 @@
|
|
3
3
|
require 'sinatra/base'
|
4
4
|
require 'csv'
|
5
5
|
require 'picky'
|
6
|
-
|
6
|
+
require_relative 'logging'
|
7
|
+
require_relative 'books_index'
|
8
|
+
require_relative 'books_search'
|
7
9
|
|
8
10
|
class BookSearch < Sinatra::Application
|
9
11
|
|
10
|
-
# We do this so we don't have to type
|
11
|
-
# Picky:: in front of everything.
|
12
|
-
#
|
13
|
-
include Picky
|
14
|
-
|
15
|
-
# Data source.
|
16
|
-
#
|
17
|
-
class Books
|
18
|
-
|
19
|
-
def initialize
|
20
|
-
@csv = CSV.new File.open(File.expand_path("../data/#{PICKY_ENVIRONMENT}/library.csv", __FILE__))
|
21
|
-
end
|
22
|
-
|
23
|
-
def each
|
24
|
-
instance = Struct.new :id, :title, :author, :year
|
25
|
-
@csv.each do |row|
|
26
|
-
yield instance.new *row[0..3]
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
# Define an index.
|
33
|
-
#
|
34
|
-
books_index = Index.new :books do
|
35
|
-
source { Books.new }
|
36
|
-
indexing removes_characters: /[^a-z0-9\s\/\-\_\:\"\&\.]/i,
|
37
|
-
stopwords: /\b(and|the|of|it|in|for)\b/i,
|
38
|
-
splits_text_on: /[\s\/\-\_\:\"\&\.]/
|
39
|
-
category :title,
|
40
|
-
similarity: Similarity::DoubleMetaphone.new(3),
|
41
|
-
partial: Partial::Substring.new(from: 1) # Default is from: -3.
|
42
|
-
category :author, partial: Partial::Substring.new(from: 1)
|
43
|
-
category :year, partial: Partial::None.new
|
44
|
-
end
|
45
|
-
|
46
|
-
# Index and load on USR1 signal.
|
47
|
-
#
|
48
|
-
Signal.trap('USR1') do
|
49
|
-
books_index.reindex # kill -USR1 <pid>
|
50
|
-
end
|
51
|
-
|
52
|
-
# Define a search over the books index.
|
53
|
-
#
|
54
|
-
books = Search.new books_index do
|
55
|
-
searching substitutes_characters_with: CharacterSubstituters::WestEuropean.new, # Normalizes special user input, Ä -> Ae, ñ -> n etc.
|
56
|
-
removes_characters: /[^\p{L}\p{N}\s\/\-\_\&\.\"\~\*\:\,]/i, # Picky needs control chars *"~:, to pass through.
|
57
|
-
stopwords: /\b(and|the|of|it|in|for)\b/i,
|
58
|
-
splits_text_on: /[\s\/\-\&]+/
|
59
|
-
boost [:title, :author] => +3,
|
60
|
-
[:title] => +1
|
61
|
-
end
|
62
|
-
|
63
12
|
# Route /books to the books search and log when searching.
|
64
13
|
#
|
65
14
|
get '/books' do
|
66
|
-
results =
|
15
|
+
results = BooksSearch.search params[:query], params[:ids] || 20, params[:offset] || 0
|
67
16
|
Picky.logger.info results
|
68
17
|
results.to_json
|
69
18
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
|
4
|
+
# Data source.
|
5
|
+
#
|
6
|
+
class Books
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@csv = CSV.new File.open(File.expand_path("../data/#{PICKY_ENVIRONMENT}/library.csv", __FILE__))
|
10
|
+
end
|
11
|
+
|
12
|
+
def each
|
13
|
+
instance = Struct.new :id, :title, :author, :year
|
14
|
+
@csv.each do |row|
|
15
|
+
yield instance.new *row[0..3]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
# Define an index.
|
22
|
+
#
|
23
|
+
BooksIndex = Picky::Index.new :books do
|
24
|
+
source { Books.new }
|
25
|
+
indexing removes_characters: /[^a-z0-9\s\/\-\_\:\"\&\.]/i,
|
26
|
+
stopwords: /\b(and|the|of|it|in|for)\b/i,
|
27
|
+
splits_text_on: /[\s\/\-\_\:\"\&\.]/
|
28
|
+
category :title,
|
29
|
+
similarity: Picky::Similarity::DoubleMetaphone.new(3),
|
30
|
+
partial: Picky::Partial::Substring.new(from: 1) # Default is from: -3.
|
31
|
+
category :author, partial: Picky::Partial::Substring.new(from: 1)
|
32
|
+
category :year, partial: Picky::Partial::None.new
|
33
|
+
end
|
34
|
+
|
35
|
+
# Index and load on USR1 signal.
|
36
|
+
#
|
37
|
+
Signal.trap('USR1') do
|
38
|
+
BooksIndex.reindex # kill -USR1 <pid>
|
39
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
|
4
|
+
# Define a search over the books index.
|
5
|
+
#
|
6
|
+
BooksSearch = Picky::Search.new BooksIndex do
|
7
|
+
# Normalizes special user input, Ä -> Ae, ñ -> n etc.
|
8
|
+
searching substitutes_characters_with: Picky::CharacterSubstituters::WestEuropean.new,
|
9
|
+
# Picky needs control chars *"~:, to pass through.
|
10
|
+
removes_characters: /[^\p{L}\p{N}\s\/\-\_\&\.\"\~\*\:\,]/i,
|
11
|
+
stopwords: /\b(and|the|of|it|in|for)\b/i,
|
12
|
+
splits_text_on: /[\s\/\-\&]+/
|
13
|
+
|
14
|
+
boost [:title, :author] => +3,
|
15
|
+
[:title] => +1
|
16
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: picky-generators
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.12.
|
4
|
+
version: 4.12.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 4.12.
|
37
|
+
version: 4.12.2
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 4.12.
|
45
|
+
version: 4.12.2
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: picky-client
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 4.12.
|
53
|
+
version: 4.12.2
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 4.12.
|
61
|
+
version: 4.12.2
|
62
62
|
description: Generators for Picky.
|
63
63
|
email: florian.hanke+picky-generators@gmail.com
|
64
64
|
executables:
|
@@ -110,6 +110,8 @@ files:
|
|
110
110
|
- prototypes/shared/both/data/production/library.csv
|
111
111
|
- prototypes/shared/both/data/test/library.csv
|
112
112
|
- prototypes/shared/client/book.rb
|
113
|
+
- prototypes/shared/server/books_index.rb
|
114
|
+
- prototypes/shared/server/books_search.rb
|
113
115
|
- prototypes/shared/server/config.ru
|
114
116
|
- prototypes/shared/server/logging.rb
|
115
117
|
- prototypes/shared/server/spec/spec_helper.rb
|