bullet_train 1.2.8 → 1.2.10

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: 3e370599c0e8d8825f71a0c14e4560b02499292700d50b4ca511761ccbaa4a8c
4
- data.tar.gz: 9dca4541087a40cd7b7161169f8df6d846ecd94a01589f6405d19a441d6dd1c3
3
+ metadata.gz: c6a06a235e23a68bf1e4855fb344aadba158538aa2ab823118fbebc252059649
4
+ data.tar.gz: 2ec8399302ea2e4539e9593b8cabc741e5ad2eb1508a2f29e7591ec614d05098
5
5
  SHA512:
6
- metadata.gz: '0328773920ee63acc58bae967e4dacd74185055feda7e377c73dd22bbf488a7dfbb3927f92400353e0367e323cb0f45bfa1a7fbfb934f7f0bac222a286f49f2e'
7
- data.tar.gz: 7ddab29c7bf02600c498125ea326ca051440b6df5153a08d70793b60fcc43e52c3f0b9b61b83eea5f966feab820535111b479a1136b6ab16eeb8ce74f29b035c
6
+ metadata.gz: 23e1d1200c9139fd37e892cd6bd025a26a22960a9076567ca16b14e6ff24445dbaf2cfe16258078f670beda1d86a7300ed089f4b1fadc72e2d08ee0636747e5e
7
+ data.tar.gz: b9ee30bfe129d2e9d7492599ead1fe82d0768853f4e39ba03621c12ec2990bd0e4c24359c1d31d171e22908be376628e6411c01c6e4b1376f5eb486d1c941da9
@@ -1,10 +1,10 @@
1
1
  module AttributesHelper
2
2
  def current_attributes_object
3
- @_attributes_helper_objects ? @_attributes_helper_objects.last : nil
3
+ @_attributes_helper_objects&.last
4
4
  end
5
5
 
6
6
  def current_attributes_strategy
7
- @_attributes_helper_strategies ? @_attributes_helper_strategies.last : nil
7
+ @_attributes_helper_strategies&.last
8
8
  end
9
9
 
10
10
  def with_attribute_settings(options)
@@ -6,7 +6,11 @@ class Billing::MockLimiter
6
6
  []
7
7
  end
8
8
 
9
- def can?(action, model)
9
+ def can?(action, model, count: 1)
10
10
  true
11
11
  end
12
+
13
+ def exhausted?(model)
14
+ false
15
+ end
12
16
  end
@@ -82,18 +82,17 @@ module Records::Base
82
82
 
83
83
  # TODO This should really be in the API package and included from there.
84
84
  if defined?(BulletTrain::Api)
85
- def to_api_json
86
- # TODO So many performance improvements available here.
87
- controller = "Api::#{BulletTrain::Api.current_version.upcase}::ApplicationController".constantize.new
85
+ # We default this to the current version of the API, but developers can request a specific version.
86
+ def to_api_json(api_version = BulletTrain::Api.current_version_numeric)
87
+ controller = "Api::V#{api_version}::ApplicationController".constantize.new
88
88
  # TODO We need to fix host names here.
89
89
  controller.request = ActionDispatch::Request.new({})
90
90
  local_class_key = self.class.name.underscore.split("/").last.to_sym
91
- controller.render_to_string(
92
- "api/#{BulletTrain::Api.current_version}/#{self.class.name.underscore.pluralize}/_#{local_class_key}",
93
- locals: {
94
- local_class_key => self
95
- }
96
- )
91
+
92
+ # Returns a hash, not string.
93
+ JbuilderTemplate.new(controller.view_context) do |json|
94
+ json.partial! "api/#{BulletTrain::Api.current_version}/#{self.class.name.underscore.pluralize}/#{local_class_key}", local_class_key => self
95
+ end.attributes!
97
96
  end
98
97
  end
99
98
  end
@@ -9,7 +9,7 @@ module Users::Base
9
9
  end
10
10
 
11
11
  devise :omniauthable
12
- devise :pwned_password
12
+ devise :pwned_password if BulletTrain::Configuration.default.strong_passwords
13
13
  devise :registerable
14
14
  devise :recoverable
15
15
  devise :rememberable
@@ -3,7 +3,7 @@
3
3
  <% p.content_for :title, @title %>
4
4
  <% p.content_for :body do %>
5
5
  <% within_fields_namespace(:update_self) do %>
6
- <%= form_for(resource, as: resource_name, url: password_path(resource_name), class: 'form', html: { method: :put }) do |f| %>
6
+ <%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { class: 'form', method: :put }) do |f| %>
7
7
  <%= f.hidden_field :reset_password_token %>
8
8
  <%= render 'account/shared/forms/errors', form: f, attributes: [:reset_password_token] %>
