mdd 3.0.2 → 3.0.3

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.
Files changed (77) hide show
  1. data/app/helpers/mdwa_helper.rb +2 -1
  2. data/lib/generators/mdwa/association/association_generator.rb +1 -1
  3. data/lib/generators/mdwa/association/templates/migrate/many_to_many.rb +1 -1
  4. data/lib/generators/mdwa/association/templates/migrate/one_field.rb +2 -1
  5. data/lib/generators/mdwa/code/code_generator.rb +54 -22
  6. data/lib/generators/mdwa/code/templates/migration.rb +2 -1
  7. data/lib/generators/mdwa/entity/entity_generator.rb +1 -2
  8. data/lib/generators/mdwa/entity/templates/entity.rb +2 -1
  9. data/lib/generators/mdwa/from_requirements/from_requirements_generator.rb +56 -0
  10. data/lib/generators/mdwa/process/USAGE +4 -0
  11. data/lib/generators/mdwa/process/process_generator.rb +24 -0
  12. data/lib/generators/mdwa/process/templates/process.rb +49 -0
  13. data/lib/generators/mdwa/requirement/USAGE +4 -0
  14. data/lib/generators/mdwa/requirement/requirement_generator.rb +24 -0
  15. data/lib/generators/mdwa/requirement/templates/requirement.rb +21 -0
  16. data/lib/generators/mdwa/sandbox/sandbox_generator.rb +1 -1
  17. data/lib/generators/mdwa/sandbox/templates/app/assets/stylesheets/mdwa/template/backend.css.erb +2 -2
  18. data/lib/generators/mdwa/sandbox/templates/app/controllers/a/backend_controller.rb +2 -1
  19. data/lib/generators/mdwa/sandbox/templates/app/controllers/a/users/sessions_controller.rb +1 -1
  20. data/lib/generators/mdwa/sandbox/templates/app/controllers/public_controller.rb +1 -0
  21. data/lib/generators/mdwa/sandbox/templates/config/initializers/devise.rb +1 -0
  22. data/lib/generators/mdwa/sandbox/templates/config/initializers/mdwa_layout.rb +2 -1
  23. data/lib/generators/mdwa/sandbox/templates/config/locales/mdwa.en.yml +1 -1
  24. data/lib/generators/mdwa/sandbox/templates/db/migrate/devise_create_users.rb +1 -1
  25. data/lib/generators/mdwa/sandbox/templates/db/seeds.rb +1 -1
  26. data/lib/generators/mdwa/sandbox/templates/db/seeds/site.rb +1 -1
  27. data/lib/generators/mdwa/scaffold/scaffold_generator.rb +10 -3
  28. data/lib/generators/mdwa/scaffold/templates/controllers/ajax_controller.rb +2 -1
  29. data/lib/generators/mdwa/scaffold/templates/controllers/controller.rb +2 -1
  30. data/lib/generators/mdwa/scaffold/templates/db_migrate/migrate.rb +2 -1
  31. data/lib/generators/mdwa/scaffold/templates/models/model.rb +2 -1
  32. data/lib/generators/mdwa/scaffold/templates/models/module.rb +2 -1
  33. data/lib/generators/mdwa/user/templates/user.rb +12 -0
  34. data/lib/generators/mdwa/user/user_generator.rb +13 -104
  35. data/lib/generators/mdwa/{user → user_scaffold}/USAGE +1 -1
  36. data/lib/generators/mdwa/{user → user_scaffold}/templates/controllers/ajax_controller.rb +2 -1
  37. data/lib/generators/mdwa/{user → user_scaffold}/templates/controllers/controller.rb +2 -1
  38. data/lib/generators/mdwa/{user → user_scaffold}/templates/migrate.rb +2 -1
  39. data/lib/generators/mdwa/{user → user_scaffold}/templates/views/update.js.erb +0 -0
  40. data/lib/generators/mdwa/user_scaffold/user_scaffold_generator.rb +139 -0
  41. data/lib/mdd.rb +1 -1
  42. data/lib/mdwa.rb +1 -1
  43. data/lib/mdwa/all.rb +1 -1
  44. data/lib/mdwa/dsl.rb +17 -4
  45. data/lib/mdwa/dsl/action.rb +78 -0
  46. data/lib/mdwa/dsl/entities.rb +4 -4
  47. data/lib/mdwa/dsl/entity.rb +59 -23
  48. data/lib/mdwa/dsl/entity_actions.rb +73 -0
  49. data/lib/mdwa/dsl/entity_association.rb +1 -1
  50. data/lib/mdwa/dsl/entity_attribute.rb +1 -1
  51. data/lib/mdwa/dsl/entity_specification.rb +22 -0
  52. data/lib/mdwa/dsl/process.rb +53 -0
  53. data/lib/mdwa/dsl/process_detail.rb +57 -0
  54. data/lib/mdwa/dsl/process_detail_next_action.rb +16 -0
  55. data/lib/mdwa/dsl/requirement.rb +23 -0
  56. data/lib/mdwa/dsl/requirements.rb +57 -0
  57. data/lib/mdwa/dsl/user.rb +34 -0
  58. data/lib/mdwa/dsl/users.rb +57 -0
  59. data/lib/mdwa/dsl/workflow.rb +57 -0
  60. data/lib/mdwa/generators.rb +1 -1
  61. data/lib/mdwa/generators/model.rb +3 -1
  62. data/lib/mdwa/generators/model_association.rb +4 -1
  63. data/lib/mdwa/generators/model_attribute.rb +2 -1
  64. data/lib/mdwa/layout.rb +1 -1
  65. data/lib/mdwa/layout/base.rb +1 -1
  66. data/lib/mdwa/layout/helper.rb +1 -1
  67. data/lib/mdwa/version.rb +1 -1
  68. data/test/entity_actions_test.rb +101 -0
  69. data/test/entity_specifications_test.rb +37 -0
  70. data/test/entity_test.rb +1 -1
  71. data/test/layout_test.rb +1 -1
  72. data/test/process_test.rb +86 -0
  73. data/test/requirements_test.rb +44 -0
  74. data/test/users_test.rb +55 -0
  75. metadata +37 -10
  76. data/lib/mdwa/dsl/generator.rb +0 -10
  77. data/test/generators_test.rb +0 -0
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  module MdwaHelper
2
3
 
