rspec-kickstarter 0.0.6 → 0.0.7
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/bin/rspec-kickstarter +21 -3
- data/lib/rspec_kickstarter/generator.rb +64 -14
- data/lib/rspec_kickstarter/version.rb +1 -1
- metadata +2 -2
data/bin/rspec-kickstarter
CHANGED
@@ -1,14 +1,32 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# rspec-kickstarter [dir/*.rb]
|
4
|
+
#
|
2
5
|
|
6
|
+
require 'optparse'
|
3
7
|
require 'rspec_kickstarter/generator'
|
4
8
|
|
5
|
-
|
9
|
+
force_write = false
|
10
|
+
dry_run = false
|
11
|
+
spec_dir = './spec'
|
6
12
|
|
7
|
-
|
13
|
+
opt = OptionParser.new
|
14
|
+
opt.on('-f', 'Creates new specs or appends on existing specs') { |_| force_write = true }
|
15
|
+
opt.on('-n', 'Dry run') { |_| dry_run = true }
|
16
|
+
opt.on('-o VAL', 'Output directory') { |dir| spec_dir = dir }
|
17
|
+
|
18
|
+
args = opt.parse(ARGV)
|
19
|
+
dir_or_file = args.first
|
20
|
+
if dir_or_file.nil?
|
21
|
+
puts "Usage: rspec-kickstarter [dir/*.rb]"
|
22
|
+
exit 1
|
23
|
+
end
|
8
24
|
unless dir_or_file.match(/.rb$/)
|
9
25
|
dir_or_file = dir_or_file.gsub(/\/$/, '') + "/**/*.rb"
|
10
26
|
end
|
27
|
+
|
28
|
+
generator = RSpecKickstarter::Generator.new(spec_dir)
|
11
29
|
Dir.glob(dir_or_file).each do |file_path|
|
12
|
-
generator.
|
30
|
+
generator.write_spec(file_path, force_write, dry_run)
|
13
31
|
end
|
14
32
|
|
@@ -37,8 +37,11 @@ module RSpecKickstarter
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def instance_name(c)
|
40
|
-
|
41
|
-
|
40
|
+
c.name.gsub(/::/, '/').
|
41
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
42
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
43
|
+
tr("-", "_").
|
44
|
+
downcase
|
42
45
|
end
|
43
46
|
|
44
47
|
def to_param_names_array(params)
|
@@ -80,7 +83,7 @@ module RSpecKickstarter
|
|
80
83
|
end
|
81
84
|
end
|
82
85
|
|
83
|
-
def
|
86
|
+
def write_spec(file_path, force_write = false, dry_run = false)
|
84
87
|
|
85
88
|
body = File.read(file_path)
|
86
89
|
RDoc::TopLevel.reset()
|
@@ -99,8 +102,48 @@ module RSpecKickstarter
|
|
99
102
|
puts "#{file_path} skipped (Class/Module not found)."
|
100
103
|
else
|
101
104
|
|
102
|
-
|
103
|
-
|
105
|
+
spec_path = spec_dir + '/' + file_path.gsub(/^(lib\/)|(app\/)/, '').gsub(/\.rb$/, '_spec.rb')
|
106
|
+
|
107
|
+
if force_write && File.exist?(spec_path)
|
108
|
+
existing_spec = File.read(spec_path)
|
109
|
+
racking_methods = c.method_list.select { |m| m.visibility == :public }.reject { |m| existing_spec.match(m.name) }
|
110
|
+
if racking_methods.empty?
|
111
|
+
puts "#{spec_path} skipped."
|
112
|
+
else
|
113
|
+
additional_spec = <<SPEC
|
114
|
+
#{racking_methods.map { |method|
|
115
|
+
<<EACH_SPEC
|
116
|
+
# TODO auto-generated
|
117
|
+
describe '#{method.name}' do
|
118
|
+
it 'should work' do#{get_instantiation_code(c, method)}#{get_params_initialization_code(method)}
|
119
|
+
result = #{get_method_invocation_code(c, method)}
|
120
|
+
result.should_not be_nil
|
121
|
+
end
|
122
|
+
end
|
123
|
+
EACH_SPEC
|
124
|
+
}.join("\n")}
|
125
|
+
SPEC
|
126
|
+
last_end_not_found = true
|
127
|
+
code = existing_spec.split("\n").reverse.reject { |line|
|
128
|
+
if last_end_not_found
|
129
|
+
last_end_not_found = line.strip.gsub(/#.+$/, '') != "end"
|
130
|
+
true
|
131
|
+
else
|
132
|
+
false
|
133
|
+
end
|
134
|
+
}.reverse.join("\n") + "\n" + additional_spec + "\nend\n"
|
135
|
+
if dry_run
|
136
|
+
puts "----- #{spec_path} -----"
|
137
|
+
puts code
|
138
|
+
else
|
139
|
+
File.open(spec_path, 'w') { |f| f.write(code) }
|
140
|
+
end
|
141
|
+
puts "#{spec_path} modified."
|
142
|
+
end
|
143
|
+
|
144
|
+
else
|
145
|
+
self_path = file_path.gsub(/^(lib\/)|(app\/)/, '').gsub(/\.rb$/, '')
|
146
|
+
code = <<SPEC
|
104
147
|
# -*- encoding: utf-8 -*-
|
105
148
|
require 'spec_helper'
|
106
149
|
require '#{self_path}'
|
@@ -109,10 +152,11 @@ describe #{get_complete_class_name(c)} do
|
|
109
152
|
|
110
153
|
#{c.method_list.select { |m| m.visibility == :public }.map { |method|
|
111
154
|
<<EACH_SPEC
|
155
|
+
# TODO auto-generated
|
112
156
|
describe '#{method.name}' do
|
113
157
|
it 'should work' do#{get_instantiation_code(c, method)}#{get_params_initialization_code(method)}
|
114
158
|
result = #{get_method_invocation_code(c, method)}
|
115
|
-
|
159
|
+
result.should_not be_nil
|
116
160
|
end
|
117
161
|
end
|
118
162
|
EACH_SPEC
|
@@ -120,17 +164,23 @@ EACH_SPEC
|
|
120
164
|
end
|
121
165
|
SPEC
|
122
166
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
167
|
+
if File.exist?(spec_path)
|
168
|
+
puts "#{spec_path} already exists."
|
169
|
+
else
|
170
|
+
if dry_run
|
171
|
+
puts "----- #{spec_path} -----"
|
172
|
+
puts code
|
173
|
+
else
|
174
|
+
FileUtils.mkdir_p(File.dirname(spec_path))
|
175
|
+
File.open(spec_path, 'w') { |f| f.write(code) }
|
176
|
+
puts "#{spec_path} created."
|
177
|
+
end
|
178
|
+
end
|
131
179
|
end
|
132
180
|
end
|
181
|
+
|
133
182
|
end
|
183
|
+
|
134
184
|
end
|
135
185
|
end
|
136
186
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-kickstarter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -46,7 +46,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
46
46
|
version: '0'
|
47
47
|
requirements: []
|
48
48
|
rubyforge_project:
|
49
|
-
rubygems_version: 1.8.
|
49
|
+
rubygems_version: 1.8.24
|
50
50
|
signing_key:
|
51
51
|
specification_version: 3
|
52
52
|
summary: RSpec kickstarter generates spec files for existing code.
|