rdm 0.3.3 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b8377b7dfecb66758dde63451e2117b1733bb7eb
4
- data.tar.gz: 73ab78e25fbd86f975f94bbafed0fe23a2b8a439
3
+ metadata.gz: ccd255c90b9282d7099a6d56209702df3a6ae2ea
4
+ data.tar.gz: 45f8f4f7c203d6c9f24145df9f78ec150bad091f
5
5
  SHA512:
6
- metadata.gz: 747ce43ea4638a8a1de99f06256d29ba512913ac3f440938ae86afca60e50b8b06f064c97b47ca1e43a9e5cf62ee4a37c7d9ff4d9009ca8f409405382264b7a5
7
- data.tar.gz: dbc190dcab54d208dc8e361b7d1e8e02a47913572f268cbf5d92e7fcc4d8f6ff58dde7f25f3842c83e78e173aebf06034e0659b0ad037d8145cccb3d75a45308
6
+ metadata.gz: 43e2df557a1921a6ee3edc8d998113fd97efa8632ddcd3d7bb60596fdb63ca9f75f261666d305a149bcb75f6d91a3f01b60980db609f8e4422d681f552358a77
7
+ data.tar.gz: 037effcac344e15c413e24cc4b676ef5840eecadd0c70b2ce2752243541d9967c9e75f07fd6955a43177d6198b2b6bb83bfd102081b11f1b8d5a89b117d09969
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rdm (0.3.3)
4
+ rdm (0.4.0)
5
5
  activesupport
6
6
  commander (~> 4.4)
7
7
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- rdm (0.2.0)
4
+ rdm (0.3.4)
5
5
  activesupport
6
6
  commander (~> 4.4)
7
7
 
@@ -1,10 +1,15 @@
1
1
  setup do
2
2
  role "production"
3
+
3
4
  configs_dir "configs"
4
5
  config_path ":configs_dir/:config_name/default.yml"
5
6
  role_config_path ":configs_dir/:config_name/:role.yml"
7
+
8
+ env_files_dir "env_files"
9
+
6
10
  package_subdir_name "package"
7
- compile_path "/tmp/rdm_compiled"
11
+
12
+ compile_path "/tmp/rdm/:package_name"
8
13
  end
9
14
 
10
15
  config :database
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+ require 'bundler/setup'
3
+ require 'rdm'
4
+
5
+ ENV['RUBY_ENV'] ||= 'development'
6
+
7
+ source_file = Rdm::SourceLocator.locate(__dir__)
8
+ source = Rdm::SourceParser.read_and_init_source(source_file)
9
+ package_consoles = source.packages.inject([]) do |res, (name,data)|
10
+ package_console_file = File.join(data.path, 'bin/console')
11
+ File.exists?(package_console_file) ?
12
+ res.push(name: name, path: package_console_file) :
13
+ res
14
+ end
15
+
16
+ if package_consoles.empty?
17
+ puts "Console files were not found"
18
+ exit(0)
19
+ end
20
+
21
+ puts "Select package:"
22
+ package_consoles.each_with_index do |package, idx|
23
+ puts "#{idx+1}. #{package[:name]}"
24
+ end
25
+
26
+ print "Type number for selected package: "
27
+
28
+ select_result = gets.chomp
29
+ if select_result == "exit" || select_result.to_i == 0
30
+ exit(0)
31
+ end
32
+
33
+ path_to_selected_console = package_consoles[select_result.to_i - 1][:path]
34
+ exit(0) if path_to_selected_console.nil?
35
+ system(path_to_selected_console)
36
+
37
+
@@ -0,0 +1 @@
1
+ RUBY_ENV=development
@@ -0,0 +1,3 @@
1
+ RUBY_ENV=production
2
+
3
+ EXAMPLE_API_KEY=example_key_value
@@ -0,0 +1 @@
1
+ RUBY_ENV=test
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ require 'bundler/setup'
3
+ require 'rdm'
4
+
5
+ ENV['RUBY_ENV'] ||= 'development'
6
+ Rdm.init(File.expand_path('../../', __FILE__))
7
+
8
+ # You can add fixtures and/or initialization code here to make experimenting
9
+ # with your gem easier. You can also use a different console, if you like.
10
+
11
+ # (If you use this, don't forget to add pry to your Gemfile!)
12
+ # require "pry"
13
+ # Pry.start
14
+
15
+ require 'irb'
16
+ IRB.start
@@ -2,14 +2,14 @@ module Rdm
2
2
  module CLI
3
3
  class GenPackage
4
4
  class << self
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
5
+ def run(package_name:, current_path:, path:, locals: {}, stdout: $stdout)
6
+ Rdm::CLI::GenPackage.new(package_name, current_path, path, locals, stdout).run
7
7
  end
8
8
  end
9
9
 
10
- def initialize(package_name, current_path, local_path, locals, stdout)
10
+ def initialize(package_name, current_path, path, locals, stdout)
11
11
  @current_path = current_path
