rdm 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/Gemfile.lock +80 -0
  4. data/bin/rdm +78 -10
  5. data/example/.rdm/helpers/render_helper.rb +12 -0
  6. data/example/.rdm/templates/package/.gitignore +1 -0
  7. data/example/.rdm/templates/package/.rspec +2 -0
  8. data/example/.rdm/templates/package/<%=package_subdir_name%>/<%=package_name%>.rb +3 -0
  9. data/example/.rdm/templates/package/<%=package_subdir_name%>/<%=package_name%>/.gitkeep +0 -0
  10. data/{lib/rdm/templates/package/package.rb.erb → example/.rdm/templates/package/Package.rb} +0 -0
  11. data/{lib/rdm/templates/package/bin/console_irb → example/.rdm/templates/package/bin/console} +0 -0
  12. data/example/.rdm/templates/package/spec/spec_helper.rb +10 -0
  13. data/example/.rdm/templates/repository/dao/<%=name%>_dao.rb +4 -0
  14. data/example/.rdm/templates/repository/mapper/<%=name%>_mapper.rb +2 -0
  15. data/example/.rdm/templates/repository/repository/<%=name%>_repository.rb +2 -0
  16. data/example/.rdm/templates/repository/views/users.html.erb +2 -0
  17. data/example/Gemfile.lock +50 -0
  18. data/example/Rdm.packages +1 -0
  19. data/example/tests/diff_run +0 -0
  20. data/example/tests/run +0 -0
  21. data/lib/rdm.rb +40 -8
  22. data/lib/rdm/cli/compile_package.rb +56 -0
  23. data/lib/rdm/cli/dependencies_controller.rb +30 -0
  24. data/lib/rdm/cli/diff_package.rb +21 -0
  25. data/lib/rdm/cli/gen_package.rb +24 -32
  26. data/lib/rdm/cli/init.rb +20 -27
  27. data/lib/rdm/cli/template_generator.rb +38 -0
  28. data/lib/rdm/errors.rb +37 -0
  29. data/lib/rdm/gen/init.rb +29 -44
  30. data/lib/rdm/gen/package.rb +24 -78
  31. data/lib/rdm/git/diff_command.rb +13 -0
  32. data/lib/rdm/git/diff_manager.rb +30 -0
  33. data/lib/rdm/git/repository_locator.rb +23 -0
  34. data/lib/rdm/handlers/dependencies_handler.rb +110 -0
  35. data/lib/rdm/handlers/diff_package_handler.rb +48 -0
  36. data/lib/rdm/handlers/template_handler.rb +118 -0
  37. data/lib/rdm/helpers/path_helper.rb +15 -0
  38. data/lib/rdm/package.rb +6 -0
  39. data/lib/rdm/package_importer.rb +1 -1
  40. data/lib/rdm/packages/compiler_service.rb +78 -0
  41. data/lib/rdm/packages/locator.rb +28 -0
  42. data/lib/rdm/settings.rb +14 -1
  43. data/lib/rdm/spec_runner.rb +5 -0
  44. data/lib/rdm/spec_runner/command_generator.rb +28 -0
  45. data/lib/rdm/spec_runner/command_params.rb +3 -0
  46. data/lib/rdm/spec_runner/package_fetcher.rb +13 -0
  47. data/lib/rdm/spec_runner/runner.rb +122 -0
  48. data/lib/rdm/spec_runner/view.rb +20 -0
  49. data/lib/rdm/templates/init/.rdm/helpers/render_helper.rb +12 -0
  50. data/lib/rdm/templates/init/{Gemfile.erb → Gemfile} +0 -0
  51. data/lib/rdm/templates/init/{Rdm.packages.erb → Rdm.packages} +0 -0
  52. data/lib/rdm/templates/init/{Readme.md.erb → Readme.md} +0 -0
  53. data/lib/rdm/templates/init/tests/diff_run +29 -0
  54. data/lib/rdm/templates/init/tests/run +7 -210
  55. data/lib/rdm/templates/package/<%=package_subdir_name%>/<%=package_name%>.rb +3 -0
  56. data/lib/rdm/templates/package/<%=package_subdir_name%>/<%=package_name%>/.gitkeep +0 -0
  57. data/lib/rdm/templates/package/Package.rb +8 -0
  58. data/lib/rdm/templates/package/bin/console +16 -0
  59. data/lib/rdm/templates/template_detector.rb +32 -0
  60. data/lib/rdm/templates/template_renderer.rb +49 -0
  61. data/lib/rdm/utils/file_utils.rb +20 -0
  62. data/lib/rdm/utils/render_util.rb +24 -0
  63. data/lib/rdm/utils/string_utils.rb +16 -0
  64. data/lib/rdm/version.rb +1 -1
  65. data/rdm.gemspec +1 -1
  66. data/spec/helpers/example_project_helper.rb +217 -0
  67. data/spec/helpers/git_commands_helper.rb +13 -0
  68. data/spec/rdm/cli/compile_package_spec.rb +114 -0
  69. data/spec/rdm/cli/dependencies_controller_spec.rb +50 -0
  70. data/spec/rdm/cli/diff_package_spec.rb +5 -0
  71. data/spec/rdm/cli/gen_package_spec.rb +60 -86
  72. data/spec/rdm/cli/init_spec.rb +53 -70
  73. data/spec/rdm/gen/init_spec.rb +21 -38
  74. data/spec/rdm/gen/package_spec.rb +70 -51
  75. data/spec/rdm/git/diff_manager_spec.rb +81 -0
  76. data/spec/rdm/git/repository_locator_spec.rb +31 -0
  77. data/spec/rdm/handlers/dependencies_handler_spec.rb +84 -0
  78. data/spec/rdm/handlers/diff_package_handler_spec.rb +78 -0
  79. data/spec/rdm/handlers/template_handler_spec.rb +94 -0
  80. data/spec/rdm/helpers/path_helper_spec.rb +52 -0
  81. data/spec/rdm/package/compiler_service_spec.rb +124 -0
  82. data/spec/rdm/package/locator_spec.rb +31 -0
  83. data/spec/rdm/rdm_spec.rb +2 -2
  84. data/spec/rdm/spec_runner/runner_spec.rb +12 -0
  85. data/spec/rdm/templates/template_detector_spec.rb +39 -0
  86. data/spec/rdm/templates/template_renderer_spec.rb +42 -0
  87. data/spec/spec_helper.rb +31 -25
  88. metadata +84 -17
  89. data/lib/rdm/gen/concerns/template_handling.rb +0 -81
  90. data/lib/rdm/support/colorize.rb +0 -106
  91. data/lib/rdm/support/render.rb +0 -17
  92. data/lib/rdm/support/template.rb +0 -30
  93. data/lib/rdm/templates/package/main_module_file.rb.erb +0 -3
  94. data/spec/rdm/support/colorize_spec.rb +0 -24
  95. data/spec/rdm/support/template_spec.rb +0 -20
