open_code-rails 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 52d26e804e17eb78e3ce170c634a2da37273c85453e290477dbdbd6e1c8167f3
4
- data.tar.gz: 9d2f643d463bb0be4e258cbb5aac7cc3818a6cad6f8b37bed8d7834ce5a8816f
3
+ metadata.gz: fb839955c9420d3f2bab6eb25f4af2903a10fe80c28b62b69505e747e4f0a8a7
4
+ data.tar.gz: 4dbb790e46e02b5d754cba70e13962dde0f17c1a90b605595155b81de604729d
5
5
  SHA512:
6
- metadata.gz: 0044a38c333873f9763ab4bf5b3c5f838ee999e78e6a1b67a803f86f94b93d16d70b61d2e7fdcc8a3177826516de4f8dc610f8b0cd7ec8c2adce403499d1aa50
7
- data.tar.gz: a55b4aab313d4e4c8ed498306b28f9f3607b954b2567bed081e386535733d6ecc9c568ba3f601ae7f931c4ede962d8603009fdfdfe2420ce78d11560e8795fd4
6
+ metadata.gz: 3e7a5f2afd71f614da17a15b95aad0cc23f3a43a5969c016644271189ec2ffcaac56a2b7be56b28b71bd09e31332ec17d6ac79f0d8b2bb0d183c9cca4bbd37e5
7
+ data.tar.gz: ed8c3c07d2dacdbfac88ac8ee58b5d3ecb48c9bcd5f93d6c1a79d044c5875842c380db2f0d1e8d3edd3fbff5e3df364635eab2cc6c072f18af1f363ff71e097f
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ .DS_Store
1
2
  /.bundle/
2
3
  /.yardoc
3
4
  /_yardoc/
@@ -6,6 +7,8 @@
6
7
  /pkg/
7
8
  /spec/reports/
8
9
  /tmp/
10
+ ._*
11
+ *.gem
9
12
 
10
13
  # rspec failure tracking
11
14
  .rspec_status
@@ -4,4 +4,4 @@ language: ruby
4
4
  cache: bundler
5
5
  rvm:
6
6
  - 2.5.3
7
- before_install: gem install bundler -v 2.0.1
7
+ before_install: gem install bundler
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- open_code-rails (0.1.0)
4
+ open_code-rails (0.2.0)
5
5
  railties (>= 4.2)
6
6
 
7
7
  GEM
@@ -54,6 +54,7 @@ GEM
54
54
  pry-byebug (3.7.0)
55
55
  byebug (~> 11.0)
56
56
  pry (~> 0.10)
57
+ psych (3.1.0)
57
58
  rack (2.0.6)
58
59
  rack-test (1.1.0)
59
60
  rack (>= 1.0, < 3)
@@ -83,26 +84,27 @@ GEM
83
84
  diff-lcs (>= 1.2.0, < 2.0)
84
85
  rspec-support (~> 3.8.0)
85
86
  rspec-support (3.8.0)
86
- rubocop (0.58.2)
87
+ rubocop (0.65.0)
87
88
  jaro_winkler (~> 1.5.1)
88
89
  parallel (~> 1.10)
89
90
  parser (>= 2.5, != 2.5.1.1)
90
91
  powerpack (~> 0.1)
92
+ psych (>= 3.1.0)
91
93
  rainbow (>= 2.2.2, < 4.0)
92
94
  ruby-progressbar (~> 1.7)
93
- unicode-display_width (~> 1.0, >= 1.0.1)
95
+ unicode-display_width (~> 1.4.0)
94
96
  ruby-progressbar (1.10.0)
95
97
  thor (0.20.3)
96
98
  thread_safe (0.3.6)
97
99
  tzinfo (1.2.5)
98
100
  thread_safe (~> 0.1)
99
- unicode-display_width (1.5.0)
101
+ unicode-display_width (1.4.1)
100
102
 
101
103
  PLATFORMS
102
104
  ruby
103
105
 
104
106
  DEPENDENCIES
