autoforme 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 728834eb84059f820d99421609b8f274868fa06f
4
- data.tar.gz: 497582c00ccd77bcb14f716ae5596d32210ae33e
3
+ metadata.gz: b02fdd6446457bcda7559cde3424ffe3cebeffc0
4
+ data.tar.gz: 830e5ab7011c6f853726f3406e46011e5a081c57
5
5
  SHA512:
6
- metadata.gz: e71852cb6b1b049123b388d944789f8678b392724d299d776cd9ea43dd5ef3f6230d81135e11d6589a0610feb957e2838a1a3fd83181676f146089ec8832b837
7
- data.tar.gz: ed0cecfc641fccdd7e1337421c3fdab68d38f4b1cbddbb470744924ffde7e9d35ab5e0c6b8205df8908bea8630a12ce392b9846fadb9f76166e0149495fe16cd
6
+ metadata.gz: ee758d94d0f5faca90f0f496140bed42ee4fb30a3dda54ab77ecc451151a02d336b8a369ac17b6ea4aff803ec1791b2a9255382199d494ed5c2c916c5dfd73ca
7
+ data.tar.gz: 119472906c1fff16ee74cc8babe3656151aadb7ee02cc71241c5263ae39e8fb6e1aeac7cd3b8b6e3785bfbe5474c93afcfd2e224a4191417feaefb72aef2ca95
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ === 1.2.0 (2015-05-21)
2
+
3
+ * Add support for returning browse and search results in CSV format (jeremyevans)
4
+
1
5
  === 1.1.0 (2015-03-23)
2
6
 
3
7
  * Add Framework#register_by_name to allow autoforme to work better when using code reloading in development (jeremyevans)
data/Rakefile CHANGED
@@ -10,53 +10,25 @@ end
10
10
 
11
11
  ### Specs
12
12
 
13
- begin
14
- require "rspec/core/rake_task"
15
-
16
- spec = lambda do |name, files, d|
17
- lib_dir = File.join(File.dirname(File.expand_path(__FILE__)), 'lib')
18
- ENV['RUBYLIB'] ? (ENV['RUBYLIB'] += ":#{lib_dir}") : (ENV['RUBYLIB'] = lib_dir)
19
- desc d
20
- RSpec::Core::RakeTask.new(name) do |t|
21
- t.pattern= files
22
- end
23
- end
24
-
25
- spec_with_cov = lambda do |name, files, d|
26
- spec.call(name, files, d)
27
- desc "#{d} with coverage"
28
- task "#{name}_cov" do
29
- ENV['COVERAGE'] = '1'
30
- Rake::Task[name].invoke
31
- end
32
- end
33
-
34
- task :default => [:spec]
35
- spec_with_cov.call("spec", Dir["spec/*_spec.rb"], "Run specs with sinatra/sequel")
13
+ spec = proc do |env|
14
+ env.each{|k,v| ENV[k] = v}
15
+ sh "#{FileUtils::RUBY} -rubygems -I lib -e 'ARGV.each{|f| require f}' ./spec/*_spec.rb"
16
+ env.each{|k,v| ENV.delete(k)}
17
+ end
18
+ task :default => :roda_spec
36
19
 
37
- desc "Run specs with roda/sequel"
38
- task :roda_spec do
39
- begin
40
- ENV['FRAMEWORK'] = 'roda'
41
- Rake::Task[:spec].invoke
42
- ensure
43
- ENV.delete('FRAMEWORK')
44
- end
45
- end
20
+ desc "Run specs for all frameworks"
21
+ task :spec => [:roda_spec, :sinatra_spec, :rails_spec]
46
22
 
47
- desc "Run specs with rails/sequel"
48
- task :rails_spec do
49
- begin
50
- ENV['FRAMEWORK'] = 'rails'
51
- Rake::Task[:spec].invoke
52
- ensure
53
- ENV.delete('FRAMEWORK')
54
- end
23
+ %w'roda sinatra rails'.each do |framework|
24
+ desc "Run specs with for #{framework} with coverage"
25
+ task "#{framework}_spec" do
26
+ spec.call('FRAMEWORK'=>framework)
55
27
  end
56
28
 
