mdd 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/generators/mdd/association/USAGE +1 -0
- data/lib/generators/mdd/association/association_generator.rb +21 -20
- data/lib/generators/mdd/sandbox/templates/app/assets/javascripts/mdwa/login_manifest.js +3 -1
- data/lib/generators/mdd/sandbox/templates/app/assets/javascripts/mdwa/system_manifest.js +1 -0
- data/lib/generators/mdd/sandbox/templates/app/assets/javascripts/mdwa/template/all_pages.js +4 -2
- data/lib/generators/mdd/sandbox/templates/app/assets/stylesheets/mdwa/system_manifest.css +1 -2
- data/lib/generators/mdd/sandbox/templates/app/assets/stylesheets/mdwa/template/backend.css.erb +7 -7
- data/lib/generators/mdd/sandbox/templates/app/assets/stylesheets/mdwa/template/template.css.erb +2 -4
- data/lib/generators/mdd/sandbox/templates/app/controllers/a/backend_controller.rb +0 -1
- data/lib/generators/mdd/scaffold/USAGE +15 -5
- data/lib/generators/mdd/scaffold/scaffold_generator.rb +21 -13
- data/lib/generators/mdd/scaffold/templates/controllers/ajax_controller.rb +9 -4
- data/lib/generators/mdd/scaffold/templates/controllers/controller.rb +5 -3
- data/lib/generators/mdd/scaffold/templates/db_migrate/migrate.rb +5 -4
- data/lib/generators/mdd/scaffold/templates/views/_form.html.erb +6 -5
- data/lib/generators/mdd/scaffold/templates/views/_form_fields.html.erb +30 -27
- data/lib/generators/mdd/scaffold/templates/views/_list.html.erb +17 -12
- data/lib/generators/mdd/scaffold/templates/views/create.js.erb +1 -1
- data/lib/generators/mdd/scaffold/templates/views/destroy.js.erb +1 -1
- data/lib/generators/mdd/scaffold/templates/views/index.html.erb +2 -2
- data/lib/generators/mdd/scaffold/templates/views/show.html.erb +18 -18
- data/lib/mdd.rb +4 -1
- data/lib/mdd/generators/model.rb +30 -4
- data/lib/mdd/generators/model_attribute.rb +5 -3
- data/lib/mdd/layout/helper.rb +7 -2
- data/lib/mdd/version.rb +1 -1
- metadata +2 -3
- data/lib/generators/mdd/sandbox/templates/app/assets/javascripts/mdwa/template/nested_form.js +0 -46
@@ -21,6 +21,7 @@ module Mdd
|
|
21
21
|
|
22
22
|
class_option :with_opposite, :desc => 'Generate the opposite relation too. For example, the oposite of belongs_to is has_many.', :type => :boolean, :default => false
|
23
23
|
class_option :skip_rake_migrate, :desc => 'Skips rake db:migrate', :type => :boolean, :default => false
|
24
|
+
class_option :skip_migrations, :desc => 'Skips migration files', :type => :boolean, :default => false
|
24
25
|
class_option :ask, :desc => 'Asks if the opposite should be generated.', :type => :boolean, :default => false
|
25
26
|
|
26
27
|
def initialize(*args, &block)
|
@@ -38,26 +39,7 @@ module Mdd
|
|
38
39
|
# active record generates join tables alphabetically
|
39
40
|
@ordered_models = [@model1, @model2].sort! {|a,b| a.plural_name <=> b.plural_name}
|
40
41
|
end
|
41
|
-
|
42
|
-
|
43
|
-
def migrate
|
44
|
-
@pending_migrations = true
|
45
|
-
case @relation.to_sym
|
46
|
-
when :belongs_to, :nested_one
|
47
|
-
@table = @model1
|
48
|
-
@field = @model2
|
49
|
-
migration_template 'migrate/one_field.rb', "db/migrate/add_#{@field.singular_name.foreign_key}_to_#{@table.plural_name}.rb"
|
50
|
-
when :nested_many
|
51
|
-
@table = @model2
|
52
|
-
@field = @model1
|
53
|
-
migration_template 'migrate/one_field.rb', "db/migrate/add_#{@field.singular_name.foreign_key}_to_#{@table.plural_name}.rb"
|
54
|
-
when :has_and_belongs_to_many
|
55
|
-
migration_template 'migrate/many_to_many.rb', "db/migrate/create_#{many_to_many_table_name}.rb"
|
56
|
-
else
|
57
|
-
@pending_migrations = false
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
42
|
+
|
61
43
|
|
62
44
|
def model
|
63
45
|
case @relation.to_sym
|
@@ -97,6 +79,25 @@ module Mdd
|
|
97
79
|
end
|
98
80
|
|
99
81
|
end
|
82
|
+
|
83
|
+
def migrate
|
84
|
+
unless options.skip_migrations
|
85
|
+
|
86
|
+
@pending_migrations = true
|
87
|
+
case @relation.to_sym
|
88
|
+
when :belongs_to, :nested_one
|
89
|
+
@table = @model1
|
90
|
+
@field = @model2
|
91
|
+
migration_template 'migrate/one_field.rb', "db/migrate/add_#{@field.singular_name.foreign_key}_to_#{@table.plural_name}.rb"
|
92
|
+
when :has_and_belongs_to_many
|
93
|
+
migration_template 'migrate/many_to_many.rb', "db/migrate/create_#{many_to_many_table_name}.rb"
|
94
|
+
else
|
95
|
+
@pending_migrations = false
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
100
101
|
|
101
102
|
def run_rake_db_migrate
|
102
103
|
rake('db:migrate') if !options.skip_rake_migrate and @pending_migrations and yes? 'Run rake db:migrate?'
|
@@ -13,7 +13,7 @@ $(function() {
|
|
13
13
|
|
14
14
|
// notices fadeout
|
15
15
|
$('a#system_notice_close, #system_notice').live('click', function() {
|
16
|
-
$('#system_notice').
|
16
|
+
$('#system_notice').remove();
|
17
17
|
});
|
18
18
|
|
19
19
|
// ajax forms cancel button closes modal window
|
@@ -46,5 +46,7 @@ function defineOrder( form, action, id ) {
|
|
46
46
|
}
|
47
47
|
|
48
48
|
function deleteSystemNotice() {
|
49
|
-
$('#system_notice').fadeOut('slow')
|
49
|
+
$('#system_notice').fadeOut('slow', function() {
|
50
|
+
$('#system_notice').remove();
|
51
|
+
});
|
50
52
|
}
|
data/lib/generators/mdd/sandbox/templates/app/assets/stylesheets/mdwa/template/backend.css.erb
CHANGED
@@ -83,7 +83,7 @@ div#logged_info {
|
|
83
83
|
}
|
84
84
|
|
85
85
|
div#logged_info a {
|
86
|
-
|
86
|
+
color: #fff;
|
87
87
|
}
|
88
88
|
|
89
89
|
div#logged_info .welcome, div#logged_info .logout {
|
@@ -209,8 +209,8 @@ div.inside {
|
|
209
209
|
}
|
210
210
|
|
211
211
|
#leftbar ul li {
|
212
|
-
|
213
|
-
|
212
|
+
width: 100%;
|
213
|
+
border-bottom: 1px solid #4A4A4A;
|
214
214
|
border-top: 1px solid #858585;
|
215
215
|
list-style-type: none;
|
216
216
|
margin: 0;
|
@@ -235,16 +235,16 @@ div.inside {
|
|
235
235
|
}
|
236
236
|
|
237
237
|
#leftbar ul.submenu {
|
238
|
-
|
238
|
+
background: none repeat scroll 0 0 #555555;
|
239
239
|
box-shadow: 0 0 3px #333333 inset;
|
240
240
|
}
|
241
241
|
|
242
242
|
#leftbar ul.submenu li {
|
243
|
-
|
243
|
+
border:none;
|
244
244
|
}
|
245
245
|
|
246
246
|
#leftbar ul.submenu li a:hover {
|
247
|
-
|
247
|
+
background: #5D5D5D !important
|
248
248
|
}
|
249
249
|
|
250
250
|
#leftbar ul li a span {
|
@@ -252,6 +252,6 @@ div.inside {
|
|
252
252
|
}
|
253
253
|
|
254
254
|
#leftbar ul.submenu li a span {
|
255
|
-
|
255
|
+
margin:0;
|
256
256
|
padding-left: 25px;
|
257
257
|
}
|
data/lib/generators/mdd/sandbox/templates/app/assets/stylesheets/mdwa/template/template.css.erb
CHANGED
@@ -85,14 +85,12 @@ a.remove span {
|
|
85
85
|
/* nested_forms buttons */
|
86
86
|
a.add_nested_fields {
|
87
87
|
background: url( <%= asset_path 'mdwa/icons/add.png' %>) no-repeat scroll 0 50% padding-box transparent;
|
88
|
-
padding: 0 0 0
|
88
|
+
padding: 0 0 0 20px;
|
89
89
|
}
|
90
90
|
|
91
91
|
a.remove_nested_fields {
|
92
92
|
background: url(<%= asset_path 'mdwa/icons/remove-icon.png' %>) no-repeat scroll 0 50% padding-box transparent;
|
93
|
-
padding: 0 0 0
|
94
|
-
position: relative;
|
95
|
-
top: 20px;
|
93
|
+
padding: 0 0 0 20px;
|
96
94
|
}
|
97
95
|
|
98
96
|
/* Rails errors */
|
@@ -5,12 +5,8 @@ Description:
|
|
5
5
|
All list have pagination with will_paginate gem.
|
6
6
|
Referenced models also have their relations configured in models and views.
|
7
7
|
|
8
|
-
Restriction:
|
9
|
-
The database must be configured correctly as usual.
|
10
|
-
So, run rake db:create before start.
|
11
|
-
|
12
8
|
Example:
|
13
|
-
It
|
9
|
+
It behaves equally to Rails scaffold if relations are not mentioned.
|
14
10
|
The relations syntax:
|
15
11
|
|
16
12
|
- rails generate mdd:scaffold Product name:string initial_date:date category_id:category:name:belongs
|
@@ -55,3 +51,17 @@ Example:
|
|
55
51
|
attr_accessible :name
|
56
52
|
has_one :product_price
|
57
53
|
...
|
54
|
+
|
55
|
+
|
56
|
+
Restrictions:
|
57
|
+
1. The database must be configured correctly as usual.
|
58
|
+
So, run rake db:create before start.
|
59
|
+
|
60
|
+
2. For associations, you can use the mdd:association generator.
|
61
|
+
It generates several kinds of model relations.
|
62
|
+
Scaffold associations will fail for model associations with specific model names, for example:
|
63
|
+
rails g mdd:scaffold a/groups name:string --model=group
|
64
|
+
rails g mdd:scaffold a/projects name:string group:a/group:name:belongs_to
|
65
|
+
For that reason, you should use:
|
66
|
+
rails g mdd:scaffold a/projects name:string group:a/group,group:name:belongs_to
|
67
|
+
|
@@ -7,13 +7,14 @@ module Mdd
|
|
7
7
|
|
8
8
|
source_root File.expand_path('../templates', __FILE__)
|
9
9
|
|
10
|
-
attr_accessor :model, :
|
10
|
+
attr_accessor :model, :specific_model
|
11
11
|
|
12
12
|
argument :scaffold_name, :type => :string, :banner => "[namespace]/Model"
|
13
13
|
argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
|
14
14
|
|
15
|
+
class_option :model, :desc => 'Use if model is different than the scaffold name. Format: "[namespace]/Model"', :type => :string
|
15
16
|
class_option :ajax, :desc => 'Generates modal forms and AJAX submits.', :type => :boolean, :default => false
|
16
|
-
class_option :
|
17
|
+
class_option :skip_migrations, :desc => 'Skips the generation of a new migration.', :type => :boolean, :default => false
|
17
18
|
class_option :skip_timestamp, :desc => 'Skip timestamp generator on migration files.', :type => :boolean, :default => false
|
18
19
|
class_option :skip_interface, :desc => 'Cretes only models, migrations and associations.', :type => :boolean, :default => false
|
19
20
|
class_option :only_interface, :desc => 'Skips models, associations and migrations.', :type => :boolean, :default => false
|
@@ -22,11 +23,21 @@ module Mdd
|
|
22
23
|
|
23
24
|
super
|
24
25
|
|
25
|
-
@model = Generators::Model.new( scaffold_name )
|
26
|
+
@model = Generators::Model.new( scaffold_name )
|
26
27
|
|
27
28
|
# model_name is not valid
|
28
29
|
print_usage unless @model.valid?
|
29
30
|
|
31
|
+
# verifies specific model name
|
32
|
+
@specific_model = Generators::Model.new( options.model ) unless options.model.blank?
|
33
|
+
if !@specific_model.nil?
|
34
|
+
if !@specific_model.valid?
|
35
|
+
print_usage
|
36
|
+
else
|
37
|
+
@model.specific_model_name = @specific_model.raw
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
30
41
|
# sets the model attributes
|
31
42
|
attributes.each do |attribute|
|
32
43
|
@model.add_attribute Generators::ModelAttribute.new( attribute )
|
@@ -43,8 +54,9 @@ module Mdd
|
|
43
54
|
|
44
55
|
def model
|
45
56
|
unless options.only_interface
|
46
|
-
|
47
|
-
template 'models/
|
57
|
+
model = @model.specific_model || @model
|
58
|
+
template 'models/module.rb', "app/models/#{model.space}.rb" if model.namespace?
|
59
|
+
template 'models/model.rb', "app/models/#{model.space}/#{model.singular_name}.rb"
|
48
60
|
end
|
49
61
|
end
|
50
62
|
|
@@ -76,25 +88,21 @@ module Mdd
|
|
76
88
|
end
|
77
89
|
|
78
90
|
def migration
|
79
|
-
unless options.
|
91
|
+
unless options.skip_migrations or options.only_interface
|
80
92
|
migration_template 'db_migrate/migrate.rb', "db/migrate/create_#{@model.plural_name}.rb"
|
81
93
|
end
|
82
94
|
end
|
83
95
|
|
84
96
|
def associations
|
85
|
-
unless options.
|
97
|
+
unless options.only_interface
|
86
98
|
@model.attributes.select{ |a| a.references? }.each do |attr|
|
87
|
-
#
|
88
|
-
generate "mdd:association #{@model.raw} #{attr.reference_type} #{attr.type.raw} #{'--force' if options.force} --skip_rake_migrate --ask"
|
89
|
-
# else
|
90
|
-
# generate "mdd:association #{attr.type.raw} #{attr.reference_type} #{@model.raw} #{'--force' if options.force} --skip_rake_migrate --ask"
|
91
|
-
# end
|
99
|
+
generate "mdd:association #{@model.raw} #{attr.reference_type} #{attr.type.raw} #{'--skip_migrations' if options.skip_migrations} #{'--force' if options.force} --skip_rake_migrate --ask"
|
92
100
|
end
|
93
101
|
end
|
94
102
|
end
|
95
103
|
|
96
104
|
def run_rake_db_migrate
|
97
|
-
unless options.
|
105
|
+
unless options.skip_migrations or options.only_interface
|
98
106
|
rake('db:migrate') if yes? 'Run rake db:migrate?'
|
99
107
|
end
|
100
108
|
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
class <%= @model.controller_name %>Controller < <%= @inherit_controller || 'ApplicationController' %>
|
2
|
+
|
3
|
+
load_and_authorize_resource :class => "<%= @model.klass %>"
|
2
4
|
|
3
5
|
def index
|
4
6
|
@<%= @model.plural_name %> = <%= @model.klass %>.paginate :page => params[:page]
|
@@ -17,16 +19,19 @@ class <%= @model.controller_name %>Controller < <%= @inherit_controller || 'Appl
|
|
17
19
|
|
18
20
|
def new
|
19
21
|
@<%= @model.singular_name %> = <%= @model.klass %>.new
|
20
|
-
|
22
|
+
<%- @model.attributes.select {|a| a.nested_one?}.each do |attr| -%>
|
23
|
+
@<%= @model.singular_name %>.<%= attr.type.singular_name %> = <%= attr.type.klass %>.new
|
24
|
+
<%- end -%>
|
25
|
+
render :layout => false
|
21
26
|
end
|
22
27
|
|
23
28
|
def edit
|
24
29
|
@<%= @model.singular_name %> = <%= @model.klass %>.find(params[:id])
|
25
|
-
|
30
|
+
render :layout => false
|
26
31
|
end
|
27
32
|
|
28
33
|
def create
|
29
|
-
@<%= @model.singular_name %> = <%= @model.klass %>.new(params[:<%= @model.
|
34
|
+
@<%= @model.singular_name %> = <%= @model.klass %>.new(params[:<%= @model.to_params %>])
|
30
35
|
@system_notice = t('<%= @model.plural_name %>.create_success') if @<%= @model.singular_name %>.save
|
31
36
|
# loads all <%= @model.plural_name %> to display in the list
|
32
37
|
load_list
|
@@ -38,7 +43,7 @@ class <%= @model.controller_name %>Controller < <%= @inherit_controller || 'Appl
|
|
38
43
|
|
39
44
|
def update
|
40
45
|
@<%= @model.singular_name %> = <%= @model.klass %>.find(params[:id])
|
41
|
-
@system_notice = t('<%= @model.plural_name %>.update_success') if @<%= @model.singular_name %>.update_attributes(params[:<%= @model.
|
46
|
+
@system_notice = t('<%= @model.plural_name %>.update_success') if @<%= @model.singular_name %>.update_attributes(params[:<%= @model.to_params %>])
|
42
47
|
|
43
48
|
# loads all <%= @model.plural_name %> to display in the list
|
44
49
|
load_list
|
@@ -1,7 +1,9 @@
|
|
1
1
|
class <%= @model.controller_name %>Controller < <%= @inherit_controller || 'ApplicationController' %>
|
2
|
+
|
3
|
+
load_and_authorize_resource :class => "<%= @model.klass %>"
|
2
4
|
|
3
5
|
def index
|
4
|
-
|
6
|
+
@<%= @model.plural_name %> = <%= @model.klass %>.paginate :page => params[:page]
|
5
7
|
|
6
8
|
respond_to do |format|
|
7
9
|
format.html
|
@@ -20,9 +22,9 @@ class <%= @model.controller_name %>Controller < <%= @inherit_controller || 'Appl
|
|
20
22
|
|
21
23
|
def new
|
22
24
|
@<%= @model.singular_name %> = <%= @model.klass %>.new
|
23
|
-
<%- @model.attributes.select {|a| a.nested_one?}.each do |attr|
|
25
|
+
<%- @model.attributes.select {|a| a.nested_one?}.each do |attr| -%>
|
24
26
|
@<%= @model.singular_name %>.<%= attr.type.singular_name %> = <%= attr.type.klass %>.new
|
25
|
-
<%- end
|
27
|
+
<%- end -%>
|
26
28
|
|
27
29
|
respond_to do |format|
|
28
30
|
format.html
|
@@ -2,11 +2,12 @@ class Create<%= @model.plural_name.camelize %> < ActiveRecord::Migration
|
|
2
2
|
|
3
3
|
def self.up
|
4
4
|
create_table :<%= @model.plural_name %> do |t|
|
5
|
-
<%- @model.simple_attributes.each do |attr|
|
6
|
-
t.<%= attr.migration_field %> :<%= attr.name
|
7
|
-
<%-
|
5
|
+
<%- @model.simple_attributes.each do |attr| -%>
|
6
|
+
t.<%= attr.migration_field %> :<%= attr.name %>
|
7
|
+
<%- end -%>
|
8
|
+
<%- unless options.skip_timestamps -%>
|
8
9
|
t.timestamps
|
9
|
-
<%- end
|
10
|
+
<%- end -%>
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<%%= <%= 'nested_' unless @model.attributes.select{|a| a.nested_many?}.count.zero? %>form_for(
|
1
|
+
<%%= <%= 'nested_' unless @model.attributes.select{|a| a.nested_many?}.count.zero? %>form_for(<%= @model.to_route_object('@') %><%= ', :remote => true, :html => {:class => :mdwa_ajax}' if options.ajax %>) do |f| %>
|
2
2
|
|
3
3
|
<div id="mdwa_error">
|
4
4
|
<%%= render '/template/mdwa/crud_error', :object => @<%= @model.singular_name %> %>
|
@@ -11,10 +11,11 @@
|
|
11
11
|
</div>
|
12
12
|
|
13
13
|
<div class="actions">
|
14
|
-
<%- if !options.ajax
|
15
|
-
<%%= link_to t('system.cancel_button'), <%= @model.object_name.pluralize %>_path, :class => :cancel %>
|
16
|
-
|
17
|
-
|
14
|
+
<%- if !options.ajax -%>
|
15
|
+
<%%= link_to t('system.cancel_button'), <%= @model.object_name.pluralize %>_path, :class => :cancel %>
|
16
|
+
<%- else -%>
|
17
|
+
<%%= link_to t('system.cancel_button'), '#', :class => :cancel %>
|
18
|
+
<%- end -%>
|
18
19
|
<%%= f.submit :class => :button %>
|
19
20
|
</div>
|
20
21
|
|
@@ -1,27 +1,30 @@
|
|
1
|
-
<%- @model.attributes.each do |attr|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
<%- end
|
1
|
+
<%- @model.attributes.each do |attr| -%>
|
2
|
+
<%- unless attr.references? -%>
|
3
|
+
<div class="field">
|
4
|
+
<%%= f.label :<%= attr.name %> %>
|
5
|
+
<%%= f.<%= attr.form_field %> :<%= attr.name %> %>
|
6
|
+
</div>
|
7
|
+
<%- end # unless -%>
|
8
|
+
<%- if attr.belongs_to? -%>
|
9
|
+
<div class="field">
|
10
|
+
<%%= f.label :<%= attr.name %> %>
|
11
|
+
<%%= f.select :<%= attr.name %>,
|
12
|
+
options_for_select( <%= attr.type.klass %>.order('<%= attr.reference %> ASC').collect{ |c| [c.<%= attr.reference %>, c.id] }, f.object.<%= attr.name %> ),
|
13
|
+
:prompt => '-- Select --' %>
|
14
|
+
</div>
|
15
|
+
<%- end # if -%>
|
16
|
+
<%- if attr.nested? -%>
|
17
|
+
<div class="nested">
|
18
|
+
<%%= f.fields_for :<%= (attr.nested_many?) ? attr.type.plural_name : attr.type.singular_name %> do |ff| %>
|
19
|
+
<%%= render '<%= attr.type.space %>/<%= attr.type.plural_name %>/form_fields', :f => ff %>
|
20
|
+
<%- unless attr.nested_one? -%>
|
21
|
+
<%%= ff.link_to_remove t('nested.remove') %>
|
22
|
+
<%- end -%>
|
23
|
+
|
24
|
+
<%% end %>
|
25
|
+
<%- unless attr.nested_one? -%>
|
26
|
+
<%%= f.link_to_add t('nested.add', :name => '<%= attr.type.singular_name %>'), :<%= attr.type.plural_name %> %>
|
27
|
+
<%- end -%>
|
28
|
+
</div>
|
29
|
+
<%- end # if -%>
|
30
|
+
<%- end # model.attributes.each -%>
|
@@ -2,32 +2,37 @@
|
|
2
2
|
<thead>
|
3
3
|
<th class="list_show"><%%= t 'system.index_id' %></th>
|
4
4
|
<th class="list_edit"><%%= t 'system.index_edit' %></th>
|
5
|
-
<%- @model.attributes.each do |attr|
|
5
|
+
<%- @model.attributes.each do |attr| -%>
|
6
6
|
<th><%%= t '<%= @model.plural_name %>.index_<%= attr.name %>' %></th>
|
7
|
-
<%- end
|
7
|
+
<%- end -%>
|
8
8
|
<th class="list_remove"><%%= t 'system.index_remove' %></th>
|
9
9
|
</thead>
|
10
10
|
<%% @<%= @model.plural_name %>.each do |<%= @model.singular_name %>| %>
|
11
11
|
<tr class="<%%= cycle 'odd_line', 'even_line' %>" >
|
12
|
-
<td><%%= link_to <%= @model.singular_name %>.id, <%= @model.object_name %>_path(<%= @model.singular_name %>) <%= ", :class => 'lightbox various fancybox.ajax'" if options.ajax %> %></td>
|
13
|
-
<td><%%= link_to 'Edit', edit_<%= @model.object_name %>_path(<%= @model.singular_name %>) <%= ", :class => 'lightbox various fancybox.ajax'" if options.ajax %> %></td>
|
14
|
-
<%- @model.attributes.each do |attr| %>
|
15
12
|
<td>
|
16
|
-
|
13
|
+
<%%= link_to <%= @model.singular_name %>.id, <%= @model.object_name %>_path(<%= @model.singular_name %>) <%= ", :class => 'lightbox various fancybox.ajax'" if options.ajax %> %>
|
14
|
+
</td>
|
15
|
+
<td>
|
16
|
+
<%%= link_to t('system.index_edit_label'), edit_<%= @model.object_name %>_path(<%= @model.singular_name %>) <%= ", :class => 'lightbox various fancybox.ajax'" if options.ajax %> %>
|
17
|
+
</td>
|
18
|
+
<%- @model.attributes.each do |attr| -%>
|
19
|
+
<td>
|
20
|
+
<%- if !attr.references? -%>
|
17
21
|
<%%= <%= @model.singular_name %>.<%= attr.name %> %>
|
18
|
-
<%- elsif attr.belongs_to? || attr.nested_one?
|
22
|
+
<%- elsif attr.belongs_to? || attr.nested_one? -%>
|
19
23
|
<%%= <%= @model.singular_name %>.<%= attr.type.singular_name %>.<%= attr.reference %> %>
|
20
|
-
<%- elsif attr.has_many? or attr.nested_many?
|
24
|
+
<%- elsif attr.has_many? or attr.nested_many? -%>
|
21
25
|
<ul>
|
22
26
|
<%% <%= @model.singular_name %>.<%= attr.type.plural_name %>.each do |<%= attr.type.singular_name %>| %>
|
23
27
|
<li><%%= <%= attr.type.singular_name %>.<%= attr.reference %> %> </li>
|
24
28
|
<%% end %>
|
25
29
|
</ul>
|
26
|
-
<%- end
|
30
|
+
<%- end -%>
|
27
31
|
</td>
|
28
|
-
<%- end
|
29
|
-
|
30
|
-
|
32
|
+
<%- end -%>
|
33
|
+
<td>
|
34
|
+
<%%= link_to t('system.index_remove_label'), <%= @model.to_route_object %>, :method => :delete, <%= ':remote => true,' if options.ajax %> :data => {:confirm => t('system.index_confirm_deletion')} %>
|
35
|
+
</td>
|
31
36
|
</tr>
|
32
37
|
<%% end %>
|
33
38
|
</table>
|
@@ -2,6 +2,6 @@
|
|
2
2
|
$("#mdwa_error").html("<%%= escape_javascript( render '/template/mdwa/crud_error', :object => @<%= @model.singular_name %> )%>");
|
3
3
|
<%% else %>
|
4
4
|
$.fancybox.close(true);
|
5
|
-
$("#<%= @model.plural_name %>_list").html("<%%= escape_javascript( render
|
5
|
+
$("#<%= @model.plural_name %>_list").html("<%%= escape_javascript( render '<%= @model.plural_name %>' )%>");
|
6
6
|
$('body').append("<%%= escape_javascript( render '/template/mdwa/notice', :notice => @system_notice )%>");
|
7
7
|
<%% end %>
|
@@ -1,2 +1,2 @@
|
|
1
|
-
$("#<%= @model.plural_name %>_list").html("<%%= escape_javascript( render
|
1
|
+
$("#<%= @model.plural_name %>_list").html("<%%= escape_javascript( render '<%= @model.plural_name %>' )%>");
|
2
2
|
$('body').append("<%%= escape_javascript( render '/template/mdwa/notice', :notice => @system_notice )%>");
|
@@ -1,11 +1,11 @@
|
|
1
1
|
<div id="<%= @model.plural_name %>_index" class="mdwa_index">
|
2
2
|
<div class="page_header">
|
3
3
|
<h1><%%= t '<%= @model.plural_name %>.index_title' %></h1>
|
4
|
-
<%- if options.ajax
|
4
|
+
<%- if options.ajax -%>
|
5
5
|
<div class="page_header_right_tab">
|
6
6
|
<%%= link_to t('system.add_by_ajax', :name => '<%= @model.singular_name.humanize %>'), new_<%= @model.object_name %>_path, :class => 'lightbox various fancybox.ajax' %>
|
7
7
|
</div>
|
8
|
-
<%- end
|
8
|
+
<%- end -%>
|
9
9
|
</div>
|
10
10
|
|
11
11
|
<div class="inside">
|
@@ -4,23 +4,23 @@
|
|
4
4
|
</div>
|
5
5
|
|
6
6
|
<div class="inside">
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
7
|
+
<%- @model.attributes.each do |attr| -%>
|
8
|
+
<div class="field">
|
9
|
+
<label><%%= t '<%= @model.plural_name %>.index_<%= attr.name %>' %></label>
|
10
|
+
<span>
|
11
|
+
<%- if !attr.references? -%>
|
12
|
+
<%%= @<%= @model.singular_name %>.<%= attr.name %> %>
|
13
|
+
<%- elsif attr.belongs_to? || attr.nested_one? -%>
|
14
|
+
<%%= @<%= @model.singular_name %>.<%= attr.type.singular_name %>.<%= attr.reference %> %>
|
15
|
+
<%- elsif attr.has_many? or attr.nested_many? -%>
|
16
|
+
<ul>
|
17
|
+
<%% @<%= @model.singular_name %>.<%= attr.type.plural_name %>.each do |<%= attr.type.singular_name %>| %>
|
18
|
+
<li><%%= <%= attr.type.singular_name %>.<%= attr.reference %> %> </li>
|
19
|
+
<%% end %>
|
20
|
+
</ul>
|
21
|
+
<%- end -%>
|
22
|
+
</span>
|
23
|
+
</div>
|
24
|
+
<%- end -%>
|
25
25
|
</div>
|
26
26
|
</div>
|
data/lib/mdd.rb
CHANGED
@@ -17,4 +17,7 @@ module Mdd
|
|
17
17
|
end
|
18
18
|
|
19
19
|
# include the layout selector in ApplicationController
|
20
|
-
ActionController::Base.send :include, Mdd::Layout::Helper
|
20
|
+
ActionController::Base.send :include, Mdd::Layout::Helper
|
21
|
+
ActiveSupport.on_load(:action_controller) do
|
22
|
+
helper_method "current_page"
|
23
|
+
end
|
data/lib/mdd/generators/model.rb
CHANGED
@@ -2,7 +2,7 @@ module Mdd
|
|
2
2
|
module Generators
|
3
3
|
class Model
|
4
4
|
|
5
|
-
attr_accessor :name, :namespace, :attributes
|
5
|
+
attr_accessor :name, :namespace, :attributes, :specific_model_name
|
6
6
|
|
7
7
|
# Sets the variables by the string
|
8
8
|
# Format: <namespace>/<model>, the namespace is optional.
|
@@ -10,17 +10,30 @@ module Mdd
|
|
10
10
|
|
11
11
|
self.namespace = '' # prevents unitialized variable errors
|
12
12
|
self.namespace = arg.split('/').first.camelize if arg.split('/').count > 1
|
13
|
-
|
13
|
+
self.name = arg.split('/').last.singularize.camelize
|
14
14
|
|
15
|
-
|
15
|
+
self.attributes = []
|
16
16
|
end
|
17
17
|
|
18
18
|
def valid?
|
19
19
|
name.underscore =~ /^[a-z][a-z0-9_\/]+$/
|
20
20
|
end
|
21
|
+
|
22
|
+
def specific?
|
23
|
+
!specific_model_name.blank?
|
24
|
+
end
|
25
|
+
|
26
|
+
def specific_model
|
27
|
+
return Model.new( specific_model_name ) if specific?
|
28
|
+
return nil
|
29
|
+
end
|
21
30
|
|
22
31
|
def klass
|
23
|
-
|
32
|
+
if !specific?
|
33
|
+
return (namespace_scope + name)
|
34
|
+
else
|
35
|
+
return specific_model.klass
|
36
|
+
end
|
24
37
|
end
|
25
38
|
|
26
39
|
def controller_name
|
@@ -30,6 +43,19 @@ module Mdd
|
|
30
43
|
def object_name
|
31
44
|
space + '_' + singular_name
|
32
45
|
end
|
46
|
+
|
47
|
+
def to_params
|
48
|
+
if !specific?
|
49
|
+
return object_name
|
50
|
+
else
|
51
|
+
return singular_name
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_route_object(prefix = '')
|
56
|
+
return "#{prefix}#{singular_name}" if !specific? or !namespace?
|
57
|
+
return "[ :#{space}, #{prefix}#{singular_name}]" if specific? and namespace?
|
58
|
+
end
|
33
59
|
|
34
60
|
def raw
|
35
61
|
klass.underscore
|
@@ -7,7 +7,7 @@ module Mdd
|
|
7
7
|
STATIC_TYPES = [:boolean, :date, :datetime, :decimal, :float, :integer, :string, :text, :time, :timestamp, :file]
|
8
8
|
|
9
9
|
# Sets the attributes variables
|
10
|
-
# Format: <name>:<type>:<reference>:<reference_type>
|
10
|
+
# Format: <name>:<type>||<model>:<reference>:<reference_type>
|
11
11
|
def initialize( arg )
|
12
12
|
|
13
13
|
# sets the variables by the string
|
@@ -20,7 +20,7 @@ module Mdd
|
|
20
20
|
|
21
21
|
def name=(value)
|
22
22
|
if references? and !value.end_with?('_id')
|
23
|
-
@name = "#{value}_id"
|
23
|
+
@name = "#{value.singularize}_id"
|
24
24
|
else
|
25
25
|
@name = value
|
26
26
|
end
|
@@ -30,7 +30,9 @@ module Mdd
|
|
30
30
|
if STATIC_TYPES.include?( value.to_sym )
|
31
31
|
@type = value
|
32
32
|
else
|
33
|
-
|
33
|
+
value_split = value.split(',')
|
34
|
+
@type = Model.new( value_split.first ) # instance of model
|
35
|
+
@type.specific_model_name = value_split.last if value_split.count > 1
|
34
36
|
raise "Invalid reference type" if @type.nil?
|
35
37
|
end
|
36
38
|
end
|
data/lib/mdd/layout/helper.rb
CHANGED
@@ -12,8 +12,13 @@ module Mdd
|
|
12
12
|
module ClassMethods
|
13
13
|
def select_layout
|
14
14
|
Base.select_layout "#{request.path_parameters[:controller]}##{request.path_parameters[:action]}"
|
15
|
-
|
16
|
-
|
15
|
+
end
|
16
|
+
|
17
|
+
def current_page
|
18
|
+
"#{request.path_parameters[:controller].gsub('/', '_').underscore}_#{request.path_parameters[:action].underscore}"
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
17
22
|
end
|
18
23
|
|
19
24
|
end
|
data/lib/mdd/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mdd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-07-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -183,7 +183,6 @@ files:
|
|
183
183
|
- lib/generators/mdd/sandbox/templates/app/assets/javascripts/mdwa/template/ajaxloader.js
|
184
184
|
- lib/generators/mdd/sandbox/templates/app/assets/javascripts/mdwa/template/all_pages.js
|
185
185
|
- lib/generators/mdd/sandbox/templates/app/assets/javascripts/mdwa/template/clicable_title.js
|
186
|
-
- lib/generators/mdd/sandbox/templates/app/assets/javascripts/mdwa/template/nested_form.js
|
187
186
|
- lib/generators/mdd/sandbox/templates/app/assets/javascripts/mdwa/template/pagination.js
|
188
187
|
- lib/generators/mdd/sandbox/templates/app/assets/stylesheets/.DS_Store
|
189
188
|
- lib/generators/mdd/sandbox/templates/app/assets/stylesheets/jquery/.DS_Store
|
data/lib/generators/mdd/sandbox/templates/app/assets/javascripts/mdwa/template/nested_form.js
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
$(function() {
|
2
|
-
$('form a.add_nested_fields').live('click', function() {
|
3
|
-
// Setup
|
4
|
-
var assoc = $(this).attr('data-association'); // Name of child
|
5
|
-
var content = $('#' + assoc + '_fields_blueprint').html(); // Fields template
|
6
|
-
|
7
|
-
// Make the context correct by replacing new_<parents> with the generated ID
|
8
|
-
// of each of the parent objects
|
9
|
-
var context = ($(this).closest('.fields').find('input:first').attr('name') || '').replace(new RegExp('\[[a-z]+\]$'), '');
|
10
|
-
|
11
|
-
// context will be something like this for a brand new form:
|
12
|
-
// project[tasks_attributes][1255929127459][assignments_attributes][1255929128105]
|
13
|
-
// or for an edit form:
|
14
|
-
// project[tasks_attributes][0][assignments_attributes][1]
|
15
|
-
if(context) {
|
16
|
-
var parent_names = context.match(/[a-z_]+_attributes/g) || [];
|
17
|
-
var parent_ids = context.match(/[0-9]+/g);
|
18
|
-
|
19
|
-
for(i = 0; i < parent_names.length; i++) {
|
20
|
-
if(parent_ids[i]) {
|
21
|
-
content = content.replace(
|
22
|
-
new RegExp('(\\[' + parent_names[i] + '\\])\\[.+?\\]', 'g'),
|
23
|
-
'$1[' + parent_ids[i] + ']'
|
24
|
-
)
|
25
|
-
}
|
26
|
-
}
|
27
|
-
}
|
28
|
-
|
29
|
-
// Make a unique ID for the new child
|
30
|
-
var regexp = new RegExp('new_' + assoc, 'g');
|
31
|
-
var new_id = new Date().getTime();
|
32
|
-
content = content.replace(regexp, new_id);
|
33
|
-
|
34
|
-
$(this).before(content);
|
35
|
-
return false;
|
36
|
-
});
|
37
|
-
|
38
|
-
$('form a.remove_nested_fields').live('click', function() {
|
39
|
-
var hidden_field = $(this).prev('input[type=hidden]')[0];
|
40
|
-
if(hidden_field) {
|
41
|
-
hidden_field.value = '1';
|
42
|
-
}
|
43
|
-
$(this).closest('.fields').hide();
|
44
|
-
return false;
|
45
|
-
});
|
46
|
-
});
|