RegexpBench 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/bin/regexp-bench CHANGED
@@ -1,11 +1,31 @@
1
1
  #!/bin/env ruby
2
2
  require 'regexp-bench/commands'
3
+ require 'yaml'
4
+
5
+ loaded_strings = []
6
+
7
+ ARGV.each do |arg|
8
+ if File.exists?(arg) and File.file?(arg)
9
+ File::open(arg, "r") do |match_list|
10
+ loaded_strings += RegexpBench.clean_strings(YAML::load(match_list))
11
+ end
12
+ else
13
+ warn "#{arg} couldn't be opened for loading"
14
+ end
15
+ end
3
16
 
4
17
  interpreter = Command::TextInterpreter.new
18
+
19
+ def interpreter.get_formatter()
20
+ Command::Results::StrategyFormatter.new(::Command::raw_stdout)
21
+ end
22
+
5
23
  interpreter.command_set = RegexpBench::commands
6
24
 
25
+ interpreter.behavior(:debug_commands => true)
26
+
7
27
  subject = interpreter.subject_template
8
- subject.test_strings = []
28
+ subject.test_strings = loaded_strings
9
29
  subject.interpreter = interpreter
10
30
  subject.command_set = interpreter.command_set
11
31
 
data/doc/README CHANGED
@@ -1,2 +1,58 @@
1
- == This is a Really Cool Ruby Thing
2
- === ( That deserves better documentation than this. )
1
+ == Welcome to Regexp Bench
2
+
3
+ Basically, start up 'regexp-bench' You'll get an interactive command line,
4
+ complete with a help function.
5
+
6
+ An example exchange with regexp-bench:
7
+
8
+ $ bin/regexp-bench
9
+ > load_matches do
10
+ do doc/ dog-cat.yaml
11
+ > load_matches dog-cat.yaml
12
+ > list_matches
13
+ Match: dog
14
+ Don't Match: cat
15
+ > test .o.
16
+ Regexp compiles as: (?-mix:.o.)
17
+ Matching "dog"
18
+ Successful match:
19
+ Before:
20
+ m[0]: dog
21
+ After:
22
+ Matching "cat"
23
+ Successful null match
24
+ > test ...
25
+ Regexp compiles as: (?-mix:...)
26
+ Matching "dog"
27
+ Successful match:
28
+ Before:
29
+ m[0]: dog
30
+ After:
31
+ Matching "cat"
32
+ ERROR: match:
33
+ Before:
34
+ m[0]: cat
35
+ After:
36
+ > help
37
+ clear_matches
38
+ dont_match <string> [<string>]
39
+ help <terms> [<terms>]
40
+ list_matches
41
+ load_matches <load_from> [<load_from>]
42
+ match <string> [<string>]
43
+ quit
44
+ redo
45
+ remove <string> [<string>]
46
+ save_matches <save_to> [<save_to>]
47
+ test <regex> [<regex>]
48
+ undo
49
+ > quit
50
+
51
+
52
+ Still not as pretty as I'd like it to be, but we'll get there before 1.0.
53
+
54
+ == TODO
55
+
56
+ - Better help documentation!
57
+ - Rspec file output
58
+ - Code generation based on a successful test
@@ -0,0 +1,20 @@
1
+
2
+
3
+ module Command
4
+ #This is a demonstration of how easy it is to extend arguments. Probably
5
+ #this class belongs in the main CommandSet, but 0.8.0 doesn't have it yet,
6
+ #so it's added here.
7
+ class RestOfLine < StringArgument
8
+ register "rest"
9
+
10
+ def consume(subject, arguments)
11
+ term = arguments.join(" ")
12
+ arguments.clear
13
+ unless validate(term, subject)
14
+ raise ArgumentInvalidException, {@name => term}
15
+ end
16
+ return {@name => parse(subject, term)}
17
+ end
18
+ end
19
+ end
20
+
@@ -1,6 +1,7 @@
1
1
  require 'command-set'