57
- rescue LoadError
58
- task :default do
59
- puts "Must install rspec >=2.0 to run the default task (which runs specs)"
29
+ desc "Run specs with for #{framework}"
30
+ task "#{framework}_spec_cov" do
31
+ spec.call('FRAMEWORK'=>framework, 'COVERAGE'=>'1')
60
32
  end
61
33
  end
62
34
 
@@ -1,3 +1,5 @@
1
+ require 'enum_csv'
2
+
1
3
  module AutoForme
2
4
  # Represents an action on a model in response to a web request.
3
5
  class Action
@@ -20,6 +22,12 @@ module AutoForme
20
22
  # The type symbols related to the current action (e.g. :new, :create).
21
23
  attr_reader :type
22
24
 
25
+ # The type of output, currently nil for normal output, and 'csv' for csv output
26
+ attr_reader :output_type
27
+
28
+ # The filename to use for file output
29
+ attr_reader :output_filename
30
+
23
31
  # Array of strings for all action types currently supported
24
32
  ALL_SUPPORTED_ACTIONS = %w'new create show edit update delete destroy browse search mtm_edit mtm_update association_links autocomplete'.freeze
25
33
 
@@ -174,6 +182,17 @@ module AutoForme
174
182
  label
175
183
  end
176
184
 
185
+ # Return a string in CSV format with the results
186
+ def csv(meth)
187
+ @output_type = 'csv'
188
+ @output_filename = "#{model.link.downcase}_#{normalized_type}.csv"
189
+ columns = model.columns_for(type, request)
190
+ headers = columns.map{|column| column_label_for(type, request, model, column)}
191
+ EnumCSV.csv(model.send(meth, normalized_type, request, :all_results=>true), :headers=>headers) do |obj|
192
+ columns.map{|column| model.column_value(type, request, obj, column)}
193
+ end
194
+ end
195
+
177
196
  # HTML fragment for the default page header, which uses tabs for each supported action.
178
197
  def tabs
179
198
  content = '<ul class="nav nav-tabs">'
@@ -392,6 +411,7 @@ module AutoForme
392
411
  html << '<li class="disabled"><a href="#">Next</a></li>'
393
412
  end
394
413
  html << "</ul>"
414
+ html << "<p><a href=\"#{url_for("#{type}/csv?#{h request.query_string}")}\">CSV Format</a></p>"
395
415
  end
396
416
 
397
417
  # Show page used for browse/search pages.
@@ -403,13 +423,19 @@ module AutoForme
403
423
 
404
424
  # Handle browse action by showing a table containing model objects.
405
425
  def handle_browse
406
- table_page(*model.browse(type, request))
426
+ if request.id == 'csv'
427
+ csv(:browse)
428
+ else
429
+ table_page(*model.browse(type, request))
430
+ end
407
431
  end
408
432
 
409
433
  # Handle browse action by showing a search form if no page is selected, or the correct page of search results
410
434
  # if there is a page selected.
411
435
  def handle_search
412
- if request.id
436
+ if request.id == 'csv'
437
+ csv(:search_results)
438
+ elsif request.id
413
439
  table_page(*model.search_results(normalized_type, request))
414
440
  else
415
441
  page do
@@ -48,8 +48,14 @@ module AutoForme
48
48
  if @autoforme_action = framework.action_for(Request.new(self))
49
49
  if redirect = catch(:redirect){@autoforme_text = @autoforme_action.handle; nil}
50
50
  redirect_to redirect
51
+ elsif @autoforme_action.output_type == 'csv'
52
+ response.headers['Content-Type'] = 'text/csv'
53
+ response.headers['Content-Disposition'] = "attachment; filename=#{@autoforme_action.output_filename}"
54
+ render :text=>@autoforme_text
55
+ elsif @autoforme_action.request.xhr?
56
+ render :text=>@autoforme_text
51
57
  else
52
- render :inline=>"<%=raw @autoforme_text %>", :layout=>!@autoforme_action.request.xhr?
58
+ render :inline=>"<%=raw @autoforme_text %>", :layout=>true
53
59
  end
54
60
  else
55
61
  render :text=>'Unhandled Request', :status=>404
@@ -61,9 +61,15 @@ module AutoForme
61
61
 
