mdd 3.0.2 → 3.0.3

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,57 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'ostruct'
3
+ module MDWA
4
+ module DSL
5
+
6
+ class ProcessDetail
7
+ attr_accessor :process, :description, :alias, :user_roles, :detail_action, :next_actions
8
+
9
+ def initialize(process, description)
10
+ self.process = process
11
+ self.description = description
12
+
13
+ self.user_roles = []
14
+ self.next_actions = []
15
+ self.detail_action = OpenStruct.new
16
+ end
17
+
18
+ # Unique alias for detailing
19
+ # Default: Detail name underscored
20
+ def alias
21
+ @alias ||= self.description.gsub(' ', '_').underscore
22
+ end
23
+
24
+ # Refered action
25
+ # Params:
26
+ # => :entity
27
+ # => :action
28
+ def action(entity, action)
29
+ self.detail_action.entity = entity
30
+ self.detail_action.action = action
31
+ end
32
+
33
+ # Possible next action
34
+ # Params:
35
+ # => :alias
36
+ # => :entity
37
+ # => :action
38
+ # => :method
39
+ # => :request
40
+ # => :redirect => boolean
41
+ # => :render => boolean
42
+ # => :when - situation when it might occur
43
+ def next_action(detail_alias, options = {})
44
+ next_action = ProcessDetailNextAction.new(detail_alias)
45
+ next_action.method = options[:method] || :get
46
+ next_action.request = options[:request] || :html
47
+ next_action.redirect = options[:redirect] || false
48
+ next_action.render = options[:render] || false
49
+ next_action.when = options[:when]
50
+
51
+ next_actions << next_action
52
+ end
53
+
54
+ end
55
+
56
+ end # dsl
57
+ end # mdwa
@@ -0,0 +1,16 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module MDWA
3
+ module DSL
4
+
5
+ class ProcessDetailNextAction
6
+
7
+ attr_accessor :alias, :method, :request, :redirect, :render, :when
8
+
9
+ def initialize(next_action_alias)
10
+ self.alias = next_action_alias
11
+ end
12
+
13
+ end
14
+
15
+ end # dsl
16
+ end # mdwa
@@ -0,0 +1,23 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module MDWA
3
+ module DSL
4
+
5
+ class Requirement
6
+
7
+ attr_accessor :summary, :description, :alias, :users, :entities
8
+
9
+ def initialize(summary = nil)
10
+ self.summary = summary
11
+
12
+ self.users = []
13
+ self.entities = []
14
+ end
15
+
16
+ def alias
17
+ @alias ||= self.summary.gsub(' ', '_').underscore
18
+ end
19
+
20
+ end
21
+
22
+ end # dsl
23
+ end # mdwa
@@ -0,0 +1,57 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module MDWA
3
+ module DSL
4
+
5
+ # singleton class
6
+ class Requirements
7
+
8
+ attr_accessor :nodes
9
+
10
+ def initialize
11
+ @nodes ||= {}
12
+ end
13
+
14
+ def self.instance
15
+ @__instance__ ||= new
16
+ end
17
+
18
+ #
19
+ # Register a new requirement in the list.
20
+ #
21
+ def register( summary = nil )
22
+ # retrive or initialize a entity
23
+ req = Requirement.new( summary )
24
+ yield(req) if block_given?
25
+ add_node(req) # add to the list
26
+ end
27
+
28
+ #
29
+ # Add note to the entity list
30
+ # Prevents entity duplication
31
+ #
32
+ def add_node(node)
33
+ @nodes[node.alias] = node
34
+ end
35
+
36
+ def element(e)
37
+ @nodes[e]
38
+ end
39
+
40
+ def all
41
+ @nodes.values
42
+ end
43
+
44
+ end # class
45
+
46
+ # return the requirements instance
47
+ def self.requirements
48
+ Requirements.instance
49
+ end
50
+
51
+ def self.requirement(name)
52
+ self.requirements.element(name)
53
+ end
54
+
55
+
56
+ end # dsl
57
+ end # mdd
@@ -0,0 +1,34 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module MDWA
3
+ module DSL
4
+
5
+ class User
6
+
7
+ attr_accessor :name, :description, :user_roles
8
+
9
+ def initialize(name)
10
+ self.name = name.camelize
11
+
12
+ self.clear_user_roles
13
+ end
14
+
15
+ def user_roles
16
+ @user_roles.uniq
17
+ end
18
+
19
+ def user_roles=(value)
20
+ if value.is_a? Array
21
+ @user_roles = @user_roles | value
22
+ else
23
+ @user_roles = @user_roles | [value]
24
+ end
25
+ end
26
+
27
+ def clear_user_roles
28
+ @user_roles = [self.name]
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,57 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module MDWA
3
+ module DSL
4
+
5
+ # singleton class
6
+ class Users
7
+
8
+ attr_accessor :nodes
9
+
10
+ def initialize
11
+ @nodes ||= {}
12
+ end
13
+
14
+ def self.instance
15
+ @__instance__ ||= new
16
+ end
17
+
18
+ #
19
+ # Register a new user in the list.
20
+ #
21
+ def register( name )
22
+ # retrive or initialize a entity
23
+ user = element(name) || User.new( name )
24
+ yield(user) if block_given?
25
+ add_node user # add to the list
26
+ end
27
+
28
+ #
29
+ # Add note to the entity list
30
+ # Prevents entity duplication
31
+ #
32
+ def add_node(node)
33
+ @nodes[node.name] = node
34
+ end
35
+
36
+ def element(e)
37
+ @nodes[e]
38
+ end
39
+
40
+ def all
41
+ @nodes.values
42
+ end
43
+
44
+ end # class entitites
45
+
46
+ # return the entities instance
47
+ def self.users
48
+ Users.instance
49
+ end
50
+
51
+ def self.user(name)
52
+ self.users.element(name)
53
+ end
54
+
55
+
56
+ end # dsl
57
+ end # mdd
@@ -0,0 +1,57 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module MDWA
3
+ module DSL
4
+
5
+ # singleton class
6
+ class Workflow
7
+
8
+ attr_accessor :nodes
9
+
10
+ def initialize
11
+ @nodes ||= {}
12
+ end
13
+
14
+ def self.instance
15
+ @__instance__ ||= new
16
+ end
17
+
18
+ #
19
+ # Register a new user in the list.
20
+ #
21
+ def register( name )
22
+ # retrive or initialize a entity
23
+ process = element(name) || Process.new( name )
24
+ yield(process) if block_given?
25
+ add_node process # add to the list
26
+ end
27
+
28
+ #
29
+ # Add note to the entity list
30
+ # Prevents entity duplication
31
+ #
32
+ def add_node(node)
33
+ @nodes[node.alias] = node
34
+ end
35
+
36
+ def element(e)
37
+ @nodes[e]
38
+ end
39
+
40
+ def all
41
+ @nodes.values
42
+ end
43
+
44
+ end # class entitites
45
+
46
+ # return the entities instance
47
+ def self.workflow
48
+ Workflow.instance
49
+ end
50
+
51
+ def self.process(name)
52
+ self.workflow.element(name)
53
+ end
54
+
55
+
56
+ end # dsl
57
+ end # mdd
@@ -7,4 +7,4 @@ module MDWA
7
7
  autoload :ModelAssociation, 'mdwa/generators/model_association'
