codelog 0.5.0 → 0.6.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
- SHA1:
3
- metadata.gz: 0f1e5ce48ce1d8a919fc4c121090b8f5efdb908e
4
- data.tar.gz: efb600d1427eb7b60773cd1c186035fd972dbf3d
2
+ SHA256:
3
+ metadata.gz: b871029a453ff73c21adb12c5656b9be50049096a852e9c6e31ba7599023ddbf
4
+ data.tar.gz: 2aa614de8b36eddbeae04dd34efc1e7716f7a24aa3cbee1ded0d171f768aacf8
5
5
  SHA512:
6
- metadata.gz: 86a05331db80325f448a3a09c59a8d43a15c9d83bed1d8026038ae26e901b3687738141fd419a6066a903f1e8fd4c09b9a1e526794375d1d493f74706343f543
7
- data.tar.gz: fb3404f11c69905bb8e5639d8c9c80bef154ca01ddff8eeea0a768f0bf9886f9ff1575a6dd081aa4bd5ce233440b9ddb6ce39e3e954e6c21e39907aa3b1a986a
6
+ metadata.gz: cffe89ed35c63814b810949a3ba02bc48d4228e1cff2e941e214e54cf5c6a48c8e01059abadfed11917c0a1dff4fc838ad712bd37f90aba911e780860b36b0ed
7
+ data.tar.gz: db61fc1fa5114692bf10f9998211d66c91b02975ffc10489369412f4e60a17e8c617e0c0045044d620234555bed29d97015e7f565d74c1ca8ff40dd22611e98d
@@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file.
3
3
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
4
4
  and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
5
5
 
6
+ ## 0.6.0
7
+ ### Added
8
+ - The `new` command receives a `NAME` parameter that will be converted to the unreleased file name
9
+ - Tests to verify if changes subcategories are properly tabulated on markdown file
10
+ - Tests to verify if `release` command is properly aborted if no `codelog.yml` file is found
11
+ - Interactive creation of the change files
12
+
13
+ ### Fixed
14
+ - When an unreleased file is not parseable to yml, the user will get a friendly message, saying both file and line that are wrong.
15
+
16
+ ---
6
17
  ## 0.5.0
7
18
  ### Added
8
19
  - Ability to edit the created changefile by running `codelog new <-e|--edit>`
data/README.md CHANGED
@@ -68,21 +68,29 @@ The template can be as the following example:
68
68
 
69
69
  ## Usage
70
70
 
71
+ ### Creating a new change file
72
+
71
73
  After the initial setup every time a change is made, the developer should run the following command in the project root path:
72
74
 
73
75
  ``` bash
74
- $ codelog new
76
+ $ codelog new <NAME>
75
77
  ```
76
78
 
77
- This will generate a change file on `changelogs/unreleased/` from the `template.yml` named with a timestamp value followed by `_change.yml`.
79
+ This will generate a change file, in `YAML` format, on `changelogs/unreleased/` from the `template.yml`, named with a timestamp value followed by the the given `NAME`, converted to snake case, or the default name(`change`).
78
80
 
79
81
  The new change file should be filled with informations about the implemented change, all unused topics should be erased and the file committed.
80
82
 
83
+ Additionally, you can pass some extra options to the `new` command. Type `codelog help new` in your console for more information.
84
+
85
+ ### Releasing a version
86
+
81
87
  Once all changes were merged and the release is ready to be packed, all that must be done is to run the following command:
82
88
 
83
89
  ``` bash
84
- $ codelog release {x.y.z}
90
+ $ codelog release [VERSION] <RELEASE_DATE>
85
91
  ```
92
+ Where the `VERSION` is mandatory and represents the number of the next version of the system. An additional parameter `RELEASE_DATE` can be used, and if so, the release date of the version will be that value. You can configure the format of this parameter in the configuration file, under `changelogs/codelog.yml`.
93
+
86
94
  No conflicts to resolve. All changes documented.
87
95
 
88
96
  It will execute 3 steps:
@@ -8,3 +8,4 @@ require 'codelog/command/release'
8
8
  require 'codelog/command/step/changelog'
9
9
  require 'codelog/command/step/delete'
10
10
  require 'codelog/command/step/version'
11
+ require 'codelog/clis/interactive'
@@ -9,11 +9,13 @@ module Codelog
9
9
  Codelog::Command::Setup.run
10
10
  end
11
11
 
12
- desc 'new', 'Generate a file from the template for the unreleased changes'
12
+ desc 'new <NAME>', 'Generate a file from the template for the unreleased changes'
13
13
  method_option :edit, desc: 'Opens the default system editor after creating a changefile',
14
14
  aliases: '-e', type: :boolean
15
- def new
16
- Codelog::Command::New.run options
15
+ method_option :interactive, desc: 'Add contents interactively to change file',
16
+ aliases: '-i', type: :boolean
17
+ def new(name = 'change')
18
+ Codelog::Command::New.run name, options
17
19
  end
18
20
 
19
21
  desc 'release [VERSION] <RELEASE_DATE>', 'Generate new release updating changelog'
