story_branch-git_wrapper 0.0.1 → 0.0.3

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: 1c5556a10e0136d08819f45667dba7cf25ea67d7509bf008adbd3e19ed570697
4
- data.tar.gz: ca842c1d3ba70bd7fef91e56d6873b44231c8041038ceb0fc2672ade22effb61
3
+ metadata.gz: 3a76df6d72cd3bd6acb33a19807b92f4fea967bf1ad650909d6b30352522a92f
4
+ data.tar.gz: ece50978f9315af05f54702e446ea756a9461e7db633061e9c2be4690fab560b
5
5
  SHA512:
6
- metadata.gz: 91c839908b1d4c3e03ec95fe1c10b89d1537d143429005d46d45ae1380ff329b4c6e655f60f2ea211a11693ebb16c33a0aceddec3ea673d2dcfcbc031ec46402
7
- data.tar.gz: 106841372f11a88b4e1fa2369762455103b9456e2e7f02ccf1194be7ae53be8f1f01fca5a2a5ef34859a6ec44b50d61a24ce0c4d0cddea4beb4138bc1c27d2d7
6
+ metadata.gz: 7345c2b4ebf37683c30ce51daf591ffb2d05896d44c95393456e7aa099b9789c9beb1be47c4a046bb927c3644551ca27112bd0c73800ec412725e27509be2a81
7
+ data.tar.gz: fa4867fc1018767800172b1335db0ee7370b622d6505576f7ffb99b3346be7b52e5847e0a8d1004a12b6f967ab52ea4efb9a4b9394b7978275116c83b5410425
@@ -0,0 +1,13 @@
1
+ name: StandardRB
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ steps:
9
+ - uses: actions/checkout@v1
10
+ - name: StandardRB Linter
11
+ uses: andrewmcodes/standardrb-action@v1.0.0
12
+ env:
13
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,19 @@
1
+ name: CI
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ test:
7
+ runs-on: ubuntu-latest
8
+ steps:
9
+ - name: Checkout
10
+ uses: actions/checkout@v3
11
+
12
+ - name: Setup Ruby
13
+ uses: ruby/setup-ruby@v1
14
+ with:
15
+ ruby-version: 2.7
16
+ bundler-cache: true
17
+
18
+ - name: Run tests
19
+ run: bundle exec rake test
data/.gitignore CHANGED
@@ -6,3 +6,5 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ .byebug_history
10
+ *.gem
data/Gemfile.lock ADDED
@@ -0,0 +1,58 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ story_branch-git_wrapper (0.0.3)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ ansi (1.5.0)
10
+ ast (2.4.2)
11
+ builder (3.2.4)
12
+ json (2.6.2)
13
+ minitest (5.16.2)
14
+ minitest-reporters (1.5.0)
15
+ ansi
16
+ builder
17
+ minitest (>= 5.0)
18
+ ruby-progressbar
19
+ parallel (1.22.1)
20
+ parser (3.1.2.1)
21
+ ast (~> 2.4.1)
22
+ rainbow (3.1.1)
23
+ rake (12.3.3)
24
+ regexp_parser (2.5.0)
25
+ rexml (3.2.5)
26
+ rubocop (1.33.0)
27
+ json (~> 2.3)
28
+ parallel (~> 1.10)
29
+ parser (>= 3.1.0.0)
30
+ rainbow (>= 2.2.2, < 4.0)
31
+ regexp_parser (>= 1.8, < 3.0)
32
+ rexml (>= 3.2.5, < 4.0)
33
+ rubocop-ast (>= 1.19.1, < 2.0)
34
+ ruby-progressbar (~> 1.7)
35
+ unicode-display_width (>= 1.4.0, < 3.0)
36
+ rubocop-ast (1.21.0)
37
+ parser (>= 3.1.1.0)
38
+ rubocop-performance (1.14.3)
39
+ rubocop (>= 1.7.0, < 2.0)
40
+ rubocop-ast (>= 0.4.0)
41
+ ruby-progressbar (1.11.0)
42
+ standard (1.15.0)
43
+ rubocop (= 1.33.0)
44
+ rubocop-performance (= 1.14.3)
45
+ unicode-display_width (2.2.0)
46
+
47
+ PLATFORMS
48
+ ruby
49
+
50
+ DEPENDENCIES
51
+ minitest (~> 5.0)
52
+ minitest-reporters (~> 1.5)
53
+ rake (~> 12.0)
54
+ standard (~> 1.15)
55
+ story_branch-git_wrapper!
56
+
57
+ BUNDLED WITH
58
+ 2.1.4
data/Rakefile CHANGED
@@ -5,6 +5,7 @@ Rake::TestTask.new(:test) do |t|
5
5
  t.libs << "test"
