mdd 3.0.20 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. data/app/helpers/mdwa_helper.rb +1 -1
  2. data/app/views/mdwa/requirements/index.html.erb +3 -1
  3. data/app/views/template/mdwa/_autocomplete_multiple_tag.html.erb +1 -1
  4. data/app/views/template/mdwa/_autocomplete_tag.html.erb +6 -0
  5. data/lib/generators/mdwa/requirement/templates/requirement.rb +1 -0
  6. data/lib/generators/mdwa/sandbox/sandbox_generator.rb +21 -11
  7. data/lib/generators/mdwa/sandbox/templates/app/assets/javascripts/mdwa/template/all_pages.js +15 -3
  8. data/lib/generators/mdwa/sandbox/templates/app/assets/javascripts/mdwa/template/clicable_title.js +1 -1
  9. data/lib/generators/mdwa/sandbox/templates/app/assets/javascripts/mdwa/template/pagination.js +1 -1
  10. data/lib/generators/mdwa/sandbox/templates/app/assets/stylesheets/mdwa/template/template.css.erb +25 -1
  11. data/lib/generators/mdwa/sandbox/templates/config/locales/mdwa.en.yml +2 -1
  12. data/lib/generators/mdwa/sandbox/templates/config/locales/{mdwa_model_specific.en.yml → mdwa.specific.en.yml} +0 -0
  13. data/lib/generators/mdwa/templates/templates/scaffold/{controller.rb → controller.erb} +0 -0
  14. data/lib/generators/mdwa/templates/templates/scaffold/{helper.rb → helper.erb} +0 -0
  15. data/lib/generators/mdwa/templates/templates/scaffold/{model.rb → model.erb} +2 -1
  16. data/lib/generators/mdwa/templates/templates/scaffold/views/_form_fields.html.erb +3 -3
  17. data/lib/generators/mdwa/templates/templates/scaffold/views/_list.html.erb +2 -2
  18. data/lib/generators/mdwa/templates/templates/scaffold/views/create.js.erb +1 -1
  19. data/lib/generators/mdwa/templates/templates/scaffold/views/destroy.js.erb +1 -1
  20. data/lib/generators/mdwa/templates/templates/scaffold/views/edit.html.erb +1 -1
  21. data/lib/generators/mdwa/templates/templates/scaffold/views/index.html.erb +1 -1
  22. data/lib/generators/mdwa/templates/templates/scaffold/views/new.html.erb +1 -1
  23. data/lib/generators/mdwa/templates/templates/scaffold/views/show.html.erb +5 -5
  24. data/lib/generators/mdwa/templates/templates/scaffold/views/update.js.erb +1 -1
  25. data/lib/generators/mdwa/templates/templates_generator.rb +5 -5
  26. data/lib/generators/mdwa/transform/transform_generator.rb +83 -35
  27. data/lib/generators/mdwa/user_scaffold/templates/migrate.erb +30 -0
  28. data/lib/generators/mdwa/user_scaffold/user_scaffold_generator.rb +1 -1
  29. data/lib/mdwa/dsl/entity.rb +8 -19
  30. data/lib/mdwa/dsl/requirement.rb +5 -1
  31. data/lib/mdwa/version.rb +1 -1
  32. data/mdd.gemspec +2 -2
  33. metadata +11 -11
  34. data/lib/generators/mdwa/user_scaffold/templates/migrate.rb +0 -16
@@ -11,7 +11,7 @@ module MdwaHelper
11
11
  end
12
12
 
13
13
  def encode_results_to_autocomplete(results, field_name)
14
- return results.collect{ |c| "{label: '#{c.send field_name}', value: '#{c.id}'}" }.join( ',' ).html_safe
14
+ results.collect{ |c| "{label: \"#{c.send(field_name).html_safe}\", value: \"#{c.id}\"}" }.join( ',' ).html_safe
15
15
  end
16
16
 
17
17
  def file_icon_path( file_name, size = 'medium' )
@@ -10,6 +10,7 @@
10
10
  <tr>
11
11
  <th>Requirement title</th>
12
12
  <th>Description</th>
13
+ <th>Non-functional concerns</th>
13
14
  <th>Entities</th>
14
15
  <th>Users</th>
15
16
  </tr>
@@ -17,6 +18,7 @@
17
18
  <tr>
18
19
  <td><%= requirement.summary %></td>
19
20
  <td><%= requirement.description %></td>
21
+ <td><%= requirement.non_functional_description %></td>
20
22
  <td><%= requirement.entities.join ', ' %></td>
21
23
  <td><%= requirement.users.join ', ' %></td>
22
24
  </tr>
@@ -28,4 +30,4 @@
28
30
 
29
31
  </div>
30
32
 
31
- </div>
33
+ </div>
@@ -40,7 +40,7 @@
40
40
  }
41
41
  });
42
42
 
43
- $( ".<%= dom_element_id %>_remove_autocomplete").live( "click", function() {
43
+ $( ".<%= dom_element_id %>_remove_autocomplete").on( "click", function() {
44
44
  $(this).parent().remove();
45
45
  });
46
46
  });
@@ -13,6 +13,12 @@
13
13
  return false;
14
14
  }
15
15
  });
16
+
17
+ $("<%= dom_element %>").on("blur", function() {
18
+ if($(this).val() == "" ) {
19
+ $('<%= dom_element_id %>').val("").trigger('change');
20
+ }
21
+ });
16
22
  });
17
23
 
18
24
  </script>
@@ -5,6 +5,7 @@ MDWA::DSL.requirements.register do |r|
5
5
  r.summary = '<%= @summary %>'
6
6
  r.alias = '<%= @requirement.alias %>' # alias is the unique requirement name and it's created automatically, you can override it with this argument.
7
7
  r.description = %q{Detailed description of the requirement.}