62
62
  r.on *current_matchers do
63
63
  @autoforme_text = @autoforme_action.handle
64
- opts = {:content=>@autoforme_text}
65
- opts[:layout] = false if @autoforme_action.request.xhr?
66
- view opts
64
+ if @autoforme_action.output_type == 'csv'
65
+ response['Content-Type'] = 'text/csv'
66
+ response['Content-Disposition'] = "attachment; filename=#{@autoforme_action.output_filename}"
67
+ @autoforme_text
68
+ elsif @autoforme_action.request.xhr?
69
+ @autoforme_text
70
+ else
71
+ view(:content=>@autoforme_text)
72
+ end
67
73
  end
68
74
  end
69
75
  end
@@ -40,9 +40,16 @@ module AutoForme
40
40
  block = lambda do
41
41
  if @autoforme_action = framework.action_for(Request.new(self))
42
42
  @autoforme_text = @autoforme_action.handle
43
- opts = {}
44
- opts[:layout] = false if @autoforme_action.request.xhr?
45
- erb "<%= @autoforme_text %>", opts
43
+
44
+ if @autoforme_action.output_type == 'csv'
45
+ response['Content-Type'] = 'text/csv'
46
+ response['Content-Disposition'] = "attachment; filename=#{@autoforme_action.output_filename}"
47
+ @autoforme_text
48
+ elsif @autoforme_action.request.xhr?
49
+ @autoforme_text
50
+ else
51
+ erb "<%= @autoforme_text %>"
52
+ end
46
53
  else
47
54
  pass
48
55
  end
@@ -76,12 +76,12 @@ module AutoForme
76
76
 
77
77
  # Whether an mtm_edit can be displayed for the given association
78
78
  def supported_mtm_edit?(assoc, request)
79
- mtm_association_select_options(request).map{|x| x.to_s}.include?(assoc)
79
+ mtm_association_select_options(request).map(&:to_s).include?(assoc)
80
80
  end
81
81
 
82
82
  # Whether an mtm_update can occur for the given association
83
83
  def supported_mtm_update?(assoc, request)
84
- supported_mtm_edit?(assoc, request) || inline_mtm_assocs(request).map{|x| x.to_s}.include?(assoc)
84
+ supported_mtm_edit?(assoc, request) || inline_mtm_assocs(request).map(&:to_s).include?(assoc)
85
85
  end
86
86
 
87
87
  # An array of many to many association symbols to handle inline on the edit forms.
@@ -58,7 +58,7 @@ module AutoForme
58
58
  def association?(column)
59
59
  case column
60
60
  when String
61
- model.associations.map{|x| x.to_s}.include?(column)
61
+ model.associations.map(&:to_s).include?(column)
62
62
  else
63
63
  model.association_reflection(column)
64
64
  end
@@ -103,7 +103,7 @@ module AutoForme
103
103
 
104
104
  # Array of association name strings for given association types
105
105
  def association_names(types=SUPPORTED_ASSOCIATION_TYPES)
106
- model.all_association_reflections.select{|r| types.include?(r[:type])}.map{|r| r[:name]}.sort_by{|n| n.to_s}
106
+ model.all_association_reflections.select{|r| types.include?(r[:type])}.map{|r| r[:name]}.sort_by(&:to_s)
107
107
  end
108
108
 
109
109
  # Save the object, returning the object if successful, or nil if not.
@@ -142,7 +142,7 @@ module AutoForme
142
142
  columns[i] = reflection[:name]
143
143
  end
144
144
  end
145
- columns.sort_by{|s| s.to_s}
145
+ columns.sort_by(&:to_s)
146
146
  end
147
147
 
148
148
  # Add a filter restricting access to only rows where the column name
@@ -158,7 +158,7 @@ module AutoForme
158
158
  end
159
159
 
160
160
  # Returning array of matching objects for the current search page using the given parameters.
161
- def search_results(type, request)
161
+ def search_results(type, request, opts={})
162
162
  params = request.params
163
163
  ds = apply_associated_eager(:search, request, all_dataset_for(type, request))
164
164
  columns_for(:search_form, request).each do |c|
@@ -178,17 +178,18 @@ module AutoForme
178
178
  end
179
179
  end
180
180
  end
