rake-deveiate 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f2ea1b2c13c4a64b66b4f9f70ed3fa8c253e38b8070fbbc2c9b6e2e05b2a34c2
4
- data.tar.gz: 5d151b30f0a6e0f4e2ec550ef2fbb74981f3bba2c89561a2dc32ac52afea864a
3
+ metadata.gz: c82c9f76fc2792d7c73c6343234fa7bf2ddd898e16f6fd5bcf5889e3e1a2b3e8
4
+ data.tar.gz: d12fa1ea8df3bfab3cde2d3ba5b51c0d7e3a194a33e57987fcc8ab42fa453c44
5
5
  SHA512:
6
- metadata.gz: '08c1efed49f74b109300bb0362fa319faa49c3e4d0ba3191c48da5c4e49364ee559da560ab4fa3fb0081829e452c51981527763459972d5099a9ea08d0266b60'
7
- data.tar.gz: 901f6960dbcc3d70a834dcb408f402c5ce298f9413fc1fe5acfe088d6f5439f5aa97031bec3fc4df5471bcde057b935340f27c2dd834566bc72974f1002160e3
6
+ metadata.gz: 9b48f19a65ff709311f5c0db3fc09db4c1cc66a9209f04c46f596e21f28f35fb70317c222044222486c0e4d36e72ecd3bc2ef9e7f1cd13f7c85ecf58d1ae0511
7
+ data.tar.gz: 2fc376b80482c3e48368c7f0e2f3df5ed9fcb5e2c9fcb1e1660c72f09fa4362f5a53f7c81b1a04f6679077b3e11e116bc3f22a2a7d1ae037452a6ba00ede92e4
Binary file
data.tar.gz.sig CHANGED
Binary file
data/History.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  ---
4
4
 
5
+ ## v0.12.0 [2020-03-04] Michael Granger <ged@FaerieMUD.org>
6
+
7
+ Improvements:
8
+
9
+ - Add fixup tasks, example global rakefile
10
+
11
+
5
12
  ## v0.11.0 [2020-02-26] Michael Granger <ged@FaerieMUD.org>
6
13
 
7
14
  Improvements:
@@ -0,0 +1,8 @@
1
+ # -*- ruby -*-
2
+ # frozen_string_literal: true
3
+
4
+ require 'rake/deveiate'
5
+
6
+
7
+ Rake::DevEiate.setup( '<%= project.name %>' )
8
+
@@ -0,0 +1,21 @@
1
+ # -*- ruby -*-
2
+ # frozen_string_literal: true
3
+
4
+ begin
5
+ require 'rake/deveiate'
6
+ rescue LoadError => err
7
+ msg = err.respond_to?( :full_message ) ?
8
+ err.full_message( highlight: true, order: :bottom ) :
9
+ err.message
10
+ warn "%p while loading rake-deveiate: %s" % [ err.class, msg ]
11
+ end
12
+
13
+
14
+ if defined?( Rake::DevEiate ) && !Rake::DevEiate.already_setup?
15
+ default_name = File.basename( Dir.pwd ).downcase
16
+
17
+ Rake::DevEiate.setup( default_name )
18
+
19
+ end
20
+
21
+
@@ -3,6 +3,7 @@
3
3
 
4
4
  require 'pathname'
5
5
  require 'etc'
6
+ require 'tempfile'
6
7
 
7
8
  begin
8
9
  gem 'rdoc'
