Module: Rake::DevEiate::Generate

Defined in:
lib/rake/deveiate/generate.rb

Overview

Project-file generation tasks

Constant Summary collapse

RAKEFILE_TEMPLATE =

Template files

'Rakefile.erb'
README_TEMPLATE =
'README.erb'
HISTORY_TEMPLATE =
'History.erb'
RUBY_VERSION_FILE =

RVM metadata files

Rake::DevEiate::PROJECT_DIR + '.ruby-version'
GEMSET_FILE =
Rake::DevEiate::PROJECT_DIR + '.ruby-gemset'
FILE_CREATION_FLAGS =

Flags to use when opening a file for generation

File::WRONLY | File::CREAT | File::EXCL

Instance Method Summary collapse

Instance Method Details

#define_tasksObject

Define generation tasks.



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/rake/deveiate/generate.rb', line 28

def define_tasks
	super if defined?( super )

	file( self.rakefile.to_s )
	file( self.readme_file.to_s )
	file( self.history_file.to_s )
	file( self.manifest_file.to_s )
	file( RUBY_VERSION_FILE.to_s )
	file( GEMSET_FILE.to_s )

	task( self.rakefile, &method(:do_generate_rakefile) )
	task( self.readme_file, &method(:do_generate_readme_file) )
	task( self.history_file, &method(:do_generate_history_file) )
	task( self.manifest_file, &method(:do_generate_manifest_file) )
	task( RUBY_VERSION_FILE, &method(:do_generate_ruby_version_file) )
	task( GEMSET_FILE, &method(:do_generate_gemset_file) )

	desc "Generate any missing project files."
	task :generate => [
		self.rakefile,
		self.readme_file,
		self.history_file,
		self.manifest_file,
		RUBY_VERSION_FILE,
		GEMSET_FILE,
	]

	# Abstract named tasks; mostly for invoking programmatically
	namespace :generate do

		desc "Generate a Rakefile"
		task :rakefile => self.rakefile

		desc "Generate a %s file" % [ self.readme_file ]
		task :readme => self.readme_file

		desc "Generate a %s file" % [ self.history_file ]
		task :history_file => self.history_file

		desc "Generate a %s file" % [ self.manifest_file ]
		task :manifest => self.manifest_file

		desc "Generate a %s file" % [ RUBY_VERSION_FILE ]
		task :ruby_version_file => RUBY_VERSION_FILE

		desc "Generate a %s file" % [ GEMSET_FILE ]
		task :gemset_file => GEMSET_FILE
	end

	desc "Diff the manifest file against the default set of project files."
	task( :diff_manifest, &method(:do_diff_manifest) )
end

#do_diff_manifest(task, args) ⇒ Object

Task body for the ‘diff_manifest` task



129
130
131
132
133
134
135
136
137
138
# File 'lib/rake/deveiate/generate.rb', line 129

def do_diff_manifest( task, args )
	Tempfile.open( ['Manifest','.txt'], Rake::DevEiate::PROJECT_DIR ) do |io|
		file_list = self.default_manifest.select {|pn| File.file?(pn) }.sort

		io.puts( *file_list )
		io.flush

		sh 'diff', '-ub', self.manifest_file.to_s, io.path
	end
end

#do_generate_gemset_file(task, args) ⇒ Object

Generate a file that sets the project’s gemset



120
121
122
123
124
125
# File 'lib/rake/deveiate/generate.rb', line 120

def do_generate_gemset_file( task, args )
	self.prompt.ok "Generating #{task.name}..."
	File.open( task.name, FILE_CREATION_FLAGS, 0644, encoding: 'utf-8' ) do |io|
		io.puts( self.name )
	end
end

#do_generate_history_file(task, args) ⇒ Object

Generate a History file if one doesn’t already exist. Error if one does.



96
97
98
# File 'lib/rake/deveiate/generate.rb', line 96

def do_generate_history_file( task, args )
	self.generate_from_template( task.name, HISTORY_TEMPLATE )
end

#do_generate_manifest_file(task, args) ⇒ Object

Generate a manifest with a default set of files listed.



102
103
104
105
106
107
# File 'lib/rake/deveiate/generate.rb', line 102

def do_generate_manifest_file( task, args )
	self.prompt.ok "Generating #{task.name}..."
	File.open( task.name, FILE_CREATION_FLAGS, 0644, encoding: 'utf-8' ) do |io|
		io.puts( *self.project_files )
	end
end

#do_generate_rakefile(task, args) ⇒ Object

Generate a Rakefile if one doesn’t already exist. Error if one does.



83
84
85
# File 'lib/rake/deveiate/generate.rb', line 83

def do_generate_rakefile( task, args )
	self.generate_from_template( task.name, RAKEFILE_TEMPLATE )
end

#do_generate_readme_file(task, args) ⇒ Object

Generate a README file if one doesn’t already exist. Error if one does.



89
90
91
# File 'lib/rake/deveiate/generate.rb', line 89

def do_generate_readme_file( task, args )
	self.generate_from_template( task.name, README_TEMPLATE )
end

#do_generate_ruby_version_file(task, args) ⇒ Object

Generate a file that sets the project’s working Ruby version.



111
112
113
114
115
116
# File 'lib/rake/deveiate/generate.rb', line 111

def do_generate_ruby_version_file( task, args )
	self.prompt.ok "Generating #{task.name}..."
	File.open( task.name, FILE_CREATION_FLAGS, 0644, encoding: 'utf-8' ) do |io|
		io.puts( RUBY_VERSION.sub(/\.\d+$/, '') )
	end
end

#generate_from_template(filename, template_path) ⇒ Object

Generate the given filename from the template filed at template_path.



142
143
144
145
146
147
148
# File 'lib/rake/deveiate/generate.rb', line 142

def generate_from_template( filename, template_path )
	self.prompt.ok "Generating #{filename}..."
	File.open( filename, FILE_CREATION_FLAGS, 0644, encoding: 'utf-8' ) do |io|
		result = self.load_and_render_template( template_path, filename )
		io.print( result )
	end
end