yesman 0.0.4 → 0.0.5

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