rdm 0.1.12 → 0.1.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.rubocop.yml +17 -0
  4. data/.travis.yml +13 -0
  5. data/Gemfile +5 -1
  6. data/LICENSE.txt +1 -1
  7. data/README.md +84 -28
  8. data/bin/rdm +72 -0
  9. data/bin/rubocop +6 -0
  10. data/docs/_config.yml +1 -0
  11. data/docs/index.md +98 -0
  12. data/docs/interface_brainstorming.md +31 -0
  13. data/example/Rdm.packages +1 -1
  14. data/example/Readme.md +1 -3
  15. data/lib/rdm.rb +29 -20
  16. data/lib/rdm/cli/gen_package.rb +48 -0
  17. data/lib/rdm/cli/init.rb +43 -0
  18. data/lib/rdm/config.rb +9 -1
  19. data/lib/rdm/config_manager.rb +5 -5
  20. data/lib/rdm/config_scope.rb +3 -3
  21. data/lib/rdm/errors.rb +2 -0
  22. data/lib/rdm/gen/concerns/template_handling.rb +81 -0
  23. data/lib/rdm/gen/init.rb +69 -0
  24. data/lib/rdm/gen/package.rb +99 -0
  25. data/lib/rdm/package.rb +17 -16
  26. data/lib/rdm/package_importer.rb +89 -79
  27. data/lib/rdm/package_parser.rb +25 -5
  28. data/lib/rdm/settings.rb +21 -20
  29. data/lib/rdm/source.rb +1 -1
  30. data/lib/rdm/source_locator.rb +31 -0
  31. data/lib/rdm/source_parser.rb +83 -68
  32. data/lib/rdm/support/colorize.rb +106 -0
  33. data/lib/rdm/support/render.rb +17 -0
  34. data/lib/rdm/support/template.rb +30 -0
  35. data/lib/rdm/templates/init/Gemfile.erb +25 -0
  36. data/lib/rdm/templates/init/Rdm.packages.erb +18 -0
  37. data/lib/rdm/templates/init/Readme.md.erb +24 -0
  38. data/lib/rdm/templates/{tests → init/tests}/run +27 -31
  39. data/lib/rdm/templates/package/.gitignore +1 -0
  40. data/lib/rdm/templates/{.rspec → package/.rspec} +0 -0
  41. data/lib/rdm/templates/{bin → package/bin}/console_irb +4 -5
  42. data/lib/rdm/templates/{main_module_file.rb.erb → package/main_module_file.rb.erb} +0 -0
  43. data/lib/rdm/templates/{package.rb.erb → package/package.rb.erb} +0 -0
  44. data/lib/rdm/templates/{spec → package/spec}/spec_helper.rb +0 -0
  45. data/lib/rdm/version.rb +1 -1
  46. data/rdm.gemspec +3 -0
  47. data/spec/fixtures/SampleSource.rb +3 -1
  48. data/spec/fixtures/sample_prj/Rdm.packages +12 -0
  49. data/spec/fixtures/sample_prj/infrastructure/web/Package.rb +16 -0
  50. data/spec/rdm/cli/gen_package_spec.rb +130 -0
  51. data/spec/rdm/cli/init_spec.rb +97 -0
  52. data/spec/rdm/config_manager_spec.rb +37 -1
  53. data/spec/rdm/gen/init_spec.rb +63 -0
  54. data/spec/rdm/gen/package_spec.rb +87 -0
  55. data/spec/rdm/package_importer_spec.rb +5 -1
  56. data/spec/rdm/package_parser_spec.rb +10 -24
  57. data/spec/rdm/rdm_spec.rb +42 -0
  58. data/spec/rdm/source_locator_spec.rb +45 -0
  59. data/spec/rdm/source_parser_spec.rb +45 -3
  60. data/spec/rdm/support/colorize_spec.rb +24 -0
  61. data/spec/rdm/support/template_spec.rb +20 -0
  62. data/spec/spec_helper.rb +45 -0
  63. metadata +92 -16
  64. data/bin/rdm-generate +0 -55
  65. data/bin/rdm-install +0 -13
  66. data/lib/rdm/auto_updater.rb +0 -41
  67. data/lib/rdm/package_generator.rb +0 -121
  68. data/lib/rdm/source_installer.rb +0 -35
  69. data/lib/rdm/templates/.gitignore +0 -1
