rdm 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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