lotusrb 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +57 -14
  3. data/FEATURES.md +21 -0
  4. data/LICENSE.md +1 -1
  5. data/README.md +8 -7
  6. data/bin/lotus +1 -0
  7. data/lib/lotus.rb +6 -0
  8. data/lib/lotus/action/csrf_protection.rb +1 -1
  9. data/lib/lotus/application.rb +4 -4
  10. data/lib/lotus/application_name.rb +8 -6
  11. data/lib/lotus/cli.rb +75 -66
  12. data/lib/lotus/cli_sub_commands/assets.rb +29 -0
  13. data/lib/lotus/{commands → cli_sub_commands}/db.rb +24 -29
  14. data/lib/lotus/cli_sub_commands/destroy.rb +102 -0
  15. data/lib/lotus/cli_sub_commands/generate.rb +127 -0
  16. data/lib/lotus/commands/assets/precompile.rb +35 -0
  17. data/lib/lotus/commands/console.rb +28 -8
  18. data/lib/lotus/commands/db/abstract.rb +6 -2
  19. data/lib/lotus/commands/db/console.rb +5 -5
  20. data/lib/lotus/commands/generate/abstract.rb +63 -0
  21. data/lib/lotus/commands/generate/action.rb +262 -0
  22. data/lib/lotus/commands/generate/app.rb +116 -0
  23. data/lib/lotus/commands/generate/mailer.rb +118 -0
  24. data/lib/lotus/commands/generate/migration.rb +63 -0
  25. data/lib/lotus/commands/generate/model.rb +96 -0
  26. data/lib/lotus/commands/new/abstract.rb +128 -0
  27. data/lib/lotus/commands/new/app.rb +116 -0
  28. data/lib/lotus/commands/new/container.rb +102 -0
  29. data/lib/lotus/commands/routes.rb +19 -2
  30. data/lib/lotus/commands/server.rb +16 -2
  31. data/lib/lotus/config/framework_configuration.rb +13 -1
  32. data/lib/lotus/configuration.rb +24 -76
  33. data/lib/lotus/container.rb +15 -2
  34. data/lib/lotus/environment.rb +43 -4
  35. data/lib/lotus/frameworks.rb +1 -0
  36. data/lib/lotus/generators/action/action_spec.minitest.tt +1 -1
  37. data/lib/lotus/generators/action/action_spec.rspec.tt +1 -1
  38. data/lib/lotus/generators/action/view_spec.minitest.tt +1 -1
  39. data/lib/lotus/generators/action/view_spec.rspec.tt +1 -1
  40. data/lib/lotus/generators/{slice → app}/.gitkeep.tt +0 -0
  41. data/lib/lotus/generators/{slice → app}/application.rb.tt +61 -23
  42. data/lib/lotus/generators/app/config/initializers/.gitkeep +0 -0
  43. data/lib/lotus/generators/{slice → app}/config/routes.rb.tt +0 -0
  44. data/lib/lotus/generators/app/favicon.ico +0 -0
  45. data/lib/lotus/generators/{slice → app}/templates/application.html.erb.tt +2 -1
  46. data/lib/lotus/generators/app/views/application_layout.rb.tt +7 -0
  47. data/lib/lotus/generators/application/app/.env.development.tt +1 -0
  48. data/lib/lotus/generators/application/app/.env.test.tt +1 -0
  49. data/lib/lotus/generators/application/app/Gemfile.tt +1 -0
  50. data/lib/lotus/generators/application/app/Rakefile.minitest.tt +1 -0
  51. data/lib/lotus/generators/application/app/Rakefile.rspec.tt +1 -0
  52. data/lib/lotus/generators/application/app/config/application.rb.tt +56 -18
  53. data/lib/lotus/generators/application/app/config/initializers/.gitkeep +0 -0
  54. data/lib/lotus/generators/application/app/favicon.ico +0 -0
  55. data/lib/lotus/generators/application/app/gitignore.tt +2 -0
  56. data/lib/lotus/generators/application/app/lotusrc.tt +3 -3
  57. data/lib/lotus/generators/application/app/spec_helper.rb.rspec.tt +5 -1
  58. data/lib/lotus/generators/application/app/templates/application.html.erb.tt +1 -0
  59. data/lib/lotus/generators/application/container/.env.development.tt +1 -0
  60. data/lib/lotus/generators/application/container/.env.test.tt +1 -0
  61. data/lib/lotus/generators/application/container/Gemfile.tt +1 -1
  62. data/lib/lotus/generators/application/container/Rakefile.minitest.tt +1 -0
  63. data/lib/lotus/generators/application/container/Rakefile.rspec.tt +1 -0
  64. data/lib/lotus/generators/application/container/config/initializers/.gitkeep +0 -0
  65. data/lib/lotus/generators/application/container/gitignore.tt +2 -0
  66. data/lib/lotus/generators/application/container/lib/chirp/mailers/.gitkeep +0 -0
  67. data/lib/lotus/generators/application/container/lib/chirp/mailers/templates/.gitkeep +0 -0
  68. data/lib/lotus/generators/application/container/lotusrc.tt +3 -3
  69. data/lib/lotus/generators/application/container/spec_helper.rb.rspec.tt +5 -1
  70. data/lib/lotus/generators/database_config.rb +17 -4
  71. data/lib/lotus/generators/generatable.rb +51 -0
  72. data/lib/lotus/generators/generator.rb +35 -0
  73. data/lib/lotus/generators/test_framework.rb +42 -0
  74. data/lib/lotus/loader.rb +43 -0
  75. data/lib/lotus/lotusrc.rb +50 -49
  76. data/lib/lotus/middleware.rb +28 -10
  77. data/lib/lotus/rake_helper.rb +68 -0
  78. data/lib/lotus/rake_tasks.rb +2 -0
  79. data/lib/lotus/rendering_policy.rb +2 -2
  80. data/lib/lotus/repositories/car_repository.rb +3 -0
  81. data/lib/lotus/repositories/name_repository.rb +3 -0
  82. data/lib/lotus/setup.rb +1 -3
  83. data/lib/lotus/static.rb +77 -0
  84. data/lib/lotus/templates/welcome.html.erb +7 -4
  85. data/lib/lotus/version.rb +1 -1
  86. data/lib/lotus/views/default.rb +2 -1
  87. data/lib/lotus/views/default_template_finder.rb +4 -3
  88. data/lotusrb.gemspec +11 -9
  89. metadata +79 -60
  90. data/lib/lotus/commands/generate.rb +0 -97
  91. data/lib/lotus/commands/new.rb +0 -43
  92. data/lib/lotus/config/assets.rb +0 -81
  93. data/lib/lotus/generators/abstract.rb +0 -31
  94. data/lib/lotus/generators/action.rb +0 -235
  95. data/lib/lotus/generators/app.rb +0 -39
  96. data/lib/lotus/generators/app/.gitkeep +0 -1
  97. data/lib/lotus/generators/application/app.rb +0 -129
  98. data/lib/lotus/generators/application/container.rb +0 -111
  99. data/lib/lotus/generators/mailer.rb +0 -112
  100. data/lib/lotus/generators/migration.rb +0 -58
  101. data/lib/lotus/generators/model.rb +0 -90
  102. data/lib/lotus/generators/slice.rb +0 -94
  103. data/lib/lotus/generators/slice/views/application_layout.rb.tt +0 -7
