lotusrb 0.5.0 → 0.6.0

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 (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
@@ -1,4 +1,5 @@
1
1
  require 'rake'
2
+ require 'lotus/rake_tasks'
2
3
  require 'rake/testtask'
3
4
 
4
5
  Rake::TestTask.new do |t|
@@ -1,4 +1,5 @@
1
1
  require 'rake'
2
+ require 'lotus/rake_tasks'
2
3
  require 'rspec/core/rake_task'
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
@@ -1,2 +1,4 @@
1
1
  /db/<%= config[:app_name] %>_development
2
2
  /db/<%= config[:app_name] %>_test
3
+ /public/assets*
4
+ /tmp
@@ -1,3 +1,3 @@
1
- architecture=container
2
- test=<%= config[:test] %>
3
- template=erb
1
+ <%= Lotus::Lotusrc::ARCHITECTURE_KEY %>=<%= Lotus::Lotusrc::DEFAULT_ARCHITECTURE %>
2
+ <%= Lotus::Lotusrc::TEST_KEY %>=<%= config[:test] %>
3
+ <%= Lotus::Lotusrc::TEMPLATE_KEY %>=<%= Lotus::Lotusrc::DEFAULT_TEMPLATE %>
@@ -58,6 +58,11 @@ RSpec.configure do |config|
58
58
  config.filter_run :focus
59
59
  config.run_all_when_everything_filtered = true
60
60
 
61
+ # Allows RSpec to persist some state between runs in order to support
62
+ # the `--only-failures` and `--next-failure` CLI options. We recommend
63
+ # you configure your source control system to ignore this file.
64
+ config.example_status_persistence_file_path = "spec/examples.txt"
65
+
61
66
  # Limits the available syntax to the non-monkey patched syntax that is
62
67
  # recommended. For more details, see:
63
68
  # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
@@ -97,4 +102,3 @@ RSpec.configure do |config|
97
102
  Kernel.srand config.seed
98
103
  =end
99
104
  end
100
-
@@ -1,6 +1,9 @@
1
+ require 'shellwords'
2
+
1
3
  module Lotus
2
4
  module Generators
3
5
  class DatabaseConfig
6
+
4
7
  SUPPORTED_ENGINES = {
5
8
  'mysql' => { type: :sql, mri: 'mysql2', jruby: 'jdbc-mysql' },
6
9
  'mysql2' => { type: :sql, mri: 'mysql2', jruby: 'jdbc-mysql' },
@@ -12,13 +15,15 @@ module Lotus
12
15
  'memory' => { type: :memory, mri: nil, jruby: nil }
13
16
  }.freeze
14
17
 
18
+ DEFAULT_ENGINE = 'filesystem'.freeze
19
+
15
20
  attr_reader :engine, :name
16
21
 
17
22
  def initialize(engine, name)
18
23
  @engine = engine
19
24
  @name = name
20
25
 
21
- SUPPORTED_ENGINES.key?(engine) or fail "\"#{ engine }\" is not a valid database type"
26
+ SUPPORTED_ENGINES.key?(engine.to_s) or fail "\"#{ engine }\" is not a valid database type"
22
27
  end
23
28
 
24
29
  def to_hash
@@ -37,6 +42,10 @@ module Lotus
37
42
  type == :sql
38
43
  end
39
44
 
45
+ def filesystem?
46
+ type == :file_system
47
+ end
48
+
40
49
  private
41
50
 
42
51
  def platform
@@ -44,7 +53,7 @@ module Lotus
44
53
  end
45
54
 
46
55
  def platform_prefix
47
- :jdbc if Lotus::Utils.jruby?
56
+ 'jdbc:'.freeze if Lotus::Utils.jruby?
48
57
  end
49
58
 
50
59
  def uri
@@ -61,7 +70,11 @@ module Lotus
61
70
  def base_uri
62
71
  case engine
63
72
  when 'mysql', 'mysql2'
64
- "mysql2://localhost/#{ name }"
73
+ if Lotus::Utils.jruby?
74
+ "mysql://localhost/#{ name }"
75
+ else
76
+ "mysql2://localhost/#{ name }"
77
+ end
65
78
  when 'postgresql', 'postgres'
66
79
  "postgres://localhost/#{ name }"
67
80
  when 'sqlite', 'sqlite3'
@@ -78,7 +91,7 @@ module Lotus
78
91
  when 'sqlite', 'sqlite3'
79
92
  "#{ platform_prefix }#{ base_uri }_#{ environment }.sqlite"
80
93
  else
81
- "#{ platform_prefix }#{ base_uri }_#{ environment }"
94
+ "#{ platform_prefix if sql? }#{ base_uri }_#{ environment }"
82
95
  end
83
96
  end
84
97
  end
@@ -0,0 +1,51 @@
1
+ require 'lotus/generators/generator'
2
+
3
+ module Lotus
4
+ module Generators
5
+ module Generatable
6
+
7
+ def start
8
+ map_templates
9
+ process_templates
10
+ end
11
+
12
+ def destroy
13
+ generator.behavior = :revoke
14
+ self
15
+ end
16
+
17
+ def generator
18
+ @generator ||= Lotus::Generators::Generator.new(template_source_path, target_path)
19
+ end
20
+
21
+ def map_templates
22
+ raise NotImplementedError, "must implement the map_templates method"
23
+ end
24
+
25
+ def add_mapping(source, target)
26
+ generator.add_mapping(source, target)
27
+ end
28
+
29
+ def process_templates
30
+ generator.process_templates(template_options)
31
+ post_process_templates
32
+ end
33
+
34
+ def post_process_templates
35
+ nil
36
+ end
37
+
38
+ def template_options
39
+ {}
40
+ end
41
+
42
+ def template_source_path
43
+ raise NotImplementedError, "must implement the template_source_path method"
44
+ end
45
+
46
+ def target_path
47
+ raise NotImplementedError, "must implement the target_path method"
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,35 @@
1
+ require 'thor'
2
+ require 'forwardable'
3
+
4
+ module Lotus
5
+ module Generators
6
+ class Generator
7
+
8
+ extend Forwardable
9
+
10
+ def_delegators :@processor, :run, :behavior=, :inject_into_file, :append_to_file, :prepend_to_file
11
+
12
+ class Processor < Thor
13
+ include Thor::Actions
14
+ end
15
+
16
+ def initialize(template_source_path, target_path)
17
+ @template_source_path = template_source_path
18
+ @target_path = target_path
19
+ @template_mappings = []
20
+ @processor = Processor.new
21
+ @processor.class.source_root(@template_source_path)
22
+ end
23
+
24
+ def add_mapping(source, target)
25
+ @template_mappings << [source, target]
26
+ end
27
+
28
+ def process_templates(options = {})
29
+ @template_mappings.each do |src, dst|
30
+ @processor.template(@template_source_path.join(src), @target_path.join(dst), options)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,42 @@
1
+ require 'lotus/lotusrc'
2
+ module Lotus
3
+ module Generators
4
+ class TestFramework
5
+ RSPEC = 'rspec'.freeze
6
+ MINITEST = 'minitest'.freeze
7
+ VALID_FRAMEWORKS = [RSPEC, MINITEST].freeze
8
+
9
+ attr_reader :framework
10
+
11
+ def initialize(lotusrc, framework)
12
+ @framework = (framework || lotusrc.options.fetch(:test))
13
+ assert_framework!
14
+ end
15
+
16
+ def rspec?
17
+ framework == RSPEC
18
+ end
19
+
20
+ def minitest?
21
+ framework == MINITEST
22
+ end
23
+
24
+ private
25
+
26
+ def assert_framework!
27
+ if !supported_framework?
28
+ raise ArgumentError.new("Unknown test framework '#{ framework}'. Please use one of #{ valid_test_frameworks.join(', ')}")
29
+ end
30
+ end
31
+
32
+ def valid_test_frameworks
33
+ VALID_FRAMEWORKS.map { |name| "'#{ name }'"}
34
+ end
35
+
36
+ def supported_framework?
37
+ VALID_FRAMEWORKS.include?(framework)
38
+ end
39
+
40
+ end
41
+ end
42
+ end
data/lib/lotus/loader.rb CHANGED
@@ -31,6 +31,7 @@ module Lotus
31
31
  load_configuration_load_paths!
32
32
  load_rack!
33
33
  load_frameworks!
34
+ load_initializers!
34
35
  end
35
36
  end
36
37
 
@@ -45,6 +46,7 @@ module Lotus
45
46
  _configure_model_framework! if defined?(Lotus::Model)
46
47
  _configure_controller_framework!
47
48
  _configure_view_framework!
49
+ _configure_assets_framework!
48
50
  _configure_logger!
49
51
  end
50
52
 
@@ -97,6 +99,34 @@ module Lotus
97
99
  end
98
100
  end
99
101
 
102
+ def _configure_assets_framework!
103
+ config = configuration
104
+
105
+ unless application_module.const_defined?('Assets')
106
+ assets = Lotus::Assets.duplicate(namespace) do
107
+ root config.root
108
+
109
+ scheme config.scheme
110
+ host config.host
111
+ port config.port
112
+
113
+ public_directory Lotus.public_directory
114
+ prefix Utils::PathPrefix.new('/assets').join(config.path_prefix)
115
+
116
+ manifest Lotus.public_directory.join('assets.json')
117
+ compile true
118
+
119
+ config.assets.__apply(self)
120
+ end
121
+
122
+ assets.configure do
123
+ cdn host != config.host
124
+ end
125
+
126
+ application_module.const_set('Assets', assets)
127
+ end
128
+ end
129
+
100
130
  def _configure_model_framework!
101
131
  config = configuration
102
132
  if _lotus_model_loaded? && !application_module.const_defined?('Model')
@@ -122,6 +152,7 @@ module Lotus
122
152
 
123
153
  def load_frameworks!
124
154
  _load_view_framework!
155
+ _load_assets_framework!
125
156
  _load_model_framework!
126
157
  end
127
158
 
@@ -131,6 +162,12 @@ module Lotus
131
162
  }