@@ -0,0 +1,51 @@
1
+ require 'thor'
2
+
3
+ module Codelog
4
+ module CLIs
5
+ class Interactive < Thor
6
+ include Thor::Actions
7
+
8
+ no_commands do
9
+ def initialize
10
+ @sections = YAML.load_file('changelogs/template.yml').keys
11
+ end
12
+
13
+ def run
14
+ changes_hash = Hash.new([])
15
+ loop do
16
+ change_category = ask_for_type
17
+ say "\nType the entries for #{set_color(change_category, :yellow)}(ENTER to stop):"
18
+ changes_hash[change_category] += ask_for_changes
19
+ break if no? "\nWould you like to add a new log(Y|N)?"
20
+ end
21
+
22
+ changes_hash
23
+ end
24
+
25
+ private
26
+
27
+ def ask_for_type
28
+ say 'Enter a change type number:'
29
+ @sections.each_with_index do |section, index|
30
+ say "#{index + 1}. #{section}"
31
+ end
32
+ @sections[ask('>').to_i - 1]
33
+ end
34
+
35
+ def ask_for_changes(changes = [], level = 1)
36
+ change = ask('>' * level)
37
+
38
+ return changes if change.empty?
39
+
40
+ change = { change.chomp(':') => ask_for_changes([], level + 1) } if subcategory?(change)
41
+
42
+ ask_for_changes(changes.push(change), level)
43
+ end
44
+
45
+ def subcategory?(change)
46
+ change.end_with?(':')
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -5,24 +5,43 @@ module Codelog
5
5
  class New
6
6
  include FileUtils
7
7
 
8
- def self.run(options)
9
- Codelog::Command::New.new.run options
8
+ def initialize(name, options)
9
+ @name = name
10
+ @options = options
10
11
  end
11
12
 
12
- def run(options)
13
+ def self.run(name, options)
14
+ new(name, options).run
15
+ end
16
+
17
+ def run
13
18
  chdir Dir.pwd do
14
19
  # This script create a change file for the changelog documentation.
15
20
 
16
- full_file_name = "changelogs/unreleased/#{Time.now.strftime('%Y%m%d%H%M%S%L')}_change.yml"
17
-
18
- puts "== Creating #{full_file_name} change file based on example =="
19
- system! "cp changelogs/template.yml #{full_file_name}"
20
- system! "#{default_editor} #{full_file_name}" if options[:edit]
21
+ @file_name = "changelogs/unreleased/#{change_file_timestamp}_#{change_file_name}.yml"
22
+ if @options[:interactive]
23
+ build_from_hash Codelog::CLIs::Interactive.new.run
24
+ else
25
+ build_from_template
26
+ end
27
+ system! "#{default_editor} #{@file_name}" if @options[:edit]
21
28
  end
22
29
  end
23
30
 
24
31
  private
25
32
 
33
+ def build_from_template
34
+ puts "== Creating #{@file_name} change file based on example =="
35
+ system! "cp changelogs/template.yml #{@file_name}"
36
+ end
37
+
38
+ def build_from_hash(changes_hash)
39
+ puts "== Creating #{@file_name} change file from the provided changes =="
40
+ File.open(@file_name, 'a') do |file|
41
+ file.puts changes_hash.to_yaml
42
+ end
43
+ end
44
+
26
45
  def default_editor
27
46
  # Looks for the default editor in VISUAL and EDITOR system variables
28
47
  # if no variable is set it defaults to nano
@@ -30,6 +49,16 @@ module Codelog
30
49
  '${VISUAL:-${EDITOR:-nano}}'
31
50
  end
32
51
 
52
+ def change_file_timestamp
53
+ Time.now.strftime('%Y%m%d%H%M%S%L')
54
+ end
55
+
56
+ def change_file_name
57
+ # Converts the name to snake case
58
+
59
+ @name.gsub(/(.)([A-Z])/, '\1_\2').downcase
60
+ end
61
+
33
62
  def system!(*args)
34
63
  system(*args) || abort("\n== Command #{args} failed ==")
35
64
  end
@@ -43,6 +43,8 @@ module Codelog
43
43
  changes | changes_to_be_added
44
44
  end
45
45
  end
46
+ rescue Psych::SyntaxError => error
47
+ abort(Codelog::Message::Error.could_not_parse_yaml(error))
46
48
  end
47
49
 
48
50
  def add_entry(line, changes, level = 0)
@@ -32,6 +32,10 @@ module Codelog
32
32
  "Run the following command to create the missing file:\n\n" \
33
33
  'codelog setup'
34
34
  end
35
+
36
+ def could_not_parse_yaml(error)
37
+ "#{prefix}: #{error.problem.capitalize} in #{error.file}:#{error.line}"
38
+ end
35
39
  end
36
40
  end
37
41
 
@@ -1,3 +1,3 @@
1
1
  module Codelog
2
- VERSION = '0.5.0'.freeze
2
+ VERSION = '0.6.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codelog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luís Bevilacqua
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2018-02-16 00:00:00.000000000 Z
15
+ date: 2018-03-31 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: thor
@@ -117,6 +117,7 @@ files:
117
117
  - bin/setup
118
118
  - lib/codelog.rb
119
119
  - lib/codelog/cli.rb
120
+ - lib/codelog/clis/interactive.rb
120
121
  - lib/codelog/command/new.rb
121
122
  - lib/codelog/command/release.rb
122
123
  - lib/codelog/command/setup.rb
@@ -150,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
150
151
  version: '0'
151
152
  requirements: []
152
153
  rubyforge_project:
153
- rubygems_version: 2.6.8
154
+ rubygems_version: 2.7.3
154
155
  signing_key:
155
156
  specification_version: 4
156
157
  summary: A gem to help with changelog management