crud_inspector 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/crud_inspector/files/cleaner.rb +35 -0
- data/lib/crud_inspector/files/manager.rb +38 -0
- data/lib/crud_inspector/files/mime_types/json.rb +38 -0
- data/lib/crud_inspector/files/mime_types/xml.rb +23 -0
- data/lib/crud_inspector/files/writer.rb +60 -0
- data/lib/crud_inspector/version.rb +1 -1
- data/lib/crud_inspector.rb +19 -1
- metadata +6 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d61ac712616d852a422de47809e13dc6febca7a3
|
4
|
+
data.tar.gz: 82f18e9d026bb1c7cceb2bbbf4762c109a8c8183
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c7c595c79dc789f8539eb65145ec8456292037d5ce6f95162f6672758028fc0db536737cde77b14e8e12ea69db0ecd61b026cf807a65f8f6ca682d3a6744a75
|
7
|
+
data.tar.gz: 6832b2c810a2a33e3a29b6e5edabd92f7d163243a68b0007de07002d7c54b12720850097f74ad3d463a06deb49d447491521b3413cf88a08215059fa1a90df58
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module CrudInspector
|
4
|
+
module Files
|
5
|
+
class Cleaner
|
6
|
+
def initialize(repo)
|
7
|
+
@repo = repo
|
8
|
+
end
|
9
|
+
|
10
|
+
def try_clean
|
11
|
+
delete_oldest_file if file_count > 30
|
12
|
+
end
|
13
|
+
|
14
|
+
def delete_oldest_file
|
15
|
+
FileUtils.rm full_path(files.first)
|
16
|
+
end
|
17
|
+
|
18
|
+
def files
|
19
|
+
@files ||= begin
|
20
|
+
entries = Dir.entries(@repo).drop_while { |file| ['.','..'].include?(file) }
|
21
|
+
entries = entries.sort_by { |filename| File.ctime(full_path(filename)) }
|
22
|
+
entries
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def file_count
|
27
|
+
files.count
|
28
|
+
end
|
29
|
+
|
30
|
+
def full_path(filename)
|
31
|
+
@repo.dup + '/' + filename
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module CrudInspector
|
4
|
+
module Files
|
5
|
+
class Manager
|
6
|
+
def initialize(options)
|
7
|
+
@options = options
|
8
|
+
end
|
9
|
+
|
10
|
+
def perform
|
11
|
+
prepare_repo
|
12
|
+
writer = CrudInspector::Files::Writer.new(@options, repo)
|
13
|
+
case @options[:type]
|
14
|
+
when :rest
|
15
|
+
writer.extend(CrudInspector::Files::MimeTypes::Json).write
|
16
|
+
when :soap
|
17
|
+
writer.extend(CrudInspector::Files::MimeTypes::Xml).write
|
18
|
+
else
|
19
|
+
'type not supported'
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def repo
|
26
|
+
@repo ||= File.join(Rails.root, "crud_tracking", "services", @options[:klass].to_s.snakecase.gsub("::", "/"))
|
27
|
+
end
|
28
|
+
|
29
|
+
def prepare_repo
|
30
|
+
if Dir.exist?(repo)
|
31
|
+
CrudInspector::Files::Cleaner.new(repo).try_clean
|
32
|
+
else
|
33
|
+
FileUtils.mkdir_p(repo)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module CrudInspector::Files
|
2
|
+
module MimeTypes
|
3
|
+
module Json
|
4
|
+
PAYLOAD = %w(args payload).freeze
|
5
|
+
|
6
|
+
def format(obj)
|
7
|
+
JSON.pretty_generate obj
|
8
|
+
rescue JSON::GeneratorError
|
9
|
+
if payload(obj).class == String && payload(obj).length > 1000
|
10
|
+
obj[PAYLOAD.first][PAYLOAD.second] = ''
|
11
|
+
end
|
12
|
+
JSON.pretty_generate obj
|
13
|
+
end
|
14
|
+
|
15
|
+
def extension
|
16
|
+
'json'
|
17
|
+
end
|
18
|
+
|
19
|
+
def content_body
|
20
|
+
request? ? format(request_body) : format(response_body)
|
21
|
+
end
|
22
|
+
|
23
|
+
def request_body
|
24
|
+
@options[:request].as_json
|
25
|
+
end
|
26
|
+
|
27
|
+
def response_body
|
28
|
+
JSON.parse(@options[:response].dup.body.as_json)
|
29
|
+
rescue JSON::ParserError
|
30
|
+
@options[:response].body
|
31
|
+
end
|
32
|
+
|
33
|
+
def payload(obj)
|
34
|
+
obj.dig(*PAYLOAD)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module CrudInspector::Files
|
2
|
+
module MimeTypes
|
3
|
+
module Xml
|
4
|
+
require "rexml/document"
|
5
|
+
|
6
|
+
def extension
|
7
|
+
'xml'
|
8
|
+
end
|
9
|
+
|
10
|
+
def format(transaction)
|
11
|
+
doc = REXML::Document.new(transaction.body)
|
12
|
+
output = ""
|
13
|
+
formatter = REXML::Formatters::Pretty.new
|
14
|
+
formatter.write(doc, output)
|
15
|
+
output
|
16
|
+
end
|
17
|
+
|
18
|
+
def content_body
|
19
|
+
request? ? format(@options[:request]) : format(@options[:response])
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module CrudInspector
|
2
|
+
module Files
|
3
|
+
class Writer
|
4
|
+
def initialize(options, repo)
|
5
|
+
@options = options
|
6
|
+
@repo = repo
|
7
|
+
end
|
8
|
+
|
9
|
+
def write
|
10
|
+
retries ||= 0
|
11
|
+
File.open(filepath, 'w') { |f| f.write(content) }
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def timestamp
|
16
|
+
@timestamp ||= Time.now.strftime('%Y-%m-%d_%Hh_%Mm_%Ss')
|
17
|
+
end
|
18
|
+
|
19
|
+
def filepath
|
20
|
+
@repo + '/' + timestamp + "_" + transaction_type.to_s + "." + extension
|
21
|
+
end
|
22
|
+
|
23
|
+
def transaction_type
|
24
|
+
@options[:request].present? ? :request : :response
|
25
|
+
end
|
26
|
+
|
27
|
+
def request?
|
28
|
+
transaction_type == :request
|
29
|
+
end
|
30
|
+
|
31
|
+
def request_url
|
32
|
+
@options[:request].url
|
33
|
+
end
|
34
|
+
|
35
|
+
def response_code
|
36
|
+
@options[:response].code
|
37
|
+
end
|
38
|
+
|
39
|
+
def request_url_content
|
40
|
+
"REQUEST URL: #{request_url}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def response_code_content
|
44
|
+
"RESPONSE CODE: #{response_code}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def content
|
48
|
+
@content ||=
|
49
|
+
<<-CONTENT
|
50
|
+
CREATED AT: #{timestamp}
|
51
|
+
#{request? ? request_url_content : response_code_content}
|
52
|
+
|
53
|
+
#{transaction_type.to_s.upcase}:
|
54
|
+
#{content_body}
|
55
|
+
|
56
|
+
CONTENT
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/crud_inspector.rb
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
1
3
|
module CrudInspector
|
2
|
-
|
4
|
+
class Tracker
|
5
|
+
def initialize(options = {})
|
6
|
+
@options = options
|
7
|
+
end
|
8
|
+
|
9
|
+
def track
|
10
|
+
return unless Rails.env.development?
|
11
|
+
case @options[:type]
|
12
|
+
when :rest
|
13
|
+
CrudInspector::Files::Manager.new(@options.merge!(type: :rest)).perform
|
14
|
+
when :soap
|
15
|
+
CrudInspector::Files::Manager.new(@options.merge!(type: :soap)).perform
|
16
|
+
else
|
17
|
+
"no type given"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
3
21
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: crud_inspector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bryan Finlayson
|
@@ -49,6 +49,11 @@ files:
|
|
49
49
|
- README.md
|
50
50
|
- Rakefile
|
51
51
|
- lib/crud_inspector.rb
|
52
|
+
- lib/crud_inspector/files/cleaner.rb
|
53
|
+
- lib/crud_inspector/files/manager.rb
|
54
|
+
- lib/crud_inspector/files/mime_types/json.rb
|
55
|
+
- lib/crud_inspector/files/mime_types/xml.rb
|
56
|
+
- lib/crud_inspector/files/writer.rb
|
52
57
|
- lib/crud_inspector/version.rb
|
53
58
|
- lib/tasks/crud_inspector_tasks.rake
|
54
59
|
homepage: https://github.com/bdfinlayson/crud_inspector
|