12
- @local_path = local_path
12
+ @path = path
13
13
  @package_name = package_name
14
14
  @locals = locals
15
15
  @stdout = stdout
@@ -18,12 +18,12 @@ module Rdm
18
18
  def run
19
19
  generated_files_list = Rdm::Gen::Package.generate(
20
20
  current_path: @current_path,
21
- local_path: @local_path,
21
+ local_path: @path,
22
22
  package_name: @package_name,
23
23
  locals: @locals
24
24
  )
25
25
 
26
- generated_files_list.each { |file| @stdout.puts "Generated: #{file}" }
26
+ generated_files_list.compact.each { |file| @stdout.puts "Generated: #{file}" }
27
27
  rescue Errno::ENOENT => e
28
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
29
  rescue Rdm::Errors::PackageExists
@@ -34,6 +34,8 @@ module Rdm
34
34
  @stdout.puts "Rdm.packages was not found. Run 'rdm init' to create it"
35
35
  rescue Rdm::Errors::PackageDirExists => e
36
36
  @stdout.puts "Error. Directory #{e.message} exists. Package was not generated"
37
+ rescue NoMethodError => e
38
+ @stdout.puts e.message
37
39
  end
38
40
  end
39
41
  end
@@ -21,7 +21,7 @@ module Rdm
21
21
  console: @console
22
22
  )
23
23
 
24
- generated_files_list.each { |file| @stdout.puts "Generated: #{file}" }
24
+ generated_files_list.compact.each { |file| @stdout.puts "Generated: #{file}" }
25
25
  rescue Errno::ENOENT => e
26
26
  @stdout.puts "Error occurred. Possible reasons:\n #{@current_path} not found. Please run on empty directory \n#{e.inspect}"
27
27
  rescue Rdm::Errors::ProjectAlreadyInitialized
@@ -36,6 +36,7 @@ module Rdm
36
36
  @template_detector.gem_template_folder('package'),
37
37
  @template_detector.project_template_folder('package')
38
38
  )
39
+
39
40
  Rdm::Handlers::TemplateHandler.generate(
40
41
  template_name: TEMPLATE_NAME,
41
42
  current_path: @current_path,
@@ -24,16 +24,13 @@ module Rdm
24
24
  raise Rdm::Errors::PackageNameNotSpecified if @package_name.nil? || @package_name.empty?
25
25
  raise Rdm::Errors::PackageExists if source.packages.keys.include?(@package_name)
26
26
 
27
- File.open(File.join(source.root_path, Rdm::SOURCE_FILENAME), 'a+') {|f| f.write("package '#{@local_path}'")}
27
+ File.open(File.join(source.root_path, Rdm::SOURCE_FILENAME), 'a+') {|f| f.write("\npackage '#{@local_path}'")}
28
28
 
29
29
  Rdm::Handlers::TemplateHandler.generate(
30
30
  template_name: TEMPLATE_NAME,
31
31
  current_path: @current_path,
32
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)
33
+ locals: { package_name: @package_name }.merge(@locals)
37
34
  )
38
35
  end
39
36
 
@@ -1,13 +1,11 @@
1
- require 'open3'
2
-
3
1
  class Rdm::Git::DiffCommand
4
2
  class << self
5
3
  def get_only_diff_filenames(revision:, path:)
6
4
  command = `cd #{path} && git diff --name-only #{revision}`
7
5
 
8
6
  raise Rdm::Errors::GitCommandError, command unless $?.success?
9
-
7
+
10
8
  command.split("\n")
11
9
  end
12
10
  end
13
- end
11
+ end
@@ -13,7 +13,7 @@ module Rdm
13
13
  check_repository_initialized!(abs_path)
14
14
 
15
15
  return Rdm::Git::DiffCommand
16
- .get_only_diff_filenames(revision: revision, path: path)
16
+ .get_only_diff_filenames(revision: revision, path: abs_path)
17
17
  .map { |filename| File.expand_path(File.join(abs_path, filename)) }
18
18
  end
19
19
 
@@ -4,6 +4,9 @@ require 'fileutils'
4
4
  module Rdm
5
5
  module Handlers
6
6
  class TemplateHandler
7
+ REJECTED_TEMPLATE_FILES = %W(.DS_Store)
8
+ NOT_HANDLED_TEMPLATES_EXT = %W(.erb)
9
+
7
10
  class << self
8
11
  def generate(template_name:, local_path:, current_path:, locals: {},
9
12
  ignore_source_file: false, stdout: STDOUT, stdin: STDIN)
@@ -30,7 +33,8 @@ module Rdm
30
33
  @missing_variables = []
31
34
  @stdout = stdout
32
35
  @stdin = stdin
33
-
36
+
37
+ default_locals = { package_subdir_name: Rdm.settings.send(:package_subdir_name) }
34
38
  @locals = default_locals.merge(locals)
35
39
  end
36
40
 
@@ -38,38 +42,31 @@ module Rdm
38
42
  project_path = @ignore_source_file ? @current_path : File.dirname(Rdm::SourceLocator.locate(@current_path))
