type_fusion 0.0.3 → 0.0.4
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/CHANGELOG.md +10 -0
 - data/Gemfile +1 -3
 - data/Gemfile.lock +46 -31
 - data/README.md +27 -3
 - data/lib/type_fusion/config.rb +4 -1
 - data/lib/type_fusion/litejob.rb +7 -0
 - data/lib/type_fusion/rails/railtie.rb +2 -0
 - data/lib/type_fusion/sample_call.rb +5 -1
 - data/lib/type_fusion/sample_job.rb +5 -3
 - data/lib/type_fusion/sampler.rb +37 -5
 - data/lib/type_fusion/version.rb +1 -1
 - data/lib/type_fusion.rb +1 -0
 - data/test.rb +1 -1
 - metadata +22 -7
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 7eaa132f18093b5b57b9db4e49130adb2f9ff41ae03559848e1334ee4f863bfe
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 4bc9dcc31808f3f39707516436f28a3e73de19054f80c2d143da66dc365ae106
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: '086356eb24932d3fbce347967869de8ba31672ebde52eaed096a640713ca8cb69e151ebe2a6dd71ebdb596a07cd6ea971bcf7f0147887059a344901d08e2be90'
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 35dbb641e2ffc414aa0c42af6f2a61538f3a24f37e5bd35daf623bc7824b853fe8963711c10fd741e2e6155be6b73cf26fd7718f530b36e238c912f2ce372f7b
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,5 +1,15 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ## [Unreleased]
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            ## [0.0.4] - 2023-08-16
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            - Implement sample collection by sending samples to gem.sh endpoint
         
     | 
| 
      
 6 
     | 
    
         
            +
            - Introduce Litejob to enqueue samples to be collected async
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Updates to `SampleCall`
         
     | 
| 
      
 8 
     | 
    
         
            +
              - Split up `gem_and_version` to `gem` and `version` in `SampleCall`
         
     | 
| 
      
 9 
     | 
    
         
            +
              - Also collect `application_name` and `type_fusion_version` with `SampleCall`
         
     | 
| 
      
 10 
     | 
    
         
            +
              - Change `Tracepoint` API from `:call` to `:return` to also collect `return_value` in `SampleCall`
         
     | 
| 
      
 11 
     | 
    
         
            +
            - Introduce `endpoint` and `application_name` configs
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
       3 
13 
     | 
    
         
             
            ## [0.0.3] - 2023-08-13
         
     | 
| 
       4 
14 
     | 
    
         | 
| 
       5 
15 
     | 
    
         
             
            - Introduce `TypeFusion::Middleware` to allow type-sampling in Rack-powered apps
         
     | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/Gemfile.lock
    CHANGED
    
    | 
         @@ -1,54 +1,69 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            GIT
         
     | 
| 
       2 
     | 
    
         
            -
              remote: https://github.com/marcoroth/litestack.git
         
     | 
| 
       3 
     | 
    
         
            -
              revision: 1911d5ef35f474425fb4e17a11a7d40deb4008a8
         
     | 
| 
       4 
     | 
    
         
            -
              specs:
         
     | 
| 
       5 
     | 
    
         
            -
                litestack (0.2.6)
         
     | 
| 
       6 
     | 
    
         
            -
                  erubi
         
     | 
| 
       7 
     | 
    
         
            -
                  hanami-router
         
     | 
| 
       8 
     | 
    
         
            -
                  oj
         
     | 
| 
       9 
     | 
    
         
            -
                  rack
         
     | 
| 
       10 
     | 
    
         
            -
                  sqlite3
         
     | 
| 
       11 
     | 
    
         
            -
                  tilt
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
1 
     | 
    
         
             
            PATH
         
     | 
| 
       14 
2 
     | 
    
         
             
              remote: .
         
     | 
| 
       15 
3 
     | 
    
         
             
              specs:
         
     | 
