my_enginery 0.2.8

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 (118) hide show
  1. data/.gitignore +18 -0
  2. data/.travis.yml +9 -0
  3. data/CHANGELOG.md +14 -0
  4. data/Gemfile +12 -0
  5. data/LICENSE +19 -0
  6. data/README.md +957 -0
  7. data/Rakefile +48 -0
  8. data/app/base/.pryrc +1 -0
  9. data/app/base/Gemfile +25 -0
  10. data/app/base/Rakefile +4 -0
  11. data/app/base/app.rb +8 -0
  12. data/app/base/base/boot.rb +45 -0
  13. data/app/base/base/config.rb +127 -0
  14. data/app/base/base/controllers/rear-controllers/.gitkeep +0 -0
  15. data/app/base/base/database.rb +3 -0
  16. data/app/base/base/helpers/application_helpers.rb +3 -0
  17. data/app/base/base/migrations/.gitkeep +0 -0
  18. data/app/base/base/models/.gitkeep +0 -0
  19. data/app/base/base/specs/.gitkeep +0 -0
  20. data/app/base/base/views/.gitkeep +0 -0
  21. data/app/base/config.ru +4 -0
  22. data/app/base/config/config.yml +17 -0
  23. data/app/base/public/assets/Enginery.png +0 -0
  24. data/app/base/public/assets/Espresso.png +0 -0
  25. data/app/base/public/assets/application.css +13 -0
  26. data/app/base/public/assets/application.js +2 -0
  27. data/app/base/public/assets/bootstrap/css/bootstrap-responsive.min.css +9 -0
  28. data/app/base/public/assets/bootstrap/css/bootstrap.min.css +9 -0
  29. data/app/base/public/assets/bootstrap/img/glyphicons-halflings-white.png +0 -0
  30. data/app/base/public/assets/bootstrap/img/glyphicons-halflings.png +0 -0
  31. data/app/base/public/assets/bootstrap/js/bootstrap.min.js +6 -0
  32. data/app/base/public/assets/jquery.js +6 -0
  33. data/app/base/var/db/.gitkeep +0 -0
  34. data/app/base/var/log/.gitkeep +0 -0
  35. data/app/base/var/pid/.gitkeep +0 -0
  36. data/app/database/ActiveRecord.rb +11 -0
  37. data/app/database/DataMapper.rb +11 -0
  38. data/app/database/Sequel.rb +11 -0
  39. data/app/database/mysql.yml +24 -0
  40. data/app/database/postgres.yml +24 -0
  41. data/app/database/sqlite.yml +24 -0
  42. data/app/gemfiles/ActiveRecord.rb +1 -0
  43. data/app/gemfiles/BlueCloth.rb +1 -0
  44. data/app/gemfiles/DataMapper.rb +1 -0
  45. data/app/gemfiles/FastCGI.rb +1 -0
  46. data/app/gemfiles/Puma.rb +1 -0
  47. data/app/gemfiles/RDiscount.rb +1 -0
  48. data/app/gemfiles/RDoc.rb +1 -0
  49. data/app/gemfiles/RedCloth.rb +1 -0
  50. data/app/gemfiles/WEBrick.rb +1 -0
  51. data/app/gemfiles/WikiCloth.rb +1 -0
  52. data/app/gemfiles/mysql/ActiveRecord.rb +1 -0
  53. data/app/gemfiles/mysql/DataMapper.rb +1 -0
  54. data/app/gemfiles/mysql/Sequel.rb +1 -0
  55. data/app/gemfiles/postgres/ActiveRecord.rb +1 -0
  56. data/app/gemfiles/postgres/DataMapper.rb +1 -0
  57. data/app/gemfiles/postgres/Sequel.rb +1 -0
  58. data/app/gemfiles/sqlite/ActiveRecord.rb +1 -0
  59. data/app/gemfiles/sqlite/DataMapper.rb +1 -0
  60. data/app/gemfiles/sqlite/Sequel.rb +1 -0
  61. data/app/layouts/ERB/layout.erb +56 -0
  62. data/app/layouts/Erubis/layout.erb +56 -0
  63. data/app/layouts/Haml/layout.haml +38 -0
  64. data/app/layouts/Slim/layout.slim +38 -0
  65. data/app/migrations/ActiveRecord.erb +51 -0
  66. data/app/migrations/DataMapper.erb +61 -0
  67. data/app/migrations/Sequel.erb +54 -0
  68. data/app/migrations/tracking_table/ActiveRecord.rb +19 -0
  69. data/app/migrations/tracking_table/DataMapper.rb +26 -0
  70. data/app/migrations/tracking_table/Sequel.rb +18 -0
  71. data/app/rakefiles/ActiveRecord.rb +0 -0
  72. data/app/rakefiles/DataMapper.rb +1 -0
  73. data/app/rakefiles/Sequel.rb +0 -0
  74. data/app/rakefiles/Specular.rb +1 -0
  75. data/app/specfiles/Specular.erb +7 -0
  76. data/bin/my_enginery +235 -0
  77. data/lib/enginery.rb +23 -0
  78. data/lib/enginery/cli.rb +44 -0
  79. data/lib/enginery/configurator.rb +139 -0
  80. data/lib/enginery/delete.rb +116 -0
  81. data/lib/enginery/enginery.rb +41 -0
  82. data/lib/enginery/generator.rb +325 -0
  83. data/lib/enginery/helpers/app.rb +83 -0
  84. data/lib/enginery/helpers/generic.rb +145 -0
  85. data/lib/enginery/helpers/input.rb +123 -0
  86. data/lib/enginery/helpers/orm.rb +86 -0
  87. data/lib/enginery/helpers/validations.rb +101 -0
  88. data/lib/enginery/migrator.rb +371 -0
  89. data/lib/enginery/rake-tasks/data_mapper.rb +49 -0
  90. data/lib/enginery/rake-tasks/specular.rb +41 -0
  91. data/lib/enginery/registry.rb +101 -0
  92. data/lib/enginery/usage.rb +66 -0
  93. data/lib/enginery/version.rb +7 -0
  94. data/logo.png +0 -0
  95. data/my_enginery.gemspec +37 -0
  96. data/test/delete/test__admin.rb +49 -0
  97. data/test/delete/test__controller.rb +37 -0
  98. data/test/delete/test__helper.rb +49 -0
  99. data/test/delete/test__migration.rb +27 -0
  100. data/test/delete/test__model.rb +35 -0
  101. data/test/delete/test__route.rb +35 -0
  102. data/test/delete/test__spec.rb +59 -0
  103. data/test/delete/test__view.rb +51 -0
  104. data/test/generator/test__admin.rb +39 -0
  105. data/test/generator/test__controller.rb +123 -0
  106. data/test/generator/test__helper.rb +56 -0
  107. data/test/generator/test__model.rb +206 -0
  108. data/test/generator/test__project.rb +81 -0
  109. data/test/generator/test__route.rb +110 -0
  110. data/test/generator/test__spec.rb +56 -0
  111. data/test/generator/test__view.rb +85 -0
  112. data/test/migrator/test__auto_generation.rb +41 -0
  113. data/test/migrator/test__manual_generation.rb +59 -0
  114. data/test/migrator/test__migrations.rb +139 -0
  115. data/test/sandbox/.gitkeep +0 -0
  116. data/test/setup.rb +29 -0
  117. data/test/support/spec_helpers.rb +151 -0
  118. metadata +392 -0
