ree 1.2.0 → 1.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4706c35aa267df5bf2216c2eb9473f82dc5adab6caaa85d05d811d724768ba00
4
- data.tar.gz: '05389e5c0e3aa6e313c5c78494664a8c9f309c0db991b045df6fa1671464c2fa'
3
+ metadata.gz: 26a7ec18c35a9a6d79aad3f91f111bda3338547bc61f6f979ba226d2d5d393ab
4
+ data.tar.gz: b330811d3d6623eeb4aab2deb85f9687c3cbe53142987cb03bb3938608d7c786
5
5
  SHA512:
6
- metadata.gz: f730da40f895bce754a410aaf054da34d0835cb7b63afe6b26582509a40dcf17d394188d355bcc9171b034618748d3d93c50c697cc5526288d07db8453ef0669
7
- data.tar.gz: b33741238e6dac7275c9a1098c8b806c14f0081673b5555c7d12d89f8fcb2becf2e866bf4ce6149a0d737f649c2ebc28bf1b9cedc00e6c86b0049a9390c27c8a
6
+ metadata.gz: 10e3c7af5fa2f7255884071f960c4795dc2eb32c7974a8ce8daf2a6d44f7a02a09e088a2ceab09fe71a738694279576c325480193e6c6b896ecb830bbc5e99a0
7
+ data.tar.gz: 2e3f44006a5aa0764f4ff2dc2addd46a23845ba50abec919e770de25d6d8eac02dc1fa93d9b87d5d1ac59387b74f29f66ab812b36acc057f575c48626a8ad27d
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree (1.2.0)
4
+ ree (1.2.1)
5
5
  commander (~> 5.0.0)
6
6
  logger (~> 1.6.5)
7
7
 
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Ree::BenchmarkTracer
4
+ Node = Struct.new(:name, :start_time, :duration, :children)
5
+
6
+ THREAD_KEY = :ree_benchmark_tracer
7
+
8
+ class << self
9
+ def trace(name)
10
+ stack = Thread.current[THREAD_KEY] ||= []
11
+ node = Node.new(name, Process.clock_gettime(Process::CLOCK_MONOTONIC), nil, [])
12
+ stack.last.children.push(node) if stack.last
13
+ stack.push(node)
14
+
15
+ begin
16
+ result = yield
17
+ ensure
18
+ node.duration = Process.clock_gettime(Process::CLOCK_MONOTONIC) - node.start_time
19
+ stack.pop
20
+
21
+ if stack.empty?
22
+ Thread.current[THREAD_KEY] = nil
23
+ print_tree(node)
24
+ end
25
+ end
26
+
27
+ result
28
+ end
29
+
30
+ private
31
+
32
+ def print_tree(node, depth = 0)
33
+ indent = " " * depth
34
+ duration_ms = (node.duration * 1000).round(2)
35
+ $stdout.puts "#{indent}#{node.name} (#{duration_ms}ms)"
36
+ node.children.each { |child| print_tree(child, depth + 1) }
37
+ end
38
+ end
39
+ end
@@ -160,6 +160,17 @@ class Ree::ObjectCompiler
160
160
  #{str}
161
161
  ruby_eval
162
162
 
163
+ if Ree.benchmark_mode? && object.fn? && !klass.instance_variable_get(:@__ree_benchmark_prepended)
164
+ klass.instance_variable_set(:@__ree_benchmark_prepended, true)
165
+ benchmark_name = "#{object.package_name}/#{object.name}"
166
+ benchmark_mod = Module.new do
167
+ define_method(:call) do |*args, **kwargs, &block|
168
+ Ree::BenchmarkTracer.trace(benchmark_name) { super(*args, **kwargs, &block) }
169
+ end
170
+ end
171
+ klass.prepend(benchmark_mod)
172
+ end
173
+
163
174
  # compile all linked objects
164
175
  links.each do |link|
165
176
  pckg = @packages_facade.get_loaded_package(link.package_name)
data/lib/ree/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ree
4
- VERSION = "1.2.0"
4
+ VERSION = "1.2.1"
5
5
  end
data/lib/ree.rb CHANGED
@@ -8,6 +8,7 @@ require 'fileutils'
8
8
  module Ree
9
9
  autoload :Args, 'ree/args'
10
10
  autoload :BeanDSL, 'ree/bean_dsl'
11
+ autoload :BenchmarkTracer, 'ree/benchmark_tracer'
11
12
  autoload :CLI, 'ree/cli'
12
13
  autoload :Container, 'ree/container'
13
14
  autoload :Contracts, 'ree/contracts'
@@ -109,6 +110,18 @@ module Ree
109
110
  !!@irb_mode
110
111
  end
111
112
 
113
+ def enable_benchmark_mode
114
+ @benchmark_mode = true
115
+ end
116
+
117
+ def disable_benchmark_mode
118
+ @benchmark_mode = false
119
+ end
120
+
121
+ def benchmark_mode?
122
+ !!@benchmark_mode
123
+ end
124
+
112
125
  def set_logger_debug
113
126
  logger.level = Logger::DEBUG
114
127
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ree
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-06-16 00:00:00.000000000 Z
10
+ date: 2026-02-08 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: commander
@@ -75,6 +75,7 @@ files:
75
75
  - lib/ree.rb
76
76
  - lib/ree/args.rb
77
77
  - lib/ree/bean_dsl.rb
78
+ - lib/ree/benchmark_tracer.rb
78
79
  - lib/ree/cli.rb
79
80
  - lib/ree/cli/generate_package.rb
80
81
  - lib/ree/cli/generate_packages_schema.rb