2
2
  require 'command-set/standard-commands'
3
3
  require 'regexp-bench/regexp-bench'
4
+ require 'regexp-bench/arguments'
4
5
 
5
6
  module RegexpBench
6
7
  def self.commands
@@ -10,33 +11,29 @@ module RegexpBench
10
11
  include_commands Command::StandardCommands::Undo
11
12
 
12
13
  command :test do
13
- argument :regex, "The regular expression to be tested"
14
+ rest_argument :regex, "The regular expression to be tested"
14
15
 
15
16
  subject_methods :test_strings
16
17
 
17
18
  doesnt_undo
18
19
 
20
+ format_advice do
21
+ list do |list|
22
+ if list.depth == 1
23
+ {:type => :indent}
24
+ end
25
+ end
26
+ end
27
+
19
28
  action do
20
29
  begin
21
30
  regex = Regexp.compile(regex().chomp)
22
- item regex
31
+ item "Regexp compiles as: " + regex.to_s
23
32
 
24
33
  list "tests" do
25
- subject.test_strings.each do |match_test_string|
26
- test_string = match_test_string.string
27
- list test_string do
28
- item "Matching: \"#{test_string}\""
29
- match = regex.match(test_string)
30
-
31
- if(match.nil?)
32
- puts "Null match"
33
- else
34
- puts "Before: " + match.pre_match
35
- match.to_a.each_index do |idx|
36
- puts "m[#{idx}]: #{match[idx]}"
37
- end
38
- puts "After: " + match.post_match
39
- end
34
+ subject.test_strings.each do |test_string|
35
+ list "Matching \"#{test_string.to_s}\"" do
36
+ test_string.test_match(regex)
40
37
  end
41
38
  end
42
39
  end
@@ -47,7 +44,7 @@ module RegexpBench
47
44
  end
48
45
 
49
46
  command :match do
50
- argument :string, "A string to match"
47
+ rest_argument :string, "A string to match"
51
48
 
52
49
  subject_methods :test_strings
53
50
 
@@ -62,7 +59,7 @@ module RegexpBench
62
59
  end
63
60
 
64
61
  command :dont_match do
65
- argument :string, "A string to match"
62
+ rest_argument :string, "A string to match"
66
63
 
67
64
  subject_methods :test_strings
68
65
 
@@ -103,12 +100,63 @@ module RegexpBench
103
100
  action do
104
101
  list "matches" do
105
102
  subject.test_strings.each do |string|
106
- item string
103
+ string.list
107
104
  end
108
105
  end
109
106
  end
110
107
  end
111
108
 
109
+ command :clear_matches do
110
+ subject_methods :test_strings
111
+
112
+ action do
113
+ @saved_strings = subject.test_strings.dup
114
+ subject.test_strings.clear
115
+ end
116
+
117
+ undo do
118
+ subject.test_strings.replace(@saved_strings)
119
+ end
120
+ end
121
+
122
+ command :save_matches do
123
+ file_argument :save_to do |path|
124
+ not File::exists?(path) or File::file?(path)
125
+ end
126
+
127
+ subject_methods :test_strings
128
+
129
+ doesnt_undo
130
+
131
+ action do
132
+ require 'yaml'
133
+
134
+ File::open(save_to(), "w") do |save|
135
+ save.write(YAML.dump(subject.test_strings))
136
+ end
137
+ end
138
+ end
139
+
140
+ command :load_matches do
141
+ file_argument :load_from, {}
142
+
143
+ subject_methods :test_strings
144
+
145
+ action do
146
+ require 'yaml'
147
+
148
+ @saved_strings = subject.test_strings.dup
149
+
150
+ File::open(load_from(), "r") do |file|
151
+ strings = RegexpBench.clean_strings(YAML.load(file))
152
+ subject.test_strings.push(*strings)
153
+ end
154
+ end
155
+
156
+ undo do
157
+ subject.test_strings.replace(@saved_strings)
158
+ end
159
+ end
112
160
  end
