semverve 0.2.0 → 0.2.1

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: 436e6dece23a174761d954e1c1efc74d95d68b8b47d82f876bb5b785eb204748
4
- data.tar.gz: 62e9b4496586062f8e03f71d0838ddd510e5e42faa200d10fbef2560f214fa4c
3
+ metadata.gz: b04f97b571e0eed652d155221cddb5afe06d703f2a27546f15c11e3d26a3d214
4
+ data.tar.gz: 6c824db22d1967e9daa8de369ca199b6cc7969f6ab2179933600fbba34d1aa6e
5
5
  SHA512:
6
- metadata.gz: cc055ab321689871de38a8fc0276a8cc85011ea9c7765c7844d97c71962bba2765cd867cd9dbb96236b11ea695edc63e8289c087fd5a90482ab1ea376d82981a
7
- data.tar.gz: 8a4cbb86d9548b4aeeedf94bd883e300532a6d4c062dc1c1c1170d412ae5bb94a4fe50bdfbc29098482a51632a194ef32be93cee35ef8a5219d77f5957d54c98
6
+ metadata.gz: 31208572bd96d1d1bb00537673e9960594501a2b4226f821114d8cb624965fd0cd7282722d6284cf0666f80a908706174a3ca3d0bb4109a3b18dc882e9a26ecd
7
+ data.tar.gz: 8deb952db13cfdf0f8a13fbbcffb07afc23c402ece2efc3d50899d4158ea7455a6bedc993cb79c9d3de8dfc83c8142981f87f52777ee79a8dba1c1b09bc58dcd
data/CONTRIBUTING.md CHANGED
@@ -100,6 +100,27 @@ When changing behavior, update the README at the same time. The README is the
100
100
  primary user guide, so examples should match real task names, configuration
101
101
  names, defaults, and output.
102
102
 
103
+ ## Rake Task Interface Design
104
+ Semverve should feel natural from a shell while staying Rake-native. Prefer
105
+ Rake task arguments for direct task inputs:
106
+
107
+ ```sh
108
+ bundle exec rake 'semverve:set[x.y.z]'
109
+ bundle exec rake 'semverve:generate[simple,force]'
110
+ ```
111
+
112
+ For tasks with more than one optional value, prefer meaning-bearing tokens over
113
+ strict positional placeholders. For example, `semverve:generate` treats semantic
114
+ versions as the generated version, `module` or `simple` as the format, and
115
+ `force` as the overwrite mode. That keeps invocations like
116
+ `rake 'semverve:generate[simple]'` and `rake 'semverve:generate[force]'`
117
+ readable without requiring awkward empty slots.
118
+
119
+ Reserve environment variables for cross-cutting runtime toggles that compose
120
+ across related tasks, such as `SEMVERVE_REPORT_IGNORED=true rake
121
+ semverve:check`. Avoid generic environment variables like `VERSION`, `FORMAT`,
122
+ or `FORCE`; they can collide with a user's shell, CI, or parent build process.
123
+
103
124
  ## Versioning and Release Checks
104
125
  Semverve uses Semverve to maintain itself, which doubles as useful