6
6
  t.libs << "lib"
7
7
  t.test_files = FileList["test/**/*_test.rb"]
8
+ t.verbose = true
8
9
  end
9
10
 
10
- task :default => :test
11
+ task default: :test
data/bin/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "bundler/setup"
4
- require "story_branch/git_wrapper"
4
+ require "story_branch/git"
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -0,0 +1,5 @@
1
+ module StoryBranch
2
+ module Git
3
+ VERSION = "0.0.3"
4
+ end
5
+ end
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StoryBranch
4
+ module Git
5
+ class Error < StandardError; end
6
+
7
+ class Wrapper
8
+ STATI_MATCHERS = {
9
+ modified_rx: /^ M (.*)/,
10
+ untracked_rx: /^\?\? (.*)/,
11
+ staged_rx: /^M (.*)/,
12
+ added_rx: /^A (.*)/
13
+ }.freeze
14
+
15
+ def self.command(cmd, opts = [])
16
+ gw = new
17
+ gw.execute(cmd, opts)
18
+ end
19
+
20
+ def self.command_lines(cmd, opts = [])
21
+ result = command(cmd, opts)
22
+ lines = result.split("\n")
23
+ lines.each(&:strip!)
24
+ end
25
+
26
+ def self.branch_names
27
+ # NOTE: Regex matcher for cases as:
28
+ # remotes/origin/allow.... <- remote branch (remove 'remotes/origin')
29
+ # * allow.... <- * indicates current branch (remove '* ')
30
+ # allow <- local branch (do nothing)
31
+ regex = %r{(^remotes/.*/|\s|[*])}
32
+ all_branches.map do |line|
33
+ line = line.sub(regex, "")
34
+ line
35
+ end
36
+ end
37
+
38
+ def self.current_branch
39
+ current_branch_line = all_branches.detect do |line|
40
+ line.match(/\*/)
41
+ end
42
+ current_branch_line.tr("*", " ").strip
43
+ end
44
+
45
+ def self.all_branches
46
+ command_lines("branch", "-a")
47
+ end
48
+
49
+ def self.create_branch(name)
50
+ command("checkout", ["-b", name])
51
+ end
52
+
53
+ def self.status
54
+ g_status = command_lines("status", "-s")
55
+ return nil if g_status.empty?
56
+
57
+ {
58
+ modified: status_collect(g_status, STATI_MATCHERS[:modified_rx]),
59
+ untracked: status_collect(g_status, STATI_MATCHERS[:untracked_rx]),
60
+ added: status_collect(g_status, STATI_MATCHERS[:added_rx]),
61
+ staged: status_collect(g_status, STATI_MATCHERS[:staged_rx])
62
+ }
63
+ end
64
+
65
+ def self.status_collect(status, regex)
66
+ chosen_stati = status.select { |e| e.match(regex) }
67
+ chosen_stati.map { |e| e.match(regex)[1] }
68
+ end
69
+
70
+ def self.commit(message)
71
+ command("commit", ["-m", message])
72
+ end
73
+
74
+ def initialize
75
+ @system_git = "git"
76
+ end
77
+
78
+ def execute(cmd, opts = [])
79
+ opts = prepare_opts(opts)
80
+ git_cmd = "#{@system_git} #{cmd} #{opts}"
81
+
82
+ `#{git_cmd}`.chomp.strip
83
+ end
84
+
85
+ private
86
+
87
+ # NOTE: Taken from ruby git gem
88
+ def escape(str = "")
89
+ str = str.to_s
90
+ return "'#{str.gsub("\'", '\'"\'"\'')}'" if /mingw|mswin/.match?(RUBY_PLATFORM)
91
+
92
+ # Keeping the old escape format for windows users
93
+ escaped = str.gsub("\'", "\'\\\'\'")
94
+ %("#{escaped}")
95
+ end
96
+
97
+ def prepare_opts(opts = [])
98
+ [opts].flatten.map { |s| escape(s) }.join(" ")
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,7 @@
1
+ require_relative "git/version"
2
+ require_relative "git/wrapper"
3
+
4
+ module StoryBranch
5
+ module Git
6
+ end
7
+ end
@@ -1,14 +1,14 @@
1
- require_relative "lib/story_branch/git_wrapper/version"
1
+ require_relative "lib/story_branch/git/version"
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "story_branch-git_wrapper"
5
- spec.version = StoryBranch::GitWrapper::VERSION
5
+ spec.version = StoryBranch::Git::VERSION
6
6
  spec.authors = ["Rui Baltazar"]
