autoforme 1.5.0 → 1.6.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG +8 -0
- data/MIT-LICENSE +1 -1
- data/lib/autoforme/action.rb +2 -2
- data/lib/autoforme/frameworks/sinatra.rb +7 -2
- data/lib/autoforme/models/sequel.rb +1 -1
- data/lib/autoforme/table.rb +3 -3
- data/lib/autoforme/version.rb +1 -1
- data/spec/associations_spec.rb +4 -4
- data/spec/mtm_spec.rb +51 -0
- data/spec/rails_spec_helper.rb +9 -2
- data/spec/roda_spec_helper.rb +4 -0
- data/spec/sequel_spec_helper.rb +3 -1
- data/spec/unit_spec.rb +9 -9
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f75b662ff8c3d65dfbf9a7e4187aac673af1ffff
|
4
|
+
data.tar.gz: e6d75bd0451be7511938859903bde4311891d0d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 32550500006667014af561745e6d002455aba058846433e3fa5ecaf9f4fdfce1038ee1cd736f713151d0347fb80d2a7665c0c6de8d71a7e2c0d5707bc81d2a9c
|
7
|
+
data.tar.gz: 25122fe3de631c441156721d44fa3544b67f7c2eaae17ede522922aeb5ee13d4304712986373637e6ff984afb7a83c4a7a6a52f498707aa6dcc8de96dd67c0d9
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 1.6.0 (2017-05-04)
|
2
|
+
|
3
|
+
* Fix mtm code when using model classes with different primary key names (jeremyevans)
|
4
|
+
|
5
|
+
* Work with Sinatra 2 (jeremyevans)
|
6
|
+
|
7
|
+
* Use btn-xs class instead of btn-mini for small buttons (jeremyevans)
|
8
|
+
|
1
9
|
=== 1.5.0 (2016-11-18)
|
2
10
|
|
3
11
|
* Allow autocompleting for associated objects even if current class doesn't support autocompleting (jeremyevans)
|
data/MIT-LICENSE
CHANGED
data/lib/autoforme/action.rb
CHANGED
@@ -650,7 +650,7 @@ module AutoForme
|
|
650
650
|
else
|
651
651
|
f.input(assoc, {:dataset=>model.unassociated_mtm_objects(request, assoc, obj), :multiple=>false, :add_blank=>true}.merge(add_opts))
|
652
652
|
end
|
653
|
-
f.button(:value=>'Add', :class=>'btn btn-
|
653
|
+
f.button(:value=>'Add', :class=>'btn btn-xs btn-primary')
|
654
654
|
end.to_s
|
655
655
|
end
|
656
656
|
t << "</div>"
|
@@ -675,7 +675,7 @@ module AutoForme
|
|
675
675
|
t << association_link(mc, assoc_obj)
|
676
676
|
form_attr = form_attributes(:action=>url_for("mtm_update/#{model.primary_key_value(obj)}?association=#{assoc}&remove%5b%5d=#{model.primary_key_value(assoc_obj)}&redir=edit"), :method=>'post', :class => 'mtm_remove_associations', 'data-add'=>"#add_#{assoc}")
|
677
677
|
t << Forme.form(form_attr, form_opts) do |f|
|
678
|
-
f.button(:value=>'Remove', :class=>'btn btn-
|
678
|
+
f.button(:value=>'Remove', :class=>'btn btn-xs btn-danger')
|
679
679
|
end.to_s
|
680
680
|
t << "</li>"
|
681
681
|
end
|
@@ -58,8 +58,13 @@ module AutoForme
|
|
58
58
|
end
|
59
59
|
|
60
60
|
prefix = Regexp.escape(framework.prefix) if framework.prefix
|
61
|
-
|
62
|
-
|
61
|
+
if ::Sinatra::VERSION < '2'
|
62
|
+
prefix = "\\A#{prefix}"
|
63
|
+
suffix = "\\z"
|
64
|
+
end
|
65
|
+
regexp = %r{#{prefix}/([\w:]+)/(\w+)(?:/([\w-]+))?#{suffix}}
|
66
|
+
@controller.get regexp, &block
|
67
|
+
@controller.post regexp, &block
|
63
68
|
end
|
64
69
|
end
|
65
70
|
end
|
@@ -319,7 +319,7 @@ module AutoForme
|
|
319
319
|
subquery = model.db.from(ref[:join_table]).
|
320
320
|
select(ref.qualified_right_key).
|
321
321
|
where(ref.qualified_left_key=>obj.pk)
|
322
|
-
ds = ds.exclude(S.qualify(ref.associated_class.table_name,
|
322
|
+
ds = ds.exclude(S.qualify(ref.associated_class.table_name, ref.associated_class.primary_key)=>subquery)
|
323
323
|
ds = assoc_class.apply_dataset_options(:association, request, ds) if assoc_class
|
324
324
|
ds
|
325
325
|
end
|
data/lib/autoforme/table.rb
CHANGED
@@ -59,9 +59,9 @@ module AutoForme
|
|
59
59
|
end
|
60
60
|
html << "<td>#{val}</td>"
|
61
61
|
end
|
62
|
-
html << "<td><a href=\"#{action.url_for("show/#{model.primary_key_value(obj)}")}\" class=\"btn btn-
|
63
|
-
html << "<td><a href=\"#{action.url_for("edit/#{model.primary_key_value(obj)}")}\" class=\"btn btn-
|
64
|
-
html << "<td><a href=\"#{action.url_for("delete/#{model.primary_key_value(obj)}")}\" class=\"btn btn-
|
62
|
+
html << "<td><a href=\"#{action.url_for("show/#{model.primary_key_value(obj)}")}\" class=\"btn btn-xs btn-info\">Show</a></td>" if show
|
63
|
+
html << "<td><a href=\"#{action.url_for("edit/#{model.primary_key_value(obj)}")}\" class=\"btn btn-xs btn-primary\">Edit</a></td>" if edit
|
64
|
+
html << "<td><a href=\"#{action.url_for("delete/#{model.primary_key_value(obj)}")}\" class=\"btn btn-xs btn-danger\">Delete</a></td>" if delete
|
65
65
|
html << "</tr>"
|
66
66
|
end
|
67
67
|
html << "</tbody></table>"
|
data/lib/autoforme/version.rb
CHANGED
data/spec/associations_spec.rb
CHANGED
@@ -329,7 +329,7 @@ describe AutoForme do
|
|
329
329
|
model Album do
|
330
330
|
columns [:name, :artist]
|
331
331
|
eager_graph :artist
|
332
|
-
order{|type, req| type == :edit ? [:
|
332
|
+
order{|type, req| type == :edit ? [Sequel[:albums][:name], Sequel[:artist][:name]] : [Sequel[:artist][:name], Sequel[:albums][:name]]}
|
333
333
|
display_name{|obj, type| type == :edit ? "#{obj.name} (#{obj.artist.name})" : "#{obj.artist.name}-#{obj.name}"}
|
334
334
|
end
|
335
335
|
end
|
@@ -349,7 +349,7 @@ describe AutoForme do
|
|
349
349
|
model Album do
|
350
350
|
columns [:name, :artist]
|
351
351
|
eager_graph :artist
|
352
|
-
order{|type, req| type == :edit ? [:
|
352
|
+
order{|type, req| type == :edit ? [Sequel[:albums][:name], Sequel[:artist][:name]] : [Sequel[:artist][:name], Sequel[:albums][:name]]}
|
353
353
|
display_name{|obj, type| type == :edit ? "#{obj.name} (#{obj.artist.name})" : "#{obj.artist.name}-#{obj.name}"}
|
354
354
|
end
|
355
355
|
end
|
@@ -647,7 +647,7 @@ describe AutoForme do
|
|
647
647
|
model Album do
|
648
648
|
columns [:name, :artist]
|
649
649
|
eager_graph :artist
|
650
|
-
order :
|
650
|
+
order Sequel[:artist][:name]
|
651
651
|
end
|
652
652
|
end
|
653
653
|
|
@@ -688,7 +688,7 @@ describe AutoForme do
|
|
688
688
|
app_setup do
|
689
689
|
model Artist do
|
690
690
|
eager_graph :albums
|
691
|
-
order :
|
691
|
+
order Sequel[:albums][:name]
|
692
692
|
end
|
693
693
|
model Album do
|
694
694
|
columns [:name, :artist]
|
data/spec/mtm_spec.rb
CHANGED
@@ -405,6 +405,57 @@ describe AutoForme do
|
|
405
405
|
end
|
406
406
|
end
|
407
407
|
|
408
|
+
describe AutoForme do
|
409
|
+
before(:all) do
|
410
|
+
db_setup(:artists=>proc{primary_key :artist_id; String :name}, :albums=>[[:name, :string]], :albums_artists=>[[:album_id, :integer, {:table=>:albums}], [:artist_id, :integer, {:table=>:artists}]])
|
411
|
+
model_setup(:Artist=>[:artists, [[:many_to_many, :albums]]], :Album=>[:albums, [[:many_to_many, :artists]]])
|
412
|
+
end
|
413
|
+
after(:all) do
|
414
|
+
Object.send(:remove_const, :Album)
|
415
|
+
Object.send(:remove_const, :Artist)
|
416
|
+
end
|
417
|
+
|
418
|
+
it "should have basic many to many association editing working" do
|
419
|
+
app_setup do
|
420
|
+
model Artist do
|
421
|
+
mtm_associations :albums
|
422
|
+
end
|
423
|
+
model Album
|
424
|
+
end
|
425
|
+
|
426
|
+
Artist.create(:name=>'Artist1')
|
427
|
+
Album.create(:name=>'Album1')
|
428
|
+
Album.create(:name=>'Album2')
|
429
|
+
Album.create(:name=>'Album3')
|
430
|
+
|
431
|
+
visit("/Artist/mtm_edit")
|
432
|
+
page.title.must_equal 'Artist - Many To Many Edit'
|
433
|
+
click_button "Edit"
|
434
|
+
select("Artist1")
|
435
|
+
click_button "Edit"
|
436
|
+
|
437
|
+
find('h2').text.must_equal 'Edit Albums for Artist1'
|
438
|
+
page.all('select')[0].all('option').map{|s| s.text}.must_equal ["Album1", "Album2", "Album3"]
|
439
|
+
page.all('select')[1].all('option').map{|s| s.text}.must_equal []
|
440
|
+
select("Album1", :from=>"Associate With")
|
441
|
+
click_button "Update"
|
442
|
+
page.html.must_include 'Updated albums association for Artist'
|
443
|
+
Artist.first.albums.map{|x| x.name}.must_equal %w'Album1'
|
444
|
+
|
445
|
+
page.all('select')[0].all('option').map{|s| s.text}.must_equal ["Album2", "Album3"]
|
446
|
+
page.all('select')[1].all('option').map{|s| s.text}.must_equal ["Album1"]
|
447
|
+
select("Album2", :from=>"Associate With")
|
448
|
+
select("Album3", :from=>"Associate With")
|
449
|
+
select("Album1", :from=>"Disassociate From")
|
450
|
+
click_button "Update"
|
451
|
+
Artist.first.refresh.albums.map{|x| x.name}.must_equal %w'Album2 Album3'
|
452
|
+
|
453
|
+
page.all('select')[0].all('option').map{|s| s.text}.must_equal ["Album1"]
|
454
|
+
page.all('select')[1].all('option').map{|s| s.text}.must_equal ["Album2", "Album3"]
|
455
|
+
end
|
456
|
+
|
457
|
+
end
|
458
|
+
|
408
459
|
describe AutoForme do
|
409
460
|
before(:all) do
|
410
461
|
db_setup(:artists=>[[:name, :string]], :albums=>[[:name, :string]], :albums_artists=>[[:album_id, :integer, {:table=>:albums}], [:artist_id, :integer, {:table=>:artists}]])
|
data/spec/rails_spec_helper.rb
CHANGED
@@ -36,8 +36,8 @@ HTML
|
|
36
36
|
layout 'layout'
|
37
37
|
|
38
38
|
def session_set
|
39
|
-
session
|
40
|
-
render :
|
39
|
+
params.each{|k,v| session[k] = v}
|
40
|
+
render :plain=>''
|
41
41
|
end
|
42
42
|
|
43
43
|
AutoForme.for(:rails, self, opts) do
|
@@ -58,6 +58,13 @@ HTML
|
|
58
58
|
config.middleware.delete(Rack::Lock)
|
59
59
|
config.secret_key_base = 'foo'
|
60
60
|
config.eager_load = true
|
61
|
+
if Rails.version > '5'
|
62
|
+
config.action_dispatch.cookies_serializer = :json
|
63
|
+
# Force Rails to dispatch to correct controller
|
64
|
+
ActionDispatch::Routing::RouteSet::Dispatcher.class_eval do
|
65
|
+
define_method(:controller){|_| controller}
|
66
|
+
end
|
67
|
+
end
|
61
68
|
initialize!
|
62
69
|
end
|
63
70
|
[sc, framework]
|
data/spec/roda_spec_helper.rb
CHANGED
data/spec/sequel_spec_helper.rb
CHANGED
@@ -7,7 +7,8 @@ module AutoFormeSpec
|
|
7
7
|
def self.db_setup(tables)
|
8
8
|
db_url = ENV['DATABASE_URL']
|
9
9
|
db_url ||= defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby' ? 'jdbc:sqlite::memory:' : 'sqlite:/'
|
10
|
-
db = Sequel.connect(db_url)
|
10
|
+
db = Sequel.connect(db_url, :identifier_mangling=>false)
|
11
|
+
db.extension :freeze_datasets
|
11
12
|
#db.loggers << Logger.new($stdout)
|
12
13
|
tables.each do |table, table_spec|
|
13
14
|
db.create_table(table) do
|
@@ -22,6 +23,7 @@ module AutoFormeSpec
|
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
26
|
+
db.freeze
|
25
27
|
db
|
26
28
|
end
|
27
29
|
|
data/spec/unit_spec.rb
CHANGED
@@ -68,7 +68,7 @@ describe AutoForme do
|
|
68
68
|
end
|
69
69
|
|
70
70
|
it "should handle order lookup" do
|
71
|
-
model.order_for(:browse, nil).
|
71
|
+
model.order_for(:browse, nil).must_be_nil
|
72
72
|
framework.order :bar
|
73
73
|
model.order_for(:browse, nil).must_equal :bar
|
74
74
|
framework.order{|mod, type, req| [mod.name.to_sym, type, req]}
|
@@ -80,7 +80,7 @@ describe AutoForme do
|
|
80
80
|
end
|
81
81
|
|
82
82
|
it "should handle eager lookup" do
|
83
|
-
model.eager_for(:browse, nil).
|
83
|
+
model.eager_for(:browse, nil).must_be_nil
|
84
84
|
model.eager [:foo]
|
85
85
|
model.eager_for(:browse, nil).must_equal [:foo]
|
86
86
|
model.eager{|type, req| [type, req]}
|
@@ -88,7 +88,7 @@ describe AutoForme do
|
|
88
88
|
end
|
89
89
|
|
90
90
|
it "should handle eager_graph lookup" do
|
91
|
-
model.eager_graph_for(:browse, nil).
|
91
|
+
model.eager_graph_for(:browse, nil).must_be_nil
|
92
92
|
model.eager_graph [:foo]
|
93
93
|
model.eager_graph_for(:browse, nil).must_equal [:foo]
|
94
94
|
model.eager_graph{|type, req| [type, req]}
|
@@ -96,7 +96,7 @@ describe AutoForme do
|
|
96
96
|
end
|
97
97
|
|
98
98
|
it "should handle filter lookup" do
|
99
|
-
model.filter_for.
|
99
|
+
model.filter_for.must_be_nil
|
100
100
|
framework.filter{|mod| lambda{|ds, type, req| [ds, mod.name.to_sym, type, req]}}
|
101
101
|
model.filter_for.call(1, :browse, 2).must_equal [1, :Artist, :browse, 2]
|
102
102
|
model.filter{|ds, type, req| [ds, type, req]}
|
@@ -104,7 +104,7 @@ describe AutoForme do
|
|
104
104
|
end
|
105
105
|
|
106
106
|
it "should handle redirect lookup" do
|
107
|
-
model.redirect_for.
|
107
|
+
model.redirect_for.must_be_nil
|
108
108
|
framework.redirect{|mod| lambda{|obj, type, req| [obj, mod.name.to_sym, type, req]}}
|
109
109
|
model.redirect_for.call(1, :new, 2).must_equal [1, :Artist, :new, 2]
|
110
110
|
model.redirect{|obj, type, req| [obj, type, req]}
|
@@ -112,7 +112,7 @@ describe AutoForme do
|
|
112
112
|
end
|
113
113
|
|
114
114
|
it "should handle display_name lookup" do
|
115
|
-
model.display_name_for.
|
115
|
+
model.display_name_for.must_be_nil
|
116
116
|
framework.display_name :foo
|
117
117
|
model.display_name_for.must_equal :foo
|
118
118
|
framework.display_name{|mod| mod.name.to_sym}
|
@@ -248,7 +248,7 @@ describe AutoForme do
|
|
248
248
|
end
|
249
249
|
|
250
250
|
it "should handle page_header lookup" do
|
251
|
-
model.page_header_for(:show, nil).
|
251
|
+
model.page_header_for(:show, nil).must_be_nil
|
252
252
|
framework.page_header "foo"
|
253
253
|
model.page_header_for(:show, nil).must_equal 'foo'
|
254
254
|
framework.page_header{|mod, type, req| "#{mod} #{type} #{req}"}
|
@@ -260,7 +260,7 @@ describe AutoForme do
|
|
260
260
|
end
|
261
261
|
|
262
262
|
it "should handle page_footer lookup" do
|
263
|
-
model.page_footer_for(:show, nil).
|
263
|
+
model.page_footer_for(:show, nil).must_be_nil
|
264
264
|
framework.page_footer "foo"
|
265
265
|
model.page_footer_for(:show, nil).must_equal 'foo'
|
266
266
|
framework.page_footer{|mod, type, req| "#{mod} #{type} #{req}"}
|
@@ -461,7 +461,7 @@ describe AutoForme::OptsAttributes do
|
|
461
461
|
end
|
462
462
|
|
463
463
|
it "should act as a getter if given no arguments, and setter if given arguments or a block" do
|
464
|
-
@o.foo.
|
464
|
+
@o.foo.must_be_nil
|
465
465
|
@o.foo(1).must_equal 1
|
466
466
|
@o.foo.must_equal 1
|
467
467
|
p = proc{}
|
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.
|
4
|
+
version: 1.6.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:
|
11
|
+
date: 2017-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: forme
|
@@ -267,7 +267,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
267
267
|
version: '0'
|
268
268
|
requirements: []
|
269
269
|
rubyforge_project:
|
270
|
-
rubygems_version: 2.6.
|
270
|
+
rubygems_version: 2.6.11
|
271
271
|
signing_key:
|
272
272
|
specification_version: 4
|
273
273
|
summary: Web Administrative Console for Sinatra/Rails and Sequel
|