@@ -1,55 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # -*- encoding: utf-8 -*-
3
-
4
- require 'rubygems'
5
- require 'bundler'
6
- Bundler.setup
7
- require 'rdm'
8
- require 'optparse'
9
-
10
- current_dir = `pwd`.chomp
11
-
12
- options = {
13
- skip_rspec: false
14
- }
15
-
16
- if ARGV[0] != 'package'
17
- puts "Unsupported generator command provided. Please use `rdm-generate package PACKAGE_NAME args`."
18
- exit 1
19
- end
20
-
21
- package_name = ARGV[1].to_s.strip
22
- if package_name.empty?
23
- puts 'Package name was not specified'
24
- exit 1
25
- end
26
-
27
- OptionParser.new do |opts|
28
- opts.banner = "Usage: rdm-generate package PACKAGE_NAME --path=RELATIVE_PATH --skip-rspec"
29
-
30
- opts.on('--skip-rspec', 'Skip rspec generation') do
31
- options[:skip_rspec] = true
32
- end
33
-
34
- opts.on('--path=', '', 'Package relative path') do |v|
35
- options[:path] = v.strip
36
- end
37
- end.parse!
38
-
39
- if options[:path].nil?
40
- options[:path] = package_name.downcase.gsub(/\s+/, '_')
41
- end
42
-
43
- options[:path].gsub!(/^\/+/, '')
44
-
45
- puts "Generating package #{package_name} to #{options[:path]}"
46
-
47
- begin
48
- Rdm::PackageGenerator.generate_package(current_dir, package_name, options[:path], options[:skip_rspec])
49
- rescue Errno::ENOENT => e
50
- puts "Error occurred. Possible reasons:\n #{Rdm::SOURCE_FILENAME} not found. Please run on directory containing #{Rdm::SOURCE_FILENAME} \n#{e.inspect}"
51
- rescue Rdm::Errors::PackageExists
52
- puts "Error. Package already exist. Package was not generated"
53
- rescue Rdm::Errors::PackageDirExists
54
- puts "Error. Directory #{options[:path]} exists. Package was not generated"
55
- end
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # -*- encoding: utf-8 -*-
3
-
4
- require 'rubygems'
5
- require 'bundler'
6
- require 'rdm'
7
-
8
- source_path = File.join(`pwd`.chomp, Rdm::SOURCE_FILENAME)
9
- begin
10
- Rdm::SourceInstaller.install(source_path)
11
- rescue Errno::ENOENT => e
12
- puts "Error occurred. Possible reasons:\n #{Rdm::SOURCE_FILENAME} not found. Please run on directory containing #{Rdm::SOURCE_FILENAME} \n#{e.inspect}"
13
- end
@@ -1,41 +0,0 @@
1
- module Rdm
2
- class AutoUpdater
3
- class << self
4
- def update(path)
5
- Rdm::AutoUpdater.new(path).update
6
- end
7
- end
8
-
9
- attr_accessor :path
10
- def initialize(path)
11
- @path = path
12
- end
13
-
14
- def update
15
- begin
16
- source_path = find_source_path_in_hierarchy(path)
17
- Rdm::SourceInstaller.install(source_path)
18
- rescue Rdm::Errors::SourceFileDoesNotExist => e
19
- puts "*** #{path} does not include any #{Rdm::SOURCE_FILENAME} in its tree hierarchy!"
20
- end
21
- end
22
-
23
- def find_source_path_in_hierarchy(some_path)
24
- some_path = File.expand_path(some_path)
25
- raise SourceFileDoesNotExist if some_path == "/"
26
- if is_present?(some_path)
27
- return potential_file(some_path)
28
- else
29
- find_source_path_in_hierarchy(File.dirname(some_path))
30
- end
31
- end
32
-
33
- def is_present?(some_path)
34
- File.exists?(potential_file(some_path))
35
- end
36
-
37
- def potential_file(some_path)
38
- File.join(some_path, Rdm::SOURCE_FILENAME)
39
- end
40
- end
41
- end
@@ -1,121 +0,0 @@
1
- require 'fileutils'
2
- require 'pathname'
3
- require "active_support/inflector"
4
-
5
-
6
- # http://stackoverflow.com/questions/8954706/render-an-erb-template-with-values-from-a-hash
7
- require 'erb'
8
- require 'ostruct'
9
- class ErbalT < OpenStruct
10
- def self.render(template, locals)
11
- self.new(locals).render(template)
12
- end
13
- def render(template)
14
- ERB.new(template).result(binding)
15
- end
16
- end
17
-
18
-
19
- class Rdm::PackageGenerator
20
- class << self
21
- def generate_package(current_dir, package_name, package_relative_path, skip_rspec = false)
22
- Rdm::PackageGenerator.new(
23
- current_dir, package_name, package_relative_path, skip_rspec
24
- ).create
25
- end
26
- end
27
-
28
- attr_accessor :current_dir, :package_name, :package_relative_path, :skip_rspec
29
- def initialize(current_dir, package_name, package_relative_path, skip_rspec = false)
30
- @current_dir = current_dir
31
- @package_name = package_name
32
- @package_relative_path = package_relative_path
33
- @skip_rspec = skip_rspec
34
- end
35
-
36
- def rdm_source
37
- @rdm_source ||= Rdm::SourceParser.parse(source_content)
38
- end
39
- def source_path
40
- File.join(current_dir, Rdm::SOURCE_FILENAME)
41
- end
42
- def source_content
43
- File.open(source_path).read
44
- end
45
-
46
- def create
47
- check_preconditions!
48
- package_subdir_name = Rdm.settings.send(:package_subdir_name)
49
-
50
- Dir.chdir(current_dir) do
51
- ensure_file([package_relative_path, '.gitignore'])
52
- ensure_file([package_relative_path, package_subdir_name, package_name, '.gitignore'])
53
- ensure_file(
54
- [package_relative_path, package_subdir_name, "#{package_name}.rb"],
55
- template_content("main_module_file.rb.erb", {package_name_camelized: package_name.camelize})
56
- )
57
- ensure_file(
58
- [package_relative_path, 'Package.rb'],
59
- template_content("package.rb.erb", {package_name: package_name})
60
- )
61
- if !skip_rspec
62
- init_rspec
63
- end
64
- end
65
-
66
- move_templates
67
- append_package_to_rdm_packages
68
- end
69
-
70
- def check_preconditions!
71
- if Dir.exist?(File.join(current_dir, package_relative_path))
72
- raise Rdm::Errors::PackageDirExists, "package dir exists"
73
- end
74
-
75
- if rdm_source.package_paths.include?(package_relative_path)
76
- raise Rdm::Errors::PackageExists, "package exists"
77
- end
78
- end
79
-
80
- def append_package_to_rdm_packages
81
- new_source_content = source_content + "\npackage '#{package_relative_path}'"
82
- File.write(source_path, new_source_content)
83
- end
84
-
85
- def init_rspec
86
- FileUtils.cd(File.join(package_relative_path)) do
87
- system('rspec --init')
88
- end
89
- end
90
-
91
- def move_templates
92
- Dir.chdir(File.join(File.dirname(__FILE__), "templates")) do
93
- copy_template(".rspec")
94
- copy_template(".gitignore")
95
- copy_template("spec/spec_helper.rb")
96
- copy_template("bin/console_irb", "bin/console")
97
- end
98
- end
99
-
100
- private
101
- def ensure_file(path_array, content="")
102
- filename = File.join(*path_array)
103
- FileUtils.mkdir_p(File.dirname(filename))
104
- File.write(filename, content)
105
- end
106
-
107
- def copy_template(filepath, target_name=nil)
108
- from = filepath
109
- target_name ||= filepath
110
- to = File.join(current_dir, package_relative_path, target_name)
111
- FileUtils.mkdir_p(File.dirname(to))
112
- # copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
113
- FileUtils.copy_entry(from, to, true, false, true)
114
- end
115
-
116
- def template_content(file, locals={})
117
- template_path = Pathname.new(File.join(File.dirname(__FILE__), "templates")).join(file)
118
- template_content = File.read(template_path)
119
- ErbalT.render(template_content, locals)
120
- end
121
- end
@@ -1,35 +0,0 @@
1
- class Rdm::SourceInstaller
2
- class << self
3
- # Install source by locking all it's specs
4
- def install(source_path)
5
- source_content = File.open(source_path).read
6
- source_parser.parse(source_content).package_paths.each do |package_path|
7
- full_path = File.join(File.dirname(source_path), package_path, Rdm::PACKAGE_FILENAME)
8
- lock(full_path, source_path: source_path, package_path: package_path)
9
- end
10
- end
11
-
12
- # Lock package on installation
13
- def lock(full_package_path, source_path:, package_path:)
14
- package_content = File.open(full_package_path).read
15
-
16
- locked = "source \"#{source_path}\"\r\n\r\n"
17
- locked += package_content
18
-
19
- lock_file = "#{full_package_path}.lock"
20
-
21
- return if File.exist?(lock_file) && File.read(lock_file) == locked
22
-
23
- File.open(lock_file, "w+") do |file|
24
- file.write(locked)
25
- end
26
- rescue Errno::ENOENT
27
- puts "Can't find package: #{package_path}"
28
- end
29
-
30
- private
31
- def source_parser
32
- Rdm::SourceParser
33
- end
34
- end
35
- end
@@ -1 +0,0 @@
1
- Package.rb.lock