| 
       16 
     | 
    
         
            -
                type_fusion (0.0. 
     | 
| 
       17 
     | 
    
         
            -
                   
     | 
| 
      
 4 
     | 
    
         
            +
                type_fusion (0.0.4)
         
     | 
| 
      
 5 
     | 
    
         
            +
                  lhc (~> 15.2)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  litejob (~> 0.2.3)
         
     | 
| 
       18 
7 
     | 
    
         | 
| 
       19 
8 
     | 
    
         
             
            GEM
         
     | 
| 
       20 
9 
     | 
    
         
             
              remote: https://rubygems.org/
         
     | 
| 
       21 
10 
     | 
    
         
             
              specs:
         
     | 
| 
      
 11 
     | 
    
         
            +
                activesupport (7.0.7)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  concurrent-ruby (~> 1.0, >= 1.0.2)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  i18n (>= 1.6, < 2)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  minitest (>= 5.1)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  tzinfo (~> 2.0)
         
     | 
| 
      
 16 
     | 
    
         
            +
                addressable (2.8.5)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  public_suffix (>= 2.0.2, < 6.0)
         
     | 
| 
       22 
18 
     | 
    
         
             
                ast (2.4.2)
         
     | 
| 
       23 
     | 
    
         
            -
                 
     | 
| 
       24 
     | 
    
         
            -
                 
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                   
     | 
| 
       27 
     | 
    
         
            -
                 
     | 
| 
       28 
     | 
    
         
            -
                 
     | 
| 
       29 
     | 
    
         
            -
                   
     | 
| 
       30 
     | 
    
         
            -
                  url_mount (~> 0.2.1)
         
     | 
| 
      
 19 
     | 
    
         
            +
                base64 (0.1.1)
         
     | 
| 
      
 20 
     | 
    
         
            +
                concurrent-ruby (1.2.2)
         
     | 
| 
      
 21 
     | 
    
         
            +
                ethon (0.16.0)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  ffi (>= 1.15.0)
         
     | 
| 
      
 23 
     | 
    
         
            +
                ffi (1.15.5)
         
     | 
| 
      
 24 
     | 
    
         
            +
                i18n (1.14.1)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  concurrent-ruby (~> 1.0)
         
     | 
| 
       31 
26 
     | 
    
         
             
                json (2.6.3)
         
     | 
| 
      
 27 
     | 
    
         
            +
                language_server-protocol (3.17.0.3)
         
     | 
| 
      
 28 
     | 
    
         
            +
                lhc (15.2.1)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  activesupport (>= 5.2)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  addressable
         
     | 
| 
      
 31 
     | 
    
         
            +
                  local_uri
         
     | 
| 
      
 32 
     | 
    
         
            +
                  typhoeus (>= 0.11)
         
     | 
| 
      
 33 
     | 
    
         
            +
                litedb (0.2.1)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  litescheduler (>= 0.2.0)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  sqlite3 (>= 1.5.0)
         
     | 
| 
      
 36 
     | 
    
         
            +
                litejob (0.2.3)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  litequeue (>= 0.2.1)
         
     | 
| 
      
 38 
     | 
    
         
            +
                  litescheduler (>= 0.2.1)
         
     | 
| 
      
 39 
     | 
    
         
            +
                litequeue (0.2.1)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  litedb (>= 0.2.1)
         
     | 
| 
      
 41 
     | 
    
         
            +
                litescheduler (0.2.1)
         
     | 
| 
      
 42 
     | 
    
         
            +
                local_uri (1.2.0)
         
     | 
| 
      
 43 
     | 
    
         
            +
                  activesupport
         
     | 
| 
      
 44 
     | 
    
         
            +
                  rack
         
     | 
| 
       32 
45 
     | 
    
         
             
                minitest (5.19.0)
         
     | 
| 
       33 
     | 
    
         
            -
                oj (3.15.1)
         
     | 
| 
       34 
46 
     | 
    
         
             
                parallel (1.23.0)
         
     | 
| 
       35 
47 
     | 
    
         
             
                parser (3.2.2.3)
         
     | 
| 
       36 
48 
     | 
    
         
             
                  ast (~> 2.4.1)
         
     | 
| 
       37 
49 
     | 
    
         
             
                  racc
         
     | 
| 
      
 50 
     | 
    
         
            +
                public_suffix (5.0.3)
         
     | 
| 
       38 
51 
     | 
    
         
             
                racc (1.7.1)
         
     | 
| 
       39 
52 
     | 
    
         
             
                rack (3.0.8)
         
     | 
| 
       40 
53 
     | 
    
         
             
                rainbow (3.1.1)
         
     | 
| 
       41 
54 
     | 
    
         
             
                rake (13.0.6)
         
     | 
| 
       42 
55 
     | 
    
         
             
                regexp_parser (2.8.1)
         
     | 
| 
       43 
56 
     | 
    
         
             
                rexml (3.2.6)
         
     | 
| 
       44 
     | 
    
         
            -
                rubocop (1. 
     | 
| 
      
 57 
     | 
    
         
            +
                rubocop (1.56.0)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  base64 (~> 0.1.1)
         
     | 
| 
       45 
59 
     | 
    
         
             
                  json (~> 2.3)
         
     | 
| 
      
 60 
     | 
    
         
            +
                  language_server-protocol (>= 3.17.0)
         
     | 
| 
       46 
61 
     | 
    
         
             
                  parallel (~> 1.10)
         
     | 
| 
       47 
     | 
    
         
            -
                  parser (>= 3.2. 
     | 
| 
      
 62 
     | 
    
         
            +
                  parser (>= 3.2.2.3)
         
     | 
| 
       48 
63 
     | 
    
         
             
                  rainbow (>= 2.2.2, < 4.0)
         
     | 
| 
       49 
64 
     | 
    
         
             
                  regexp_parser (>= 1.8, < 3.0)
         
     | 
| 
       50 
65 
     | 
    
         
             
                  rexml (>= 3.2.5, < 4.0)
         
     | 
| 
       51 
     | 
    
         
            -
                  rubocop-ast (>= 1. 
     | 
| 
      
 66 
     | 
    
         
            +
                  rubocop-ast (>= 1.28.1, < 2.0)
         
     | 
| 
       52 
67 
     | 
    
         
             
                  ruby-progressbar (~> 1.7)
         
     | 
| 
       53 
68 
     | 
    
         
             
                  unicode-display_width (>= 2.4.0, < 3.0)
         
     | 
| 
       54 
69 
     | 
    
         
             
                rubocop-ast (1.29.0)
         
     | 
| 
         @@ -56,20 +71,20 @@ GEM 
     | 
|
| 
       56 
71 
     | 
    
         
             
                ruby-progressbar (1.13.0)
         
     | 
| 
       57 
72 
     | 
    
         
             
                sqlite3 (1.6.3-x86_64-darwin)
         
     | 
| 
       58 
73 
     | 
    
         
             
                sqlite3 (1.6.3-x86_64-linux)
         
     | 
| 
       59 
     | 
    
         
            -
                 
     | 
| 
      
 74 
     | 
    
         
            +
                typhoeus (1.4.0)
         
     | 
| 
      
 75 
     | 
    
         
            +
                  ethon (>= 0.9.0)
         
     | 
| 
      
 76 
     | 
    
         
            +
                tzinfo (2.0.6)
         
     | 
| 
      
 77 
     | 
    
         
            +
                  concurrent-ruby (~> 1.0)
         
     | 
| 
       60 
78 
     | 
    
         
             
                unicode-display_width (2.4.2)
         
     | 
| 
       61 
     | 
    
         
            -
                url_mount (0.2.1)
         
     | 
| 
       62 
     | 
    
         
            -
                  rack
         
     | 
| 
       63 
79 
     | 
    
         | 
| 
       64 
80 
     | 
    
         
             
            PLATFORMS
         
     | 
| 
       65 
81 
     | 
    
         
             
              x86_64-darwin-22
         
     | 
| 
       66 
82 
     | 
    
         
             
              x86_64-linux
         
     | 
| 
       67 
83 
     | 
    
         | 
| 
       68 
84 
     | 
    
         
             
            DEPENDENCIES
         
     | 
| 
       69 
     | 
    
         
            -
              litestack!
         
     | 
| 
       70 
85 
     | 
    
         
             
              minitest (~> 5.0)
         
     | 
| 
       71 
86 
     | 
    
         
             
              rake (~> 13.0)
         
     | 
| 
       72 
     | 
    
         
            -
              rubocop (~> 1. 
     | 
| 
      
 87 
     | 
    
         
            +
              rubocop (~> 1.56)
         
     | 
| 
       73 
88 
     | 
    
         
             
              type_fusion!
         
     | 
| 
       74 
89 
     | 
    
         | 
| 
       75 
90 
     | 
    
         
             
            BUNDLED WITH
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -38,6 +38,27 @@ require "type_fusion" 
     | 
|
| 
       38 
38 
     | 
    
         | 
| 
       39 
39 
     | 
    
         
             
            TypeFusion.config do |config|
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
      
 41 
     | 
    
         
            +
              # === application_name
         
     | 
| 
      
 42 
     | 
    
         
            +
              #
         
     | 
| 
      
 43 
     | 
    
         
            +
              # Set application_name to a string which is used to know where the samples
         
     | 
| 
      
 44 
     | 
    
         
            +
              # came from. Set application_name to an empty string if you wish to not
         
     | 
| 
      
 45 
     | 
    
         
            +
              # send the application name alongside the samples.
         
     | 
| 
      
 46 
     | 
    
         
            +
              #
         
     | 
| 
      
 47 
     | 
    
         
            +
              # Default: "TypeFusion"
         
     | 
| 
      
 48 
     | 
    
         
            +
              # Default when using Rails: Rails.application.class.module_parent_name
         
     | 
| 
      
 49 
     | 
    
         
            +
              #
         
     | 
| 
      
 50 
     | 
    
         
            +
              # config.application_name = "YourApplication"
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
              # === endpoint
         
     | 
| 
      
 54 
     | 
    
         
            +
              #
         
     | 
| 
      
 55 
     | 
    
         
            +
              # Set endpoint to an URL where TypeFusion should send the samples to.
         
     | 
| 
      
 56 
     | 
    
         
            +
              #
         
     | 
| 
      
 57 
     | 
    
         
            +
              # Default: "https://gem.sh/api/v1/types/samples"
         
     | 
| 
      
 58 
     | 
    
         
            +
              #
         
     | 
| 
      
 59 
     | 
    
         
            +
              # config.endpoint = "https://your-domain.com/api/v1/types/samples"
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
       41 
62 
     | 
    
         
             
              # === type_sample_request
         
     | 
| 
       42 
63 
     | 
    
         
             
              #
         
     | 
| 
       43 
64 
     | 
    
         
             
              # Set type_sample_request to a lambda which resolves to true/false
         
     | 
| 
         @@ -54,13 +75,16 @@ TypeFusion.config do |config| 
     | 
|
| 
       54 
75 
     | 
    
         
             
              # to true/false to check if a tracepoint_path should be sampled
         
     | 
| 
       55 
76 
     | 
    
         
             
              # or not.
         
     | 
| 
       56 
77 
     | 
    
         
             
              #
         
     | 
| 
       57 
     | 
    
         
            -
              # This can be useful when you  
     | 
| 
      
 78 
     | 
    
         
            +
              # This can be useful when you want to only sample method calls for
         
     | 
| 
       58 
79 
     | 
    
         
             
              # certain gems or want to exclude a gem from being sampled.
         
     | 
| 
       59 
80 
     | 
    
         
             
              #
         
     | 
| 
       60 
81 
     | 
    
         
             
              # Example:
         
     | 
| 
       61 
82 
     | 
    
         
             
              # config.type_sample_tracepoint_path = ->(tracepoint_path) {
         
     | 
| 
       62 
     | 
    
         
            -
              #    
     | 
| 
       63 
     | 
    
         
            -
              #   tracepoint_path.include?(" 
     | 
| 
      
 83 
     | 
    
         
            +
              #   return false if tracepoint_path.include?("activerecord")
         
     | 
| 
      
 84 
     | 
    
         
            +
              #   return false if tracepoint_path.include?("sprockets")
         
     | 
| 
      
 85 
     | 
    
         
            +
              #   return false if tracepoint_path.include?("some-private-gem")
         
     | 
| 
      
 86 
     | 
    
         
            +
              #
         
     | 
| 
      
 87 
     | 
    
         
            +
              #   true
         
     | 
| 
       64 
88 
     | 
    
         
             
              # }
         
     | 
| 
       65 
89 
     | 
    
         
             
              #
         
     | 
| 
       66 
90 
     | 
    
         
             
              # Default: ->(tracepoint_path) { true }
         
     | 
    
        data/lib/type_fusion/config.rb
    CHANGED
    
    | 
         @@ -11,17 +11,20 @@ module TypeFusion 
     | 
|
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                  @config
         
     | 
| 
       13 
13 
     | 
    
         
             
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
                alias configure config
         
     | 
| 
       14 
15 
     | 
    
         
             
              end
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
       16 
17 
     | 
    
         
             
              class Config
         
     | 
| 
       17 
18 
     | 
    
         
             
                include Singleton
         
     | 
| 
       18 
19 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
                attr_accessor :type_sample_call_rate, :type_sample_request, :type_sample_tracepoint_path
         
     | 
| 
      
 20 
     | 
    
         
            +
                attr_accessor :type_sample_call_rate, :type_sample_request, :type_sample_tracepoint_path, :endpoint, :application_name
         
     | 
| 
       20 
21 
     | 
    
         | 
| 
       21 
22 
     | 
    
         
             
                def initialize
         
     | 
| 
       22 
23 
     | 
    
         
             
                  @type_sample_call_rate = 0.001
         
     | 
| 
       23 
24 
     | 
    
         
             
                  @type_sample_request = ->(_env) { [true, false, false, false].sample }
         
     | 
| 
       24 
25 
     | 
    
         
             
                  @type_sample_tracepoint_path = ->(_tracepoint_path) { true }
         
     | 
| 
      
 26 
     | 
    
         
            +
                  @endpoint = "http://localhost:3000/api/v1/types/samples"
         
     | 
| 
      
 27 
     | 
    
         
            +
                  @application_name = "TypeFusion"
         
     | 
| 
       25 
28 
     | 
    
         
             
                end
         
     | 
| 
       26 
29 
     | 
    
         | 
| 
       27 
30 
     | 
    
         
             
                def type_sample_request?(env)
         
     | 
| 
         @@ -3,9 +3,13 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            require "json"
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            module TypeFusion
         
     | 
| 
       6 
     | 
    
         
            -
              SampleCall = Struct.new(: 
     | 
| 
      
 6 
     | 
    
         
            +
              SampleCall = Struct.new(:gem_name, :gem_version, :receiver, :method_name, :application_name, :location, :type_fusion_version, :parameters, :return_value) do
         
     | 
| 
       7 
7 
     | 
    
         
             
                def to_s
         
     | 
| 
       8 
8 
     | 
    
         
             
                  JSON.pretty_generate(to_h)
         
     | 
| 
       9 
9 
     | 
    
         
             
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def inspect
         
     | 
| 
      
 12 
     | 
    
         
            +
                  "#<TypeFusion::SampleCall receiver=#{receiver.inspect} method_name=#{method_name.inspect} gem_name=#{gem_name.inspect}>"
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
       10 
14 
     | 
    
         
             
              end
         
     | 
| 
       11 
15 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,15 +1,17 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            require " 
     | 
| 
      
 3 
     | 
    
         
            +
            require "lhc"
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            module TypeFusion
         
     | 
| 
       6 
6 
     | 
    
         
             
              class SampleJob
         
     | 
| 
       7 
7 
     | 
    
         
             
                include Litejob
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
                 
     | 
| 
      
 9 
     | 
    
         
            +
                queue_as :default
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                def perform(sample)
         
     | 
| 
       12 
     | 
    
         
            -
                   
     | 
| 
      
 12 
     | 
    
         
            +
                  LHC.json.post(TypeFusion.config.endpoint, body: { sample: JSON.parse(sample) })
         
     | 
| 
      
 13 
     | 
    
         
            +
                rescue StandardError => e
         
     | 
| 
      
 14 
     | 
    
         
            +
                  puts e.inspect
         
     | 
| 
       13 
15 
     | 
    
         
             
                end
         
     | 
| 
       14 
16 
     | 
    
         
             
              end
         
     | 
| 
       15 
17 
     | 
    
         
             
            end
         
     | 
    
        data/lib/type_fusion/sampler.rb
    CHANGED
    
    | 
         @@ -10,6 +10,7 @@ module TypeFusion 
     | 
|
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                def initialize
         
     | 
| 
       12 
12 
     | 
    
         
             
                  @samples = []
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @litejob_server ||= Litejob::Server.new([["default", 1]])
         
     | 
| 
       13 
14 
     | 
    
         
             
                end
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
16 
     | 
    
         
             
                def with_sampling
         
     | 
| 
         @@ -21,7 +22,7 @@ module TypeFusion 
     | 
|
| 
       21 
22 
     | 
    
         
             
                end
         
     | 
| 
       22 
23 
     | 
    
         | 
| 
       23 
24 
     | 
    
         
             
                def trace
         
     | 
| 
       24 
     | 
    
         
            -
                  @trace ||= TracePoint.trace(: 
     | 
| 
      
 25 
     | 
    
         
            +
                  @trace ||= TracePoint.trace(:return) do |tracepoint|
         
     | 
| 
       25 
26 
     | 
    
         
             
                    if sample?(tracepoint.path)
         
     | 
| 
       26 
27 
     | 
    
         
             
                      receiver = begin
         
     | 
| 
       27 
28 
     | 
    
         
             
                        tracepoint.binding.receiver.name
         
     | 
| 
         @@ -30,17 +31,23 @@ module TypeFusion 
     | 
|
| 
       30 
31 
     | 
    
         
             
                      end
         
     | 
| 
       31 
32 
     | 
    
         | 
| 
       32 
33 
     | 
    
         
             
                      method_name = tracepoint.method_id
         
     | 
| 
       33 
     | 
    
         
            -
                      location = tracepoint.binding.source_location
         
     | 
| 
       34 
     | 
    
         
            -
                      gem_and_version = location. 
     | 
| 
       35 
     | 
    
         
            -
                       
     | 
| 
      
 34 
     | 
    
         
            +
                      location = tracepoint.binding.source_location.join(":")
         
     | 
| 
      
 35 
     | 
    
         
            +
                      gem_and_version = location.gsub(gem_path, "").split("/").first
         
     | 
| 
      
 36 
     | 
    
         
            +
                      gem, version = gem_and_version_from(gem_and_version)
         
     | 
| 
      
 37 
     | 
    
         
            +
                      args = tracepoint.parameters.to_h(&:reverse)
         
     | 
| 
       36 
38 
     | 
    
         
             
                      parameters = extract_parameters(args, tracepoint.binding)
         
     | 
| 
      
 39 
     | 
    
         
            +
                      return_value = type_for_object(tracepoint.return_value)
         
     | 
| 
       37 
40 
     | 
    
         | 
| 
       38 
41 
     | 
    
         
             
                      sample = SampleCall.new(
         
     | 
| 
       39 
     | 
    
         
            -
                         
     | 
| 
      
 42 
     | 
    
         
            +
                        gem_name: gem,
         
     | 
| 
      
 43 
     | 
    
         
            +
                        gem_version: version,
         
     | 
| 
       40 
44 
     | 
    
         
             
                        receiver: receiver,
         
     | 
| 
       41 
45 
     | 
    
         
             
                        method_name: method_name,
         
     | 
| 
       42 
46 
     | 
    
         
             
                        location: location,
         
     | 
| 
      
 47 
     | 
    
         
            +
                        type_fusion_version: VERSION,
         
     | 
| 
       43 
48 
     | 
    
         
             
                        parameters: parameters,
         
     | 
| 
      
 49 
     | 
    
         
            +
                        application_name: TypeFusion.config.application_name,
         
     | 
| 
      
 50 
     | 
    
         
            +
                        return_value: return_value,
         
     | 
| 
       44 
51 
     | 
    
         
             
                      )
         
     | 
| 
       45 
52 
     | 
    
         | 
| 
       46 
53 
     | 
    
         
             
                      samples << sample
         
     | 
| 
         @@ -81,6 +88,31 @@ module TypeFusion 
     | 
|
| 
       81 
88 
     | 
    
         
             
                  end
         
     | 
| 
       82 
89 
     | 
    
         
             
                end
         
     | 
| 
       83 
90 
     | 
    
         | 
| 
      
 91 
     | 
    
         
            +
                def gem_and_version_from(gem_and_version)
         
     | 
| 
      
 92 
     | 
    
         
            +
                  return [] if gem_and_version.nil?
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                  splits = gem_and_version.split("-")
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                  if splits.length == 1
         
     | 
| 
      
 97 
     | 
    
         
            +
                    [splits.first, nil]
         
     | 
| 
      
 98 
     | 
    
         
            +
                  elsif splits.length == 2
         
     | 
| 
      
 99 
     | 
    
         
            +
                    splits
         
     | 
| 
      
 100 
     | 
    
         
            +
                  else
         
     | 
| 
      
 101 
     | 
    
         
            +
                    *name, version = splits
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                    # TODO: there must be a better way to do this
         
     | 
| 
      
 104 
     | 
    
         
            +
                    if ["darwin", "java", "linux", "ucrt", "mingw32"].include?(version)
         
     | 
| 
      
 105 
     | 
    
         
            +
                      amount = (version == "ucrt") ? 3 : 2
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                      version = [*name.pop(amount), version].join("-")
         
     | 
| 
      
 108 
     | 
    
         
            +
                    end
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                    gem = name.join("-")
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                    [gem, version]
         
     | 
| 
      
 113 
     | 
    
         
            +
                  end
         
     | 
| 
      
 114 
     | 
    
         
            +
                end
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
       84 
116 
     | 
    
         
             
                def extract_parameters(args, binding)
         
     | 
| 
       85 
117 
     | 
    
         
             
                  args.map do |name, kind|
         
     | 
| 
       86 
118 
     | 
    
         
             
                    variable = name.to_s.gsub("*", "").gsub("&", "").to_sym
         
     | 
    
        data/lib/type_fusion/version.rb
    CHANGED
    
    
    
        data/lib/type_fusion.rb
    CHANGED
    
    
    
        data/test.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,29 +1,43 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: type_fusion
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.4
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Marco Roth
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2023-08- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2023-08-15 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
     | 
    
         
            -
              name:  
     | 
| 
      
 14 
     | 
    
         
            +
              name: lhc
         
     | 
| 
       15 
15 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       16 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
     | 
    
         
            -
                - - " 
     | 
| 
      
 17 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       18 
18 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '15.2'
         
     | 
| 
       20 
20 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       21 
21 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       22 
22 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       23 
23 
     | 
    
         
             
                requirements:
         
     | 
| 
       24 
     | 
    
         
            -
                - - " 
     | 
| 
      
 24 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 26 
     | 
    
         
            +
                    version: '15.2'
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: litejob
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: 0.2.3
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: 0.2.3
         
     | 
| 
       27 
41 
     | 
    
         
             
            description: Community-contributed sample data for Ruby types
         
     | 
| 
       28 
42 
     | 
    
         
             
            email:
         
     | 
| 
       29 
43 
     | 
    
         
             
            - marco.roth@intergga.ch
         
     | 
| 
         @@ -41,6 +55,7 @@ files: 
     | 
|
| 
       41 
55 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       42 
56 
     | 
    
         
             
            - lib/type_fusion.rb
         
     | 
| 
       43 
57 
     | 
    
         
             
            - lib/type_fusion/config.rb
         
     | 
| 
      
 58 
     | 
    
         
            +
            - lib/type_fusion/litejob.rb
         
     | 
| 
       44 
59 
     | 
    
         
             
            - lib/type_fusion/rack/middleware.rb
         
     | 
| 
       45 
60 
     | 
    
         
             
            - lib/type_fusion/rails/railtie.rb
         
     | 
| 
       46 
61 
     | 
    
         
             
            - lib/type_fusion/sample_call.rb
         
     |