3
4
  def pagination_footer( object_list )
@@ -13,4 +14,4 @@ module MdwaHelper
13
14
  return results.collect{ |c| "{label: '#{c.send field_name}', value: '#{c.id}'}" }.join( ',' )
14
15
  end
15
16
 
16
- end
17
+ end
@@ -150,4 +150,4 @@ module Mdwa
150
150
 
151
151
  end
152
152
  end
153
- end
153
+ end
@@ -5,4 +5,4 @@ class Create<%= @association.ordered.first.plural_name.camelize %><%= @associati
5
5
  t.references :<%= @association.ordered.first.singular_name %>, :<%= @association.ordered.last.singular_name %>
6
6
  end
7
7
  end
8
- end
8
+ end
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  class Add<%= @field.singular_name.foreign_key.camelize %>To<%= @table.plural_name.camelize %> < ActiveRecord::Migration
2
3
 
3
4
  def self.up
@@ -10,4 +11,4 @@ class Add<%= @field.singular_name.foreign_key.camelize %>To<%= @table.plural_nam
10
11
  remove_index :<%= @table.plural_name %>, :<%= @field.singular_name.foreign_key %>
11
12
  end
12
13
 
13
- end
14
+ end
@@ -20,29 +20,37 @@ module Mdwa
20
20
  class_option :run_migrations, :type => :boolean, :default => false, :desc => 'Run rake db:migrate directly'
21
21
  class_option :only_interface, :type => :boolean, :default => false, :desc => 'Generate only user interface'
22
22
 
23
+ #
24
+ # Constructor
25
+ # Require all entities to load the DSL of the application
26
+ #
23
27
  def initialize(*args, &block)
24
28
  super
25
29
 
26
30
  # include files with entities
31
+ # select entities that will be generated
27
32
  inside Rails.root do
28
33
  if entities.count.zero?
29
- require_all MDWA::DSL::STRUCTURAL_PATH
34
+ require_all MDWA::DSL::STRUCTURAL_PATH unless Dir.glob("#{MDWA::DSL::STRUCTURAL_PATH}/*.rb").count.zero?
30
35
  else
