flak 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. data/.gitignore +1 -0
  2. data/.yardoc/checksums +28 -0
  3. data/.yardoc/objects/root.dat +0 -0
  4. data/.yardoc/proxy_types +0 -0
  5. data/.yardopts +1 -0
  6. data/Architecture.md +152 -0
  7. data/Documenting.md +2 -0
  8. data/MayaModules.md +2 -0
  9. data/README.md +173 -0
  10. data/flak.gemspec +6 -3
  11. data/lib/core_ext/hash.rb +82 -0
  12. data/lib/core_ext/string.rb +41 -0
  13. data/lib/flak.rb +20 -12
  14. data/lib/flak/rake/errors.rb +28 -0
  15. data/lib/flak/rake/file_actions.rb +70 -0
  16. data/lib/flak/rake/os.rb +18 -0
  17. data/lib/flak/rake/target.rb +47 -69
  18. data/lib/flak/rake/templates/cpp.rb +211 -0
  19. data/lib/flak/rake/templates/delight.rb +168 -0
  20. data/lib/flak/rake/templates/doc.rb +106 -0
  21. data/lib/flak/rake/templates/environment.rb +189 -0
  22. data/lib/flak/rake/templates/gl.rb +20 -0
  23. data/lib/flak/rake/templates/mac.rb +29 -0
  24. data/lib/flak/rake/templates/max.rb +22 -0
  25. data/lib/flak/rake/templates/maya.rb +172 -0
  26. data/lib/flak/rake/templates/maya_app.rb +97 -0
  27. data/lib/flak/rake/templates/maya_plugin.rb +93 -0
  28. data/lib/flak/rake/templates/merge_engine.rb +45 -0
  29. data/lib/flak/rake/templates/nuke.rb +60 -0
  30. data/lib/flak/rake/templates/release.rb +101 -0
  31. data/lib/flak/rake/templates/shell.rb +54 -0
  32. data/lib/flak/thor/cli.rb +5 -0
  33. data/lib/flak/thor/generate.rb +88 -144
  34. data/lib/flak/thor/target_file.rb +36 -17
  35. data/lib/flak/thor/templates/INSTALL.tt +3 -3
  36. data/lib/flak/thor/templates/Rakefile.tt +4 -2
  37. data/lib/flak/thor/templates/{cpp.tt → config/cpp.yml.tt} +6 -8
  38. data/lib/flak/thor/templates/{delight.tt → config/delight.yml.tt} +1 -1
  39. data/lib/flak/thor/templates/{doc.tt → config/doc.yml.tt} +0 -0
  40. data/lib/flak/thor/templates/{env.tt → config/environment.yml.tt} +6 -7
  41. data/lib/flak/thor/templates/{gl.tt → config/gl.yml.tt} +0 -0
  42. data/lib/flak/thor/templates/{mac.tt → config/mac.yml.tt} +0 -0
  43. data/lib/flak/thor/templates/{max.tt → config/max.yml.tt} +0 -0
  44. data/lib/flak/thor/templates/{maya.tt → config/maya.yml.tt} +9 -1
  45. data/lib/flak/thor/templates/{maya_app.tt → config/maya_app.yml.tt} +0 -2
  46. data/lib/flak/thor/templates/{maya_plugin.tt → config/maya_plugin.yml.tt} +0 -2
  47. data/lib/flak/thor/templates/config/nuke.yml.tt +3 -0
  48. data/lib/flak/thor/templates/config/release.yml.tt +3 -0
  49. data/lib/flak/thor/templates/config/shell.yml.tt +1 -0
  50. data/lib/flak/thor/templates/doc/content/install_guide.txt.tt +71 -25
  51. data/lib/flak/thor/templates/maya_plugin_cpp.tt +37 -0
  52. data/lib/flak/thor/templates/name_cpp.tt +6 -0
  53. data/lib/flak/thor/templates/name_h.tt +34 -0
  54. data/lib/flak/thor/templates/product.sh.tt +2 -2
  55. data/lib/flak/thor/wizard.rb +28 -15
  56. data/lib/flak/version.rb +1 -1
  57. data/target.jpg +0 -0
  58. metadata +127 -94
  59. data/README.textile +0 -59
  60. data/lib/flak/rake/base.rb +0 -316
  61. data/lib/flak/rake/cpp.rb +0 -139
  62. data/lib/flak/rake/delight.rb +0 -121
  63. data/lib/flak/rake/doc.rb +0 -69
  64. data/lib/flak/rake/gl.rb +0 -10
  65. data/lib/flak/rake/mac.rb +0 -23
  66. data/lib/flak/rake/max.rb +0 -29
  67. data/lib/flak/rake/maya.rb +0 -142
  68. data/lib/flak/rake/maya_app.rb +0 -45
  69. data/lib/flak/rake/maya_plugin.rb +0 -47
  70. data/lib/flak/rake/mod.rb +0 -46
  71. data/lib/flak/rake/nuke.rb +0 -29
  72. data/lib/flak/thor/templates/mod.tt +0 -0
  73. data/lib/flak/thor/templates/nuke.tt +0 -2