132
163
  end
133
164
 
165
+ def _load_assets_framework!
166
+ application_module.module_eval %{
167
+ #{ application_module }::Assets.load!
168
+ }
169
+ end
170
+
134
171
  def _load_model_framework!
135
172
  return unless _load_model_framework?
136
173
 
@@ -211,5 +248,11 @@ module Lotus
211
248
  def namespace
212
249
  configuration.namespace || application_module
213
250
  end
251
+
252
+ def load_initializers!
253
+ Dir["#{configuration.root}/config/initializers/**/*.rb"].each do |file|
254
+ require file
255
+ end
256
+ end
214
257
  end
215
258
  end
data/lib/lotus/lotusrc.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  require 'pathname'
2
2
  require 'dotenv/parser'
3
+ require 'lotus/utils/hash'
3
4
 
4
5
  module Lotus
5
- # Create and read the .lotusrc file in the root of the application
6
+ # Read the .lotusrc file in the root of the application
6
7
  #
7
8
  # @since 0.3.0
8
9
  # @api private
@@ -20,15 +21,21 @@ module Lotus
20
21
  # @since 0.3.0
21
22
  # @api private
22
23
  #
23
- # @see Lotus::Lotusrc#read
24
+ # @see Lotus::Lotusrc#options
24
25
  DEFAULT_ARCHITECTURE = 'container'.freeze