105
- bundler (~> 2.0)
107
+ bundler (>= 1.10)
106
108
  open_code-rails!
107
109
  pry-byebug
108
110
  rake (~> 10.0)
@@ -110,4 +112,4 @@ DEPENDENCIES
110
112
  rubocop
111
113
 
112
114
  BUNDLED WITH
113
- 2.0.1
115
+ 1.17.3
data/README.md CHANGED
@@ -29,12 +29,16 @@ This gem simply inject some CSS and JS to HTML response while status is 500. You
29
29
 
30
30
  ## Configuration
31
31
 
32
+ ### Basic - in config file
33
+
32
34
  You should put settings in `config/environments/development.rb` because this gem should only work in dev server. It will prevent production server starting up.
33
35
 
34
36
  1. `config.open_code.editor` - default: `'vscode'`
35
37
 
36
38
  Currently only support `'vscode'` and `'vscodium'`. It will be used to link's scheme part, like `vscode://` or `vscodium://`. You can set it any string but probably won't work, unless your editor supports `<scheme>://file/<absolute file path>`.
37
39
 
40
+ Set to `false`, `'off'` or `'disabled'` to disable this gem
41
+
38
42
  ```ruby
39
43
  # config/environments/development.rb
40
44
  Rails.application.configure do
@@ -63,3 +67,27 @@ You should put settings in `config/environments/development.rb` because this gem
63
67
  config.open_code.editor = '/Users/MyName/projects'
64
68
  end
65
69
  ```
70
+
71
+ ### Advanced - via Environment Variables
72
+
73
+ Some flexibility is probably required for cooperation. Different people may have various preferences of IDE/editors, also the folder could be placed differently. So here you go.
74
+
75
+ 1. `FORCE_OPEN_CODE_EDITOR`
76
+
77
+ When is not blank, `config.open_code.editor` will be overridden.
78
+
79
+ Set to `false`, `off` or `disabled` to disable the gem
80
+
81
+ $ /usr/bin/env FORCE_OPEN_CODE_EDITOR=off rails s
82
+
83
+ 2. `FORCE_OPEN_CODE_PLACE_HOLDER`
84
+
85
+ When is not blank, `config.open_code.place_holder` will be overridden.
86
+
87
+ $ /usr/bin/env FORCE_OPEN_CODE_PLACE_HOLDER='Open in VSCodium' rails s
88
+
89
+ 3. `FORCE_OPEN_CODE_ROOT_DIR`
90
+
91
+ When is not blank, `config.open_code.root_dir` will be overridden.
92
+
93
+ $ /usr/bin/env FORCE_OPEN_CODE_ROOT_DIR='/my/project/path' rails s
@@ -1,4 +1,5 @@
1
1
  require "open_code/rails/version"
2
+ require 'open_code/rails/middleware'
2
3
  require "open_code/rails/railtie"
3
4
 
4
5
  module OpenCode
@@ -1,12 +1,9 @@
1
- require 'base64'
1
+ require 'active_support/all'
2
2
 
3
3
  module OpenCode
4
4
  module Rails
5
5
  class Middleware
6
- cattr_accessor :css
7
- cattr_accessor :place_holder
8
- cattr_accessor :root_dir
9
- cattr_accessor :scheme
6
+ cattr_accessor :html_code
10
7
 
11
8
  def initialize(app)
12
9
  @app = app
@@ -19,7 +16,37 @@ module OpenCode
19
16
  status, headers, body = res
20
17
  return res unless status == 500 && headers['Content-Type'].to_s.include?('html')
21
18
 
