tidtools 0.0.2 → 0.0.3

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/History.txt CHANGED
@@ -1,4 +1,13 @@
1
+ === 0.0.3 xxxx-xx-xx
2
+
3
+ * -cオプションを追加(結果を圧縮して表示する)
4
+
5
+ * 引数に複数の正規表現を渡して、and検索を可能に
6
+
7
+ * -mオプションを正式に実装(-m [line, tiddle, tweet])
8
+
1
9
  === 0.0.1 2010-04-23
2
10
 
3
11
  * 1 major enhancement:
4
12
  * Initial release
13
+
data/bin/tidgrep CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: utf-8 -*-
2
3
  #
3
4
  # Created on 2010-4-23.
4
5
  # Copyright (c) 2010. All rights reserved.
@@ -7,4 +8,8 @@ require 'rubygems'
7
8
  require File.expand_path(File.dirname(__FILE__) + "/../lib/tidtools")
8
9
  require "tidgrep/cli"
9
10
 
11
+ # バージョン番号
12
+ Version = "0.0.3"
13
+
14
+ # コマンドの実行
10
15
  Tidgrep::CLI.execute(STDOUT, ARGV)
data/lib/tidgrep/cli.rb CHANGED
@@ -1,90 +1,252 @@
1
+ # -*- coding: utf-8 -*-
1
2
  require File.join(File.dirname(__FILE__), '../tidtools/tiddle')
2
3
  require 'optparse'
3
4
 
4
5
  module Tidgrep
5
- class CLI
6
- def self.isValidOption(file_name, title, keyword)
7
- return false if !file_name
8
- return title || keyword
9
- end
6
+ # 圧縮表示時のパラメータ
7
+ MATCH_LINE_COMP_NUM = 5
10
8
 
11
- def self.execute(stdout, arguments=[])
12
- title = nil
13
- regexp_option = 0
14
- file_name = ENV['TIDGREP_PATH']
15
- report = false
16
- match_rule = "grep"
9
+ MATCH_ONLY_TITLE_COMP_NUM = 5
10
+
11
+ MATCH_TIDDLE_LINE_NUM = 3
12
+ MATCH_TIDDLE_COMP_NUM = 5
13
+
14
+ MATCH_TWEET_LINE_NUM = 3
15
+ MATCH_TWEET_COMP_NUM = 5
16
+
17
+ class Tidgrep
18
+ def initialize
19
+ @file_name = ENV['TIDGREP_PATH']
20
+ @title = nil
21
+ @regexp_option = 0
22
+ @report = false
23
+ @match_rule = "line"
24
+ @is_comp = false
25
+ end
17
26
 
27
+ def setupParam(stdout, arguments)
18
28
  opt = OptionParser.new('tidgrep [option] keyword')
19
- opt.on('-f FILE_NAME', '--filename FILE_NAME', 'TiddlyWiki file name') {|v| file_name = v }
20
- opt.on('-t TITLE', '--title TITLE', 'match title') {|v| title = v }
21
- opt.on('-i', '--ignore', 'ignore case') {|v| regexp_option |= Regexp::IGNORECASE }
22
- opt.on('-r', '--report', 'disp report') {|v| report = true }
23
- opt.on('-m MATCH_RULE', '--match MATCH_RULE', 'match rule [grep, tiddle, hr]') {|v| match_rule = v; p match_rule }
29
+ opt.on('-f FILE_NAME', '--filename FILE_NAME', 'TiddlyWiki file name') {|v| @file_name = v }
30
+ opt.on('-t TITLE', '--title TITLE', 'match title') {|v| @title = v }
31
+ opt.on('-i', '--ignore', 'ignore case') {|v| @regexp_option |= Regexp::IGNORECASE }
32
+ opt.on('-r', '--report', 'disp report') {|v| @report = true }
33
+ opt.on('-m MATCH_RULE', '--match MATCH_RULE', 'match rule [line, tiddle, tweet]') {|v| @match_rule = v }
34
+ opt.on('-c', '--comp', 'compression disp') {|v| @is_comp = true; @report = true }
24
35
  opt.parse!(arguments)
36
+
37
+ @title_regexp = @title && Regexp.new(@title, @regexp_option)
25
38
 