8
8
  end
9
9
 
10
- end
10
+ end
@@ -1,4 +1,6 @@
1
1
  # -*- encoding : utf-8 -*-
2
+ require 'active_support/core_ext'
3
+
2
4
  module MDWA
3
5
  module Generators
4
6
  class Model
@@ -104,4 +106,4 @@ module MDWA
104
106
 
105
107
  end
106
108
  end
107
- end
109
+ end
@@ -1,3 +1,6 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'active_support/core_ext'
3
+
1
4
  module MDWA
2
5
  module Generators
3
6
 
@@ -74,4 +77,4 @@ module MDWA
74
77
  end
75
78
 
76
79
  end
77
- end
80
+ end
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+ require 'active_support/core_ext'
2
3
 
3
4
  module MDWA
4
5
  module Generators
@@ -114,4 +115,4 @@ module MDWA
114
115
  end
115
116
 
116
117
  end
117
- end
118
+ end
data/lib/mdwa/layout.rb CHANGED
@@ -15,4 +15,4 @@ module MDWA
15
15
  end
16
16
  end
17
17
 
18
- end
18
+ end
@@ -96,4 +96,4 @@ module MDWA
96
96
  end # class LayoutBase
97
97
 
98
98
  end # module Layout
99
- end # module Mdd
99
+ end # module Mdd
@@ -25,4 +25,4 @@ module MDWA
25
25
  end
26
26
 
27
27
  end
28
- end
28
+ end
data/lib/mdwa/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module MDWA
3
- VERSION = "3.0.2"
3
+ VERSION = "3.0.3"
4
4
  end