8
+ r.non_functional_description = %q{Explain the non-functional concerns involved in this requirement.}
8
9
 
9
10
  <%- unless options.no_comments %>
10
11
  #
@@ -144,7 +144,27 @@ module Mdwa
144
144
  # language files
145
145
  copy_file 'config/locales/devise.en.yml', 'config/locales/devise.en.yml'
146
146
  copy_file 'config/locales/mdwa.en.yml', 'config/locales/mdwa.en.yml'
147
- copy_file 'config/locales/mdwa.en.yml', 'config/locales/mdwa_model_specific.en.yml'
147
+ create_file 'config/locales/mdwa.specific.en.yml', "en:\n"
148
+
149
+ # set production pre-compile directives
150
+ production = []
151
+ production << "\n # Precompile directives"
152
+ production << " #####################"
153
+ production << " #Javascripts"
154
+ production << " #####################"
155
+ production << " assets = []"
156
+ production << " assets << 'mdwa/login_manifest.js'"
157
+ production << " assets << 'mdwa/public_manifest.js'"
158
+ production << " assets << 'mdwa/system_manifest.js'"
159
+ production << " #####################"
160
+ production << " #CSS"
161
+ production << " #####################"
162
+ production << " assets << 'mdwa/login_manifest.css'"
163
+ production << " assets << 'mdwa/public_manifest.css'"
164
+ production << " assets << 'mdwa/system_manifest.js'"
165
+ production << " config.assets.precompile += assets"
166
+ production << "\n"
167
+ inject_into_file 'config/environments/production.rb', production.join("\n"), :after => "config.assets.digest = true\n"
148
168
  end
149
169
 
150
170
  def routes
@@ -163,16 +183,6 @@ module Mdwa
163
183
 
164
184
  root :to => 'home#index'
165
185
  end
166
-
167
- # Software visualization
168
- namespace :mdwa do
169
- controller :requirements do
170
- get 'requirements/index' => 'requirements#index', :as => 'requirements'
171
- get 'requirements/:alias' => 'requirements#show', :as => 'requirement'
172
- end
173
-
174
- root :to => 'requirements#index'
175
- end
176
186
  "
177
187
  end
178
188
  end
