purr-pr 0.1.0 → 0.1.4

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
2
  SHA256:
3
- metadata.gz: a65c40e37fd950cf219bacece2cdc51969b809c2862d5d36fb78d5fdabc5d951
4
- data.tar.gz: 2466ebf01d0d50a92dab623517a7e905d10d7285041ed71118d05aae0fb93c8f
3
+ metadata.gz: 026f27316039a8102929a1346d6ccdd17e819bd8257799e418612438941d93f5
4
+ data.tar.gz: 17e9f3e088efc7e7577997880fb49e175ca4c7eca761ef84a6c0de6ec954f5a9
5
5
  SHA512:
6
- metadata.gz: df76de7cfeb230d9b4b167b3fdcdd26b5db22c55c505921eb1b93ac7368d9ff0b2f2c17b4d73fd1a4568e329b5365903d536c00f518ae7f7f126fdb487de972e
7
- data.tar.gz: ff0708b5124afc6387e1bef121526feb58b7e1f7d767b3a45230c5f1e773aa5f10eb0a723f17a28a38425038c0ca456ffc007682f929c559539d3af362ac24c9
6
+ metadata.gz: 570c260277fb207740070722bf0b0f164c965e3902128c9c3f0ab2959d76d1f949de39820a145545adf6019104798213451599c78c03b22839ddef2e58a3fe6c
7
+ data.tar.gz: f1cb51100aa7cdc84ad51dd06257a9c61e2a5f6ddcc3fd13402f5db1c3929631a0fdf800c60b697ed229ae75d0587d5d9c4b5654ad5df7433485b0d33a77add6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- purr (0.1.0)
4
+ purr-pr (0.1.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -33,7 +33,7 @@ PLATFORMS
33
33
  DEPENDENCIES
34
34
  bundler (~> 2.0)
35
35
  pry
36
- purr!
36
+ purr-pr!
37
37
  rake (~> 13.0)
38
38
  rspec (~> 3.0)
39
39
 
data/bin/console CHANGED
@@ -1,15 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require "bundler/setup"
5
- require "purr"
4
+ require 'bundler/setup'
5
+ require 'purr_pr'
6
6
 
7
- # You can add fixtures and/or initialization code here to make experimenting
8
- # with your gem easier. You can also use a different console, if you like.
9
-
10
- # (If you use this, don't forget to add pry to your Gemfile!)
11
- # require "pry"
12
- # Pry.start
13
-
14
- require "irb"
15
- IRB.start(__FILE__)
7
+ require 'pry'
8
+ Pry.start
data/bin/purr CHANGED
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require 'purr'
4
+ require 'purr_pr'
5
5
 
6
- puts 'foo'
7
- # ARGV[0]
6
+ PurrPr.new.create
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'io/console'
4
4
 
5
- module Purr
5
+ class PurrPr
6
6
  module Actions
7
7
  def ask(message, default: nil, multiline: false, newline: true)
8
8
  puts(message)
@@ -35,7 +35,7 @@ module Purr
35
35
  end
36
36
 
37
37
  def interrupted?
38
- @interrupted
38
+ !!@interrupted
39
39
  end
40
40
 
41
41
  private
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ostruct'
4
+
5
+ require_relative 'editor.rb'
6
+
7
+ class PurrPr
8
+ class Config
9
+ attr_reader :title, :body, :assignee
10
+
11
+ def initialize
12
+ # the defaults if the setter is not called
13
+ @maintainer_edit = true
14
+ end
15
+
16
+ def title(&block)
17
+ @title = edit(:title, &block)
18
+ end
19
+
20
+ def body(&block)
21
+ @body = edit(:body, &block)
22
+ end
23
+
24
+ def assignee(assignee)
25
+ @assignee = assignee
26
+ end
27
+
28
+ def self_assign
29
+ assignee('@me')
30
+ end
31
+
32
+ def maintainer_edit(enabled)
33
+ @maintainer_edit = enabled
34
+ end
35
+
36
+ def no_maintainer_edit
37
+ maintainer_edit(false)
38
+ end
39
+
40
+ def base(base_branch)
41
+ @base = base_branch
42
+ end
43
+
44
+ def draft(enabled = true)
45
+ @draft = enabled
46
+ end
47
+
48
+ def labels(labels)
49
+ @labels = labels
50
+ end
51
+
52
+ def reviewers(reviewers)
53
+ @reviewers = reviewers
54
+ end
55
+
56
+ def values
57
+ OpenStruct.new(
58
+ title: @title,
59
+ body: @body,
60
+ assignee: @assignee,
61
+ base: @base,
62
+ draft: @draft,
63
+ reviewers: @reviewers,
64
+ labels: @labels,
65
+ maintainer_edit: @maintainer_edit
66
+ )
67
+ end
68
+
69
+ private
70
+
71
+ def edit(subject, &block)
72
+ editor = Editor.new(subject)
73
+
74
+ catch(:abort) { editor.evaluate(&block) }
75
+
76
+ interrupt if editor.interrupted?
77
+
78
+ editor.content
79
+ end
80
+
81
+ def interrupt
82
+ puts 'aborted'
83
+ exit
84
+ end
85
+ end
86
+ end
@@ -5,7 +5,7 @@ require 'securerandom'
5
5
  require_relative 'text_objects'
6
6
  require_relative 'actions'
7
7
 
8
- module Purr
8
+ class PurrPr
9
9
  class Editor
10
10
  include TextObjects
11
11
  include Actions
@@ -67,9 +67,9 @@ module Purr
67
67
  ask_yn(text, decline: -> { interrupt })
68
68
  end
69
69
  alias_method :confirmation, :confirm
70
- end
71
70
 
72
- def use_template(path = '.github/pull_request_template.md')
73
- @content = read_file(path)
71
+ def use_template(path = '.github/pull_request_template.md')
72
+ @content = read_file(path)
73
+ end
74
74
  end
75
75
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Purr
3
+ class PurrPr
4
4
  module TextObjects
5
5
  def newline(count = 1)
6
6
  "\n" * count
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Purr
4
- VERSION = "0.1.0"
3
+ class PurrPr
4
+ VERSION = '0.1.4'
5
5
  end
data/lib/purr_pr.rb ADDED
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'purr_pr/version'
4
+ require_relative 'purr_pr/editor.rb'
5
+ require_relative 'purr_pr/config.rb'
6
+
7
+ class PurrPr
8
+ attr_reader :config_file_path, :config
9
+
10
+ DEFAULT_CONFIG_FILE_PATH = 'purr.rb'
11
+
12
+ def initialize(config_file_path = DEFAULT_CONFIG_FILE_PATH)
13
+ @config_file_path = config_file_path
14
+ @config = Config.new
15
+ end
16
+
17
+ def create
18
+ config.instance_eval(config_code)
19
+
20
+ command = 'gh pr create'
21
+ command += " --title '#{config.values.title}'" if config.values.title
22
+ command += " --body '#{config.values.body}'"
23
+ command += " --assignee #{config.values.assignee}" if config.values.assignee
24
+ command += " --base #{config.values.base}" if config.values.base
25
+ command += ' --draft' if config.values.draft
26
+ command += ' --no-maintainer-edit' unless config.values.maintainer_edit
27
+
28
+ config.values.labels.each do |label|
29
+ command += " --label #{label}"
30
+ end
31
+
32
+ config.values.reviewers.each do |reviewer|
33
+ command += " --reviewer #{reviewer}"
34
+ end
35
+
36
+ # The later arguments will override the earlier ones,
37
+ # e.g. after `gh pr create --title a --title b` the title will equal 'b',
38
+ # so explicit options will override the config
39
+ command += ARGV.join(' ').prepend(' ')
40
+
41
+ system(command)
42
+ end
43
+
44
+ private
45
+
46
+ def config_code
47
+ File.read(config_file_path)
48
+ end
49
+ end
data/purr_pr.gemspec ADDED
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/purr_pr/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'purr-pr'
7
+ spec.version = PurrPr::VERSION
8
+ spec.author = 'Alexander Teslovskiy'
9
+ spec.email = 'artoriousso@gmail.com'
10
+ spec.summary = 'A CLI pull request formatter'
11
+ spec.description = 'Purr PR is a tool to automate pull request formatting via GitHub CLI'
12
+ spec.homepage = 'https://github.com/ARtoriouSs/purr-pr'
13
+ spec.license = 'MIT'
14
+
15
+ spec.metadata = {
16
+ 'documentation_uri' => 'https://github.com/ARtoriouSs/purr-pr/blob/master/README.md',
17
+ 'bug_tracker_uri' => 'https://github.com/ARtoriouSs/purr-pr/issues',
18
+ 'source_code_uri' => 'https://github.com/ARtoriouSs/purr-pr',
19
+ 'changelog_uri' => 'https://github.com/ARtoriouSs/purr-pr/blob/master/CHANGELOG.md',
20
+ 'wiki_uri' => 'https://github.com/ARtoriouSs/purr-pr/wiki',
21
+ 'homepage_uri' => 'https://github.com/ARtoriouSs/purr-pr'
22
+ }
23
+
24
+ spec.require_paths = ['lib']
25
+ spec.bindir = 'bin'
26
+ spec.executables << 'purr'
27
+
28
+ spec.files = `git ls-files -z`.split("\x0").reject { |file| file.match(%r{^spec/}) }
29
+ spec.test_files = `git ls-files -- spec`.split("\n")
30
+
31
+ spec.add_development_dependency 'bundler', '~> 2.0'
32
+ spec.add_development_dependency 'rake', '~> 13.0'
33
+ spec.add_development_dependency 'rspec', '~> 3.0'
34
+ spec.add_development_dependency 'pry'
35
+ end
data/spec/purr_spec.rb CHANGED
@@ -1,11 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RSpec.describe Purr do
3
+ describe PurrPr do
4
4
  it "has a version number" do
5
- expect(Purr::VERSION).not_to be nil
6
- end
7
-
8
- it "does something useful" do
9
- expect(false).to eq(true)
5
+ expect(PurrPr::VERSION).not_to be nil
10
6
  end
11
7
  end
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "purr"
3
+ require "purr_pr"
4
4
 
5
5
  RSpec.configure do |config|
6
- # Enable flags like --only-failures and --next-failure
7
6
  config.example_status_persistence_file_path = ".rspec_status"
8
-
9
- # Disable RSpec exposing methods globally on `Module` and `main`
10
7
  config.disable_monkey_patching!
11
8
 
12
9
  config.expect_with :rspec do |c|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: purr-pr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Teslovskiy
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-09 00:00:00.000000000 Z
11
+ date: 2022-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,7 +66,7 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- description: ''
69
+ description: Purr PR is a tool to automate pull request formatting via GitHub CLI
70
70
  email: artoriousso@gmail.com
71
71
  executables:
72
72
  - purr
@@ -86,25 +86,26 @@ files:
86
86
  - bin/console
87
87
  - bin/purr
88
88
  - bin/setup
89
- - lib/purr.rb
90
- - lib/purr/actions.rb
91
- - lib/purr/editor.rb
92
- - lib/purr/text_objects.rb
93
- - lib/purr/version.rb
94
- - purr.gemspec
89
+ - lib/purr_pr.rb
90
+ - lib/purr_pr/actions.rb
91
+ - lib/purr_pr/config.rb
92
+ - lib/purr_pr/editor.rb
93
+ - lib/purr_pr/text_objects.rb
94
+ - lib/purr_pr/version.rb
95
+ - purr_pr.gemspec
95
96
  - spec/purr_spec.rb
96
97
  - spec/spec_helper.rb
97
- homepage: https://github.com/ARtoriouSs/purr
98
+ homepage: https://github.com/ARtoriouSs/purr-pr
98
99
  licenses:
99
100
  - MIT
100
101
  metadata:
101
- documentation_uri: https://github.com/ARtoriouSs/purr/blob/master/README.md
102
- bug_tracker_uri: https://github.com/ARtoriouSs/purr/issues
103
- source_code_uri: https://github.com/ARtoriouSs/purr
104
- changelog_uri: https://github.com/ARtoriouSs/purr/blob/master/CHANGELOG.md
105
- wiki_uri: https://github.com/ARtoriouSs/purr/wiki
106
- homepage_uri: https://github.com/ARtoriouSs/purr
107
- post_install_message:
102
+ documentation_uri: https://github.com/ARtoriouSs/purr-pr/blob/master/README.md
103
+ bug_tracker_uri: https://github.com/ARtoriouSs/purr-pr/issues
104
+ source_code_uri: https://github.com/ARtoriouSs/purr-pr
105
+ changelog_uri: https://github.com/ARtoriouSs/purr-pr/blob/master/CHANGELOG.md
106
+ wiki_uri: https://github.com/ARtoriouSs/purr-pr/wiki
107
+ homepage_uri: https://github.com/ARtoriouSs/purr-pr
108
+ post_install_message:
108
109
  rdoc_options: []
109
110
  require_paths:
110
111
  - lib
@@ -119,10 +120,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
120
  - !ruby/object:Gem::Version
120
121
  version: '0'
121
122
  requirements: []
122
- rubygems_version: 3.1.2
123
- signing_key:
123
+ rubygems_version: 3.2.3
124
+ signing_key:
124
125
  specification_version: 4
125
- summary: ''
126
+ summary: A CLI pull request formatter
126
127
  test_files:
127
128
  - spec/purr_spec.rb
128
129
  - spec/spec_helper.rb
data/lib/purr.rb DELETED
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'purr/version'
4
- require_relative 'purr/editor.rb'
5
-
6
- require 'pry' # TODO
7
-
8
- module Purr
9
- def self.title(&block)
10
- @title = edit(:title, &block)
11
- end
12
-
13
- def self.body(&block)
14
- @body = edit(:body, &block)
15
- end
16
-
17
- def self.assignee(assignee)
18
- @assignee = assignee
19
- end
20
-
21
- def self.self_assign
22
- assignee('@me')
23
- end
24
-
25
- private
26
-
27
- def edit(subject, &block)
28
- editor = Editor.new(subject)
29
-
30
- catch(:abort) { editor.evaluate(&block) }
31
-
32
- interrupt if editor.interrupted?
33
-
34
- editor.content
35
- end
36
-
37
- def interrupt
38
- puts 'aborted'
39
- exit
40
- end
41
- end
data/purr.gemspec DELETED
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- lib = File.expand_path('../lib', __FILE__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'purr/version'
6
-
7
- require_relative "lib/purr/version"
8
-
9
- Gem::Specification.new do |spec|
10
- spec.name = 'purr-pr'
11
- spec.version = Purr::VERSION
12
- spec.author = 'Alexander Teslovskiy'
13
- spec.email = 'artoriousso@gmail.com'
14
- spec.summary = ''
15
- spec.description = ''
16
- spec.homepage = 'https://github.com/ARtoriouSs/purr'
17
- spec.license = 'MIT'
18
-
19
- spec.metadata = {
20
- 'documentation_uri' => 'https://github.com/ARtoriouSs/purr/blob/master/README.md',
21
- 'bug_tracker_uri' => 'https://github.com/ARtoriouSs/purr/issues',
22
- 'source_code_uri' => 'https://github.com/ARtoriouSs/purr',
23
- 'changelog_uri' => 'https://github.com/ARtoriouSs/purr/blob/master/CHANGELOG.md',
24
- 'wiki_uri' => 'https://github.com/ARtoriouSs/purr/wiki',
25
- 'homepage_uri' => 'https://github.com/ARtoriouSs/purr'
26
- }
27
-
28
- spec.require_paths = ['lib']
29
- spec.bindir = 'bin'
30
-
31
- spec.files = `git ls-files -z`.split("\x0").reject { |file| file.match(%r{^spec/}) }
32
- spec.test_files = `git ls-files -- spec`.split("\n")
33
- spec.executables << 'purr'
34
-
35
- spec.add_development_dependency 'bundler', '~> 2.0'
36
- spec.add_development_dependency 'rake', '~> 13.0'
37
- spec.add_development_dependency 'rspec', '~> 3.0'
38
- spec.add_development_dependency 'pry'
39
- end