22
- script = <<-JS.strip_heredoc
19
+ html = ''
20
+ body.each { |part| html << part }
21
+ body = html.sub('</body>', "#{html_code}</body>").encode('utf-8')
22
+ headers['Content-Length'] = body.size
23
+ [status, headers, [body]]
24
+ rescue => e
25
+ ::Rails.logger.error do
26
+ <<-LOG.strip_heredoc
27
+ [OpenCode::Rails::Middleware] #{e.class}: #{e}
28
+ Sorry still something went wrong
29
+ from #{e.backtrace.join("\n ")}
30
+ LOG
31
+ end
32
+ res
33
+ end
34
+ end
35
+
36
+ class << self
37
+ def loadable?(config)
38
+ return false if %w[false off disabled].include?(config.editor)
39
+
40
+ css = generate_css(config.place_holder.blank?)
41
+ js = generate_js(config.editor, config.place_holder, config.root_dir)
42
+ self.html_code = "<style>#{css}</style><script>#{js}</script>"
43
+ true
44
+ end
45
+
46
+ private
47
+
48
+ def generate_js(scheme, place_holder, root_dir)
49
+ <<-JS.strip_heredoc
23
50
  (function () {
24
51
  setTimeout(function () {
25
52
  var prefix = '#{scheme}://file/#{root_dir}';
@@ -27,11 +54,12 @@ module OpenCode
27
54
  var items = document.querySelectorAll('#Application-Trace .trace-frames');
28
55
  for (var i = 0; i < items.length; i += 1) {
29
56
  var item = items[i];
30
- var frameId = item.dataset.frameId;
31
- var uri = encodeURI([prefix, item.innerText.split(':in')[0]].join('/'));
32
- var html = '<a href="' + uri + '" class="-gem-open-me-link">#{place_holder}</a>';
57
+ var uri = [prefix, item.innerText.split(':in')[0]].join('/');
58
+ var h = JSON.stringify(encodeURI(uri));
59
+ var html = '<a href=' + h + ' class="open-code-rails-link">#{place_holder}</a>';
33
60
 
34
- var links = document.querySelectorAll('[data-frame-id=' + JSON.stringify(frameId) + ']');
61
+ var selFrameId = JSON.stringify(item.dataset.frameId);
62
+ var links = document.querySelectorAll('[data-frame-id=' + selFrameId + ']');
35
63
  for (var j = 0; j < links.length; j += 1) {
36
64
  var link = links[j];
37
65
  tmp.innerHTML = html;
@@ -41,22 +69,44 @@ module OpenCode
41
69
  }, 0);
42
70
  })();
43
71
  JS
72
+ end
44
73
 
45
- html = ''
46
- body.each { |part| html << part }
47
- html.sub!('</body>', "<style>#{css}</style><script>#{script}</script></body>")
48
- body = html.encode('utf-8')
49
- headers['Content-Length'] = body.size
50
- [status, headers, [body]]
51
- rescue => e
52
- ::Rails.logger.error do
53
- <<-LOG.strip_heredoc
54
- [OpenCode::Rails::Middleware] #{e.class}: #{e}
55
- Sorry still something went wrong
56
- from #{e.backtrace.join("\n ")}
57
- LOG
58
- end
59
- res
74
+ def generate_css(use_icon)
75
+ css = <<-CSS.strip_heredoc
76
+ .open-code-rails-link {
77
+ box-sizing: border-box;
78
+ display: inline-block;
79
+ margin-left: 8px;
80
+ padding: 1px 6px;
81
+ vertical-align: middle;
82
+ border: 1px solid #FFCCCB;
83
+ color: #C52E23;
84
+ border-radius: 4px;
85
+ text-decoration: none;
86
+ }
87
+ .open-code-rails-link:hover {
88
+ border-color: #C52E23;
89
+ }
90
+ CSS
91
+ return css unless use_icon
92
+
93
+ require 'pathname'
94
+ require 'base64'
95
+ icon = Base64.strict_encode64(Pathname.new(__dir__).join('vscode.svg').read)
96
+
97
+ css << <<-CSS.strip_heredoc
98
+ .open-code-rails-link {
99
+ padding: 3px;
100
+ }
101
+ .open-code-rails-link::after {
102
+ display: block;
103
+ content: '';
104
+ width: 12px;
105
+ height: 12px;
106
+ background-image: url('data:image/svg+xml;base64,#{icon}');
107
+ }
108
+ CSS
109
+ css
60
110
  end
61
111
  end
62
112
  end
@@ -11,49 +11,18 @@ module OpenCode
11
11
  end
12
12
 
13
13
  initializer "open_code.insert_middleware" do |app|
14
- next if ::Rails.env.production? || !defined?(::Rails::Server)
14
+ next unless ::Rails.env.development? && defined?(::Rails::Server)
15
15
 
16
- require 'open_code/rails/const_assets'
17
- require 'open_code/rails/middleware'
18
-
19
- css = <<-CSS.strip_heredoc
20
- .-gem-open-me-link {
21
- box-sizing: border-box;
22
- display: inline-block;
23
- margin-left: 8px;
24
- padding: 1px 6px;
25
- vertical-align: middle;
26
- border: 1px solid #FFCCCB;
27
- color: #C52E23;
28
- border-radius: 4px;
29
- text-decoration: none;
30
- }
31
- .-gem-open-me-link:hover {
32
- border-color: #C52E23;
33
- }
34
- CSS
16
+ editor = (ENV['FORCE_OPEN_CODE_EDITOR'].presence || cfg.editor).to_s.downcase
17
+ place_holder = ENV['FORCE_OPEN_CODE_PLACE_HOLDER'].presence || cfg.place_holder
18
+ root_dir = ENV['FORCE_OPEN_CODE_ROOT_DIR'].presence || cfg.root_dir
35
19
 
36
20
  cfg = config.open_code
37
- if cfg.place_holder.blank?
38
- b64 = Base64.strict_encode64(ConstAssets::ICONS[:vscode])
39
- css << <<-CSS.strip_heredoc
40
- .-gem-open-me-link {
41
- padding: 3px;
42
- }
43
- .-gem-open-me-link::after {
44
- display: block;
45
- content: '';
46
- width: 12px;
47
- height: 12px;
48
- background-image: url('data:image/svg+xml;base64,#{b64}');
49
- }
50
- CSS
51
- end
21
+ cfg.editor = editor.presence || 'vscode'
22
+ cfg.place_holder = place_holder
23
+ cfg.root_dir = (root_dir.presence || ::Rails.root).to_s.tr('\\', '/').chomp('/')
24
+ next unless Middleware.loadable?(cfg)
52
25
 
53
- Middleware.css = css.freeze
54
- Middleware.place_holder = cfg.place_holder
55
- Middleware.root_dir = (cfg.root_dir.presence || ::Rails.root).to_s.tr('\\', '/').chomp('/')
56
- Middleware.scheme = cfg.editor.presence || 'vscode'
57
26
  app.middleware.insert_before(ActionDispatch::DebugExceptions, Middleware)
58
27
  end
59
28
  end
@@ -1,5 +1,5 @@
1
1
  module OpenCode
2
2
  module Rails
3
- VERSION = "0.1.0".freeze
3
+ VERSION = "0.2.0".freeze
4
4
  end
5
5
  end
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" viewBox="0 0 261 260" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" version="1.1" id="svg4" sodipodi:docname="vscode.svg" inkscape:version="0.92.2 (unknown)">
3
+ <metadata id="metadata10">
4
+ <rdf:RDF>
5
+ <cc:Work rdf:about="">
6
+ <dc:format>image/svg+xml</dc:format>
7
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
8
+ <dc:title/>
9
+ </cc:Work>
10
+ </rdf:RDF>
11
+ </metadata>
12
+ <defs id="defs8"/>
13
+ <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1360" inkscape:window-height="722" id="namedview6" showgrid="false" inkscape:zoom="0.64183539" inkscape:cx="112.48701" inkscape:cy="128.72041" inkscape:window-x="0" inkscape:window-y="24" inkscape:window-maximized="1" inkscape:current-layer="svg4"/>
14
+ <path d="M 195.47461 -0.005859375 L 195.47461 223.29688 L 0.49609375 194.33789 L 195.47461 259.99219 L 260.47461 232.95312 L 260.47461 31.064453 L 260.49609 31.054688 L 260.47461 31.011719 L 260.47461 27.035156 L 195.47461 -0.005859375 z " id="path951" style="fill:#C52E23;fill-opacity:1"/>
15
+ <path d="M 127.24219 38.037109 L 67.521484 97.070312 L 31.566406 69.992188 L 16.748047 74.941406 L 53.328125 111.10156 L 16.748047 147.25977 L 31.566406 152.21094 L 67.521484 125.13086 L 67.523438 125.13086 L 127.24023 184.16016 L 163.00781 168.96289 L 163.00781 53.234375 L 127.24219 38.037109 z M 127.24023 80.158203 L 127.24023 142.03711 L 86.154297 111.09766 L 127.24023 80.158203 z " id="path887" style="fill:#C52E23;fill-opacity:1"/>
16
+ </svg>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open_code-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Chen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-07 00:00:00.000000000 Z
11
+ date: 2019-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -112,10 +112,10 @@ files:
112
112
  - README.md
113
113
  - Rakefile
114
114
  - lib/open_code/rails.rb
115
- - lib/open_code/rails/const_assets.rb
116
115
  - lib/open_code/rails/middleware.rb
117
116
  - lib/open_code/rails/railtie.rb
118
117
  - lib/open_code/rails/version.rb
118
+ - lib/open_code/rails/vscode.svg
119
119
  - open_code-rails.gemspec
120
120
  homepage: https://github.com/eGust/open_code-rails
121
121
  licenses: []
@@ -135,8 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
135
  - !ruby/object:Gem::Version
136
136
  version: '0'
137
137
  requirements: []
138
- rubyforge_project:
139
- rubygems_version: 2.7.6
138
+ rubygems_version: 3.0.3
140
139
  signing_key:
141
140
  specification_version: 4
142
141
  summary: Open file in editor in Rails exception pages
@@ -1,26 +0,0 @@
1
- module OpenCode
2
- module Rails
3
- module ConstAssets
4
- ICONS = {
5
- vscode: <<-XML.strip_heredoc,
6
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
7
- <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" viewBox="0 0 261 260" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414" version="1.1" id="svg4" sodipodi:docname="vscode.svg" inkscape:version="0.92.2 (unknown)">
8
- <metadata id="metadata10">
9
- <rdf:RDF>
10
- <cc:Work rdf:about="">
11
- <dc:format>image/svg+xml</dc:format>
12
- <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
13
- <dc:title/>
14
- </cc:Work>
15
- </rdf:RDF>
16
- </metadata>
17
- <defs id="defs8"/>
18
- <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1360" inkscape:window-height="722" id="namedview6" showgrid="false" inkscape:zoom="0.64183539" inkscape:cx="112.48701" inkscape:cy="128.72041" inkscape:window-x="0" inkscape:window-y="24" inkscape:window-maximized="1" inkscape:current-layer="svg4"/>
19
- <path d="M 195.47461 -0.005859375 L 195.47461 223.29688 L 0.49609375 194.33789 L 195.47461 259.99219 L 260.47461 232.95312 L 260.47461 31.064453 L 260.49609 31.054688 L 260.47461 31.011719 L 260.47461 27.035156 L 195.47461 -0.005859375 z " id="path951" style="fill:#C52E23;fill-opacity:1"/>
20
- <path d="M 127.24219 38.037109 L 67.521484 97.070312 L 31.566406 69.992188 L 16.748047 74.941406 L 53.328125 111.10156 L 16.748047 147.25977 L 31.566406 152.21094 L 67.521484 125.13086 L 67.523438 125.13086 L 127.24023 184.16016 L 163.00781 168.96289 L 163.00781 53.234375 L 127.24219 38.037109 z M 127.24023 80.158203 L 127.24023 142.03711 L 86.154297 111.09766 L 127.24023 80.158203 z " id="path887" style="fill:#C52E23;fill-opacity:1"/>
21
- </svg>
22
- XML
23
- }
24
- end
25
- end
26
- end