gren 0.2.4 → 0.3.0

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.
@@ -0,0 +1,10 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper.rb')
2
+ require File.join(File.dirname(__FILE__), '../lib/grenweb/cli.rb')
3
+ require File.join(File.dirname(__FILE__), '../lib/grenweb/searcher.rb')
4
+ require File.join(File.dirname(__FILE__), '../lib/grenweb/viewer.rb')
5
+
6
+ class TestGrenwebCli < Test::Unit::TestCase
7
+ def test_print_default_output
8
+ # assert_match(/To update this executable/, @stdout)
9
+ end
10
+ end
@@ -0,0 +1,40 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
3
+ require File.join(File.dirname(__FILE__), "../lib/grenweb/html_renderer.rb")
4
+
5
+ class TestGrenwebHTMLRendeler < Test::Unit::TestCase
6
+ include Grenweb
7
+
8
+ def setup
9
+ end
10
+
11
+ def test_pagination_line
12
+ assert_equal("<span class='pagination-link'><a href='?page=1'>test</a></span>\n", HTMLRendeler.pagination_link(1, "test"))
13
+ end
14
+
15
+ def test_search_summary
16
+ assert_equal(HTMLRendeler.search_summary(10, 500, 10..20, 0.00893),
17
+ <<-EOS)
18
+ <div class='search-summary'>
19
+ <span class="keyword">10</span>の検索結果:
20
+ <span class="total-entries">500</span>件中
21
+ <span class="display-range">10 - 20</span>件(0.00893秒)
22
+ </div>
23
+ EOS
24
+ end
25
+
26
+ def test_match_strong
27
+ assert_equal(HTMLRendeler.match_strong("This is line.", [nil, nil]), "This is line.")
28
+ end
29
+
30
+ def test_search_box
31
+ assert_equal(HTMLRendeler.search_box('test must'), <<-EOF)
32
+ <form method="post" action="/::search">
33
+ <p>
34
+ <input name="query" type="text" size="60" value="test must" />
35
+ <input type="submit" value="検索" />
36
+ </p>
37
+ </form>
38
+ EOF
39
+ end
40
+ end
@@ -0,0 +1,54 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2010/10/21
7
+
8
+ require File.join(File.dirname(__FILE__), 'test_helper')
9
+ require File.join(File.dirname(__FILE__), '../lib/grenweb/query')
10
+
11
+ class TestGrenWebQuery < Test::Unit::TestCase
12
+ include Grenweb
13
+ include Rack::Utils
14
+
15
+ def test_query
16
+ q = create_query("test fire beam")
17
+ assert_equal q.keywords, ['test', 'fire', 'beam']
18
+ assert_equal q.packages, []
19
+ assert_equal q.fpaths, []
20
+ assert_equal q.suffixs, []
21
+ assert_equal q.escape_html, 'test fire beam'
22
+
23
+ q = create_query("test fire beam f:testfile1")
24
+ assert_equal q.keywords, ['test', 'fire', 'beam']
25
+ assert_equal q.packages, []
26
+ assert_equal q.fpaths, ['testfile1']
27
+ assert_equal q.suffixs, []
28
+
29
+ q = create_query("test fire beam f:testfile1 filepath:dir32")
30
+ assert_equal q.keywords, ['test', 'fire', 'beam']
31
+ assert_equal q.packages, []
32
+ assert_equal q.fpaths, ['dir32', 'testfile1']
33
+ assert_equal q.suffixs, []
34
+
35
+ q = create_query("package:gren test fire beam f:testfile1 filepath:dir32 s:rb p:test suffix:pl")
36
+ assert_equal q.keywords, ['test', 'fire', 'beam']
37
+ assert_equal q.packages, ['gren', 'test']
38
+ assert_equal q.fpaths, ['dir32', 'testfile1']
39
+ assert_equal q.suffixs, ['pl', 'rb']
40
+
41
+ q = create_query("&p")
42
+ assert_equal q.escape_html, '&amp;p'
43
+
44
+ q = create_query("int &p")
45
+ assert_equal q.escape_html, 'int &amp;p'
46
+
47
+ q = create_query('"def update"')
48
+ assert_equal q.keywords, ['def update']
49
+ end
50
+
51
+ def create_query(query)
52
+ Query.new(Rack::Request.new({"PATH_INFO"=>"/#{escape(query)}/"}))
53
+ end
54
+ end
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2010/10/21
7
+
8
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
9
+ require File.join(File.dirname(__FILE__), "../lib/grenweb/searcher.rb")
10
+ require 'rack/mock'
11
+
12
+ class TestGrenwebSearcher < Test::Unit::TestCase
13
+ def setup
14
+ @app = Grenweb::Searcher.new
15
+ @mr = Rack::MockRequest.new(@app)
16
+ end
17
+
18
+ def test_get
19
+ res = nil
20
+ assert_nothing_raised('なんか失敗した') { res = @mr.get('/', :lint => true) }
21
+ assert_not_nil res, 'レスポンス来てない'
22
+ assert_equal 200, res.status, 'ステータスコードが変'
23
+ assert_equal 'text/html; charset=UTF-8', res['Content-Type'], 'Content-Typeが変'
24
+ #puts res.body
25
+ end
26
+
27
+ def test_post
28
+ res = nil
29
+ assert_nothing_raised('なんか失敗した') { res = @mr.post('/', :lint => true) }
30
+ assert_not_nil res, 'レスポンス来てない'
31
+ assert_equal 302, res.status, 'ステータスコードが変'
32
+ assert_equal 'text/html; charset=UTF-8', res['Content-Type'], 'Content-Typeが変'
33
+ #puts res.body
34
+ end
35
+ end
@@ -1,4 +1,6 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+ require File.join(File.dirname(__FILE__), "../lib/common/util.rb")
3
+ require File.join(File.dirname(__FILE__), "../lib/common/grensnip.rb")
2
4
 
