mdd 3.0.2 → 3.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/app/helpers/mdwa_helper.rb +2 -1
- data/lib/generators/mdwa/association/association_generator.rb +1 -1
- data/lib/generators/mdwa/association/templates/migrate/many_to_many.rb +1 -1
- data/lib/generators/mdwa/association/templates/migrate/one_field.rb +2 -1
- data/lib/generators/mdwa/code/code_generator.rb +54 -22
- data/lib/generators/mdwa/code/templates/migration.rb +2 -1
- data/lib/generators/mdwa/entity/entity_generator.rb +1 -2
- data/lib/generators/mdwa/entity/templates/entity.rb +2 -1
- data/lib/generators/mdwa/from_requirements/from_requirements_generator.rb +56 -0
- data/lib/generators/mdwa/process/USAGE +4 -0
- data/lib/generators/mdwa/process/process_generator.rb +24 -0
- data/lib/generators/mdwa/process/templates/process.rb +49 -0
- data/lib/generators/mdwa/requirement/USAGE +4 -0
- data/lib/generators/mdwa/requirement/requirement_generator.rb +24 -0
- data/lib/generators/mdwa/requirement/templates/requirement.rb +21 -0
- data/lib/generators/mdwa/sandbox/sandbox_generator.rb +1 -1
- data/lib/generators/mdwa/sandbox/templates/app/assets/stylesheets/mdwa/template/backend.css.erb +2 -2
- data/lib/generators/mdwa/sandbox/templates/app/controllers/a/backend_controller.rb +2 -1
- data/lib/generators/mdwa/sandbox/templates/app/controllers/a/users/sessions_controller.rb +1 -1
- data/lib/generators/mdwa/sandbox/templates/app/controllers/public_controller.rb +1 -0
- data/lib/generators/mdwa/sandbox/templates/config/initializers/devise.rb +1 -0
- data/lib/generators/mdwa/sandbox/templates/config/initializers/mdwa_layout.rb +2 -1
- data/lib/generators/mdwa/sandbox/templates/config/locales/mdwa.en.yml +1 -1
- data/lib/generators/mdwa/sandbox/templates/db/migrate/devise_create_users.rb +1 -1
- data/lib/generators/mdwa/sandbox/templates/db/seeds.rb +1 -1
- data/lib/generators/mdwa/sandbox/templates/db/seeds/site.rb +1 -1
- data/lib/generators/mdwa/scaffold/scaffold_generator.rb +10 -3
- data/lib/generators/mdwa/scaffold/templates/controllers/ajax_controller.rb +2 -1
- data/lib/generators/mdwa/scaffold/templates/controllers/controller.rb +2 -1
- data/lib/generators/mdwa/scaffold/templates/db_migrate/migrate.rb +2 -1
- data/lib/generators/mdwa/scaffold/templates/models/model.rb +2 -1
- data/lib/generators/mdwa/scaffold/templates/models/module.rb +2 -1
- data/lib/generators/mdwa/user/templates/user.rb +12 -0
- data/lib/generators/mdwa/user/user_generator.rb +13 -104
- data/lib/generators/mdwa/{user → user_scaffold}/USAGE +1 -1
- data/lib/generators/mdwa/{user → user_scaffold}/templates/controllers/ajax_controller.rb +2 -1
- data/lib/generators/mdwa/{user → user_scaffold}/templates/controllers/controller.rb +2 -1
- data/lib/generators/mdwa/{user → user_scaffold}/templates/migrate.rb +2 -1
- data/lib/generators/mdwa/{user → user_scaffold}/templates/views/update.js.erb +0 -0
- data/lib/generators/mdwa/user_scaffold/user_scaffold_generator.rb +139 -0
- data/lib/mdd.rb +1 -1
- data/lib/mdwa.rb +1 -1
- data/lib/mdwa/all.rb +1 -1
- data/lib/mdwa/dsl.rb +17 -4
- data/lib/mdwa/dsl/action.rb +78 -0
- data/lib/mdwa/dsl/entities.rb +4 -4
- data/lib/mdwa/dsl/entity.rb +59 -23
- data/lib/mdwa/dsl/entity_actions.rb +73 -0
- data/lib/mdwa/dsl/entity_association.rb +1 -1
- data/lib/mdwa/dsl/entity_attribute.rb +1 -1
- data/lib/mdwa/dsl/entity_specification.rb +22 -0
- data/lib/mdwa/dsl/process.rb +53 -0
- data/lib/mdwa/dsl/process_detail.rb +57 -0
- data/lib/mdwa/dsl/process_detail_next_action.rb +16 -0
- data/lib/mdwa/dsl/requirement.rb +23 -0
- data/lib/mdwa/dsl/requirements.rb +57 -0
- data/lib/mdwa/dsl/user.rb +34 -0
- data/lib/mdwa/dsl/users.rb +57 -0
- data/lib/mdwa/dsl/workflow.rb +57 -0
- data/lib/mdwa/generators.rb +1 -1
- data/lib/mdwa/generators/model.rb +3 -1
- data/lib/mdwa/generators/model_association.rb +4 -1
- data/lib/mdwa/generators/model_attribute.rb +2 -1
- data/lib/mdwa/layout.rb +1 -1
- data/lib/mdwa/layout/base.rb +1 -1
- data/lib/mdwa/layout/helper.rb +1 -1
- data/lib/mdwa/version.rb +1 -1
- data/test/entity_actions_test.rb +101 -0
- data/test/entity_specifications_test.rb +37 -0
- data/test/entity_test.rb +1 -1
- data/test/layout_test.rb +1 -1
- data/test/process_test.rb +86 -0
- data/test/requirements_test.rb +44 -0
- data/test/users_test.rb +55 -0
- metadata +37 -10
- data/lib/mdwa/dsl/generator.rb +0 -10
- data/test/generators_test.rb +0 -0
data/app/helpers/mdwa_helper.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
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,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,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,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
|
data/lib/generators/mdwa/sandbox/templates/app/assets/stylesheets/mdwa/template/backend.css.erb
CHANGED
@@ -231,7 +231,7 @@ div.inside {
|
|
231
231
|
}
|
232
232
|
|
233
233
|
#leftbar ul li a:hover {
|
234
|
-
background:
|
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
|
-
|
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
|