branch-name 1.0.1.pre.beta → 2.0.0.pre.beta
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +86 -12
- data/branch-name.gemspec +2 -2
- data/lib/branch/name/cli.rb +21 -16
- data/lib/branch/name/configurable.rb +1 -1
- data/lib/branch/name/normalizable.rb +39 -0
- data/lib/branch/name/projectable.rb +1 -0
- data/lib/branch/name/version.rb +1 -1
- metadata +5 -5
- data/lib/branch/name/nameable.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 166d6b67749f23a48cca5435c6b4b923d57b9e8f4e716ff61c5765da932b686a
|
4
|
+
data.tar.gz: e5c041c60834c56da210d0843e0bf099e62fa21adb120f46a1d58b07793f2cbb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48334163ec2756cdebfd45344ec91b34e602d0b78573e52aa61418ff8915b77107513e3745cf0cd10c353cb84f669993ff0835c37b964500405c67b9b46cc9ce
|
7
|
+
data.tar.gz: f3ec35602f29a9edcd699383697fcb5aac3773122f9db42f82dc7748f646fa2c20bedf6fbaf0cb48d716b93a6d154ce2d5c1a5e34a657f0ea8d6c23265bff976
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,28 +1,102 @@
|
|
1
|
-
#
|
1
|
+
# `branch-name`
|
2
2
|
|
3
|
-
|
3
|
+
`branch-name` is a gem that provides a command-line interface that allows you to accomplish several tasks, tasks I *personally* find myself having to carry out every time I work on a feature branch. I created this gem *for myself*; however, you are free to use it yourself, if any of these tasks fits into your personal routine:
|
4
|
+
|
5
|
+
1. Formulate a git *feature branch name*, given a [jira](https://www.atlassian.com/software/jira) ticket and jira ticket description. **Why? Because I am constantly having to create git feature branch names that are based on jira ticket and jira ticket descriptions.**
|
6
|
+
2. Optionally create a "project" based on the *branch name* (formulated in step 1 above). **Why? Because I'm constantly having to create folders to manage files associated with the feature branches I am working on.**
|
7
|
+
3. Optionally use and manage default options that determine the git feature branch name formulated, project greated, and default files associated with the project.**Why? Because I routinely have to create files to support the feature I am working on and associate them _with_ the feature I am working on. For example: scratch.rb to hold scratch code, snippets.rb to hold code to execute to perform redundant tasks, and readme.txt files to document things I need to remember.**
|
8
|
+
|
9
|
+
## Caveats
|
10
|
+
|
11
|
+
NOTE: This documentation assumes *macos* and any reference to `<username>` should be assumed to equal `$ whoami` unless otherwise noted.
|
12
|
+
|
13
|
+
NOTE: This documentation makes reference to *cards* and/or *tickets*; these terms should be considered synonymous, and are used to refer to *user stories*, *tasks*, *bugs*, etc.: work that is normally created against a software development team's [Jira](https://www.atlassian.com/software/jira) Project board while adhering to [Agile development methodology](https://www.atlassian.com/agile#:~:text=Agile%20is%20an%20iterative%20approach,small%2C%20but%20consumable%2C%20increments.). While `branch-name` was created to be used while practicing Agile, `branch-name` can be used outside the Agile context as well.
|
4
14
|
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
6
15
|
|
7
16
|
## Installation
|
8
17
|
|
9
|
-
|
18
|
+
$ gem install branch-name
|
19
|
+
|
20
|
+
## Usage/Examples
|
10
21
|
|
11
|
-
|
12
|
-
|
22
|
+
### `branch-name` help
|
23
|
+
```shell
|
24
|
+
# Display general branch-name help
|
25
|
+
$ branch-name help
|
26
|
+
|
27
|
+
# Display help for the 'create' command
|
28
|
+
$ branch-name help create
|
29
|
+
|
30
|
+
# Display help for the 'config' command and subsommands
|
31
|
+
$ branch-name help config
|
32
|
+
$ branch-name config help info
|
33
|
+
$ branch-name config help init
|
34
|
+
$ branch-name config help delete
|
13
35
|
```
|
14
36
|
|
15
|
-
|
37
|
+
### Initialize `branch-name` configuration files
|
38
|
+
Setting up *global* settings would be a good place to start:
|
39
|
+
|
40
|
+
```
|
41
|
+
$ branch-name config init global
|
42
|
+
#=> Configuration file (/Users/<username>/.branch-name) created
|
43
|
+
```
|
16
44
|
|
17
|
-
|
45
|
+
This creates a `.branch-name` .yaml configuration file the home folder of the current user (`$ whoami` on *macos*) with the following option defaults. The option defaults created will be used with their respective `branch-name` command indicated by the `branch-name` command name under which each option resides. You may manually alter any of the option values to suite your needs. To determine what options are available for each `branch-name` command, simply view help for that particular command. If a `brnch-name` command is *not* found in the `.branch-name` confg file when it is first initialized (e.g. `$ branch-name config init global #=> /Users/<username>/.branch-name`), default options for that particular `branch-name` command is not currently supported.
|
18
46
|
|
19
|
-
|
47
|
+
For example, the following default options will be used whenever the `branch-name create` command is executed for the user "`<username>`":
|
20
48
|
|
21
|
-
|
49
|
+
```yaml
|
50
|
+
# /Users/<username>/.branch-name
|
51
|
+
---
|
52
|
+
create:
|
53
|
+
downcase: false
|
54
|
+
separator: _
|
55
|
+
project: false
|
56
|
+
project_location: "/Users/<username>"
|
57
|
+
project_files:
|
58
|
+
- scratch.rb
|
59
|
+
- readme.txt
|
60
|
+
```
|
22
61
|
|
23
|
-
|
62
|
+
NOTE: It is recommended that you change the default `create: project_location` to a more suitable location depending on your *os*. For example, on *macos* you might want to change this to `"/Users/<username>/Documents"`, `"/Users/<username>/Documents/features"`, or something similar.
|
24
63
|
|
25
|
-
|
64
|
+
Any or all of these options can be overwritten on the command-line:
|
65
|
+
|
66
|
+
For more information:
|
67
|
+
`$ branch-name config help init`
|
68
|
+
|
69
|
+
### Creating Feature Branch Names and Projects Examples
|
70
|
+
|
71
|
+
NOTE: `branch-name create` really doesn't "create" anything (unless you use the `-p` option, in which case it will create a "project" for you); rather, `branch-name create` simply formulates a suitable feature branch name given a *jira* ticket and *jira* ticket description.
|
72
|
+
|
73
|
+
NOTE: The below examples will assume the following `global` config file defaults (`$ branch-name config init global`) that have been *manually* manipulated to have the following options:
|
74
|
+
|
75
|
+
```yaml
|
76
|
+
# /Users/<username>/.branch-name
|
77
|
+
---
|
78
|
+
create:
|
79
|
+
downcase: false
|
80
|
+
separator: _
|
81
|
+
project: false
|
82
|
+
project_location: "/Users/<username>/feature-branches/2022"
|
83
|
+
project_files:
|
84
|
+
- readme.txt
|
85
|
+
- scratch.rb
|
86
|
+
- snippets.rb
|
87
|
+
```
|
88
|
+
|
89
|
+
This example formulates feature a branch named *lg-12345-pay-down-tech-debt-on-user-model* by converting the ticket and ticket description to lowercase (`-d`) and delimiting the feature branch name tokens with a "-" character (`-s -`). The `-p` option instructs `branch-name create` to create the project folder */Users/<username>/feature-branches/2022/lg-12345-pay-down-tech-debt-on-user-model*. The aforementioned project folder will also contain the following files: readme.txt, scratch.rb and snippets.rb. In addition to this, `branch-name create` will also copy the feature brach name to the clipboard for you. This is convienient when you need to create a feature branch in github, or from the command-line.
|
90
|
+
|
91
|
+
```shell
|
92
|
+
$ branch-name create -p -d -s - "Pay down tech debt on User model" LG-12345
|
93
|
+
```
|
94
|
+
|
95
|
+
This example simply formulates feature a branch named *Add_create_and_destroy_session_controller_actions* and copies it to the clipboard.
|
96
|
+
|
97
|
+
```shell
|
98
|
+
$ branch-name create "Add #create and #destroy session controller actions"
|
99
|
+
```
|
26
100
|
|
27
101
|
## Development
|
28
102
|
|
data/branch-name.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.authors = ['Gene M. Angelo, Jr.']
|
9
9
|
spec.email = ['public.gma@gmail.com']
|
10
10
|
|
11
|
-
spec.summary = 'Generates a branch name based on a JIRA
|
12
|
-
spec.description = 'Generates a branch name based on a JIRA
|
11
|
+
spec.summary = 'Generates a branch name based on a JIRA ticket/ticket number.'
|
12
|
+
spec.description = 'Generates a branch name based on a JIRA ticket/ticket number.'
|
13
13
|
spec.homepage = 'https://github.com/gangelo/branch-name'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
data/lib/branch/name/cli.rb
CHANGED
@@ -9,7 +9,7 @@ require_relative 'configurable'
|
|
9
9
|
require_relative 'exitable'
|
10
10
|
require_relative 'loadable'
|
11
11
|
require_relative 'locatable'
|
12
|
-
require_relative '
|
12
|
+
require_relative 'normalizable'
|
13
13
|
require_relative 'projectable'
|
14
14
|
require_relative 'subcommands/config'
|
15
15
|
require_relative 'version'
|
@@ -24,7 +24,7 @@ module Branch
|
|
24
24
|
include Exitable
|
25
25
|
include Loadable
|
26
26
|
include Locatable
|
27
|
-
include
|
27
|
+
include Normalizable
|
28
28
|
include Projectable
|
29
29
|
|
30
30
|
class_option :debug, type: :boolean, default: false
|
@@ -33,21 +33,27 @@ module Branch
|
|
33
33
|
default_task :create
|
34
34
|
map %w[--version -v] => :version
|
35
35
|
|
36
|
-
desc 'create [OPTIONS]
|
36
|
+
desc 'create [OPTIONS] DESCRIPTION [TICKET]', 'Formulate a branch name based on a ticket
|
37
|
+
description and optional ticket'
|
37
38
|
long_desc <<-LONG_DESC
|
38
39
|
NAME
|
39
40
|
\x5
|
40
|
-
`branch-name create` -- will formulate a Git branch name based on the
|
41
|
+
`branch-name create` -- will formulate a Git branch name based on the
|
42
|
+
DESCRIPTION and optional TICKET provided.
|
41
43
|
|
42
44
|
SYNOPSIS
|
43
45
|
\x5
|
44
|
-
branch-name create [-d|-s|-p
|
46
|
+
branch-name create [-l|-f|-d|-s|-p] DESCRIPTION [TICKET]
|
45
47
|
|
46
48
|
\x5
|
47
49
|
The following options are available:
|
48
50
|
|
51
|
+
\x5 NOTE: Default option values will be overidden if .branch-name config files
|
52
|
+
are present. Run `branch-name config info` to determine what config files
|
53
|
+
are present.
|
54
|
+
|
49
55
|
\x5 -d: Forces the branch name to lower case.
|
50
|
-
The default is
|
56
|
+
The default is: #{DEFAULT_BRANCH_NAME_OPTIONS['create']['downcase']}.
|
51
57
|
|
52
58
|
\x5\x5 -s SEPARATOR: Indicates the SEPARATOR that will be used to delimit tokens in the branch name.
|
53
59
|
The default SEPARATOR is: '#{DEFAULT_BRANCH_NAME_OPTIONS['create']['separator']}'.
|
@@ -55,11 +61,11 @@ module Branch
|
|
55
61
|
\x5\x5 -p: Indicates that a project should be created.
|
56
62
|
The default is: #{DEFAULT_BRANCH_NAME_OPTIONS['create']['project']}.
|
57
63
|
|
58
|
-
\x5 -
|
59
|
-
will be created in the PROJECT_LOCATION specified by the -
|
64
|
+
\x5 -f: Used with the -p option. If -f is specified, project files
|
65
|
+
will be created in the PROJECT_LOCATION specified by the -l option.
|
60
66
|
The default is: #{DEFAULT_BRANCH_NAME_OPTIONS['create']['project_files']}.
|
61
67
|
|
62
|
-
\x5\x5 -
|
68
|
+
\x5\x5 -l PROJECT_LOCATION: Indicates where the project should be created.
|
63
69
|
A "project" is a folder that is created in the PROJECT_LOCATION specified,
|
64
70
|
whose name is equivalent to the branch name that is formulated.
|
65
71
|
The default is: "#{Locatable.project_folder(options: options)}".
|
@@ -67,19 +73,18 @@ module Branch
|
|
67
73
|
method_option :downcase, type: :boolean, aliases: '-d'
|
68
74
|
method_option :separator, type: :string, aliases: '-s'
|
69
75
|
method_option :project, type: :boolean, aliases: '-p'
|
70
|
-
method_option :project_location, type: :string, aliases: '-
|
71
|
-
method_option :project_files, type: :array, aliases: '-
|
76
|
+
method_option :project_location, type: :string, aliases: '-l'
|
77
|
+
method_option :project_files, type: :array, aliases: '-f'
|
72
78
|
|
73
|
-
def create(
|
74
|
-
if
|
75
|
-
say_error '
|
79
|
+
def create(ticket_description, ticket = nil)
|
80
|
+
if ticket_description.blank?
|
81
|
+
say_error 'description is required', :red
|
76
82
|
exit 1
|
77
83
|
end
|
78
84
|
|
79
85
|
init_options_for! command: :create
|
80
86
|
|
81
|
-
branch_name =
|
82
|
-
branch_name = normalize_branch_name branch_name
|
87
|
+
branch_name = normalize_branch_name(ticket_description, ticket)
|
83
88
|
|
84
89
|
say "Branch name: #{branch_name}", :cyan
|
85
90
|
|
@@ -18,7 +18,7 @@ module Branch
|
|
18
18
|
'separator' => '_',
|
19
19
|
'project' => false,
|
20
20
|
'project_location' => Locatable.project_folder,
|
21
|
-
'project_files' => %w[scratch.rb
|
21
|
+
'project_files' => %w[readme.txt scratch.rb snippets.rb]
|
22
22
|
}
|
23
23
|
}.freeze
|
24
24
|
# rubocop:enable Style/StringHashKeys
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Branch
|
4
|
+
module Name
|
5
|
+
module Normalizable
|
6
|
+
NON_WORD_CHARS_REGEX = /[^\w]/
|
7
|
+
|
8
|
+
def normalize_branch_name(ticket_description, ticket)
|
9
|
+
normalized_ticket_description = normalize_ticket_description ticket_description
|
10
|
+
return normalized_ticket_description if ticket.blank?
|
11
|
+
|
12
|
+
normalized_ticket = normalize_ticket ticket
|
13
|
+
"#{normalized_ticket}#{options[:separator]}#{normalized_ticket_description}"
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def normalize_ticket_description(ticket_description)
|
19
|
+
normalize_token ticket_description
|
20
|
+
end
|
21
|
+
|
22
|
+
def normalize_ticket(ticket)
|
23
|
+
ticket.split(NON_WORD_CHARS_REGEX).filter_map do |token|
|
24
|
+
normalize_token(token)
|
25
|
+
end.join(options[:separator])
|
26
|
+
end
|
27
|
+
|
28
|
+
def normalize_token(token)
|
29
|
+
token = token.strip
|
30
|
+
.squeeze(' ')
|
31
|
+
.split.join(options[:separator])
|
32
|
+
token = token.gsub(NON_WORD_CHARS_REGEX, '')
|
33
|
+
token = token.squeeze(options[:separator])
|
34
|
+
token = token.downcase if options[:downcase]
|
35
|
+
token
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/branch/name/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: branch-name
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.pre.beta
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gene M. Angelo, Jr.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-09-
|
11
|
+
date: 2022-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -64,7 +64,7 @@ dependencies:
|
|
64
64
|
- - ">="
|
65
65
|
- !ruby/object:Gem::Version
|
66
66
|
version: 1.2.1
|
67
|
-
description: Generates a branch name based on a JIRA
|
67
|
+
description: Generates a branch name based on a JIRA ticket/ticket number.
|
68
68
|
email:
|
69
69
|
- public.gma@gmail.com
|
70
70
|
executables:
|
@@ -94,7 +94,7 @@ files:
|
|
94
94
|
- lib/branch/name/exitable.rb
|
95
95
|
- lib/branch/name/loadable.rb
|
96
96
|
- lib/branch/name/locatable.rb
|
97
|
-
- lib/branch/name/
|
97
|
+
- lib/branch/name/normalizable.rb
|
98
98
|
- lib/branch/name/projectable.rb
|
99
99
|
- lib/branch/name/subcommands/config.rb
|
100
100
|
- lib/branch/name/subcommands/init.rb
|
@@ -126,5 +126,5 @@ requirements: []
|
|
126
126
|
rubygems_version: 3.3.22
|
127
127
|
signing_key:
|
128
128
|
specification_version: 4
|
129
|
-
summary: Generates a branch name based on a JIRA
|
129
|
+
summary: Generates a branch name based on a JIRA ticket/ticket number.
|
130
130
|
test_files: []
|
data/lib/branch/name/nameable.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Branch
|
4
|
-
module Name
|
5
|
-
module Nameable
|
6
|
-
def normalize_branch_name(branch_name)
|
7
|
-
branch_name.strip!
|
8
|
-
branch_name = branch_name.split.join options[:separator]
|
9
|
-
branch_name.downcase! if options[:downcase]
|
10
|
-
branch_name.tr!('_', '-') if options[:separator] == '-'
|
11
|
-
branch_name.tr!('-', '_') if options[:separator] == '_'
|
12
|
-
branch_name.squeeze!('-') if options[:separator] == '-'
|
13
|
-
branch_name.squeeze!('_') if options[:separator] == '_'
|
14
|
-
branch_name
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|