3
5
  class TestStringSnip < Test::Unit::TestCase
4
6
  def setup
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 2
8
- - 4
9
- version: 0.2.4
7
+ - 3
8
+ - 0
9
+ version: 0.3.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - ongaeshi
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-10 00:00:00 +09:00
17
+ date: 2010-11-02 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -46,9 +46,37 @@ dependencies:
46
46
  type: :runtime
47
47
  version_requirements: *id002
48
48
  - !ruby/object:Gem::Dependency
49
- name: rubyforge
49
+ name: rack
50
50
  prerelease: false
51
51
  requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 1
57
+ - 2
58
+ - 1
59
+ version: 1.2.1
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: launchy
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 0
71
+ - 3
72
+ - 7
73
+ version: 0.3.7
74
+ type: :runtime
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
77
+ name: rubyforge
78
+ prerelease: false
79
+ requirement: &id005 !ruby/object:Gem::Requirement
52
80
  requirements:
53
81
  - - ">="
54
82
  - !ruby/object:Gem::Version
@@ -58,11 +86,11 @@ dependencies:
58
86
  - 4
59
87
  version: 2.0.4
60
88
  type: :development
61
- version_requirements: *id003
89
+ version_requirements: *id005
62
90
  - !ruby/object:Gem::Dependency
63
91
  name: hoe
64
92
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
93
+ requirement: &id006 !ruby/object:Gem::Requirement
66
94
  requirements:
67
95
  - - ">="
68
96
  - !ruby/object:Gem::Version
@@ -72,13 +100,14 @@ dependencies:
72
100
  - 1
73
101
  version: 2.6.1
74
102
  type: :development
75
- version_requirements: *id004
103
+ version_requirements: *id006
76
104
  description: gren is a next grep tool.
77
105
  email:
78
106
  - ongaeshi0621@gmail.com
79
107
  executables:
80
108
  - gren
81
109
  - grendb
110
+ - grenweb
82
111
  - mkgrendb
83
112
  extensions: []
84
113
 
@@ -97,6 +126,7 @@ files:
97
126
  - Rakefile
98
127
  - bin/gren
99
128
  - bin/grendb
129
+ - bin/grenweb
100
130
  - bin/mkgrendb
101
131
  - lib/common/display_util.rb
102
132
  - lib/common/grenfiletest.rb
@@ -108,8 +138,20 @@ files:
108
138
  - lib/findgrep/result.rb
109
139
  - lib/gren.rb
110
140
  - lib/gren/cli.rb
111
- - lib/gren/findgrep.rb
112
141
  - lib/grendb/cli.rb
142
+ - lib/grenweb/cli.rb
143
+ - lib/grenweb/database.rb
144
+ - lib/grenweb/grenweb.ru
145
+ - lib/grenweb/grep.rb
146
+ - lib/grenweb/help.rb
147
+ - lib/grenweb/home.rb
148
+ - lib/grenweb/html_renderer.rb
149
+ - lib/grenweb/public/css/gren.css
150
+ - lib/grenweb/public/images/gren-icon-mini.png
151
+ - lib/grenweb/public/images/gren-icon.png
152
+ - lib/grenweb/query.rb
153
+ - lib/grenweb/searcher.rb
154
+ - lib/grenweb/viewer.rb
113
155
  - lib/mkgrendb/cli.rb