181
- paginate(type, request, ds)
181
+ paginate(type, request, ds, opts)
182
182
  end
183
183
 
184
184
  # Return array of matching objects for the current page.
185
- def browse(type, request)
186
- paginate(type, request, apply_associated_eager(:browse, request, all_dataset_for(type, request)))
185
+ def browse(type, request, opts={})
186
+ paginate(type, request, apply_associated_eager(:browse, request, all_dataset_for(type, request)), opts)
187
187
  end
188
188
 
189
189
  # Do very simple pagination, by selecting one more object than necessary,
190
190
  # and noting if there is a next page by seeing if more objects are returned than the limit.
191
- def paginate(type, request, ds)
191
+ def paginate(type, request, ds, opts={})
192
+ return ds.all if opts[:all_results]
192
193
  limit = limit_for(type, request)
193
194
  offset = ((request.id.to_i||1)-1) * limit
194
195
  objs = ds.limit(limit+1, (offset if offset > 0)).all
@@ -1,6 +1,6 @@
1
1
  module AutoForme
2
2
  # Version constant, use <tt>AutoForme.version</tt> instead.
3
- VERSION = '1.1.0'.freeze
3
+ VERSION = '1.2.0'.freeze
4
4
 
5
5
  # Returns the version as a frozen string (e.g. '0.1.0')
6
6
  def self.version
@@ -38,17 +38,17 @@ describe AutoForme do
38
38
  click_link 'Show'
39
39
  select 'Album1'
40
40
  click_button 'Show'
41
- page.html.should =~ /Name.+Album1b/m
42
- page.html.should =~ /Artist.+Artist2/m
41
+ page.html.must_match /Name.+Album1b/m
42
+ page.html.must_match /Artist.+Artist2/m
43
43
 
44
44
  click_link 'Search'
45
45
  fill_in 'Name', :with=>'1b'
46
46
  select 'Artist2'
47
47
  click_button 'Search'
48
- page.all('td').map{|s| s.text}.should == ["Album1b", "Artist2", "Show", "Edit", "Delete"]
48
+ page.all('td').map{|s| s.text}.must_equal ["Album1b", "Artist2", "Show", "Edit", "Delete"]
49
49
 
50
50
  click_link 'Album'
51
- page.all('td').map{|s| s.text}.should == ["Album1b", "Artist2", "Show", "Edit", "Delete"]
51
+ page.all('td').map{|s| s.text}.must_equal ["Album1b", "Artist2", "Show", "Edit", "Delete"]
52
52
  end
53
53
 
54
54
  it "should use text boxes for associated objects on new/edit/search forms if associated model uses autocompleting" do
@@ -68,7 +68,7 @@ describe AutoForme do
68
68
  fill_in 'Name', :with=>'Album1'
69
69
  fill_in 'Artist', :with=>a.id.to_s
70
70
  click_button 'Create'
71
- Album.first.artist_id.should == a.id
71
+ Album.first.artist_id.must_equal a.id
72
72
 
73
73
  click_link 'Edit'
74
74
  select 'Album1'
@@ -76,13 +76,13 @@ describe AutoForme do
76
76
  fill_in 'Name', :with=>'Album1b'
77
77
  fill_in 'Artist', :with=>b.id.to_s
78
78
  click_button 'Update'
79
- Album.first.artist_id.should == b.id
79
+ Album.first.artist_id.must_equal b.id
80
80
 
81
81
  click_link 'Search'
82
82
  fill_in 'Name', :with=>'1b'
83
83
  fill_in 'Artist', :with=>b.id.to_s
84
84
  click_button 'Search'
85
- page.all('td').map{|s| s.text}.should == ["Album1b", "TestArtist2", "Show", "Edit", "Delete"]
85
+ page.all('td').map{|s| s.text}.must_equal ["Album1b", "TestArtist2", "Show", "Edit", "Delete"]
86
86
  end
87
87
 
88
88
  it "should be able to used specified name formatting in other model" do
@@ -109,8 +109,8 @@ describe AutoForme do
109
109
  click_link 'Show'
110
110
  select 'Album1'
111
111
  click_button 'Show'