@@ -0,0 +1,60 @@
1
+ module Flak::Template
2
+
3
+ module Nuke
4
+
5
+ module Settings
6
+
7
+ extend Flak::Template::MergeEngine
8
+
9
+ def self.extended target
10
+ infuse target
11
+ end
12
+
13
+
14
+
15
+ def self.settings_modifications settings
16
+
17
+ bind = binding()
18
+ Flak::Errors.assert("settings[:os]", "String", bind,__FILE__)
19
+ Flak::Errors.assert("settings[:path_to_revision]", "String", bind,__FILE__)
20
+ Flak::Errors.assert("settings[:nuke_version]", "String", bind,__FILE__)
21
+
22
+
23
+ mods = Hash.new
24
+
25
+ case settings[:os]
26
+ when /linux_64/
27
+ mods[:nuke_location] = ""
28
+ when /darwin/
29
+ mods[:nuke_location] = "/Applications/Nuke#{settings[:nuke_version]}-32/Nuke#{settings[:nuke_version]}.app/Contents"
30
+ when /win_64/
31
+ mods[:nuke_location] = ""
32
+ end
33
+
34
+
35
+
36
+ msg = 'Problem creating mods[:nuke_release_path] from: settings[:path_to_revision],"nuke"'
37
+ mods[:nuke_release_path] = File.join(settings[:path_to_revision],"nuke" )
38
+
39
+
40
+ mods
41
+ end
42
+
43
+
44
+ end
45
+
46
+
47
+ module Tasks
48
+
49
+
50
+
51
+ end
52
+
53
+
54
+ end
55
+
56
+
57
+
58
+
59
+ end
60
+
@@ -0,0 +1,101 @@
1
+ module Flak::Template
2
+
3
+ module Release
4
+
5
+
6
+
7
+
8
+
9
+
10
+ module Settings
11
+
12
+ extend Flak::Template::MergeEngine
13
+
14
+ def self.extended target
15
+ infuse target
16
+ end
17
+
18
+
19
+ def release_script_destination(file)
20
+
21
+ bind = binding()
22
+ Flak::Errors.assert("@settings[:path_to_revision]", "String", bind,__FILE__)
23
+
24
+ File.join( @settings[:path_to_revision], 'bin', file.pathmap('%f').no_erb )
25
+ end
26
+
27
+
28
+
29
+ def tar_filename
30
+ bind = binding()
31
+ Flak::Errors.assert("@settings[:product_name]", "String", bind,__FILE__)
32
+ Flak::Errors.assert("@settings[:product_revision]", "String", bind,__FILE__)
33
+ Flak::Errors.assert("@settings[:os]", "String", bind,__FILE__)
34
+
35
+ n = "#{@settings[:product_name]}-#{@settings[:product_revision]}"
36
+ n += "-#{@settings[:os]}" unless @settings[:agnostic]
37
+ n += ".tar.gz"
38
+ n
39
+ end
40
+
41
+ def file_to_tar
42
+ bind = binding()
43
+ Flak::Errors.assert("@settings[:product_name]", "String", bind,__FILE__)
44
+ Flak::Errors.assert("@settings[:product_revision]", "String", bind,__FILE__)
45
+ Flak::Errors.assert("@settings[:os]", "String", bind,__FILE__)
46
+
47
+ n = "#{@settings[:product_name]}/#{@settings[:product_revision]}"
48
+ n += "-#{@settings[:os]}" unless @settings[:agnostic]
49
+ n
50
+ end
51
+
52
+ end
53
+
54
+
55
+
56
+
57
+
58
+ module Tasks
59
+
60
+ def self.extended target
61
+ task_factory target
62
+ end
63
+
64
+ def self.task_factory target
65
+ settings = target.settings
66
+
67
+
68
+ desc "Build everything"
69
+ task :build
70
+ CLEAN.include( File.dirname(settings[:build_directory]) )
71
+ CLOBBER.include( settings[:path_to_revision])
72
+
73
+ desc "Release everything"
74
+ task :default => ["release"]
75
+
76
+
77
+
78
+
79
+ desc "Build and tar up product to tar.gz."
80
+ task :tar => :release do
81
+ Dir.chdir( settings[:tools_directory] ) do |d|
82
+ sh "tar cfz #{target.tar_filename} #{target.file_to_tar}"
83
+ end
84
+ end
85
+
86
+
87
+
88
+
89
+ end
90
+
91
+ end
92
+
93
+
94
+ end
95
+
96
+
97
+
98
+
99
+
100
+ end
101
+
@@ -0,0 +1,54 @@
1
+ module Flak::Template
2
+
3
+ module Shell
4
+
5
+
6
+
7
+
8
+ module Settings
9
+
10
+ extend Flak::Template::MergeEngine
11
+
12
+ def self.extended target
13
+ infuse target
14
+ end
15
+
16
+
17
+
18
+
19
+ def shell_script_destination(file)
20
+ bind = binding()
21
+ Flak::Errors.assert("@settings[:path_to_revision]", "String", bind,__FILE__)
22
+
23
+ File.join(@settings[:path_to_revision], 'bin', file.pathmap('%f'))
24
+ end
25
+
26
+
27
+ end
28
+
29
+
30
+
31
+
32
+ module Tasks
33
+
34
+ def self.extended target
35
+ task_factory target
36
+ end
37
+
38
+ def self.task_factory target
39
+ settings = target.settings
40
+
41
+ end
42
+
43
+ end
44
+
45
+
46
+
47
+
48
+ end
49
+
50
+
51
+
52
+
53
+ end
54
+
data/lib/flak/thor/cli.rb CHANGED
@@ -1,7 +1,12 @@
1
1
 