@@ -34,7 +35,7 @@ class Rake::DevEiate < Rake::TaskLib
34
35
  VERSION_PATTERN = /VERSION\s*=\s*(?<quote>['"])(?<version>\d+(\.\d+){2}.*)\k<quote>/
35
36
 
36
37
  # The version of this library
37
- VERSION = '0.11.0'
38
+ VERSION = '0.12.0'
38
39
 
39
40
  # The server to release to by default
40
41
  DEFAULT_GEMSERVER = 'https://rubygems.org/'
@@ -126,12 +127,18 @@ class Rake::DevEiate < Rake::TaskLib
126
127
  end
127
128
 
128
129
 
130
+ ### Returns +true+ if Rake::DevEiate has already been set up.
131
+ def self::already_setup?
132
+ Rake::Task.task_defined?( 'deveiate' )
133
+ end
134
+
129
135
 
130
136
  ### Create the devEiate tasks for a gem with the given +name+.
131
137
  def initialize( name, **options, &block )
132
138
  @name = validate_gemname( name )
133
139
  @options = options
134
140
 
141
+ @rakefile = PROJECT_DIR + 'Rakefile'
135
142
  @manifest_file = DEFAULT_MANIFEST_FILE.dup
136
143
  @project_files = self.read_manifest
137
144
  @executables = self.find_executables
@@ -202,6 +209,10 @@ class Rake::DevEiate < Rake::TaskLib
202
209
  # The title of the library for things like docs, gemspec, etc.
203
210
  attr_accessor :title
204
211
 
212
+ ##
213
+ # The project's Rakefile
214
+ attr_pathname :rakefile
215
+
205
216
  ##
206
217
  # The file that will be the main page of documentation
207
218
  attr_pathname :readme_file
@@ -304,6 +315,13 @@ class Rake::DevEiate < Rake::TaskLib
304
315
 
305
316
  ### Set up a simple default task
306
317
  def define_default_tasks
318
+
319
+ # task used to indicate that rake-deveiate has already been setup once; for
320
+ # global rakefiles.
321
+ task :deveiate do
322
+ # no-op
323
+ end
324
+
307
325
  desc "The task that runs by default"
308
326
  task( :default => :spec )
309
327
 
@@ -631,9 +649,13 @@ class Rake::DevEiate < Rake::TaskLib
631
649
  case File.extname( filename )
632
650
  when '.md' then return '#'
633
651
  when '.rdoc' then return '='
634
- else
635
- raise "Don't know what header character is appropriate for %s" % [ filename ]
652
+ when ''
653
+ if filename == 'Rakefile'
654
+ return '#'
655
+ end
636
656
  end
657
+
658
+ raise "Don't know what header character is appropriate for %s" % [ filename ]
637
659
  end
638
660
 
639
661
 
@@ -661,6 +683,26 @@ class Rake::DevEiate < Rake::TaskLib
661
683
  end
662
684
 
663
685
 
686
+ ### Yield an IO to the block open to a file that will replace +filename+ if the
687
+ ### block returns successfully.
688
+ def write_replacement_file( filename, **opts )
689
+ path = Pathname( filename ).expand_path
690
+ mode = path.stat.mode
691
+ owner = path.stat.uid
692
+ group = path.stat.gid
693
+
694
+ tmpfile = Tempfile.create( path.basename.to_s, **opts ) do |fh|
695
+ yield( fh )
696
+
697
+ newfile = Pathname( fh.path ).expand_path
698
+ newfile.rename( path )
699
+
700
+ path.chown( owner, group )
701
+ path.chmod( mode )
702
+ end
703
+ end
704
+
705
+
664
706
  ### Output debugging information about documentation.
665
707
  def output_documentation_debugging
666
708
  summary = self.extract_summary
@@ -195,6 +195,6 @@ module Rake::DevEiate::Checks
195
195
  end
196
196
 
197
197
 
198
- end # module Rake::DevEiate::Docs
198
+ end # module Rake::DevEiate::Checks
199
199
 
200
200
 
@@ -0,0 +1,252 @@
1
+ # -*- ruby -*-
2
+ # frozen_string_literal: true
3
+
4
+ require 'rake'
5
+ require 'hglib'
6
+
7
+ require 'rake/deveiate' unless defined?( Rake::DevEiate )
8
+
9
+
10
+ # Fixup and conversion tasks
11
+ module Rake::DevEiate::Fixup
12
+ extend Rake::DSL
13
+
14
+
15
+ # Pattern for matching lines in the Manifest that shouldn't be there
16
+ MANIFEST_CRUFT_LINE = %r{
17
+ ^(?: # Match whole lines
18
+ changelog
19
+ )$
20
+ }xim
21
+
22
+ # Pathnames of Bundler-related files
23
+ BUNDLER_FILES = [
24
+ Rake::DevEiate::PROJECT_DIR + 'Gemfile',
25
+ Rake::DevEiate::PROJECT_DIR + 'Gemfile.lock',
26
+ Rake::DevEiate::PROJECT_DIR + 'Gemfile.devel',
27
+ Rake::DevEiate::PROJECT_DIR + 'Gemfile.devel.lock',
28
+ ]
29
+
30
+ # Pathnames of legacy dependency files
31
+ LEGACY_DEPSFILES = [
32
+ Rake::DevEiate::PROJECT_DIR + '.gems',
33
+ Rake::DevEiate::PROJECT_DIR + '.rvm.gems',
34
+ ]
35
+
36
+ # Gems to add to the 'development' group of the deps file
37
+ DEV_GEMDEPS = %w[
38
+ rake-deveiate
39
+ rdoc-generator-fivefish
40
+ ]
41
+
42
+
43
+ ### Define fixup tasks
44
+ def define_tasks
45
+ super if defined?( super )
46
+
47
+ self.define_hoe_fixup_tasks
48
+ end
49
+
50
+
51
+ ### Set up tasks that check for poor whitespace discipline
52
+ def define_hoe_fixup_tasks
53
+
54
+ desc "Perform various fixup tasks on the current project."
55
+ task :fixup => 'fixup:all'
56
+
57
+ namespace :fixup do
58
+
59
+ task :all => [
60
+ :rakefile,
61
+ :manifest,
62
+ :bundler,
63
+ :depsfiles,
64
+ ]
65
+
66
+ desc "Remove hoe from the Rakefile and re-generate it"
67
+ task :rakefile, &method( :do_fixup_rakefile )
68
+
69
+
70
+ desc "Clean up cruft from the manifest file"
71
+ task :manifest, &method( :do_fixup_manifest )
72
+
73
+
74
+ desc "Remove Bundler-related files"
75
+ task :bundler, &method( :do_fixup_bundler )
76
+
77
+
78
+ desc "Fix up dependencies file/s"
79
+ task :depsfiles, &method( :do_fixup_legacy_depsfiles )
80
+
81
+ end
82
+
83
+ task :fixup_debug, &method( :do_fixup_debug )
84
+ task :debug => :fixup_debug
85
+ end
86
+
87
+
88
+
89
+ ### Task function -- output debugging for fixup tasks.
90
+ def do_fixup_debug( task, args )
91
+ fixups = []
92
+
93
+ fixups << "De-hoeify the Rakefile" if self.rakefile_needs_hoe_fixup?
94
+ fixups << "Remove cruft from the manifest" if self.manifest_needs_fixup?
95
+ fixups << "Remove bundler files" if self.bundler_files_present?
96
+ fixups << "Convery legacy dependency files" if self.legacy_deps_files_present?
97
+
98
+ self.prompt.say( "Fixups available:", color: :bright_green )
99
+
100
+ if fixups.empty?
101
+ self.prompt.say( "None; project looks clean." )
102
+ else
103
+ fixups.each do |desc|
104
+ self.prompt.say "[ ] %s" % [ desc ]
105
+ end
106
+ end
107
+
108
+ self.prompt.say( "\n" )
109
+ end
110
+
111
+
112
+ ### Return +true+ if the Rakefile in the current project directory needs to be
113
+ ### cleaned up.
114
+ def rakefile_needs_hoe_fixup?
115
+ return false unless self.rakefile.exist? && !self.rakefile.zero?
116
+ return self.rakefile.read.split( /^__END__/m, 2 ).first.match?( /hoe/i )
117
+ end
118
+
119
+
120
+ ### Returns +true+ if the manifest file has crufty lines in it.
121
+ def manifest_needs_fixup?
122
+ return false unless self.manifest_file.exist?
123
+ return self.manifest_file.each_line.any?( MANIFEST_CRUFT_LINE )
124
+ end
125
+
126
+
127
+ ### Return +true+ if there are Bundler-related files in the project.
128
+ def bundler_files_present?
129
+ return BUNDLER_FILES.any?( &:exist? )
130
+ end
131
+
132
+
133
+ ### Return +true+ if there are legacy dependency files in the project
134
+ def legacy_deps_files_present?
135
+ return LEGACY_DEPSFILES.any?( &:exist? )
136
+ end
137
+
138
+
139
+ ### Replace the current Rakefile with a generated one of it is a Hoe-based one.
140
+ def do_fixup_rakefile( task, * )
141
+ unless self.rakefile_needs_hoe_fixup?
142
+ self.trace "Not a hoe-based Rakefile; skipping"
143
+ return
144
+ end
145
+
146
+ original = self.rakefile.read
147
+
148
+ self.write_replacement_file( self.rakefile, encoding: 'utf-8' ) do |fh|
149
+
150
+ self.trace "Re-generating Rakefile from a template"
151
+ template = Rake::DevEiate::Generate::RAKEFILE_TEMPLATE
152
+ boilerplate = self.load_and_render_template( template, 'Rakefile' )
153
+ fh.print( boilerplate )
154
+
155
+ self.trace "Appending the old Rakefile contents in an END section"
156
+ fh.puts
157
+ fh.puts "__END__"
158
+ fh.puts
159
+ fh.print( original )
160
+ end
161
+ end
162
+
163
+
164
+ ### Clean up cruft from the manifest file.
165
+ def do_fixup_manifest( task, * )
166
+ unless self.manifest_needs_fixup?
167
+ self.trace "Manifest is clean; skipping"
168
+ return
169
+ end
170
+
171
+ self.write_replacement_file( self.manifest_file, encoding: 'utf-8' ) do |fh|
172
+ self.trace "Removing cruft from the manifest"
173
+ self.manifest_file.each_line do |line|
174
+ next if line.match?( MANIFEST_CRUFT_LINE )
175
+ fh.puts( line )
176
+ end
177
+ end
178
+ end
179
+
180
+
181
+ ### Remove any bundler-related files.
182
+ def do_fixup_bundler( task, * )
183
+ BUNDLER_FILES.each do |file|
184
+ next unless file.exist?
185
+ self.trace "Removing bundler file %s..." % [ file ]
186
+ self.hg.rm( file, force: true )
187
+ end
188
+ end
189
+
190
+
191
+ ### Convert legacy dependency files to the newer form.
192
+ def do_fixup_legacy_depsfiles( task, * )
193
+ unless self.legacy_deps_files_present?
194
+ self.trace "No legacy dependency files; skipping"
195
+ return
196
+ end
197
+
198
+ new_depsfile = Rake::DevEiate::GEMDEPS_FILE
199
+
200
+ LEGACY_DEPSFILES.each do |depsfile|
201
+ next unless depsfile.readable?
202
+
203
+ if new_depsfile.exist?
204
+ self.hg.rm( depsfile )
205
+ else
206
+ depnames = depsfile.each_line.map do |line|
207
+ line.split( /\s+/, 2 ).first
208
+ end
209
+
210
+ raise "Failed to read dependencies from %s!" % [ depsfile ] if depnames.empty?
211
+
212
+ self.trace "Recording move of %s to %s" % [ depsfile, new_depsfile ]
213
+ self.hg.mv( depsfile, new_depsfile )
214
+
215
+ newest_deps = self.find_latest_versions( *depnames ).
216
+ reject {|tuple| tuple.name.include?('hoe') }
217
+ dev_deps = self.find_latest_versions( *DEV_GEMDEPS )
218
+
219
+ self.write_replacement_file( new_depsfile, encoding: 'utf-8' ) do |fh|
220
+ fh.puts "source 'https://rubygems.org/'"
221
+ fh.puts
222
+
223
+ newest_deps.each do |dep|
224
+ fh.puts "gem '%s', '%s'" %
225
+ [ dep.name, dep.version.approximate_recommendation ]
226
+ end
227
+
228
+ fh.puts
229
+ fh.puts "group :development do"
230
+ dev_deps.each do |dep|
231
+ fh.puts "\tgem '%s', '%s'" %
232
+ [ dep.name, dep.version.approximate_recommendation ]
233
+ end
234
+ fh.puts "end"
235
+ end
236
+ end
237
+ end
238
+ end
239
+
240
+
241
+ ### Find the latest version for the specified +gemnames+ and return them as Gem::Specifiations
242
+ def find_latest_versions( *gemnames )
243
+ pattern = /\A#{Regexp.union(gemnames)}\Z/
244
+ fetcher = Gem::SpecFetcher.fetcher
245
+ return fetcher.
246
+ detect( :latest ) {|tuple| pattern =~ tuple.name && tuple.platform == 'ruby' }.
247
+ transpose.first
248
+ end
249
+
250
+ end # module Rake::DevEiate::Fixups
251
+
252
+
@@ -12,6 +12,7 @@ module Rake::DevEiate::Generate
12
12
 
13
13
 
14
14
  # Template files
15
+ RAKEFILE_TEMPLATE = 'Rakefile.erb'
15
16
  README_TEMPLATE = 'README.erb'
16
17
  HISTORY_TEMPLATE = 'History.erb'
17
18
 
@@ -27,12 +28,14 @@ module Rake::DevEiate::Generate
27
28
  def define_tasks
28
29
  super if defined?( super )
29
30
 
31
+ file( self.rakefile.to_s )
30
32
  file( self.readme_file.to_s )
31
33
  file( self.history_file.to_s )
32
34
  file( self.manifest_file.to_s )
33
35
  file( RUBY_VERSION_FILE.to_s )
34
36
  file( GEMSET_FILE.to_s )
35
37
 
38
+ task( self.rakefile, &method(:do_generate_rakefile) )
36
39
  task( self.readme_file, &method(:do_generate_readme_file) )
37
40
  task( self.history_file, &method(:do_generate_history_file) )
38
41
  task( self.manifest_file, &method(:do_generate_manifest_file) )
@@ -41,6 +44,7 @@ module Rake::DevEiate::Generate
41
44
 
42
45
  desc "Generate any missing project files."
43
46
  task :generate => [
47
+ self.rakefile,
44
48
  self.readme_file,
45
49
  self.history_file,
46
50
  self.manifest_file,
@@ -48,11 +52,26 @@ module Rake::DevEiate::Generate
48
52
  GEMSET_FILE,
49
53
  ]
50
54
 
55
+ # Abstract named tasks; mostly for invoking programmatically
56
+ namespace :generate do
57
+ task :rakefile => self.rakefile
58
+ task :readme => self.readme_file
59
+ task :history_file => self.history_file
60
+ task :manifest => self.manifest_file
61
+ task :ruby_version_file => RUBY_VERSION_FILE
62
+ task :gemset_file => GEMSET_FILE
63
+ end
64
+
51
65
  desc "Diff the manifest file against the default set of project files."
52
66
  task( :diff_manifest, &method(:do_diff_manifest) )
53
67
  end
54
68
 
55
69
 
70
+ ### Generate a Rakefile if one doesn't already exist. Error if one does.
71
+ def do_generate_rakefile( task, args )
72
+ self.generate_from_template( task.name, RAKEFILE_TEMPLATE )
73
+ end
74
+
56
75
 
57
76
  ### Generate a README file if one doesn't already exist. Error if one does.
58
77
  def do_generate_readme_file( task, args )
@@ -110,11 +129,11 @@ module Rake::DevEiate::Generate
110
129
  def generate_from_template( filename, template_path )
111
130
  self.prompt.ok "Generating #{filename}..."
112
131
  File.open( filename, FILE_CREATION_FLAGS, 0644, encoding: 'utf-8' ) do |io|
113
- result = self.load_and_render_template( template_path )
132
+ result = self.load_and_render_template( template_path, filename )
114
133
  io.print( result )
115
134
  end
116
135
  end
117
136
 
118
- end # module Rake::DevEiate::Hg
137
+ end # module Rake::DevEiate::Generate
119
138
 
120
139
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake-deveiate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Granger
@@ -34,7 +34,7 @@ cert_chain:
34
34
  jBZSA+N+xUTgUWpXjjwsLZjzJkhWATJWq+krNXcqpwXo6HsjmdUxoFMt63RBb+sI
35
35
  XrxOxp8o0uOkU7FdLSGsyqJ2LzsR4obN
36
36
  -----END CERTIFICATE-----
37
- date: 2020-02-26 00:00:00.000000000 Z
37
+ date: 2020-03-04 00:00:00.000000000 Z
38
38
  dependencies:
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: rake
@@ -78,6 +78,20 @@ dependencies:
78
78
  - - "~>"
79
79
  - !ruby/object:Gem::Version
80
80
  version: '3.8'
81
+ - !ruby/object:Gem::Dependency
82
+ name: simplecov
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '0.18'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '0.18'
81
95
  - !ruby/object:Gem::Dependency
82
96
  name: hglib
83
97
  requirement: !ruby/object:Gem::Requirement
@@ -174,9 +188,12 @@ files:
174
188
  - README.md
175
189
  - data/rake-deveiate/History.erb
176
190
  - data/rake-deveiate/README.erb
191
+ - data/rake-deveiate/Rakefile.erb
192
+ - data/rake-deveiate/global.rake
177
193
  - lib/rake/deveiate.rb
178
194
  - lib/rake/deveiate/checks.rb
179
195
  - lib/rake/deveiate/docs.rb
196
+ - lib/rake/deveiate/fixup.rb
180
197
  - lib/rake/deveiate/gem_dep_finder.rb
181
198
  - lib/rake/deveiate/gemspec.rb
182
199
  - lib/rake/deveiate/generate.rb
metadata.gz.sig CHANGED
Binary file