leander 0.2 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,8 +4,9 @@ require 'optparse'
4
4
  require 'optparse/time'
5
5
  require 'ostruct'
6
6
 
7
- require 'webpage.rb'
8
- require 'index.rb'
7
+ require 'leander/webpage.rb'
8
+ require 'leander/index.rb'
9
+
9
10
 
10
11
  class Bookmarker
11
12
  attr_accessor :index, :options
@@ -15,11 +16,15 @@ class Bookmarker
15
16
  @options = options
16
17
  end
17
18
 
18
- def operate(query)
19
+ def operate query
19
20
  if @options.delete
20
- @index.leander_remove(query)
21
+ @index.leander_remove query
21
22
  else
22
- @index.search(query, @options.show_html, @options.hide_url)
23
+ results = @index.search query
24
+ results.each do |r|
25
+ puts "#{r[:url].chomp} \t: #{r[:title]}" unless @options.hide_url
26
+ puts "#{r[:doc]}" if @options.show_html
27
+ end
23
28
  end
24
29
  end
25
30
 
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/ruby
2
+ require 'leander/leander-server.rb'
3
+
4
+
5
+ LeanderServer.run!
@@ -1,7 +1,7 @@
1
1
  require 'ferret'
2
2
  require 'highline/import'
3
3
 
4
- require 'webpage.rb'
4
+ require 'leander/webpage.rb'
5
5
 
6
6
  include Ferret
7
7
 
@@ -26,12 +26,17 @@ class BmIndex
26
26
  end
27
27
  end
28
28
 
29
- def search(query, show_html = false, hide_url = false)
29
+ def search(query)
30
+ output = []
30
31
  @index.search_each(query) do |id, score|
31
- doc = Nokogiri::HTML.parse(@index[id][:doc])
32
- puts @index[id][:url] + "\t" + doc.css('title').inner_text.strip unless hide_url
33
-
34
- if show_html then puts @index[id][:doc] end
32
+ doc = Nokogiri::HTML.parse(@index[id][:doc])
33
+ tmp = {}
34
+ tmp[:url] = index[id][:url]
35
+ tmp[:title] = doc.css('title').inner_text.strip
36
+ tmp[:doc] = doc
37
+ output << tmp
35
38
  end
39
+
40
+ return output
36
41
  end
37
42
  end
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'sinatra/base'
4
+ require 'haml'
5
+ require 'json'
6
+
7
+ require 'leander/index.rb'
8
+ require 'leander/webpage.rb'
9
+
10
+ class LeanderServer < Sinatra::Base
11
+
12
+ set :root, File.dirname(__FILE__)
13
+
14
+ helpers do
15
+ def niceify(url, title)
16
+ " <p>#{title}</p><a href=\"#{url}\">#{url}</a>"
17
+ end
18
+ end
19
+
20
+ get '/write/*' do
21
+ index = BmIndex.new
22
+ index.store_webpage Webpage.new params[:splat][0]
23
+ end
24
+
25
+
26
+ get '/search/:query' do
27
+ index = BmIndex.new
28
+ @search_results = index.search params[:query]
29
+ haml :search, :locals => {:result => @search_results }
30
+ end
31
+
32
+ get '/api/search/:query' do
33
+ content_type :json
34
+ index = BmIndex.new
35
+ @search_results = index.search params[:query].first
36
+ @search_results.map! { |r| {:url => r[:url], :title => r[:title]} }.flatten
37
+
38
+ output = {}
39
+ @search_results.each_with_index do |r, n|
40
+ output[n] = {:result => r}
41
+ end
42
+ output.to_json
43
+ end
44
+
45
+
46
+ get '/' do
47
+ haml '%div.title Hello world'
48
+ BmIndex.new
49
+ end
50
+
51
+ end
@@ -0,0 +1 @@
1
+ %p.results= result.map { |r| niceify(r[:url], r[:title]) }.join " "
@@ -1,3 +1,4 @@
1
+ require 'rubygems'
1
2
  require 'open-uri'
2
3
  require 'nokogiri'
3
4
 
@@ -9,9 +10,6 @@ class Webpage
9
10
  end
10
11
 
11
12
  def get_title
12
- puts @doc.class
13
- exit
14
13
  return @doc.css('title').content
15
14
  end
16
-
17
15
  end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leander
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.2"
4
+ hash: 13
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 3
9
+ version: "0.3"
5
10
  platform: ruby
6
11
  authors:
7
12
  - Sean Sorrell
@@ -9,51 +14,110 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-12-28 00:00:00 -05:00
17
+ date: 2010-05-30 00:00:00 -04:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: ferret
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
20
25
  requirements:
21
26
  - - ">="
22
27
  - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
23
31
  version: "0"
24
- version:
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: nokogiri
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
30
39
  requirements:
31
40
  - - ">="
32
41
  - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
33
45
  version: "0"
34
- version:
46
+ type: :runtime
47
+ version_requirements: *id002
35
48
  - !ruby/object:Gem::Dependency
36
49
  name: highline
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: sinatra
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
37
74
  type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
77
+ name: json
78
+ prerelease: false
79
+ requirement: &id005 !ruby/object:Gem::Requirement
80
+ none: false
40
81
  requirements:
41
82
  - - ">="
42
83
  - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
43
87
  version: "0"
44
- version:
88
+ type: :runtime
89
+ version_requirements: *id005
90
+ - !ruby/object:Gem::Dependency
91
+ name: haml
92
+ prerelease: false
93
+ requirement: &id006 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ hash: 3
99
+ segments:
100
+ - 0
101
+ version: "0"
102
+ type: :runtime
103
+ version_requirements: *id006
45
104
  description: leander is a command-line webpage clipper
46
105
  email: seansorrell@gmail.com
47
106
  executables:
48
107
  - leander
108
+ - leander-server
49
109
  extensions: []
50
110
 
51
111
  extra_rdoc_files: []
52
112
 
53
113
  files:
54
114
  - README.md
55
- - lib/index.rb
56
- - lib/webpage.rb
115
+ - lib/leander/index.rb
116
+ - lib/leander/webpage.rb
117
+ - lib/leander/leander-server.rb
118
+ - bin/leander
119
+ - bin/leander-server
120
+ - lib/leander/views/search.haml
57
121
  has_rdoc: true
58
122
  homepage: http://github.com/rudle/leander
59
123
  licenses: []
@@ -64,21 +128,27 @@ rdoc_options: []
64
128
  require_paths:
65
129
  - lib
66
130
  required_ruby_version: !ruby/object:Gem::Requirement
131
+ none: false
67
132
  requirements:
68
133
  - - ">="
69
134
  - !ruby/object:Gem::Version
135
+ hash: 3
136
+ segments:
137
+ - 0
70
138
  version: "0"
71
- version:
72
139
  required_rubygems_version: !ruby/object:Gem::Requirement
140
+ none: false
73
141
  requirements:
74
142
  - - ">="
75
143
  - !ruby/object:Gem::Version
144
+ hash: 3
145
+ segments:
146
+ - 0
76
147
  version: "0"
77
- version:
78
148
  requirements: []
79
149
 
80
150
  rubyforge_project:
81
- rubygems_version: 1.3.5
151
+ rubygems_version: 1.3.7
82
152
  signing_key:
83
153
  specification_version: 3
84
154
  summary: leander is a command-line webpage clipper