mdd 3.0.0 → 3.0.1
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/lib/generators/mdwa/association/association_generator.rb +11 -10
- data/lib/generators/mdwa/association/templates/migrate/many_to_many.rb +3 -3
- data/lib/generators/mdwa/code/USAGE +5 -0
- data/lib/generators/mdwa/code/code_generator.rb +166 -0
- data/lib/generators/mdwa/code/templates/migration.rb +15 -0
- data/lib/generators/mdwa/entity/USAGE +5 -0
- data/lib/generators/mdwa/entity/entity_generator.rb +25 -0
- data/lib/generators/mdwa/entity/templates/entity.rb +50 -0
- data/lib/generators/mdwa/sandbox/sandbox_generator.rb +3 -1
- data/lib/generators/mdwa/sandbox/templates/app/controllers/a/home_controller.rb +4 -0
- data/lib/generators/mdwa/sandbox/templates/app/views/a/administrators/_form.html.erb +6 -38
- data/lib/generators/mdwa/sandbox/templates/app/views/a/administrators/_form_fields.html.erb +25 -0
- data/lib/generators/mdwa/sandbox/templates/db/seeds/site.rb +2 -1
- data/lib/generators/mdwa/scaffold/scaffold_generator.rb +5 -3
- data/lib/generators/mdwa/scaffold/templates/views/_list.html.erb +1 -1
- data/lib/generators/mdwa/user/USAGE +3 -0
- data/lib/generators/mdwa/user/templates/controllers/ajax_controller.rb +78 -0
- data/lib/generators/mdwa/user/templates/controllers/controller.rb +77 -0
- data/lib/generators/mdwa/user/templates/migrate.rb +15 -0
- data/lib/generators/mdwa/user/templates/model.rb +11 -0
- data/lib/generators/mdwa/user/templates/views/update.js.erb +12 -0
- data/lib/generators/mdwa/user/user_generator.rb +113 -0
- data/lib/mdwa/dsl.rb +7 -1
- data/lib/mdwa/dsl/entities.rb +14 -2
- data/lib/mdwa/dsl/entity.rb +94 -9
- data/lib/mdwa/dsl/entity_association.rb +59 -0
- data/lib/mdwa/dsl/entity_attribute.rb +46 -0
- data/lib/mdwa/dsl/generator.rb +10 -0
- data/lib/mdwa/generators/model.rb +13 -4
- data/lib/mdwa/generators/model_association.rb +1 -1
- data/lib/mdwa/generators/model_attribute.rb +10 -9
- data/lib/mdwa/version.rb +1 -1
- data/mdd.gemspec +1 -0
- data/test/entity_test.rb +188 -13
- metadata +35 -2
data/lib/mdwa/dsl/entity.rb
CHANGED
@@ -1,38 +1,123 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
|
-
require '
|
2
|
+
require 'mdwa/generators'
|
3
3
|
|
4
4
|
module MDWA
|
5
5
|
module DSL
|
6
6
|
|
7
7
|
class Entity
|
8
8
|
|
9
|
-
attr_accessor :name, :resource, :purpose, :model_name, :ajax, :generated, :force
|
10
|
-
attr_accessor :attributes, :associations
|
9
|
+
attr_accessor :name, :resource, :user, :purpose, :scaffold_name, :model_name, :ajax, :generated, :force
|
10
|
+
attr_accessor :attributes, :associations, :code_generations
|
11
11
|
|
12
12
|
def initialize( name )
|
13
13
|
# set the entity name
|
14
14
|
self.name = name
|
15
15
|
|
16
16
|
# fixed attributes
|
17
|
-
self.resource =
|
18
|
-
self.
|
17
|
+
self.resource = true
|
18
|
+
self.user = false
|
19
19
|
self.ajax = false
|
20
20
|
self.generated = false
|
21
21
|
self.force = false
|
22
22
|
|
23
23
|
# arrays
|
24
|
-
self.attributes =
|
25
|
-
self.associations =
|
24
|
+
self.attributes = {}
|
25
|
+
self.associations = {}
|
26
|
+
self.code_generations = []
|
26
27
|
end
|
27
28
|
|
29
|
+
def name=(value)
|
30
|
+
@name = value
|
31
|
+
end
|
32
|
+
|
33
|
+
def scaffold_name
|
34
|
+
return (@scaffold_name.blank? ? name: @scaffold_name)
|
35
|
+
end
|
36
|
+
|
37
|
+
def model_name
|
38
|
+
return (@model_name.blank? ? scaffold_name: @model_name)
|
39
|
+
end
|
40
|
+
|
41
|
+
def resource?
|
42
|
+
self.resource
|
43
|
+
end
|
44
|
+
|
45
|
+
def force?
|
46
|
+
self.force
|
47
|
+
end
|
48
|
+
|
49
|
+
def user?
|
50
|
+
self.user
|
51
|
+
end
|
52
|
+
|
53
|
+
#
|
54
|
+
# Declares one attribute of the list using the block given.
|
55
|
+
#
|
28
56
|
def attribute
|
29
|
-
attr =
|
57
|
+
attr = EntityAttribute.new(self)
|
30
58
|
yield( attr ) if block_given?
|
31
|
-
|
59
|
+
attr.raise_errors_if_invalid!
|
60
|
+
self.attributes[attr.name] = attr
|
32
61
|
end
|
33
62
|
|
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
|
+
# Defines one association
|
76
|
+
#
|
77
|
+
def association
|
78
|
+
assoc = EntityAssociation.new(self)
|
79
|
+
yield( assoc ) if block_given?
|
80
|
+
# assoc.raise_errors_if_invalid!
|
81
|
+
self.associations[assoc.name] = assoc
|
82
|
+
end
|
83
|
+
|
84
|
+
#
|
85
|
+
# Returns the associated model in app/models folder
|
86
|
+
#
|
87
|
+
def model_class
|
88
|
+
Generators::Model.new(self.model_name).model_class
|
89
|
+
end
|
90
|
+
|
91
|
+
#
|
92
|
+
# Entity file name
|
93
|
+
#
|
94
|
+
def file_name
|
95
|
+
self.name.singularize.underscore
|
96
|
+
end
|
97
|
+
|
98
|
+
#
|
99
|
+
# Generate MDWA scaffold code for structural schema.
|
100
|
+
#
|
34
101
|
def generate
|
102
|
+
# generates nothing if is not a resource
|
103
|
+
return nil unless self.resource
|
104
|
+
|
105
|
+
gen = []
|
106
|
+
gen << scaffold_name
|
107
|
+
|
108
|
+
attributes.each do |key, attr|
|
109
|
+
gen << attr.generate
|
110
|
+
end
|
111
|
+
|
112
|
+
associations.each do |key, assoc|
|
113
|
+
gen << assoc.generate
|
114
|
+
end
|
115
|
+
|
116
|
+
gen << "--ajax" if ajax
|
117
|
+
gen << "--force" if force
|
118
|
+
gen << "--model='#{model_name}'" if model_name != scaffold_name
|
35
119
|
|
120
|
+
"mdwa:#{user? ? 'user': 'scaffold'} #{gen.join(' ')}"
|
36
121
|
end
|
37
122
|
|
38
123
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module MDWA
|
3
|
+
module DSL
|
4
|
+
|
5
|
+
class EntityAssociation
|
6
|
+
|
7
|
+
attr_accessor :source, :destination, :destination_view
|
8
|
+
attr_accessor :name, :type, :composition, :description
|
9
|
+
|
10
|
+
ACCEPTED_TYPES = [:one_to_many, :many_to_one, :one_to_one, :one_to_one_not_navigable, :many_to_many]
|
11
|
+
|
12
|
+
def initialize(source)
|
13
|
+
self.source = source
|
14
|
+
self.composition = false
|
15
|
+
end
|
16
|
+
|
17
|
+
#
|
18
|
+
# Sets the destination entity.
|
19
|
+
# Sets the name if not set yet.
|
20
|
+
#
|
21
|
+
def destination=(value)
|
22
|
+
self.name = value.downcase if self.name.blank?
|
23
|
+
@destination = value
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# Return the mapped type for the code generation.
|
28
|
+
#
|
29
|
+
def generator_type
|
30
|
+
case self.type.to_sym
|
31
|
+
when :one_to_many
|
32
|
+
return (self.composition ? 'nested_many' : 'has_many' )
|
33
|
+
when :one_to_one
|
34
|
+
return (self.composition ? 'nested_one' : 'belongs_to' )
|
35
|
+
when :one_to_one_not_navigable
|
36
|
+
'has_one'
|
37
|
+
when :many_to_one
|
38
|
+
'belongs_to'
|
39
|
+
when :many_to_many
|
40
|
+
'has_and_belongs_to_many'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def generate
|
45
|
+
destination = DSL.entity(self.destination.camelize)
|
46
|
+
|
47
|
+
gen = []
|
48
|
+
gen << self.name
|
49
|
+
gen << destination.scaffold_name + (destination.model_name != destination.scaffold_name ? ",#{destination.model_name}" : '')
|
50
|
+
gen << (self.destination_view || destination.default_attribute.name)
|
51
|
+
gen << generator_type
|
52
|
+
|
53
|
+
gen.join(':')
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'mdwa/generators'
|
3
|
+
|
4
|
+
module MDWA
|
5
|
+
module DSL
|
6
|
+
|
7
|
+
class EntityAttribute
|
8
|
+
|
9
|
+
attr_accessor :entity, :name, :type, :default
|
10
|
+
|
11
|
+
ACCEPTED_TYPES = MDWA::Generators::ModelAttribute::STATIC_TYPES
|
12
|
+
|
13
|
+
def initialize(entity)
|
14
|
+
self.entity = entity
|
15
|
+
self.default = false
|
16
|
+
end
|
17
|
+
|
18
|
+
def raise_errors_if_invalid!
|
19
|
+
if !valid?
|
20
|
+
raise "Invalid entity attribute: name is blank" if self.name.blank?
|
21
|
+
raise "Invalid entity attribute: '#{name}' - type is blank" if self.type.blank?
|
22
|
+
raise "Invalid entity attribute: '#{name}' - type '#{type}' is invalid" if self.type_invalid?
|
23
|
+
raise "Invalid entity attribute: '#{name}' - entity is nil" if self.entity.blank?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def valid?
|
28
|
+
!entity.nil? and !name.blank? and !type.blank? and !type_invalid?
|
29
|
+
end
|
30
|
+
|
31
|
+
def type_invalid?
|
32
|
+
!ACCEPTED_TYPES.include?( self.type.to_sym )
|
33
|
+
end
|
34
|
+
|
35
|
+
def default?
|
36
|
+
self.default
|
37
|
+
end
|
38
|
+
|
39
|
+
def generate
|
40
|
+
"#{name}:#{type}"
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -4,9 +4,11 @@ module MDWA
|
|
4
4
|
class Model
|
5
5
|
|
6
6
|
attr_accessor :name, :namespace, :attributes, :specific_model_name
|
7
|
-
|
7
|
+
|
8
|
+
#
|
8
9
|
# Sets the variables by the string
|
9
10
|
# Format: <namespace>/<model>, the namespace is optional.
|
11
|
+
#
|
10
12
|
def initialize( arg )
|
11
13
|
|
12
14
|
self.namespace = '' # prevents unitialized variable errors
|
@@ -36,6 +38,13 @@ module MDWA
|
|
36
38
|
return specific_model.klass
|
37
39
|
end
|
38
40
|
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# Returns the associated model in app/models folder
|
44
|
+
#
|
45
|
+
def model_class
|
46
|
+
self.klass.classify.constantize
|
47
|
+
end
|
39
48
|
|
40
49
|
def controller_name
|
41
50
|
namespace_scope + name.pluralize
|
@@ -89,9 +98,9 @@ module MDWA
|
|
89
98
|
|
90
99
|
private
|
91
100
|
def namespace_scope
|
92
|
-
|
93
|
-
|
94
|
-
|
101
|
+
return "#{namespace}::" if namespace?
|
102
|
+
return ''
|
103
|
+
end
|
95
104
|
|
96
105
|
end
|
97
106
|
end
|
@@ -6,7 +6,7 @@ module MDWA
|
|
6
6
|
class ModelAttribute
|
7
7
|
attr_accessor :name, :type, :reference, :reference_type, :model
|
8
8
|
|
9
|
-
STATIC_TYPES = [:boolean, :date, :datetime, :decimal, :float, :integer, :string, :text, :time, :timestamp, :file]
|
9
|
+
STATIC_TYPES = [:boolean, :date, :datetime, :decimal, :float, :integer, :string, :text, :time, :timestamp, :file, :password]
|
10
10
|
|
11
11
|
# Sets the attributes variables
|
12
12
|
# Format: <name>:<type>,<model>:<reference>:<reference_type>
|
@@ -51,14 +51,14 @@ module MDWA
|
|
51
51
|
|
52
52
|
def migration_field
|
53
53
|
@migration_field ||= case self.type.to_s.to_sym
|
54
|
-
when :string, :file
|
55
|
-
when :boolean
|
56
|
-
when :date
|
57
|
-
when :datetime
|
58
|
-
when :decimal, :float
|
59
|
-
when :text
|
60
|
-
when :time
|
61
|
-
when :timestamp
|
54
|
+
when :string, :file, :password then 'string'
|
55
|
+
when :boolean then 'boolean'
|
56
|
+
when :date then 'date'
|
57
|
+
when :datetime then 'datetime'
|
58
|
+
when :decimal, :float then 'decimal'
|
59
|
+
when :text then 'text'
|
60
|
+
when :time then 'time'
|
61
|
+
when :timestamp then 'timestamp'
|
62
62
|
else
|
63
63
|
'integer'
|
64
64
|
end
|
@@ -74,6 +74,7 @@ module MDWA
|
|
74
74
|
when :date then 'date_select'
|
75
75
|
when :text then 'text_area'
|
76
76
|
when :boolean then 'check_box'
|
77
|
+
when :password then 'password_field'
|
77
78
|
else
|
78
79
|
'text_field'
|
79
80
|
end
|
data/lib/mdwa/version.rb
CHANGED
data/mdd.gemspec
CHANGED
data/test/entity_test.rb
CHANGED
@@ -9,18 +9,84 @@ describe MDWA::DSL::Entities do
|
|
9
9
|
before do
|
10
10
|
# create product entity
|
11
11
|
MDWA::DSL.entities.register "Product" do |e|
|
12
|
+
e.purpose = 'Store the company products.'
|
12
13
|
e.resource = true
|
13
14
|
e.ajax = true
|
14
|
-
|
15
|
+
|
16
|
+
## attributes
|
15
17
|
e.attribute do |attr|
|
16
|
-
attr.name = '
|
18
|
+
attr.name = 'name'
|
19
|
+
attr.type = 'string'
|
17
20
|
end
|
21
|
+
e.attribute do |attr|
|
22
|
+
attr.name = 'category'
|
23
|
+
attr.type = 'integer'
|
24
|
+
end
|
25
|
+
e.attribute do |attr|
|
26
|
+
attr.name = 'stock'
|
27
|
+
attr.type = 'integer'
|
28
|
+
end
|
29
|
+
e.attribute do |attr|
|
30
|
+
attr.name = 'published'
|
31
|
+
attr.type = 'boolean'
|
32
|
+
end
|
33
|
+
|
34
|
+
## associations
|
35
|
+
e.association do |a|
|
36
|
+
a.destination = 'Category'
|
37
|
+
a.type = 'many_to_one'
|
38
|
+
a.description = 'Holds the category'
|
39
|
+
end
|
40
|
+
|
41
|
+
e.association do |a|
|
42
|
+
a.name = 'marca'
|
43
|
+
a.destination = 'Brand'
|
44
|
+
a.type = 'one_to_many'
|
45
|
+
a.composition = true
|
46
|
+
a.description = 'Product`s brand'
|
47
|
+
end
|
48
|
+
|
49
|
+
e.association do |a|
|
50
|
+
a.destination = 'Category2'
|
51
|
+
a.type = 'one_to_one'
|
52
|
+
end
|
53
|
+
|
54
|
+
e.association do |a|
|
55
|
+
a.destination = 'Category3'
|
56
|
+
a.type = 'one_to_one'
|
57
|
+
a.composition = true
|
58
|
+
end
|
59
|
+
|
60
|
+
e.association do |a|
|
61
|
+
a.destination = 'Category4'
|
62
|
+
a.type = 'one_to_many'
|
63
|
+
end
|
64
|
+
|
65
|
+
e.association do |a|
|
66
|
+
a.destination = 'Category5'
|
67
|
+
a.type = 'one_to_one_not_navigable'
|
68
|
+
end
|
69
|
+
|
70
|
+
e.association do |a|
|
71
|
+
a.destination = 'Category6'
|
72
|
+
a.type = 'many_to_many'
|
73
|
+
end
|
74
|
+
|
75
|
+
e.association do |a|
|
76
|
+
a.destination = 'Category7'
|
77
|
+
a.type = 'many_to_one'
|
78
|
+
end
|
79
|
+
|
18
80
|
end
|
19
81
|
MDWA::DSL.entity("Product").must_be_instance_of MDWA::DSL::Entity
|
20
82
|
|
21
83
|
# create category entity
|
22
84
|
MDWA::DSL.entities.register "Category" do |e|
|
23
85
|
e.resource = false
|
86
|
+
e.attribute do |attr|
|
87
|
+
attr.name = 'name'
|
88
|
+
attr.type = 'string'
|
89
|
+
end
|
24
90
|
end
|
25
91
|
MDWA::DSL.entity("Category").must_be_instance_of MDWA::DSL::Entity
|
26
92
|
end
|
@@ -37,31 +103,140 @@ describe MDWA::DSL::Entities do
|
|
37
103
|
product.must_be_instance_of MDWA::DSL::Entity
|
38
104
|
product.resource.must_equal true
|
39
105
|
product.ajax.must_equal true
|
40
|
-
product.
|
41
|
-
product.
|
42
|
-
product.attributes.must_be_instance_of Array
|
106
|
+
product.associations.must_be_instance_of Hash
|
107
|
+
product.attributes.must_be_instance_of Hash
|
43
108
|
product.model_name.must_equal( "Product" )
|
44
109
|
|
45
110
|
category = MDWA::DSL.entity("Category")
|
46
111
|
category.must_be_instance_of MDWA::DSL::Entity
|
47
112
|
category.resource.must_equal false
|
48
|
-
category.associations.must_be_instance_of
|
49
|
-
category.attributes.must_be_instance_of
|
113
|
+
category.associations.must_be_instance_of Hash
|
114
|
+
category.attributes.must_be_instance_of Hash
|
50
115
|
end
|
51
116
|
|
117
|
+
it "must override elements" do
|
118
|
+
MDWA::DSL.entities.register "Product" do |e|
|
119
|
+
e.resource = false
|
120
|
+
end
|
121
|
+
MDWA::DSL.entity("Product").resource.must_equal false
|
122
|
+
end
|
52
123
|
|
53
|
-
it "must
|
54
|
-
MDWA::DSL.
|
124
|
+
it "must store attributes" do
|
125
|
+
product = MDWA::DSL.entity("Product")
|
126
|
+
|
127
|
+
product.attributes.count.must_equal 4
|
128
|
+
product.attributes['name'].type.must_equal 'string'
|
129
|
+
product.attributes['name'].name.must_equal 'name'
|
130
|
+
product.attributes['category'].type.must_equal 'integer'
|
131
|
+
product.attributes['category'].name.must_equal 'category'
|
132
|
+
product.attributes['published'].type.must_equal 'boolean'
|
133
|
+
product.attributes['published'].name.must_equal 'published'
|
134
|
+
product.attributes['stock'].type.must_equal 'integer'
|
135
|
+
product.attributes['stock'].name.must_equal 'stock'
|
136
|
+
|
137
|
+
product.default_attribute.name.must_equal 'name'
|
138
|
+
|
139
|
+
category = MDWA::DSL.entity("Category")
|
140
|
+
category.attributes.count.must_equal 1
|
141
|
+
category.default_attribute.name.must_equal 'name'
|
55
142
|
end
|
56
143
|
|
144
|
+
it "must keep associations" do
|
145
|
+
|
146
|
+
product = MDWA::DSL.entity("Product")
|
147
|
+
product.associations.count.must_equal 8
|
148
|
+
|
149
|
+
product.associations['category'].type.must_equal 'many_to_one'
|
150
|
+
product.associations['category'].destination.must_equal 'Category'
|
151
|
+
product.associations['category'].generator_type.must_equal 'belongs_to'
|
152
|
+
|
153
|
+
product.associations['brand'].must_equal nil
|
154
|
+
product.associations['marca'].type.must_equal 'one_to_many'
|
155
|
+
product.associations['marca'].destination.must_equal 'Brand'
|
156
|
+
product.associations['marca'].generator_type.must_equal 'nested_many'
|
157
|
+
|
158
|
+
product.associations['category2'].generator_type.must_equal 'belongs_to'
|
159
|
+
product.associations['category3'].generator_type.must_equal 'nested_one'
|
160
|
+
product.associations['category4'].generator_type.must_equal 'has_many'
|
161
|
+
product.associations['category5'].generator_type.must_equal 'has_one'
|
162
|
+
product.associations['category6'].generator_type.must_equal 'has_and_belongs_to_many'
|
163
|
+
product.associations['category7'].generator_type.must_equal 'belongs_to'
|
164
|
+
|
165
|
+
end
|
57
166
|
|
58
|
-
it "must
|
167
|
+
it "must generated correct code" do
|
59
168
|
|
60
|
-
MDWA::DSL.entities.register "
|
61
|
-
|
169
|
+
MDWA::DSL.entities.register "Project" do |p|
|
170
|
+
p.resource = true
|
171
|
+
p.scaffold_name = 'a/project'
|
172
|
+
p.ajax = true
|
173
|
+
|
174
|
+
p.attribute do |a|
|
175
|
+
a.name = 'nome'
|
176
|
+
a.type = 'string'
|
177
|
+
end
|
178
|
+
p.attribute do |a|
|
179
|
+
a.name = 'ativo'
|
180
|
+
a.type = 'boolean'
|
181
|
+
end
|
182
|
+
p.attribute do |a|
|
183
|
+
a.name = 'situacao_atual'
|
184
|
+
a.type = 'text'
|
185
|
+
end
|
186
|
+
|
187
|
+
p.association do |assoc|
|
188
|
+
assoc.destination = 'Group'
|
189
|
+
assoc.type = 'many_to_one'
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
MDWA::DSL.entities.register "Group" do |p|
|
194
|
+
p.resource = true
|
195
|
+
p.scaffold_name = 'a/group'
|
196
|
+
p.ajax = true
|
197
|
+
p.force = true
|
198
|
+
|
199
|
+
p.attribute do |a|
|
200
|
+
a.name = 'nome'
|
201
|
+
a.type = 'string'
|
202
|
+
end
|
203
|
+
|
204
|
+
p.attribute do |a|
|
205
|
+
a.name = 'ativo'
|
206
|
+
a.type = 'boolean'
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
project = MDWA::DSL.entity("Project")
|
211
|
+
group = MDWA::DSL.entity("Group")
|
212
|
+
|
213
|
+
project.scaffold_name.must_equal 'a/project'
|
214
|
+
project.model_name.must_equal 'a/project'
|
215
|
+
|
216
|
+
project.generate.must_equal "mdwa:scaffold a/project nome:string ativo:boolean situacao_atual:text group:a/group:nome:belongs_to --ajax"
|
217
|
+
group.generate.must_equal "mdwa:scaffold a/group nome:string ativo:boolean --ajax --force"
|
218
|
+
end
|
219
|
+
|
220
|
+
it "should not generate non-resource entities" do
|
221
|
+
MDWA::DSL.entities.register "Task" do |p|
|
222
|
+
p.resource = false
|
223
|
+
p.scaffold_name = 'a/task'
|
224
|
+
p.ajax = true
|
225
|
+
p.force = true
|
226
|
+
|
227
|
+
p.attribute do |a|
|
228
|
+
a.name = 'name'
|
229
|
+
a.type = 'string'
|
230
|
+
end
|
231
|
+
|
232
|
+
p.attribute do |a|
|
233
|
+
a.name = 'active'
|
234
|
+
a.type = 'boolean'
|
235
|
+
end
|
62
236
|
end
|
63
|
-
MDWA::DSL.entity("Product").resource.must_equal false
|
64
237
|
|
238
|
+
task = MDWA::DSL.entity('Task')
|
239
|
+
task.generate.must_equal nil
|
65
240
|
end
|
66
241
|
|
67
242
|
end
|