straw 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/straw/version.rb +1 -1
  3. data/lib/straw.rb +60 -0
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 64c58329f184b1e76676df67b104dda39907a5983aa55bccd11504269373472e
4
- data.tar.gz: f76a114689d847888dd53c88f212ddbd668ca98dd67d014fa68fe76b87f25ab1
3
+ metadata.gz: c2264fb2aa96e3d2eefecb1b856971df87d2d35b4f6443a767bc10af971026a0
4
+ data.tar.gz: 29770cb6ea4bb3e9f3d497c4fb9bf7db0998ff6060658d8f2c90907956926b0c
5
5
  SHA512:
6
- metadata.gz: a2829f76d3a1b35c6be519a633fe9237eaf06d7bfb0f073e0de5caaf62fa33e7eb37106c60790e15ccfde9bd931934b6e75c652f9b5c4d5e4c95da38d09227c2
7
- data.tar.gz: ab08830b2c576dc64b1efa1e047e1c21afa2dd1b9383c4e74ca1aba6e37d8b296a75305aa950bba1bd9547c404399d052e8c812ccc96ecdd17c1447110c29ecd
6
+ metadata.gz: 6a3f304854e6ff9acc65a6d4989137d060179d4bb16a120727d01262ba1ff03c0df5010f8ad52d21c8f66a46f854db5c2316eecb0bd50c8f0d8dbf4ae3f43e38
7
+ data.tar.gz: 870b8567373f4bb55462975cec06704ac2b0f8085273e731fc06c576ac4c1c5a6b9a0dfaa8cf32eda424e4e9dbecf5c7d1674a502af0c3aa583d1360bf09a1f0
data/lib/straw/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Straw
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
data/lib/straw.rb CHANGED
@@ -4,4 +4,64 @@ require_relative "straw/version"
4
4
 
5
5
  module Straw
6
6
  class Error < StandardError; end
7
+
8
+ def self.logger
9
+ @logger ||= Logger.new($stderr, level: ENV.fetch("LOG_LEVEL", Logger::INFO)).tap do |x|
10
+ x.formatter = proc do |_severity, _datetime, _progname, message|
11
+ "[#{VERSION}] #{message}\n"
12
+ end
13
+ end
14
+ end
15
+
16
+ def self.tracer
17
+ @tracer ||= Tracer.new(logger)
18
+ end
19
+
20
+ module Memoizable
21
+ def memoize(key)
22
+ if memoized?(key)
23
+ instance_variable_get(var_for(key))
24
+ else
25
+ instance_variable_set(var_for(key), yield)
26
+ end
27
+ end
28
+
29
+ def memoized?(key)
30
+ instance_variable_defined?(var_for(key))
31
+ end
32
+
33
+ private
34
+
35
+ def var_for(key)
36
+ "@#{key}"
37
+ end
38
+ end
39
+
40
+ class Tracer
41
+ def initialize(logger)
42
+ @logger = logger
43
+ end
44
+
45
+ def trace(defaults = {})
46
+ tracer = TracePoint.new(:call) do |x|
47
+ @logger.debug(defaults.merge({ path: x.path, lineno: x.lineno, clazz: x.defined_class, method: x.method_id, args: args_from(x), locals: locals_from(x) }))
48
+ rescue StandardError => boom
49
+ @logger.error(defaults.merge({ message: boom.message, stacktrace: boom.backtrace }))
50
+ end
51
+ tracer.enable
52
+ yield
53
+ ensure
54
+ tracer.disable
55
+ end
56
+
57
+ private
58
+
59
+ def args_from(trace)
60
+ trace.parameters.map(&:last).map { |x| [x, trace.binding.eval(x.to_s)] }.to_h
61
+ end
62
+
63
+ def locals_from(trace)
64
+ trace.binding.local_variables.map { |x| [x, trace.binding.local_variable_get(x)] }.to_h
65
+ end
66
+ end
7
67
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: straw
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - mo khan