lecter 0.1.5 → 0.1.6
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 +4 -4
- data/.gitignore +1 -0
- data/README.md +27 -8
- data/app/assets/javascripts/{highlight.pack.js → lecter.js} +0 -0
- data/app/assets/stylesheets/lecter.css +261 -0
- data/app/controllers/lecter/diagnosis_controller.rb +19 -16
- data/app/views/layouts/lecter.slim +14 -0
- data/app/views/lecter/diagnosis/new.erb +7 -5
- data/app/views/lecter/diagnosis/show.slim +44 -48
- data/config/locales/en.yml +15 -0
- data/config/locales/ru.yml +15 -0
- data/lib/lecter/rack.rb +9 -2
- data/lib/lecter/version.rb +1 -1
- metadata +7 -9
- data/app/assets/stylesheets/railscasts.css +0 -106
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: af36eb3acc445fcb8eb1c1ba1a2c31f98d526b983ef28976b0c2586917f11323
|
4
|
+
data.tar.gz: 52919c26f7ad0a7319b2f87927f22ac0b6cea9c18a078e3f77cca65641f3d205
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd5d5eee2054aa159869bc852b9a0abf70c87ae58f2ef363e9183b41d46fd2784249becd823aa9258ac45af2280c8e24e26c2d11d89877a70bdeb2f8b4af0bf4
|
7
|
+
data.tar.gz: de412a50f6da7a1e7d5c502a40dcc7ce2b9ffe9c7b0913af55f4d54a81193a8ec5f390bf71b0b1b3e323727672b5dc4aa61f9c5b309eef2c5a493cc52c667601
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Lecter
|
1
|
+
# Lecter. Online debugger
|
2
2
|
|
3
3
|
There are a lot of people around developing web apps also as new developers on projects. Sometimes they don't know how app works and which exactly processes work.
|
4
4
|
That gem will help them to understand which code executes per request.
|
@@ -9,22 +9,20 @@ That gem will help them to understand which code executes per request.
|
|
9
9
|
Add this line to your application's Gemfile:
|
10
10
|
|
11
11
|
```ruby
|
12
|
-
|
12
|
+
group :development do
|
13
|
+
gem 'lecter', git: 'https://github.com/neodelf/lecter'
|
14
|
+
end
|
13
15
|
```
|
14
16
|
|
15
17
|
And then execute:
|
16
18
|
|
17
19
|
$ bundle
|
18
20
|
|
19
|
-
Or install it yourself as:
|
20
|
-
|
21
|
-
$ gem install lecter
|
22
|
-
|
23
21
|
## Usage
|
24
22
|
|
25
23
|
|
26
24
|
1. Use multithreading server such like a `puma` with workers more than `1`.
|
27
|
-
2. Precompile `
|
25
|
+
2. Precompile `lecter.css lecter.js` assets.
|
28
26
|
3. Add routes in your `routes.rb`
|
29
27
|
|
30
28
|
```ruby
|
@@ -37,7 +35,28 @@ Or install it yourself as:
|
|
37
35
|
|
38
36
|
`params` - parameters which will be handled on request
|
39
37
|
|
40
|
-
`method` - choose one variant
|
38
|
+
`method` - choose one variant
|
39
|
+
|
40
|
+
Examples to use
|
41
|
+
1. `POST` method:
|
42
|
+
|
43
|
+
`endpoint` - `localhost:3000/posts`
|
44
|
+
|
45
|
+
`params` - `"post"=>{"title"=>"New title", "description"=>"Desciption"}`
|
46
|
+
|
47
|
+
`method` - `POST`
|
48
|
+
|
49
|
+

|
50
|
+
|
51
|
+
2. `GET` method:
|
52
|
+
|
53
|
+
`endpoint` - `localhost:3000/posts`
|
54
|
+
|
55
|
+
`params` - empty field
|
56
|
+
|
57
|
+
`method` - `GET`
|
58
|
+
|
59
|
+