112
- page.html.should =~ /Name.+Album1/m
113
- page.html.should =~ /Artist.+A1A1/m
112
+ page.html.must_match /Name.+Album1/m
113
+ page.html.must_match /Artist.+A1A1/m
114
114
 
115
115
  click_link 'Edit'
116
116
  select 'Album1'
@@ -123,10 +123,10 @@ describe AutoForme do
123
123
  fill_in 'Name', :with=>'1b'
124
124
  select 'A2A2'
125
125
  click_button 'Search'
126
- page.all('td').map{|s| s.text}.should == ["Album1b", "A2A2", "Show", "Edit", "Delete"]
126
+ page.all('td').map{|s| s.text}.must_equal ["Album1b", "A2A2", "Show", "Edit", "Delete"]
127
127
 
128
128
  click_link 'Album'
129
- page.all('td').map{|s| s.text}.should == ["Album1b", "A2A2", "Show", "Edit", "Delete"]
129
+ page.all('td').map{|s| s.text}.must_equal ["Album1b", "A2A2", "Show", "Edit", "Delete"]
130
130
  end
131
131
 
132
132
  it "should be able to used specified name formatting for current association" do
@@ -152,8 +152,8 @@ describe AutoForme do
152
152
  click_link 'Show'
153
153
  select 'Album1'
154
154
  click_button 'Show'
155
- page.html.should =~ /Name.+Album1/m
156
- page.html.should =~ /Artist.+A1A1/m
155
+ page.html.must_match /Name.+Album1/m
156
+ page.html.must_match /Artist.+A1A1/m
157
157
 
158
158
  click_link 'Edit'
159
159
  select 'Album1'
@@ -166,10 +166,10 @@ describe AutoForme do
166
166
  fill_in 'Name', :with=>'1b'
167
167
  select 'A2A2'
168
168
  click_button 'Search'
169
- page.all('td').map{|s| s.text}.should == ["Album1b", "A2A2", "Show", "Edit", "Delete"]
169
+ page.all('td').map{|s| s.text}.must_equal ["Album1b", "A2A2", "Show", "Edit", "Delete"]
170
170
 
171
171
  click_link 'Album'
172
- page.all('td').map{|s| s.text}.should == ["Album1b", "A2A2", "Show", "Edit", "Delete"]
172
+ page.all('td').map{|s| s.text}.must_equal ["Album1b", "A2A2", "Show", "Edit", "Delete"]
173
173
  end
174
174
 
175
175
  it "should be able to eager load associations when loading model" do
@@ -196,8 +196,8 @@ describe AutoForme do
196
196
  click_link 'Show'
197
197
  select 'A1-Album1'
198
198
  click_button 'Show'
199
- page.html.should =~ /Name.+Album1/m
200
- page.html.should =~ /Artist.+A1/m
199
+ page.html.must_match /Name.+Album1/m
200
+ page.html.must_match /Artist.+A1/m
201
201
 
202
202
  click_link 'Edit'
203
203
  select 'A1-Album1'
@@ -210,10 +210,10 @@ describe AutoForme do
210
210
  fill_in 'Name', :with=>'1b'
211
211
  select 'A2'
212
212
  click_button 'Search'
213
- page.all('td').map{|s| s.text}.should == ["Album1b", "A2", "Show", "Edit", "Delete"]
213
+ page.all('td').map{|s| s.text}.must_equal ["Album1b", "A2", "Show", "Edit", "Delete"]
214
214
 
215
215
  click_link 'Album'
216
- page.all('td').map{|s| s.text}.should == ["Album1b", "A2", "Show", "Edit", "Delete"]
216
+ page.all('td').map{|s| s.text}.must_equal ["Album1b", "A2", "Show", "Edit", "Delete"]
217
217
 
218
218
  click_link 'Delete', :match=>:first
219
219
  select 'A2-Album1b'
@@ -271,14 +271,14 @@ describe AutoForme do
271
271
  click_button 'Create'
272
272
 
273
273
  click_link 'Show'
274
- page.all('select option').map{|s| s.text}.should == ['', 'A-Y', 'B-X', 'B-Z']
274
+ page.all('select option').map{|s| s.text}.must_equal ['', 'A-Y', 'B-X', 'B-Z']
275
275
  select 'B-X'
