yesman 0.0.4 → 0.0.5

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.
data/bin/yesman CHANGED
@@ -14,7 +14,7 @@ def new_project
14
14
  parser.run ARGV
15
15
  parser.config[:project_name] = project_name
16
16
 
17
- y = Yesman.new parser.config
17
+ y = Yesman::Yesman.new parser.config
18
18
  end
19
19
 
20
20
  def run_project
@@ -40,7 +40,7 @@ def generate
40
40
  c = ConfigProxy.new
41
41
  if (c.config_exists?)
42
42
  info = ARGV.shift
43
- g = ClassGenerator.new
43
+ g = FileGenerator.new
44
44
  puts "Creating #{info}"
45
45
  g.create_class_files info
46
46
  else
@@ -3,6 +3,7 @@ require 'yesman/file_util'
3
3
  require 'yesman/gtest_installer'
4
4
  require 'yesman/logger'
5
5
 
6
+ module Yesman
6
7
  class Yesman
7
8
  attr_reader :params
8
9
 
@@ -43,3 +44,4 @@ class Yesman
43
44
  end
44
45
 
45
46
  end
47
+ end
@@ -1,6 +1,6 @@
1
1
  require 'yesman/file_util'
2
2
  require 'yesman/logger'
3
- require 'yesman/class_generator'
3
+ require 'yesman/file_generator'
4
4
 
5
5
  class CppCreator
6
6
  attr_reader :source
@@ -11,7 +11,7 @@ class CppCreator
11
11
 
12
12
  def initialize(params = {})
13
13
  set_defaults params
14
- @gen = ClassGenerator.new
14
+ @gen = FileGenerator.new
15
15
  @log = Logger.new
16
16
  end
17
17
 
@@ -19,6 +19,7 @@ class CppCreator
19
19
  create_dirs
20
20
  create_source_main
21
21
  create_test_main
22
+ create_build_file
22
23
  end
23
24
 
24
25
  private
@@ -46,4 +47,8 @@ private
46
47
  def create_test_main
47
48
  @gen.create_gtest_main
48
49
  end
50
+
51
+ def create_build_file
52
+ @gen.create_build_file
53
+ end
49
54
  end
@@ -3,8 +3,9 @@ require 'yesman/templater'
3
3
  require 'yesman/file_util'
4
4
  require 'yesman/config_proxy'
5
5
  require 'yesman/logger'
6
+ require 'yesman/rake_gen_data'
6
7
 
7
- class ClassGenerator
8
+ class FileGenerator
8
9
 
9
10
  attr_reader :templates_path
10
11
  attr_reader :header_path
@@ -12,6 +13,7 @@ class ClassGenerator
12
13
  attr_reader :test_path
13
14
  attr_reader :main_path
14
15
  attr_reader :gtest_main_path
16
+ attr_reader :rake_file_path
15
17
 
16
18
  def initialize
17
19
  @templates_path = "#{Dir.home}/.yesman/templates/"
@@ -20,6 +22,7 @@ class ClassGenerator
20
22
  @test_path = create_path "test.cxx.erb"
21
23
  @main_path = create_path "main.cxx.erb"
22
24
  @gtest_main_path = create_path "gtest_main.cxx.erb"
25
+ @rake_file_path = create_path "rakefile.erb"
23
26
 
24
27
  @templater = Templater.new
25
28
  @log = Logger.new
@@ -52,6 +55,14 @@ class ClassGenerator
52
55
  @log.log_creation "created", file_path
53
56
  end
54
57
 
58
+ def create_build_file
59
+ rake_data = RakeGenData.new
60
+ file_contents = @templater.merge rake_data, rake_file_path
61
+ file_path = "Rakefile"
62
+ FileUtil.write_to_file file_path, file_contents
63
+ @log.log_creation "created", file_path
64
+ end
65
+
55
66
  private
56
67
 
57
68
 
@@ -1,3 +1,6 @@
1
+ require 'yesman/version'
2
+ require 'versionomy'
3
+
1
4
  class GlobalConfig
2
5
  attr_reader :pre_existing
3
6
  attr_reader :global_config_path
@@ -12,19 +15,34 @@ class GlobalConfig
12
15
 
13
16
  if !pre_existing
14
17
  puts "Copying file templates to #{global_config_path}"
15
- copy_templates
16
- create_global_config
18
+ copy_all
19
+ elsif old_version?
20
+ FileUtil.clear_directory global_config_path
21
+ copy_all
17
22
  end