39
43
  template_detector = Rdm::Templates::TemplateDetector.new(project_path)
40
44
 
45
+ render_helper_path = "#{project_path}/.rdm/helpers/render_helper.rb"
46
+ require_relative render_helper_path if File.exist?(render_helper_path)
47
+
41
48
  @template_directory = template_detector.detect_template_folder(@template_name)
42
49
  @destination_directory = File.join(project_path, @local_path)
43
50
 
44
- template_files_list = Dir[
45
- File.join(@template_directory, '**', '.?*'),
46
- File.join(@template_directory, '**', '*')
47
- ]
48
- .select { |p| File.file?(p) }
49
- .reject { |p| File.basename(p) == '.DS_Store' }
51
+ template_files_list = Dir
52
+ .glob(File.join(@template_directory, '**', '*'), File::FNM_DOTMATCH)
53
+ .reject { |path| REJECTED_TEMPLATE_FILES.include? File.basename(path) }
50
54
 
51
- template_dir_list = Dir[ File.join(@template_directory, '**', '*') ].select { |p| File.directory? p }
55
+ template_files_list.each do |path|
56
+ @missing_variables.concat(
57
+ Rdm::Templates::TemplateRenderer.get_undefined_variables(get_destination_path(path), @locals)
58
+ )
52
59
 