25
26
 
27
+ # Application architecture value
28
+ #
29
+ # @since 0.6.0
30
+ # @api private
31
+ APP_ARCHITECTURE = 'app'.freeze
32
+
26
33
  # Architecture key for writing the lotusrc file
27
34
  #
28
35
  # @since 0.3.0
29
36
  # @api private
30
37
  #
31
- # @see Lotus::Lotusrc#read
38
+ # @see Lotus::Lotusrc::DEFAULT_OPTIONS
32
39
  ARCHITECTURE_KEY = 'architecture'.freeze
33
40
 
34
41
  # Test suite default value
@@ -36,7 +43,7 @@ module Lotus
36
43
  # @since 0.3.0
37
44
  # @api private
38
45
  #
39
- # @see Lotus::Lotusrc#read
46
+ # @see Lotus::Lotusrc::DEFAULT_OPTIONS
40
47
  DEFAULT_TEST_SUITE = 'minitest'.freeze
41
48
 
42
49
  # Test suite key for writing the lotusrc file
@@ -44,7 +51,7 @@ module Lotus
44
51
  # @since 0.3.0
45
52
  # @api private
46
53
  #
47
- # @see Lotus::Lotusrc#read
54
+ # @see Lotus::Lotusrc::DEFAULT_OPTIONS
48
55
  TEST_KEY = 'test'.freeze
49
56
 
50
57
  # Template default value
@@ -52,7 +59,7 @@ module Lotus
52
59
  # @since 0.3.0
53
60
  # @api private
54
61
  #
55
- # @see Lotus::Lotusrc#read
62
+ # @see Lotus::Lotusrc::DEFAULT_OPTIONS
56
63
  DEFAULT_TEMPLATE = 'erb'.freeze
57
64
 
58
65
  # Template key for writing the lotusrc file
@@ -60,66 +67,44 @@ module Lotus
60
67
  # @since 0.3.0
61
68
  # @api private
62
69
  #
63
- # @see Lotus::Lotusrc#read
70
+ # @see Lotus::Lotusrc::DEFAULT_OPTIONS
64
71
  TEMPLATE_KEY = 'template'.freeze
65
72
 
