kody 0.0.2

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 (31) hide show
  1. checksums.yaml +7 -0
  2. data/bin/kody +41 -0
  3. data/lib/kody.rb +58 -0
  4. data/lib/kody/app.rb +73 -0
  5. data/lib/kody/builder/attribute_builder.rb +88 -0
  6. data/lib/kody/builder/class_builder.rb +159 -0
  7. data/lib/kody/builder/project_builder.rb +15 -0
  8. data/lib/kody/builder/relation_builder.rb +110 -0
  9. data/lib/kody/engine/demoiselle/datatype.rb +93 -0
  10. data/lib/kody/engine/demoiselle/demoiselle.rb +320 -0
  11. data/lib/kody/engine/demoiselle/templates/beans.xml.tpl +4 -0
  12. data/lib/kody/engine/demoiselle/templates/businnes.tpl +14 -0
  13. data/lib/kody/engine/demoiselle/templates/entity.tpl +62 -0
  14. data/lib/kody/engine/demoiselle/templates/enumeration.tpl +28 -0
  15. data/lib/kody/engine/demoiselle/templates/exemplo.xmi +123 -0
  16. data/lib/kody/engine/demoiselle/templates/messages.tpl +7 -0
  17. data/lib/kody/engine/demoiselle/templates/persistence.tpl +13 -0
  18. data/lib/kody/engine/demoiselle/templates/persistence.xml.tpl +23 -0
  19. data/lib/kody/engine/demoiselle/templates/pom.xml.tpl +46 -0
  20. data/lib/kody/engine/demoiselle/templates/view_edit.tpl +42 -0
  21. data/lib/kody/engine/demoiselle/templates/view_list.tpl +46 -0
  22. data/lib/kody/engine/demoiselle/templates/view_mb_edit.tpl +48 -0
  23. data/lib/kody/engine/demoiselle/templates/view_mb_list.tpl +47 -0
  24. data/lib/kody/engine/generic/generic.rb +151 -0
  25. data/lib/kody/model.rb +20 -0
  26. data/lib/kody/modules.rb +19 -0
  27. data/lib/kody/parser.rb +13 -0
  28. data/lib/kody/properties.rb +41 -0
  29. data/lib/kody/string.rb +16 -0
  30. data/lib/kody/util.rb +17 -0
  31. metadata +174 -0