276
276
  click_button 'Show'
277
- page.html.should =~ /Name.+X/m
278
- page.html.should =~ /Artist.+B/m
277
+ page.html.must_match /Name.+X/m
278
+ page.html.must_match /Artist.+B/m
279
279
 
280
280
  click_link 'Edit'
281
- page.all('select option').map{|s| s.text}.should == ['', 'X (B)', 'Y (A)', 'Z (B)']
281
+ page.all('select option').map{|s| s.text}.must_equal ['', 'X (B)', 'Y (A)', 'Z (B)']
282
282
  select 'Z (B)'
283
283
  click_button 'Edit'
284
284
  fill_in 'Name', :with=>'ZZ'
@@ -288,13 +288,13 @@ describe AutoForme do
288
288
  click_link 'Search'
289
289
  select 'A'
290
290
  click_button 'Search'
291
- page.all('tr td:first-child').map{|s| s.text}.should == %w'Y ZZ'
291
+ page.all('tr td:first-child').map{|s| s.text}.must_equal %w'Y ZZ'
292
292
 
293
293
  click_link 'Album'
294
- page.all('tr td:first-child').map{|s| s.text}.should == %w'Y ZZ X'
294
+ page.all('tr td:first-child').map{|s| s.text}.must_equal %w'Y ZZ X'
295
295
 
296
296
  click_link 'Delete', :match=>:first
297
- page.all('select option').map{|s| s.text}.should == ['', 'A-Y', 'A-ZZ', 'B-X']
297
+ page.all('select option').map{|s| s.text}.must_equal ['', 'A-Y', 'A-ZZ', 'B-X']
298
298
  select 'B-X'
299
299
  click_button 'Delete'
300
300
  end
@@ -325,42 +325,42 @@ describe AutoForme do
325
325
 
326
326
  visit("/Album/new")
327
327
  fill_in 'Name', :with=>'E'
328
- page.all('select option').map{|s| s.text}.should == ['', 'X 0', 'Y 0', 'Z 0']
328
+ page.all('select option').map{|s| s.text}.must_equal ['', 'X 0', 'Y 0', 'Z 0']
329
329
  select 'X 0'
330
330
  click_button 'Create'
331
331
  fill_in 'Name', :with=>'D'
332
- page.all('select option').map{|s| s.text}.should == ['', 'X 1', 'Y 0', 'Z 0']
332
+ page.all('select option').map{|s| s.text}.must_equal ['', 'X 1', 'Y 0', 'Z 0']
333
333
  select 'Y 0'
334
334
  click_button 'Create'
335
335
  fill_in 'Name', :with=>'C'
336
- page.all('select option').map{|s| s.text}.should == ['', 'X 1', 'Y 1', 'Z 0']
336
+ page.all('select option').map{|s| s.text}.must_equal ['', 'X 1', 'Y 1', 'Z 0']
337
337
  select 'Y 1'
338
338
  click_button 'Create'
339
339
 
340
340
  click_link 'Show'
341
341
  select 'D'
342
342
  click_button 'Show'
343
- page.html.should =~ /Name.+D/m
344
- page.html.should =~ /Artist.+Y 2/m
343
+ page.html.must_match /Name.+D/m
344
+ page.html.must_match /Artist.+Y 2/m
345
345
 
346
346
  click_link 'Edit'
347
347
  select 'C'
348
348
  click_button 'Edit'
349
- page.all('select option').map{|s| s.text}.should == ['', 'X 1', 'Y 2', 'Z 0']
349
+ page.all('select option').map{|s| s.text}.must_equal ['', 'X 1', 'Y 2', 'Z 0']
350
350
  select 'X 1'
351
351
  click_button 'Update'
352
352
 
353
353
  click_link 'Search'
354
- page.all('select option').map{|s| s.text}.should == ['', 'X 2', 'Y 1', 'Z 0']
354
+ page.all('select option').map{|s| s.text}.must_equal ['', 'X 2', 'Y 1', 'Z 0']
355
355
  select 'X 2'
356
356
  click_button 'Search'
357
- page.all('tr td:first-child').map{|s| s.text}.should == %w'C E'
357
+ page.all('tr td:first-child').map{|s| s.text}.must_equal %w'C E'
358
358
 