2
2
  module Flak
3
+
4
+
5
+ # Registers generate as a flak task
3
6
  class CLI < Thor
4
7
  map "g" => :generate
5
8
  register(Generate, 'generate', 'generate <something>', 'Type flak generate for more help.')
6
9
  end
10
+
11
+
7
12
  end
@@ -1,210 +1,154 @@
1
1
  module Flak
2
2
 
3
+
4
+
5
+ # Thor tasks that generate files
3
6
  class Generate < Thor
4
7
 
5
8
  include Thor::Actions
6
9
 
7
10
  attr_accessor :name, :tool_options, :project_options
8
-
9
-
10
-
11
- # PROJECT
12
-
13
- TEMPLATES = ["env", "cpp", "delight","gl","mac","maya","maya_app","maya_plugin", "nuke", "doc", "mod"]
14
-
15
- MAYA_PLUGIN_TEMPLATES = ["cpp", "gl","maya","maya_plugin"]
16
-
17
- MAYA_APP_TEMPLATES = ["cpp", "gl","maya","maya_app"]
18
-
19
-
11
+
12
+ # Provide source_root so that templates can be found
20
13
  def self.source_root
21
14
  File.join(File.dirname(__FILE__), "templates")
22
15
  end
23
16
 
24
- no_tasks do
25
17
 
18
+ no_tasks do
19
+
20
+ # Get project options from a wizard and cache them
26
21
  def project_options
27
22
  @project_options ||= Flak::Wizard.project_options
28
23
  end
29
-
24
+
25
+ # Get tool options from a wizard and cache them
30
26
  def tool_options
31
27
  @tool_options ||= Flak::Wizard.tool_options
32
28
  end
33
-
34
29
  end
35
30
 
31
+
36
32
  desc "project [name]", "Create a project"
37
33
  map "p" => :project
34
+ # The project subcommand. Called with: flak generate project <name>.
35
+ # Creates a flak project and populates it with files as specified by the users answers to the project wizard.
38
36
  def project(name)
39
37
  empty_directory(name)
40
38
  inside name do
41
- # g = GenerateProject.new(name)
42
- # g.configure
43
- invoke :config
44
- end
39
+ invoke :config
40
+ end
45
41
  end
46
42
 
47
- desc "config [name]", "Makes all config and project based files"
43
+
44
+ desc "config [name]", "Create config files in a project"
45
+ map "c" => :config
46
+ # The config subcommand. Called with: flak generate config <name>.
47
+ # This is the same as the project subcommand, except it works from inside an existing project.
48
48
  def config(name)
49
49
  opts = self.project_options
50
- self.name= name
50
+ self.name = name
51
51
  empty_directory("build")
52
52
  directory("doc")
53
+ directory("config")
53
54
 