@@ -0,0 +1,101 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'mdwa/dsl'
3
+
4
+ require 'minitest/spec'
5
+ require 'minitest/autorun'
6
+
7
+ describe MDWA::DSL::EntityActions do
8
+
9
+ before do
10
+ # create product entity
11
+ MDWA::DSL.entities.register "Product" do |e|
12
+ e.resource = true
13
+ e.ajax = true
14
+
15
+ e.member_action :publish, :get, :html
16
+ e.collection_action :export, :post, [:csv, :xml]
17
+ e.collection_action :report, :get, [:ajax]
18
+ end
19
+ end
20
+
21
+ it "should create action correctly" do
22
+ action = MDWA::DSL::Action.new :publish, :member, :method => :get, :request_type => [:html, :ajax_js]
23
+ action.name.must_equal :publish
24
+ action.member?.must_equal true
25
+ action.method.must_equal :get
26
+ action.resource?.must_equal false
27
+ action.request_type.must_equal [:html, :ajax_js]
28
+ end
29
+
30
+ it "should store resource actions correctly" do
31
+ product = MDWA::DSL.entity('Product')
32
+ product.actions.actions.count.must_equal 10
33
+ product.actions.actions[:index].must_be_instance_of MDWA::DSL::Action
34
+ product.actions.actions[:index].collection?.must_equal true
35
+ product.actions.actions[:index].member?.must_equal false
36
+ product.actions.actions[:index].name.must_equal :index
37
+
38
+ product.actions.actions[:new].must_be_instance_of MDWA::DSL::Action
39
+ product.actions.actions[:new].collection?.must_equal true
40
+ product.actions.actions[:new].name.must_equal :new
41
+
42
+ product.actions.actions[:edit].must_be_instance_of MDWA::DSL::Action
43
+ product.actions.actions[:edit].collection?.must_equal false
44
+ product.actions.actions[:edit].member?.must_equal true
45
+ product.actions.actions[:edit].name.must_equal :edit
46
+
47
+ product.actions.actions[:show].must_be_instance_of MDWA::DSL::Action
48
+ product.actions.actions[:show].member?.must_equal true
49
+ product.actions.actions[:show].name.must_equal :show
50
+
51
+ product.actions.actions[:create].must_be_instance_of MDWA::DSL::Action
52
+ product.actions.actions[:create].collection?.must_equal true
53
+ product.actions.actions[:create].name.must_equal :create
54
+
55
+ product.actions.actions[:update].must_be_instance_of MDWA::DSL::Action
56
+ product.actions.actions[:update].member?.must_equal true
57
+ product.actions.actions[:update].name.must_equal :update
58
+
59
+ product.actions.actions[:delete].must_be_instance_of MDWA::DSL::Action
60
+ product.actions.actions[:delete].member?.must_equal true
61
+
62
+ product.actions.actions[:no_ecsiste].must_equal nil
63
+ end
64
+
65
+ it "should work well with non-resourceful actions" do
66
+ product = MDWA::DSL.entity('Product')
67
+ product.actions.member_actions.count.must_equal 1
68
+ product.actions.actions[:publish].name.must_equal :publish
69
+ product.actions.actions[:publish].method.must_equal :get
70
+ product.actions.actions[:publish].request_type.must_equal [:html]
71
+ product.actions.actions[:publish].resource?.must_equal false
72
+
73
+ product.actions.collection_actions.count.must_equal 2
74
+ product.actions.actions[:export].name.must_equal :export
75
+ product.actions.actions[:export].method.must_equal :post
76
+ product.actions.actions[:export].request_type.must_equal [:csv, :xml]
77
+ product.actions.actions[:export].resource?.must_equal false
78
+
79
+ product.actions.actions[:report].name.must_equal :report
80
+ product.actions.actions[:report].method.must_equal :get
81
+ product.actions.actions[:report].request_type.must_equal [:ajax]
82
+ product.actions.actions[:report].resource?.must_equal false
83
+ end
84
+
85
+ it "should not generate actions for non-resourceful entities" do
86
+
87
+ MDWA::DSL.entities.register 'Reports' do |e|
88
+ e.resource = false
89
+ end
90
+
91
+ reports = MDWA::DSL.entity('Reports')
92
+ reports.actions.actions.count.must_equal 0
93
+
94
+ end
95
+
96
+ it "should generate correct code" do
97
+ product = MDWA::DSL.entity('Product')
98
+ puts product.actions.generate_routes
99
+ end
100
+
101
+ end