53
- template_files_list.each do |file|
54
- missings = Rdm::Templates::TemplateRenderer.get_undefined_variables(get_destination_path(file), @locals)
55
-
56
- if File.extname(file) != '.erb'
57
- missings.push(
58
- *Rdm::Templates::TemplateRenderer.get_undefined_variables(File.read(file), @locals)
60
+ if handle_file_content?(path)
61
+ @missing_variables.concat(
62
+ Rdm::Templates::TemplateRenderer.get_undefined_variables(File.read(path), @locals)
59
63
  )
60
64
  end
61
-
62
- @missing_variables.push(*missings)
63
- end
64
-
65
- template_dir_list.each do |dir|
66
- @missing_variables.push(
67
- *Rdm::Templates::TemplateRenderer.get_undefined_variables(get_destination_path(dir), @locals)
68
- )
69
65
  end
70
66
 
71
- @missing_variables.uniq!
72
67
  if @missing_variables.any?
68
+ @missing_variables.uniq!
69
+
73
70
  @stdout.puts "Undefined variables were found:"
74
71
  @missing_variables.size.times {|t| @stdout.puts " #{t+1}. #{@missing_variables[t]}"}
75
72
 
@@ -79,28 +76,32 @@ module Rdm
79
76
  end
80
77
  end
81
78
 
82
- template_dir_list.each do |dir|
83
- rendered_abs_path = Rdm::Templates::TemplateRenderer.handle(get_destination_path(dir), @locals)
84
- FileUtils.mkdir_p rendered_abs_path
85
- end
86
-
87
- template_files_list.map do |file|
88
- rendered_abs_path = Rdm::Templates::TemplateRenderer.handle(get_destination_path(file), @locals)
79
+ template_files_list.map! do |path|
80
+ rendered_abs_path = Rdm::Templates::TemplateRenderer.handle(get_destination_path(path), @locals)
81
+ rendered_rel_path = Pathname.new(rendered_abs_path).relative_path_from Pathname.new(project_path)
89
82
 
90
- if File.exists?(rendered_abs_path)
91
- @stdout.puts "Warning! #{file} already exists. Skipping file creation..."
83
+ if File.file?(rendered_abs_path) && File.exists?(rendered_abs_path)
84
+ @stdout.puts "Warning! #{rendered_rel_path} already exists. Skipping file creation..."
85
+ next
86
+ end
87
+
88
+ if File.directory?(path)
89
+ FileUtils.mkdir_p rendered_abs_path
92
90
  next
93
91
  end
94
92
 
95
- rendered_file_content = File.extname(file) == '.erb' ?
96
- File.read(file) :
97
- Rdm::Templates::TemplateRenderer.handle(File.read(file), @locals)
93
+ rendered_file_content = handle_file_content?(path) ?
94
+ Rdm::Templates::TemplateRenderer.handle(File.read(path), @locals) :
95
+ File.read(path)
96
+
98
97
 
99
98
  FileUtils.mkdir_p(File.dirname(rendered_abs_path))
100
99
  File.open(rendered_abs_path, 'w') { |f| f.write rendered_file_content }
101
100
 
102
- Pathname.new(rendered_abs_path).relative_path_from Pathname.new(project_path)
101
+ rendered_rel_path
103
102
  end
103
+
104
+ template_files_list.compact
104
105
  end
105
106
 
106
107
  private
@@ -112,10 +113,8 @@ module Rdm
112
113
  File.join(@destination_directory, template_rel_path)
113
114
  end
114
115
 
115
- def default_locals
116
- {
117
- package_subdir_name: Rdm.settings.send(:package_subdir_name)
118
- }
116
+ def handle_file_content?(path)
117
+ File.file?(path) && !NOT_HANDLED_TEMPLATES_EXT.include?(File.extname(path))
119
118
  end
120
119
  end
121
120
  end
@@ -14,15 +14,12 @@ module Rdm
14
14
  end
15
15
 
16
16
  def initialize(compile_path:, project_path:, package_name:)
17
- @compile_path = compile_path
17
+ @compile_path = compile_path.gsub(/:package_name/, package_name)
18
18
  @project_path = project_path
19
19
  @package_name = package_name
20
20
  end
21
21
 
22
22
  def compile
23
- render_helper_path = "#{@project_path}/.rdm/helpers/render_helper.rb"
24
- require_relative render_helper_path if File.exist?(render_helper_path)
25
-
26
23
  FileUtils.rm_rf(@compile_path) if Dir.exists?(@compile_path)
27
24
  FileUtils.mkdir_p(@compile_path)
28
25
 
@@ -60,6 +57,7 @@ module Rdm
60
57
  end
61
58
 
62
59
  FileUtils.cp_r(File.join(@project_path, 'configs'), File.join(@compile_path, 'configs'))
60
+ FileUtils.cp_r(File.join(@project_path, Rdm.settings.env_files_dir), File.join(@compile_path, Rdm.settings.env_files_dir))
63
61
 
64
62
  Rdm.settings.compile_ignore_files.each do |file|
65
63
  Dir["#{@compile_path}/**/#{file}"].each do |file_to_remove|
@@ -2,7 +2,7 @@ class Rdm::Settings
2
2
  SETTING_KEYS = [
3
3
  :role, :package_subdir_name, :configs_dir, :config_path, :role_config_path,
4
4
  :silence_missing_package_file, :silence_missing_package, :compile_path,
5
- :compile_ignore_files, :compile_add_files
5
+ :compile_ignore_files, :compile_add_files, :env_files_dir
6
6
  ].freeze
7
7
 
8
8
  SETTING_VARIABLES = [:role, :configs_dir, :config_path, :role_config_path].freeze
@@ -13,6 +13,7 @@ class Rdm::Settings
13
13
  silence_missing_package_file(false)
14
14
  package_subdir_name('package')
15
15
  configs_dir('configs')
16
+ env_files_dir('env_files')
16
17
  compile_ignore_files([
17
18
  '.gitignore',
18
19
  '.byebug_history',
@@ -23,7 +24,7 @@ class Rdm::Settings
23
24
  ])
24
25
  compile_add_files([
25
26
  'Gemfile',
26
- 'Gemfile.lock'
27
+ 'Gemfile.lock',
27
28
  ])
28
29
  end
29
30
 
@@ -3,15 +3,16 @@ class Rdm::SourceParser
3
3
  end
4
4
 
5
5
  class << self
6
- def read_and_init_source(source_path)
7
- Rdm::SourceParser.new(source_path).read_and_init_source
6
+ def read_and_init_source(source_path, stdout: nil)
7
+ Rdm::SourceParser.new(source_path, stdout).read_and_init_source
8
8
  end
9
9
  end
10
10
 
11
11
  attr_accessor :source_path
12
12
 
13
- def initialize(source_path)
13
+ def initialize(source_path, stdout)
14
14
  @source_path = source_path
15
+ @stdout = stdout || STDOUT
15
16
  end
16
17
 
17
18
  # Read source file, parse and init it's packages and configs
@@ -28,6 +29,7 @@ class Rdm::SourceParser
28
29
 
29
30
  init_and_set_packages(source)
30
31
  init_and_set_configs(source)
32
+ init_and_set_env_variables(source)
31
33
  source.init_with(packages: packages, configs: configs)
32
34
  source
33
35
  end
@@ -67,6 +69,25 @@ class Rdm::SourceParser
67
69
  end
68
70
  end
69
71
 
72
+ def init_and_set_env_variables(source)
73
+ role = settings.read_setting(:role)
74
+
75
+ unless File.exists?(env_file_path(role))
76
+ @stdout.puts "WARNING! Environment file for role '#{role}' was not found. Please, add #{env_file_path(role)} file..."
77
+ return
78
+ end
79
+
80
+ File.foreach(env_file_path(role)) do |line|
81
+ key, value = line.split('=').map(&:strip)
82
+
83
+ if ENV.has_key?(key) && ENV[key] != value
84
+ @stdout.puts "WARNING! Environment file '#{role}' overwrites ENV['#{key}'] variable from '#{ENV.fetch(key, nil)}' to '#{value}' ..."
85
+ end
86
+
87
+ ENV[key] = value
88
+ end
89
+ end
90
+
70
91
  # Make sure that all required settings are in place
71
92
  def validate_rdm_settings!
72
93
  if settings.read_setting(:role).nil?
@@ -81,6 +102,10 @@ class Rdm::SourceParser
81
102
  File.dirname(source_path)
82
103
  end
83
104
 
105
+ def env_file_path(role)
106
+ File.join(root_path, settings.read_setting(:env_files_dir), "#{role}.env")
107
+ end
108
+
84
109
  # [String] Source file content
85
110
  def source_content
86
111
  @source_content ||= File.read(source_path)
@@ -1,5 +1,5 @@
1
1
  module Rdm::SpecRunner
2
- def self.run(path: nil, package: nil, spec_mather: nil)
3
- Rdm::SpecRunner::Runner.new(path: path, package: package, spec_mather: spec_matcher).run
2
+ def self.run(path: nil, package: nil, spec_matcher: nil)
3
+ Rdm::SpecRunner::Runner.new(path: path, package: package, spec_matcher: spec_matcher).run
4
4
  end
5
5
  end
@@ -2,6 +2,7 @@ class Rdm::SpecRunner::Runner
2
2
  attr_accessor :skipped_packages
3
3
  attr_accessor :prepared_command_params
4
4
  attr_accessor :command
5
+
5
6
  def initialize(package: nil, spec_matcher: nil, path: nil)
6
7
  @package = package,
7
8
  @spec_matcher = spec_matcher.to_s
@@ -6,6 +6,8 @@ setup do
6
6
  configs_dir 'configs'
7
7
  config_path ':configs_dir/:config_name/default.yml'
8
8
  role_config_path ':configs_dir/:config_name/:role.yml'
9
+
10
+ env_files_dir 'env_files'
9
11
  package_subdir_name 'package'
10
12
  silence_missing_package true
11
13
  end
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env ruby
2
+ require 'bundler/setup'
3
+ require 'rdm'
4
+
5
+ ENV['RUBY_ENV'] ||= 'development'
6
+
7
+ source_file = Rdm::SourceLocator.locate(__dir__)
8
+ source = Rdm::SourceParser.read_and_init_source(source_file)
9
+ package_consoles = source.packages.inject([]) do |res, (name,data)|
10
+ package_console_file = File.join(data.path, 'bin/console')
11
+ File.exists?(package_console_file) ?
12
+ res.push(name: name, path: package_console_file) :
13
+ res
14
+ end
15
+
16
+ if package_consoles.empty?
17
+ puts "Console files were not found"
18
+ exit(0)
19
+ end
20
+
21
+ puts "Select package:"
22
+ package_consoles.each_with_index do |package, idx|
23
+ puts "#{idx+1}. #{package[:name]}"
24
+ end
25
+ print "Type number for selected package: "
26
+
27
+ select_result = gets.chomp
28
+ if select_result == "exit" || select_result.to_i == 0
29
+ exit(0)
30
+ end
31
+
32
+ path_to_selected_console = package_consoles[select_result.to_i - 1][:path]
33
+ exit(0) if path_to_selected_console.nil?
34
+ system(path_to_selected_console)
35
+
36
+
@@ -0,0 +1 @@
1
+ RUBY_ENV=development
@@ -0,0 +1 @@
1
+ RUBY_ENV=production
@@ -0,0 +1 @@
1
+ RUBY_ENV=test
@@ -15,7 +15,8 @@ module Rdm
15
15
 
16
16
  def initialize(template, locals)
17
17
  @template = template
18
- @locals = locals
18
+ @locals = locals
19
+ @undefined_variables = []
19
20
  end
20
21
 
21
22
  def handle
@@ -25,17 +26,26 @@ module Rdm
25
26
  end
26
27
 
27
28
  def get_undefined_variables
28
- get_template_variables - get_passed_variables
29
+ Rdm::Utils::RenderUtil.render(@template, @locals)
30
+
31
+ @undefined_variables
32
+ rescue NameError => e
33
+ raise NoMethodError, "Undefined method for template. Please, add :#{e.name} method to .rdm/helpers/render_helper.rb file!" if @undefined_variables.include?(e.name)
34
+
35
+ @locals[e.name] = e.name.to_s
36
+ @undefined_variables.push(e.name)
37
+
38
+ retry
29
39
  end
30
40
 
31
41
  private
32
42
 
33
43
  def get_template_variables
34
- @template
35
- .scan(TEMPLATE_VARIABLE)
36
- .flatten
37
- .map(&:intern)
38
- .uniq
44
+ Rdm::Utils::RenderUtil.render(@template, {})
45
+ rescue NameError => e
46
+ @locals
47
+
48
+ get_template_variables(@template, fake_locals, undefined_variables)
39
49
  end
40
50
 
41
51
  def get_passed_variables
@@ -1,3 +1,3 @@
1
1
  module Rdm
2
- VERSION = '0.3.3'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
@@ -4,8 +4,8 @@ describe Rdm::CLI::CompilePackage do
4
4
  include ExampleProjectHelper
5
5
 
6
6
  subject { described_class }
7
- let(:default_compile_path) { '/tmp/rdm_compiled' }
8
- let(:new_compile_path) { '/tmp/new_rdm_compiled' }
7
+ let(:tmp_rdm) { '/tmp/rdm' }
8
+ let(:new_compile_path) { '/tmp/rdm/custom_name' }
9
9
 
10
10
  describe "::compile" do
11
11
  before :each do
@@ -14,8 +14,7 @@ describe Rdm::CLI::CompilePackage do
14
14
 
15
15
  after :each do
16
16
  reset_example_project
17
- FileUtils.rm_rf(default_compile_path)
18
- FileUtils.rm_rf(new_compile_path)
17
+ FileUtils.rm_rf(tmp_rdm)
19
18
  end
20
19
 
21
20
  context "setup compile_path at Rdm.packages" do
@@ -24,7 +23,8 @@ describe Rdm::CLI::CompilePackage do
24
23
  subject.compile(
25
24
  project_path: example_project_path,
26
25
  package_name: 'core',
27
- overwrite_directory: ->() { true }
26
+ overwrite_directory: ->() { true },
27
+ compile_path: nil
28
28
  )
29
29
  }.to output(
30
30
  <<~EOF
@@ -3,9 +3,8 @@ require "spec_helper"
3
3
  describe Rdm::CLI::GenPackage do
4
4
  include ExampleProjectHelper
5
5
 
6
- subject { described_class }
7
-
8
- let(:stdout) { SpecLogger.new }
6
+ subject { described_class }
7
+ let(:stdout) { SpecLogger.new }
9
8
 
10
9
  before { initialize_example_project }
11
10
  after { reset_example_project }
@@ -15,7 +14,7 @@ describe Rdm::CLI::GenPackage do
15
14
  subject.run(
16
15
  package_name: "database",
17
16
  current_path: example_project_path,
18
- local_path: "infrastructure/database",
17
+ path: "infrastructure/database",
19
18
  stdout: stdout
20
19
  )
21
20
 
@@ -35,7 +34,7 @@ describe Rdm::CLI::GenPackage do
35
34
  subject.run(
36
35
  package_name: "database",
37
36
  current_path: example_project_path,
38
- local_path: "infrastructure/database",
37
+ path: "infrastructure/database",
39
38
  stdout: stdout
40
39
  )
41
40
 
@@ -48,7 +47,7 @@ describe Rdm::CLI::GenPackage do
48
47
  subject.run(
49
48
  package_name: "database",
50
49
  current_path: File.dirname(example_project_path),
51
- local_path: "infrastructure/database",
50
+ path: "infrastructure/database",
52
51
  stdout: stdout
53
52
  )
54
53
 
@@ -59,14 +58,14 @@ describe Rdm::CLI::GenPackage do
59
58
  subject.run(
60
59
  package_name: "database",
61
60
  current_path: example_project_path,
62
- local_path: "infrastructure/database",
61
+ path: "infrastructure/database",
63
62
  stdout: stdout
64
63
  )
65
64
 
66
65
  subject.run(
67
66
  package_name: "database",
68
67
  current_path: example_project_path,
69
- local_path: "infrastructure/database",
68
+ path: "infrastructure/database",
70
69
  stdout: stdout
71
70
  )
72
71
  expect(stdout.output).to include("Error. Directory infrastructure/database exists. Package was not generated")
@@ -76,14 +75,14 @@ describe Rdm::CLI::GenPackage do
76
75
  subject.run(
77
76
  package_name: "database",
78
77
  current_path: example_project_path,
79
- local_path: "infrastructure/database",
78
+ path: "infrastructure/database",
80
79
  stdout: stdout
81
80
  )
82
81
 
83
82
  subject.run(
84
83
  package_name: "database",
85
84
  current_path: example_project_path,
86
- local_path: "database",
85
+ path: "database",
87
86
  stdout: stdout
88
87
  )
89
88
  expect(stdout.output).to include("Error. Package already exist. Package was not generated")
@@ -93,7 +92,7 @@ describe Rdm::CLI::GenPackage do
93
92
  subject.run(
94
93
  package_name: "",
95
94
  current_path: example_project_path,
96
- local_path: "infrastructure/database",
95
+ path: "infrastructure/database",
97
96
  stdout: stdout
98
97
  )
99
98
  expect(stdout.output).to include("Package name was not specified!")
@@ -17,6 +17,10 @@ describe Rdm::Gen::Init do
17
17
  ensure_exists("Gemfile")
18
18
  ensure_exists("Readme.md")
19
19
  ensure_exists("tests/run")
20
+ ensure_exists("bin/console")
21
+ ensure_exists("env_files/test.env")
22
+ ensure_exists("env_files/development.env")
23
+ ensure_exists("env_files/production.env")
20
24
  end
21
25
  end
22
26
 
@@ -9,13 +9,13 @@ describe Rdm::Gen::Package do
9
9
  after { reset_example_project }
10
10
 
11
11
  context "sample package" do
12
- it "has generated correct files" do
13
- FileUtils.rm_rf(File.join(example_project_path, '.rdm'))
12
+ it "generates correct files" do
13
+ FileUtils.rm_rf(File.join(example_project_path, '.rdm', 'templates'))
14
14
 
15
15
  subject.generate(
16
16
  current_path: example_project_path,
17
17
  package_name: "some",
18
- local_path: "domain/some",
18
+ local_path: "domain/some"
19
19
  )
20
20
 
21
21
  FileUtils.cd(example_project_path) do
@@ -3,24 +3,33 @@ require 'spec_helper'
3
3
  describe Rdm::Packages::CompilerService do
4
4
  include ExampleProjectHelper
5
5
 
6
- subject { described_class }
7
- let(:source_parser) { Rdm::SourceParser }
8
- let(:source_path) { File.join(compile_path, Rdm::SOURCE_FILENAME) }
9
- let(:compile_path) { "/tmp/example_compile" }
6
+ subject { described_class }
7
+ let(:source_parser) { Rdm::SourceParser }
8
+ let(:source_path) { File.join(compile_path, Rdm::SOURCE_FILENAME) }
9
+ let(:fixed_compile_path) { "/tmp/rdm/custom_name" }
10
+ let(:compile_path_template) { "/tmp/rdm/:package_name" }
11
+
12
+ def compile_path(package_name)
13
+ compile_path_template.gsub(/:package_name/, package_name)
14
+ end
15
+
16
+ def source_path(package_name)
17
+ File.join(compile_path(package_name), Rdm::SOURCE_FILENAME)
18
+ end
10
19
 
11
20
  describe "::compile" do
12
21
  before { initialize_example_project }
13
22
 
14
23
  after do
15
24
  reset_example_project
16
- FileUtils.rm_rf compile_path
25
+ FileUtils.rm_rf File.dirname(fixed_compile_path)
17
26
  end
18
27
 
19
28
  context "to existing directory" do
20
29
  before do
21
30
  subject.compile(
22
31
  package_name: 'web',
23
- compile_path: compile_path,
32
+ compile_path: fixed_compile_path,
24
33
  project_path: example_project_path
25
34
  )
26
35
  end
@@ -29,20 +38,20 @@ describe Rdm::Packages::CompilerService do
29
38
  before do
30
39
  subject.compile(
31
40
  package_name: 'core',
32
- compile_path: compile_path,
41
+ compile_path: fixed_compile_path,
33
42
  project_path: example_project_path
34
43
  )
35
44
  end
36
-
45
+
37
46
  it "deletes old unused package from file structure" do
38
47
  expect(
39
- File.exists?(File.join(compile_path, 'application/web/package/web.rb'))
48
+ File.exists?(File.join(fixed_compile_path, 'application/web/package/web.rb'))
40
49
  ).to be false
41
50
  end
42
51
 
43
52
  it "deletes old unused package from Rdm.packages" do
44
53
  package_names = source_parser
45
- .read_and_init_source(source_path)
54
+ .read_and_init_source(source_path('custom_name'))
46
55
  .packages
47
56
  .values
48
57
  .map(&:name)
@@ -57,28 +66,28 @@ describe Rdm::Packages::CompilerService do
57
66
  before do
58
67
  subject.compile(
59
68
  package_name: 'repository',
60
- compile_path: compile_path,
69
+ compile_path: compile_path_template,
61
70
  project_path: example_project_path
62
71
  )
63
72
  end
64
73
 
65
74
  it "creates folder" do
66
- expect(Dir.exists?(compile_path)).to be true
75
+ expect(Dir.exists?(compile_path('repository'))).to be true
67
76
  end
68
77
 
69
78
  it "creates Rdm.packges" do
70
- expect(File.exists?(source_path)).to be true
79
+ expect(File.exists?(source_path('repository'))).to be true
71
80
  end
72
81
 
73
82
  it "copies files structure from original package" do
74
83
  expect(
75
- File.exists?(File.join(compile_path, 'infrastructure/repository/package/repository.rb'))
84
+ File.exists?(File.join(compile_path('repository'), 'infrastructure/repository/package/repository.rb'))
76
85
  ).to be true
77
86
  end
78
87
 
79
88
  it "add only required package name to Rdm.packages" do
80
89
  package_names = source_parser
81
- .read_and_init_source(source_path)
90
+ .read_and_init_source(source_path('repository'))
82
91
  .packages
83
92
  .values
84
93
  .map(&:name)
@@ -92,24 +101,24 @@ describe Rdm::Packages::CompilerService do
92
101
  before do
93
102
  subject.compile(
94
103
  package_name: 'web',
95
- compile_path: compile_path,
104
+ compile_path: compile_path_template,
96
105
  project_path: example_project_path
97
106
  )
98
107
  end
99
108
 
100
109
  it "copies files structure for each dependent package" do
101
110
  expect(
102
- File.exists?(File.join(compile_path, 'domain/core/package/core.rb'))
111
+ File.exists?(File.join(compile_path('web'), 'domain/core/package/core.rb'))
103
112
  ).to be true
104
113
 
105
114
  expect(
106
- File.exists?(File.join(compile_path, 'application/web/package/web.rb'))
115
+ File.exists?(File.join(compile_path('web'), 'application/web/package/web.rb'))
107
116
  ).to be true
108
117
  end
109
118
 
110
119
  it "add only required package name to Rdm.packages" do
111
120
  package_names = source_parser
112
- .read_and_init_source(source_path)
121
+ .read_and_init_source(source_path('web'))
113
122
  .packages
114
123
  .values
115
124
  .map(&:name)
@@ -1,6 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Rdm::SourceParser do
4
+ include ExampleProjectHelper
5
+
4
6
  describe "#parse" do
5
7
  subject { Rdm::SourceParser }
6
8
 
@@ -17,7 +19,7 @@ describe Rdm::SourceParser do
17
19
  }
