straw 0.1.0 → 0.1.1

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.
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