7
7
  spec.email = ["rui.p.baltazar@gmail.com"]
8
8
 
9
- spec.summary = "GitWrapper to help running git commands with direct system calls"
9
+ spec.summary = "Git::Wrapper to help running git commands with direct system calls"
10
10
  spec.description = <<~DESCRIPTION
11
- GitWrapper provides a series of commands that wrap actual git commands and processes the output
11
+ Git::Wrapper provides a series of commands that wrap actual git commands and processes the output
12
12
  DESCRIPTION
13
13
  spec.homepage = "https://github.com/story-branch/git_wrapper"
14
14
  spec.license = "MIT"
@@ -31,5 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
32
  spec.require_paths = ["lib"]
33
33
 
34
+ spec.add_development_dependency "minitest", "~> 5.16"
35
+ spec.add_development_dependency "minitest-reporters", "~> 1.5"
34
36
  spec.add_development_dependency "standard", "~> 1.15"
35
37
  end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: story_branch-git_wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rui Baltazar
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-19 00:00:00.000000000 Z
11
+ date: 2022-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest-reporters
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.5'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: standard
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -24,7 +52,7 @@ dependencies:
24
52
  - - "~>"
25
53
  - !ruby/object:Gem::Version
26
54
  version: '1.15'
27
- description: 'GitWrapper provides a series of commands that wrap actual git commands
55
+ description: 'Git::Wrapper provides a series of commands that wrap actual git commands
28
56
  and processes the output
29
57
 
30
58
  '
@@ -34,18 +62,22 @@ executables: []
34
62
  extensions: []
35
63
  extra_rdoc_files: []
36
64
  files:
65
+ - ".github/workflows/standard.yml"
66
+ - ".github/workflows/tests.yml"
37
67
  - ".gitignore"
38
68
  - ".travis.yml"
39
69
  - ".vscode/settings.json"
40
70
  - CODE_OF_CONDUCT.md
41
71
  - Gemfile
72
+ - Gemfile.lock
42
73
  - LICENSE.txt
43
74
  - README.md
44
75
  - Rakefile
45
76
  - bin/console
46
77
  - bin/setup
47
- - lib/story_branch/git_wrapper.rb
48
- - lib/story_branch/git_wrapper/version.rb
78
+ - lib/story_branch/git.rb
79
+ - lib/story_branch/git/version.rb
80
+ - lib/story_branch/git/wrapper.rb
49
81
  - story_branch-git_wrapper.gemspec
50
82
  homepage: https://github.com/story-branch/git_wrapper