113
161
  end
114
162
  end
@@ -1,13 +1,69 @@
1
1
  module RegexpBench
2
+ def self.clean_strings(array)
3
+ array.map! do |string|
4
+ unless MatchString === string
5
+ string = MatchString.new(string.to_s)
6
+ end
7
+
8
+ string
9
+ end
10
+ end
11
+
2
12
  class MatchString
3
13
  def initialize(string)
4
14
  @string = string
5
15
  end
6
16
 
7
17
  attr_reader :string
18
+
19
+ def to_s
20
+ return @string.dup
21
+ end
22
+
23
+ def list
24
+ puts "Match: " + string
25
+ end
26
+
27
+ def test_match(regex)
28
+ match = regex.match(string)
29
+
30
+ if(match.nil?)
31
+ null_match
32
+ else
33
+ matched(match)
34
+ end
35
+ end
36
+
37
+ def null_match
38
+ puts "ERROR: Null match"
39
+ end
40
+
41
+ def matched(match)
42
+ puts "Successful match:"
43
+ puts "Before: " + match.pre_match
44
+ match.to_a.each_index do |idx|
45
+ puts "m[#{idx}]: #{match[idx]}"
46
+ end
47
+ puts "After: " + match.post_match
48
+ end
8
49
  end
9
50
 
10
51
  class DontMatchString < MatchString
52
+ def list
53
+ puts "Don't Match: " + string
54
+ end
55
+
56
+ def null_match
57
+ puts "Successful null match"
58
+ end
11
59
 
60
+ def matched(match)
61
+ puts "ERROR: match:"
62
+ puts "Before: " + match.pre_match
63
+ match.to_a.each_index do |idx|
64
+ puts "m[#{idx}]: #{match[idx]}"
65
+ end
66
+ puts "After: " + match.post_match
67
+ end
12
68
  end
13
69
  end
metadata CHANGED
@@ -3,15 +3,15 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: RegexpBench
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.5.0
7
- date: 2007-12-06 00:00:00 -08:00
6
+ version: 0.5.1
7
+ date: 2007-12-10 00:00:00 -08:00
8
8
  summary: Regular expression experimental user app.
9
9
  require_paths:
10
10
  - lib
11
11
  email: nyarly@gmail.com
12
12
  homepage:
13
13
  rubyforge_project:
14
- description: Interactive testing and experimentation with regular expressions. Ultimately, you can use it to generate RSpec descriptions based on the interactive testing you do.
14
+ description: "Interactive testing and experimentation with regular expressions. To start, type 'regexp-bench' First command: help. Current nicest feature: saving and restoring test strings from a YAML file. Biggest wishlist item: automatic rspec output."
15
15
  autorequire:
16
16
  default_executable:
17
17
  bindir: bin
@@ -25,11 +25,12 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
25
25
  platform: ruby
26
26
  signing_key:
27
27
  cert_chain:
28
- post_install_message: Another tidy package brought to you Judson
28
+ post_install_message: To begin, run 'regexp-bench' - try 'help' as your first command
29
29
  authors:
30
30
  - Judson Lester
31
31
  files:
32
32
  - lib/regexp-bench
33
+ - lib/regexp-bench/arguments.rb
33
34
  - lib/regexp-bench/commands.rb
34
35
  - lib/regexp-bench/regexp-bench.rb
35
36
  - lib/regexp-bench/regex-test.rb
@@ -43,11 +44,11 @@ rdoc_options:
43
44
  - --main
44
45
  - doc/README
45
46
  - --title
46
- - RegexpBench-0.5.0 RDoc
47
+ - RegexpBench-0.5.1 RDoc
47
48
  extra_rdoc_files:
48
49
  - doc/README
49
- executables: []
50
-
50
+ executables:
51
+ - regexp-bench
51
52
  extensions: []
52
53
 
53
54
  requirements: []