18
23
  end
19
24
 
20
25
  private
21
26
 
27
+ def copy_all
28
+ copy_templates
29
+ create_version_file
30
+ create_global_config
31
+ end
32
+
33
+
22
34
  def copy_templates
23
35
  FileUtil.ensure_path "#{global_config_path}/templates"
24
36
  templates = File.join(File.dirname(File.expand_path(__FILE__)), 'templates');
25
37
  FileUtil.recursive_copy(templates, global_config_path)
26
38
  end
27
39
 
40
+ def create_version_file
41
+ file_path = "#{global_config_path}/version"
42
+ FileUtil.ensure_file file_path
43
+ FileUtil.write_to_file file_path, Yesman::VERSION
44
+ end
45
+
28
46
  def create_global_config
29
47
  params = {};
30
48
  params[:source] = "src"
@@ -38,5 +56,22 @@ class GlobalConfig
38
56
  def ensure_config_dir
39
57
  @pre_existing = FileUtil.ensure_path global_config_path
40
58
  end
59
+
60
+ def old_version?
61
+ old = false;
62
+ version_path = "#{global_config_path}/version"
63
+ if !File.exists? version_path
64
+ old = true
65
+ else
66
+ sys_version = Versionomy.parse( File.read( version_path ).to_s )
67
+ current_version = Versionomy.parse ( Yesman::VERSION )
68
+ if sys_version < Yesman::VERSION
69
+
70
+ puts "Current global yesman version: #{sys_version}, re-writting globals"
71
+ old = true
72
+ end
73
+ end
74
+ old
75
+ end
41
76
 
42
77
  end
@@ -0,0 +1,27 @@
1
+ require 'yesman/config_proxy'
2
+ require 'erb'
3
+
4
+ class RakeGenData
5
+
6
+ attr_reader :source_dir
7
+ attr_reader :test_dir
8
+ attr_reader :output_dir
9
+ attr_reader :project_name
10
+ attr_reader :extension
11
+
12
+ def initialize(args = {})
13
+ params = ConfigProxy.new.params
14
+ @source_dir = params[:source]
15
+ @test_dir = params[:tests]
16
+ @output_dir = params[:output]
17
+ @project_name = params[:project_name]
18
+ @extension = params[:extension]
19
+ end
20
+
21
+
22
+ def get_binding
23
+ binding
24
+ end
25
+
26
+
27
+ end
@@ -0,0 +1,89 @@
1
+ SRC = FileList['<%=source_dir %>/*.<%=extension%>']
2
+ OBJ = SRC.ext('o');
3
+
4
+ TESTS = FileList['<%=test_dir %>/*.<%=extension %>']
5
+ TESTS.include('<%=source_dir %>/*.<%=extension%>')
6
+ TESTS.exclude('<%=source_dir %>/<%=project_name%>.<%=extension%>')
7
+ TOBJ = TESTS.ext('o')
8
+
9
+ namespace "main" do
10
+
11
+ desc "Compile main application"
12
+ task :compile => [ "<%=output_dir%>/<%=source_dir%>", :reset, "main"]
13
+
14
+ task :show do |t|
15
+ OBJ.each { |o| puts o }
16
+ end
17
+
18
+ task :reset do |t|
19
+ OBJ.gsub!(/<%=source_dir%>/, "<%=output_dir%>/<%=source_dir%>")
20
+ end
21
+
22
+ directory "<%=output_dir%>/<%=source_dir%>"
23
+
24
+ file "main" => OBJ do
25
+ sh "g++ -o <%=output_dir%>/main #{OBJ}"
26
+ end
27
+
28
+ desc "Run main application"
29
+ task :run do |t|
30
+ puts "Running source..."
31
+ sh "clear"
32
+ sh "./<%=output_dir%>/main"
33
+ end
34
+
35
+ desc "Build & Run main application"
36
+ task :build => [:compile]
37
+ task :build => [:run]
38
+ task :build
39
+
40
+ end
41
+
42
+ namespace "tests" do
43
+
44
+ desc "Compile all tests"
45
+ task :compile => [ "<%=output_dir %>/<%=test_dir%>", "<%= output_dir%>/<%=source_dir %>", :reset, "test_runner"]
46
+
47
+ task :show do |t|
48
+ TOBJ.each { |o| puts o }
49
+ end
50
+
51
+ task :reset do |t|
52
+ TOBJ.gsub!(/<%=test_dir%>/, "<%=output_dir%>/<%=test_dir%>")
53
+ TOBJ.gsub!(/<%= source_dir %>/, "<%= output_dir %>/<%=source_dir%>")
54
+ end
55
+
56
+ directory "<%=output_dir%>/<%=test_dir%>"
57
+ directory "<%=output_dir%>/<%=source_dir%>"
58
+
59
+ file "test_runner" => TOBJ do
60
+ sh "g++ -o <%=output_dir%>/test_runner #{TOBJ} -I<%=test_dir%>/gtest/include <%=test_dir%>/gtest/libgtest.a"
61
+ end
62
+
63
+ desc "Run test suite"
64
+ task :run do |t|
65
+ puts "Running tests..."
66
+ sh "clear"
67
+ sh "./<%=output_dir%>/test_runner"
68
+ end
69
+
70
+ desc "Build & Run all tests"
71
+ task :build => [:compile]
72
+ task :build => [:run]
73
+ task :build
74
+
75
+ rule '.o' => '.<%=extension%>' do |t|
76
+ sh "g++ #{t.source} -c -o <%=output_dir%>/#{t.name} -I<%=test_dir%>/gtest/include"
77
+ end
78
+
79
+ end
80
+
81
+ rule '.o' => '.<%=extension%>' do |t|
82
+ sh "g++ #{t.source} -c -o <%=output_dir%>/#{t.name}"
83
+ end
84
+
85
+ # Insert your file dependencies here:
86
+ # file 'FileName.o' =>[ 'FileName.c', 'Header.h', 'OtherHeader.h' ]
87
+ #
88
+ # OR include them from another file like so:
89
+ # import "your_file"
@@ -1,3 +1,3 @@
1
1
  module Yesman
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -12,8 +12,9 @@ Gem::Specification.new do |gem|
12
12
  gem.summary = %q{Yesman creates project directory structures, downloads and builds GTest for C++ development projects}