26
- keyword = ARGV[0]
39
+ @content_regexps = []
40
+ arguments.each do |keyword|
41
+ @content_regexps << Regexp.new(keyword, @regexp_option)
42
+ end
27
43
 
28
- if (!isValidOption(file_name, title, keyword))
44
+ unless validOption?
29
45
  puts opt.help
30
46
  exit
31
47
  end
48
+ end
49
+
50
+ def validOption?
51
+ return false if !@file_name
52
+ return @title || @content_regexps.size > 0
53
+ end
54
+
55
+ def match?(target)
56
+ @content_regexps.each do |content_regexp|
57
+ return false if content_regexp !~ target
58
+ end
59
+ return true
60
+ end
61
+
62
+ def match_line
63
+ tiddles = Tiddle.parse_sort_modified(@file_name)
32
64
 
33
- tiddles = Tiddle.parse_sort_modified(file_name)
34
65
  match_lines = 0
35
- total_lines = 0
66
+ search_lines = 0
36
67
  match_tiddles = 0
37
68
 
38
- title_regexp = title && Regexp.new(title, regexp_option)
39
- content_regexp = keyword && Regexp.new(keyword, regexp_option)
69
+ is_limit = false
40
70
 
41
71
  tiddles.each do |tiddle|
42
- next if (title && tiddle.title !~ title_regexp)
72
+ next if (@title && tiddle.title !~ @title_regexp)
43
73
  is_match_tiddle = false
44
74
  line_no = 1
45
75
 
46
- if (content_regexp)
47
- tiddle.content.each_line do |line|
48
- if (content_regexp =~ line)
49
- case match_rule
50
- when "grep"
51
- puts "#{tiddle.title}:#{line_no}:#{line}"
52
- match_lines += 1
53
- unless is_match_tiddle
54
- match_tiddles += 1
55
- is_match_tiddle = true
56
- end
57
- when "tiddle"
58
- match_lines += 1
59
- unless is_match_tiddle
60
- puts "--- #{tiddle.title} --------------------"
61
- match_tiddles += 1
62
- is_match_tiddle = true
63
- end
64
- puts "#{line}"
65
- when "hr"
76
+ tiddle.content.each_line do |line|
77
+ if (match? line)
78
+ match_lines += 1
79
+
80
+ unless is_limit
81
+ puts "#{tiddle.title}:#{line_no}:#{line}"
82
+
83
+ if (@is_comp && match_lines >= MATCH_LINE_COMP_NUM)
84
+ is_limit = true
85
+ print ".\n.\n"
66
86
  end
67
87
  end
68
- line_no += 1
69
- total_lines += 1
88
+
89
+
90
+ unless is_match_tiddle
91
+ match_tiddles += 1
92
+ is_match_tiddle = true
93
+ end
70
94
  end
71
- else
95
+ line_no += 1
96
+ search_lines += 1
97
+ end
98
+ end
99
+
100
+ if (@report)
101
+ puts "------------------------------"
102
+ puts "search lines : #{search_lines}"
103
+ puts "match lines : #{match_lines}"
104
+ puts "total tiddles : #{tiddles.size}"
105
+ puts "match tiddles : #{match_tiddles}"
106
+ end
107
+ end
108
+
109
+ def match_only_title
110
+ tiddles = Tiddle.parse_sort_modified(@file_name)
111
+
112
+ match_tiddles = 0
113
+
114
+ is_limit = false
115
+
116
+ tiddles.each do |tiddle|
117
+ next if (@title && tiddle.title !~ @title_regexp)
118
+
119
+ match_tiddles += 1
120
+
121
+ unless is_limit
72
122
  puts tiddle.title
123
+
124
+ if (@is_comp && match_tiddles >= MATCH_ONLY_TITLE_COMP_NUM)
125
+ is_limit = true
126
+ print ".\n.\n"
127
+ end
128
+ end
129
+ end
130
+
131
+ if (@report)
132
+ puts "------------------------------"
133
+ puts "total tiddles : #{tiddles.size}"
134
+ puts "match tiddles : #{match_tiddles}"
135
+ end
136
+ end
137
+
138
+ def match_tiddle
139
+ tiddles = Tiddle.parse_sort_modified(@file_name)
140
+
141
+ search_tiddles = 0
142
+ match_tiddles = 0
143
+
144
+ is_limit = false
145
+
146
+ tiddles.each do |tiddle|
147
+ next if (@title && tiddle.title !~ @title_regexp)
148
+ search_tiddles += 1
149
+
150
+ if (match? tiddle.content)
73
151
  match_tiddles += 1