|
41
60
|
|
42
61
|
## Contributing
|
43
62
|
|
File without changes
|
@@ -0,0 +1,261 @@
|
|
1
|
+
/*
|
2
|
+
|
3
|
+
Railscasts-like style (c) Visoft, Inc. (Damien White)
|
4
|
+
|
5
|
+
*/
|
6
|
+
|
7
|
+
.hljs {
|
8
|
+
display: block;
|
9
|
+
overflow-x: auto;
|
10
|
+
padding: 0.5em;
|
11
|
+
background: #232323;
|
12
|
+
color: #e6e1dc;
|
13
|
+
}
|
14
|
+
|
15
|
+
.hljs-comment,
|
16
|
+
.hljs-quote {
|
17
|
+
color: #bc9458;
|
18
|
+
font-style: italic;
|
19
|
+
}
|
20
|
+
|
21
|
+
.hljs-keyword,
|
22
|
+
.hljs-selector-tag {
|
23
|
+
color: #c26230;
|
24
|
+
}
|
25
|
+
|
26
|
+
.hljs-string,
|
27
|
+
.hljs-number,
|
28
|
+
.hljs-regexp,
|
29
|
+
.hljs-variable,
|
30
|
+
.hljs-template-variable {
|
31
|
+
color: #a5c261;
|
32
|
+
}
|
33
|
+
|
34
|
+
.hljs-subst {
|
35
|
+
color: #519f50;
|
36
|
+
}
|
37
|
+
|
38
|
+
.hljs-tag,
|
39
|
+
.hljs-name {
|
40
|
+
color: #e8bf6a;
|
41
|
+
}
|
42
|
+
|
43
|
+
.hljs-type {
|
44
|
+
color: #da4939;
|
45
|
+
}
|
46
|
+
|
47
|
+
|
48
|
+
.hljs-symbol,
|
49
|
+
.hljs-bullet,
|
50
|
+
.hljs-built_in,
|
51
|
+
.hljs-builtin-name,
|
52
|
+
.hljs-attr,
|
53
|
+
.hljs-link {
|
54
|
+
color: #6d9cbe;
|
55
|
+
}
|
56
|
+
|
57
|
+
.hljs-params {
|
58
|
+
color: #d0d0ff;
|
59
|
+
}
|
60
|
+
|
61
|
+
.hljs-attribute {
|
62
|
+
color: #cda869;
|
63
|
+
}
|
64
|
+
|
65
|
+
.hljs-meta {
|
66
|
+
color: #9b859d;
|
67
|
+
}
|
68
|
+
|
69
|
+
.hljs-title,
|
70
|
+
.hljs-section {
|
71
|
+
color: #ffc66d;
|
72
|
+
}
|
73
|
+
|
74
|
+
.hljs-addition {
|
75
|
+
background-color: #144212;
|
76
|
+
color: #e6e1dc;
|
77
|
+
display: inline-block;
|
78
|
+
width: 100%;
|
79
|
+
}
|
80
|
+
|
81
|
+
.hljs-deletion {
|
82
|
+
background-color: #600;
|
83
|
+
color: #e6e1dc;
|
84
|
+
display: inline-block;
|
85
|
+
width: 100%;
|
86
|
+
}
|
87
|
+
|
88
|
+
.hljs-selector-class {
|
89
|
+
color: #9b703f;
|
90
|
+
}
|
91
|
+
|
92
|
+
.hljs-selector-id {
|
93
|
+
color: #8b98ab;
|
94
|
+
}
|
95
|
+
|
96
|
+
.hljs-emphasis {
|
97
|
+
font-style: italic;
|
98
|
+
}
|
99
|
+
|
100
|
+
.hljs-strong {
|
101
|
+
font-weight: bold;
|
102
|
+
}
|
103
|
+
|
104
|
+
.hljs-link {
|
105
|
+
text-decoration: underline;
|
106
|
+
}
|
107
|
+
|
108
|
+
/* diagnosis/show.slim */
|
109
|
+
|
110
|
+
|
111
|
+
.arrow-right {
|
112
|
+
width: 0;
|
113
|
+
height: 0;
|
114
|
+
border-top: 5px solid transparent;
|
115
|
+
border-bottom: 5px solid transparent;
|
116
|
+
border-left: 5px solid black;
|
117
|
+
float: left;
|
118
|
+
margin: 7px;
|
119
|
+
}
|
120
|
+
|
121
|
+
.down {
|
122
|
+
border-left: 5px solid transparent;
|
123
|
+
border-right: 5px solid transparent;
|
124
|
+
border-top: 5px solid black;
|
125
|
+
margin: 10px 7px 0 5px;
|
126
|
+
}
|
127
|
+
|
128
|
+
.ui-accordion .ui-accordion-header {
|
129
|
+
font-size: 78%;
|
130
|
+
}
|
131
|
+
|
132
|
+
.sidebar {
|
133
|
+
float: left;
|
134
|
+
}
|
135
|
+
|
136
|
+
.sidebar > .sidebar-wrapper {
|
137
|
+
width: 235px;
|
138
|
+
position: fixed;
|
139
|
+
margin: 49px 33px 0 0;
|
140
|
+
overflow-y: scroll;
|
141
|
+
top: 82px;
|
142
|
+
bottom: 40px;
|
143
|
+
}
|
144
|
+
|
145
|
+
.sidebar-wrapper > ul {
|
146
|
+
list-style-type: none;
|
147
|
+
height: calc(100% - 40px);
|
148
|
+
}
|
149
|
+
|
150
|
+
.sidebar-wrapper > ul > li {
|
151
|
+
margin-bottom: 3px;
|
152
|
+
}
|
153
|
+
|
154
|
+
.sidebar-wrapper > ul > li > a {
|
155
|
+
text-decoration: none;
|
156
|
+
color: inherit;
|
157
|
+
display: block;
|
158
|
+
font-size: 13px;
|
159
|
+
text-inline: 1.5;
|
160
|
+
}
|
161
|
+
|
162
|
+
.sidebar-wrapper > ul > li > a:hover {
|
163
|
+
color: #7d7d7d;
|
164
|
+
}
|
165
|
+
|
166
|
+
.right {
|
167
|
+
float: left;
|
168
|
+
padding-left: 10px;
|
169
|
+
width: 70%;
|
170
|
+
margin-left: 297px;
|
171
|
+
}
|
172
|
+
|
173
|
+
.listing {
|
174
|
+
display: none;
|
175
|
+
padding: 1em 2.2em;
|
176
|
+
overflow: auto;
|
177
|
+
border-bottom-right-radius: 4px;
|
178
|
+
border: 0.5px solid;
|
179
|
+
border-top-width: 0;
|
180
|
+
border-bottom-left-radius: 4px;
|
181
|
+
background: #efefef;
|
182
|
+
}
|
183
|
+
|
184
|
+
.filename {
|
185
|
+
cursor: pointer;
|
186
|
+
position: relative;
|
187
|
+
margin: 2px 0 0 0;
|
188
|
+
padding: .5em .5em .5em .7em;
|
189
|
+
border: solid 0.1px;
|
190
|
+
background: #efefef;
|
191
|
+
}
|
192
|
+
|
193
|
+
/* layouts/lecter.slim */
|
194
|
+
|
195
|
+
body {
|
196
|
+
font-family: "Helvetica Neue", "Helvetica", Arial, "Open Sans", sans-serif;
|
197
|
+
font-size: 15px;
|
198
|
+
line-height: 1.6;
|
199
|
+
-webkit-font-smoothing: antialiased;
|
200
|
+
}
|
201
|
+
|
202
|
+
.body-wrapper {
|
203
|
+
overflow: hidden;
|
204
|
+
*zoom: 1;
|
205
|
+
margin-top: 50px;
|
206
|
+
margin-bottom: 50px;
|
207
|
+
display: block;
|
208
|
+
max-width: 955px;
|
209
|
+
margin: 0 auto;
|
210
|
+
padding: 0 20px;
|
211
|
+
}
|
212
|
+
|
213
|
+
.nav {
|
214
|
+
font-weight: 500;
|
215
|
+
background: #0b4e22;
|
216
|
+
border-bottom: 1px solid #cccccc;
|
217
|
+
}
|
218
|
+
|
219
|
+
.nav-inner {
|
220
|
+
display: block;
|
221
|
+
max-width: 955px;
|
222
|
+
margin: 0 auto;
|
223
|
+
padding: 1px 20px;
|
224
|
+
}
|
225
|
+
|
226
|
+
.nav-inner > ul {
|
227
|
+
list-style-type: none;
|
228
|
+
}
|
229
|
+
|
230
|
+
.nav-inner > ul > li > a {
|
231
|
+
text-decoration: none;
|
232
|
+
font-weight: 600;
|
233
|
+
color: white;
|
234
|
+
letter-spacing: 0.4px;
|
235
|
+
}
|
236
|
+
|
237
|
+
.ul {
|
238
|
+
-webkit-justify-content: space-between;
|
239
|
+
justify-content: space-between;
|
240
|
+
list-style-type: none;
|
241
|
+
margin: 0;
|
242
|
+
padding: 8px 2px 8px;
|
243
|
+
display: -webkit-flex;
|
244
|
+
display: flex;
|
245
|
+
}
|
246
|
+
|
247
|
+
.li {
|
248
|
+
-webkit-flex: 0 1 auto;
|
249
|
+
flex: 0 1 auto;
|
250
|
+
display: list-item;
|
251
|
+
text-align: -webkit-match-parent;
|
252
|
+
list-style-type: none;
|
253
|
+
}
|
254
|
+
|
255
|
+
.nav-inner > li > a {
|
256
|
+
text-decoration: none;
|
257
|
+
font-weight: 400;
|
258
|
+
color: white;
|
259
|
+
letter-spacing: 0.4px;
|
260
|
+
}
|
261
|
+
|
@@ -3,23 +3,22 @@ require 'slim-rails'
|
|
3
3
|
|
4
4
|
module Lecter
|
5
5
|
class DiagnosisController < ActionController::Base
|
6
|
+
layout 'lecter'
|
6
7
|
before_action :format_params, only: :create
|
7
8
|
|
8
9
|
def new
|
9
10
|
end
|
10
11
|
|
11
12
|
def show
|
13
|
+
redirect_to new_diagnosis_path
|
12
14
|
end
|
13
15
|
|
14
16
|
def create
|
15
|
-
response =
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
::RestClient.post(diagnosis_params[:endpoint], format_params)
|
21
|
-
end
|
22
|
-
|
17
|
+
response = RestClient::Request.execute(
|
18
|
+
method: diagnosis_method.downcase.to_sym,
|
19
|
+
url: diagnosis_params[:endpoint],
|
20
|
+
payload: format_params
|
21
|
+
)
|
23
22
|
return render :new unless response
|
24
23
|
|
25
24
|
prepare_data(response.body)
|
@@ -27,6 +26,9 @@ module Lecter
|
|
27
26
|
rescue URI::InvalidURIError
|
28
27
|
flash[:error] = 'Wrong url'
|
29
28
|
return render :new
|
29
|
+
rescue RestClient::ExceptionWithResponse => e
|
30
|
+
flash[:error] = e.message
|
31
|
+
return render :new
|
30
32
|
end
|
31
33
|
|
32
34
|
private
|
@@ -35,9 +37,10 @@ module Lecter
|
|
35
37
|
params.permit(:endpoint, :params, :method)
|
36
38
|
end
|
37
39
|
|
38
|
-
def prepare_data(
|
40
|
+
def prepare_data(response_body)
|
39
41
|
@lines = []
|
40
|
-
@
|
42
|
+
@response_status = response_body[0..2]
|
43
|
+
@items = response_body[3..-1].split(';')
|
41
44
|
@items.each do |item|
|
42
45
|
file = item.split(' ')[0]
|
43
46
|
if @lines.last.is_a?(Hash) && @lines.last.keys.first.to_s == file
|
@@ -50,11 +53,7 @@ module Lecter
|
|
50
53
|
|
51
54
|
def format_params
|
52
55
|
@format_params ||= begin
|
53
|
-
|
54
|
-
{}
|
55
|
-
else
|
56
|
-
json_parse(diagnosis_params[:params])
|
57
|
-
end.merge(lecter_analysis_parameter)
|
56
|
+
json_parse(diagnosis_params[:params]).merge(lecter_analysis_parameter)
|
58
57
|
rescue JSON::ParserError
|
59
58
|
flash[:error] = 'Wrong parameters'
|
60
59
|
return render :new
|
@@ -67,8 +66,12 @@ module Lecter
|
|
67
66
|
|
68
67
|
def json_parse(string)
|
69
68
|
string = '{' + string + '}' unless string.match(/\A{.*}\z/)
|
70
|
-
string.gsub!('=>', ':')
|
69
|
+
string.gsub!('=>', ':')&.gsub!(/(“|”)/, '"')
|
71
70
|
JSON.parse(string)
|
72
71
|
end
|
72
|
+
|
73
|
+
def diagnosis_method
|
74
|
+
diagnosis_params[:method].downcase
|
75
|
+
end
|
73
76
|
end
|
74
77
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
<%= content_for :title, t('.title') %>
|
2
|
+
|
3
|
+
<h1><%= t('.title') %></h1>
|
2
4
|
|
3
5
|
<%= form_tag diagnosis_path do %>
|
4
6
|
<% flash.each do |key, value| %>
|
@@ -6,13 +8,13 @@
|
|
6
8
|
<% end %>
|
7
9
|
<% %i[endpoint params].each do |attr| %>
|
8
10
|
<p>
|
9
|
-
<%= label_tag attr %>
|
11
|
+
<%= label_tag t(".#{attr}") %>
|
10
12
|
<%= text_field_tag attr %>
|
11
13
|
</p>
|
12
14
|
<% end %>
|
13
15
|
<p>
|
14
|
-
<%= label_tag
|
15
|
-
<%= select_tag :method, options_for_select(%w[GET POST], 'GET') %>
|
16
|
+
<%= label_tag t('.method') %>
|
17
|
+
<%= select_tag :method, options_for_select(%w[GET POST PUT PATCH DELETE], 'GET') %>
|
16
18
|
</p>
|
17
|
-
<%= submit_tag
|
19
|
+
<%= submit_tag t('.create') %>
|
18
20
|
<% end %>
|
@@ -1,56 +1,52 @@
|
|
1
1
|
= javascript_include_tag 'highlight.pack.js', '//code.jquery.com/jquery-1.12.4.js', '//code.jquery.com/ui/1.12.1/jquery-ui.js'
|
2
|
-
= stylesheet_link_tag 'railscasts'
|
2
|
+
= stylesheet_link_tag 'railscasts'
|
3
3
|
|
4
|
+
= content_for :title, t('.title')
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
div
|
11
|
-
h5 id="anchor#{item_index}"
|
12
|
-
- file = item.keys.first
|
13
|
-
= file.remove(Rails.root.to_s)
|
14
|
-
- lines = item.values.split(' ').flatten.map(&:to_i)
|
15
|
-
- previous_row_is_empty = false
|
16
|
-
div
|
17
|
-
pre
|
18
|
-
- file_context = File.open(Rails.root.join(file), 'r').read.split("\n")
|
19
|
-
- file_context.each_with_index do |row, index_row|
|
20
|
-
- include = lines.include?(index_row + 1)
|
21
|
-
- if include || lines.reduce(false) { |memo, line| memo || index_row.in?(line - 5..line + 4) }
|
22
|
-
- previous_row_is_empty = false
|
23
|
-
code class='ruby' style=('background-color: #4a4a4a;' if include)
|
24
|
-
= "#{index_row + 1} #{row} #{lines.index(index_row + 1) + 1 if include}"
|
25
|
-
- elsif !previous_row_is_empty
|
26
|
-
code
|
27
|
-
- previous_row_is_empty = true
|
28
|
-
'...
|
6
|
+
.sidebar
|
7
|
+
.sidebar-wrapper
|
8
|
+
ul
|
9
|
+
- @lines.each_with_index do |item, item_index|
|
10
|
+
li = link_to item.keys.first.split('/').last, "#anchor#{item_index}"
|
29
11
|
.right
|
12
|
+
h4
|
13
|
+
= t('.response_status', status: @response_status)
|
30
14
|
- @lines.each_with_index do |item, item_index|
|
31
|
-
|
32
|
-
=
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
15
|
+
.filename id="anchor#{item_index}"
|
16
|
+
- file = item.keys.first
|
17
|
+
.arrow-right
|
18
|
+
.filename-title
|
19
|
+
= file.remove(Rails.root.to_s)
|
20
|
+
- lines = item.values.split(' ').flatten.map(&:to_i)
|
21
|
+
- previous_row_is_empty = false
|
22
|
+
.listing
|
23
|
+
- file_context = File.open(Rails.root.join(file), 'r').read.split("\n")
|
24
|
+
- html_rows = []
|
25
|
+
- file_context.each_with_index do |row, index_row|
|
26
|
+
- include = lines.include?(index_row + 1)
|
27
|
+
- if include || lines.reduce(false) { |memo, line| memo || index_row.in?(line - 5..line + 4) }
|
28
|
+
- previous_row_is_empty = false
|
29
|
+
- html_row = "#{index_row + 1} #{'-> ' + lines.each_with_index.select { |_, index| lines[index] == index_row + 1 }.map { |_, index| index + 1 }.join(', ') if include} #{row}\n"
|
30
|
+
- html_rows << content_tag(:code, html_row, style: "#{include ? 'background-color: #4a4a4a;' : nil}")
|
31
|
+
- elsif !previous_row_is_empty
|
32
|
+
- previous_row_is_empty = true
|
33
|
+
- html_rows << "...\n"
|
34
|
+
pre
|
35
|
+
code
|
36
|
+
- html_rows.each do |html_row|
|
37
|
+
= html_row
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
}
|
39
|
+
javascript:
|
40
|
+
$(document).ready(function(){
|
41
|
+
hljs.initHighlighting();
|
43
42
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
43
|
+
$('.filename').on('click', function(){
|
44
|
+
$(this).find('.arrow-right').toggleClass('down')
|
45
|
+
$(this).next().slideToggle();
|
46
|
+
});
|
48
47
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
collapsible: true,
|
55
|
-
active: 1
|
56
|
-
});
|
48
|
+
$('.sidebar-wrapper > ul > li > a').on('click', function(){
|
49
|
+
var anchor = $(this).first().attr('href').split('#').pop();
|
50
|
+
$('.filename#'+anchor).click();
|
51
|
+
});
|
52
|
+
})
|
@@ -0,0 +1,15 @@
|
|
1
|
+
en:
|
2
|
+
layouts:
|
3
|
+
lecter:
|
4
|
+
new_diagnosis: 'New diagnosis'
|
5
|
+
lecter:
|
6
|
+
diagnosis:
|
7
|
+
show:
|
8
|
+
title: 'Diagnosis results'
|
9
|
+
response_status: 'Response status: %{status}'
|
10
|
+
new:
|
11
|
+
title: 'New diagnosis'
|
12
|
+
endpoint: 'Endpoint'
|
13
|
+
params: 'Parameters'
|
14
|
+
method: 'HTTP method'
|
15
|
+
create: 'Create'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
ru:
|
2
|
+
layouts:
|
3
|
+
lecter:
|
4
|
+
new_diagnosis: 'Новый диагноз'
|
5
|
+
lecter:
|
6
|
+
diagnosis:
|
7
|
+
show:
|
8
|
+
title: 'Диагноз'
|
9
|
+
response_status: 'Статус ответа: %{status}'
|
10
|
+
new:
|
11
|
+
title: 'Новый диагноз'
|
12
|
+
endpoint: 'Абсолютный путь'
|
13
|
+
params: 'Параметры'
|
14
|
+
method: 'HTTP метод'
|
15
|
+
create: 'Создать'
|
data/lib/lecter/rack.rb
CHANGED
@@ -24,15 +24,22 @@ class Lecter::Rack
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
tp.enable
|
27
|
+
ActionController::Base.allow_forgery_protection = false
|
27
28
|
end
|
29
|
+
|
28
30
|
status, headers, response = @app.call(env)
|
31
|
+
|
29
32
|
if tp
|
33
|
+
response = [status.to_s + thread[:items]]
|
30
34
|
status = 200
|
31
|
-
|
35
|
+
headers = {}
|
32
36
|
end
|
33
37
|
|
34
38
|
[status, headers, response]
|
35
39
|
ensure
|
36
|
-
|
40
|
+
if tp
|
41
|
+
tp.disable
|
42
|
+
ActionController::Base.allow_forgery_protection = true
|
43
|
+
end
|
37
44
|
end
|
38
45
|
end
|
data/lib/lecter/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lecter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Neodelf
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -88,11 +88,6 @@ extensions: []
|
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
90
|
- ".gitignore"
|
91
|
-
- ".idea/encodings.xml"
|
92
|
-
- ".idea/lecter.iml"
|
93
|
-
- ".idea/misc.xml"
|
94
|
-
- ".idea/modules.xml"
|
95
|
-
- ".idea/workspace.xml"
|
96
91
|
- ".rspec"
|
97
92
|
- ".travis.yml"
|
98
93
|
- CODE_OF_CONDUCT.md
|
@@ -101,14 +96,17 @@ files:
|
|
101
96
|
- LICENSE.txt
|
102
97
|
- README.md
|
103
98
|
- Rakefile
|
104
|
-
- app/assets/javascripts/
|
105
|
-
- app/assets/stylesheets/
|
99
|
+
- app/assets/javascripts/lecter.js
|
100
|
+
- app/assets/stylesheets/lecter.css
|
106
101
|
- app/controllers/lecter/diagnosis_controller.rb
|
102
|
+
- app/views/layouts/lecter.slim
|
107
103
|
- app/views/lecter/diagnosis/new.erb
|
108
104
|
- app/views/lecter/diagnosis/show.slim
|
109
105
|
- bin/console
|
110
106
|
- bin/rails
|
111
107
|
- bin/setup
|
108
|
+
- config/locales/en.yml
|
109
|
+
- config/locales/ru.yml
|
112
110
|
- config/routes.rb
|
113
111
|
- lecter.gemspec
|
114
112
|
- lib/lecter.rb
|
@@ -1,106 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
|
3
|
-
Railscasts-like style (c) Visoft, Inc. (Damien White)
|
4
|
-
|
5
|
-
*/
|
6
|
-
|
7
|
-
.hljs {
|
8
|
-
display: block;
|
9
|
-
overflow-x: auto;
|
10
|
-
padding: 0.5em;
|
11
|
-
background: #232323;
|
12
|
-
color: #e6e1dc;
|
13
|
-
}
|
14
|
-
|
15
|
-
.hljs-comment,
|
16
|
-
.hljs-quote {
|
17
|
-
color: #bc9458;
|
18
|
-
font-style: italic;
|
19
|
-
}
|
20
|
-
|
21
|
-
.hljs-keyword,
|
22
|
-
.hljs-selector-tag {
|
23
|
-
color: #c26230;
|
24
|
-
}
|
25
|
-
|
26
|
-
.hljs-string,
|
27
|
-
.hljs-number,
|
28
|
-
.hljs-regexp,
|
29
|
-
.hljs-variable,
|
30
|
-
.hljs-template-variable {
|
31
|
-
color: #a5c261;
|
32
|
-
}
|
33
|
-
|
34
|
-
.hljs-subst {
|
35
|
-
color: #519f50;
|
36
|
-
}
|
37
|
-
|
38
|
-
.hljs-tag,
|
39
|
-
.hljs-name {
|
40
|
-
color: #e8bf6a;
|
41
|
-
}
|
42
|
-
|
43
|
-
.hljs-type {
|
44
|
-
color: #da4939;
|
45
|
-
}
|
46
|
-
|
47
|
-
|
48
|
-
.hljs-symbol,
|
49
|
-
.hljs-bullet,
|
50
|
-
.hljs-built_in,
|
51
|
-
.hljs-builtin-name,
|
52
|
-
.hljs-attr,
|
53
|
-
.hljs-link {
|
54
|
-
color: #6d9cbe;
|
55
|
-
}
|
56
|
-
|
57
|
-
.hljs-params {
|
58
|
-
color: #d0d0ff;
|
59
|
-
}
|
60
|
-
|
61
|
-
.hljs-attribute {
|
62
|
-
color: #cda869;
|
63
|
-
}
|
64
|
-
|
65
|
-
.hljs-meta {
|
66
|
-
color: #9b859d;
|
67
|
-
}
|
68
|
-
|
69
|
-
.hljs-title,
|
70
|
-
.hljs-section {
|
71
|
-
color: #ffc66d;
|
72
|
-
}
|
73
|
-
|
74
|
-
.hljs-addition {
|
75
|
-
background-color: #144212;
|
76
|
-
color: #e6e1dc;
|
77
|
-
display: inline-block;
|
78
|
-
width: 100%;
|
79
|
-
}
|
80
|
-
|
81
|
-
.hljs-deletion {
|
82
|
-
background-color: #600;
|
83
|
-
color: #e6e1dc;
|
84
|
-
display: inline-block;
|
85
|
-
width: 100%;
|
86
|
-
}
|
87
|
-
|
88
|
-
.hljs-selector-class {
|
89
|
-
color: #9b703f;
|
90
|
-
}
|
91
|
-
|
92
|
-
.hljs-selector-id {
|
93
|
-
color: #8b98ab;
|
94
|
-
}
|
95
|
-
|
96
|
-
.hljs-emphasis {
|
97
|
-
font-style: italic;
|
98
|
-
}
|
99
|
-
|
100
|
-
.hljs-strong {
|
101
|
-
font-weight: bold;
|
102
|
-
}
|
103
|
-
|
104
|
-
.hljs-link {
|
105
|
-
text-decoration: underline;
|
106
|
-
}
|