114
156
  - lib/mkgrendb/mkgrendb.rb
115
157
  - rake_rdoc_custom.rb
@@ -117,11 +159,12 @@ files:
117
159
  - script/destroy
118
160
  - script/generate
119
161
  - test/test_gren.rb
120
- - test/test_gren_cli.rb
121
162
  - test/test_gren_util.rb
122
- - test/test_grendb_cli.rb
163
+ - test/test_grenweb_cli.rb
164
+ - test/test_grenweb_html_renderer.rb
165
+ - test/test_grenweb_query.rb
166
+ - test/test_grenweb_searcher.rb
123
167
  - test/test_helper.rb
124
- - test/test_mkgrendb_cli.rb
125
168
  - test/test_string_snip.rb
126
169
  has_rdoc: true
127
170
  homepage: http://ongaeshi.github.com/gren
@@ -156,9 +199,10 @@ specification_version: 3
156
199
  summary: gren is a next grep tool.
157
200
  test_files:
158
201
  - test/test_gren.rb
159
- - test/test_gren_cli.rb
160
202
  - test/test_gren_util.rb
161
- - test/test_grendb_cli.rb
203
+ - test/test_grenweb_cli.rb
204
+ - test/test_grenweb_html_renderer.rb
205
+ - test/test_grenweb_query.rb
206
+ - test/test_grenweb_searcher.rb
162
207
  - test/test_helper.rb
163
- - test/test_mkgrendb_cli.rb
164
208
  - test/test_string_snip.rb