@@ -0,0 +1,47 @@
1
+ package {{class.view_package}};
2
+
3
+ import java.util.Iterator;
4
+ import java.util.List;
5
+
6
+ import javax.inject.Inject;
7
+
8
+ import br.gov.frameworkdemoiselle.annotation.NextView;
9
+ import br.gov.frameworkdemoiselle.annotation.PreviousView;
10
+ import br.gov.frameworkdemoiselle.stereotype.ViewController;
11
+ import br.gov.frameworkdemoiselle.template.AbstractListPageBean;
12
+ import br.gov.frameworkdemoiselle.transaction.Transactional;
13
+
14
+ import {{class.business_package}}.{{class.name}}BC;
15
+ import {{class.package}}.{{class.name}};
16
+
17
+ @ViewController
18
+ @NextView("./{{class.underscore_name}}_edit.xhtml")
19
+ @PreviousView("./{{class.underscore_name}}_list.xhtml")
20
+ public class {{class.name}}ListMB extends AbstractListPageBean<{{class.name}}, Long> {
21
+
22
+ private static final long serialVersionUID = 1L;
23
+
24
+ @Inject
25
+ private {{class.name}}BC bc;
26
+
27
+ @Override
28
+ protected List<{{class.name}}> handleResultList() {
29
+ return this.bc.findAll();
30
+ }
31
+
32
+ @Transactional
33
+ public String deleteSelection() {
34
+ boolean delete;
35
+ for (Iterator<Long> iter = getSelection().keySet().iterator(); iter.hasNext();) {
36
+ Long id = iter.next();
37
+ delete = getSelection().get(id);
38
+
39
+ if (delete) {
40
+ bc.delete(id);
41
+ iter.remove();
42
+ }
43
+ }
44
+ return getPreviousView();
45
+ }
46
+
47
+ }
@@ -0,0 +1,151 @@
1
+ require 'fileutils'
2
+ require 'liquid'
3
+ require 'kody/modules'
4
+ require 'kody/string'
5
+ require 'kody/properties'
6
+ require 'kody/builder/class_builder'
7
+ require 'kody/builder/project_builder'
8
+ require 'kody/engine/demoiselle/datatype'
9
+
10
+
11
+ # TODO
12
+ class Generic
13
+
14
+ attr_accessor :output
15
+ attr_accessor :model
16
+ attr_accessor :properties
17
+
18
+ def initialize(model=nil)
19
+ @output = Dir.pwd
20
+ @hash = Hash.new
21
+
22
+ @model = model
23
+ if !model.nil?
24
+ @properties = Properties.load(@output)
25
+ initialize_builders
26
+ end
27
+ end
28
+
29
+ def initialize(model, properties)
30
+ @output = Dir.pwd
31
+ @hash = Hash.new
32
+ @properties = properties
33
+ @model = model
34
+ if !model.nil?
35
+ initialize_builders
36
+ end
37
+ end
38
+
39
+ def name
40
+ return "Generic"
41
+ end
42
+
43
+ def version
44
+ return "1.0"
45
+ end
46
+
47
+ def generate
48
+ @entities.each do |e|
49
+ generate_class(e)
50
+ end
51
+ end
52
+
53
+ private
54
+ def initialize_builders
55
+ App.logger.info "Initializing builders..."
56
+
57
+ @entities = Array.new
58
+ @enumerations = Array.new
59
+
60
+ @model.classes.each do |clazz|
61
+ initialize_class(clazz)
62
+ end
63
+
64
+ App.logger.info "Builders initialized"
65
+ end
66
+
67
+ private
68
+ def initialize_package(package)
69
+
70
+ #App.logger.debug "Package: #{package.name}"
71
+ package.classes.sort.each do |c|
72
+ initialize_class(c)
73
+ end
74
+
75
+ package.packages.sort.each do |p|
76
+ initialize_package(p)
77
+ end
78
+ end
79
+
80
+ private
81
+ def initialize_class(clazz)
82
+
83
+ #App.logger.debug "Class: #{clazz.name}"
84
+ class_builder = ClassBuilder.new(clazz, self)
85
+
86
+ case class_builder.stereotype
87
+ when :entity
88
+ @entities << class_builder
89
+ when :enumeration
90
+ @enumerations << class_builder
91
+ else
92
+ return
93
+ end
94
+ end
95
+
96
+ private
97
+ def generate_class(clazz)
98
+
99
+ @hash['class'] = clazz
100
+ generate_classes(clazz)
101
+ generate_dao(clazz)
102
+ end
103
+
104
+ private
105
+ def load_template(template_name)
106
+ @templates = Hash.new if @templates.nil?
107
+ return @templates[template_name] if !(@templates[template_name]).nil?
108
+
109
+ full_template_name = File.expand_path File.dirname(__FILE__) + "/templates/" + template_name
110
+ arquivo_template = File.read(full_template_name)
111
+ template = Liquid::Template.parse(arquivo_template)
112
+ Liquid::Template.register_filter(TextFilter)
113
+
114
+ @templates[template_name] = template
115
+
116
+ App.logger.info "Template '#{template_name}' loaded..."
117
+
118
+ return template
119
+ end
120
+
121
+ private
122
+ def generate_classes(clazz)
123
+
124
+ case clazz.stereotype
125
+ when :entity
126
+ template = load_template("entity.tpl")
127
+ when :enumeration
128
+ template = load_template("enumeration.tpl")
129
+ else
130
+ return
131
+ end
132
+
133
+ @rendered = template.render(@hash)
134
+ path = output + "/src/main/java/" + clazz.package.gsub(".", "/") + "/"
135
+ file_name = clazz.name + ".java"
136
+ save(@rendered, path, file_name)
137
+ end
138
+
139
+ private
140
+
141
+ def save(content, path, file_name)
142
+ FileUtils.mkdir_p(path) unless File.exists?(path)
143
+
144
+ file = File.new("#{path}#{file_name}", "w")
145
+ file.write(content)
146
+ file.close
147
+
148
+ App.logger.debug "Template saved in #{path}#{file_name}"
149
+ end
150
+
151
+ end
data/lib/kody/model.rb ADDED
@@ -0,0 +1,20 @@
1
+ require 'xmimodel'
2
+ require 'xmimodel/attribute'
3
+ require 'xmimodel/clazz'
4
+ require 'xmimodel/attribute'
5
+
6
+ class Model
7
+
8
+ attr_reader :doc
9
+
10
+ def initialize(model_file_name)
11
+ App.logger.info "Loading model #{model_file_name}..."
12
+ @model = XmiModel.new model_file_name
13
+ App.logger.info "Model #{model_file_name} loaded."
14
+ end
15
+
16
+ def classes
17
+ @model.classes
18
+ end
19
+
20
+ end
@@ -0,0 +1,19 @@
1
+
2
+
3
+ module TextFilter
4
+
5
+ def capitalize_first(input)
6
+ input[0].upcase + input[1..-1]
7
+ end
8
+
9
+ def underscore
10
+ self.
11
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
12
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
13
+ gsub(/([A-Z\d])([A-Z])/,'\1_\2').
14
+ gsub(/([A-Z\d])([A-Z])/,'\1_\2').
15
+ tr("-", "_").
16
+ downcase
17
+ end
18
+
19
+ end
@@ -0,0 +1,13 @@
1
+
2
+ class Parser
3
+
4
+ def initialize(engine)
5
+ @model = engine.model
6
+ @engine = engine
7
+ end
8
+
9
+ def generate
10
+ @engine.generate
11
+ end
12
+
13
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+
3
+ class Properties
4
+
5
+ def self.load(project_path)
6
+
7
+ properties_filename = "#{App.specification.name}.properties"
8
+ properties_path = "#{project_path}/#{properties_filename}"
9
+
10
+ raise "Arquivo de propriedades do projeto não existe (#{properties_filename})." unless File.exists? properties_path
11
+
12
+ App.logger.info "Loading property file #{properties_filename}..."
13
+
14
+ properties = {}
15
+ File.open(properties_path, 'r') do |properties_file|
16
+ properties_file.read.each_line do |line|
17
+ line.strip!
18
+ if (line[0] != ?# and line[0] != ?=)
19
+ i = line.index('=')
20
+ if (i)
21
+ properties[line[0..i - 1].strip] = line[i + 1..-1].strip
22
+ else
23
+ properties[line] = ''
24
+ end
25
+ end
26
+ end
27
+ end
28
+ properties
29
+ end
30
+
31
+ def self.create(project_path, content)
32
+ file_name = "#{project_path}/#{App.specification.name}.properties"
33
+
34
+ outFile = File.new(file_name, "w+")
35
+ content.each do |property, value|
36
+ outFile.puts("#{property.gsub("_", ".")}=#{value}")
37
+ end
38
+ outFile.close
39
+ end
40
+
41
+ end
@@ -0,0 +1,16 @@
1
+
2
+ class String
3
+ def capitalize_first(input)
4
+ input[0].upcase + input[1..-1]
5
+ end
6
+
7
+ def underscore
8
+ self.
9
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
10
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
11
+ gsub(/([A-Z\d])([A-Z])/,'\1_\2').
12
+ gsub(/([A-Z\d])([A-Z])/,'\1_\2').
13
+ tr("-", "_").
14
+ downcase
15
+ end
16
+ end
data/lib/kody/util.rb ADDED
@@ -0,0 +1,17 @@
1
+
2
+ class Util
3
+
4
+ def self.diff_time(start_time, end_time = Time.now)
5
+ diff = (end_time - start_time)
6
+ s = (diff % 60).to_i
7
+ m = (diff / 60).to_i
8
+ h = (m / 60).to_i
9
+
10
+ if s > 0
11
+ "#{(h < 10) ? '0' + h.to_s : h}:#{(m < 10) ? '0' + m.to_s : m}:#{(s < 10) ? '0' + s.to_s : s}"
12
+ else
13
+ format("%.5f", diff) + " miliseconds."
14
+ end
15
+ end
16
+
17
+ end
metadata ADDED
@@ -0,0 +1,174 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kody
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Marcus Siqueira
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '0.18'
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 0.18.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '0.18'
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.18.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ version: '0.9'
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: 0.9.2
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ~>
48
+ - !ruby/object:Gem::Version
49
+ version: '0.9'
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: 0.9.2
53
+ - !ruby/object:Gem::Dependency
54
+ name: nokogiri
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ version: '1.6'
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: 1.6.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '1.6'
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: 1.6.0
73
+ - !ruby/object:Gem::Dependency
74
+ name: liquid
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: '2.5'
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: 2.5.0
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '2.5'
90
+ - - ! '>='
91
+ - !ruby/object:Gem::Version
92
+ version: 2.5.0
93
+ - !ruby/object:Gem::Dependency
94
+ name: xmimodel
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ~>
98
+ - !ruby/object:Gem::Version
99
+ version: '0.2'
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: 0.2.0
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '0.2'
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: 0.2.0
113
+ description: A quick code generator.
114
+ email: marvinsiq@gmail.com
115
+ executables:
116
+ - kody
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - bin/kody
121
+ - lib/kody.rb
122
+ - lib/kody/app.rb
123
+ - lib/kody/builder/attribute_builder.rb
124
+ - lib/kody/builder/class_builder.rb
125
+ - lib/kody/builder/project_builder.rb
126
+ - lib/kody/builder/relation_builder.rb
127
+ - lib/kody/engine/demoiselle/datatype.rb
128
+ - lib/kody/engine/demoiselle/demoiselle.rb
129
+ - lib/kody/engine/demoiselle/templates/beans.xml.tpl
130
+ - lib/kody/engine/demoiselle/templates/businnes.tpl
131
+ - lib/kody/engine/demoiselle/templates/entity.tpl
132
+ - lib/kody/engine/demoiselle/templates/enumeration.tpl
133
+ - lib/kody/engine/demoiselle/templates/exemplo.xmi
134
+ - lib/kody/engine/demoiselle/templates/messages.tpl
135
+ - lib/kody/engine/demoiselle/templates/persistence.tpl
136
+ - lib/kody/engine/demoiselle/templates/persistence.xml.tpl
137
+ - lib/kody/engine/demoiselle/templates/pom.xml.tpl
138
+ - lib/kody/engine/demoiselle/templates/view_edit.tpl
139
+ - lib/kody/engine/demoiselle/templates/view_list.tpl
140
+ - lib/kody/engine/demoiselle/templates/view_mb_edit.tpl
141
+ - lib/kody/engine/demoiselle/templates/view_mb_list.tpl
142
+ - lib/kody/engine/generic/generic.rb
143
+ - lib/kody/model.rb
144
+ - lib/kody/modules.rb
145
+ - lib/kody/parser.rb
146
+ - lib/kody/properties.rb
147
+ - lib/kody/string.rb
148
+ - lib/kody/util.rb
149
+ homepage: https://github.com/marvinsiq/kody
150
+ licenses:
151
+ - LGPL
152
+ metadata: {}
153
+ post_install_message:
154
+ rdoc_options: []
155
+ require_paths:
156
+ - lib
157
+ required_ruby_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ! '>='
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ required_rubygems_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ! '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ requirements: []
168
+ rubyforge_project:
169
+ rubygems_version: 2.2.2
170
+ signing_key:
171
+ specification_version: 4
172
+ summary: Kody
173
+ test_files: []
174
+ has_rdoc: