trailblazer-pro-rails 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2bb335727395a5d68805e4f858838d849e90cfb893f0706b5643402c7e085ece
4
+ data.tar.gz: 415bcfac3c4d618c773b5b8d1d54ae403598e472d36ca6a807845066031701a3
5
+ SHA512:
6
+ metadata.gz: f11b6219da35f9f97a6ff33f32eeb3fb5104bdb2cf1697986cc0731221e680ec979810021f52490611b27376456123d644365a0a83c52540c80ba910ed70c8fb
7
+ data.tar.gz: 856c418262916245973db47aa02f45b6c30f1df50ede906fd5a6c48fe5ff058cc0ceba746f69f750e2e9c8e4d1e2bca700d380830edb7dd1d73595e7bf674a28
data/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ ## [0.0.2]
2
+
3
+ - Initial release
4
+
5
+ ## [0.0.1]
6
+
7
+ - Unreleased
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in trailblazer-pro-rails.gemspec
6
+ gemspec
7
+
8
+ gem "rake", "~> 13.0"
9
+
10
+ gem "minitest", "~> 5.0"
data/README.md ADDED
@@ -0,0 +1,50 @@
1
+ # Trailblazer::Pro::Rails
2
+
3
+ ## Installation
4
+
5
+ In your Rails' `Gemfile`.
6
+
7
+ ```ruby
8
+ gem "trailblazer-pro-rails"
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ 1. Get your API key from https://pro.trailblazer.to/settings
14
+ 2. Run our generator and enter your API key.
15
+ ```
16
+ $ rails g trailblazer:pro:install
17
+
18
+ ```
19
+ 3. Run your operation via `#WTF?`.
20
+ ```ruby
21
+ result = API::V1::Diagram::Operation::Update.WTF?(params: params)
22
+ ```
23
+
24
+ 4. Click the `[TRB PRO]` link in your terminal and start debugging.
25
+
26
+ ![Our web debugger in action.](docs/debugger-ide-screenshot-august.png)
27
+
28
+ Note: we're currently playing with various invocation styles and at some point you might not even have to use `Operation.wtf?` anymore.
29
+
30
+
31
+
32
+ ## Testing
33
+
34
+ Currently, from the top directory, you need to run
35
+
36
+ ```ruby
37
+ $ rake test_1
38
+ ```
39
+ This will test the generator on a new Rails app in isolation.
40
+
41
+ ```ruby
42
+ $ rake test_2
43
+ ```
44
+
45
+ Tests if `wtf?` works without any PRO configuration, but PRO is added.
46
+
47
+
48
+ ### Architecture
49
+
50
+ * One `Gemfile` for all scenarios on `test/dummies`
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rake/testtask"
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << "test"
8
+ t.libs << "lib"
9
+ t.test_files = FileList["test/**/test_*.rb"]
10
+ end
11
+
12
+ task default: :test
13
+
14
+
15
+ # test_uninitialized_generator
16
+ Rake::TestTask.new(:test_1) do |t|
17
+ t.test_files = FileList["test/dummies/uninitialized/test/generator_test.rb"]
18
+ end
19
+
20
+ # test wtf? in different scenarios
21
+ Rake::TestTask.new(:test_2) do |t|
22
+ t.test_files = FileList["test/dummies/uninitialized/test/railtie_test.rb"]
23
+ end
@@ -0,0 +1,26 @@
1
+ module Trailblazer
2
+
3
+ module Pro
4
+ class Install < ::Rails::Generators::Base
5
+ # source_root File.expand_path("templates", __dir__)
6
+
7
+ def prompt_for_api_key
8
+ input = ask %(Your Trailblazer PRO API key:)
9
+ # TODO: blank
10
+ return if input.blank?
11
+
12
+ @api_key = input.chomp
13
+ end
14
+
15
+ def create_session_file
16
+ return if @api_key.nil? # FIXME: use Trailblazer instead of thor's basic control flow.
17
+
18
+ create_file Rails::SESSION_PATH do
19
+ uninitialized_session = Trailblazer::Pro::Session::Uninitialized.new(api_key: @api_key, trailblazer_pro_host: "https://pro.trailblazer.to")
20
+
21
+ Trailblazer::Pro::Session.serialize(uninitialized_session)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,42 @@
1
+ module Trailblazer
2
+ module Pro
3
+ module Rails
4
+ class Railtie < ::Rails::Railtie
5
+ config.trailblazer = ActiveSupport::OrderedOptions.new # TODO: test me with trailblazer-rails
6
+ config.trailblazer.pro = ActiveSupport::OrderedOptions.new
7
+ config.trailblazer.pro.render_wtf = true
8
+
9
+ # load session and set Pro::Session.session
10
+ initializer "trailblazer-pro-rails.load_session_and_extend_operation" do
11
+ Trailblazer::Operation.extend(Pro::Operation::WTF) # TODO: only apply to selected OPs or make at least configurable?
12
+
13
+ config_options = {
14
+ render_wtf: config.trailblazer.pro.render_wtf,
15
+ }
16
+
17
+ if File.exist?(Rails::SESSION_PATH)
18
+ # TODO: warn if file not present etc.
19
+ json = File.read(Rails::SESSION_PATH)
20
+
21
+ Pro.initialize!(**Session.deserialize(json), **config_options)
22
+
23
+ trace_operations = config.trailblazer.pro.trace_operations
24
+
25
+ if trace_operations
26
+ # constants can be passed as strings to avoid autoloading issues.
27
+ trace_operations = trace_operations.collect { |klass, config| [klass.constantize, config] }.to_h
28
+
29
+ Pro.trace_operations!(trace_operations)
30
+ end
31
+
32
+ # TODO: add {Activity.invoke} here, too!
33
+ # Trailblazer::Activity.extend(Pro::Call::Activity) # FIXME: only if allowed! # TODO: only apply to selected OPs.
34
+ else # no configuration happend, yet.
35
+ Pro.initialize!(api_key: "")
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Trailblazer
4
+ module Pro
5
+ module Rails
6
+ VERSION = "0.0.2"
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,26 @@
1
+ module Trailblazer
2
+ module Pro
3
+ module Rails
4
+ # Save the session in tmp/ if it changed after invocation.
5
+ module Wtf
6
+ extend Pro::Trace::Wtf
7
+ module_function
8
+
9
+ def call(*args, present_options: {}, **options)
10
+ returned = super(*args, present_options: present_options, **options)
11
+
12
+ (session, trace_id, debugger_url, _trace_envelope, session_updated) = returned[-1]
13
+
14
+ if session_updated
15
+ File.write(Rails::SESSION_PATH, Session.serialize(session)) # DISCUSS: redundant
16
+ end
17
+
18
+ returned
19
+ end
20
+
21
+ # alias invoke call
22
+ singleton_class.alias_method :invoke, :call
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "rails/version"
4
+
5
+ module Trailblazer
6
+ module Pro
7
+ module Rails
8
+ SESSION_PATH = "tmp/trb-pro/session"
9
+ end
10
+ end
11
+ end
12
+
13
+ require "rails/generators"
14
+ require "trailblazer/pro"
15
+ require "trailblazer/pro/rails/railtie"
16
+ require "trailblazer/pro/rails/generator"
17
+ require "trailblazer/pro/rails/wtf"
@@ -0,0 +1 @@
1
+ require_relative "trailblazer/pro/rails"
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: trailblazer-pro-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Nick Sutterer
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2023-08-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: trailblazer-pro
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.1
27
+ description:
28
+ email:
29
+ - apotonick@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - CHANGELOG.md
35
+ - Gemfile
36
+ - README.md
37
+ - Rakefile
38
+ - docs/debugger-ide-screenshot-august.png
39
+ - lib/trailblazer-pro-rails.rb
40
+ - lib/trailblazer/pro/rails.rb
41
+ - lib/trailblazer/pro/rails/generator.rb
42
+ - lib/trailblazer/pro/rails/railtie.rb
43
+ - lib/trailblazer/pro/rails/version.rb
44
+ - lib/trailblazer/pro/rails/wtf.rb
45
+ homepage: https://trailblazer.to/2.1/pro
46
+ licenses:
47
+ - LGPL-3.0
48
+ metadata: {}
49
+ post_install_message:
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: 2.5.0
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubygems_version: 3.2.3
65
+ signing_key:
66
+ specification_version: 4
67
+ summary: Rails support for Trailblazer PRO.
68
+ test_files: []