54
- template( "product.mel.tt" , "config/script/maya/erb/#{name}.mel.erb" )
55
- template( "INSTALL.tt" , "config/script/shell/erb/INSTALL_#{name.upcase}.erb")
56
- template( "product.sh.tt" , "config/script/shell/#{name}.sh" )
55
+ template( "product.mel.tt" , "script/maya/erb/#{name}.mel.erb" ) if opts[:maya_module]
56
+ template( "INSTALL.tt" , "script/shell/erb/INSTALL_#{name.upcase}.erb")
57
+ template( "product.sh.tt" , "script/shell/#{name}.sh" )
57
58
 
58
- create_file "target.yml" do
59
+ create_file "project.yml" do
59
60
  Flak::TargetFile.project(name,opts)
60
61
  end
61
62
 
62
- # templates
63
- TEMPLATES.each do |t|
64
- template("#{t}.tt", "config/#{t}.yml")
65
- end
66
-
67
63
  # rakefile
68
64
  copy_file "Rakefile.tt", "Rakefile.rb"
69
65
  copy_file "gitignore.tt", ".gitignore"
70
66
  end
71
67
 
72
-
73
-
74
-
75
- ##########################################################################
76
- ############################### T O O L ##################################
77
- ##########################################################################
78
68
 
79
69
 
80
- desc "tool [name]", "Make a tool"
81
- #method_options %w( maya_script -s) => :boolean, %w( maya_app -a) => :boolean, %w( maya_plugin -p) => :boolean
70
+
71
+ desc "tool [name]", "Create a tool"
82
72
  map "t" => :tool
73
+ # The tool subcommand. Called with: flak generate tool <name>.
74
+ # Creates a tool inside a flak project and populates it with files as specified by the users answers to the tool wizard.
83
75
  def tool(name)
84
-
85
76
  opts = self.tool_options
86
77
  self.name= name
87
-
88
-
89
- create_file "#{name}/target.yml" do
78
+ create_file "#{name}/tool.yml" do
90
79
  Flak::TargetFile.tool(name,opts)
91
80
  end
81
+ create_common_files
82
+ create_maya_script_tree if opts[:maya_scripts]
83
+ create_nuke_script_tree if opts[:nuke_scripts]
84
+ create_shell_script_tree if opts[:shell_scripts]
85
+ create_maya_plugin_files if opts[:maya_plugin_target]
86
+ create_app_files if opts[:maya_app_target] || opts[:standalone_target]
87
+ create_delight_tools_tree if opts[:delight_target]
92
88
 
93
- inside name, :verbose => true do
94
- invoke :create_common_files
95
- invoke :create_maya_script_tree
96
- invoke :create_nuke_script_tree
97
- invoke :create_shell_script_tree
98
- invoke :create_maya_plugin_files if opts[:maya_plugin_target]
99
- invoke :create_maya_app_files if opts[:maya_app_target]
100
- invoke :create_nuke_plugin_files if opts[:nuke_target]
101
- invoke :create_delight_tools_trsee if opts[:delight_target]
102
- end
103
- #end
104
89
  end
105
90
 
106
- #####################################
107
- desc "create_maya_plugin_files [name]", "Makes files needed for Maya plugin development"
108
- def create_maya_plugin_files(name)
109
- invoke :create_maya_app_files
110
- create_file "src/plugin.cpp"
111
- end
112
- #####################################
113
-
114
- #####################################
115
- desc "maya_app_tool [name]", "Makes tool files needed for Maya app development"
116
- def create_maya_app_files(name)
117
- # invoke :create_maya_tree
118
- create_file "src/#{name}.cpp"
119
- create_file "src/#{name}.h"
120
- end
121
- #####################################
122
-
123
- #####################################
124
- desc "create_nuke_tree [name]", "Makes tool files needed for nuke development"
125
- def create_nuke_plugin_files(name)
126
- create_file "src/#{name}.cpp"
127
- create_file "src/#{name}.h"
128
- end
129
- #####################################
130
-
131
- #####################################
132
- desc "create_delight_tree [name]", "Makes tool files needed for delight development"
133
- def create_delight_tools_tree(name)
134
- empty_directory('delight/shader/include')
135
- empty_directory('delight/shader/light')
136
- empty_directory('delight/shader/surface')
137
- empty_directory('delight/shader/displacement')
138
- empty_directory('delight/shader/atmosphere')
139
- empty_directory('delight/shader/interior')
140
- empty_directory('delight/dso')
141
- empty_directory('delight/filter')
142
- end
143
- #####################################
144
-
145
- #####################################
146
- desc "create_common_files [name]", "Makes files that will be in every tool"
147
- def create_common_files(name)
148
- empty_directory('examples')
149
- create_file "README.md"
150
- create_file "LICENSE.md"
151
- create_file "INSTALL.md"
152
- end
153
- #####################################
91
+ no_tasks do
154
92
 