51
83
  licenses:
@@ -74,5 +106,5 @@ requirements: []
74
106
  rubygems_version: 3.1.6
75
107
  signing_key:
76
108
  specification_version: 4
77
- summary: GitWrapper to help running git commands with direct system calls
109
+ summary: Git::Wrapper to help running git commands with direct system calls
78
110
  test_files: []
@@ -1,5 +0,0 @@
1
- module StoryBranch
2
- module GitWrapper
3
- VERSION = "0.0.1"
4
- end
5
- end
@@ -1,99 +0,0 @@
1
- require "story_branch/git_wrapper/version"
2
-
3
- module StoryBranch
4
- module GitWrapper
5
- class Error < StandardError; end
6
-
7
- STATI_MATCHERS = {
8
- modified_rx: /^ M (.*)/,
9
- untracked_rx: /^\?\? (.*)/,
10
- staged_rx: /^M (.*)/,
11
- added_rx: /^A (.*)/
12
- }.freeze
13
-
14
- def self.command(cmd, opts = [])
15
- gw = new
16
- gw.call(cmd, opts)
17
- end
18
-
19
- def self.command_lines(cmd, opts = [])
20
- result = command(cmd, opts)
21
- lines = result.split("\n")
22
- lines.each(&:strip!)
23
- end
24
-
25
- def self.branch_names
26
- # NOTE: Regex matcher for cases as:
27
- # remotes/origin/allow.... <- remote branch (remove 'remotes/origin')
28
- # * allow.... <- * indicates current branch (remove '* ')
29
- # allow <- local branch (do nothing)
30
- regex = %r{(^remotes/.*/|\s|[*])}
31
- all_branches.map do |line|
32
- line = line.sub(regex, "")
33
- line
34
- end
35
- end
36
-
37
- def self.current_branch
38
- current_branch_line = all_branches.detect do |line|
39
- line.match(/\*/)
40
- end
41
- current_branch_line.tr("*", " ").strip
42
- end
43
-
44
- def self.all_branches
45
- command_lines("branch", "-a")
46
- end
47
-
48
- def self.create_branch(name)
49
- command("checkout", ["-b", name])
50
- end
51
-
52
- def self.status
53
- g_status = command_lines("status", "-s")
54
- return nil if g_status.empty?
55
-
56
- {
57
- modified: status_collect(g_status, STATI_MATCHERS[:modified_rx]),
58
- untracked: status_collect(g_status, STATI_MATCHERS[:untracked_rx]),
59
- added: status_collect(g_status, STATI_MATCHERS[:added_rx]),
60
- staged: status_collect(g_status, STATI_MATCHERS[:staged_rx])
61
- }
62
- end
63
-
64
- def self.status_collect(status, regex)
65
- chosen_stati = status.select { |e| e.match(regex) }
66
- chosen_stati.map { |e| e.match(regex)[1] }
67
- end
68
-
69
- def self.commit(message)
70
- command("commit", ["-m", message])
71
- end
72
-
73
- def initialize
74
- @system_git = "git"
75
- end
76
-
77
- def call(cmd, opts = [])
78
- opts = prepare_opts(opts)
79
- git_cmd = "#{@system_git} #{cmd} #{opts}"
80
- `#{git_cmd}`.chomp.strip
81
- end
82
-
83
- private
84
-
85
- # NOTE: Taken from ruby git gem
86
- def escape(str = "")
87
- str = str.to_s
88
- return "'#{str.gsub("\'", '\'"\'"\'')}'" if /mingw|mswin/.match?(RUBY_PLATFORM)
89
-
90
- # Keeping the old escape format for windows users
91
- escaped = str.gsub("\'", "\'\\\'\'")
92
- %("#{escaped}")
93
- end
94
-
95
- def prepare_opts(opts = [])
96
- [opts].flatten.map { |s| escape(s) }.join(" ")
97
- end
98
- end
99
- end