sferik-merb-admin 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +1 -1
- data/Rakefile +1 -1
- data/app/controllers/main.rb +24 -15
- data/lib/merb-admin.rb +1 -1
- data/spec/controllers/main_spec.rb +0 -4
- data/spec/requests/main_spec.rb +73 -3
- data/spec/spec_helper.rb +11 -1
- metadata +2 -4
- data/spec/fixtures.rb +0 -11
data/README.markdown
CHANGED
@@ -14,7 +14,7 @@ At the command prompt, type:
|
|
14
14
|
|
15
15
|
In your app, add the following dependency to `config/dependencies.rb`:
|
16
16
|
|
17
|
-
dependency "sferik-merb-admin", "0.3.
|
17
|
+
dependency "sferik-merb-admin", "0.3.3", :require_as => "merb-admin"
|
18
18
|
dependency "dm-is-paginated", "0.0.1" # if you want pagination support
|
19
19
|
|
20
20
|
Add the following route to `config/router.rb`:
|
data/Rakefile
CHANGED
@@ -12,7 +12,7 @@ AUTHOR = "Erik Michaels-Ober"
|
|
12
12
|
EMAIL = "sferik@gmail.com"
|
13
13
|
HOMEPAGE = "http://twitter.com/sferik"
|
14
14
|
SUMMARY = "MerbAdmin is a Merb plugin that provides an easy-to-use interface for managing your data."
|
15
|
-
GEM_VERSION = "0.3.
|
15
|
+
GEM_VERSION = "0.3.3"
|
16
16
|
|
17
17
|
spec = Gem::Specification.new do |s|
|
18
18
|
s.rubyforge_project = "merb"
|
data/app/controllers/main.rb
CHANGED
@@ -9,7 +9,7 @@ class MerbAdmin::Main < MerbAdmin::Application
|
|
9
9
|
before :find_object, :only => ['edit', 'update', 'delete', 'destroy']
|
10
10
|
|
11
11
|
def index
|
12
|
-
render(:layout =>
|
12
|
+
render(:layout => 'dashboard')
|
13
13
|
end
|
14
14
|
|
15
15
|
def list
|
@@ -25,7 +25,7 @@ class MerbAdmin::Main < MerbAdmin::Application
|
|
25
25
|
@objects = @abstract_model.find_all(options).reverse
|
26
26
|
else
|
27
27
|
# monkey patch pagination
|
28
|
-
@abstract_model.model.class_eval(
|
28
|
+
@abstract_model.model.class_eval('is_paginated') unless @abstract_model.model.respond_to?(:paginated)
|
29
29
|
@current_page = (params[:page] || 1).to_i
|
30
30
|
options = {
|
31
31
|
:page => @current_page,
|
@@ -39,16 +39,16 @@ class MerbAdmin::Main < MerbAdmin::Application
|
|
39
39
|
end
|
40
40
|
|
41
41
|
@record_count = @abstract_model.count(options)
|
42
|
-
render(:layout =>
|
42
|
+
render(:layout => 'list')
|
43
43
|
end
|
44
44
|
|
45
45
|
def new
|
46
46
|
@object = @abstract_model.new
|
47
|
-
render(:layout =>
|
47
|
+
render(:layout => 'form')
|
48
48
|
end
|
49
49
|
|
50
50
|
def edit
|
51
|
-
render(:layout =>
|
51
|
+
render(:layout => 'form')
|
52
52
|
end
|
53
53
|
|
54
54
|
def create
|
@@ -57,9 +57,10 @@ class MerbAdmin::Main < MerbAdmin::Application
|
|
57
57
|
object.each do |key, value|
|
58
58
|
object[key] = nil if value.blank?
|
59
59
|
end
|
60
|
-
|
60
|
+
has_one_associations = @abstract_model.has_one_associations.map{|association| [association, (params[:associations] || {}).delete(association[:name])]}
|
61
|
+
has_many_associations = @abstract_model.has_many_associations.map{|association| [association, (params[:associations] || {}).delete(association[:name])]}
|
61
62
|
@object = @abstract_model.new(object)
|
62
|
-
if @object.save &&
|
63
|
+
if @object.save && has_one_associations.each{|association, id| update_has_one_association(association, id)} && has_many_associations.each{|association, ids| update_has_many_association(association, ids)}
|
63
64
|
if params[:_continue]
|
64
65
|
redirect(slice_url(:admin_edit, :model_name => @abstract_model.singular_name, :id => @object.id), :message => {:notice => "#{@abstract_model.pretty_name.capitalize} was successfully created"})
|
65
66
|
elsif params[:_add_another]
|
@@ -69,7 +70,7 @@ class MerbAdmin::Main < MerbAdmin::Application
|
|
69
70
|
end
|
70
71
|
else
|
71
72
|
message[:error] = "#{@abstract_model.pretty_name.capitalize} failed to be created"
|
72
|
-
render(:new, :layout =>
|
73
|
+
render(:new, :layout => 'form')
|
73
74
|
end
|
74
75
|
end
|
75
76
|
|
@@ -79,8 +80,9 @@ class MerbAdmin::Main < MerbAdmin::Application
|
|
79
80
|
object.each do |key, value|
|
80
81
|
object[key] = nil if value.blank?
|
81
82
|
end
|
82
|
-
|
83
|
-
|
83
|
+
has_one_associations = @abstract_model.has_one_associations.map{|association| [association, (params[:associations] || {}).delete(association[:name])]}
|
84
|
+
has_many_associations = @abstract_model.has_many_associations.map{|association| [association, (params[:associations] || {}).delete(association[:name])]}
|
85
|
+
if @object.update_attributes(object) && has_one_associations.each{|association, id| update_has_one_association(association, id)} && has_many_associations.each{|association, ids| update_has_many_association(association, ids)}
|
84
86
|
if params[:_continue]
|
85
87
|
redirect(slice_url(:admin_edit, :model_name => @abstract_model.singular_name, :id => @object.id), :message => {:notice => "#{@abstract_model.pretty_name.capitalize} was successfully updated"})
|
86
88
|
elsif params[:_add_another]
|
@@ -90,12 +92,12 @@ class MerbAdmin::Main < MerbAdmin::Application
|
|
90
92
|
end
|
91
93
|
else
|
92
94
|
message[:error] = "#{@abstract_model.pretty_name.capitalize} failed to be updated"
|
93
|
-
render(:edit, :layout =>
|
95
|
+
render(:edit, :layout => 'form')
|
94
96
|
end
|
95
97
|
end
|
96
98
|
|
97
99
|
def delete
|
98
|
-
render(:layout =>
|
100
|
+
render(:layout => 'form')
|
99
101
|
end
|
100
102
|
|
101
103
|
def destroy
|
@@ -133,7 +135,7 @@ class MerbAdmin::Main < MerbAdmin::Application
|
|
133
135
|
@properties.each do |property|
|
134
136
|
next unless property[:name] == key.to_sym
|
135
137
|
if property[:type] == :boolean
|
136
|
-
options.merge!(key.to_sym => (value ==
|
138
|
+
options.merge!(key.to_sym => (value == 'true'))
|
137
139
|
elsif property[:type] == :integer && property[:flag_map]
|
138
140
|
options.merge!(key.to_sym => value.to_sym)
|
139
141
|
end
|
@@ -150,8 +152,8 @@ class MerbAdmin::Main < MerbAdmin::Application
|
|
150
152
|
condition_statement << "#{property[:name]} LIKE ?"
|
151
153
|
conditions << "%#{params[:query]}%"
|
152
154
|
end
|
153
|
-
conditions.unshift(condition_statement.join(
|
154
|
-
options.merge!(:conditions => conditions) unless conditions == [
|
155
|
+
conditions.unshift(condition_statement.join(' OR '))
|
156
|
+
options.merge!(:conditions => conditions) unless conditions == ['']
|
155
157
|
end
|
156
158
|
|
157
159
|
def merge_sort(options)
|
@@ -159,6 +161,13 @@ class MerbAdmin::Main < MerbAdmin::Application
|
|
159
161
|
options.merge!(:order => [params[:sort].to_sym.send(params[:sort_reverse] ? :desc : :asc)])
|
160
162
|
end
|
161
163
|
|
164
|
+
def update_has_one_association(association, id)
|
165
|
+
model = MerbAdmin::AbstractModel.new(association[:child_model])
|
166
|
+
if object = model.find(id)
|
167
|
+
object.update_attributes(association[:child_key] => @object.id)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
162
171
|
def update_has_many_association(association, ids)
|
163
172
|
# Remove all of the associated items
|
164
173
|
relationship = @object.send(association[:name])
|
data/lib/merb-admin.rb
CHANGED
@@ -23,7 +23,7 @@ if defined?(Merb::Plugins)
|
|
23
23
|
|
24
24
|
# Slice metadata
|
25
25
|
self.description = "MerbAdmin is a Merb plugin that provides an easy-to-use interface for managing your data."
|
26
|
-
self.version = "0.3.
|
26
|
+
self.version = "0.3.3"
|
27
27
|
self.author = "Erik Michaels-Ober"
|
28
28
|
|
29
29
|
# Stub classes loaded hook - runs before LoadClasses BootLoader
|
@@ -20,10 +20,6 @@ describe MerbAdmin::Main do
|
|
20
20
|
@controller.app_path_for(:image).should == "#{Merb.root}/public/slices/merb-admin/images"
|
21
21
|
@controller.app_path_for(:javascript).should == "#{Merb.root}/public/slices/merb-admin/javascripts"
|
22
22
|
@controller.app_path_for(:stylesheet).should == "#{Merb.root}/public/slices/merb-admin/stylesheets"
|
23
|
-
|
24
|
-
@controller.slice_path_for(:image).should == "#{Merb.root}/public/images"
|
25
|
-
@controller.slice_path_for(:javascript).should == "#{Merb.root}/public/javascripts"
|
26
|
-
@controller.slice_path_for(:stylesheet).should == "#{Merb.root}/public/stylesheets"
|
27
23
|
end
|
28
24
|
|
29
25
|
end
|
data/spec/requests/main_spec.rb
CHANGED
@@ -4,6 +4,13 @@ given "a player exists" do
|
|
4
4
|
@player = Player.gen
|
5
5
|
end
|
6
6
|
|
7
|
+
given "two drafts exist" do
|
8
|
+
@drafts = []
|
9
|
+
2.times do
|
10
|
+
@drafts << Draft.gen
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
7
14
|
given "two players exist" do
|
8
15
|
@players = []
|
9
16
|
2.times do
|
@@ -11,13 +18,21 @@ given "two players exist" do
|
|
11
18
|
end
|
12
19
|
end
|
13
20
|
|
14
|
-
given "three teams
|
21
|
+
given "three teams exist" do
|
15
22
|
@teams = []
|
16
23
|
3.times do
|
17
24
|
@teams << Team.gen
|
18
25
|
end
|
19
26
|
end
|
20
27
|
|
28
|
+
given "a player exists and two drafts exist" do
|
29
|
+
@player = Player.gen
|
30
|
+
@drafts = []
|
31
|
+
2.times do
|
32
|
+
@drafts << Draft.gen
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
21
36
|
given "a player exists and three teams exist" do
|
22
37
|
@player = Player.gen
|
23
38
|
@teams = []
|
@@ -265,7 +280,7 @@ describe "MerbAdmin" do
|
|
265
280
|
end
|
266
281
|
end
|
267
282
|
|
268
|
-
describe "new with has-
|
283
|
+
describe "new with has-one association", :given => "two drafts exist" do
|
269
284
|
before(:each) do
|
270
285
|
@response = request(url(:admin_new, :model_name => "player"))
|
271
286
|
end
|
@@ -275,6 +290,15 @@ describe "MerbAdmin" do
|
|
275
290
|
end
|
276
291
|
end
|
277
292
|
|
293
|
+
describe "new with has-many association", :given => "three teams exist" do
|
294
|
+
before(:each) do
|
295
|
+
@response = request(url(:admin_new, :model_name => "player"))
|
296
|
+
end
|
297
|
+
|
298
|
+
it "should respond sucessfully" do
|
299
|
+
@response.should be_successful
|
300
|
+
end
|
301
|
+
end
|
278
302
|
|
279
303
|
describe "edit", :given => "a player exists" do
|
280
304
|
before(:each) do
|
@@ -290,6 +314,16 @@ describe "MerbAdmin" do
|
|
290
314
|
end
|
291
315
|
end
|
292
316
|
|
317
|
+
describe "edit with has-one association", :given => "a player exists and two drafts exist" do
|
318
|
+
before(:each) do
|
319
|
+
@response = request(url(:admin_edit, :model_name => "player", :id => @player.id))
|
320
|
+
end
|
321
|
+
|
322
|
+
it "should respond sucessfully" do
|
323
|
+
@response.should be_successful
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
293
327
|
describe "edit with has-many association", :given => "a player exists and three teams exist" do
|
294
328
|
before(:each) do
|
295
329
|
@response = request(url(:admin_edit, :model_name => "player", :id => @player.id))
|
@@ -353,7 +387,25 @@ describe "MerbAdmin" do
|
|
353
387
|
end
|
354
388
|
end
|
355
389
|
|
356
|
-
describe "create with has-
|
390
|
+
describe "create with has-one association", :given => "two drafts exist" do
|
391
|
+
before(:each) do
|
392
|
+
@response = request(url(:admin_create, :model_name => "player"), :method => "post", :params => {:player => {:name => "Jackie Robinson", :number => 42, :team_id => 1, :position => :second, :sex => :male}, :associations => {:draft => @drafts[0].id}})
|
393
|
+
end
|
394
|
+
|
395
|
+
it "should create a new object" do
|
396
|
+
Player.first.should_not be_nil
|
397
|
+
end
|
398
|
+
|
399
|
+
it "should include correct associations" do
|
400
|
+
Player.first.draft.should == @drafts[0]
|
401
|
+
end
|
402
|
+
|
403
|
+
it "should not include incorrect associations" do
|
404
|
+
Player.first.draft.should_not == @drafts[1]
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
408
|
+
describe "create with has-many association", :given => "three teams exist" do
|
357
409
|
before(:each) do
|
358
410
|
@response = request(url(:admin_create, :model_name => "league"), :method => "post", :params => {:league => {:name => "National League"}, :associations => {:teams => [@teams[0].id, @teams[1].id]}})
|
359
411
|
end
|
@@ -424,6 +476,24 @@ describe "MerbAdmin" do
|
|
424
476
|
end
|
425
477
|
end
|
426
478
|
|
479
|
+
describe "update with has-one association", :given => "a player exists and two drafts exist" do
|
480
|
+
before(:each) do
|
481
|
+
@response = request(url(:admin_update, :model_name => "player", :id => @player.id), :method => "put", :params => {:player => {:name => "Jackie Robinson", :number => 42, :team_id => 1, :position => :second, :sex => :male}, :associations => {:draft => @drafts[0].id}})
|
482
|
+
end
|
483
|
+
|
484
|
+
it "should update an object that already exists" do
|
485
|
+
Player.first(:id => @player.id).name.should eql("Jackie Robinson")
|
486
|
+
end
|
487
|
+
|
488
|
+
it "should include correct associations" do
|
489
|
+
Player.first.draft.should == @drafts[0]
|
490
|
+
end
|
491
|
+
|
492
|
+
it "should not include incorrect associations" do
|
493
|
+
Player.first.draft.should_not == @drafts[1]
|
494
|
+
end
|
495
|
+
end
|
496
|
+
|
427
497
|
describe "update with has-many association", :given => "a league exists and three teams exist" do
|
428
498
|
before(:each) do
|
429
499
|
@response = request(url(:admin_update, :model_name => "league", :id => @league.id), :method => "put", :params => {:league => {:name => "National League"}, :associations => {:teams => [@teams[0].id, @teams[1].id]}})
|
data/spec/spec_helper.rb
CHANGED
@@ -4,7 +4,17 @@ require 'merb-slices'
|
|
4
4
|
require 'merb-helpers'
|
5
5
|
require 'merb-assets'
|
6
6
|
require 'spec'
|
7
|
-
|
7
|
+
|
8
|
+
# Required for fixtures
|
9
|
+
require 'dm-sweatshop'
|
10
|
+
require 'dm-types'
|
11
|
+
require 'dm-aggregates'
|
12
|
+
require 'dm-validations'
|
13
|
+
require 'dm-is-paginated'
|
14
|
+
|
15
|
+
Dir[File.join(File.dirname(__FILE__), 'fixtures', '**', '*_fixture.rb').to_s].each do |fixture_file|
|
16
|
+
require fixture_file
|
17
|
+
end
|
8
18
|
|
9
19
|
# Add merb-admin.rb to the search path
|
10
20
|
Merb::Plugins.config[:merb_slices][:auto_register] = true
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sferik-merb-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erik Michaels-Ober
|
@@ -72,7 +72,6 @@ files:
|
|
72
72
|
- spec/fixtures/league_fixture.rb
|
73
73
|
- spec/fixtures/player_fixture.rb
|
74
74
|
- spec/fixtures/team_fixture.rb
|
75
|
-
- spec/fixtures.rb
|
76
75
|
- spec/requests
|
77
76
|
- spec/requests/main_spec.rb
|
78
77
|
- spec/spec_helper.rb
|
@@ -184,7 +183,6 @@ files:
|
|
184
183
|
- public/stylesheets/widgets.css
|
185
184
|
has_rdoc: false
|
186
185
|
homepage: http://twitter.com/sferik
|
187
|
-
licenses:
|
188
186
|
post_install_message: |
|
189
187
|
********************************************************************************
|
190
188
|
|
@@ -212,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
212
210
|
requirements: []
|
213
211
|
|
214
212
|
rubyforge_project: merb
|
215
|
-
rubygems_version: 1.
|
213
|
+
rubygems_version: 1.2.0
|
216
214
|
signing_key:
|
217
215
|
specification_version: 3
|
218
216
|
summary: MerbAdmin is a Merb plugin that provides an easy-to-use interface for managing your data.
|
data/spec/fixtures.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
# Learn more at http://github.com/datamapper/dm-more/tree/master/dm-sweatshop
|
2
|
-
require 'dm-sweatshop'
|
3
|
-
# Learn more at http://github.com/datamapper/dm-more/tree/master/dm-types
|
4
|
-
require 'dm-types'
|
5
|
-
require 'dm-aggregates'
|
6
|
-
require 'dm-validations'
|
7
|
-
require 'dm-is-paginated'
|
8
|
-
|
9
|
-
Dir['spec/fixtures/**/*_fixture.rb'].sort.each do |fixture_file|
|
10
|
-
require fixture_file
|
11
|
-
end
|