flak 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.
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