@@ -1,7 +1,7 @@
1
1
  $(function() {
2
2
 
3
3
  // all .toggle links must have a rel attribute to identify what element will toggle
4
- $('a.toggle').live('click', function() {
4
+ $('a.toggle').on('click', function() {
5
5
  $($(this).attr('rel')).toggle();
6
6
  });
7
7
 
@@ -12,14 +12,19 @@ $(function() {
12
12
  });
13
13
 
14
14
  // notices fadeout
15
- $('a#system_notice_close, #system_notice').live('click', function() {
15
+ $('a#system_notice_close, #system_notice').on('click', function() {
16
16
  $('#system_notice').remove();
17
17
  });
18
18
 
19
19
  // ajax forms cancel button closes modal window
20
- $('.mdwa_ajax a.cancel').live('click', function() {
20
+ $('.mdwa_ajax a.cancel').on('click', function() {
21
21
  $.fancybox.close(true);
22
22
  });
23
+
24
+ // set focus on modalbox form
25
+ $(document).bind("ajaxComplete", function() {
26
+ setFocusOnForm();
27
+ });
23
28
 
24
29
  });
25
30
 
@@ -50,3 +55,10 @@ function deleteSystemNotice() {
50
55
  $('#system_notice').remove();
51
56
  });
52
57
  }
58
+
59
+ // focus on the first text input field in the first field on the page
60
+ function setFocusOnForm() {
61
+ $(':input:enabled:visible:first', "div.filtros").focus();
62
+ $(':input:enabled:visible:first', "div.mdwa_new").focus();
63
+ $(':input:enabled:visible:first', "div.mdwa_edit").focus();
64
+ }
@@ -3,7 +3,7 @@ $(function() {
3
3
  if($(this).val() == '')
4
4
  $(this).val($(this).attr('title'));
5
5
  });
6
- $('.clicable_title').live({
6
+ $('.clicable_title').on({
7
7
  blur: function() {
8
8
  if($(this).val() == '') $(this).val($(this).attr('title'));
9
9
  },
@@ -1,5 +1,5 @@
1
1
  $(function() {
2
- $(".pagination a").live("click", function() {
2
+ $(".pagination a").on("click", function() {
3
3
  $.getScript(this.href);
4
4
  return false;
5
5
  });
@@ -269,4 +269,28 @@ a#system_notice_close {
269
269
  /* Modalbox */
270
270
  .fancybox-inner {
271
271
  background: #fff;
272
- }
272
+ }
273
+
274
+ /* List formatting */
275
+ th.list_show {
276
+ width: 5%;
277
+ }
278
+
279
+ th.list_edit {
280
+ width: 5%;
281
+ }
282
+
283
+ td.list_edit {
284
+ text-align: center !important;
285
+ }
286
+
287
+ td.list_edit a {
288
+ background: url("<%= asset_path "mdwa/icons/edit.png" %>") no-repeat;
289
+ padding-left: 24px;
290
+ }
291
+
292
+ td.list_remove a {
293
+ background: url("<%= asset_path "mdwa/icons/delete.png" %>") no-repeat;
294
+ padding-left: 24px;
295
+ padding-bottom: 1px;
296
+ }
@@ -3,7 +3,7 @@ en:
3
3
  email_label: "E-mail:"
4
4
  password_label: "Password:"
5
5
  login_button_label: "Login"
6
- login_text_pre_form: "Welcome to system. <br />Please login to access this app."
6
+ login_text_pre_form: "Welcome to a MDWA software. <br />Please login to access this app."
7
7
 
8
8
  system:
9
9
  error: "error"
@@ -20,6 +20,7 @@ en:
20
20
  index_confirm_deletion: "Are you sure?"
21
21
  add_by_ajax: "Add new %{name}"
22
22
  edit_by_ajax: "Edit %{name}"
23
+ no_file: "No file"
23
24
 
24
25
  administrators:
25
26
  edit_title: "Editing account: %{name}"
@@ -1,10 +1,11 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  ===entity_code===
3
+
3
4
  class <%= @model.klass %> < <%= !@entity.user? ? 'ActiveRecord::Base' : 'User' %>
4
5
 
5
6
  <%- # model attributes -%>
6
7
  <%- unless @model.attributes.count.zero? -%>
7
- attr_accessible <%= @model.attributes.collect {|a| ":" + a.name }.join(', ') %>
8
+ attr_accessible <%= @model.attributes.select{|a| !['id', 'created_at', 'updated_at'].include?(a.name)}.collect {|a| ":" + a.name }.join(', ') %>
8
9
  <%- end -%>
9
10
  <%- # paperclip file uploads -%>
10
11
  <%- unless @model.attributes.select{|attr| attr.type.to_sym == :file}.count.zero? -%>
@@ -1,7 +1,7 @@
1
1
  ===entity_code===
2
- <%- @model.attributes.select{|a| a.name != 'id' and a.name != 'created_at' and a.name != 'updated_at'}.each do |attr| -%>
2
+ <%- @model.attributes.select{|a| !['id', 'created_at', 'updated_at'].include?(a.name)}.each do |attr| -%>
3
3
  <div class="field">
4
- <%%= f.label :<%= attr.name %>, t('<%= @model.plural_name %>.edit_<%= attr.name %>') %>
4
+ <%%= f.label :<%= attr.name %>, t('<%= @model.plural_name %>.edit.<%= attr.name %>') %>
5
5
  <%- if attr.type.to_sym == :file -%>
6
6
  <%% unless @<%= @model.singular_name %>.new_record? %>
7
7
  <span><%%= link_to image_tag(file_icon_path(@<%= @model.singular_name %>.<%= attr.name %>_file_name)), @<%= @model.singular_name %>.<%= attr.name %>.url, :target => '_blank' %></span>
@@ -15,7 +15,7 @@
15
15
  <%- next if assoc.skip_views? %>
16
16
  <%- if assoc.belongs_to? -%>
17
17
  <div class="field">
18
- <%%= f.label :<%= assoc.model2.singular_name.foreign_key %>, t('<%= @model.plural_name %>.edit_<%= assoc.model2.singular_name %>') %>
18
+ <%%= f.label :<%= assoc.model2.singular_name.foreign_key %>, t('<%= @model.plural_name %>.edit.<%= assoc.model2.singular_name %>') %>
19
19
  <%%= f.select :<%= assoc.model2.singular_name.foreign_key %>,
20
20
  options_for_select( <%= assoc.model2.klass %>.order('<%= assoc.reference_field %> ASC').collect{ |c| [c.<%= assoc.reference_field %>, c.id] }, f.object.<%= assoc.model2.singular_name.foreign_key %> ),
21
21
  :prompt => '-- Select --' %>
@@ -3,11 +3,11 @@
3
3
  <thead>
4
4
  <th class="list_show"><%%= t 'system.index_id' %></th>
5
5
  <th class="list_edit"><%%= t 'system.index_edit' %></th>
6
- <%- @model.attributes.select{|a| a.name != 'id' and a.name != 'created_at' and a.name != 'updated_at'}.each do |attr| -%>
6
+ <%- @model.attributes.select{|a| !['id', 'created_at', 'updated_at'].include?(a.name)}.each do |attr| -%>
7
7
  <th><%%= t '<%= @model.plural_name %>.index_<%= attr.name %>' %></th>
8
8
  <%- end -%>
9
9
  <%- @model.associations.each do |assoc| -%>
10
- <th><%%= t '<%= @model.plural_name %>.index_<%= assoc.model2.singular_name %>' %></th>
10
+ <th><%%= t '<%= @model.plural_name %>.index.<%= assoc.model2.singular_name %>' %></th>
11
11
  <%- end -%>
12
12
  <th class="list_remove"><%%= t 'system.index_remove' %></th>
13
13
  </thead>
@@ -1,6 +1,6 @@
1
1
  ===entity_code===
2
2
  <%% if @<%= @model.singular_name %>.errors.any? %>
3
- $("#mdwa_error").html("<%%= escape_javascript( render '/template/mdwa/crud_error', :object => @<%= @model.singular_name %> )%>");
3
+ $("#mdwa_error").html("<%%= j( render '/template/mdwa/crud_error', :object => @<%= @model.singular_name %> )%>");
4
4
  <%% else %>
5
5
  $.fancybox.close(true);
6
6
  $("#<%= @model.plural_name %>_list").html("<%%= j( render 'list' )%>");
@@ -1,3 +1,3 @@
1
1
  ===entity_code===
2
2
  $("#<%= @model.plural_name %>_list").html("<%%= j( render 'list' )%>");
3
- $('body').append("<%%= escape_javascript( render '/template/mdwa/notice', :notice => @system_notice )%>");
3
+ $('body').append("<%%= j( render '/template/mdwa/notice', :notice => @system_notice )%>");
@@ -1,7 +1,7 @@
1
1
  ===entity_code===
2
2
  <div id="<%= @model.plural_name %>_edit" class="mdwa_edit">
3
3
  <div class="page_header">
4
- <h1><%%= t('<%= @model.plural_name %>.edit_title') %></h1>
4
+ <h1><%%= t('<%= @model.plural_name %>.title.edit') %></h1>
5
5
  </div>
6
6
 
7
7
  <div class="inside">
@@ -1,7 +1,7 @@
1
1
  ===entity_code===
2
2
  <div id="<%= @model.plural_name %>_index" class="mdwa_index">
3
3
  <div class="page_header">
4
- <h1><%%= t '<%= @model.plural_name %>.index_title' %></h1>
4
+ <h1><%%= t '<%= @model.plural_name %>.title.index' %></h1>
5
5
  <%- if @entity.ajax -%>
6
6
  <div class="page_header_right_tab">
7
7
  <%%= link_to t('system.add_by_ajax', :name => '<%= @model.singular_name.humanize %>'), new_<%= @model.object_name %>_path, :class => 'lightbox various fancybox.ajax' %>
@@ -1,7 +1,7 @@
1
1
  ===entity_code===
2
2
  <div id="<%= @model.plural_name %>_new" class="mdwa_new">
3
3
  <div class="page_header">
4
- <h1><%%= t('<%= @model.plural_name %>.new_title') %></h1>
4
+ <h1><%%= t('<%= @model.plural_name %>.title.new') %></h1>
5
5
  </div>
6
6
 
7
7
  <div class="inside">
@@ -1,18 +1,18 @@
1
1
  ===entity_code===
2
2
  <div id="<%= @model.plural_name %>_show" class="mdwa_show">
3
3
  <div class="page_header">
4
- <h1><%%= t('<%= @model.plural_name %>.show_title') %></h1>
4
+ <h1><%%= t('<%= @model.plural_name %>.title.show') %></h1>
5
5
  </div>
6
6
 
7
7
  <div class="inside">
8
- <%- @model.attributes.select{|a| a.name != 'id' and a.name != 'created_at' and a.name != 'updated_at'}.each do |attr| -%>
8
+ <%- @model.attributes.each do |attr| -%>
9
9
  <div class="field">
10
- <label><%%= t '<%= @model.plural_name %>.show_<%= attr.name %>' %></label>
10
+ <label><%%= t '<%= @model.plural_name %>.show.<%= attr.name %>' %></label>
11
11
  <%- if attr.type.to_sym == :file -%>
12
12
  <%% unless @<%= @model.singular_name %>.<%= attr.name %>.nil? %>
13
13
  <span><%%= link_to image_tag(file_icon_path(@<%= @model.singular_name %>.<%= attr.name %>_file_name)), @<%= @model.singular_name %>.<%= attr.name %>.url, :target => '_blank' %></span>
14
14
  <%% else %>
15
- No file.
15
+ <%%= t('system.no_file') %>
16
16
  <%% end %>
17
17
  <%- else -%>
18
18
  <span><%%= @<%= @model.singular_name %>.<%= attr.name %> %></span>
@@ -21,7 +21,7 @@
21
21
  <%- end -%>
22
22
  <%- @model.associations.each do |assoc| -%>
23
23
  <div class="field">
24
- <label><%%= t '<%= @model.plural_name %>.show_<%= assoc.model2.singular_name %>' %></label>
24
+ <label><%%= t '<%= @model.plural_name %>.show.<%= assoc.model2.singular_name %>' %></label>
25
25
  <span>
26
26
  <%- if assoc.belongs_to? || assoc.nested_one? -%>
27
27
  <%%= @<%= @model.singular_name %>.<%= assoc.model2.singular_name %>.<%= assoc.reference_field %> unless @<%= @model.singular_name %>.<%= assoc.model2.singular_name %>.nil? %>
@@ -1,6 +1,6 @@
1
1
  ===entity_code===
2
2
  <%% if @<%= @model.singular_name %>.errors.any? %>
3
- $("#mdwa_error").html("<%%= escape_javascript( render '/template/mdwa/crud_error', :object => @<%= @model.singular_name %> )%>");
3
+ $("#mdwa_error").html("<%%= j( render '/template/mdwa/crud_error', :object => @<%= @model.singular_name %> )%>");
4
4
  <%% else %>
5
5
  if( $('#<%= @model.plural_name %>_list').length > 0 ) {
6
6
  $.fancybox.close(true);
@@ -49,12 +49,12 @@ module Mdwa
49
49
  model = entity.generator_model
50
50
 
51
51
  puts '--------------------------------------'
52
- puts "- Code for: #{entity.name} -"
52
+ puts "- Templates for: #{entity.name} -"
53
53
  puts '--------------------------------------'
54
54
 
55
- copy_with_header 'scaffold/controller.rb', "#{MDWA::DSL::TEMPLATES_PATH}#{entity.file_name}/#{model.space + '/'}controller.rb", entity.name
56
- copy_with_header 'scaffold/helper.rb', "#{MDWA::DSL::TEMPLATES_PATH}#{entity.file_name}/#{model.space + '/'}helper.rb", entity.name
57
- copy_with_header 'scaffold/model.rb', "#{MDWA::DSL::TEMPLATES_PATH}#{entity.file_name}/#{model.space + '/'}model.rb", entity.name
55
+ copy_with_header 'scaffold/controller.erb', "#{MDWA::DSL::TEMPLATES_PATH}#{entity.file_name}/#{model.space + '/'}controller.erb", entity.name
56
+ copy_with_header 'scaffold/helper.erb', "#{MDWA::DSL::TEMPLATES_PATH}#{entity.file_name}/#{model.space + '/'}helper.erb", entity.name
57
+ copy_with_header 'scaffold/model.erb', "#{MDWA::DSL::TEMPLATES_PATH}#{entity.file_name}/#{model.space + '/'}model.erb", entity.name
58
58
 
59
59
  # views
60
60
  copy_with_header 'scaffold/views/_form_fields.html.erb', "#{MDWA::DSL::TEMPLATES_PATH}#{entity.file_name}/#{model.space + '/'}views/_form_fields.html.erb", entity.name
@@ -84,7 +84,7 @@ module Mdwa
84
84
 
85
85
  model = entity.generator_model
86
86
 
87
- path_to_controller = "#{MDWA::DSL::TEMPLATES_PATH}#{entity.file_name}/#{model.space + '/'}controller.rb"
87
+ path_to_controller = "#{MDWA::DSL::TEMPLATES_PATH}#{entity.file_name}/#{model.space + '/'}controller.erb"
88
88
  controller_string = File.read("#{Rails.root}/#{path_to_controller}")
89
89
 
90
90
  # hooks for code generations
@@ -49,9 +49,9 @@ module Mdwa
49
49
  namespaces = Dir.glob("#{Rails.root}/#{MDWA::DSL::TEMPLATES_PATH}#{entity.file_name}/*").select{|d| File.directory?(d) and File.basename(d) != 'views'}
50
50
  if !namespaces.count.zero?
51
51
  namespaces.each do |namespace|
52
- mdwa_template "#{entity.file_name}/#{File.basename namespace}/model.rb", "app/models/#{File.basename namespace}/#{generator_model.singular_name}.rb"
53
- mdwa_template "#{entity.file_name}/#{File.basename namespace}/helper.rb", "app/helpers/#{File.basename namespace}/#{generator_model.plural_name}_helper.rb"
54
- mdwa_template "#{entity.file_name}/#{File.basename namespace}/controller.rb", "app/controllers/#{File.basename namespace}/#{generator_model.plural_name}_controller.rb"
52
+ mdwa_template "#{entity.file_name}/#{File.basename namespace}/model.erb", "app/models/#{File.basename namespace}/#{generator_model.singular_name}.rb"
53
+ mdwa_template "#{entity.file_name}/#{File.basename namespace}/helper.erb", "app/helpers/#{File.basename namespace}/#{generator_model.plural_name}_helper.rb"
54
+ mdwa_template "#{entity.file_name}/#{File.basename namespace}/controller.erb", "app/controllers/#{File.basename namespace}/#{generator_model.plural_name}_controller.rb"
55
55
  Dir.glob("#{namespace}/views/*").each do |file|
56
56
  file_name = File.basename(file)
57
57
  mdwa_template "#{entity.file_name}/#{File.basename namespace}/views/#{file_name}", "app/views/#{File.basename namespace}/#{generator_model.plural_name}/#{file_name}"
@@ -79,6 +79,18 @@ module Mdwa
79
79
  # clear routes file contents
80
80
  File.truncate(path_to_routes, 0)
81
81
  append_file path_to_routes, "def mdwa_router(router)\n\nend"
82
+
83
+ inject_into_file path_to_routes, :after => "def mdwa_router(router)\n" do
84
+ "\n# Software visualization
85
+ namespace :mdwa do
86
+ controller :requirements do
87
+ get 'requirements/index' => 'requirements#index', :as => 'requirements'
88
+ get 'requirements/:alias' => 'requirements#show', :as => 'requirement'
89
+ end
90
+
91
+ root :to => 'requirements#index'
92
+ end"
93
+ end
82
94
 
83
95
  MDWA::DSL.entities.all.each do |entity|
84
96
  generator_model = entity.generator_model
@@ -86,11 +98,11 @@ module Mdwa
86
98
  # inject scaffold code
87
99
  inject_into_file path_to_routes, :after => "def mdwa_router(router)\n" do
88
100
  route_str = []
89
- route_str << "\n\tnamespace :#{generator_model.space} do" if generator_model.namespace?
90
- route_str << "\t\tcontroller :#{generator_model.plural_name} do"
91
- route_str << "\t\tend"
92
- route_str << "\t\tresources :#{generator_model.plural_name}"
93
- route_str << "\tend\n" if generator_model.namespace?
101
+ route_str << "\n namespace :#{generator_model.space} do" if generator_model.namespace?
102
+ route_str << " controller :#{generator_model.plural_name} do"
103
+ route_str << " end"
104
+ route_str << " resources :#{generator_model.plural_name}"
105
+ route_str << " end\n" if generator_model.namespace?
94
106
 
95
107
  route_str.join "\n"
96
108
  end
@@ -108,7 +120,7 @@ module Mdwa
108
120
 
109
121
  def generate_locales
110
122
 
111
- locales_file = 'config/locales/mdwa_model_specific.en.yml'
123
+ locales_file = 'config/locales/mdwa.specific.en.yml'
112
124
  locales_content = File.read(locales_file)
113
125
  # make sure the file exist
114
126
  create_file locales_file unless File.exist?(Rails.root + locales_file)
@@ -119,28 +131,40 @@ module Mdwa
119
131
  append_file locales_file, :after => "en:\n" do
120
132
  lines = []
121
133
  lines << " #{model.plural_name}:"
122
- lines << " create_success: \"#{model.singular_name.humanize} created.\""
123
- lines << " update_success: \"#{model.singular_name.humanize} updated.\""
124
- lines << " destroy_success: \"#{model.singular_name.humanize} destroyed.\""
125
- lines << " index_title: \"#{model.plural_name.humanize}\""
126
- lines << " show_title: \"#{model.singular_name.humanize}\""
127
- lines << " new_title: \"New #{model.singular_name.humanize}\""
128
- lines << " edit_title: \"Edit #{model.singular_name.humanize}\""
134
+ lines << " notice:"
135
+ lines << " create: \"#{model.singular_name.humanize} created.\""
136
+ lines << " update: \"#{model.singular_name.humanize} updated.\""
137
+ lines << " destroy: \"#{model.singular_name.humanize} destroyed.\""
138
+ lines << " title:"
139
+ lines << " index: \"#{model.plural_name.humanize}\""
140
+ lines << " show: \"#{model.singular_name.humanize}\""
141
+ lines << " new: \"New #{model.singular_name.humanize}\""
142
+ lines << " edit: \"Edit #{model.singular_name.humanize}\""
143
+ # INDEX
144
+ lines << " index:"
145
+ model.attributes.each do |attr|
146
+ lines << " #{attr.name}: \"#{attr.name.humanize}\""
147
+ end
148
+ model.associations.each do |assoc|
149
+ lines << ((assoc.belongs_to? or assoc.nested_one? or assoc.has_one?) ? " #{assoc.model2.singular_name}: \"#{assoc.model2.singular_name.humanize}\"" : " #{assoc.model2.singular_name}: \"#{assoc.model2.plural_name.humanize}\"")
150
+ end
151
+ # EDIT
152
+ lines << " edit:"
129
153
  model.attributes.each do |attr|
130
- lines << " index_#{attr.name}: \"#{attr.name.humanize}\""
131
- lines << " show_#{attr.name}: \"#{attr.name.humanize}\""
132
- lines << " edit_#{attr.name}: \"#{attr.name.humanize}\""
154
+ lines << " #{attr.name}: \"#{attr.name.humanize}\""
133
155
  end
134
156
  model.associations.each do |assoc|
135
- if assoc.belongs_to? or assoc.nested_one? or assoc.has_one?
136
- lines << " index_#{assoc.model2.singular_name}: \"#{assoc.model2.singular_name.humanize}\""
137
- lines << " show_#{assoc.model2.singular_name}: \"#{assoc.model2.singular_name.humanize}\""
138
- lines << " edit_#{assoc.model2.singular_name}: \"#{assoc.model2.singular_name.humanize}\""
139
- else
140
- lines << " index_#{assoc.model2.singular_name}: \"#{assoc.model2.plural_name.humanize}\""
141
- lines << " show_#{assoc.model2.singular_name}: \"#{assoc.model2.plural_name.humanize}\""
142
- end
157
+ lines << ((assoc.belongs_to? or assoc.nested_one? or assoc.has_one?) ? " #{assoc.model2.singular_name}: \"#{assoc.model2.singular_name.humanize}\"" : " #{assoc.model2.singular_name}: \"#{assoc.model2.plural_name.humanize}\"")
143
158
  end
159
+ # SHOW
160
+ lines << " show:"
161
+ model.attributes.each do |attr|
162
+ lines << " #{attr.name}: \"#{attr.name.humanize}\""
163
+ end
164
+ model.associations.each do |assoc|
165
+ lines << ((assoc.belongs_to? or assoc.nested_one? or assoc.has_one?) ? " #{assoc.model2.singular_name}: \"#{assoc.model2.singular_name.humanize}\"" : " #{assoc.model2.singular_name}: \"#{assoc.model2.plural_name.humanize}\"")
166
+ end
167
+
144
168
  lines << "\n"
145
169
  lines.join("\n")
146
170
  end
@@ -206,11 +230,20 @@ module Mdwa
206
230
  entity_attribute = entity.attributes[column.name]
207
231
  # model attribute exists, but not in entity -> was erased
208
232
  if entity_attribute.nil?
209
- @changes << {:entity => entity, :type => 'remove_column', :column => column.name, :attr_type => column.type}
233
+ # atributo não é derivado de file, pode apagar na moral
234
+ if !column.name.ends_with?("_file_name") and !column.name.ends_with?("_content_type") and !column.name.ends_with?("_file_size") and !column.name.ends_with?("_updated_at")
235
+ @changes << {:entity => entity, :type => 'remove_column', :column => column.name, :attr_type => column.type}
236
+ else
237
+ # se o atributo é derivado de file e não existe o file na entidade, apaga
238
+ @changes << {:entity => entity, :type => 'remove_column', :column => column.name, :attr_type => column.type} if column.name.ends_with?("_file_name") and entity.attributes[column.name.delete("_file_name")].nil?
239
+ @changes << {:entity => entity, :type => 'remove_column', :column => column.name, :attr_type => column.type} if column.name.ends_with?("_content_type") and entity.attributes[column.name.delete("_content_type")].nil?
240
+ @changes << {:entity => entity, :type => 'remove_column', :column => column.name, :attr_type => column.type} if column.name.ends_with?("_file_size") and entity.attributes[column.name.delete("_file_size")].nil?
241
+ @changes << {:entity => entity, :type => 'remove_column', :column => column.name, :attr_type => column.type} if column.name.ends_with?("_updated_at") and entity.attributes[column.name.delete("_updated_at")].nil?
242
+ end
210
243
  # attribute exists in model and entity, but changed type
211
244
  elsif entity_attribute.type.to_sym != column.type.to_sym
212
245
  # ignores files, passwords and float, decimal, integer variations
213
- next if entity_attribute.type.to_sym == :file or entity_attribute.type.to_sym == :password or ((column.type.to_sym == :integer or column.type.to_sym == :decimal) and entity_attribute.type.to_sym == :float)
246
+ next if entity_attribute.type.to_sym == :password or ((column.type.to_sym == :integer or column.type.to_sym == :decimal) and entity_attribute.type.to_sym == :float)
214
247
  @changes << {:entity => entity, :type => 'change_column', :column => column.name, :attr_type => entity_attribute.type, :from => column.type}
215
248
  end
216
249
  end
@@ -218,7 +251,15 @@ module Mdwa
218
251
  # new attributes
219
252
  # no column with that name -> column must be added
220
253
  entity.attributes.each do |key, attr|
221
- if model_class.columns.select {|c| c.name == attr.name }.count.zero?
254
+ # se a entidade for file e não existir seus atributos no banco de dados, corrige
255
+ if attr.type.to_sym == :file
256
+ @changes << {:entity => entity, :type => 'add_column', :column => "#{attr.name}_file_name", :attr_type => 'string'} if model_class.columns.select{|c| c.name == "#{attr.name}_file_name"}.count.zero?
257
+ @changes << {:entity => entity, :type => 'add_column', :column => "#{attr.name}_content_type", :attr_type => 'string'} if model_class.columns.select{|c| c.name == "#{attr.name}_content_type"}.count.zero?
258
+ @changes << {:entity => entity, :type => 'add_column', :column => "#{attr.name}_file_size", :attr_type => 'integer'} if model_class.columns.select{|c| c.name == "#{attr.name}_file_size"}.count.zero?
259
+ @changes << {:entity => entity, :type => 'add_column', :column => "#{attr.name}_updated_at", :attr_type => 'datetime'} if model_class.columns.select{|c| c.name == "#{attr.name}_updated_at"}.count.zero?
260
+
261
+ # nenhuma coluna com esse nome
262
+ elsif model_class.columns.select {|c| c.name == attr.name }.count.zero?
222
263
  @changes << {:entity => entity, :type => 'add_column', :column => attr.name, :attr_type => attr.type}
223
264
  end
224
265
  end
@@ -279,22 +320,29 @@ module Mdwa
279
320
  # create table
280
321
  migration_string << "\n\tdef self.up"
281
322
  migration_string << "\t\tcreate_table :#{generator_model.plural_name} do |t|"
282
- generator_model.attributes.each do |attr|
283
- migration_string << "\t\t\tt.#{attr.migration_field} :#{attr.name}"
323
+ generator_model.attributes.select{|a| !['id', 'created_at', 'updated_at'].include?(a.name)}.each do |attr|
324
+ if attr.type.to_sym != :file
325
+ migration_string << "\t\t\tt.#{attr.migration_field} :#{attr.name}"
326
+ else
327
+ migration_string << "\t\t\tt.string :#{attr.name}_file_name"
328
+ migration_string << "\t\t\tt.string :#{attr.name}_content_type"
329
+ migration_string << "\t\t\tt.integer :#{attr.name}_file_size"
330
+ migration_string << "\t\t\tt.datetime :#{attr.name}_updated_at"
331
+ end
284
332
  end
285
333
  generator_model.associations.each do |assoc|
286
334
  if assoc.belongs_to? or assoc.nested_one?
287
335
  migration_string << "\t\t\tt.integer :#{assoc.model2.singular_name.foreign_key}"
288
336
  end
289
337
  end
290
- migration_string << "\t\t\tt.timestamps"
291
- migration_string << "\t\tend"
338
+ migration_string << "\n\t\tt.timestamps"
339
+ migration_string << "\t\tend" # fim do create_table
292
340
  generator_model.associations.each do |assoc|
293
341
  if assoc.belongs_to? or assoc.nested_one?
294
342
  migration_string << "\t\tadd_index :#{assoc.model1.plural_name}, :#{assoc.model2.singular_name.foreign_key}"
295
343
  end
296
344
  end
297
- migration_string << "\n\tend"
345
+ migration_string << "\n\tend" # fim do self.up
298
346
 
299
347
  # drop table
300
348
  migration_string << "\n\tdef self.down"
@@ -0,0 +1,30 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class Add<%= @model.attributes.collect{|a| a.name.camelize}.join('') %>ToUsers < ActiveRecord::Migration
3
+
4
+ def self.up
5
+ <%- @model.simple_attributes.each do |attr| -%>
6
+ <%- if !attr.type.to_sym == :file -%>
7
+ add_column :users, :<%= attr.name %>, :<%= attr.migration_field %>
8
+ <%- else -%>
9
+ add_column :users, :<%= attr.name %>_file_name, :string
10
+ add_column :users, :<%= attr.name %>_content_type, :string
11
+ add_column :users, :<%= attr.name %>_file_size, :integer
12
+ add_column :users, :<%= attr.name %>_updated_at, :datetime
13
+ <%- end -%>
14
+ <%- end -%>
15
+ end
16
+
17
+ def self.down
18
+ <%- @model.simple_attributes.each do |attr| -%>
19
+ <%- if !attr.type.to_sym == :file -%>
20
+ remove_column :users, :<%= attr.name %>
21
+ <%- else -%>
22
+ remove_column :users, :<%= attr.name %>_file_name
23
+ remove_column :users, :<%= attr.name %>_content_type
24
+ remove_column :users, :<%= attr.name %>_file_size
25
+ remove_column :users, :<%= attr.name %>_updated_at
26
+ <%- end -%>
27
+ <%- end -%>
28
+ end
29
+
30
+ end
@@ -76,7 +76,7 @@ module Mdwa
76
76
  @model.add_attribute attr
77
77
  end
78
78
  end
79
- migration_template 'migrate.rb', "db/migrate/add_#{@model.attributes.collect{|a| a.name}.join('_')}_to_users" unless @model.attributes.empty?
79
+ migration_template 'migrate.erb', "db/migrate/add_#{@model.attributes.collect{|a| a.name}.join('_')}_to_users" unless @model.attributes.empty?
80
80
 
81
81
  # include type in db:seed
82
82
  append_file 'db/seeds/site.rb' do
@@ -87,25 +87,14 @@ module MDWA
87
87
 
88
88
  #
89
89
  # Declares one attribute of the list using the block given.
90
- def attribute(name, type, options = {})
91
- if type.to_sym == :file
92
- fields = ['_file_name','_content_type', '_file_size', '_updated_at']
93
- fields.each do |f|
94
- attr = EntityAttribute.new(self)
95
- attr.name = "#{name}#{f}"
96
- attr.type = :string
97
- attr.raise_errors_if_invalid!
98
- self.attributes[attr.name] = attr
99
- end
100
- else
101
- attr = EntityAttribute.new(self)
102
- attr.name = name
103
- attr.type = type
104
- attr.default = options[:default] unless options[:default].blank?
105
- attr.style = options[:style] unless options[:style].blank?
106
- attr.raise_errors_if_invalid!
107
- self.attributes[attr.name] = attr
108
- end
90
+ def attribute(name, type, options = {})
91
+ attr = EntityAttribute.new(self)
92
+ attr.name = name
93
+ attr.type = type
94
+ attr.default = options[:default] unless options[:default].blank?
95
+ attr.style = options[:style] unless options[:style].blank?
96
+ attr.raise_errors_if_invalid!
97
+ self.attributes[attr.name] = attr
109
98
  end
110
99
 
111
100
  #
@@ -4,7 +4,7 @@ module MDWA
4
4
 
5
5
  class Requirement
6
6
 
7
- attr_accessor :summary, :description, :alias, :users, :entities
7
+ attr_accessor :summary, :description, :alias, :users, :entities, :non_functional_description
8
8
 
9
9
  def initialize(summary = nil)
10
10
  self.summary = summary
@@ -17,6 +17,10 @@ module MDWA
17
17
  @alias ||= self.summary.to_alias
18
18
  end
19
19
 
20
+ def non_functional?
21
+ !self.non_functional_description.blank?
22
+ end
23
+
20
24
  end
21
25
 
22
26
  end # dsl
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module MDWA
3
- VERSION = "3.0.20"
3
+ VERSION = "3.1.0"
4
4
  end
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
13
13
 
14
14
  s.rubyforge_project = "mdd"
15
15
 
16
- s.add_dependency 'rails', '>= 3.1'
17
- s.add_dependency 'jquery-rails', '>= 2.0'
16
+ s.add_dependency 'rails', '>= 3.2.11'
17
+ s.add_dependency 'jquery-rails', '>= 2.2.0'
18
18
  s.add_dependency 'devise', '>= 2.1'
19
19
  s.add_dependency 'cancan', '>= 1.6'
20
20
  s.add_dependency 'will_paginate', '>= 3.0'
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: 3.0.20
4
+ version: 3.1.0
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-10-14 00:00:00.000000000 Z
12
+ date: 2013-01-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: '3.1'
21
+ version: 3.2.11
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
- version: '3.1'
29
+ version: 3.2.11
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: jquery-rails
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ! '>='
36
36
  - !ruby/object:Gem::Version
37
- version: '2.0'
37
+ version: 2.2.0
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
- version: '2.0'
45
+ version: 2.2.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: devise
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -403,7 +403,7 @@ files:
403
403
  - lib/generators/mdwa/sandbox/templates/config/initializers/will_paginate.rb
404
404
  - lib/generators/mdwa/sandbox/templates/config/locales/devise.en.yml
405
405
  - lib/generators/mdwa/sandbox/templates/config/locales/mdwa.en.yml
406
- - lib/generators/mdwa/sandbox/templates/config/locales/mdwa_model_specific.en.yml
406
+ - lib/generators/mdwa/sandbox/templates/config/locales/mdwa.specific.en.yml
407
407
  - lib/generators/mdwa/sandbox/templates/db/migrate/create_permissions.rb
408
408
  - lib/generators/mdwa/sandbox/templates/db/migrate/create_user_permissions.rb
409
409
  - lib/generators/mdwa/sandbox/templates/db/migrate/devise_create_users.rb
@@ -436,9 +436,9 @@ files:
436
436
  - lib/generators/mdwa/templates/templates/actions/view.js.erb
437
437
  - lib/generators/mdwa/templates/templates/actions/view.json.erb
438
438
  - lib/generators/mdwa/templates/templates/general/routes.rb
439
- - lib/generators/mdwa/templates/templates/scaffold/controller.rb
440
- - lib/generators/mdwa/templates/templates/scaffold/helper.rb
441
- - lib/generators/mdwa/templates/templates/scaffold/model.rb
439
+ - lib/generators/mdwa/templates/templates/scaffold/controller.erb
440
+ - lib/generators/mdwa/templates/templates/scaffold/helper.erb
441
+ - lib/generators/mdwa/templates/templates/scaffold/model.erb
442
442
  - lib/generators/mdwa/templates/templates/scaffold/views/_form.html.erb
443
443
  - lib/generators/mdwa/templates/templates/scaffold/views/_form_fields.html.erb
444
444
  - lib/generators/mdwa/templates/templates/scaffold/views/_list.html.erb
@@ -458,7 +458,7 @@ files:
458
458
  - lib/generators/mdwa/user_scaffold/USAGE
459
459
  - lib/generators/mdwa/user_scaffold/templates/controllers/ajax_controller.rb
460
460
  - lib/generators/mdwa/user_scaffold/templates/controllers/controller.rb
461
- - lib/generators/mdwa/user_scaffold/templates/migrate.rb
461
+ - lib/generators/mdwa/user_scaffold/templates/migrate.erb
462
462
  - lib/generators/mdwa/user_scaffold/templates/views/update.js.erb
463
463
  - lib/generators/mdwa/user_scaffold/user_scaffold_generator.rb
464
464
  - lib/mdd.rb
@@ -1,16 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- class Add<%= @model.attributes.collect{|a| a.name.camelize}.join('') %>ToUsers < ActiveRecord::Migration
3
-
4
- def self.up
5
- <%- @model.simple_attributes.each do |attr| -%>
6
- add_column :users, :<%= attr.name %>, :<%= attr.migration_field %>
7
- <%- end -%>
8
- end
9
-
10
- def self.down
11
- <%- @model.simple_attributes.each do |attr| -%>
12
- remove_column :users, :<%= attr.name %>
13
- <%- end -%>
14
- end
15
-
16
- end