@@ -0,0 +1,101 @@
1
+ module Enginery
2
+ class Registry
3
+ include Helpers
4
+
5
+ def initialize root
6
+ @dst_root = root.freeze
7
+ end
8
+
9
+ def controllers
10
+ boot_app
11
+ app_controllers.inject({}) do |f,c|
12
+ path = controller_path(c)
13
+ routes = routes(c)
14
+ data = {
15
+ name: c.name,
16
+ path: path,
17
+ file: unrootify(dst_path(:controllers, path + CONTROLLER_SUFFIX)),
18
+ dom_id: c.name.gsub(/\W/m, ''),
19
+ routes: routes,
20
+ specs: routes.inject(0) {|s,(_,r)| s += r[:specs].size}
21
+ }
22
+ helper_file = dst_path(:helpers, path + HELPER_SUFFIX)
23
+ File.exists?(helper_file) && data[:helper_file] = unrootify(helper_file)
24
+ f.merge c.name => data
25
+ end.to_yaml
26
+ end
27
+
28
+ def routes controller
29
+ path = controller_path(controller)
30
+ routes_by_controller(controller.name).inject({}) do |f,r|
31
+ f.merge r => {
32
+ name: r,
33
+ route: controller[r.to_sym],
34
+ file: unrootify(dst_path(:controllers, path, r + ROUTE_SUFFIX)),
35
+ views: views(controller, r),
36
+ specs: specs(controller, r)
37
+ }
38
+ end
39
+ end
40
+
41
+ def views controller, route
42
+ path = controller_path(controller)
43
+ Dir[dst_path(:views, path, route + '.*')].map {|f| unrootify(f)}
44
+ end
45
+
46
+ def specs controller, route
47
+ path = controller_path(controller)
48
+ Dir[dst_path(:specs, path, route + SPEC_SUFFIX)].map {|f| unrootify(f)}
49
+ end
50
+
51
+ def models
52
+ cfg = app_config()
53
+ app_models.inject({}) do |f,m|
54
+ path = model_path(m)
55
+ f.merge m.name => {
56
+ name: m.name,
57
+ path: path,
58
+ file: unrootify(dst_path(:models, path + MODEL_SUFFIX)),
59
+ rear_file: rear_file(m),
60
+ rear_path: rear_path(m, cfg),
61
+ dom_id: m.name.gsub(/\W/m, ''),
62
+ orm: cfg[:orm],
63
+ migrations: migrations(m)
64
+ }
65
+ end.to_yaml
66
+ end
67
+
68
+ def migrations model
69
+ migrations_by_model(model.name).inject({}) do |f,m|
70
+ step, time, name = m.scan(Migrator::NAME_REGEXP).flatten
71
+ file = dst_path(:migrations, model_path(model), m)
72
+ f.merge ('%s. %s' % [step, name.to_s.gsub('-', ' ')]) => {
73
+ step: step,
74
+ name: name,
75
+ time: time,
76
+ file: unrootify(file),
77
+ path: file.sub(dst_path.migrations, '')
78
+ }
79
+ end
80
+ end
81
+
82
+ private
83
+ def controller_path controller
84
+ EUtils.class_to_route(controller.name)
85
+ end
86
+
87
+ def model_path model
88
+ EUtils.class_to_route(model.name)
89
+ end
90
+
91
+ def rear_path model, cfg
92
+ return unless admin_url = cfg[:admin_url]
93
+ EUtils.rootify_url(admin_url, EUtils.class_to_route(model.name))
94
+ end
95
+
96
+ def rear_file model
97
+ unrootify dst_path(:rear_controllers, model_path(model) + ADMIN_SUFFIX)
98
+ end
99
+
100
+ end
101
+ end
@@ -0,0 +1,66 @@
1
+ require 'enginery/version'
2
+
3
+ class << Enginery
4
+ def usage
5
+ <<USAGE
6
+
7
+ Enginery version #{EngineryVersion::FULL}
8
+
9
+ Generator:
10
+
11
+ enginery g[enerate][:p] Foo - generates a new application in ./Foo/ folder
12
+ enginery g[enerate][:p] - generates a new application in current folder
13
+
14
+ enginery g[enerate]:c[ontroller] Foo - generates Foo controller
15
+ enginery g[enerate]:c[ontroller] Foo Bar - generates Foo and Bar controllers
16
+
17
+ enginery g[enerate]:r[oute] Foo bar - generates Foo#bar action
18
+ enginery g[enerate]:r[oute] Foo bar baz - generates Foo#bar and Foo#baz actions
19
+
20
+ enginery g[enerate]:s[pec] Foo bar - generates a spec for Foo#bar action
21
+
22
+ enginery g[enerate]:v[iew] Foo bar - generates view file for Foo#bar action
23
+
24
+ enginery g[enerate]:m[odel] Foo - generates Foo model
25
+ enginery g[enerate]:m[odel] Foo Bar - generates Foo and Bar models
26
+
27
+ Generator Options:
28
+
29
+ ORM:
30
+ enginery g o[rm]:[ActiveRecord|ar] - generated project will use ActiveRecord ORM
31
+ enginery g o[rm]:[DataMapper|dm] - generated project will use DataMapper ORM
32
+ enginery g o[rm]:[Sequel|sq] - generated project will use Sequel ORM
33
+
34
+ Engine:
35
+ enginery g[enerate] e[ngine]:Slim - generated project will use Slim engine
36
+ enginery g[enerate]:c[ontroller] e[ngine]:Haml - generated controller will use Haml engine
37
+
38
+ Note: engine name should be provided in full and are case sensitive
39
+
40
+ #{ migrator_usage }
41
+
42
+ USAGE
43
+ end
44
+
45
+ def migrator_usage
46
+ <<USAGE
47
+ Migrator:
48
+
49
+ enginery m[igration] migration-name m[odel]:Foo c[olumn]:bar - create bar column of string type
50
+ enginery m[igration] migration-name m[odel]:Foo c[olumn]:bar:baz - create bar column of baz type
51
+
52
+ enginery m[igration] migration-name m[odel]:Foo u[pdate_]c[olumn]:bar:baz - set bar column type to baz
53
+
54
+ enginery m[igration] migration-name m[odel]:Foo r[ename_]c[olumn]:bar:baz - rename bar column to baz
55
+
56
+ enginery m[igration]:l[ist] - list all available migrations
57
+
58
+ enginery m[igrate]:up|down N - perform up|down migration with serial number N
59
+
60
+ enginery m[igrate]:up|down N M - perform up|down migrations with serial numbers N and M
61
+
62
+ enginery m[igrate]:up|down N-M - perform up|down migrations with serial numbers from N to M
63
+
64
+ USAGE
65
+ end
66
+ end
@@ -0,0 +1,7 @@
1
+ class EngineryVersion
2
+ MAJOR = 0
3
+ MINOR = 2
4
+ PATCH = 8
5
+
6
+ FULL = [MAJOR, MINOR, PATCH]*'.'
7
+ end
data/logo.png ADDED
Binary file
@@ -0,0 +1,37 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path('../lib/enginery/version', __FILE__)
4
+ Gem::Specification.new do |s|
5
+
6
+ s.name = 'my_enginery'
7
+ s.version = EngineryVersion::FULL
8
+ s.authors = ['Walter Smith']
9
+ s.email = ['waltee.smith@gmail.com']
10
+ s.homepage = 'https://github.com/espresso/enginery'
11
+ s.summary = 'enginery-%s' % EngineryVersion::FULL
12
+ s.description = 'Stuff Builder for Espresso Framework'
13
+
14
+ s.required_ruby_version = '>= 1.9.2'
15
+
16
+ s.add_dependency 'e', '>= 0.4.10'
17
+ s.add_dependency 'el', '>= 0.4.10'
18
+ s.add_dependency 'rear', '>= 0.1.2'
19
+ s.add_dependency 'bundler'
20
+ s.add_dependency 'tenjin'
21
+
22
+ s.add_development_dependency 'rake', '>= 10'
23
+ s.add_development_dependency 'specular', '>= 0.2.2'
24
+ s.add_development_dependency 'sonar', '>= 0.2.0'
25
+ s.add_development_dependency 'mysql'
26
+ s.add_development_dependency 'activerecord'
27
+ s.add_development_dependency 'datamapper'
28
+ s.add_development_dependency 'dm-mysql-adapter'
29
+ s.add_development_dependency 'sequel'
30
+ s.add_development_dependency 'slim'
31
+
32
+ s.require_paths = ['lib']
33
+ s.files = Dir['**/{*,.[a-z]*}'].reject {|e| e =~ /\.(gem|lock)\Z/}
34
+ s.executables = ['my_enginery']
35
+
36
+ s.licenses = ['MIT']
37
+ end
@@ -0,0 +1,49 @@
1
+ module Enginery
2
+ module Test
3
+ module DeleteAdmin
4
+ Spec.new self do
5
+
6
+ Dir.chdir DST_ROOT do
7
+
8
+ is(new_app 'App').ok?
9
+
10
+ Dir.chdir 'App' do
11
+ entries = [
12
+ 'base/controllers/rear-controllers/foo' + ADMIN_SUFFIX
13
+ ]
14
+
15
+ Should 'be deleted alongside model' do
16
+ is(new_model 'Foo').ok?
17
+
18
+ entries.each do |e|
19
+ does(File).exists? e
20
+ end
21
+
22
+ is(delete_model 'Foo').ok?
23
+ entries.each do |e|
24
+ refute(File).exists? e
25
+ end
26
+ end
27
+
28
+ Should 'be deleted manually' do
29
+
30
+ is(new_model 'Foo').ok?
31
+
32
+ entries.each do |e|
33
+ does(File).exists? e
34
+ end
35
+
36
+ is(delete_admin_controller 'Foo').ok?
37
+ entries.each do |e|
38
+ refute(File).exists? e
39
+ end
40
+ end
41
+
42
+
43
+ end
44
+ end
45
+
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,37 @@
1
+ module Enginery
2
+ module Test
3
+ module DeleteController
4
+ Spec.new self do
5
+
6
+ Dir.chdir DST_ROOT do
7
+
8
+ is(new_app 'App').ok?
9
+
10
+ Dir.chdir 'App' do
11
+
12
+ entries = [
13
+ 'base/controllers/foo/',
14
+ 'base/controllers/foo' + Enginery::CONTROLLER_SUFFIX,
15
+ 'base/controllers/foo/bar' + Enginery::ROUTE_SUFFIX,
16
+ 'base/views/foo/bar.erb',
17
+ 'base/specs/foo/bar' + Enginery::SPEC_SUFFIX
18
+ ]
19
+
20
+ is(new_controller 'Foo').ok?
21
+ is(new_route 'Foo bar').ok?
22
+ entries.each do |e|
23
+ does(File).exists? e
24
+ end
25
+
26
+ is(delete_controller 'Foo').ok?
27
+ entries.each do |e|
28
+ refute(File).exists? e
29
+ end
30
+
31
+ end
32
+ end
33
+
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,49 @@
1
+ module Enginery
2
+ module Test
3
+ module DeleteHelper
4
+ Spec.new self do
5
+
6
+ Dir.chdir DST_ROOT do
7
+
8
+ is(new_app 'App').ok?
9
+
10
+ Dir.chdir 'App' do
11
+ entries = [
12
+ 'base/helpers/foo' + Enginery::HELPER_SUFFIX
13
+ ]
14
+
15
+ Should 'be deleted alongside controller' do
16
+ is(new_controller 'Foo').ok?
17
+
18
+ entries.each do |e|
19
+ does(File).exists? e
20
+ end
21
+
22
+ is(delete_controller 'Foo').ok?
23
+ entries.each do |e|
24
+ refute(File).exists? e
25
+ end
26
+ end
27
+
28
+ Should 'be deleted manually' do
29
+
30
+ is(new_controller 'Foo').ok?
31
+
32
+ entries.each do |e|
33
+ does(File).exists? e
34
+ end
35
+
36
+ is(delete_helper 'Foo').ok?
37
+ entries.each do |e|
38
+ refute(File).exists? e
39
+ end
40
+ end
41
+
42
+
43
+ end
44
+ end
45
+
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,27 @@
1
+ module Enginery
2
+ module Test
3
+ module DeleteMigration
4
+ Spec.new self do
5
+
6
+ Dir.chdir DST_ROOT do
7
+
8
+ is(new_app 'App o:dm').ok?
9
+
10
+ Dir.chdir 'App' do
11
+
12
+ is(new_model 'Foo').ok?
13
+ migrations = Dir['base/migrations/foo/*' + Enginery::MIGRATION_SUFFIX]
14
+ check(migrations).any?
15
+
16
+ is(delete_migration '1').ok?
17
+ migrations.each do |e|
18
+ refute(File).exists? e
19
+ end
20
+
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,35 @@
1
+ module Enginery
2
+ module Test
3
+ module DeleteModel
4
+ Spec.new self do
5
+
6
+ Dir.chdir DST_ROOT do
7
+
8
+ is(new_app 'App o:ar').ok?
9
+
10
+ Dir.chdir 'App' do
11
+
12
+ entries = [
13
+ 'base/models/foo' + Enginery::MODEL_SUFFIX
14
+ ]
15
+
16
+ is(new_model 'Foo').ok?
17
+ migrations = Dir['base/migrations/foo/*' + Enginery::MIGRATION_SUFFIX]
18
+ check(migrations).any?
19
+
20
+ entries.each do |e|
21
+ does(File).exists? e
22
+ end
23
+
24
+ is(delete_model 'Foo').ok?
25
+ (entries + migrations).each do |e|
26
+ refute(File).exists? e
27
+ end
28
+
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,35 @@
1
+ module Enginery
2
+ module Test
3
+ module DeleteRoute
4
+ Spec.new self do
5
+
6
+ Dir.chdir DST_ROOT do
7
+
8
+ is(new_app 'App').ok?
9
+
10
+ Dir.chdir 'App' do
11
+
12
+ entries = [
13
+ 'base/controllers/foo/bar' + Enginery::ROUTE_SUFFIX,
14
+ 'base/views/foo/bar.erb',
15
+ 'base/specs/foo/bar' + Enginery::SPEC_SUFFIX
16
+ ]
17
+
18
+ is(new_controller 'Foo').ok?
19
+ is(new_route 'Foo bar').ok?
20
+ entries.each do |e|
21
+ does(File).exists? e
22
+ end
23
+
24
+ is(delete_route 'Foo bar').ok?
25
+ entries.each do |e|
26
+ refute(File).exists? e
27
+ end
28
+
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+ end
35
+ end