66
- # Initialize Lotusrc class with application's root and enviroment options.
67
- # Create the lotusrc file if it doesn't exist in the root given.
73
+ # Default values for writing the lotusrc file
74
+ #
75
+ # @since 0.5.1
76
+ # @api private
77
+ #
78
+ # @see Lotus::Lotusrc#options
79
+ DEFAULT_OPTIONS = Utils::Hash.new({
80
+ ARCHITECTURE_KEY => DEFAULT_ARCHITECTURE,
81
+ TEST_KEY => DEFAULT_TEST_SUITE,
82
+ TEMPLATE_KEY => DEFAULT_TEMPLATE
83
+ }).symbolize!.freeze
84
+
85
+ # Initialize Lotusrc class with application's root and environment options.
68
86
  #
69
87
  # @param root [Pathname] Application's root
70
- # @param options [Hash] Environment's options
71
88
  #
72
89
  # @see Lotus::Environment#initialize
73
- def initialize(root, options = {})
74
- @root = root
75
- @options = options
76
-
77
- # NOTE this line is here in order to auto-upgrade applications generated
78
- # with lotusrb < 0.3.0. Consider to remove it in the future.
79
- create
90
+ def initialize(root)
91
+ @root = root
80
92
  end
81
93
 
82
- # Read lotusrc file and parse it's values.
94
+ # Read lotusrc file (if exists) and parse it's values or return default.
83
95
  #
84
96
  # @return [Lotus::Utils::Hash] parsed values
85
97
  #
86
98
  # @example Default values if file doesn't exist
87
- # Lotus::Lotusrc.new(Pathname.new(Dir.pwd)).read
99
+ # Lotus::Lotusrc.new(Pathname.new(Dir.pwd)).options
88
100
  # # => { architecture: 'container', test: 'minitest', template: 'erb' }
89
101
  #
90
102
  # @example Custom values if file doesn't exist
91
103
  # options = { architect: 'application', test: 'rspec', template: 'slim' }
92
- # Lotus::Lotusrc.new(Pathname.new(Dir.pwd), options).read
104
+ # Lotus::Lotusrc.new(Pathname.new(Dir.pwd), options).options
93
105
  # # => { architecture: 'application', test: 'rspec', template: 'slim' }
94
- def read
95
- if exists?
96
- Utils::Hash.new(
97
- Dotenv::Parser.call(content)
98
- ).symbolize!
99
- end
100
- end
101
-
102
- private
103
-
104
- # Create lotusrc file if exists
105
- #
106
- # @since 0.3.0
107
- # @api private
108
- #
109
- # @see Lotus::Lotusrc::DEFAULT_ARCHITECTURE
110
- # @see Lotus::Lotusrc::ARCHITECTURE_KEY
111
- # @see Lotus::Lotusrc::DEFAULT_TEST_SUITE
112
- # @see Lotus::Lotusrc::TEST_KEY
113
- # @see Lotus::Lotusrc::DEFAULT_TEMPLATE
114
- # @see Lotus::Lotusrc::TEMPLATE_KEY
115
- def create
116
- unless exists?
117
- rcfile = File.new(path_file, "w")
118
- rcfile.puts "#{ ARCHITECTURE_KEY }=#{ @options.fetch(:architecture, DEFAULT_ARCHITECTURE) }"
119
- rcfile.puts "#{ TEST_KEY }=#{ @options.fetch(:test, DEFAULT_TEST_SUITE) }"
120
- rcfile.puts "#{ TEMPLATE_KEY }=#{ @options.fetch(:template, DEFAULT_TEMPLATE) }"
121
- rcfile.close
122
- end
106
+ def options
107
+ @options ||= symbolize(DEFAULT_OPTIONS.merge(file_options))
123
108
  end
124
109
 
125
110
  # Check if lotusrc file exists
@@ -132,6 +117,16 @@ module Lotus
132
117
  path_file.exist?
133
118
  end
134
119
 
120
+ private
121
+
122
+ def symbolize(hash)
123
+ Utils::Hash.new(hash).symbolize!
124
+ end
125
+
126
+ def file_options
127
+ symbolize(exists? ? Dotenv::Parser.call(content) : {})
128
+ end
129
+
135
130
  # Return the lotusrc file's path
136
131
  #
137
132
  # @since 0.3.0
@@ -144,6 +139,12 @@ module Lotus
144
139
  @root.join FILE_NAME
145
140
  end
146
141
 
142
+ # Return the content of lotusrc file
143
+ #
144
+ # @since 0.3.0
145
+ # @api private
146
+ #
147
+ # @return [String] content of lotusrc file
147
148
  def content
148
149
  path_file.read
149
150
  end