155
- #####################################
156
- desc "create_maya_script_tree [name]", "Makes tool files needed for Maya script development"
157
- def create_maya_script_tree(name)
158
- self.name= name
159
- empty_directory("maya/script/plugin")
160
- empty_directory("maya/icons/node")
161
- template("init.mel.tt", "maya/script/#{name}.init.mel")
162
- end
163
- #####################################
164
-
165
- #####################################
166
- desc "create_nuke_script_tree [name]", "Makes tool files needed for nuke development"
167
- def create_nuke_script_tree(name)
168
- empty_directory('nuke/gizmo')
169
- empty_directory('nuke/python')
170
- empty_directory('nuke/scenes')
171
- end
172
- #####################################
93
+ #desc "create_maya_plugin_files [name]", "Makes files needed for Maya plugin development"
94
+ def create_maya_plugin_files
95
+ create_app_files
96
+ template("maya_plugin_cpp.tt", "#{name}/src/plugin.cpp")
97
+ end
173
98
 
174
- #####################################
175
- desc "create_shell_script_tree [name]", "Makes tool files needed for shell script development"
176
- def create_shell_script_tree(name)
177
- empty_directory('shell/script')
178
- end
179
- #####################################
180
99
 
181
- ##########################################################################
182
- ############################### D O C ####################################
183
- ##########################################################################
100
+ #desc "maya_app_tool [name]", "Makes tool files needed for Maya app development"
101
+ def create_app_files
102
+ template("name_cpp.tt", "#{name}/src/#{name}.cpp")
103
+ template("name_h.tt", "#{name}/src/#{name}.h" )
104
+ end
184
105
 
185
- desc "tutorial [name]", "Create a tutorial"
186
- map "u" => :tutorial
187
- def tutorial(name)
188
- template("tutorial.txt.tt", "doc/content/#{name}_tutorial.txt")
189
- end
190
106
 
191
107
 
192
- desc "install [name]", "Create a new install file"
193
- map "i" => :install
194
- def install(name)
195
- opts = self.project_options
196
- self.name= name
197
- template( "INSTALL.tt" , "config/script/shell/erb/INSTALL_#{name.upcase}.erb")
198
- end
199
108
 
200
-
109
+ #desc "create_delight_tree [name]", "Makes tool files needed for delight development"
110
+ def create_delight_tools_tree
111
+ empty_directory("#{name}/delight/shader/include")
112
+ empty_directory("#{name}/delight/shader/light")
113
+ empty_directory("#{name}/delight/shader/surface")
114
+ empty_directory("#{name}/delight/shader/displacement")
115
+ empty_directory("#{name}/delight/shader/atmosphere")
116
+ empty_directory("#{name}/delight/shader/interior")
117
+ empty_directory("#{name}/delight/dso")
118
+ empty_directory("#{name}/delight/filter")
119
+ end
201
120
 
121
+ #desc "create_common_files [name]", "Makes files that will be in every tool"
122
+ def create_common_files
123
+ empty_directory("#{name}/examples")
124
+ create_file "#{name}/README"
125
+ create_file "#{name}/LICENSE"
126
+ # create_file "INSTALL.md"
127
+ end
128
+
129
+ #desc "create_maya_script_tree [name]", "Makes tool files needed for Maya script development"
130
+ def create_maya_script_tree
131
+ # self.name= name
132
+ empty_directory("#{name}/maya/script/plugin")
133
+ empty_directory("#{name}/maya/icons/node")
134
+ template("init.mel.tt", "#{name}/maya/script/#{name}.init.mel")
135
+ end
202
136
 
137
+ #desc "create_nuke_script_tree [name]", "Makes tool files needed for nuke development"
138
+ def create_nuke_script_tree
139
+ empty_directory("#{name}/nuke/gizmo")
140
+ empty_directory("#{name}/nuke/python")
141
+ empty_directory("#{name}/nuke/scenes")
142
+ end
203
143
 
204
- ##########################################################################
205
- ############################### B A N N E R ##############################
206
- ##########################################################################
144
+ #desc "create_shell_script_tree [name]", "Makes tool files needed for shell script development"
145
+ def create_shell_script_tree
146
+ empty_directory("#{name}/shell/script")
147
+ end
148
+ end
207
149
 
150
+ # Format the help line so it reads flak generate something name,
151
+ # as opposed to flak generate:something name.
208
152
  def self.banner(task, namespace = false, subcommand = true)
209
153
  task.formatted_usage(self, true, subcommand).split(':').join(' ')
210
154
  end