31
36
  files = entities.collect{ |e| "#{MDWA::DSL::STRUCTURAL_PATH}#{MDWA::DSL::Entity.new(e).file_name}.rb" }
32
37
  require_all files.join(', ')
33
38
  end
34
39
  end
35
-
36
- # select models that will be generated
37
- # only required models are included
38
40
  @all_entities = MDWA::DSL.entities.all
39
41
 
42
+ # entity changes and migrations
40
43
  @changes = []
41
44
  @random_migration_key = rand.to_s.gsub('.','').to_i
42
-
45
+
43
46
  end
44
47
 
45
- def code_generation
48
+
49
+ #
50
+ # Generate code for entities or entity changes.
51
+ # Generate migration for field changes.
52
+ #
53
+ def entities_and_changes
46
54
 
47
55
  return false if options.only_interface
48
56
 
@@ -100,9 +108,18 @@ module Mdwa
100
108
 
101
109
  end
102
110
 
111
+ # generate changed code
112
+ unless @changes.empty?
113
+ migration_template 'migration.rb', "db/migrate/alter_#{@all_entities.select{|e| e.resource?}.collect{|e| e.file_name}.join('_')}#{@random_migration_key}.rb"
114
+ end
115
+
103
116
  end
104
117
 
105
- def only_interface_generation
118
+
119
+ #
120
+ # Generate entities interface.
121
+ #
122
+ def entities_interface
106
123
 
107
124
  if options.only_interface
108
125
  @all_entities.each do |entity|
@@ -129,31 +146,46 @@ module Mdwa
129
146
  end
130
147
  end
131
148
 
132
- end
149
+ end
133
150
 
134
- def migration_generation
135
- unless @changes.empty?
136
- # generate changed code
137
- migration_template 'migration.rb', "db/migrate/alter_#{@all_entities.select{|e| e.resource?}.collect{|e| e.file_name}.join('_')}#{@random_migration_key}.rb"
138
- end
151
+
152
+ #
153
+ # Generate actions for entities.
154
+ #
155
+ def entities_actions
156
+ end
157
+
158
+ #
159
+ # Generate code for entities specify.
160
+ #
161
+ def entites_specifications
139
162
  end
163
+
140
164
 
165
+ #
166
+ # Run rake db:migrate
167
+ #
141
168
  def rake_db_migrate
142
169
  if options.run_migrations
143
170
  rake 'db:migrate'
144
171
  end
145
172
  end
173
+
174
+
175
+
146
176
 
147
- # Implement the required interface for Rails::Generators::Migration.
148
- def self.next_migration_number(dirname) #:nodoc:
149
- if ActiveRecord::Base.timestamped_migrations
150
- Time.now.utc.strftime("%Y%m%d%H%M%S")
151
- else
152
- "%.3d" % (current_migration_number(dirname) + 1)
153
- end
154
- end
155
177
 
156
178
  private
179
+
180
+ # Implement the required interface for Rails::Generators::Migration.
181
+ def self.next_migration_number(dirname) #:nodoc:
182
+ if ActiveRecord::Base.timestamped_migrations
183
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
184
+ else
185
+ "%.3d" % (current_migration_number(dirname) + 1)
186
+ end
187
+ end
188
+
157
189
  def inverse_migration_type(type)
158
190
  case type.to_sym
159
191
  when :add_column then 'remove_column'
@@ -165,4 +197,4 @@ module Mdwa
165
197
  end # class
166
198
  end # generators
167
199
  end # mdwa
168
-
200
+
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  class Alter<%= @all_entities.select{|e| e.resource?}.collect{|e| e.file_name.camelize}.join('') %><%= @random_migration_key %> < ActiveRecord::Migration
2
3
 
3
4
  def self.up
