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.
- 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/lib/mdd.rb
CHANGED
data/lib/mdwa.rb
CHANGED
data/lib/mdwa/all.rb
CHANGED
data/lib/mdwa/dsl.rb
CHANGED
@@ -1,15 +1,28 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
require 'mdwa/dsl/entities'
|
3
|
+
require 'mdwa/dsl/users'
|
4
|
+
require 'mdwa/dsl/requirements'
|
5
|
+
require 'mdwa/dsl/workflow'
|
6
|
+
|
3
7
|
module MDWA
|
4
8
|
module DSL
|
5
9
|
|
6
10
|
autoload :Entity, 'mdwa/dsl/entity'
|
7
11
|
autoload :EntityAttribute, 'mdwa/dsl/entity_attribute'
|
8
12
|
autoload :EntityAssociation, 'mdwa/dsl/entity_association'
|
9
|
-
autoload :
|
13
|
+
autoload :EntitySpecification, 'mdwa/dsl/entity_specification'
|
14
|
+
autoload :EntityActions, 'mdwa/dsl/entity_actions'
|
15
|
+
autoload :Action, 'mdwa/dsl/action'
|
16
|
+
autoload :User, 'mdwa/dsl/user'
|
17
|
+
autoload :Requirement, 'mdwa/dsl/requirement'
|
18
|
+
autoload :Process, 'mdwa/dsl/process'
|
19
|
+
autoload :ProcessDetail, 'mdwa/dsl/process_detail'
|
20
|
+
autoload :ProcessDetailNextAction, 'mdwa/dsl/process_detail_next_action'
|
10
21
|
|
11
|
-
STRUCTURAL_PATH
|
12
|
-
|
22
|
+
STRUCTURAL_PATH = 'app/mdwa/structure/'
|
23
|
+
USERS_PATH = 'app/mdwa/users/'
|
24
|
+
WORKFLOW_PATH = 'app/mdwa/workflow/'
|
25
|
+
REQUIREMENTS_PATH = 'app/mdwa/requirements/'
|
13
26
|
|
14
27
|
end
|
15
|
-
end
|
28
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module MDWA
|
3
|
+
module DSL
|
4
|
+
|
5
|
+
class Action
|
6
|
+
|
7
|
+
ACTION_TYPES = [:collection, :member]
|
8
|
+
ALLOWED_METHODS = [:get, :post, :put, :delete]
|
9
|
+
PREDEFINED_REQUEST_TYPES = [:html, :ajax, :ajax_js, :modalbox]
|
10
|
+
|
11
|
+
attr_accessor :name, :type, :method, :request_type, :response, :resource
|
12
|
+
|
13
|
+
def initialize(name, type, options)
|
14
|
+
self.name = name.to_sym
|
15
|
+
self.type = type.to_sym
|
16
|
+
self.method = options[:method] || :get
|
17
|
+
self.request_type = options[:request_type] || :html
|
18
|
+
self.response = options[:response] || {}
|
19
|
+
self.resource = options[:resource] || false
|
20
|
+
end
|
21
|
+
|
22
|
+
def request_type=(value)
|
23
|
+
if value.is_a? Array
|
24
|
+
@request_type = value
|
25
|
+
else
|
26
|
+
@request_type = [value]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def response=(value)
|
31
|
+
if value.is_a? Hash
|
32
|
+
@response = value
|
33
|
+
else
|
34
|
+
@response = {self.method.first.to_sym => value}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def member?
|
39
|
+
self.type.to_sym == :member
|
40
|
+
end
|
41
|
+
|
42
|
+
def collection?
|
43
|
+
self.type.to_sym == :collection
|
44
|
+
end
|
45
|
+
|
46
|
+
def resource?
|
47
|
+
resource
|
48
|
+
end
|
49
|
+
|
50
|
+
def generate_controller
|
51
|
+
action_str = []
|
52
|
+
action_str << "\tdef #{self.name.to_s}"
|
53
|
+
action_str << ""
|
54
|
+
action_str << "\t\trespond_to do |format|"
|
55
|
+
self.request_type.each do |request|
|
56
|
+
case request.to_sym
|
57
|
+
when :modalbox
|
58
|
+
# action_str << "\t\t\tformat.html{render :layout => false}"
|
59
|
+
when :html
|
60
|
+
action_str << "\t\t\tformat.html #{"{#{self.response[:html]}}" unless self.response[:html].blank?}"
|
61
|
+
when :ajax
|
62
|
+
action_str << "\t\t\tformat.js #{"{#{self.response[:ajax]}}" unless self.response[:ajax].blank?}"
|
63
|
+
when :ajax_js
|
64
|
+
action_str << "\t\t\tformat.json #{"{#{self.response[:ajax_js]}}" unless self.response[:ajax_js].blank?}"
|
65
|
+
else
|
66
|
+
action_str << "\t\t\tformat.#{request.to_s} #{"{#{self.response[request.to_sym]}}" unless self.response[request.to_sym].blank?}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
action_str << "\t\tend"
|
70
|
+
|
71
|
+
action_str << "\tend"
|
72
|
+
# action_str.join("\n")
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
data/lib/mdwa/dsl/entities.rb
CHANGED
@@ -20,9 +20,9 @@ module MDWA
|
|
20
20
|
#
|
21
21
|
def register( name )
|
22
22
|
# retrive or initialize a entity
|
23
|
-
|
24
|
-
yield
|
25
|
-
add_node
|
23
|
+
entity = element(name) || Entity.new( name )
|
24
|
+
yield(entity) if block_given?
|
25
|
+
add_node entity # add to the list
|
26
26
|
end
|
27
27
|
|
28
28
|
#
|
@@ -54,4 +54,4 @@ module MDWA
|
|
54
54
|
|
55
55
|
|
56
56
|
end # dsl
|
57
|
-
end # mdd
|
57
|
+
end # mdd
|
data/lib/mdwa/dsl/entity.rb
CHANGED
@@ -6,24 +6,25 @@ module MDWA
|
|
6
6
|
|
7
7
|
class Entity
|
8
8
|
|
9
|
-
attr_accessor :name, :resource, :user, :purpose, :scaffold_name, :model_name, :ajax, :
|
10
|
-
attr_accessor :attributes, :associations, :code_generations
|
9
|
+
attr_accessor :name, :resource, :user, :purpose, :scaffold_name, :model_name, :ajax, :force
|
10
|
+
attr_accessor :attributes, :associations, :actions, :specifications, :code_generations
|
11
11
|
|
12
12
|
def initialize( name )
|
13
13
|
# set the entity name
|
14
14
|
self.name = name
|
15
15
|
|
16
|
+
# arrays
|
17
|
+
self.attributes = {}
|
18
|
+
self.associations = {}
|
19
|
+
self.actions = EntityActions.new(self)
|
20
|
+
self.specifications = []
|
21
|
+
self.code_generations = []
|
22
|
+
|
16
23
|
# fixed attributes
|
17
24
|
self.resource = true
|
18
25
|
self.user = false
|
19
26
|
self.ajax = false
|
20
|
-
self.generated = false
|
21
27
|
self.force = false
|
22
|
-
|
23
|
-
# arrays
|
24
|
-
self.attributes = {}
|
25
|
-
self.associations = {}
|
26
|
-
self.code_generations = []
|
27
28
|
end
|
28
29
|
|
29
30
|
def name=(value)
|
@@ -31,11 +32,22 @@ module MDWA
|
|
31
32
|
end
|
32
33
|
|
33
34
|
def scaffold_name
|
34
|
-
return (@scaffold_name.blank? ? name: @scaffold_name)
|
35
|
+
return (@scaffold_name.blank? ? name : @scaffold_name)
|
35
36
|
end
|
36
37
|
|
37
38
|
def model_name
|
38
|
-
return (@model_name.blank? ? scaffold_name: @model_name)
|
39
|
+
return (@model_name.blank? ? scaffold_name : @model_name)
|
40
|
+
end
|
41
|
+
|
42
|
+
def resource=(value)
|
43
|
+
@resource = value
|
44
|
+
|
45
|
+
# if entity is resorceful, generate default resource action
|
46
|
+
if resource?
|
47
|
+
self.actions.set_resource_actions
|
48
|
+
else
|
49
|
+
self.actions.clear_resource_actions
|
50
|
+
end
|
39
51
|
end
|
40
52
|
|
41
53
|
def resource?
|
@@ -60,17 +72,6 @@ module MDWA
|
|
60
72
|
self.attributes[attr.name] = attr
|
61
73
|
end
|
62
74
|
|
63
|
-
#
|
64
|
-
# Selects the default attribute of the entity
|
65
|
-
#
|
66
|
-
def default_attribute
|
67
|
-
default_attr = self.attributes.first.last # first element value
|
68
|
-
self.attributes.each do |key, attr|
|
69
|
-
default_attr = attr if attr.default?
|
70
|
-
end
|
71
|
-
return default_attr
|
72
|
-
end
|
73
|
-
|
74
75
|
#
|
75
76
|
# Defines one association
|
76
77
|
#
|
@@ -81,6 +82,30 @@ module MDWA
|
|
81
82
|
self.associations[assoc.name] = assoc
|
82
83
|
end
|
83
84
|
|
85
|
+
#
|
86
|
+
# Include a member action
|
87
|
+
# Params: name, method = get, request_type = html
|
88
|
+
def member_action(name, method = nil, request_type = nil)
|
89
|
+
self.actions.member_action(name, method, request_type)
|
90
|
+
end
|
91
|
+
|
92
|
+
#
|
93
|
+
# Include a collection action
|
94
|
+
# Params: name, method = get, request_type = html
|
95
|
+
def collection_action(name, method, request_type)
|
96
|
+
self.actions.collection_action(name, method, request_type)
|
97
|
+
end
|
98
|
+
|
99
|
+
#
|
100
|
+
# Entity specifications.
|
101
|
+
# Params: description and block
|
102
|
+
#
|
103
|
+
def specify(description)
|
104
|
+
specification = EntitySpecification.new(description)
|
105
|
+
yield(specification) if block_given?
|
106
|
+
self.specifications << specification
|
107
|
+
end
|
108
|
+
|
84
109
|
#
|
85
110
|
# Returns the associated model in app/models folder
|
86
111
|
#
|
@@ -95,6 +120,17 @@ module MDWA
|
|
95
120
|
self.name.singularize.underscore
|
96
121
|
end
|
97
122
|
|
123
|
+
#
|
124
|
+
# Selects the default attribute of the entity
|
125
|
+
#
|
126
|
+
def default_attribute
|
127
|
+
default_attr = self.attributes.first.last # first element value
|
128
|
+
self.attributes.each do |key, attr|
|
129
|
+
default_attr = attr if attr.default?
|
130
|
+
end
|
131
|
+
return default_attr
|
132
|
+
end
|
133
|
+
|
98
134
|
#
|
99
135
|
# Generate MDWA scaffold code for structural schema.
|
100
136
|
#
|
@@ -117,10 +153,10 @@ module MDWA
|
|
117
153
|
gen << "--force" if force
|
118
154
|
gen << "--model='#{model_name}'" if model_name != scaffold_name
|
119
155
|
|
120
|
-
"mdwa:#{user? ? '
|
156
|
+
"mdwa:#{user? ? 'user_scaffold': 'scaffold'} #{gen.join(' ')}"
|
121
157
|
end
|
122
158
|
|
123
159
|
end
|
124
160
|
|
125
161
|
end
|
126
|
-
end
|
162
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module MDWA
|
3
|
+
module DSL
|
4
|
+
|
5
|
+
class EntityActions
|
6
|
+
|
7
|
+
attr_accessor :entity, :actions
|
8
|
+
|
9
|
+
def initialize(entity)
|
10
|
+
self.entity = entity
|
11
|
+
self.actions = {}
|
12
|
+
end
|
13
|
+
|
14
|
+
def member_action(name, method, request_type)
|
15
|
+
self.actions[name.to_sym] = Action.new(name.to_sym, :member, :method => method, :request_type => request_type)
|
16
|
+
end
|
17
|
+
|
18
|
+
#
|
19
|
+
# Include a collection action
|
20
|
+
# Params: name, method = get, request_type = html
|
21
|
+
def collection_action(name, method, request_type)
|
22
|
+
self.actions[name.to_sym] = Action.new(name.to_sym, :collection, :method => method, :request_type => request_type)
|
23
|
+
end
|
24
|
+
|
25
|
+
def member_actions
|
26
|
+
actions.values.to_a.select{|a| a.member? and !a.resource?}
|
27
|
+
end
|
28
|
+
|
29
|
+
def collection_actions
|
30
|
+
actions.values.to_a.select{|a| a.collection? and !a.resource?}
|
31
|
+
end
|
32
|
+
|
33
|
+
def generate_routes
|
34
|
+
routes = []
|
35
|
+
self.actions.values do |action|
|
36
|
+
routes << "#{action.method.to_s} '#{entity.name.underscore.pluralize}/#{action.name.to_s}' => #{action.name.to_sym}"
|
37
|
+
end
|
38
|
+
return routes
|
39
|
+
end
|
40
|
+
|
41
|
+
def generate_controller
|
42
|
+
controller = []
|
43
|
+
self.actions.value.select {|a| !a.resource?}.each do |action|
|
44
|
+
controller << action.generate_controller
|
45
|
+
end
|
46
|
+
# controller.join("\n\n")
|
47
|
+
end
|
48
|
+
|
49
|
+
# Returns all resource actions
|
50
|
+
def set_resource_actions
|
51
|
+
self.actions[:index] = Action.new(:index, :collection, :resource => true)
|
52
|
+
self.actions[:new] = Action.new(:new, :collection, :resource => true)
|
53
|
+
self.actions[:edit] = Action.new(:edit, :member, :resource => true)
|
54
|
+
self.actions[:show] = Action.new(:show, :member, :resource => true)
|
55
|
+
self.actions[:create] = Action.new(:create, :collection, :method => :post, :resource => true)
|
56
|
+
self.actions[:update] = Action.new(:update, :member, :method => :put, :resource => true)
|
57
|
+
self.actions[:delete] = Action.new(:delete, :member, :method => :delete, :resource => true)
|
58
|
+
end
|
59
|
+
|
60
|
+
def clear_resource_actions
|
61
|
+
self.actions.delete :index
|
62
|
+
self.actions.delete :new
|
63
|
+
self.actions.delete :edit
|
64
|
+
self.actions.delete :show
|
65
|
+
self.actions.delete :create
|
66
|
+
self.actions.delete :update
|
67
|
+
self.actions.delete :delete
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module MDWA
|
3
|
+
module DSL
|
4
|
+
|
5
|
+
class EntitySpecification
|
6
|
+
|
7
|
+
attr_accessor :description, :details
|
8
|
+
|
9
|
+
def initialize(description)
|
10
|
+
self.description = description
|
11
|
+
|
12
|
+
self.details = []
|
13
|
+
end
|
14
|
+
|
15
|
+
def such_as(detail)
|
16
|
+
self.details << detail
|
17
|
+
end
|
18
|
+
|
19
|
+
end # class
|
20
|
+
|
21
|
+
end # dsl
|
22
|
+
end # mdwa
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module MDWA
|
3
|
+
module DSL
|
4
|
+
|
5
|
+
class Process
|
6
|
+
attr_accessor :description, :alias, :details, :start_for_roles
|
7
|
+
|
8
|
+
def initialize(description)
|
9
|
+
self.description = description
|
10
|
+
|
11
|
+
# Hash: [detail_alias] => ProcessDetail object
|
12
|
+
self.details = {}
|
13
|
+
# Hash: [role_alias] => detail_alias
|
14
|
+
self.start_for_roles = {}
|
15
|
+
end
|
16
|
+
|
17
|
+
def alias
|
18
|
+
@alias ||= self.description.gsub(' ', '_').underscore
|
19
|
+
end
|
20
|
+
|
21
|
+
def start_for(role, detail_alias)
|
22
|
+
start_for_roles[role] = detail_alias
|
23
|
+
end
|
24
|
+
|
25
|
+
def detail(description)
|
26
|
+
detail = ProcessDetail.new(self, description)
|
27
|
+
self.details[detail.alias] = detail
|
28
|
+
yield(detail) if block_given?
|
29
|
+
end
|
30
|
+
|
31
|
+
#
|
32
|
+
# Return the ProcessDetail based on alias, or entity and action.
|
33
|
+
# Params:
|
34
|
+
# :alias => detail alias
|
35
|
+
# :entity
|
36
|
+
# :action
|
37
|
+
def process_detail(options = {})
|
38
|
+
detail = self.details[options[:alias]] unless options[:alias].blank?
|
39
|
+
if detail.nil?
|
40
|
+
self.details.values.each do |d|
|
41
|
+
if( d.detail_action.entity == options[:entity] and d.detail_action.action == options[:action] )
|
42
|
+
detail = d
|
43
|
+
break
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
return detail
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end # dsl
|
53
|
+
end # mdwa
|