autoforme 1.3.0 → 1.4.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: d5d8f0b4739dec3afd2a850017943c1e63e611ef
4
- data.tar.gz: be9289f7da3c2769d9326df35f8e88c266795bf3
3
+ metadata.gz: 299ca55f54b46bf0629229262853d3dc19a5bc64
4
+ data.tar.gz: c136195e2191c628c71b0e66e8dad48db965ac37
5
5
  SHA512:
6
- metadata.gz: e9de31745c4580fd52d51f5222d314e566995d270e5ba9d68a3f32016a9e61571b89f9ceca871abb45fc4f9c8555f30149dacab5076ed60e82afb98457318c8f
7
- data.tar.gz: 5426d2b558346e01c15dc85a480f7811369bc3fbf555ad76d3a1045810fdd2b38c1fee8e3ac65cff84afa4b9bd4b46934abaaede05989655a119c29b9d7cf7a4
6
+ metadata.gz: 0fe74271b2d60e2269041d3c8c17300538d043eb5901d97e4c73936a088c8f9d9524c9c09419edac647188eb3ffecc6b2fee1b91ccf05516694e43c16c0ebdb7
7
+ data.tar.gz: f4680d5384dfa5984579f4d7022b956d1e0d6c077b3069de0543b5a8d4260d0bb23e662839f7992f434cd2542cb8ce3766cc8cc32c2d0d94203424071996a2d9
data/CHANGELOG CHANGED
@@ -1,3 +1,13 @@
1
+ === 1.4.0 (2016-05-18)
2
+
3
+ * Handle selecting a blank object during show/edit/delete/mtm_edit by showing the same page (jeremyevans)
4
+
5
+ * Support UUID primary keys (badosu, jeremyevans) (#6)
6
+
7
+ * Add Request#env for getting the environment for the request (jeremyevans)
8
+
9
+ * Handle search results pagination correctly when an id parameter is used (badosu, jeremyevans) (#5)
10
+
1
11
  === 1.3.0 (2016-02-02)
2
12
 
3
13
  * Add support for running with --enable-frozen-string-literal on ruby 2.3 (jeremyevans)
data/Rakefile CHANGED
@@ -18,7 +18,11 @@ end
18
18
  task :default => :roda_spec
19
19
 
20
20
  desc "Run specs for all frameworks"
21
- task :spec => [:roda_spec, :sinatra_spec, :rails_spec]
21
+ spec_tasks = [:roda_spec, :sinatra_spec]
22
+ if RUBY_VERSION >= '1.9'
23
+ spec_tasks << :rails_spec
24
+ end
25
+ task :spec => spec_tasks
22
26
 
23
27
  %w'roda sinatra rails'.each do |framework|
24
28
  desc "Run specs with for #{framework} with coverage"
@@ -14,6 +14,7 @@ module AutoForme
14
14
  @action_type = @params['autoforme_action']
15
15
  @path = @env['SCRIPT_NAME']
16
16
  @id = @params['id']
17
+ @id = nil if @id && @id.empty?
17
18
  end
18
19
 
19
20
  # Implement redirects in the Rails support using throw/catch, similar to
@@ -20,7 +20,9 @@ module AutoForme
20
20
  else
21
21
  @env['PATH_INFO']
22
22
  end
23
- @id = @params['id'] || ($1 if remaining_path =~ %r{\A\/(\w+)\z})
23
+
24
+ path_id = $1 if remaining_path =~ %r{\A\/([\w-]+)\z}
25
+ set_id(path_id)
24
26
  end
25
27
 
26
28
  # Redirect to the given path
@@ -15,7 +15,7 @@ module AutoForme
15
15
  @model = captures[0]
16
16
  @action_type = captures[1]
17
17
  @path = @env['SCRIPT_NAME']
18
- @id = @params[:id] || captures[2]
18
+ set_id(captures[2])
19
19
  end
20
20
 
21
21
  # Redirect to the given path
@@ -58,8 +58,8 @@ module AutoForme
58
58
  end
59
59
 
60
60
  prefix = Regexp.escape(framework.prefix) if framework.prefix
61
- @controller.get %r{\A#{prefix}/(\w+)/(\w+)(?:/(\w+))?\z}, &block
62
- @controller.post %r{\A#{prefix}/(\w+)/(\w+)(?:/(\w+))?\z}, &block
61
+ @controller.get %r{\A#{prefix}/(\w+)/(\w+)(?:/([\w-]+))?\z}, &block
62
+ @controller.post %r{\A#{prefix}/(\w+)/(\w+)(?:/([\w-]+))?\z}, &block
63
63
  end
64
64
  end
65
65
  end
@@ -193,7 +193,8 @@ module AutoForme
193
193
  def paginate(type, request, ds, opts={})
194
194
  return ds.all if opts[:all_results]
195
195
  limit = limit_for(type, request)
196
- offset = ((request.id.to_i||1)-1) * limit
196
+ %r{\/(\d+)\z} =~ request.env['PATH_INFO']
197
+ offset = (($1||1).to_i - 1) * limit
197
198
  objs = ds.limit(limit+1, (offset if offset > 0)).all
198
199
  next_page = false
199
200
  if objs.length > limit
@@ -20,10 +20,12 @@ module AutoForme
20
20
  attr_reader :path
21
21
 
22
22
  # The id related to the request, which is usually the primary
23
- # key of the related model instance, but for browse/search
24
- # pages is used as the page
23
+ # key of the related model instance.
25
24
  attr_reader :id
26
25
 
26
+ # The HTTP request environment hash
27
+ attr_reader :env
28
+
27
29
  # The params for the current request
28
30
  attr_reader :params
29
31
 
@@ -51,5 +53,18 @@ module AutoForme
51
53
  def set_flash_now_error(message)
52
54
  @controller.flash.now[:error] = message
53
55
  end
56
+
57
+ private
58
+
59
+ def set_id(path_id)
60
+ @id = path_id
61
+ if param_id = @params['id']
62
+ case @action_type
63
+ when 'show', 'edit', 'delete', 'mtm_edit'
64
+ @id = param_id
65
+ end
66
+ end
67
+ @id = nil if @id && @id.empty?
68
+ end
54
69
  end
55
70
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module AutoForme
4
4
  # Version constant, use <tt>AutoForme.version</tt> instead.
5
- VERSION = '1.3.0'.freeze
5
+ VERSION = '1.4.0'.freeze
6
6
 
7
7
  # Returns the version as a frozen string (e.g. '0.1.0')
8
8
  def self.version
data/spec/basic_spec.rb CHANGED
@@ -20,12 +20,14 @@ describe AutoForme do
20
20
 
21
21
  click_link 'Show'
22
22
  page.title.must_equal 'Artist - Show'
23
+ click_button 'Show'
23
24
  select 'TestArtistNew'
24
25
  click_button 'Show'
25
26
  page.html.must_match /Name.+TestArtistNew/m
26
27
 
27
28
  click_link 'Edit'
28
29
  page.title.must_equal 'Artist - Edit'
30
+ click_button 'Edit'
29
31
  select 'TestArtistNew'
30
32
  click_button 'Edit'
31
33
  fill_in 'Name', :with=>'TestArtistUpdate'
@@ -142,6 +144,23 @@ describe AutoForme do
142
144
  click_button 'Edit'
143
145
  end
144
146
 
147
+ it "should support showing models with custom ids" do
148
+ db_setup(:tracks => proc do
149
+ column :id, String, :primary_key => true
150
+ column :name, String
151
+ end)
152
+
153
+ model_setup(:Track => [:tracks])
154
+ Track.unrestrict_primary_key
155
+ app_setup(Track)
156
+
157
+ Track.create(:id => 'dark-side', :name => 'The Dark Side of the Moon')
158
+
159
+ visit("/Track/show/dark-side")
160
+
161
+ page.html.must_include 'The Dark Side of the Moon'
162
+ end
163
+
145
164
  it "should support custom redirects" do
146
165
  app_setup(Artist) do
147
166
  redirect do |obj, type, req|
@@ -162,6 +181,7 @@ describe AutoForme do
162
181
  click_button 'Update'
163
182
  page.current_path.must_match %r{/Artist/show/\d}
164
183
  click_link 'Delete'
184
+ click_button 'Delete'
165
185
  select 'TestArtistNew'
166
186
  click_button 'Delete'
167
187
  click_button 'Delete'
@@ -312,28 +332,32 @@ describe AutoForme do
312
332
  end
313
333
  5.times{|i| Artist.create(:name=>i.to_s)}
314
334
  visit("/Artist/browse")
315
- first('li.disabled a').text.must_equal 'Previous'
335
+ pager_class = lambda do |text|
336
+ node = all('ul.pager li').select{|n| n[:class] if n.find('a').text == text}.first
337
+ node[:class] if node
338
+ end
339
+ pager_class.call("Previous").must_equal 'disabled'
316
340
  page.all('tr td:first-child').map{|s| s.text}.must_equal %w'0 1'
317
341
  click_link 'Next'
318
342
  page.all('tr td:first-child').map{|s| s.text}.must_equal %w'2 3'
319
343
  click_link 'Next'
320
344
  page.all('tr td:first-child').map{|s| s.text}.must_equal %w'4'
321
- first('li.disabled a').text.must_equal 'Next'
345
+ pager_class.call("Next").must_equal 'disabled'
322
346
  click_link 'Previous'
323
347
  page.all('tr td:first-child').map{|s| s.text}.must_equal %w'2 3'
324
348
  click_link 'Previous'
325
349
  page.all('tr td:first-child').map{|s| s.text}.must_equal %w'0 1'
326
- first('li.disabled a').text.must_equal 'Previous'
350
+ pager_class.call("Previous").must_equal 'disabled'
327
351
 
328
352
  click_link 'Search'
329
353
  click_button 'Search'
330
354
  page.all('tr td:first-child').map{|s| s.text}.must_equal %w'0 1 2'
331
355
  click_link 'Next'
332
356
  page.all('tr td:first-child').map{|s| s.text}.must_equal %w'3 4'
333
- first('li.disabled a').text.must_equal 'Next'
357
+ pager_class.call("Next").must_equal 'disabled'
334
358
  click_link 'Previous'
335
359
  page.all('tr td:first-child').map{|s| s.text}.must_equal %w'0 1 2'
336
- first('li.disabled a').text.must_equal 'Previous'
360
+ pager_class.call("Previous").must_equal 'disabled'
337
361
  end
338
362
 
339
363
  it "should support specifying supported actions" do
data/spec/mtm_spec.rb CHANGED
@@ -37,6 +37,7 @@ describe AutoForme do
37
37
 
38
38
  visit("/Artist/mtm_edit")
39
39
  page.title.must_equal 'Artist - Many To Many Edit'
40
+ click_button "Edit"
40
41
  select("Artist1")
41
42
  click_button "Edit"
42
43
 
@@ -5,16 +5,23 @@ require 'logger'
5
5
  module AutoFormeSpec
6
6
  TYPE_MAP = {:string=>String, :integer=>Integer, :decimal=>Numeric}
7
7
  def self.db_setup(tables)
8
- db = Sequel.connect(ENV['DATABASE_URL'] || 'sqlite:/')
8
+ db_url = ENV['DATABASE_URL']
9
+ db_url ||= defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby' ? 'jdbc:sqlite::memory:' : 'sqlite:/'
10
+ db = Sequel.connect(db_url)
9
11
  #db.loggers << Logger.new($stdout)
10
- tables.each do |table, columns|
12
+ tables.each do |table, table_spec|
11
13
  db.create_table(table) do
12
- primary_key :id
13
- columns.each do |name, type, opts|
14
- column name, TYPE_MAP[type], opts||{}
14
+ if table_spec.kind_of? Enumerable
15
+ primary_key :id
16
+ table_spec.each do |name, type, opts|
17
+ column name, TYPE_MAP[type], opts||{}
18
+ end
19
+ elsif table_spec.respond_to? :call
20
+ self.instance_eval(&table_spec)
15
21
  end
16
22
  end
17
23
  end
24
+
18
25
  db
19
26
  end
20
27
 
@@ -22,7 +29,7 @@ module AutoFormeSpec
22
29
  models.each do |name, (table, associations)|
23
30
  klass = Class.new(Sequel::Model(db[table]))
24
31
  Object.const_set(name, klass)
25
- klass.class_eval do
32
+ klass.class_eval do
26
33
  if associations
27
34
  associations.each do |type, assoc, opts|
28
35
  associate(type, assoc, opts||{})
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: autoforme
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-02 00:00:00.000000000 Z
11
+ date: 2016-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: forme