recurs 0.0.4.1 → 0.0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -2
- data/Gemfile.lock +51 -0
- data/features/generators.feature +8 -3
- data/features/step_definitions/aruba_steps.rb +268 -15
- data/features/support/aruba.rb +297 -1
- data/features/support/env.rb +12 -3
- data/lib/generators/recurs_widget_generator.rb +26 -0
- data/lib/generators/templates/controller.rb.tmpl +0 -0
- data/lib/recurs/version.rb +1 -1
- data/recurs.gemspec +1 -0
- data/test/generator_test.rb +13 -0
- metadata +29 -12
- data/lib/generators/recurs_instance_generator.rb +0 -9
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
recurs (0.0.4.1)
|
5
|
+
actic
|
6
|
+
ri_cal (>= 0.8.7)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
actic (0.0.2)
|
12
|
+
ri_cal (>= 0.8.7)
|
13
|
+
aruba (0.2.7)
|
14
|
+
background_process
|
15
|
+
cucumber (~> 0.10.0)
|
16
|
+
background_process (1.2)
|
17
|
+
builder (3.0.0)
|
18
|
+
cucumber (0.10.0)
|
19
|
+
builder (>= 2.1.2)
|
20
|
+
diff-lcs (~> 1.1.2)
|
21
|
+
gherkin (~> 2.3.2)
|
22
|
+
json (~> 1.4.6)
|
23
|
+
term-ansicolor (~> 1.0.5)
|
24
|
+
diff-lcs (1.1.2)
|
25
|
+
gherkin (2.3.2)
|
26
|
+
json (~> 1.4.6)
|
27
|
+
term-ansicolor (~> 1.0.5)
|
28
|
+
json (1.4.6)
|
29
|
+
rake (0.8.7)
|
30
|
+
ri_cal (0.8.7)
|
31
|
+
rspec (2.3.0)
|
32
|
+
rspec-core (~> 2.3.0)
|
33
|
+
rspec-expectations (~> 2.3.0)
|
34
|
+
rspec-mocks (~> 2.3.0)
|
35
|
+
rspec-core (2.3.0)
|
36
|
+
rspec-expectations (2.3.0)
|
37
|
+
diff-lcs (~> 1.1.2)
|
38
|
+
rspec-mocks (2.3.0)
|
39
|
+
term-ansicolor (1.0.5)
|
40
|
+
|
41
|
+
PLATFORMS
|
42
|
+
ruby
|
43
|
+
|
44
|
+
DEPENDENCIES
|
45
|
+
actic
|
46
|
+
aruba (~> 0.2.7)
|
47
|
+
cucumber
|
48
|
+
rake
|
49
|
+
recurs!
|
50
|
+
ri_cal (>= 0.8.7)
|
51
|
+
rspec (~> 2.3.0)
|
data/features/generators.feature
CHANGED
@@ -12,16 +12,21 @@ Feature:
|
|
12
12
|
source "http://rubygems.org"
|
13
13
|
gem 'rails', '3.0.0'
|
14
14
|
gem 'sqlite3-ruby', :require => 'sqlite3'
|
15
|
-
gem 'recurs'
|
15
|
+
gem 'recurs' #, :path => '../../../'
|
16
16
|
"""
|
17
17
|
And I run "bundle install"
|
18
18
|
And I run "rails generate recurs_widget Event"
|
19
|
-
|
19
|
+
Then the output should contain:
|
20
|
+
"""
|
21
|
+
create app/models/event.rb
|
22
|
+
|
23
|
+
"""
|
20
24
|
And the following files should exist:
|
21
25
|
| app/models/event.rb |
|
22
26
|
| app/views/events/index.html.haml |
|
23
27
|
| app/views/events/new.html.haml |
|
24
28
|
| app/views/events/edit.html.haml |
|
25
29
|
| app/views/events/_form.html.haml |
|
30
|
+
| app/views/events/schemes/_form.html.haml |
|
26
31
|
And the following files should not exist:
|
27
|
-
|
32
|
+
And I run "rake db:migrate"
|
@@ -1,24 +1,277 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
require 'aruba/api'
|
2
|
+
#require 'aruba/cucumber'
|
3
|
+
#=begin
|
4
|
+
World(Aruba::Api)
|
5
|
+
|
6
|
+
Before('@disable-bundler') do
|
7
|
+
unset_bundler_env_vars
|
8
|
+
end
|
9
|
+
|
10
|
+
Before do
|
11
|
+
@__aruba_original_paths = (ENV['PATH'] || '').split(File::PATH_SEPARATOR)
|
12
|
+
ENV['PATH'] = ([File.expand_path('bin')] + @__aruba_original_paths).join(File::PATH_SEPARATOR)
|
13
|
+
end
|
14
|
+
|
15
|
+
After do
|
16
|
+
ENV['PATH'] = @__aruba_original_paths.join(File::PATH_SEPARATOR)
|
17
|
+
end
|
18
|
+
|
19
|
+
Before do
|
20
|
+
FileUtils.rm_rf(current_dir)
|
21
|
+
end
|
22
|
+
|
23
|
+
Before('@puts') do
|
24
|
+
@puts = true
|
25
|
+
end
|
26
|
+
|
27
|
+
Before('@announce-cmd') do
|
28
|
+
@announce_cmd = true
|
29
|
+
end
|
30
|
+
|
31
|
+
Before('@announce-stdout') do
|
32
|
+
@announce_stdout = true
|
33
|
+
end
|
34
|
+
|
35
|
+
Before('@announce-stderr') do
|
36
|
+
@announce_stderr = true
|
37
|
+
end
|
38
|
+
|
39
|
+
Before('@announce-dir') do
|
40
|
+
@announce_dir = true
|
41
|
+
end
|
42
|
+
|
43
|
+
Before('@announce-env') do
|
44
|
+
@announce_env = true
|
45
|
+
end
|
46
|
+
|
47
|
+
Before('@announce') do
|
48
|
+
@announce_stdout = true
|
49
|
+
@announce_stderr = true
|
50
|
+
@announce_cmd = true
|
51
|
+
@announce_dir = true
|
52
|
+
@announce_env = true
|
53
|
+
end
|
54
|
+
|
55
|
+
After do
|
56
|
+
restore_env
|
57
|
+
end
|
58
|
+
|
59
|
+
Given /^I'm using a clean gemset "([^"]*)"$/ do |gemset|
|
60
|
+
use_clean_gemset(gemset)
|
61
|
+
end
|
62
|
+
|
63
|
+
Given /^a directory named "([^"]*)"$/ do |dir_name|
|
64
|
+
create_dir(dir_name)
|
65
|
+
end
|
66
|
+
|
67
|
+
Given /^a file named "([^"]*)" with:$/ do |file_name, file_content|
|
68
|
+
create_file(file_name, file_content)
|
69
|
+
end
|
70
|
+
|
71
|
+
Given /^an empty file named "([^"]*)"$/ do |file_name|
|
72
|
+
create_file(file_name, "")
|
73
|
+
end
|
74
|
+
|
75
|
+
When /^I write to "([^"]*)" with:$/ do |file_name, file_content|
|
76
|
+
create_file(file_name, file_content, false)
|
77
|
+
end
|
78
|
+
|
79
|
+
When /^I overwrite "([^"]*)" with:$/ do |file_name, file_content|
|
80
|
+
create_file(file_name, file_content, true)
|
81
|
+
end
|
82
|
+
|
83
|
+
When /^I append to "([^"]*)" with:$/ do |file_name, file_content|
|
84
|
+
append_to_file(file_name, file_content)
|
85
|
+
end
|
86
|
+
|
87
|
+
When /^I remove the file "([^"]*)"$/ do |file_name|
|
88
|
+
remove_file(file_name)
|
89
|
+
end
|
90
|
+
|
91
|
+
When /^I cd to "([^"]*)"$/ do |dir|
|
92
|
+
cd(dir)
|
93
|
+
end
|
94
|
+
|
95
|
+
When /^I run "(.*)"$/ do |cmd|
|
96
|
+
run_simple(unescape(cmd), false)
|
97
|
+
# sleep(5)
|
98
|
+
end
|
99
|
+
|
100
|
+
When /^I successfully run "(.*)"$/ do |cmd|
|
101
|
+
run_simple(unescape(cmd))
|
102
|
+
end
|
103
|
+
|
104
|
+
When /^I run "([^"]*)" interactively$/ do |cmd|
|
105
|
+
run_interactive(unescape(cmd))
|
106
|
+
end
|
107
|
+
|
108
|
+
When /^I type "([^"]*)"$/ do |input|
|
109
|
+
write_interactive(ensure_newline(input))
|
110
|
+
end
|
111
|
+
|
112
|
+
Then /^the output should contain "([^"]*)"$/ do |partial_output|
|
113
|
+
assert_partial_output(unescape(partial_output))
|
114
|
+
end
|
115
|
+
|
116
|
+
Then /^the output from "([^"]*)" should contain "([^"]*)"$/ do |cmd, partial_output|
|
117
|
+
output_from(cmd).should include(unescape(partial_output))
|
118
|
+
end
|
119
|
+
|
120
|
+
Then /^the output from "([^"]*)" should not contain "([^"]*)"$/ do |cmd, partial_output|
|
121
|
+
output_from(cmd).should_not include(unescape(partial_output))
|
122
|
+
end
|
123
|
+
|
124
|
+
Then /^the output should not contain "([^"]*)"$/ do |partial_output|
|
125
|
+
all_output.should_not include(unescape(partial_output))
|
126
|
+
end
|
127
|
+
|
128
|
+
Then /^the output should contain:$/ do |partial_output|
|
129
|
+
all_output.should include(unescape(partial_output))
|
130
|
+
end
|
131
|
+
|
132
|
+
Then /^the output should not contain:$/ do |partial_output|
|
133
|
+
all_output.should_not include(unescape(partial_output))
|
134
|
+
end
|
135
|
+
|
136
|
+
Then /^the output should contain exactly "([^"]*)"$/ do |exact_output|
|
137
|
+
all_output.should == unescape(exact_output)
|
138
|
+
end
|
139
|
+
|
140
|
+
Then /^the output should contain exactly:$/ do |exact_output|
|
141
|
+
all_output.should == unescape(exact_output)
|
142
|
+
end
|
143
|
+
|
144
|
+
# "the output should match" allows regex in the partial_output, if
|
145
|
+
# you don't need regex, use "the output should contain" instead since
|
146
|
+
# that way, you don't have to escape regex characters that
|
147
|
+
# appear naturally in the output
|
148
|
+
Then /^the output should match \/([^\/]*)\/$/ do |partial_output|
|
149
|
+
all_output.should =~ /#{partial_output}/
|
150
|
+
end
|
151
|
+
|
152
|
+
Then /^the output should match:$/ do |partial_output|
|
153
|
+
all_output.should =~ /#{partial_output}/m
|
154
|
+
end
|
155
|
+
|
156
|
+
Then /^the exit status should be (\d+)$/ do |exit_status|
|
157
|
+
@last_exit_status.should == exit_status.to_i
|
158
|
+
end
|
159
|
+
|
160
|
+
Then /^the exit status should not be (\d+)$/ do |exit_status|
|
161
|
+
@last_exit_status.should_not == exit_status.to_i
|
162
|
+
end
|
163
|
+
|
164
|
+
Then /^it should (pass|fail) with:$/ do |pass_fail, partial_output|
|
165
|
+
self.__send__("assert_#{pass_fail}ing_with", partial_output)
|
166
|
+
end
|
167
|
+
|
168
|
+
Then /^it should (pass|fail) with exactly:$/ do |pass_fail, exact_output|
|
169
|
+
assert_exit_status_and_output(pass_fail == "pass", exact_output, true)
|
170
|
+
end
|
171
|
+
|
172
|
+
Then /^it should (pass|fail) with regexp?:$/ do |pass_fail, partial_output|
|
173
|
+
Then "the output should match:", partial_output
|
174
|
+
if pass_fail == 'pass'
|
175
|
+
@last_exit_status.should == 0
|
176
|
+
else
|
177
|
+
@last_exit_status.should_not == 0
|
6
178
|
end
|
7
179
|
end
|
8
180
|
|
9
|
-
|
10
|
-
|
11
|
-
|
181
|
+
Then /^the stderr should contain "([^"]*)"$/ do |partial_output|
|
182
|
+
all_stderr.should include(unescape(partial_output))
|
183
|
+
end
|
184
|
+
|
185
|
+
Then /^the stderr should contain exactly:$/ do |exact_output|
|
186
|
+
all_stderr.should == exact_output
|
187
|
+
end
|
188
|
+
|
189
|
+
Then /^the stdout should contain "([^"]*)"$/ do |partial_output|
|
190
|
+
all_stdout.should include(unescape(partial_output))
|
191
|
+
end
|
192
|
+
|
193
|
+
Then /^the stdout should contain exactly:$/ do |exact_output|
|
194
|
+
all_stdout.should == exact_output
|
195
|
+
end
|
196
|
+
|
197
|
+
Then /^the stderr should not contain "([^"]*)"$/ do |partial_output|
|
198
|
+
all_stderr.should_not include(unescape(partial_output))
|
199
|
+
end
|
200
|
+
|
201
|
+
Then /^the stdout should not contain "([^"]*)"$/ do |partial_output|
|
202
|
+
all_stdout.should_not include(unescape(partial_output))
|
203
|
+
end
|
204
|
+
|
205
|
+
Then /^the stdout from "([^"]*)" should contain "([^"]*)"$/ do |cmd, partial_output|
|
206
|
+
stdout_from(cmd).should include(unescape(partial_output))
|
207
|
+
end
|
208
|
+
|
209
|
+
Then /^the stdout from "([^"]*)" should not contain "([^"]*)"$/ do |cmd, partial_output|
|
210
|
+
stdout_from(cmd).should_not include(unescape(partial_output))
|
211
|
+
end
|
212
|
+
|
213
|
+
Then /^the stderr from "([^"]*)" should contain "([^"]*)"$/ do |cmd, partial_output|
|
214
|
+
stderr_from(cmd).should include(unescape(partial_output))
|
215
|
+
end
|
216
|
+
|
217
|
+
Then /^the stderr from "([^"]*)" should not contain "([^"]*)"$/ do |cmd, partial_output|
|
218
|
+
stderr_from(cmd).should_not include(unescape(partial_output))
|
219
|
+
end
|
220
|
+
|
221
|
+
Then /^the file "([^"]*)" should not exist$/ do |file_name|
|
222
|
+
check_file_presence([file_name], false)
|
223
|
+
end
|
224
|
+
|
225
|
+
Then /^the following files should exist:$/ do |files|
|
226
|
+
check_file_presence(files.raw.map{|file_row| file_row[0]}, true)
|
227
|
+
end
|
228
|
+
|
229
|
+
Then /^the following files should not exist:$/ do |files|
|
230
|
+
check_file_presence(files.raw.map{|file_row| file_row[0]}, false)
|
231
|
+
end
|
232
|
+
|
233
|
+
Then /^a file named "([^"]*)" should exist$/ do |file|
|
234
|
+
check_file_presence([file], true)
|
235
|
+
end
|
236
|
+
|
237
|
+
Then /^a file named "([^"]*)" should not exist$/ do |file|
|
238
|
+
check_file_presence([file], false)
|
239
|
+
end
|
240
|
+
|
241
|
+
Then /^the following directories should exist:$/ do |directories|
|
242
|
+
check_directory_presence(directories.raw.map{|directory_row| directory_row[0]}, true)
|
243
|
+
end
|
244
|
+
|
245
|
+
Then /^the following directories should not exist:$/ do |directories|
|
246
|
+
check_directory_presence(directories.raw.map{|directory_row| directory_row[0]}, false)
|
247
|
+
end
|
248
|
+
|
249
|
+
Then /^a directory named "([^"]*)" should exist$/ do |directory|
|
250
|
+
check_directory_presence([directory], true)
|
251
|
+
end
|
252
|
+
|
253
|
+
Then /^a directory named "([^"]*)" should not exist$/ do |directory|
|
254
|
+
check_directory_presence([directory], false)
|
255
|
+
end
|
256
|
+
|
257
|
+
Then /^the file "([^"]*)" should contain "([^"]*)"$/ do |file, partial_content|
|
258
|
+
check_file_content(file, partial_content, true)
|
259
|
+
end
|
260
|
+
|
261
|
+
Then /^the file "([^"]*)" should not contain "([^"]*)"$/ do |file, partial_content|
|
262
|
+
check_file_content(file, partial_content, false)
|
263
|
+
end
|
264
|
+
|
265
|
+
Then /^the file "([^"]*)" should contain exactly:$/ do |file, exact_content|
|
266
|
+
check_exact_file_content(file, exact_content)
|
12
267
|
end
|
13
268
|
|
14
|
-
Then /^
|
15
|
-
|
269
|
+
Then /^the file "([^"]*)" should match \/([^\/]*)\/$/ do |file, partial_content|
|
270
|
+
check_file_content(file, /#{partial_content}/, true)
|
16
271
|
end
|
17
272
|
|
18
|
-
Then /^the
|
19
|
-
|
273
|
+
Then /^the file "([^"]*)" should not match \/([^\/]*)\/$/ do |file, partial_content|
|
274
|
+
check_file_content(file, /#{partial_content}/, false)
|
20
275
|
end
|
21
276
|
|
22
|
-
|
23
|
-
all_output.chomp.length.should == length.to_i
|
24
|
-
end
|
277
|
+
#=end
|
data/features/support/aruba.rb
CHANGED
@@ -1 +1,297 @@
|
|
1
|
-
require 'aruba'
|
1
|
+
#require 'aruba'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'rbconfig'
|
4
|
+
require 'aruba/process'
|
5
|
+
|
6
|
+
module Aruba
|
7
|
+
module Api
|
8
|
+
def in_current_dir(&block)
|
9
|
+
_mkdir(current_dir)
|
10
|
+
Dir.chdir(current_dir, &block)
|
11
|
+
end
|
12
|
+
|
13
|
+
def current_dir
|
14
|
+
File.join(*dirs)
|
15
|
+
end
|
16
|
+
|
17
|
+
def cd(dir)
|
18
|
+
dirs << dir
|
19
|
+
raise "#{current_dir} is not a directory." unless File.directory?(current_dir)
|
20
|
+
end
|
21
|
+
|
22
|
+
def dirs
|
23
|
+
@dirs ||= ['tmp/aruba']
|
24
|
+
end
|
25
|
+
|
26
|
+
def create_file(file_name, file_content, check_presence = false)
|
27
|
+
in_current_dir do
|
28
|
+
raise "expected #{file_name} to be present" if check_presence && !File.file?(file_name)
|
29
|
+
_mkdir(File.dirname(file_name))
|
30
|
+
File.open(file_name, 'w') { |f| f << file_content }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def remove_file(file_name)
|
35
|
+
in_current_dir do
|
36
|
+
FileUtils.rm(file_name)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def append_to_file(file_name, file_content)
|
41
|
+
in_current_dir do
|
42
|
+
File.open(file_name, 'a') { |f| f << file_content }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def create_dir(dir_name)
|
47
|
+
in_current_dir do
|
48
|
+
_mkdir(dir_name)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def check_file_presence(paths, expect_presence)
|
53
|
+
prep_for_fs_check do
|
54
|
+
paths.each do |path|
|
55
|
+
if expect_presence
|
56
|
+
File.should be_file(path)
|
57
|
+
else
|
58
|
+
File.should_not be_file(path)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def check_file_content(file, partial_content, expect_match)
|
65
|
+
regexp = regexp(partial_content)
|
66
|
+
prep_for_fs_check do
|
67
|
+
content = IO.read(file)
|
68
|
+
if expect_match
|
69
|
+
content.should =~ regexp
|
70
|
+
else
|
71
|
+
content.should_not =~ regexp
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def check_exact_file_content(file, exact_content)
|
77
|
+
prep_for_fs_check { IO.read(file).should == exact_content }
|
78
|
+
end
|
79
|
+
|
80
|
+
def check_directory_presence(paths, expect_presence)
|
81
|
+
prep_for_fs_check do
|
82
|
+
paths.each do |path|
|
83
|
+
if expect_presence
|
84
|
+
File.should be_directory(path)
|
85
|
+
else
|
86
|
+
File.should_not be_directory(path)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def prep_for_fs_check(&block)
|
93
|
+
stop_processes!
|
94
|
+
in_current_dir{ block.call }
|
95
|
+
end
|
96
|
+
|
97
|
+
def _mkdir(dir_name)
|
98
|
+
FileUtils.mkdir_p(dir_name) unless File.directory?(dir_name)
|
99
|
+
end
|
100
|
+
|
101
|
+
def unescape(string)
|
102
|
+
eval(%{"#{string}"})
|
103
|
+
end
|
104
|
+
|
105
|
+
def regexp(string_or_regexp)
|
106
|
+
Regexp === string_or_regexp ? string_or_regexp : Regexp.compile(Regexp.escape(string_or_regexp))
|
107
|
+
end
|
108
|
+
|
109
|
+
def output_from(cmd)
|
110
|
+
cmd = detect_ruby(cmd)
|
111
|
+
processes[cmd].output
|
112
|
+
end
|
113
|
+
|
114
|
+
def stdout_from(cmd)
|
115
|
+
cmd = detect_ruby(cmd)
|
116
|
+
processes[cmd].stdout
|
117
|
+
end
|
118
|
+
|
119
|
+
def stderr_from(cmd)
|
120
|
+
cmd = detect_ruby(cmd)
|
121
|
+
processes[cmd].stderr
|
122
|
+
end
|
123
|
+
|
124
|
+
def all_stdout
|
125
|
+
processes.values.inject("") { |out, ps| out << ps.stdout }
|
126
|
+
end
|
127
|
+
|
128
|
+
def all_stderr
|
129
|
+
processes.values.inject("") { |out, ps| out << ps.stderr }
|
130
|
+
end
|
131
|
+
|
132
|
+
def all_output
|
133
|
+
all_stdout << all_stderr
|
134
|
+
end
|
135
|
+
|
136
|
+
def assert_exact_output(exact_output)
|
137
|
+
all_output.should == exact_output
|
138
|
+
end
|
139
|
+
|
140
|
+
def assert_partial_output(partial_output)
|
141
|
+
all_output.should include(unescape(partial_output))
|
142
|
+
end
|
143
|
+
|
144
|
+
def assert_passing_with(partial_output)
|
145
|
+
assert_exit_status_and_partial_output(true, partial_output)
|
146
|
+
end
|
147
|
+
|
148
|
+
def assert_failing_with(partial_output)
|
149
|
+
assert_exit_status_and_partial_output(false, partial_output)
|
150
|
+
end
|
151
|
+
|
152
|
+
def assert_exit_status_and_partial_output(expect_to_pass, partial_output)
|
153
|
+
assert_partial_output(partial_output)
|
154
|
+
assert_exiting_with(expect_to_pass)
|
155
|
+
end
|
156
|
+
|
157
|
+
def assert_exit_status_and_output(expect_to_pass, output, expect_exact_output)
|
158
|
+
if expect_exact_output
|
159
|
+
assert_exact_output(output)
|
160
|
+
else
|
161
|
+
assert_partial_output(output)
|
162
|
+
end
|
163
|
+
assert_exiting_with(expect_to_pass)
|
164
|
+
end
|
165
|
+
|
166
|
+
def assert_exiting_with(expect_to_pass)
|
167
|
+
if expect_to_pass
|
168
|
+
@last_exit_status.should == 0
|
169
|
+
else
|
170
|
+
@last_exit_status.should_not == 0
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def install_gems(gemfile)
|
175
|
+
create_file("Gemfile", gemfile)
|
176
|
+
if ENV['GOTGEMS'].nil?
|
177
|
+
run("gem install bundler")
|
178
|
+
run("bundle --no-color install")
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
def processes
|
183
|
+
@processes ||= {}
|
184
|
+
end
|
185
|
+
|
186
|
+
def stop_processes!
|
187
|
+
processes.each do |_, process|
|
188
|
+
process.stop
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def run(cmd)
|
193
|
+
cmd = detect_ruby(cmd)
|
194
|
+
|
195
|
+
in_current_dir do
|
196
|
+
announce_or_puts("$ cd #{Dir.pwd}") if @announce_dir
|
197
|
+
announce_or_puts("$ #{cmd}") if @announce_cmd
|
198
|
+
|
199
|
+
process = processes[cmd] = Process.new(cmd, timeout)
|
200
|
+
process.run!
|
201
|
+
|
202
|
+
block_given? ? yield(process) : process
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
DEFAULT_TIMEOUT_SECONDS = 1
|
207
|
+
|
208
|
+
def timeout
|
209
|
+
@aruba_timeout_seconds || DEFAULT_TIMEOUT_SECONDS
|
210
|
+
end
|
211
|
+
|
212
|
+
def run_simple(cmd, fail_on_error=true)
|
213
|
+
@last_exit_status = run(cmd) do |process|
|
214
|
+
announce_or_puts(process.stdout) if @announce_stdout
|
215
|
+
announce_or_puts(process.stderr) if @announce_stderr
|
216
|
+
process.stop
|
217
|
+
end
|
218
|
+
@timed_out = @last_exit_status.nil?
|
219
|
+
|
220
|
+
if(@last_exit_status != 0 && fail_on_error)
|
221
|
+
fail("Exit status was #{@last_exit_status}. Output:\n#{all_output}")
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
def run_interactive(cmd)
|
226
|
+
@interactive = run(cmd)
|
227
|
+
end
|
228
|
+
|
229
|
+
def write_interactive(input)
|
230
|
+
@interactive.stdin.write(input)
|
231
|
+
end
|
232
|
+
|
233
|
+
def announce_or_puts(msg)
|
234
|
+
if(@puts)
|
235
|
+
puts(msg)
|
236
|
+
else
|
237
|
+
announce(msg)
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
def detect_ruby(cmd)
|
242
|
+
if cmd =~ /^ruby\s/
|
243
|
+
cmd.gsub(/^ruby\s/, "#{current_ruby} ")
|
244
|
+
else
|
245
|
+
cmd
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
def current_ruby
|
250
|
+
File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'])
|
251
|
+
end
|
252
|
+
|
253
|
+
def use_clean_gemset(gemset)
|
254
|
+
run_simple(%{rvm gemset create "#{gemset}"}, true)
|
255
|
+
if all_stdout =~ /'#{gemset}' gemset created \((.*)\)\./
|
256
|
+
gem_home = $1
|
257
|
+
set_env('GEM_HOME', gem_home)
|
258
|
+
set_env('GEM_PATH', gem_home)
|
259
|
+
set_env('BUNDLE_PATH', gem_home)
|
260
|
+
|
261
|
+
paths = (ENV['PATH'] || "").split(File::PATH_SEPARATOR)
|
262
|
+
paths.unshift(File.join(gem_home, 'bin'))
|
263
|
+
set_env('PATH', paths.uniq.join(File::PATH_SEPARATOR))
|
264
|
+
|
265
|
+
run_simple("gem install bundler", true)
|
266
|
+
else
|
267
|
+
raise "I didn't understand rvm's output: #{all_stdout}"
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
def unset_bundler_env_vars
|
272
|
+
%w[RUBYOPT BUNDLE_PATH BUNDLE_BIN_PATH BUNDLE_GEMFILE].each do |key|
|
273
|
+
set_env(key, nil)
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
def set_env(key, value)
|
278
|
+
announce_or_puts(%{$ export #{key}="#{value}"}) if @announce_env
|
279
|
+
original_env[key] = ENV.delete(key)
|
280
|
+
ENV[key] = value
|
281
|
+
end
|
282
|
+
|
283
|
+
def restore_env
|
284
|
+
original_env.each do |key, value|
|
285
|
+
ENV[key] = value
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
def original_env
|
290
|
+
@original_env ||= {}
|
291
|
+
end
|
292
|
+
|
293
|
+
def ensure_newline(str)
|
294
|
+
str.chomp << "\n"
|
295
|
+
end
|
296
|
+
end
|
297
|
+
end
|
data/features/support/env.rb
CHANGED
@@ -1,5 +1,13 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'aruba'
|
2
|
+
# This should only be called if the gem is vendored, otherwise it will probably attempt to write to your
|
3
|
+
# root directory!!!
|
4
|
+
Before do
|
5
|
+
@dirs = [File.expand_path(File.dirname(__FILE__) + '/../../../../../../aruba_test_dir')]
|
6
|
+
end
|
7
|
+
|
8
|
+
=begin
|
9
|
+
#$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
|
10
|
+
#require 'aruba/cucumber'
|
3
11
|
require 'fileutils'
|
4
12
|
|
5
13
|
begin
|
@@ -12,4 +20,5 @@ end
|
|
12
20
|
|
13
21
|
Before do
|
14
22
|
FileUtils.rm(Dir['config/*.yml'])
|
15
|
-
end
|
23
|
+
end
|
24
|
+
=end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Recurs
|
2
|
+
class WidgetGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path("../templates", __FILE__)
|
4
|
+
argument :name, :type => :string, :default => "event"
|
5
|
+
|
6
|
+
def create_instance_model
|
7
|
+
template "instance.rb.tmpl", "app/models/#{name}.rb"
|
8
|
+
#create_file "app/models#{model_name}"
|
9
|
+
end
|
10
|
+
|
11
|
+
def create_instance_views
|
12
|
+
['index', 'show', 'edit', 'new', '_form'].each {|v|
|
13
|
+
template "views/#{v}", "app/views/#{name.downcase}/#{v}.html.haml"
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_instance_route
|
18
|
+
insert_into_file 'config/routes.rb'
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_instance_controller
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
File without changes
|
data/lib/recurs/version.rb
CHANGED
data/recurs.gemspec
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
class RecursWidgetGeneratorTest < Rails::Generators::TestCase
|
2
|
+
tests Recurs::WidgetGenerator
|
3
|
+
destination File.expand_path("../tmp", File.dirname(__FILE__))
|
4
|
+
setup :prepare_destination
|
5
|
+
|
6
|
+
test "Assert all files are properly created" do
|
7
|
+
arguments %w(event)
|
8
|
+
run_generator
|
9
|
+
assert_file "config/initializers/devise.rb"
|
10
|
+
assert_file "config/locales/devise.en.yml"
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
metadata
CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
|
|
6
6
|
- 0
|
7
7
|
- 0
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 0.0.4.
|
9
|
+
- 2
|
10
|
+
version: 0.0.4.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Steve Caney Martin
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-12-
|
18
|
+
date: 2010-12-15 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -34,9 +34,22 @@ dependencies:
|
|
34
34
|
type: :runtime
|
35
35
|
version_requirements: *id001
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
37
|
+
name: actic
|
38
38
|
prerelease: false
|
39
39
|
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: rspec
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
40
53
|
none: false
|
41
54
|
requirements:
|
42
55
|
- - ~>
|
@@ -47,11 +60,11 @@ dependencies:
|
|
47
60
|
- 0
|
48
61
|
version: 2.3.0
|
49
62
|
type: :development
|
50
|
-
version_requirements: *
|
63
|
+
version_requirements: *id003
|
51
64
|
- !ruby/object:Gem::Dependency
|
52
65
|
name: aruba
|
53
66
|
prerelease: false
|
54
|
-
requirement: &
|
67
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
55
68
|
none: false
|
56
69
|
requirements:
|
57
70
|
- - ~>
|
@@ -62,11 +75,11 @@ dependencies:
|
|
62
75
|
- 7
|
63
76
|
version: 0.2.7
|
64
77
|
type: :development
|
65
|
-
version_requirements: *
|
78
|
+
version_requirements: *id004
|
66
79
|
- !ruby/object:Gem::Dependency
|
67
80
|
name: rake
|
68
81
|
prerelease: false
|
69
|
-
requirement: &
|
82
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
70
83
|
none: false
|
71
84
|
requirements:
|
72
85
|
- - ">="
|
@@ -75,11 +88,11 @@ dependencies:
|
|
75
88
|
- 0
|
76
89
|
version: "0"
|
77
90
|
type: :development
|
78
|
-
version_requirements: *
|
91
|
+
version_requirements: *id005
|
79
92
|
- !ruby/object:Gem::Dependency
|
80
93
|
name: cucumber
|
81
94
|
prerelease: false
|
82
|
-
requirement: &
|
95
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
83
96
|
none: false
|
84
97
|
requirements:
|
85
98
|
- - ">="
|
@@ -88,7 +101,7 @@ dependencies:
|
|
88
101
|
- 0
|
89
102
|
version: "0"
|
90
103
|
type: :development
|
91
|
-
version_requirements: *
|
104
|
+
version_requirements: *id006
|
92
105
|
description: Specifiy you're recurrence pattern in symbols and strings and get an ical format recurrence string
|
93
106
|
email:
|
94
107
|
- steve@shakewell.co.uk
|
@@ -101,13 +114,15 @@ extra_rdoc_files: []
|
|
101
114
|
files:
|
102
115
|
- .gitignore
|
103
116
|
- Gemfile
|
117
|
+
- Gemfile.lock
|
104
118
|
- README
|
105
119
|
- Rakefile
|
106
120
|
- features/generators.feature
|
107
121
|
- features/step_definitions/aruba_steps.rb
|
108
122
|
- features/support/aruba.rb
|
109
123
|
- features/support/env.rb
|
110
|
-
- lib/generators/
|
124
|
+
- lib/generators/recurs_widget_generator.rb
|
125
|
+
- lib/generators/templates/controller.rb.tmpl
|
111
126
|
- lib/generators/templates/instance.rb.tmpl
|
112
127
|
- lib/recurs.rb
|
113
128
|
- lib/recurs/consts.rb
|
@@ -119,6 +134,7 @@ files:
|
|
119
134
|
- spec/models/parser_spec.rb
|
120
135
|
- spec/models/rules_spec.rb
|
121
136
|
- spec/spec_helper.rb
|
137
|
+
- test/generator_test.rb
|
122
138
|
has_rdoc: true
|
123
139
|
homepage: http://rubygems.org/gems/recurs
|
124
140
|
licenses: []
|
@@ -160,3 +176,4 @@ test_files:
|
|
160
176
|
- spec/models/parser_spec.rb
|
161
177
|
- spec/models/rules_spec.rb
|
162
178
|
- spec/spec_helper.rb
|
179
|
+
- test/generator_test.rb
|
@@ -1,9 +0,0 @@
|
|
1
|
-
class RecursInstanceGenerator < Rails::Generators::Base
|
2
|
-
source_root File.expand_path("../templates", __FILE__)
|
3
|
-
argument :name, :type => :string, :default => "event"
|
4
|
-
|
5
|
-
def create_instance_model
|
6
|
-
template "instance.rb.tmpl", "app/models/#{name}.rb"
|
7
|
-
#create_file "app/models#{model_name}"
|
8
|
-
end
|
9
|
-
end
|