18
20
 
19
21
  before :each do
20
- @source = subject.read_and_init_source(source_path)
22
+ @source = subject.read_and_init_source(source_path, stdout: SpecLogger.new)
21
23
  end
22
24
 
23
25
  it "returns Source object" do
@@ -55,7 +57,7 @@ describe Rdm::SourceParser do
55
57
  }
56
58
 
57
59
  before :each do
58
- @source = subject.read_and_init_source(source_path)
60
+ @source = subject.read_and_init_source(source_path, stdout: SpecLogger.new)
59
61
  end
60
62
 
61
63
  it "returns Source object" do
@@ -75,4 +77,50 @@ describe Rdm::SourceParser do
75
77
  expect(names).to include("database")
76
78
  end
77
79
  end
80
+
81
+ describe "::read_and_init_source" do
82
+ before { initialize_example_project }
83
+ after { reset_example_project }
84
+
85
+ subject { described_class }
86
+ let(:stdout) { SpecLogger.new }
87
+
88
+ describe "#init_and_set_env_variables" do
89
+ context "with defined role" do
90
+ it "load env_file variables into ENV hash" do
91
+ subject.read_and_init_source(@rdm_source_file)
92
+
93
+ expect(ENV['EXAMPLE_API_KEY']).to eq('example_key_value')
94
+ end
95
+ end
96
+
97
+ context "with undefined role" do
98
+ it "puts warning message" do
99
+ Rdm::Utils::FileUtils.change_file @rdm_source_file do |line|
100
+ line.include?('role "production"') ? 'role "stading"' : line
101
+ end
102
+
103
+ subject.read_and_init_source(@rdm_source_file, stdout: stdout)
104
+
105
+ expect(stdout.output).to include("WARNING! Environment file for role 'stading' was not found. Please, add /tmp/example/env_files/stading.env file...")
106
+ end
107
+ end
108
+
109
+ context "when try to overwrite ENV variable" do
110
+ before do
111
+ ENV['RUBY_ENV'] = 'test'
112
+
113
+ subject.read_and_init_source(@rdm_source_file, stdout: stdout)
114
+ end
115
+
116
+ it 'puts warning message' do
117
+ expect(stdout.output).to include("WARNING! Environment file 'production' overwrites ENV['RUBY_ENV'] variable from 'test' to 'production' ...")
118
+ end
119
+
120
+ it 'overwrites ENV variable' do
121
+ expect(ENV['RUBY_ENV']).to eq('production')
122
+ end
123
+ end
124
+ end
125
+ end
78
126
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Droid Labs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-04 00:00:00.000000000 Z
11
+ date: 2017-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -149,16 +149,21 @@ files:
149
149
  - example/application/web/Package.rb