@@ -12,4 +13,4 @@ class Alter<%= @all_entities.select{|e| e.resource?}.collect{|e| e.file_name.cam
12
13
  <%- end -%>
13
14
  end
14
15
 
15
- end
16
+ end
@@ -1,7 +1,6 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  require 'rails/generators'
4
- require 'rails/generators/migration'
5
4
 
6
5
  require 'mdwa/dsl'
7
6
 
@@ -22,4 +21,4 @@ module Mdwa
22
21
 
23
22
  end # entity
24
23
  end #generators
25
- end #mdwa
24
+ end #mdwa
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+ require 'mdwa/dsl'
2
3
  MDWA::DSL.entities.register "<%= name.singularize.camelize %>" do |e|
3
4
 
4
5
  <%- if options.user -%>
@@ -47,4 +48,4 @@ MDWA::DSL.entities.register "<%= name.singularize.camelize %>" do |e|
47
48
  # end
48
49
  <%- end -%>
49
50
 
50
- end
51
+ end
@@ -0,0 +1,56 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'rails/generators'
4
+
5
+ require 'mdwa/dsl'
6
+
7
+ module Mdwa
8
+ module Generators
9
+
10
+ class FromRequirementsGenerator < Rails::Generators::Base
11
+
12
+ source_root File.expand_path("../templates", __FILE__)
13
+ attr_accessor :requirements
14
+
15
+ #
16
+ # Constructor
17
+ # Require all entities to load the DSL of the application
18
+ #
19
+ def initialize(*args, &block)
20
+ super
21
+
22
+ # include files with requirements
23
+ inside Rails.root do
24
+ require_all MDWA::DSL::REQUIREMENTS_PATH
25
+ end
26
+ @requirements = MDWA::DSL.requirements.all
27
+
28
+ end
29
+
30
+
31
+ #
32
+ # Generate code for requirements.
33
+ # Generate files for entities and users.
34
+ def requirements
35
+
36
+ # For all requirements, generate users and entities
37
+ @requirements.each do |requirement|
38
+
39
+ # generate entities
40
+ requirement.entities.each do |entity|
41
+ generate "mdwa:entity #{entity}" unless File.exist?("#{Rails.root}/#{MDWA::DSL::STRUCTURAL_PATH}#{MDWA::DSL::Entity.new(entity).file_name}.rb")
42
+ end
43
+
44
+ # generate users
45
+ requirement.users.each do |user|
46
+ generate "mdwa:user #{user}" unless File.exist?("#{Rails.root}/#{MDWA::DSL::USERS_PATH}#{MDWA::DSL::Entity.new(user).file_name}.rb")
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
53
+ end # class
54
+
55
+ end # generators
56
+ end # mdwa
@@ -0,0 +1,4 @@
1
+ Generates a new process.
2
+ USAGE
3
+ rails g mdwa:process 'Put product in shopping cart'
4
+ rails g mdwa:process 'Ship delivery' --no-comments
@@ -0,0 +1,24 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'rails/generators'
4
+
5
+ require 'mdwa/dsl'
6
+
7
+ module Mdwa
8
+ module Generators
9
+ class ProcessGenerator < Rails::Generators::Base
10
+
11
+ source_root File.expand_path("../templates", __FILE__)
12
+
13
+ argument :description, :type => :string, :banner => 'Process description'
14
+
15
+ class_option :no_comments, :type => :boolean, :default => false, :desc => 'Generates process without comments.'
16
+
17
+ def code_generation
18
+ @process = MDWA::DSL::Process.new(description)
19
+ template 'requirement.rb', "#{MDWA::DSL::WORKFLOW_PATH}#{@process.alias}.rb"
20
+ end
21
+
22
+ end # entity
23
+ end # generators
24
+ end # mdwa
@@ -0,0 +1,49 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'mdwa/dsl'
3
+ MDWA::DSL.workflow.register '<%= @description %>' do |p|
4
+
5
+ p.alias = '<%= @process.alias %>'
6
+
7
+ <%- unless options.no_comments -%>
8
+ # The process start point for every user role
9
+ # Params: :user_role, alias or entity listing
10
+ # p.start_for 'ProjectManager', 'new_project_group'
11
+ # p.start_for 'TeamMember', 'new_task'
12
+
13
+ # p.detail "Create project group" do |d|
14
+
15
+ # Unique alias for detailing
16
+ # Default: Detail name underscored
17
+ # d.alias = 'create_project_group'
18
+
19
+ # Roles with permission to execute this action
20
+ # Default: all -> no restriction
21
+ # d.user_roles ['ProjectManager']
22
+
23
+ # Refered action
24
+ # Params:
25
+ # => :alias
26
+ # => :entity
27
+ # => :action
28
+ # => :method => :get (default), :post, :put, :delete
29
+ # => :request_type => :html (default), :ajax, :ajax_js, :modalbox
30
+ # d.action 'project_group', 'create'
31
+
32
+ # Possible next action
33
+ # Params:
34
+ # => :alias
35
+ # => :entity
36
+ # => :action
37
+ # => :method
38
+ # => :request
39
+ # => :redirect => boolean
40
+ # => :render => boolean
41
+ # => :when - situation when it might occur
42
+ # d.next_action 'new_project_group', :when => 'save failed'
43
+ # d.next_action entity: 'project_group', action: 'index', :redirect => true, :when => 'save ok'
44
+ # d.next_action 'project', 'new', :when => 'clicked save & new project'
45
+
46
+ # end
47
+ <%- end -%>
48
+
49
+ end
@@ -0,0 +1,4 @@
1
+ Generates a new requirement.
2
+ USAGE
3
+ rails g mdwa:requirement 'Manage clients and projects'
4
+ rails g mdwa:requirement 'Manage project tasks' --no-comments
@@ -0,0 +1,24 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'rails/generators'
4
+
5
+ require 'mdwa/dsl'
6
+
7
+ module Mdwa
8
+ module Generators
9
+ class RequirementGenerator < Rails::Generators::Base
10
+
11
+ source_root File.expand_path("../templates", __FILE__)
12
+
13
+ argument :summary, :type => :string, :banner => 'Requirement summary'
14
+
15
+ class_option :no_comments, :type => :boolean, :default => false, :desc => 'Generates requirements without comments.'
16
+
17
+ def code_generation
18
+ @requirement = MDWA::DSL::Requirement.new(summary)
19
+ template 'requirement.rb', "#{MDWA::DSL::REQUIREMENTS_PATH}#{@requirement.alias}.rb"
20
+ end
21
+
22
+ end # entity
23
+ end # generators
24
+ end # mdwa
@@ -0,0 +1,21 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'mdwa/dsl'
3
+ MDWA::DSL.requirements.register do |r|
4
+
5
+ r.summary = '<%= @summary %>'
6
+ <%- unless options.no_comments %>
7
+ # r.alias = '<%= @requirement.alias %>' # alias is the unique requirement name and it's created automatically, you can override with this argument.
8
+ # r.description = %q{Detailed description of the requirement.}
9
+
10
+ #
11
+ # Entities involved in this requirement.
12
+ # Use an array of entity names.
13
+ # r.entities = ['ProjectGroup', 'Project', 'Task', 'Milestone']
14
+
15
+ #
16
+ # Users involved in this requirement.
17
+ # Use an array of user names.
18
+ # r.users = ['Administrator', 'TeamMember']
19
+ <% end %>
20
+
21
+ end
@@ -176,4 +176,4 @@ module Mdwa
176
176
 
177
177
  end
178
178
  end
179
- end
179
+ end
@@ -231,7 +231,7 @@ div.inside {
231
231
  }
232
232
 
233
233
  #leftbar ul li a:hover {
234
- background: none repeat scroll 0 0 rgba(0, 0, 0, 0.075);
234
+ background-image: rgba(0, 0, 0, 0.075);
235
235
  }
236
236
 
237
237
  #leftbar ul.submenu {
@@ -244,7 +244,7 @@ div.inside {
244
244
  }
245
245
 
246
246
  #leftbar ul.submenu li a:hover {
247
- background: #5D5D5D !important
247
+ background-image: rgba(0, 0, 0, 0.075);
248
248
  }
249
249
 
250
250
  #leftbar ul li a span {
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  class A::BackendController < ApplicationController
2
3
 
3
4
  before_filter :authenticate_a_user!
@@ -12,4 +13,4 @@ class A::BackendController < ApplicationController
12
13
  return current_a_user
13
14
  end
14
15
  helper_method :current_user
15
- end
16
+ end
@@ -1,3 +1,3 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  class A::Users::SessionsController < Devise::SessionsController
3
- end
3
+ end
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  class PublicController < ApplicationController
2
3
  def index
3
4
  end