pry-jist 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ccf02ebbd1ef8b402e5a0e6256ded5ecb4596d1e
4
+ data.tar.gz: 2ba17ce2a154dd997a845a65fa0f7ef091918313
5
+ SHA512:
6
+ metadata.gz: f057736e4aa74137eeb4a0bc5cd560a8266d56b8394a4ff40cdb32cd07e317335f04f148393dace1ab17ce88c906a1fc0194e7de637e376f91817c402db1770f
7
+ data.tar.gz: 2f4bb22696dbdfd6de981ea6c863329347f9f12e2ba89e274be63001e26ba2d32c5df28e2739796c6453ce10668059be02b22e4711efbb2db8b50f2561fb603d
@@ -0,0 +1,4 @@
1
+ require 'pry'
2
+
3
+ require 'pry-jist/version'
4
+ require 'pry-jist/gist'
@@ -0,0 +1,119 @@
1
+ require 'gist'
2
+
3
+ module PryJist
4
+ # @since v1.0.0
5
+ class Gist < Pry::ClassCommand
6
+ match 'gist'
7
+ group 'Misc'
8
+ description 'Upload code, docs, history to https://gist.github.com/.'
9
+
10
+ banner <<-'BANNER'
11
+ Usage: gist [OPTIONS] [--help]
12
+
13
+ The gist command enables you to gist code from files and methods to github.
14
+
15
+ gist -i 20 --lines 1..3
16
+ gist Pry#repl --lines 1..-1
17
+ gist Rakefile --lines 5
18
+ BANNER
19
+
20
+ def options(opt)
21
+ @input_expression_ranges = []
22
+ @output_result_ranges = []
23
+
24
+ opt.on :l, :lines, "Restrict to a subset of lines. Takes a line number or range",
25
+ optional_argument: true, as: Range, default: 1..-1
26
+ opt.on :o, :out, "Select lines from Pry's output result history. Takes an index " \
27
+ "or range",
28
+ optional_argument: true, as: Range, default: -5..-1 do |r|
29
+ output_result_ranges << (r || (-5..-1))
30
+ end
31
+ opt.on :i, :in, "Select lines from Pry's input expression history. Takes an " \
32
+ "index or range",
33
+ optional_argument: true, as: Range, default: -5..-1 do |r|
34
+ input_expression_ranges << (r || (-5..-1))
35
+ end
36
+ opt.on :s, :super, "Select the 'super' method. Can be repeated to traverse " \
37
+ "the ancestors",
38
+ as: :count
39
+ opt.on :d, :doc, "Select lines from the code object's documentation"
40
+ opt.on :login, "Authenticate the gist gem with GitHub"
41
+ opt.on :p, :public, "Create a public gist (default: false)", default: false
42
+ opt.on :clip, "Copy the selected content to clipboard instead, do NOT " \
43
+ "gist it", default: false
44
+ end
45
+
46
+ def process # rubocop:disable Metrics/AbcSize
47
+ return ::Gist.login! if opts.present?(:login)
48
+
49
+ cc = Pry::Command::CodeCollector.new(args, opts, _pry_)
50
+
51
+ raise Pry::CommandError, "Found no code to gist." if cc.content =~ /\A\s*\z/
52
+
53
+ if opts.present?(:clip)
54
+ clipboard_content(cc.content)
55
+ else
56
+ # we're overriding the default behavior of the 'in' option (as
57
+ # defined on CodeCollector) with our local behaviour.
58
+ content = opts.present?(:in) ? input_content : cc.content
59
+ gist_content content, cc.file
60
+ end
61
+ end
62
+
63
+ def clipboard_content(content)
64
+ ::Gist.copy(content)
65
+ output.puts "Copied content to clipboard!"
66
+ end
67
+
68
+ def input_content # rubocop:disable Metrics/AbcSize
69
+ content = ""
70
+ Pry::Command::CodeCollector.input_expression_ranges.each do |range|
71
+ input_expressions = _pry_.input_ring[range] || []
72
+ Array(input_expressions).each_with_index do |code, index|
73
+ corrected_index = index + range.first
74
+ next unless code && code != ""
75
+
76
+ content << code
77
+ next unless code !~ /;\Z/
78
+
79
+ content << comment_expression_result_for_gist(
80
+ _pry_.config.gist.inspecter.call(_pry_.output_ring[corrected_index])
81
+ ).to_s
82
+ end
83
+ end
84
+
85
+ content
86
+ end
87
+
88
+ def comment_expression_result_for_gist(result)
89
+ content = ""
90
+ result.lines.each_with_index do |line, index|
91
+ content << index == 0 ? "# => #{line}" : "# #{line}"
92
+ end
93
+
94
+ content
95
+ end
96
+
97
+ def gist_content(content, filename)
98
+ response = ::Gist.gist(
99
+ content,
100
+ filename: filename || "pry_gist.rb",
101
+ public: !!opts[:p] # rubocop:disable Style/DoubleNegation
102
+ )
103
+ return unless response
104
+
105
+ url = response['html_url']
106
+ message = "Gist created at URL #{url}"
107
+ begin
108
+ ::Gist.copy(url)
109
+ message << ", which is now in the clipboard."
110
+ rescue ::Gist::ClipboardError # rubocop:disable Lint/HandleExceptions
111
+ end
112
+
113
+ output.puts message
114
+ end
115
+ end
116
+ end
117
+
118
+ Pry::Commands.add_command(PryJist::Gist)
119
+ Pry::Commands.alias_command 'clipit', 'gist --clip'
@@ -0,0 +1,3 @@
1
+ module PryJist
2
+ VERSION = '1.0.0'.freeze
3
+ end
@@ -0,0 +1,8 @@
1
+ # These tests are out of date.
2
+ # They need to be updated for the new 'gist' API, but im too sleepy to
3
+ # do that now.
4
+ RSpec.describe PryJist::Gist do
5
+ it "works" do
6
+ expect(1).to eq(1)
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require 'pry-jist'
2
+ require 'rspec'
3
+
4
+ RSpec.configure do |c|
5
+ c.order = 'random'
6
+ c.color = true
7
+ c.disable_monkey_patching!
8
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pry-jist
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Kyrylo Silin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-03-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.12'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: gist
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.8'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ description:
70
+ email:
71
+ - silin@kyrylo.org
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - lib/pry-jist.rb
77
+ - lib/pry-jist/gist.rb
78
+ - lib/pry-jist/version.rb
79
+ - spec/gist_spec.rb
80
+ - spec/spec_helper.rb
81
+ homepage: http://pryrepl.org
82
+ licenses:
83
+ - MIT
84
+ metadata: {}
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '1.9'
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ requirements: []
100
+ rubyforge_project:
101
+ rubygems_version: 2.6.13
102
+ signing_key:
103
+ specification_version: 4
104
+ summary: Upload code, docs, history to https://gist.github.com/
105
+ test_files:
106
+ - spec/spec_helper.rb
107
+ - spec/gist_spec.rb