13
13
  gem.homepage = ""
14
14
 
15
- gem.add_dependency 'mixlib-cli'
16
- gem.add_dependency 'paint'
15
+ gem.add_dependency 'mixlib-cli', '~> 1.2.2'
16
+ gem.add_dependency 'paint', '~> 0.8.5'
17
+ gem.add_dependency 'versionomy', '~> 0.4.4'
17
18
 
18
19
  gem.files = `git ls-files`.split($/)
19
20
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yesman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,40 +9,56 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-27 00:00:00.000000000 Z
12
+ date: 2013-01-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mixlib-cli
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ! '>='
19
+ - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: '0'
21
+ version: 1.2.2
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - ! '>='
27
+ - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: '0'
29
+ version: 1.2.2
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: paint
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
- - - ! '>='
35
+ - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: '0'
37
+ version: 0.8.5
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
- - - ! '>='
43
+ - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: '0'
45
+ version: 0.8.5
46
+ - !ruby/object:Gem::Dependency
47
+ name: versionomy
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 0.4.4
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.4.4
46
62
  description: CLI for quick creation of C++ projects using GTest
47
63
  email:
48
64
  - knomedia@gmail.com
@@ -58,20 +74,22 @@ files:
58
74
  - Rakefile
59
75
  - bin/yesman
60
76
  - lib/yesman.rb
61
- - lib/yesman/class_generator.rb
62
77
  - lib/yesman/class_type.rb
63
78
  - lib/yesman/cli_parser.rb
64
79
  - lib/yesman/config_proxy.rb
65
80
  - lib/yesman/cpp_creator.rb
81
+ - lib/yesman/file_generator.rb
66
82
  - lib/yesman/file_util.rb
67
83
  - lib/yesman/global_config.rb
68
84
  - lib/yesman/gtest_installer.rb
69
85
  - lib/yesman/logger.rb
86
+ - lib/yesman/rake_gen_data.rb
70
87
  - lib/yesman/templater.rb
71
88
  - lib/yesman/templates/class.cxx.erb
72
89
  - lib/yesman/templates/gtest_main.cxx.erb
73
90
  - lib/yesman/templates/header.cxx.erb
74
91
  - lib/yesman/templates/main.cxx.erb
92
+ - lib/yesman/templates/rakefile.erb
75
93
  - lib/yesman/templates/test.cxx.erb
76
94
  - lib/yesman/version.rb
77
95
  - spec/class_type_spec.rb