@@ -0,0 +1,30 @@
1
+ module Rdm
2
+ module CLI
3
+ class DependenciesController
4
+ class << self
5
+ def run(package_name:, project_path:, stdout: nil)
6
+ new(package_name, project_path, stdout).run
7
+ end
8
+ end
9
+
10
+ def initialize(package_name, project_path, stdout)
11
+ @package_name = package_name
12
+ @project_path = project_path
13
+ @stdout = stdout || $stdout
14
+ end
15
+
16
+ def run
17
+ @stdout.puts Rdm::Handlers::DependenciesHandler.draw(
18
+ package_name: @package_name,
19
+ project_path: @project_path
20
+ )
21
+ rescue Rdm::Errors::InvalidParams => e
22
+ @stdout.puts e.message
23
+ rescue Rdm::Errors::SourceFileDoesNotExist => e
24
+ @stdout.puts e.message
25
+ rescue Rdm::Errors::PackageHasNoDependencies => e
26
+ @stdout.puts "Package `#{e.message}` has no dependencies"
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,21 @@
1
+ class Rdm::CLI::DiffPackage
2
+ class << self
3
+ def run(opts = {})
4
+ Rdm::CLI::DiffPackage.new(opts).run
5
+ end
6
+ end
7
+
8
+ attr_reader :path, :revision
9
+ def initialize(path:, revision:)
10
+ @path = path
11
+ @revision = revision
12
+ end
13
+
14
+ def run
15
+ puts Rdm::Handlers::DiffPackageHandler.handle(path: path, revision: revision)
16
+ rescue Rdm::Errors::GitRepositoryNotInitialized
17
+ puts "Git repository is not initialized. Use `git init .`"
18
+ rescue Rdm::Errors::GitCommandError => e
19
+ puts e.message
20
+ end
21
+ end
@@ -2,46 +2,38 @@ module Rdm
2
2
  module CLI