9
9
  <%= render 'shared/fields/password_field', form: f, method: :password, options: {autofocus: true, autocomplete: "off"} %>
@@ -1,3 +1,7 @@
1
1
  # Incoming Webhooks
2
2
 
3
- > TODO This section needs to be written and should probably delegate a lot of details to the README of the [Bullet Train Incoming Webhooks repository](https://github.com/bullet-train-co/bullet_train-incoming_webhooks).
3
+ Bullet Train makes it trivial to scaffold new endpoints where external systems can send you webhooks and they can be processed asyncronously in a background job. For more information, run:
4
+
5
+ ```
6
+ bin/super-scaffold incoming-webhooks
7
+ ```
@@ -0,0 +1,15 @@
1
+ module BulletTrain
2
+ class Configuration
3
+ attr_accessor :strong_passwords
4
+
5
+ @default = Configuration.new
6
+
7
+ def initialize
8
+ self.strong_passwords = true
9
+ end
10
+
11
+ class << self
12
+ attr_reader :default
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,18 @@
1
+ begin
2
+ # We hoist the Devise engine, so its app/views directory is always after ours in a Rails app's view_paths.
3
+ #
4
+ # This is a quirk of how Rails engines compose, since engines `prepend_view_path` with their views:
5
+ # https://github.com/rails/rails/blob/9f141a423d551f7f421f54d1372e65ef6ed1f0be/railties/lib/rails/engine.rb#L606
6
+ #
7
+ # If users put devise after bullet_train in their Gemfile, Bundler requires the gems in that order,
8
+ # and devise's `prepend_view_path` would be called last, thus being prepended ahead of BulletTrain when Rails looks up views.
9
+ #
10
+ # Note: if this breaks down in the future, we may want to look into config.railties_order.
11
+ require "devise"
12
+ rescue LoadError
13
+ # Devise isn't in the Gemfile, and we don't have any other load order dependencies.
14
+ end
15
+
1
16
  module BulletTrain
2
17
  class Engine < ::Rails::Engine
3
18
  end
@@ -1,3 +1,3 @@
1
1
  module BulletTrain
2
- VERSION = "1.2.8"
2
+ VERSION = "1.2.10"
3
3
  end
data/lib/bullet_train.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "bullet_train/version"
2
2
  require "bullet_train/engine"
3
3
  require "bullet_train/resolver"
4
+ require "bullet_train/configuration"
4
5
 
5
6
  require "bullet_train/fields"
6
7
  require "bullet_train/roles"
@@ -37,6 +38,14 @@ module BulletTrain
37
38
  mattr_accessor :linked_gems, default: ["bullet_train"]
38
39
  mattr_accessor :parent_class, default: "Team"
39
40
  mattr_accessor :base_class, default: "ApplicationRecord"
41
+
42
+ def self.configure
43
+ if block_given?
44
+ yield(BulletTrain::Configuration.default)
45
+ else
46
+ BulletTrain::Configuration.default
47
+ end
48
+ end
40
49
  end
41
50
 
42
51
  def default_url_options_from_base_url
@@ -118,16 +118,22 @@ namespace :bullet_train do
118
118
  when "--link", "--reset"
119
119
  set_core_gems(process[:flag], framework_packages)
120
120
  stream "bundle install"
121
- when "--watch-js"
122
- set_npm_packages(process[:flag], framework_packages)
121
+ when "--watch-js", "--clean-js"
122
+ package_name = process[:values].pop
123
+ framework_package = framework_packages.select { |k, v| k.to_s == package_name }
124
+ if framework_package.empty?
125
+ puts "Sorry, we couldn't find the package you're looking for.".red
126
+ puts ""
127
+
128
+ npm_packages = framework_packages.select { |name, details| details[:npm].present? }
129
+ puts "Please enter one of the following package names when running `bin/hack --watch-js` or `bin/hack --clean-js`:"
130
+ npm_packages.each_with_index do |package, idx|
131
+ puts "#{idx + 1}. #{package.first}"
132
+ end
133
+ exit 1
134
+ end
123
135
 
124
- puts "Proceeding to reset your Bullet Train npm packages according to your root directory's `package.json`.".yellow
125
- puts "If you press `Ctrl + C` before the process completely exits, just run `bin/hack --clean-js`".yellow
126
- set_npm_packages("--clean-js", framework_packages)
127
- break
128
- when "--clean-js"
129
- set_npm_packages(process[:flag], framework_packages)
130
- break
136
+ set_npm_package(process[:flag], framework_package)
131
137
  end
132
138
  end
133
139
 
@@ -194,16 +200,13 @@ namespace :bullet_train do
194
200
  `#{ENV["IDE"] || "code"} local/bullet_train-core`
195
201
  puts ""
196
202
 
197
- puts "Bullet Train has a few npm packages, so we will and install those now.".blue
198
- puts "We will also watch for any changes in your JavaScript files and recompile as we go.".blue
203
+ puts "Bullet Train has a few npm packages, but we can only watch one at a time, so we will watch the `bullet_train` package.".blue
204
+ puts "Any changes in your JavaScript files in this package will be recompiled as we go.".blue
205
+ puts "Run `bin/hack --watch-js` to see which other npm packages you can watch.".blue
199
206
  puts "When you're done, you can hit <Control + C> and we'll clean all off this up.".blue
200
207
  puts ""
201
- set_npm_packages("--watch-js", framework_packages)
202
-
203
- # Clean up the npm packages after the developer enters `Ctrl + C`.
204
- puts "Cleaning up npm packages...".blue
205
- puts "If you cancel out of this process early, just run `bin/hack --clean-js` to revert to your original npm packages.".blue
206
- set_npm_packages("--clean-js", framework_packages)
208
+ bt_package = framework_packages.select { |k, v| k == :bullet_train }
209
+ set_npm_package("--watch-js", bt_package)
207
210
 
208
211
  puts ""
209
212
  puts "OK, here's a list of things this script still doesn't do you for you:".yellow
@@ -246,33 +249,24 @@ namespace :bullet_train do
246
249
  File.write("./Gemfile", new_lines.join)
247
250
  end
248
251
 
249
- def set_npm_packages(flag, framework_packages)
250
- packages = framework_packages.select { |k, v| v[:npm].present? }.compact
251
-
252
- if flag == "--watch-js"
253
- puts "Make sure your server is running before proceeding. When you're ready, press <Enter>".blue
254
- $stdin.gets.strip
255
-
256
- puts "Linking npm packages...".blue
257
- puts ""
258
-
259
- yarn_watch_command = []
260
- packages.each do |package_name, details|
261
- puts "Linking JavaScript for #{package_name}".blue
262
- stream "cd local/bullet_train-core/#{package_name} && yarn install && npm_config_yes=true && npx yalc link && cd ../../.. && npm_config_yes=true npx yalc link \"#{details[:npm]}\""
263
- puts "#{package_name} has been linked.".blue
252
+ def set_npm_package(flag, package)
253
+ package.each do |name, details|
254
+ if flag == "--watch-js"
255
+ puts "Make sure your server is running before proceeding. When you're ready, press <Enter>".blue
256
+ $stdin.gets.strip
257
+
258
+ puts "Linking JavaScript for #{name}".blue
259
+ stream "cd local/bullet_train-core/#{name} && yarn install && npm_config_yes=true && npx yalc link && cd ../../.. && npm_config_yes=true npx yalc link \"#{details[:npm]}\""
260
+ puts "#{name} has been linked.".blue
261
+ puts "Preparing to watch changes.".blue
262
+ stream "yarn --cwd local/bullet_train-core/#{name} watch"
263
+
264
+ # Provide a help message after the developer kills the process with `Ctrl + C`.
265
+ puts "Run `bin/hack --clean-js #{name}` to revert to using the original npm package in your application.".blue
266
+ elsif flag == "--clean-js"
267
+ puts "Going back to using original `#{name}` npm package in application.".blue
264
268
  puts ""
265
- yarn_watch_command << "yarn --cwd local/bullet_train-core/#{package_name} watch"
266
- end
267
-
268
- # We use `&` to run the processes in parallel.
269
- puts "Preparing to watch changes".blue
270
- stream yarn_watch_command.join(" & ")
271
- elsif flag == "--clean-js"
272
- puts "Resetting packages to their original path".blue
273
- puts ""
274
269
 
275
- packages.each do |package_name, details|
276
270
  system "yarn yalc remove #{details[:npm]}"
277
271
  system "yarn add #{details[:npm]}"
278
272
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bullet_train
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.8
4
+ version: 1.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Culver
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-28 00:00:00.000000000 Z
11
+ date: 2022-12-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: standard
@@ -664,6 +664,7 @@ files:
664
664
  - docs/webhooks/outgoing.md
665
665
  - docs/zapier.md
666
666
  - lib/bullet_train.rb
667
+ - lib/bullet_train/configuration.rb
667
668
  - lib/bullet_train/core_ext/string_emoji_helper.rb
668
669
  - lib/bullet_train/engine.rb
669
670
  - lib/bullet_train/resolver.rb
@@ -696,7 +697,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
696
697
  - !ruby/object:Gem::Version
697
698
  version: '0'
698
699
  requirements: []
699
- rubygems_version: 3.3.7
700
+ rubygems_version: 3.4.1
700
701
  signing_key:
701
702
  specification_version: 4
702
703
  summary: Bullet Train