359
359
  click_link 'Album'
360
- page.all('tr td:first-child').map{|s| s.text}.should == %w'C D E'
360
+ page.all('tr td:first-child').map{|s| s.text}.must_equal %w'C D E'
361
361
 
362
362
  click_link 'Delete', :match=>:first
363
- page.all('select option').map{|s| s.text}.should == ['', 'C', 'D', 'E']
363
+ page.all('select option').map{|s| s.text}.must_equal ['', 'C', 'D', 'E']
364
364
  select 'C'
365
365
  click_button 'Delete'
366
366
  click_button 'Delete'
@@ -369,13 +369,13 @@ describe AutoForme do
369
369
  Artist.where(:name=>'Y').update(:name=>'A')
370
370
  fill_in 'Name', :with=>'F'
371
371
  select 'Y 1'
372
- proc{click_button 'Create'}.should raise_error(Sequel::NoMatchingRow)
372
+ proc{click_button 'Create'}.must_raise(Sequel::NoMatchingRow)
373
373
 
374
374
  visit("/Album/search")
375
375
  select 'X 1'
376
376
  Artist.where(:name=>'X').update(:name=>'B')
377
377
  click_button 'Search'
378
- page.all('tr td:first-child').map{|s| s.text}.should == []
378
+ page.all('tr td:first-child').map{|s| s.text}.must_equal []
379
379
  end
380
380
 
381
381
  it "should have working one to many and many to one association links on show and edit pages" do
@@ -404,21 +404,21 @@ describe AutoForme do
404
404
  select 'Album1'
405
405
  click_button 'Show'
406
406
  click_link 'Artist1'
407
- page.current_path.should =~ %r{Artist/show/\d+}
407
+ page.current_path.must_match %r{Artist/show/\d+}
408
408
  click_link 'Album1'
409
- page.current_path.should =~ %r{Album/show/\d+}
409
+ page.current_path.must_match %r{Album/show/\d+}
410
410
  click_link 'Artist'
411
- page.current_path.should == '/Artist/browse'
411
+ page.current_path.must_equal '/Artist/browse'
412
412
 
413
413
  click_link 'Edit', :match=>:first
414
414
  select 'Artist1'
415
415
  click_button 'Edit'
416
416
  click_link 'Album1'
417
- page.current_path.should =~ %r{Album/edit/\d+}
417
+ page.current_path.must_match %r{Album/edit/\d+}
418
418
  click_link 'Artist1'
419
- page.current_path.should =~ %r{Artist/edit/\d+}
419
+ page.current_path.must_match %r{Artist/edit/\d+}
420
420
  click_link 'Albums'
421
- page.current_path.should == '/Album/browse'
421
+ page.current_path.must_equal '/Album/browse'
422
422
  end
423
423
 
424
424
  it "should display but not link if the action is not supported " do
@@ -447,8 +447,8 @@ describe AutoForme do
447
447
  visit("/Artist/edit")
448
448
  select 'Artist1'
449
449
  click_button 'Edit'
450
- page.html.should =~ /Album1/
451
- page.html.should_not =~ />edit</
450
+ page.html.must_match /Album1/
451
+ page.html.wont_match />edit</
452
452
  end
453
453
 
454
454
  it "should support lazy loading association links on show and edit pages" do
@@ -471,7 +471,7 @@ describe AutoForme do
471
471
  click_link 'Edit'
472
472
  select 'Artist1'
473
473
  click_button 'Edit'
474
- page.html.should_not =~ /create/
474
+ page.html.wont_match /create/
475
475
  click_link 'Show Associations'
476
476
  click_link 'create'
477
477
  fill_in 'Name', :with=>'Album1'
@@ -482,26 +482,26 @@ describe AutoForme do
482
482
  click_button 'Show'
483
483
  click_link 'Show Associations'
484
484
  click_link 'Artist1'
485
- page.current_path.should =~ %r{Artist/show/\d+}
485
+ page.current_path.must_match %r{Artist/show/\d+}
486
486
  click_link 'Show Associations'
487
487
  click_link 'Album1'
488
- page.current_path.should =~ %r{Album/show/\d+}
488
+ page.current_path.must_match %r{Album/show/\d+}
489
489
  click_link 'Show Associations'
