rubyhub 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 43de5786ab6f492b5ee0580abfb37be453dcf4c30b0ec34f89cd804bfe96b598
4
+ data.tar.gz: fb4782dd040e9c44141ecc7d54096c5f945c4085991cfef930ca66d5e7ccd304
5
+ SHA512:
6
+ metadata.gz: a8479ae6c6d8c8134802d73f4570478fe791155d88226e52e907a27fc0a8fab5a73f10c952971f17eabf001e0758ee7f3989ab1eaf5d2a23909a57189c3b0460
7
+ data.tar.gz: 812e7fbe2a633ec31136d9ee96f1e97e4afc1c9862ed75962dfbd1cfe48c6a34d9df658d0b0db434ea9c8a66dc98084f15f83b437baea4c6101b84223d75c583
data/.fasterer.yml ADDED
@@ -0,0 +1,19 @@
1
+ speedups:
2
+ rescue_vs_respond_to: true
3
+ module_eval: true
4
+ shuffle_first_vs_sample: true
5
+ for_loop_vs_each: true
6
+ each_with_index_vs_while: false
7
+ map_flatten_vs_flat_map: true
8
+ reverse_each_vs_reverse_each: true
9
+ select_first_vs_detect: true
10
+ sort_vs_sort_by: true
11
+ fetch_with_argument_vs_block: true
12
+ keys_each_vs_each_key: true
13
+ hash_merge_bang_vs_hash_brackets: true
14
+ block_vs_symbol_to_proc: true
15
+ proc_call_vs_yield: true
16
+ gsub_vs_tr: true
17
+ select_last_vs_reverse_detect: true
18
+ getter_vs_attr_reader: true
19
+ setter_vs_attr_writer: true
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ .history
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
13
+
14
+ .rubyhub.yml
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,12 @@
1
+ require:
2
+ - rubocop-performance
3
+ - rubocop-rspec
4
+
5
+ Metrics/LineLength:
6
+ Max: 120
7
+
8
+ Style/Documentation:
9
+ Enabled: false
10
+
11
+ Style/FrozenStringLiteralComment:
12
+ Enabled: false
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,73 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ rubyhub (0.1.0)
5
+ thor
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ ast (2.4.0)
11
+ coderay (1.1.2)
12
+ colorize (0.8.1)
13
+ diff-lcs (1.3)
14
+ fasterer (0.8.1)
15
+ colorize (~> 0.7)
16
+ ruby_parser (>= 3.14.1)
17
+ jaro_winkler (1.5.4)
18
+ method_source (0.9.2)
19
+ parallel (1.19.1)
20
+ parser (2.6.5.0)
21
+ ast (~> 2.4.0)
22
+ pry (0.12.2)
23
+ coderay (~> 1.1.0)
24
+ method_source (~> 0.9.0)
25
+ rainbow (3.0.0)
26
+ rake (13.0.1)
27
+ rspec (3.9.0)
28
+ rspec-core (~> 3.9.0)
29
+ rspec-expectations (~> 3.9.0)
30
+ rspec-mocks (~> 3.9.0)
31
+ rspec-core (3.9.0)
32
+ rspec-support (~> 3.9.0)
33
+ rspec-expectations (3.9.0)
34
+ diff-lcs (>= 1.2.0, < 2.0)
35
+ rspec-support (~> 3.9.0)
36
+ rspec-mocks (3.9.0)
37
+ diff-lcs (>= 1.2.0, < 2.0)
38
+ rspec-support (~> 3.9.0)
39
+ rspec-support (3.9.0)
40
+ rubocop (0.77.0)
41
+ jaro_winkler (~> 1.5.1)
42
+ parallel (~> 1.10)
43
+ parser (>= 2.6)
44
+ rainbow (>= 2.2.2, < 4.0)
45
+ ruby-progressbar (~> 1.7)
46
+ unicode-display_width (>= 1.4.0, < 1.7)
47
+ rubocop-performance (1.5.1)
48
+ rubocop (>= 0.71.0)
49
+ rubocop-rspec (1.37.0)
50
+ rubocop (>= 0.68.1)
51
+ ruby-progressbar (1.10.1)
52
+ ruby_parser (3.14.1)
53
+ sexp_processor (~> 4.9)
54
+ sexp_processor (4.13.0)
55
+ thor (1.0.0)
56
+ unicode-display_width (1.6.0)
57
+
58
+ PLATFORMS
59
+ ruby
60
+
61
+ DEPENDENCIES
62
+ bundler
63
+ fasterer
64
+ pry
65
+ rake
66
+ rspec
67
+ rubocop
68
+ rubocop-performance
69
+ rubocop-rspec
70
+ rubyhub!
71
+
72
+ BUNDLED WITH
73
+ 2.0.2
data/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # Rubyhub
2
+
3
+ Rubyhub allows you to create pull requests faster with all those labels, assignees and reviewers you always had to put manually.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'rubyhub'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install rubyhub
20
+
21
+ ## Usage
22
+
23
+ 1. Create `.rubyhub.yml` file with your own properties. Don't forget to add it to gitignore.
24
+ Example config:
25
+ ```yaml
26
+ ---
27
+ base_branch: master
28
+ label: needs review
29
+ assignees:
30
+ - any
31
+ - github
32
+ - assignee
33
+ - you
34
+ - want
35
+ description_main_body: describe your changes here
36
+ jira_base_url: https://sample.atlassian.net/browse/
37
+ ```
38
+
39
+ `description_main_body` and `jira_base_url` are optional.
40
+
41
+ 2. Run `bin/rubyhub`
42
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'rubyhub'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require 'pry'
11
+ # Pry.start
12
+
13
+ require 'irb'
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/exe/rubyhub ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubyhub'
4
+ require 'rubyhub/cli'
5
+
6
+ Rubyhub::CLI.start(ARGV)
@@ -0,0 +1,20 @@
1
+ require 'thor'
2
+
3
+ module Rubyhub
4
+ class CLI < Thor
5
+ desc 'init', 'Install basic configuration'
6
+ def init(*_args)
7
+ Operations::Configuration::Setup.call
8
+ end
9
+
10
+ desc 'pr:create', 'Create Pull Request'
11
+ method_option :template, aliases: '-t', type: :string
12
+ def create(*_args)
13
+ Operations::PullRequest::Create.call(options)
14
+ end
15
+
16
+ def self.exit_on_failure?
17
+ true
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,32 @@
1
+ require 'rubyhub/errors'
2
+ require 'singleton'
3
+ require 'yaml'
4
+ require 'pry'
5
+
6
+ module Rubyhub
7
+ class Configuration
8
+ include Singleton
9
+
10
+ CONFIG_PATH = '.rubyhub.yml'.freeze
11
+
12
+ def initialize
13
+ @options = self.class.exists? ? load_from_file : {}
14
+ end
15
+
16
+ def to_h
17
+ @options.to_h
18
+ end
19
+
20
+ class << self
21
+ def exists?
22
+ File.exist?(CONFIG_PATH)
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def load_from_file
29
+ DeepSymbolizeKeysHelper.symbolize_recursive(YAML.load_file(CONFIG_PATH) || {})
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,13 @@
1
+ module Rubyhub
2
+ class ConfigFileDoesNotExistError < StandardError
3
+ def message
4
+ '.rubyhub.yml is not found. Please, provide it.'
5
+ end
6
+ end
7
+
8
+ class IncorrectTemplateError < StandardError
9
+ def message
10
+ 'You haven\'t pass the template name or template name not present in config file'
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,36 @@
1
+ require 'fileutils'
2
+
3
+ module Rubyhub
4
+ module Operations
5
+ module Configuration
6
+ class Setup
7
+ TEMPLATE_PATH = 'lib/rubyhub/config/templates/.rubyhub.yml'.freeze
8
+
9
+ class << self
10
+ def call
11
+ if Rubyhub::Configuration.exists?
12
+ puts 'Config already exists!'
13
+ else
14
+ initialize_config
15
+ puts 'Config successfully installed!'
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def initialize_config
22
+ FileUtils.cp full_template_path, target_path, preserve: true, verbose: false
23
+ end
24
+
25
+ def full_template_path
26
+ File.join(Rubyhub.root_path, TEMPLATE_PATH)
27
+ end
28
+
29
+ def target_path
30
+ Dir.pwd
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,26 @@
1
+ require 'pry'
2
+ module Rubyhub
3
+ module Operations
4
+ module PullRequest
5
+ class Create
6
+ class << self
7
+ def call(options)
8
+ @template = options[:template]
9
+ raise ConfigFileDoesNotExistError unless Rubyhub::Configuration.exists?
10
+ raise IncorrectTemplateError if !@template || !data || data.empty?
11
+
12
+ Rubyhub::PullRequest.new(data).create!
13
+ end
14
+
15
+ private
16
+
17
+ attr_reader :template
18
+
19
+ def data
20
+ @data ||= Rubyhub::Configuration.instance.to_h.dig(:template, @template.to_sym)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,90 @@
1
+ module Rubyhub
2
+ class PullRequest
3
+ ATTRIBUTES = %i[base_branch labels assignees reviewers description_main_body jira_base_url push open].freeze
4
+
5
+ def initialize(options)
6
+ assign_attributes(options)
7
+ end
8
+
9
+ def to_command
10
+ build_base_query
11
+ add_branch if @base_branch
12
+ add_labels if @labels&.any?
13
+ add_assignees if @assignees&.any?
14
+ add_reviewers if @reviewers&.any?
15
+ add_push_setting if @push
16
+ add_open_setting if @open
17
+
18
+ @query
19
+ end
20
+
21
+ def create!
22
+ system(to_command)
23
+ end
24
+
25
+ private
26
+
27
+ def assign_attributes(options)
28
+ ATTRIBUTES.each { |attr| instance_variable_set(:"@#{attr}", options[:attr]) }
29
+ end
30
+
31
+ def build_base_query
32
+ @query = 'hub pull-request'
33
+ end
34
+
35
+ def add_branch
36
+ @query << " -b '#{@base_branch}'"
37
+ end
38
+
39
+ def add_labels
40
+ @query << " -l '#{@labels.join(',')}'"
41
+ end
42
+
43
+ def add_assignees
44
+ @query << " -a '#{@assignees.join(',')}'"
45
+ end
46
+
47
+ def add_reviewers
48
+ @query << " -r '#{@reviewers.join(',')}'"
49
+ end
50
+
51
+ def add_push_settings
52
+ @query << ' --push -f'
53
+ end
54
+
55
+ def add_open_settings
56
+ @query << ' --open'
57
+ end
58
+
59
+ def add_message
60
+ @query << " -m '#{message}'"
61
+ end
62
+
63
+ def branch
64
+ @branch ||= `git rev-parse --symbolic-full-name --abbrev-ref HEAD`
65
+ end
66
+
67
+ def parsed_branch
68
+ @parsed_branch ||= branch.split('/')
69
+ end
70
+
71
+ def branch_type
72
+ parsed_branch[0].capitalize
73
+ end
74
+
75
+ def branch_name
76
+ parsed_branch[1].to_s.upcase
77
+ end
78
+
79
+ def jira_ticket
80
+ [data[:jira_base_url], branch_name].join
81
+ end
82
+
83
+ def message
84
+ description = "#{branch_type} | #{branch_name.strip}\n\n"
85
+ description << "JIRA ticket - #{jira_ticket}" if data[:jira_base_url]
86
+ description << @description_main_body if @description_main_body
87
+ description
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,25 @@
1
+ module DeepSymbolizeKeysHelper
2
+ extend self
3
+
4
+ def symbolize_recursive(hash)
5
+ {}.tap do |h|
6
+ hash.each { |key, value| h[key.to_sym] = transform(value) }
7
+ end
8
+ end
9
+
10
+ private
11
+
12
+ def transform(thing)
13
+ case thing
14
+ when Hash; symbolize_recursive(thing)
15
+ when Array; thing.map { |v| transform(v) }
16
+ else; thing
17
+ end
18
+ end
19
+
20
+ refine Hash do
21
+ def deep_symbolize_keys
22
+ DeepSymbolizeKeysHelper.symbolize_recursive(self)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ module Rubyhub
2
+ VERSION = '0.1.0'.freeze
3
+ end
data/lib/rubyhub.rb ADDED
@@ -0,0 +1,15 @@
1
+ require 'rubyhub/utils/deep_symbolize_keys_helper'
2
+
3
+ using DeepSymbolizeKeysHelper
4
+
5
+ require 'rubyhub/configuration'
6
+ require 'rubyhub/pull_request'
7
+
8
+ require 'rubyhub/operations/configuration/setup'
9
+ require 'rubyhub/operations/pull_request/create'
10
+
11
+ module Rubyhub
12
+ def self.root_path
13
+ File.dirname(__dir__)
14
+ end
15
+ end
data/rubyhub.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ lib = File.expand_path('lib', __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'rubyhub/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'rubyhub'
7
+ spec.version = Rubyhub::VERSION
8
+ spec.authors = ['Denis Zemlianoy', 'Vsevolod Voloshyn']
9
+ spec.email = ['']
10
+
11
+ spec.summary = "Tool for faster creation of GitHub's Pull Requests"
12
+ spec.description = spec.summary
13
+ spec.homepage = 'https://github.com'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
17
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ end
19
+ spec.bindir = 'exe'
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ['lib']
22
+
23
+ spec.add_dependency 'thor'
24
+
25
+ spec.add_development_dependency 'bundler'
26
+ spec.add_development_dependency 'fasterer'
27
+ spec.add_development_dependency 'pry'
28
+ spec.add_development_dependency 'rake'
29
+ spec.add_development_dependency 'rspec'
30
+ spec.add_development_dependency 'rubocop'
31
+ spec.add_development_dependency 'rubocop-performance'
32
+ spec.add_development_dependency 'rubocop-rspec'
33
+ end
metadata ADDED
@@ -0,0 +1,193 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubyhub
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Denis Zemlianoy
8
+ - Vsevolod Voloshyn
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2019-12-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: thor
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: bundler
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: fasterer
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: pry
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rake
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: rspec
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rubocop
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rubocop-performance
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rubocop-rspec
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ description: Tool for faster creation of GitHub's Pull Requests
141
+ email:
142
+ - ''
143
+ executables:
144
+ - rubyhub
145
+ extensions: []
146
+ extra_rdoc_files: []
147
+ files:
148
+ - ".fasterer.yml"
149
+ - ".gitignore"
150
+ - ".rspec"
151
+ - ".rubocop.yml"
152
+ - Gemfile
153
+ - Gemfile.lock
154
+ - README.md
155
+ - Rakefile
156
+ - bin/console
157
+ - bin/setup
158
+ - exe/rubyhub
159
+ - lib/rubyhub.rb
160
+ - lib/rubyhub/cli.rb
161
+ - lib/rubyhub/configuration.rb
162
+ - lib/rubyhub/errors.rb
163
+ - lib/rubyhub/operations/configuration/setup.rb
164
+ - lib/rubyhub/operations/pull_request/create.rb
165
+ - lib/rubyhub/pull_request.rb
166
+ - lib/rubyhub/utils/deep_symbolize_keys_helper.rb
167
+ - lib/rubyhub/version.rb
168
+ - rubyhub.gemspec
169
+ homepage: https://github.com
170
+ licenses:
171
+ - MIT
172
+ metadata: {}
173
+ post_install_message:
174
+ rdoc_options: []
175
+ require_paths:
176
+ - lib
177
+ required_ruby_version: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ required_rubygems_version: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ requirements: []
188
+ rubyforge_project:
189
+ rubygems_version: 2.7.8
190
+ signing_key:
191
+ specification_version: 4
192
+ summary: Tool for faster creation of GitHub's Pull Requests
193
+ test_files: []