picky-generators 1.5.4 → 2.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/picky-generators/generators/server/empty_unicorn.rb +8 -8
- data/lib/picky-generators/generators/server/unicorn.rb +8 -8
- data/prototypes/client/sinatra/Gemfile +1 -1
- data/prototypes/client/sinatra/Rakefile +5 -0
- data/prototypes/client/sinatra/app.rb +9 -8
- data/prototypes/client/sinatra/javascripts/picky.min.js +14 -14
- data/prototypes/client/sinatra/views/configure.haml +7 -15
- data/prototypes/server/shared_unicorn/Gemfile +6 -6
- data/prototypes/server/shared_unicorn/Rakefile +1 -11
- data/prototypes/server/shared_unicorn/script/console +2 -2
- data/prototypes/server/unicorn/app/application.rb +2 -6
- metadata +8 -7
@@ -1,7 +1,7 @@
|
|
1
1
|
module Picky
|
2
2
|
|
3
3
|
module Generators
|
4
|
-
|
4
|
+
|
5
5
|
module Server
|
6
6
|
|
7
7
|
# Generates a new empty Picky Unicorn Server.
|
@@ -10,11 +10,11 @@ module Picky
|
|
10
10
|
# > picky-generate unicorn_server my_lovely_unicorn
|
11
11
|
#
|
12
12
|
class EmptyUnicorn < Picky::Generators::Base
|
13
|
-
|
13
|
+
|
14
14
|
def initialize identifier, name, *args
|
15
15
|
super identifier, name, 'server/empty_unicorn', *args
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
#
|
19
19
|
#
|
20
20
|
def generate
|
@@ -27,14 +27,14 @@ module Picky
|
|
27
27
|
exclaim "Next steps:"
|
28
28
|
exclaim "1. cd #{name}"
|
29
29
|
exclaim "2. bundle install"
|
30
|
-
exclaim "3. rake
|
30
|
+
exclaim "3. rake todo # (optional) shows you where Picky needs input from you"
|
31
31
|
exclaim " # if you want to define your own search."
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Picky
|
2
2
|
|
3
3
|
module Generators
|
4
|
-
|
4
|
+
|
5
5
|
module Server
|
6
6
|
|
7
7
|
# Generates a new Picky Unicorn Server Example.
|
@@ -10,11 +10,11 @@ module Picky
|
|
10
10
|
# > picky-generate unicorn_server my_lovely_unicorn
|
11
11
|
#
|
12
12
|
class Unicorn < Picky::Generators::Base
|
13
|
-
|
13
|
+
|
14
14
|
def initialize identifier, name, *args
|
15
15
|
super identifier, name, 'server/unicorn', *args
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
#
|
19
19
|
#
|
20
20
|
def generate
|
@@ -29,14 +29,14 @@ module Picky
|
|
29
29
|
exclaim "2. bundle install"
|
30
30
|
exclaim "3. rake index"
|
31
31
|
exclaim "4. rake start"
|
32
|
-
exclaim "5. rake
|
32
|
+
exclaim "5. rake todo # (optional) shows you where Picky needs input from you"
|
33
33
|
exclaim " # if you want to define your own search."
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
end
|
@@ -8,10 +8,9 @@ require File.expand_path 'book', File.dirname(__FILE__)
|
|
8
8
|
|
9
9
|
set :haml, { :format => :html5 }
|
10
10
|
|
11
|
-
# Sets up
|
11
|
+
# Sets up a search instance to the server.
|
12
12
|
#
|
13
|
-
|
14
|
-
LiveBooks = Picky::Client::Live.new :host => 'localhost', :port => 8080, :path => '/books/live'
|
13
|
+
BookSearch = Picky::Client.new :host => 'localhost', :port => 8080, :path => '/books'
|
15
14
|
|
16
15
|
set :static, true
|
17
16
|
set :public, File.dirname(__FILE__)
|
@@ -31,11 +30,11 @@ get '/configure' do
|
|
31
30
|
haml :'/configure'
|
32
31
|
end
|
33
32
|
|
34
|
-
#
|
35
|
-
#
|
33
|
+
# You get the ids from the picky server and then
|
34
|
+
# populate the result with rendered models.
|
36
35
|
#
|
37
36
|
get '/search/full' do
|
38
|
-
results =
|
37
|
+
results = BookSearch.search params[:query], :ids => params[:ids], :offset => params[:offset]
|
39
38
|
results.extend Picky::Convenience
|
40
39
|
results.populate_with Book do |book|
|
41
40
|
book.to_s
|
@@ -52,10 +51,12 @@ get '/search/full' do
|
|
52
51
|
ActiveSupport::JSON.encode results
|
53
52
|
end
|
54
53
|
|
55
|
-
#
|
54
|
+
# Normally, you'd actually go directly to the search server without taking the detour.
|
55
|
+
#
|
56
|
+
# We don't parse/reencode the returned json string using search_unparsed.
|
56
57
|
#
|
57
58
|
get '/search/live' do
|
58
|
-
|
59
|
+
BookSearch.search_unparsed params[:query], :ids => params[:ids], :offset => params[:offset]
|
59
60
|
end
|
60
61
|
|
61
62
|
helpers do
|
@@ -1,17 +1,17 @@
|
|
1
1
|
Array.prototype.index=function(c){for(var i=0,g=this.length;i<g;i++)if(this[i]==c)return i;return null};Array.prototype.include=function(c){return this.index(c)!==null};Array.prototype.remove=function(c){this.splice(c,1);return this};var PickyI18n={};$(function(){PickyI18n.locale=$("html").attr("lang").split("-")[0]||"en"});
|
2
2
|
var dictionary={common:{join:{de:"und",fr:"et",it:"e",en:"and",ch:"und"},"with":{de:"mit",fr:"avec",it:"con",en:"with",ch:"mit"},of:{de:"von",fr:"de",it:"di",en:"of",ch:"vo"},to:{de:"bis",fr:"\u00e0",it:"alla",en:"to",ch:"bis"}},results:{addination:{more:{de:"Weitere Resultate",fr:"Autres r\u00e9sultats",it:"Altri risultati",en:"More results",ch:"Mee Resultaat"}},header:{de:"Ergebnisse",fr:"R\u00e9sultats",it:"Risultati",en:"Results",ch:"Erg\u00e4bnis"}}},t=function(c){for(var i=PickyI18n.locale||
|
3
|
-
"en",g=c.split(".").concat(i),d=dictionary,e=0,
|
4
|
-
function PickyData(c){var i=c.total,g=c.duration,d=c.offset;c=new Allocations(c.allocations||[]);this.total=i;this.duration=g;this.offset=d;this.allocations=c;this.isEmpty=function(){return i==0}};var PickyView=function(c,i){var g=i.showResultsLimit||10,d=$("#picky input.query"),e=$("#picky div.reset"),
|
5
|
-
this.text=
|
6
|
-
d.focus()}else{k.remove();p.render(h);$("body").animate({scrollTop:$("#picky div.results div.header:last").position().top-12},500)}};this.liveResultsCallback=function(h){v(w(h));q(h.total)};this.allocationChosen=function(h){h=h.data.query;d.val(h);c.allocationChosen(h)};this.addinationClicked=function(h){c.addinationClicked(
|
7
|
-
""||c.searchButtonClicked(
|
8
|
-
this.search=function(g,d,e,
|
9
|
-
180);clearInterval(j);var r=function(a,b){a=e(a,b)||a;i.fullResultsCallback(a);
|
3
|
+
"en",g=c.split(".").concat(i),d=dictionary,e=0,m=g.length;e<m;e++){d=d[g[e]];if(d==undefined){d="Translation missing: "+c+"."+i;break}}return d};function Allocation(c,i,g,d,e,m){var n=this;this.type=c;this.weight=i;this.count=g;this.combination=d;this.ids=e||[];this.entries=this.rendered=m||[];this.isType=function(s){return s==n.type}}function Allocations(c){this.allocations=[];for(var i=0,g=c.length;i<g;i++){var d=c[i];this.allocations.push(new Allocation(d[0],d[1],d[2],d[3],d[4],d[5]))}this.length=this.allocations.length;this.each=function(e){return $.each(this.allocations,e)}}
|
4
|
+
function PickyData(c){var i=c.total,g=c.duration,d=c.offset;c=new Allocations(c.allocations||[]);this.total=i;this.duration=g;this.offset=d;this.allocations=c;this.isEmpty=function(){return i==0}};var PickyView=function(c,i){var g=i.showResultsLimit||10,d=$("#picky input.query"),e=$("#picky div.reset"),m=$("#picky input.search_button"),n=$("#picky div.status"),s=$("#picky .dashboard"),u=$("#picky .results"),j=$("#picky .no_results"),k=new PickyAddination(this,u),r=new PickyAllocationsCloud(this,i),p=new PickyResultsRenderer(k,i),a=function(){e.fadeTo(166,1)},b=function(){r.hide();u.empty();j.hide()},f=function(h){d.val(h);e.fadeTo(166,0);v("empty");n.empty();b()},o=function(){return d.val()};
|
5
|
+
this.text=o;var q=function(h){n.text(h);h>0&&h<=5&&n.fadeTo("fast",0.5).fadeTo("fast",1)},w=function(h){if(h.isEmpty())return"none";if(h.total>g&&h.allocations.length>1)return"support";return"ok"},v=function(h){s.attr("class","dashboard "+h)};this.insert=function(h){d.val(h);d.select()};this.fullResultsCallback=function(h){v(w(h));if(h.isEmpty()){b();q(0);j.show();a()}else if(h.total>g&&h.allocations.length>1){b();a();r.show(h);q(h.total)}else if(h.offset==0){b();q(h.total);p.render(h);u.show();a();
|
6
|
+
d.focus()}else{k.remove();p.render(h);$("body").animate({scrollTop:$("#picky div.results div.header:last").position().top-12},500)}};this.liveResultsCallback=function(h){v(w(h));q(h.total)};this.allocationChosen=function(h){h=h.data.query;d.val(h);c.allocationChosen(h)};this.addinationClicked=function(h){c.addinationClicked(o(),h)};(function(){d.keyup(function(h){if(o()==""){f();c.searchTextCleared()}else{c.searchTextEntered(o(),h);a()}});n.click(function(){o()==""||c.searchButtonClicked(o())});m.click(function(){o()==
|
7
|
+
""||c.searchButtonClicked(o())});e.click(function(){f("");c.clearButtonClicked();d.focus()})})();d.focus()};var PickyBackend=function(c){var i=function(g,d,e,m){var n=m||{};n=$.extend({query:g,offset:e},m);$.getJSON(c,n,function(s){d&&d(new PickyData(s))})};this.search=function(g,d,e,m,n){i(g,function(s){d&&d(n,s)},e,m)}},LiveBackend=function(c){var i=new PickyBackend(c);this.search=function(g,d,e,m,n){n=n||{};latestRequestTimestamp=new Date;n.live=latestRequestTimestamp;m=$.extend({ids:0},m);i.search(g,function(s,u){if(!s.live||s.live==latestRequestTimestamp)d&&d(u)},e,m,n)}},FullBackend=function(c){var i=
|
8
|
+
new PickyBackend(c);this.search=function(g,d,e,m,n){n=n||{};latestRequestTimestamp=new Date;n.full=latestRequestTimestamp;m=$.extend({ids:20},m);i.search(g,function(s,u){if(!s.full||s.full==latestRequestTimestamp)d&&d(u)},e,m,n)}};var PickyController=function(c){var i=new PickyView(this,c),g=c.backends,d=c.before||function(){},e=c.success||function(){},m=c.after||function(){},n=function(a){return(a=a&&a.match(/q=([^&]+)/))&&unescape(a[1]||"")};this.extractQuery=n;var s=function(){var a=window.History&&window.History.getState();return n(a&&a.url)};this.lastQuery=s;var u=function(a,b){a=e(a,b)||a;i.liveResultsCallback(a);m(a,b)},j,k=function(){var a=i.text();d({});var b=g.live;b&&b.search(a,u,0,void 0);clearInterval(j)};j=setInterval(k,
|
9
|
+
180);clearInterval(j);var r=function(a,b){a=e(a,b)||a;i.fullResultsCallback(a);m(a,b)},p=function(a,b,f){f=f||{};b=b||0;clearInterval(j);if(a!=s()){var o="?q="+a;window.History&&window.History.getState()&&window.History.pushState&&window.History.pushState(null,null,o)}f=d(f,a,b)||f;(o=g.full)&&o.search(a,r,b,f)};this.insert=function(a,b){i.insert(a);b&&p(a)};this.clearButtonClicked=function(){clearInterval(j)};this.searchTextCleared=function(){clearInterval(j)};this.searchTextEntered=function(a,b){if($.inArray(b.keyCode,
|
10
10
|
[0,8,13,32,46,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90])>-1)if(b.keyCode==13)p(a);else{clearInterval(j);j=setInterval(k,180)}};this.searchButtonClicked=function(a){p(a)};this.allocationChosen=function(a){p(a)};this.addinationClicked=function(a,b){p(a,b.data.offset)}};var Localization={},PickyClient=function(c){Localization.qualifiers=c.qualifiers||{};Localization.explanations=c.explanations||{};Localization.choices=c.choices||{};Localization.explanation_delimiters={de:"und",fr:"et",it:"e",en:"and",ch:"und"};var i=c.backends;if(i){i.live||alert("Both a full and live backend must be provided.");i.full||alert("Both a full and live backend must be provided.")}else c.backends={live:c.live&&new LiveBackend(c.live)||alert("A live backend path must be provided."),full:c.full&&
|
11
|
-
new FullBackend(c.full)||alert("A live backend path must be provided.")};var g=c.controller&&new c.controller(c)||new PickyController(c);var d=this.insert=function(e,
|
12
|
-
"<strong>$1</strong>"),k].join(" ")},s=function(j,k){var r=Localization.explanation_delimiters[PickyI18n.locale],p=
|
13
|
-
return r};this.render=function(j){var k=$("#picky div.results");j.allocations.each(function(r,p){k.append(u(j,p)).append(p.entries.join("")).append(c.render(j));k.children("li").wrapAll(g)})}};function AllocationRenderer(c,i){function g(a){var b={},f={},
|
14
|
-
(r[f]=d(f));if($.type(v)==="string"){r[f]={format:v};v=r[f]}var h=1,z=v.format;$.each(a,function(x,y){var A=y[0],B=y[1];if(v.filter)B=v.filter(B);A=j[A]||A;if(w&&!(v&&v.ignoreSingle))return z=B+" ("+A+")";z=z.replace(RegExp("%"+h+"\\$s","g"),B);h+=1;return h});return z}function
|
15
|
-
for(a=b.length-1;a>=0;a--){x=b[a];if(x.length>0)break}x=x[x.length-1];p.include(x[0])||(x[1]+="...");return $.map(b,function(y){return e(y)})}function
|
16
|
-
"zipcode"];this.contract=g;this.rendered=e;this.groupify=
|
17
|
-
e.show()}else $.each(k,function(r,p){d.append(p)});return $("#search .allocations").show()};e.click(function(){e.hide();
|
11
|
+
new FullBackend(c.full)||alert("A live backend path must be provided.")};var g=c.controller&&new c.controller(c)||new PickyController(c);var d=this.insert=function(e,m){g.insert(e,m||true)};this.insertFromURL=function(e){if(e&&e!="")d(e);else(e=g.lastQuery())&&d(e)};window.History&&window.History.Adapter.bind(window,"statechange",function(){var e=window.History.getState();(e=g.extractQuery(e.url))&&d(e)})};var PickyAddination=function(c,i){this.remove=function(){i.find(".addination").remove()};this.render=function(g){var d=g.total,e;e=g.offset+20+0;var m=e+20;g=g.total;if(g<m)m=g;e={offset:e,start:e+1,end:m};if(e.offset<d){d=$("<div class='addination'>"+t("results.addination.more")+"</div>");d.bind("click",{offset:e.offset},c.addinationClicked);return d}else return""}};var PickyResultsRenderer=function(c,i){var g=i.wrapResults||'<ol class="results"></ol>',d=["street_number","zipcode"],e=function(j){var k=j[j.length-1];j=j.slice(0,j.length-1);if(j==[])j=[j];if(!d.include(k[0]))if(k[1].match(/[^\*~]$/))k[1]+="*";j.push(k);return j},m=function(j){for(var k=Localization.explanations&&Localization.explanations[PickyI18n.locale]||{},r=[],p,a=0,b=j.length;a<b;a++){p=j[a];var f=p[0];f=k[f]||f;r.push([f,p[1]])}return r},n=function(j,k){return[j.replace(/([\w\s\u00c4\u00e4\u00d6\u00f6\u00dc\u00fc\u00e9\u00e8\u00e0]+)/,
|
12
|
+
"<strong>$1</strong>"),k].join(" ")},s=function(j,k){var r=Localization.explanation_delimiters[PickyI18n.locale],p=m(e(k)),a="",b=[];p=$.map(p,function(f){var o=f[0];f=f[1];if(a==""||o==a){b.push(f);a=o}else{var q=n(a,b.join(" "));b=[];b.push(f);a=o;return q}});p.push(n(a,b.join(" ")));p=p.join(" "+r+" ");return'<span class="explanation">'+j+" "+p+"</span>"},u=function(j,k){var r='<div class="header">';r+=s(k.type,k.combination);if(j.offset>0)r+='<div class="tothetop"><a href="#" onclick="javascript:$(\'body\').animate({scrollTop: 0}, 500);">↑</a></div>';
|
13
|
+
return r};this.render=function(j){var k=$("#picky div.results");j.allocations.each(function(r,p){k.append(u(j,p)).append(p.entries.join("")).append(c.render(j));k.children("li").wrapAll(g)})}};function AllocationRenderer(c,i){function g(a){var b={},f={},o=[],q;q=0;for(l=a.length;q<l;q++){var w=a[q][0];if(w in b){b[w]=b[w]+" "+a[q][1];o.push(q)}else{b[w]=a[q][1];f[q]=w}}for(q in f)a[q][1]=b[f[q]];for(q=o.length-1;q>=0;q--)a.remove(o[q]);return a}function d(a){return $.map(a,function(b,f){return"%"+(f+1)+"$s"}).join(" ")}function e(a){if(a.length==0)return"";var b=a=g(a);b.sort(function(x,y){return x[0]<y[0]?-1:1});for(var f=[],o=0,q=b.length;o<q;o++)f.push(b[o][0]);var w=f.length==1,v=r[f]||
|
14
|
+
(r[f]=d(f));if($.type(v)==="string"){r[f]={format:v};v=r[f]}var h=1,z=v.format;$.each(a,function(x,y){var A=y[0],B=y[1];if(v.filter)B=v.filter(B);A=j[A]||A;if(w&&!(v&&v.ignoreSingle))return z=B+" ("+A+")";z=z.replace(RegExp("%"+h+"\\$s","g"),B);h+=1;return h});return z}function m(a){for(var b=[],f=0,o=k.length;f<o;f++)b.push([]);b.push([]);f=0;for(o=a.length;f<o;f++){for(var q=a[f],w=q[0],v=false,h=0,z=k.length;h<z;h++)if(k[h].include(w)){b[h].push(q);v=true;break}v||b[b.length-1].push(q)}var x;
|
15
|
+
for(a=b.length-1;a>=0;a--){x=b[a];if(x.length>0)break}x=x[x.length-1];p.include(x[0])||(x[1]+="...");return $.map(b,function(y){return e(y)})}function n(a){var b=[],f,o;for(o in a){f=a[o][0];f=u[f]||f;b[o]=f+":"+a[o][1]}return b.join(" ")}var s=PickyI18n.locale,u=Localization.qualifiers&&Localization.qualifiers[s]||{},j=Localization.explanations&&Localization.explanations[s]||{},k=i.groups||[],r=Localization.choices&&Localization.choices[s]||{};this.explanation=this.query=this.text="";var p=["street_number",
|
16
|
+
"zipcode"];this.contract=g;this.rendered=e;this.groupify=m;this.querify=n;this.render=function(a){var b=a.combination,f=a.count;a=n(b);b=m(b).join(" ");b=$('<li><div class="text">'+b+'</div><div class="count">'+f+"</div></li>");b.bind("click",{query:a},c);return b}};var PickyAllocationsCloud=function(c,i){var g=$("#picky .allocations"),d=g.find(".shown"),e=g.find(".more"),m=g.find(".hidden"),n=function(){g.hide()},s=new AllocationRenderer(function(k){n();c.allocationChosen(k)},i),u=function(k){var r=[];k.each(function(p,a){r.push(s.render(a))});return r},j=function(k){if(k.length==0)return $("#search .allocations").hide();d.empty();e.hide();m.empty().hide();if(k.length>3){$.each(k.slice(0,2),function(r,p){d.append(p)});$.each(k.slice(2),function(r,p){m.append(p)});
|
17
|
+
e.show()}else $.each(k,function(r,p){d.append(p)});return $("#search .allocations").show()};e.click(function(){e.hide();m.show()});this.hide=n;this.show=function(k){j(u(k.allocations));g.show()}};
|
@@ -27,22 +27,15 @@
|
|
27
27
|
%strong app.rb
|
28
28
|
and take a peek inside.
|
29
29
|
%p
|
30
|
-
First you need
|
31
|
-
%strong full
|
32
|
-
or a
|
33
|
-
%strong live search
|
34
|
-
depending on what you need (Full gets results with IDs, Live without and is used for updating the counter).
|
30
|
+
First you need a client instance.
|
35
31
|
%p
|
36
32
|
In the example, I called it
|
37
|
-
%strong
|
38
|
-
and
|
39
|
-
%strong LiveBooks
|
33
|
+
%strong BookSearch
|
40
34
|
respectively.
|
41
35
|
%code
|
42
36
|
%pre
|
43
37
|
:preserve
|
44
|
-
|
45
|
-
LiveBooks = Picky::Client::Live.new :host => 'localhost', :port => 8080, :path => '/books/live'
|
38
|
+
BookSearch = Picky::Client.new :host => 'localhost', :port => 8080, :path => '/books'
|
46
39
|
%p
|
47
40
|
Both clients offer the options:
|
48
41
|
%dl
|
@@ -61,7 +54,7 @@
|
|
61
54
|
%pre
|
62
55
|
:preserve
|
63
56
|
get '/search/full' do
|
64
|
-
results =
|
57
|
+
results = BookSearch.search params[:query], :ids => params[:ids], :offset => params[:offset]
|
65
58
|
results.extend Picky::Convenience
|
66
59
|
results.populate_with Book do |book|
|
67
60
|
book.to_s
|
@@ -73,7 +66,7 @@
|
|
73
66
|
%strong hash
|
74
67
|
with the results:
|
75
68
|
%code
|
76
|
-
%pre results =
|
69
|
+
%pre results = BookSearch.search params[:query], :ids => params[:ids], :offset => params[:offset]
|
77
70
|
%p
|
78
71
|
This part takes the
|
79
72
|
%strong hash
|
@@ -121,11 +114,10 @@
|
|
121
114
|
%code
|
122
115
|
%pre
|
123
116
|
:preserve
|
124
|
-
|
125
|
-
LiveBooks = Picky::Client::Live.new :host => 'localhost', :port => 8080, :path => '/books/live'
|
117
|
+
BookSearch = Picky::Client.new :host => 'localhost', :port => 8080, :path => '/books/full'
|
126
118
|
|
127
119
|
get '/search/full' do
|
128
|
-
results =
|
120
|
+
results = BookSearch.search params[:query], :ids => params[:ids], :offset => params[:offset]
|
129
121
|
|
130
122
|
results.extend Picky::Convenience
|
131
123
|
results.populate_with Book do |book|
|
@@ -2,17 +2,17 @@ source :gemcutter
|
|
2
2
|
|
3
3
|
# Gems required by Picky.
|
4
4
|
#
|
5
|
-
gem 'picky',
|
5
|
+
gem 'picky', '2.0.0.pre1'
|
6
6
|
gem 'rake'
|
7
7
|
gem 'bundler'
|
8
|
-
gem 'rack',
|
9
|
-
gem 'rack-mount',
|
10
|
-
gem 'text',
|
11
|
-
gem 'yajl-ruby',
|
8
|
+
gem 'rack', '~> 1.2.2'
|
9
|
+
gem 'rack-mount', '~> 0.6.13'
|
10
|
+
gem 'text', '~> 0.2.0'
|
11
|
+
gem 'yajl-ruby', '~> 0.8.1', :require => 'yajl'
|
12
12
|
|
13
13
|
# Should be optional, but isn't yet. Sorry.
|
14
14
|
#
|
15
|
-
gem 'activerecord',
|
15
|
+
gem 'activerecord', '~> 2.3.8', :require => 'active_record'
|
16
16
|
|
17
17
|
# Optional. Makes rack faster.
|
18
18
|
#
|
@@ -1,11 +1 @@
|
|
1
|
-
require 'picky-tasks'
|
2
|
-
|
3
|
-
desc "Finds where Picky still needs input from you."
|
4
|
-
task :todo do
|
5
|
-
if system "grep -e 'TO#{}DO.*' -n --color=always -R *"
|
6
|
-
puts "Picky needs a bit of input from you there. Thanks."
|
7
|
-
else
|
8
|
-
puts "Picky seems to be fine (no TO#{}DOs found)."
|
9
|
-
end
|
10
|
-
end
|
11
|
-
task :default => :todo
|
1
|
+
require 'picky-tasks'
|
@@ -28,7 +28,7 @@ puts "Copy the following line to do just that:"
|
|
28
28
|
puts "\x1b[1;30mLoader.load_application; Indexes.load_from_cache; nil\x1b[m"
|
29
29
|
puts ""
|
30
30
|
puts "Now you can for example create a query instance."
|
31
|
-
puts "\x1b[1;
|
31
|
+
puts "\x1b[1;30mbooks = Search.new(Indexes[:books]); nil\x1b[m"
|
32
32
|
puts "and search on it"
|
33
|
-
puts "\x1b[1;
|
33
|
+
puts "\x1b[1;30mbooks.search_with_text 'bla'\x1b[m"
|
34
34
|
exec "#{options[:irb]} #{libs} --simple-prompt"
|
@@ -37,13 +37,9 @@ class PickySearch < Application
|
|
37
37
|
partial: Partial::None.new # Partial substring searching on the year does not make
|
38
38
|
# much sense, neither does similarity.
|
39
39
|
|
40
|
-
|
40
|
+
options = { :weights => { [:title, :author] => +3, [:title] => +1 } } # +/- points for combinations.
|
41
41
|
|
42
|
-
|
43
|
-
# A Live query does return all that Full returns, except ids.
|
44
|
-
#
|
45
|
-
route %r{\A/books/full\Z} => Query::Full.new(books_index, query_options) # Routing is simple:
|
46
|
-
route %r{\A/books/live\Z} => Query::Live.new(books_index, query_options) # url_path_regexp => query
|
42
|
+
route %r{\A/books\Z} => Search.new(books_index, options)
|
47
43
|
|
48
44
|
# Note: You can pass a query multiple indexes and it will query in all of them.
|
49
45
|
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: picky-generators
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
version:
|
4
|
+
prerelease: 6
|
5
|
+
version: 2.0.0.pre1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Florian Hanke
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-03-
|
13
|
+
date: 2011-03-18 00:00:00 +01:00
|
14
14
|
default_executable: picky-generate
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
requirements:
|
33
33
|
- - ~>
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
35
|
+
version: 2.0.0.pre1
|
36
36
|
type: :runtime
|
37
37
|
version_requirements: *id002
|
38
38
|
- !ruby/object:Gem::Dependency
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
requirements:
|
44
44
|
- - ~>
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
46
|
+
version: 2.0.0.pre1
|
47
47
|
type: :runtime
|
48
48
|
version_requirements: *id003
|
49
49
|
description: Generators for Picky.
|
@@ -72,6 +72,7 @@ files:
|
|
72
72
|
- prototypes/client/sinatra/javascripts/jquery-1.5.0.min.js
|
73
73
|
- prototypes/client/sinatra/javascripts/picky.min.js
|
74
74
|
- prototypes/client/sinatra/library.csv
|
75
|
+
- prototypes/client/sinatra/Rakefile
|
75
76
|
- prototypes/client/sinatra/stylesheets/application.css
|
76
77
|
- prototypes/client/sinatra/stylesheets/picky.css
|
77
78
|
- prototypes/client/sinatra/views/configure.haml
|
@@ -113,9 +114,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
113
114
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
115
|
none: false
|
115
116
|
requirements:
|
116
|
-
- - "
|
117
|
+
- - ">"
|
117
118
|
- !ruby/object:Gem::Version
|
118
|
-
version:
|
119
|
+
version: 1.3.1
|
119
120
|
requirements: []
|
120
121
|
|
121
122
|
rubyforge_project: http://rubyforge.org/projects/picky
|