490
490
  click_link 'Artist'
491
- page.current_path.should == '/Artist/browse'
491
+ page.current_path.must_equal '/Artist/browse'
492
492
 
493
493
  click_link 'Edit', :match=>:first
494
494
  select 'Artist1'
495
495
  click_button 'Edit'
496
496
  click_link 'Show Associations'
497
497
  click_link 'Album1'
498
- page.current_path.should =~ %r{Album/edit/\d+}
498
+ page.current_path.must_match %r{Album/edit/\d+}
499
499
  click_link 'Show Associations'
500
500
  click_link 'Artist1'
501
- page.current_path.should =~ %r{Artist/edit/\d+}
501
+ page.current_path.must_match %r{Artist/edit/\d+}
502
502
  click_link 'Show Associations'
503
503
  click_link 'Albums'
504
- page.current_path.should == '/Album/browse'
504
+ page.current_path.must_equal '/Album/browse'
505
505
  end
506
506
  end
507
507
 
@@ -545,17 +545,17 @@ describe AutoForme do
545
545
  click_link 'Show'
546
546
  select 'Album1'
547
547
  click_button 'Show'
548
- page.html.should =~ /Name.+Album1b/m
549
- page.html.should =~ /Artist.+Artist2/m
548
+ page.html.must_match /Name.+Album1b/m
549
+ page.html.must_match /Artist.+Artist2/m
550
550
 
551
551
  click_link 'Search'
552
552
  fill_in 'Name', :with=>'1b'
553
553
  select 'Artist2'
554
554
  click_button 'Search'
555
- page.all('td').map{|s| s.text}.should == ["Album1b", "Artist2", "Show", "Edit", "Delete"]
555
+ page.all('td').map{|s| s.text}.must_equal ["Album1b", "Artist2", "Show", "Edit", "Delete"]
556
556
 
557
557
  click_link 'Album'
558
- page.all('td').map{|s| s.text}.should == ["Album1b", "Artist2", "Show", "Edit", "Delete"]
558
+ page.all('td').map{|s| s.text}.must_equal ["Album1b", "Artist2", "Show", "Edit", "Delete"]
559
559
  end
560
560
 
561
561
  it "should have basic many to one associations working" do
@@ -589,17 +589,17 @@ describe AutoForme do
589
589
  click_link 'Show'
590
590
  select 'Album1'
591
591
  click_button 'Show'
592
- page.html.should =~ /Name.+Album1b/m
593
- page.html.should =~ /Artist.+Artist2/m
592
+ page.html.must_match /Name.+Album1b/m
593
+ page.html.must_match /Artist.+Artist2/m
594
594
 
595
595
  click_link 'Search'
596
596
  fill_in 'Name', :with=>'1b'
597
597
  select 'Artist2'
598
598
  click_button 'Search'
599
- page.all('td').map{|s| s.text}.should == ["Album1b", "Artist2", "Show", "Edit", "Delete"]
599
+ page.all('td').map{|s| s.text}.must_equal ["Album1b", "Artist2", "Show", "Edit", "Delete"]
600
600
 
601
601
  click_link 'Album'
602
- page.all('td').map{|s| s.text}.should == ["Album1b", "Artist2", "Show", "Edit", "Delete"]
602
+ page.all('td').map{|s| s.text}.must_equal ["Album1b", "Artist2", "Show", "Edit", "Delete"]
603
603
  end
604
604
  end
605
605
 
@@ -624,9 +624,9 @@ describe AutoForme do
624
624
 
625
625
  %w'A1 E1 L1 N1'.each{|n| Artist.create(:name=>n)}
626
626
  visit("/Album/new")
627
- page.all('select option').map{|s| s.text}.should == ["", "A1", "E1", "L1"]
627
+ page.all('select option').map{|s| s.text}.must_equal ["", "A1", "E1", "L1"]
628
628
 
629
629
  visit("/Album/edit/#{Album.create(:name=>'Album1').id}")
630
- page.all('select option').map{|s| s.text}.should == ["", "L1", "E1"]
630
+ page.all('select option').map{|s| s.text}.must_equal ["", "L1", "E1"]
631
631
  end
632
632
  end