3
3
  class GenPackage
4
4
  class << self
5
- def run(opts = {})
6
- Rdm::CLI::GenPackage.new(opts).run
5
+ def run(package_name:, current_path:, local_path:, locals: {}, stdout: $stdout)
6
+ Rdm::CLI::GenPackage.new(package_name, current_path, local_path, locals, stdout).run
7
7
  end
8
8
  end
9
9
 
10
- attr_accessor :package_name, :current_dir, :package_relative_path, :skip_tests
11
- def initialize(package_name:, current_dir:, path:, skip_tests:)
12
- @current_dir = current_dir
13
- @package_name = package_name
14
- @package_relative_path = path
15
- @skip_tests = skip_tests
10
+ def initialize(package_name, current_path, local_path, locals, stdout)
11
+ @current_path = current_path
12
+ @local_path = local_path
13
+ @package_name = package_name
14
+ @locals = locals
15
+ @stdout = stdout
16
16
  end
17
17
 
18
18
  def run
19
- check_preconditions!
20
- begin
21
- generate
22
- rescue Errno::ENOENT => e
23
- puts "Error occurred. Possible reasons:\n #{Rdm::SOURCE_FILENAME} not found. Please run on directory containing #{Rdm::SOURCE_FILENAME} \n#{e.inspect}"
24
- rescue Rdm::Errors::PackageExists
25
- puts 'Error. Package already exist. Package was not generated'
26
- rescue Rdm::Errors::PackageDirExists
27
- puts "Error. Directory #{package_relative_path} exists. Package was not generated"
28
- end
29
- end
30
-
31
- def generate
32
- Rdm::Gen::Package.generate(
33
- current_dir: current_dir,
34
- package_name: package_name,
35
- package_relative_path: package_relative_path,
36
- skip_tests: skip_tests
19
+ generated_files_list = Rdm::Gen::Package.generate(
20
+ current_path: @current_path,
21
+ local_path: @local_path,
22
+ package_name: @package_name,
23
+ locals: @locals
37
24
  )
38
- end
39
-
40
- def check_preconditions!
41
- return unless package_name.empty?
42
25
 
43
- puts 'Package name was not specified!'
44
- exit 1
26
+ generated_files_list.each { |file| @stdout.puts "Generated: #{file}" }
27
+ rescue Errno::ENOENT => e
28
+ @stdout.puts "Error occurred. Possible reasons:\n #{Rdm::SOURCE_FILENAME} not found. Please run on directory containing #{Rdm::SOURCE_FILENAME} \n#{e.inspect}"
29
+ rescue Rdm::Errors::PackageExists
30
+ @stdout.puts 'Error. Package already exist. Package was not generated'
31
+ rescue Rdm::Errors::PackageNameNotSpecified
32
+ @stdout.puts "Package name was not specified!"
33
+ rescue Rdm::Errors::SourceFileDoesNotExist => e
34
+ @stdout.puts "Rdm.packages was not found. Run 'rdm init' to create it"
35
+ rescue Rdm::Errors::PackageDirExists => e
36
+ @stdout.puts "Error. Directory #{e.message} exists. Package was not generated"
45
37
  end
46
38
  end
47
39
  end
@@ -2,41 +2,34 @@ module Rdm
2
2
  module CLI
3
3
  class Init
4
4
  class << self
5
- def run(opts = {})
6
- Rdm::CLI::Init.new(opts).run
5
+ def run(current_path:, test:, console:, stdout: $stdout)
6
+ Rdm::CLI::Init.new(current_path, test, console, stdout).run
7
7
  end
8
8
  end
9
9
 
10
- attr_accessor :current_dir, :test, :console
11
- def initialize(current_dir:, test:, console:)
12
- @current_dir = current_dir
13
- @test = test
14
- @console = console
10
+ def initialize(current_path, test, console, stdout)
11
+ @current_path = current_path
12
+ @test = test
13
+ @console = console
14
+ @stdout = stdout
15
15
  end
16
16
 
17
17
  def run
18
- check_preconditions!
19
- begin
20
- generate
21
- rescue Errno::ENOENT => e
22
- puts "Error occurred. Possible reasons:\n #{current_dir} not found. Please run on empty directory \n#{e.inspect}"
23
- rescue Rdm::Errors::ProjectAlreadyInitialized
24
- puts 'Error. Project was already initialized.'
25
- end
26
- end
27
-
28
- def generate
29
- Rdm::Gen::Init.generate(
30
- current_dir: current_dir,
31
- test: test,
32
- console: console
18
+ generated_files_list = Rdm::Gen::Init.generate(
19
+ current_path: @current_path,
20
+ test: @test,
21
+ console: @console
33
22
  )
34
- end
35
23
 
36
- def check_preconditions!
37
- return unless current_dir.empty?
38
- puts 'Current directory was not specified!'
39
- exit 1
24
+ generated_files_list.each { |file| @stdout.puts "Generated: #{file}" }
25
+ rescue Errno::ENOENT => e
26
+ @stdout.puts "Error occurred. Possible reasons:\n #{@current_path} not found. Please run on empty directory \n#{e.inspect}"
27
+ rescue Rdm::Errors::ProjectAlreadyInitialized
28
+ @stdout.puts 'Error. Project was already initialized'
29
+ rescue Rdm::Errors::InvalidParams => e
30
+ @stdout.puts e.message
31
+ rescue Rdm::Errors::InvalidProjectDir => e
32
+ @stdout.puts "#{e.message} doesn't exist. Initialize new rdm project with existing directory"
40
33
  end
41
34
  end
42
35
  end
@@ -0,0 +1,38 @@
1
+ module Rdm
2
+ module CLI
3
+ class TemplateGenerator
4
+ class << self
5
+ def run(template_name:, current_path:, local_path:, locals:)
6
+ TemplateGenerator.new(
7
+ template_name: template_name,
8
+ current_path: current_path,
9
+ local_path: local_path,
10
+ locals: locals
11
+ ).run
12
+ end
13
+ end
14
+
15
+ def initialize(template_name:, current_path:, local_path:, locals:)
16
+ @template_name = template_name
17
+ @current_path = current_path
18
+ @local_path = local_path
19
+ @locals = locals
20
+ end
21
+
22
+ def run
23
+ Rdm::Handlers::TemplateHandler.generate(
24
+ template_name: @template_name,
25
+ current_path: @current_path,
26
+ local_path: @local_path,
27
+ locals: @locals
28
+ )
29
+ rescue Rdm::Errors::TemplateDoesNotExist
30
+ puts "Template '#{@template_name}' does not exist. Create new at #{File.join(@current_path, '.rdm/templates/', @template_name)} folder"
31
+ rescue Rdm::Errors::SourceFileDoesNotExist => e
32
+ puts e.message
33
+ rescue Rdm::Errors::TemplateFileExists => e
34
+ puts "File #{e.message} already exists. Try to user another variable name"
35
+ end
36
+ end
37
+ end
38
+ end
@@ -9,6 +9,43 @@ module Rdm
9
9
  end
10
10
 
11
11
  class SourceFileDoesNotExist < StandardError
12
+ attr_reader :message
13
+ def initialize(message = nil)
14
+ @message = message || "Rdm.packages was not found. Run 'rdm init' to create it"
15
+ end
16
+ end
17
+
18
+ class GitRepositoryNotInitialized < StandardError
19
+ end
20
+
21
+ class PackageFileDoesNotFound < StandardError
22
+ end
23
+
24
+ class GitCommandError < StandardError
25
+ end
26
+
27
+ class PackageDoesNotExist < StandardError
28
+ end
29
+
30
+ class TemplateVariableNotDefined < StandardError
31
+ end
32
+
33
+ class TemplateDoesNotExist < StandardError
34
+ end
35
+
36
+ class TemplateFileExists < StandardError
37
+ end
38
+
39
+ class PackageNameNotSpecified < StandardError
40
+ end
41
+
42
+ class InvalidParams < StandardError
43
+ end
44
+
45
+ class InvalidProjectDir < StandardError
46
+ end
47
+
48
+ class PackageHasNoDependencies < StandardError
12
49
  end
13
50
  end
14
51
  end
@@ -1,68 +1,53 @@
1
1
  require 'fileutils'
2
2
  require 'pathname'
3
- require 'active_support/inflector'
4
3
 
5
4
  module Rdm
6
5
  module Gen
7
6
  class Init
7
+ TEMPLATE_NAME = 'init'
8
+ INIT_PATH = './'
9
+ LOCAL_TEMPLATES_PATH = '.rdm/templates'
10
+
8
11
  class << self
9
- def generate(current_dir:, test: 'rspec', console: 'irb')
10
- Rdm::Gen::Init.new(current_dir: current_dir, test: test, console: console).generate
12
+ def generate(current_path:, test: 'rspec', console: 'irb')
13
+ Rdm::Gen::Init.new(current_path, test, console).generate
11
14
  end
12
15
  end
13
16
 
14
- include Rdm::Gen::Concerns::TemplateHandling
15
-
16
- attr_accessor :current_dir, :test, :console
17
- def initialize(current_dir:, test:, console:)
18
- @current_dir = File.expand_path(current_dir)
19
- @test = test
20
- @console = console
17
+ def initialize(current_path, test, console)
18
+ @current_path = current_path
19
+ @test = test
20
+ @console = console
21
+ @template_detector = Rdm::Templates::TemplateDetector.new(current_path)
21
22
  end
22
23
 
23
24
  def generate
24
- check_preconditions!
25
-
26
- Dir.chdir(current_dir) do
27
- ensure_file(['.gitignore'])
28
- ensure_file(
29
- ['Rdm.packages'],
30
- template_content('Rdm.packages.erb')
31
- )
32
-
33
- ensure_file(
34
- ['Gemfile'],
35
- template_content('Gemfile.erb')
36
- )
37
-
38
- ensure_file(
39
- ['Readme.md'],
40
- template_content('Readme.md.erb')
41
- )
42
- move_templates
25
+ if @current_path.nil? || @current_path.empty?
26
+ raise Rdm::Errors::InvalidParams, "Error. Project folder not specified. Type path to rdm project, ex: 'rdm init .'"
43
27
  end
44
- end
28
+ raise Rdm::Errors::InvalidProjectDir, @current_path unless Dir.exist?(@current_path)
45
29
 
46
- def check_preconditions!
47
- if File.exist?(File.join(current_dir, Rdm::SOURCE_FILENAME))
48
- raise Rdm::Errors::ProjectAlreadyInitialized, "#{current_dir} has already #{Rdm::SOURCE_FILENAME}"
30
+ if File.exist?(File.join(@current_path, Rdm::SOURCE_FILENAME))
31
+ raise Rdm::Errors::ProjectAlreadyInitialized, "#{@current_path} has already #{Rdm::SOURCE_FILENAME}"
49
32
  end
50
- end
51
33
 
52
- def move_templates
53
- Dir.chdir(templates_path) do
54
- copy_template('tests/run')
55
- end
34
+ FileUtils.mkdir_p(local_templates_path)
35
+ FileUtils.cp_r(
36
+ @template_detector.detect_template_folder('package'),
37
+ local_templates_path
38
+ )
39
+ Rdm::Handlers::TemplateHandler.generate(
40
+ template_name: TEMPLATE_NAME,
41
+ current_path: @current_path,
42
+ local_path: INIT_PATH,
43
+ ignore_source_file: true
44
+ )
56
45
  end
57
46
 
58
47
  private
59
48
 
60
- def templates_path
61
- Pathname.new(File.join(File.dirname(__FILE__), '..', 'templates/init'))
62
- end
63
-
64
- def target_path
65
- current_dir
49
+ def local_templates_path
50
+ File.join(@current_path, LOCAL_TEMPLATES_PATH)
66
51
  end
67
52
  end
68
53
  end
@@ -1,98 +1,44 @@
1
1
  require 'fileutils'
2
2
  require 'pathname'
3
- require 'active_support/inflector'
4
3
 
5
4
  module Rdm
6
5
  module Gen
7
6
  class Package
7
+ TEMPLATE_NAME = 'package'
8
+
8
9
  class << self
9
- def generate(current_dir:, package_name:, package_relative_path:, skip_tests: false)
10
- Rdm::Gen::Package.new(
11
- current_dir, package_name, package_relative_path, skip_tests
12
- ).create
10
+ def generate(package_name:, current_path:, local_path:, locals: {})
11
+ Rdm::Gen::Package.new(package_name, current_path, local_path, locals).create
13
12
  end
14
13
  end
15
14
 
16
- include Rdm::Gen::Concerns::TemplateHandling
17
-
18
- attr_accessor :current_dir, :package_name, :package_relative_path, :skip_tests
19
- def initialize(current_dir, package_name, package_relative_path, skip_tests = false)
20
- @current_dir = File.expand_path(current_dir)
21
- @package_name = package_name
22
- @package_relative_path = package_relative_path
23
- @skip_tests = skip_tests
24
- end
25
-
26
- def rdm_source
27
- @rdm_source ||= Rdm::SourceParser.new(source_path).parse_source_content
28
- end
29
-
30
- def source_path
31
- File.join(current_dir, Rdm::SOURCE_FILENAME)
32
- end
33
-
34
- def source_content
35
- File.open(source_path).read
15
+ def initialize(package_name, current_path, local_path, locals = {})
16
+ @current_path = current_path
17
+ @package_name = package_name
18
+ @local_path = local_path
19
+ @locals = locals
36
20
  end
37
21
 
38
22
  def create
39
- check_preconditions!
40
- package_subdir_name = Rdm.settings.send(:package_subdir_name)
41
-
42
- Dir.chdir(current_dir) do
43
- ensure_file([package_relative_path, '.gitignore'])
44
- ensure_file([package_relative_path, package_subdir_name, package_name, '.gitignore'])
45
- ensure_file(
46
- [package_relative_path, package_subdir_name, "#{package_name}.rb"],
47
- template_content('main_module_file.rb.erb', package_name_camelized: package_name.camelize)
48
- )
49
- ensure_file(
50
- [package_relative_path, 'Package.rb'],
51
- template_content('package.rb.erb', package_name: package_name)
52
- )
53
- init_rspec unless skip_tests
54
-
55
- move_templates
56
- append_package_to_rdm_packages
57
- end
58
- end
59
-
60
- def check_preconditions!
61
- if Dir.exist?(File.join(current_dir, package_relative_path))
62
- raise Rdm::Errors::PackageDirExists, 'package dir exists'
63
- end
64
-
65
- if rdm_source.package_paths.include?(package_relative_path)
66
- raise Rdm::Errors::PackageExists, 'package exists'
67
- end
68
- end
69
-
70
- def append_package_to_rdm_packages
71
- new_source_content = source_content.strip + "\npackage '#{package_relative_path}'"
72
- File.write(source_path, new_source_content)
73
- end
74
-
75
- def init_rspec
76
- Dir.chdir(templates_path) do
77
- copy_template('.rspec')
78
- copy_template('spec/spec_helper.rb')
79
- end
80
- end
81
-
82
- def move_templates
83
- Dir.chdir(templates_path) do
84
- copy_template('bin/console_irb', 'bin/console')
85
- end
86
- end
23
+ raise Rdm::Errors::PackageDirExists.new(@local_path) if Dir.exist?(File.join(source.root_path, @local_path))
24
+ raise Rdm::Errors::PackageNameNotSpecified if @package_name.nil? || @package_name.empty?
25
+ raise Rdm::Errors::PackageExists if source.packages.keys.include?(@package_name)
87
26
 
88
- private
27
+ File.open(File.join(source.root_path, Rdm::SOURCE_FILENAME), 'a+') {|f| f.write("package '#{@local_path}'")}
89
28
 
90
- def templates_path
91
- Pathname.new(File.join(File.dirname(__FILE__), '..', 'templates/package'))
29
+ Rdm::Handlers::TemplateHandler.generate(
30
+ template_name: TEMPLATE_NAME,
31
+ current_path: @current_path,
32
+ local_path: @local_path,
33
+ locals: {
34
+ package_name: @package_name,
35
+ package_name_camelized: Rdm::Utils::StringUtils.camelize(@package_name)
36
+ }.merge(@locals)
37
+ )
92
38
  end
93
39
 
94
- def target_path
95
- File.join(current_dir, package_relative_path)
40
+ def source
41
+ @source ||= Rdm::SourceParser.read_and_init_source(Rdm::SourceLocator.locate(@current_path))
96
42
  end
97
43
  end
98
44
  end