105
126
  smoke-testing. The project Rakefile requires `lib/semverve/task` and installs
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- semverve (0.2.0)
4
+ semverve (0.2.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -133,6 +133,7 @@ Semverve tasks use Rake task arguments for values:
133
133
  ```sh
134
134
  rake 'semverve:set[1.2.3]'
135
135
  rake 'semverve:generate[1.0.0,simple]'
136
+ rake 'semverve:generate[simple]'
136
137
  rake 'semverve:generate[force]'
137
138
  ```
138
139
 
@@ -250,6 +251,7 @@ Generate a specific version or format:
250
251
 
251
252
  ```sh
252
253
  rake 'semverve:generate[1.0.0,simple]'
254
+ rake 'semverve:generate[simple]'
253
255
  ```
254
256
 
255
257
  Generation fails if the target file already exists. To replace it:
@@ -258,11 +260,14 @@ Generation fails if the target file already exists. To replace it:
258
260
  rake 'semverve:generate[force]'
259
261
  ```
260
262
 
261
- `semverve:generate` accepts optional `version` and `format` arguments. Add a
262
- `force` token to overwrite an existing version file:
263
+ `semverve:generate` accepts optional tokens for version, format, and force.
264
+ Token order does not matter: semantic versions set the generated version,
265
+ `module` or `simple` sets the format, and `force` overwrites an existing version
266
+ file.
263
267
 
264
268
  ```sh
265
269
  rake 'semverve:generate[1.0.0,force]'
270
+ rake 'semverve:generate[simple,force]'
266
271
  rake 'semverve:generate[1.0.0,simple,force]'
267
272
  ```
268
273
 
@@ -620,6 +625,39 @@ For release CI, run the release check before building or pushing:
620
625
  bundle exec rake semverve:check:release build
621
626
  ```
622
627
 
628
+ ## Vim
629
+ While there's no official vim support (yet), you can add the following to
630
+ `~/.vim/plugin/semverve.vim`.
631
+
632
+ ```vim
633
+ command! -bang SemverveAudit call <SID>semverve_audit(<bang>0)
634
+ function! s:semverve_audit(report_ignored) abort
635
+ let l:old_efm = &errorformat
636
+ try
637
+ let &errorformat = '%f:%l:%c:%m'
638
+ let l:string = ""
639
+ if !a:report_ignored
640
+ let l:string .= 'SEMVERVE_REPORT_IGNORED=true '
641
+ endif
642
+ let l:string .= 'bundle exec rake semverve:check 2>/dev/null'
643
+ cexpr systemlist(l:string)
644
+ if v:shell_error != 0
645
+ copen
646
+ else
647
+ cclose
648
+ echo 'Semverve checks passed.'
649
+ endif
650
+ finally
651
+ let &errorformat = l:old_efm
652
+ endtry
653
+ endfunction
654
+ ```
655
+
656
+ You can then call `:SemverveAudit`, which will call `bundle exec rake
657
+ semverve:check`, and `:SemverveAudit!` which will call the same command with
658
+ `SEMVERVE_REPORT_IGNORED=true`, and populate and open the quickfix list if any
659
+ offenses are found.
660
+
623
661
  ## Reporting Bugs and Requesting Features
624
662
  If you have an idea or find a bug, please [create an
625
663
  issue](https://github.com/evanthegrayt/semverve/issues/new). Just make sure
data/lib/semverve/task.rb CHANGED
@@ -366,17 +366,37 @@ module Semverve
366
366
  #
367
367
  # @return [Hash]
368
368
  def generate_options(args)
369
- values = args.to_a
370
- force = values.delete("force")
371
- if values.length > 2
372
- raise Error, "Run rake 'semverve:generate[VERSION,FORMAT,force]'."
369
+ args.to_a.each_with_object({force: false}) do |value, options|
370
+ assign_generate_option(value, options)
373
371
  end
372
+ end
374
373
 
375
- {
376
- version: values[0],
377
- format: values[1],
378
- force: !force.nil?
379
- }
374
+ ##
375
+ # Assigns a single +semverve:generate+ token by meaning.
376
+ #
377
+ # @param [String] value
378
+ # @param [Hash] options
379
+ #
380
+ # @return [void]
381
+ def assign_generate_option(value, options)
382
+ case value
383
+ when nil, ""
384
+ nil
385
+ when "force"
386
+ raise Error, "Duplicate generate option force." if options[:force]
387
+
388
+ options[:force] = true
389
+ when SemanticVersion::PATTERN
390
+ raise Error, "Duplicate generate version #{value.inspect}." if options[:version]
391
+
392
+ options[:version] = value
393
+ when "module", "simple"
394
+ raise Error, "Duplicate generate format #{value.inspect}." if options[:format]
395
+
396
+ options[:format] = value
397
+ else
398
+ raise Error, "Unknown generate option #{value.inspect}. Use a semantic version, module, simple, or force."
399
+ end
380
400
  end
381
401
 
382
402
  ##
@@ -21,7 +21,7 @@ module Semverve
21
21
  # Patch version.
22
22
  #
23
23
  # @return [Integer]
24
- PATCH = 0
24
+ PATCH = 1
25
25
 
26
26
  module_function
27
27
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semverve
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Gray