@@ -0,0 +1,118 @@
1
+ require "lotus/commands/generate/abstract"
2
+
3
+ module Lotus
4
+ module Commands
5
+ class Generate
6
+ # @since 0.5.0
7
+ # @api private
8
+ class Mailer < Abstract
9
+
10
+ attr_reader :name, :name_underscored, :from, :to, :subject
11
+
12
+ # @since 0.5.0
13
+ # @api private
14
+ TXT_FORMAT = ".txt".freeze
15
+
16
+ # @since 0.5.0
17
+ # @api private
18
+ HTML_FORMAT = ".html".freeze
19
+
20
+ # @since 0.5.0
21
+ # @api private
22
+ DEFAULT_ENGINE = "erb".freeze
23
+
24
+ # @since 0.5.0
25
+ # @api private
26
+ DEFAULT_FROM = "'<from>'".freeze
27
+
28
+ # @since 0.5.0
29
+ # @api private
30
+ DEFAULT_TO = "'<to>'".freeze
31
+
32
+ # @since 0.5.0
33
+ # @api private
34
+ DEFAULT_SUBJECT = "'Hello'".freeze
35
+
36
+ # @since 0.5.0
37
+ # @api private
38
+ def initialize(options, name)
39
+ super(options)
40
+
41
+ @name_underscored = Utils::String.new(name).underscore
42
+ @name = Utils::String.new(name_underscored).classify
43
+ @from = options[:from] || DEFAULT_FROM
44
+ @to = options[:to] || DEFAULT_TO
45
+ @subject = options[:subject] || DEFAULT_SUBJECT
46
+
47
+ assert_name!
48
+ end
49
+
50
+ # @since 0.x.x
51
+ # @api private
52
+ def map_templates
53
+ add_mapping("mailer_spec.rb.tt", mailer_spec_path)
54
+ add_mapping("mailer.rb.tt", mailer_path)
55
+ add_mapping("template.txt.tt", txt_template_path)
56
+ add_mapping("template.html.tt", html_template_path)
57
+ end
58
+
59
+ def template_options
60
+ {
61
+ mailer: name,
62
+ from: from,
63
+ to: to,
64
+ subject: subject,
65
+ }
66
+ end
67
+
68
+ private
69
+
70
+ # @since 0.5.0
71
+ # @api private
72
+ def assert_name!
73
+ if name.nil? || name.strip.empty?
74
+ raise ArgumentError.new("Missing mailer name")
75
+ end
76
+ end
77
+
78
+ # @since 0.5.0
79
+ # @api private
80
+ def mailer_path
81
+ core_root.join('mailers', "#{ name_underscored }.rb").to_s
82
+ end
83
+
84
+ # @since 0.5.0
85
+ # @api private
86
+ def mailer_spec_path
87
+ spec_root.join(::File.basename(Dir.getwd), "mailers", "#{ name_underscored }_spec.rb")
88
+ end
89
+
90
+ # @since 0.5.0
91
+ # @api private
92
+ def txt_template_path
93
+ template_path(TXT_FORMAT)
94
+ end
95
+
96
+ # @since 0.5.0
97
+ # @api private
98
+ def html_template_path
99
+ template_path(HTML_FORMAT)
100
+ end
101
+
102
+ # @since 0.5.0
103
+ # @api private
104
+ def template_path(format)
105
+ core_root.join("mailers", "templates", "#{ name_underscored }#{ format }.#{ DEFAULT_ENGINE }")
106
+ end
107
+
108
+ def spec_root
109
+ Pathname.new("spec")
110
+ end
111
+
112
+ def core_root
113
+ Pathname.new("lib").join(::File.basename(Dir.getwd))
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,63 @@
1
+ require 'lotus/commands/generate/abstract'
2
+
3
+ module Lotus
4
+ module Commands
5
+ class Generate
6
+ class Migration < Abstract
7
+
8
+ attr_reader :name, :underscored_name
9
+
10
+ # @since 0.6.0
11
+ # @api private
12
+ #
13
+ # @example
14
+ # 20150612160502
15
+ TIMESTAMP_FORMAT = '%Y%m%d%H%M%S'.freeze
16
+
17
+ # @since 0.6.0
18
+ # @api private
19
+ #
20
+ # @example
21
+ # 20150612160502_create_books.rb
22
+ FILENAME_PATTERN = '%{timestamp}_%{name}.rb'.freeze
23
+
24
+ def initialize(options, name)
25
+ super(options)
26
+
27
+ @name = name
28
+ @underscored_name = Utils::String.new(@name).underscore
29
+
30
+ environment.require_application_environment
31
+ assert_migration_name!
32
+ end
33
+
34
+ def map_templates
35
+ add_mapping('migration.rb.tt', destination_path)
36
+ end
37
+
38
+ private
39
+
40
+ def destination_path
41
+ existing_migration_path || new_migration_path
42
+ end
43
+
44
+ def existing_migration_path
45
+ Dir.glob("#{Lotus::Model.configuration.migrations}/[0-9]*_#{underscored_name}.rb").first
46
+ end
47
+
48
+ def new_migration_path
49
+ timestamp = Time.now.utc.strftime(TIMESTAMP_FORMAT)
50
+ filename = FILENAME_PATTERN % { timestamp: timestamp, name: underscored_name}
51
+
52
+ Lotus::Model.configuration.migrations.join(filename)
53
+ end
54
+
55
+ def assert_migration_name!
56
+ if name.nil? || name.strip.empty?
57
+ raise ArgumentError.new('Migration name nil or empty')
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,96 @@
1
+ require 'lotus/commands/generate/abstract'
2
+
3
+ module Lotus
4
+ module Commands
5
+ class Generate
6
+ class Model < Abstract
7
+
8
+ attr_reader :model_name
9
+
10
+ def initialize(options, model_name)
11
+ super(options)
12
+ @model_name = Utils::String.new(model_name).classify
13
+
14
+ assert_model_name!
15
+ end
16
+
17
+ def map_templates
18
+ add_mapping('entity.rb.tt', entity_path)
19
+ add_mapping('repository.rb.tt', repository_path)
20
+ add_mapping("entity_spec.#{ test_framework.framework }.tt", entity_spec_path,)
21
+ add_mapping("repository_spec.#{ test_framework.framework }.tt", repository_spec_path)
22
+ end
23
+
24
+ def template_options
25
+ {
26
+ model_name: model_name
27
+ }
28
+ end
29
+
30
+ private
31
+
32
+ # @since 0.6.0
33
+ # @api private
34
+ def assert_model_name!
35
+ model_name_not_blank
36
+ model_name_valid
37
+ end
38
+
39
+ # Validates that a model name was provided
40
+ #
41
+ # @since 0.6.0
42
+ # @api private
43
+ def model_name_not_blank
44
+ if model_name.nil? || model_name.strip.empty?
45
+ raise ArgumentError.new('Model name nil or empty.')
46
+ end
47
+ end
48
+
49
+ # Validates that the provided model name doesn't start with numbers
50
+ #
51
+ # @since 0.6.0
52
+ # @api private
53
+ def model_name_valid
54
+ unless model_name.match(/^[a-z]/i)
55
+ raise ArgumentError.new("Invalid model name. The model name shouldn't begin with a number.")
56
+ end
57
+ end
58
+
59
+ def model_root
60
+ Pathname.new('lib').join(::File.basename(Dir.getwd))
61
+ end
62
+
63
+ # @since 0.5.0
64
+ # @api private
65
+ def entity_path
66
+ model_root.join('entities', "#{ model_name_underscored }.rb").to_s
67
+ end
68
+
69
+ # @since 0.5.0
70
+ # @api private
71
+ def repository_path
72
+ model_root.join('repositories', "#{ model_name_underscored }_repository.rb").to_s
73
+ end
74
+
75
+ # @since 0.5.0
76
+ # @api private
77
+ def entity_spec_path
78
+ target_path.join('spec', ::File.basename(Dir.getwd), 'entities', "#{ model_name_underscored }_spec.rb")
79
+ end
80
+
81
+ # @since 0.5.0
82
+ # @api private
83
+ def repository_spec_path
84
+ target_path.join('spec', ::File.basename(Dir.getwd), 'repositories',
85
+ "#{ model_name_underscored }_repository_spec.rb")
86
+ end
87
+
88
+ # @since 0.5.0
89
+ # @api private
90
+ def model_name_underscored
91
+ Utils::String.new(model_name).underscore
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,128 @@
1
+ require 'shellwords'
2
+ require 'lotus/application_name'
3
+ require 'lotus/generators/database_config'
4
+ require 'lotus/generators/generatable'
5
+ require 'lotus/generators/test_framework'
6
+ require 'lotus/utils/hash'
7
+
8
+ module Lotus
9
+ module Commands
10
+ class New
11
+ class Abstract
12
+
13
+ include Lotus::Generators::Generatable
14
+
15
+ DEFAULT_ARCHITECTURE = 'container'.freeze
16
+ DEFAULT_APPLICATION_BASE_URL = '/'.freeze
17
+
18
+ attr_reader :options, :target_path, :database_config
19
+
20
+ def initialize(options, name)
21
+ @options = Lotus::Utils::Hash.new(options).symbolize!
22
+ @name = name
23
+ @options[:database] ||= Lotus::Generators::DatabaseConfig::DEFAULT_ENGINE
24
+
25
+ assert_options!
26
+ assert_name!
27
+ assert_architecture!
28
+
29
+ @lotus_model_version = '~> 0.5'
30
+ @database_config = Lotus::Generators::DatabaseConfig.new(options[:database], app_name)
31
+ end
32
+
33
+ def start
34
+ FileUtils.mkdir_p(@name)
35
+ Dir.chdir(@name) do
36
+ @target_path = Pathname.pwd
37
+
38
+ super
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ def test_framework
45
+ @test_framework ||= Lotus::Generators::TestFramework.new(lotusrc, options[:test])
46
+ end
47
+
48
+ def lotusrc
49
+ @lotusrc ||= Lotusrc.new(Pathname.new('.'))
50
+ end
51
+
52
+ def start_in_app_dir
53
+ raise NotImplementedError
54
+ end
55
+
56
+ def add_sql_templates
57
+ return if !database_config.sql?
58
+
59
+ add_mapping('schema.sql.tt', 'db/schema.sql')
60
+ end
61
+
62
+ def add_git_templates
63
+ return if git_dir_present?
64
+
65
+ source = database_config.filesystem? ? 'gitignore.tt' : '.gitignore'
66
+ target = '.gitignore'
67
+ add_mapping(source, target)
68
+ end
69
+
70
+ def real_app_name
71
+ @name == '.' ? ::File.basename(Dir.getwd) : @name
72
+ end
73
+
74
+ def app_name
75
+ ApplicationName.new(real_app_name)
76
+ end
77
+
78
+ def target
79
+ Pathname.new('.')
80
+ end
81
+
82
+ def init_git
83
+ return if git_dir_present?
84
+
85
+ generator.run("git init #{Shellwords.escape(target)}", capture: true)
86
+ end
87
+
88
+ def git_dir_present?
89
+ File.directory?(target.join('.git'))
90
+ end
91
+
92
+ def lotus_model_version
93
+ @lotus_model_version
94
+ end
95
+
96
+ def lotus_head?
97
+ options.fetch(:lotus_head, false)
98
+ end
99
+
100
+ def architecture
101
+ options.fetch(:architecture, DEFAULT_ARCHITECTURE)
102
+ end
103
+
104
+ def assert_name!
105
+ if @name.nil? || @name.strip == '' || @name.include?(File::SEPARATOR)
106
+ raise ArgumentError.new("APPLICATION_NAME is requried and must not contain #{File::SEPARATOR}.")
107
+ end
108
+ end
109
+
110
+ def assert_architecture!
111
+ if !['app', 'container'].include?(architecture)
112
+ raise ArgumentError.new("Architecture must be one of 'app', 'container' but was '#{architecture}'")
113
+ end
114
+ end
115
+
116
+ def application_base_url
117
+ options[:application_base_url] || DEFAULT_APPLICATION_BASE_URL
118
+ end
119
+
120
+ def assert_options!
121
+ if options.nil?
122
+ raise ArgumentError.new('options must not be nil')
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,116 @@
1
+ require 'lotus/commands/new/abstract'
2
+
3
+ module Lotus
4
+ module Commands
5
+ class New
6
+ class App < Abstract
7
+
8
+ def initialize(options, name)
9
+ super(options, name)
10
+ end
11
+
12
+ def map_templates
13
+ add_application_templates
14
+ add_empty_directories
15
+ add_test_templates
16
+ add_sql_templates
17
+ add_git_templates
18
+ end
19
+
20
+ def template_options
21
+ {
22
+ app_name: app_name,
23
+ upcase_app_name: upcase_app_name,
24
+ classified_app_name: classified_app_name,
25
+ application_base_url: application_base_url,
26
+ lotus_head: lotus_head?,
27
+ test: test_framework.framework,
28
+ database: database_config.type,
29
+ database_config: database_config.to_hash,
30
+ lotus_model_version: lotus_model_version,
31
+ }
32
+ end
33
+
34
+ def post_process_templates
35
+ init_git
36
+ end
37
+
38
+ private
39
+
40
+ def add_application_templates
41
+ add_mapping('lotusrc.tt', '.lotusrc')
42
+ add_mapping('.env.tt', '.env')
43
+ add_mapping('.env.development.tt', '.env.development')
44
+ add_mapping('.env.test.tt', '.env.test')
45
+ add_mapping('Gemfile.tt', 'Gemfile')
46
+ add_mapping('config.ru.tt', 'config.ru')
47
+ add_mapping('config/environment.rb.tt', 'config/environment.rb')
48
+ add_mapping('lib/app_name.rb.tt', "lib/#{ app_name }.rb")
49
+ add_mapping('lib/config/mapping.rb.tt', 'lib/config/mapping.rb')
50
+ add_mapping('config/application.rb.tt', 'config/application.rb')
51
+ add_mapping('config/routes.rb.tt', 'config/routes.rb')
52
+ add_mapping('views/application_layout.rb.tt', 'app/views/application_layout.rb')
53
+ add_mapping('templates/application.html.erb.tt', 'app/templates/application.html.erb')
54
+ add_mapping('favicon.ico', 'app/assets/favicon.ico')
55
+ end
56
+
57
+ def add_test_templates
58
+ if test_framework.rspec?
59
+ add_mapping('Rakefile.rspec.tt', 'Rakefile')
60
+ add_mapping('rspec.rspec.tt', '.rspec')
61
+ add_mapping('spec_helper.rb.rspec.tt', 'spec/spec_helper.rb')
62
+ add_mapping('features_helper.rb.rspec.tt', 'spec/features_helper.rb')
63
+ add_mapping('capybara.rb.rspec.tt', 'spec/support/capybara.rb')
64
+ else
65
+ add_mapping('Rakefile.minitest.tt', 'Rakefile')
66
+ add_mapping('spec_helper.rb.minitest.tt', 'spec/spec_helper.rb')
67
+ add_mapping('features_helper.rb.minitest.tt', 'spec/features_helper.rb')
68
+ end
69
+ end
70
+
71
+ def add_empty_directories
72
+ add_mapping('.gitkeep', 'config/initializers/.gitkeep')
73
+ add_mapping('.gitkeep', 'app/controllers/.gitkeep')
74
+ add_mapping('.gitkeep', 'app/views/.gitkeep')
75
+ add_mapping('.gitkeep', 'app/assets/images/.gitkeep')
76
+ add_mapping('.gitkeep', 'app/assets/javascripts/.gitkeep')
77
+ add_mapping('.gitkeep', 'app/assets/stylesheets/.gitkeep')
78
+ add_mapping('.gitkeep', "lib/#{ app_name }/entities/.gitkeep")
79
+ add_mapping('.gitkeep', "lib/#{ app_name }/repositories/.gitkeep")
80
+ add_mapping('.gitkeep', "lib/#{ app_name }/mailers/.gitkeep")
81
+ add_mapping('.gitkeep', "lib/#{ app_name }/mailers/templates/.gitkeep")
82
+ add_mapping('.gitkeep', 'public/.gitkeep')
83
+
84
+ add_mapping('.gitkeep', 'spec/features/.gitkeep')
85
+ add_mapping('.gitkeep', 'spec/controllers/.gitkeep')
86
+ add_mapping('.gitkeep', 'spec/views/.gitkeep')
87
+ add_mapping('.gitkeep', "spec/#{ app_name }/entities/.gitkeep")
88
+ add_mapping('.gitkeep', "spec/#{ app_name }/repositories/.gitkeep")
89
+ add_mapping('.gitkeep', "spec/#{ app_name }/mailers/.gitkeep")
90
+ add_mapping('.gitkeep', 'spec/support/.gitkeep')
91
+
92
+ if database_config.sql?
93
+ add_mapping('.gitkeep', 'db/migrations/.gitkeep')
94
+ else
95
+ add_mapping('.gitkeep', 'db/.gitkeep')
96
+ end
97
+ end
98
+ def template_source_path
99
+ Pathname.new(::File.dirname(__FILE__)).join('..', '..', 'generators', 'application', 'app').realpath
100
+ end
101
+
102
+ def upcase_app_name
103
+ app_name.to_env_s
104
+ end
105
+
106
+ def classified_app_name
107
+ Utils::String.new(app_name).classify
108
+ end
109
+
110
+ # def application_base_path
111
+ # [ 'apps', app_name ].join(::File::SEPARATOR)
112
+ # end
113
+ end
114
+ end
115
+ end
116
+ end