data/lib/gren/findgrep.rb DELETED
@@ -1,215 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- require 'find'
3
- require File.join(File.dirname(__FILE__), 'result')
4
- require 'rubygems'
5
- require 'termcolor'
6
-
7
- module Gren
8
- class FindGrep
9
- IGNORE_FILE = /(\A#.*#\Z)|(~\Z)|(\A\.#)/
10
- IGNORE_DIR = /(\A\.svn\Z)|(\A\.git\Z)|(\ACVS\Z)/
11
-
12
- Option = Struct.new(:directory,
13
- :depth,
14
- :ignoreCase,
15
- :colorHighlight,
16
- :isSilent,
17
- :debugMode,
18
- :filePatterns,
19
- :ignoreFiles,
20
- :ignoreDirs)
21
-
22
- def initialize(patterns, option)
23
- @option = option
24
- @patternRegexps = strs2regs(patterns, @option.ignoreCase)
25
- @filePatterns = strs2regs(option.filePatterns)
26
- @ignoreFiles = strs2regs(option.ignoreFiles)
27
- @ignoreDirs = strs2regs(option.ignoreDirs)
28
- @result = Result.new(option.directory)
29
- end
30
-
31
- def strs2regs(strs, ignore = false)
32
- regs = []
33
-
34
- strs.each do |v|
35
- option = 0
36
- option |= Regexp::IGNORECASE if (ignore)
37
- regs << Regexp.new(v, option)
38
- end
39
-
40
- regs
41
- end
42
-
43
- def searchAndPrint(stdout)
44
- searchAndPrintIN(stdout, @option.directory, 0)
45
-
46
- @result.time_stop
47
-
48
- unless (@option.isSilent)
49
- if (@option.debugMode)
50
- stdout.puts
51
- stdout.puts "--- search --------"
52
- print_fpaths stdout, @result.search_files
53
- stdout.puts "--- match --------"
54
- print_fpaths stdout, @result.match_files
55
- stdout.puts "--- ignore-file --------"
56
- print_fpaths stdout, @result.ignore_files
57
- stdout.puts "--- ignore-dir --------"
58
- print_fpaths stdout, @result.prune_dirs
59
- stdout.puts "--- unreadable --------"
60
- print_fpaths stdout, @result.unreadable_files
61
- end
62
-
63
- unless (@option.colorHighlight)
64
- stdout.puts
65
- else
66
- stdout.puts TermColor.parse("<7>------------------------------------------------------------</7>")
67
- end
68
-
69
- @result.print(stdout)
70
- end
71
- end
72
-
73
- def searchAndPrintIN(stdout, dir, depth)
74
- if (@option.depth != -1 && depth > @option.depth)
75
- return
76
- end
77
-
78
- Dir.foreach(dir) do |name|
79
- next if (name == '.' || name == '..')
80
-
81
- fpath = File.join(dir,name)
82
- fpath_disp = fpath.gsub(/^.\//, "")
83
-
84
- # 除外ディレクトリならばパス
85
- if ignoreDir?(fpath)
86
- @result.prune_dirs << fpath_disp if (@option.debugMode)
87
- next;
88
- end
89
-
90
- # 読み込み不可ならばパス
91
- unless FileTest.readable?(fpath)
92
- @result.unreadable_files << fpath_disp if (@option.debugMode)
93
- next
94
- end
95
-
96
- # ファイルならば中身を探索、ディレクトリならば再帰
97
- case File.ftype(fpath)
98
- when "directory"
99
- searchAndPrintIN(stdout, fpath, depth + 1)
100
- when "file"
101
- searchFile(stdout, fpath, fpath_disp)
102
- end
103
- end
104
- end
105
- private :searchAndPrintIN
106
-
107
- def print_fpaths(stdout, data)
108
- stdout.print data.join("\n")
109
- stdout.puts if data.count > 0
110
- stdout.puts "total: #{data.count}"
111
- stdout.puts
112
- end
113
- private :print_fpaths
114
-
115
- def ignoreDir?(fpath)
116
- FileTest.directory?(fpath) &&
117
- (IGNORE_DIR.match(File.basename(fpath)) || ignoreDirUser?(fpath))
118
- end
119
- private :ignoreDir?
120
-
121
- def ignoreDirUser?(fpath)
122
- @ignoreDirs.any? {|v| v.match File.basename(fpath) }
123
- end
124
- private :ignoreDirUser?
125
-
126
- def ignoreFile?(fpath)
127
- !correctFileUser?(fpath) ||
128
- IGNORE_FILE.match(File.basename(fpath)) ||
129
- ignoreFileUser?(fpath) ||
130
- binary?(fpath)
131
- end
132
- private :ignoreFile?
133
-
134
- def correctFileUser?(fpath)
135
- @filePatterns.empty? ||
136
- @filePatterns.any? {|v| v.match File.basename(fpath) }
137
- end
138
- private :correctFileUser?
139
-
140
- def ignoreFileUser?(fpath)
141
- @ignoreFiles.any? {|v| v.match File.basename(fpath) }
142
- end
143
- private :ignoreFileUser?
144
-
145
- def binary?(file)
146
- s = File.read(file, 1024) or return false
147
- return s.index("\x00")
148
- end
149
-
150
- def searchFile(stdout, fpath, fpath_disp)
151
- @result.count += 1
152
- @result.size += FileTest.size(fpath)
153
-
154
- # 除外ファイル
155
- if ignoreFile?(fpath)
156
- @result.ignore_files << fpath_disp if (@option.debugMode)
157
- return
158
- end
159
-
160
- @result.search_count += 1
161
- @result.search_size += FileTest.size(fpath)
162
-
163
- # 検索本体
164
- @result.search_files << fpath_disp if (@option.debugMode)
165
-
166
- open(fpath, "r") { |file|
167
- match_file = false
168
- file.each() { |line|
169
- line.chomp!
170
-
171
- result, match_datas = match?(line)
172
-
173
- if ( result )
174
- unless (@option.colorHighlight)
175
- stdout.puts "#{fpath_disp}:#{file.lineno}:#{line}"
176
- else
177
- header = "#{fpath_disp}:#{file.lineno}"
178
-
179
- begin
180
- stdout.puts TermColor.parse("<34>#{header}</34>:") + coloring(line, match_datas)
181
- rescue REXML::ParseException
182
- stdout.puts header + line
183
- end
184
- end
185
-
186
- unless match_file
187
- @result.match_file_count += 1
188
- @result.match_files << fpath_disp if (@option.debugMode)
189
- match_file = true
190
- end
191
-
192
- @result.match_count += 1
193
- end
194
- }
195
- }
196
- end
197
- private :searchFile
198
-
199
- def match?(line)
200
- match_datas = []
201
- @patternRegexps.each {|v| match_datas << v.match(line)}
202
- return match_datas.all?, match_datas
203
- end
204
- private :match?
205
-
206
- def coloring(line, match_datas)
207
- match_datas.each do |m|
208
- line = line.split(m[0]).join(TermColor.parse("<42>#{m[0]}</42>"))
209
- end
210
- line
211
- end
212
- private :coloring
213
-
214
- end
215
- end