150
150
  - example/application/web/package/web.rb
151
151
  - example/application/web/package/web/sample_controller.rb
152
+ - example/bin/console
152
153
  - example/configs/app/default.yml
153
154
  - example/configs/app/production.yml
154
155
  - example/configs/database/default.yml
155
156
  - example/domain/core/Package.rb
156
157
  - example/domain/core/package/core.rb
157
158
  - example/domain/core/package/core/sample_service.rb
159
+ - example/env_files/development.env
160
+ - example/env_files/production.env
161
+ - example/env_files/test.env
158
162
  - example/infrastructure/repository/Package.rb
159
163
  - example/infrastructure/repository/package/repository.rb
160
164
  - example/infrastructure/repository/package/repository/sample_repository.rb
161
165
  - example/server/Package.rb
166
+ - example/server/bin/console
162
167
  - example/server/package/server.rb
163
168
  - example/server/server.rb
164
169
  - example/tests/diff_run
@@ -202,6 +207,10 @@ files:
202
207
  - lib/rdm/templates/init/Gemfile
203
208
  - lib/rdm/templates/init/Rdm.packages
204
209
  - lib/rdm/templates/init/Readme.md
210
+ - lib/rdm/templates/init/bin/console
211
+ - lib/rdm/templates/init/env_files/development.env
212
+ - lib/rdm/templates/init/env_files/production.env
213
+ - lib/rdm/templates/init/env_files/test.env
205
214
  - lib/rdm/templates/init/tests/diff_run
206
215
  - lib/rdm/templates/init/tests/run
207
216
  - lib/rdm/templates/package/.gitignore