rake-deveiate 0.11.0 → 0.12.0

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