74
- is_match_tiddle = true
152
+
153
+ unless is_limit
154
+ puts "--- #{tiddle.title} --------------------"
155
+
156
+ unless @is_comp
157
+ puts tiddle.content
158
+ else
159
+ print tiddle.content.split(/\n/)[0..(MATCH_TIDDLE_LINE_NUM - 1)].join("\n") + "\n.\n"
160
+ end
161
+
162
+ if (@is_comp && match_tiddles >= MATCH_TIDDLE_COMP_NUM)
163
+ is_limit = true
164
+ print ".\n.\n"
165
+ end
166
+ end
75
167
  end
168
+ end
76
169
 
170
+ if (@report)
171
+ puts "------------------------------"
172
+ puts "total tiddles : #{tiddles.size}"
173
+ puts "search tiddles : #{search_tiddles}"
174
+ puts "match tiddles : #{match_tiddles}"
77
175
  end
176
+ end
78
177
 
79
- if (report)
178
+ def match_tweet
179
+ tiddles = Tiddle.parse_sort_modified(@file_name)
180
+
181
+ search_tweets = 0
182
+ match_tweets = 0
183
+
184
+ is_limit = false
185
+
186
+ tiddles.each do |tiddle|
187
+ next if (@title && tiddle.title !~ @title_regexp)
188
+ is_match_tiddle = false
189
+
190
+ tweets = tiddle.content.split(/^----+\n/)
191
+ search_tweets += tweets.size
192
+
193
+ tweets.each do |tweet|
194
+ if (match? tweet)
195
+ match_tweets += 1
196
+ unless is_limit
197
+ unless is_match_tiddle
198
+ puts "--- #{tiddle.title} --------------------"
199
+ is_match_tiddle = true
200
+ else
201
+ puts "----\n"
202
+ end
203
+
204
+ unless @is_comp
205
+ print tweet
206
+ else
207
+ print tweet.split(/\n/)[0..(MATCH_TWEET_LINE_NUM - 1)].join("\n") + "\n.\n"
208
+ end
209
+
210
+ if (@is_comp && match_tweets >= MATCH_TWEET_COMP_NUM)
211
+ is_limit = true
212
+ print ".\n.\n"
213
+ end
214
+ end
215
+ end
216
+ end
217
+ end
218
+
219
+ if (@report)
80
220
  puts "------------------------------"
81
- if (content_regexp)
82
- puts "match lines : #{match_lines}"
83
- puts "total lines : #{total_lines}"
221
+ puts "search tweets : #{search_tweets}"
222
+ puts "match tweets : #{match_tweets}"
223
+ end
224
+ end
225
+
226
+ def execute(stdout, arguments=[])
227
+ # パラメータの設定
228
+ setupParam(stdout, arguments)
229
+
230
+ # マッチルールごとに処理を変える
231
+ if (@content_regexps.size > 0)
232
+ case @match_rule
233
+ when "line"
234
+ match_line
235
+ when "tiddle"
236
+ match_tiddle
237
+ when "tweet"
238
+ match_tweet
84
239
  end
85
- puts "match tiddles : #{match_tiddles}"
86
- puts "total tiddles : #{tiddles.size}"
240
+ else
241
+ match_only_title
87
242
  end
88
243
  end
244
+
245
+ end
246
+
247
+ class CLI
248
+ def self.execute(stdout, arguments=[])
249
+ Tidgrep.new.execute(stdout, arguments)
250
+ end
89
251
  end
90
252
  end
data/lib/tidtools.rb CHANGED
@@ -2,5 +2,5 @@ $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module Tidtools
5
- VERSION = '0.0.2'
5
+ VERSION = '0.0.3'
6
6
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 2
9
- version: 0.0.2
8
+ - 3
9
+ version: 0.0.3
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-04-24 00:00:00 +09:00
17
+ date: 2010-04-25 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency