bullet_train 1.2.3 → 1.2.5

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: b4e4626284c91f3dfd617425256200e3e385aadb8623730744d24a022071423e
4
- data.tar.gz: 96bd5b5aebeec7f00a7e03660ef7829fd126dd6fac79cb46a3c982bb42900179
3
+ metadata.gz: fa2dfac5d71da28521ac903aef4acba2c5834f2da5c83ed89f4eb2dd1badf143
4
+ data.tar.gz: 7786d24e4271cf0547b495addefabbc46b0aaf58eb1672a3ab24ff5cb22a366e
5
5
  SHA512:
6
- metadata.gz: ad23107ff2bb43a5690f13b4f60e11d6bdef8e67357dc2a3ebc48ee4edae1d10486234a6c513a16f1ee937dfd9c1573dfe5b55f5ad5c3af7fb790823738efcb4
7
- data.tar.gz: 051a0a33c1b71667e7d54008d4de417fbced5d5d88a2dece93e5798ca7d200f2039c580285d6b1248a9c363e817a502b4cfde1dc498332264341e20b3a5a026d
6
+ metadata.gz: cf4cb1f74f1c85df573e544a7e6d03eac8d0db92a7fdb847de163d26527d153d7343cef139450e88d4d5332fe3728fbc9dc61f592ad84eeaf314bc40f378b40c
7
+ data.tar.gz: a347aa6b5e8234d6a90ce95a3c3e19e372597b45d4272e1e9a6feecc28bfbbfe5d9e24e6bc914ceb7e95eb8cdf9b187bc7a564ee30d8bd6c5f9d5e089ea62782
@@ -10,6 +10,18 @@ class SessionsController < Devise::SessionsController
10
10
  end
11
11
  helper_method :user_return_to_is_oauth
12
12
 
13
+ def new
14
+ # We allow people to pass in a URL to redirect to after sign in is complete. We have to do this because Safari
15
+ # doesn't allow them to set this in a session before a redirect if there isn't already a session. However, for
16
+ # security reasons we have to make sure we control the URL where we will redirect to, otherwise people could
17
+ # trick folks into redirecting to a fake destination in a phishing scheme.
18
+ if params[:return_url]&.start_with?(ENV["BASE_URL"])
19
+ store_location_for(resource_name, params[:return_url])
20
+ end
21
+
22
+ super
23
+ end
24
+
13
25
  def destroy
14
26
  if params.include?(:onboard_logout)
15
27
  signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
@@ -25,6 +25,8 @@ module Memberships::Base
25
25
  end
26
26
  end
27
27
 
28
+ scope :excluding_platform_agents, -> { where(platform_agent_of: nil) }
29
+ scope :platform_agents, -> { where.not(platform_agent_of: nil) }
28
30
  scope :current_and_invited, -> { includes(:invitation).where("user_id IS NOT NULL OR invitations.id IS NOT NULL").references(:invitation) }
29
31
  scope :current, -> { where("user_id IS NOT NULL") }
30
32
  scope :tombstones, -> { includes(:invitation).where("user_id IS NULL AND invitations.id IS NULL AND platform_agent IS FALSE").references(:invitation) }
@@ -38,6 +38,12 @@ module Teams::Base
38
38
  validates :time_zone, inclusion: {in: ActiveSupport::TimeZone.all.map(&:name)}, allow_nil: true
39
39
  end
40
40
 
41
+ def platform_agent_access_tokens
42
+ # TODO This could be written better.
43
+ platform_agent_user_ids = memberships.platform_agents.map(&:user_id).compact
44
+ Platform::AccessToken.joins(:application).where(resource_owner_id: platform_agent_user_ids, application: {team: nil})
45
+ end
46
+
41
47
  def admins
42
48
  memberships.current_and_invited.admins
43
49
  end
@@ -1,3 +1,3 @@
1
1
  module BulletTrain
2
- VERSION = "1.2.3"
2
+ VERSION = "1.2.5"
3
3
  end
@@ -91,13 +91,15 @@ namespace :bullet_train do
91
91
  puts ""
92
92
  end
93
93
 
94
+ framework_packages = I18n.t("framework_packages")
95
+
94
96
  # Process any flags that were passed.
95
97
  if arguments[:all_options].present?
96
98
  flags_with_values = []
97
99
 
98
100
  arguments[:all_options].split(/\s+/).each do |option|
99
101
  if option.match?(/^--/)
100
- flags_with_values << {flag: option.gsub(/^--/, "").to_sym, values: []}
102
+ flags_with_values << {flag: option, values: []}
101
103
  else
102
104
  flags_with_values.last[:values] << option
103
105
  end
@@ -105,34 +107,27 @@ namespace :bullet_train do
105
107
 
106
108
  if flags_with_values.any?
107
109
  flags_with_values.each do |process|
108
- if process[:flag] == :link || process[:flag] == :reset
109
- packages = process[:values]
110
-
111
- gemfile_lines = File.readlines("./Gemfile")
112
- new_lines = gemfile_lines.map do |line|
113
- packages.each do |package|
114
- if line.match?(package)
115
- original_path = "gem \"bullet_train#{"-" + package if package}\""
116
- local_path = "gem \"bullet_train#{"-" + package if package}\", path: \"local/bullet_train#{"-" + package if package}\""
117
-
118
- case process[:flag]
119
- when :link
120
- line.gsub!(original_path, local_path)
121
- puts "Setting local '#{package}' package to the Gemfile...".blue
122
- break
123
- when :reset
124
- line.gsub!(local_path, original_path)
125
- puts "Resetting '#{package}' package in the Gemfile...".blue
126
- break
127
- end
128
- end
129
- end
130
-
131
- line
132
- end
133
-
134
- File.write("./Gemfile", new_lines.join)
135
- system "bundle install"
110
+ case process[:flag]
111
+ when "--help"
112
+ puts "bin/hack: Clone bullet_train-core and link up gems (will only link up gems if already cloned).".blue
113
+ puts "bin/hack --link: Link all of your Bullet Train gems to `local/bullet_train-core`".blue
114
+ puts "bin/hack --reset: Resets all of your gems to their original definition.".blue
115
+ puts "bin/hack --watch-js: Watches for any changes in JavaScript files gems that have an npm package.".blue
116
+ puts "bin/hack --clean-js: Resets all of your npm packages from `local/bullet_train-core` to their original definition".blue
117
+ exit
118
+ when "--link", "--reset"
119
+ set_core_gems(process[:flag], framework_packages)
120
+ stream "bundle install"
121
+ when "--watch-js"
122
+ set_npm_packages(process[:flag], framework_packages)
123
+
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
131
  end
137
132
  end
138
133
 
@@ -140,123 +135,147 @@ namespace :bullet_train do
140
135
  end
141
136
  end
142
137
 
143
- framework_packages = I18n.t("framework_packages")
138
+ puts "Welcome! Let's get hacking.".blue
144
139
 
145
- puts "Which framework package do you want to work on?".blue
146
- puts ""
147
- framework_packages.each do |gem, details|
148
- puts " #{framework_packages.keys.find_index(gem) + 1}. #{gem}".blue
149
- end
150
- puts ""
151
- puts "Enter a number below and hit <Enter>:".blue
152
- number = $stdin.gets.chomp
140
+ # Adding these flags enables us to execute git commands in the gem from our starter repo.
141
+ work_tree_flag = "--work-tree=local/bullet_train-core"
142
+ git_dir_flag = "--git-dir=local/bullet_train-core/.git"
153
143
 
154
- gem = framework_packages.keys[number.to_i - 1]
144
+ if File.exist?("local/bullet_train-core")
145
+ puts "We found the repository in `local/bullet_train-core`. We will try to use what's already there.".yellow
146
+ puts ""
155
147
 
156
- if gem
157
- details = framework_packages[gem]
158
- package = details[:git].split("/").last
148
+ git_status = `git #{work_tree_flag} #{git_dir_flag} status`
149
+ unless git_status.match?("nothing to commit, working tree clean")
150
+ puts "This package currently has uncommitted changes.".red
151
+ puts "Please make sure the branch is clean and try again.".red
152
+ exit
153
+ end
159
154
 
160
- puts "OK! Let's work on `#{gem}` together!".green
161
- puts ""
155
+ current_branch = `git #{work_tree_flag} #{git_dir_flag} branch`.split("\n").select { |branch_name| branch_name.match?(/^\*\s/) }.pop.gsub(/^\*\s/, "")
156
+ unless current_branch == "main"
157
+ puts "Previously on #{current_branch}.".blue
158
+ puts "Switching local/bullet_train-core to main branch.".blue
159
+ stream("git #{work_tree_flag} #{git_dir_flag} checkout main")
160
+ end
162
161
 
163
- if File.exist?("local/#{package}")
164
- puts "We found the repository in `local/#{package}`. We will try to use what's already there.".yellow
165
- puts ""
162
+ puts "Updating the main branch with the latest changes.".blue
163
+ stream("git #{work_tree_flag} #{git_dir_flag} pull origin main")
164
+ else
165
+ # Use https:// URLs when using this task in Gitpod.
166
+ stream "git clone #{(`whoami`.chomp == "gitpod") ? "https://github.com/" : "git@github.com:"}/bullet-train-co/bullet_train-core.git local/bullet_train-core"
167
+ end
166
168
 
167
- # Adding these flags enables us to execute git commands in the gem from our starter repo.
168
- work_tree_flag = "--work-tree=local/#{package}"
169
- git_dir_flag = "--git-dir=local/#{package}/.git"
169
+ stream("git #{work_tree_flag} #{git_dir_flag} fetch")
170
+ stream("git #{work_tree_flag} #{git_dir_flag} branch -r")
171
+ puts "The above is a list of remote branches.".blue
172
+ puts "If there's one you'd like to work on, please enter the branch name and press <Enter>.".blue
173
+ puts "If not, just press <Enter> to continue.".blue
174
+ input = $stdin.gets.strip
175
+ unless input.empty?
176
+ puts "Switching to #{input.gsub("origin/", "")}".blue # TODO: Should we remove origin/ here if the developer types it?
177
+ stream("git #{work_tree_flag} #{git_dir_flag} checkout #{input}")
178
+ end
170
179
 
171
- git_status = `git #{work_tree_flag} #{git_dir_flag} status`
172
- unless git_status.match?("nothing to commit, working tree clean")
173
- puts "This package currently has uncommitted changes.".red
174
- puts "Please make sure the branch is clean and try again.".red
175
- exit
176
- end
180
+ # Link all of the local gems to the current Gemfile.
181
+ puts "Now we'll try to link up the Bullet Train core repositories in the `Gemfile`.".blue
182
+ set_core_gems("--link", framework_packages)
177
183
 
178
- current_branch = `git #{work_tree_flag} #{git_dir_flag} branch`.split("\n").select { |branch_name| branch_name.match?(/^\*\s/) }.pop.gsub(/^\*\s/, "")
179
- unless current_branch == "main"
180
- puts "Previously on #{current_branch}.".blue
181
- puts "Switching local/#{package} to main branch.".blue
182
- stream("git #{work_tree_flag} #{git_dir_flag} checkout main")
183
- end
184
+ puts ""
185
+ puts "Now we'll run `bundle install`.".blue
186
+ stream "bundle install"
184
187
 
185
- puts "Updating the main branch with the latest changes.".blue
186
- stream("git #{work_tree_flag} #{git_dir_flag} pull origin main")
187
- else
188
- # Use https:// URLs when using this task in Gitpod.
189
- stream "git clone #{(`whoami`.chomp == "gitpod") ? "https://github.com/" : "git@github.com:"}#{details[:git]}.git local/#{package}"
190
- end
188
+ puts ""
189
+ puts "We'll restart any running Rails server now.".blue
190
+ stream "rails restart"
191
191
 
192
- stream("git #{work_tree_flag} #{git_dir_flag} fetch")
193
- stream("git #{work_tree_flag} #{git_dir_flag} branch -r")
194
- puts "The above is a list of remote branches.".blue
195
- puts "If there's one you'd like to work on, please enter the branch name and press <Enter>.".blue
196
- puts "If not, just press <Enter> to continue.".blue
197
- input = $stdin.gets.strip
198
- unless input.empty?
199
- puts "Switching to #{input.gsub("origin/", "")}".blue # TODO: Should we remove origin/ here if the developer types it?
200
- stream("git #{work_tree_flag} #{git_dir_flag} checkout #{input}")
201
- end
192
+ puts ""
193
+ puts "OK, we're opening bullet_train-core in your IDE, `#{ENV["IDE"] || "code"}`. (You can configure this with `export IDE=whatever`.)".blue
194
+ `#{ENV["IDE"] || "code"} local/bullet_train-core`
195
+ puts ""
202
196
 
203
- glob = if package == "bullet_train-core"
204
- ", glob: \"#{gem}/#{gem}.gemspec\""
205
- end
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
199
+ puts "When you're done, you can hit <Control + C> and we'll clean all off this up.".blue
200
+ puts ""
201
+ set_npm_packages("--watch-js", framework_packages)
206
202
 
207
- puts ""
208
- puts "Now we'll try to link up that repository in the `Gemfile`.".blue
209
- if `cat Gemfile | grep "gem \\\"#{gem}\\\", path: \\\"local/#{package}\\\""`.chomp.present?
210
- puts "This gem is already linked to a checked out copy in `local` in the `Gemfile`.".green
211
- elsif `cat Gemfile | grep "gem \\\"#{gem}\\\","`.chomp.present?
212
- puts "This gem already has some sort of alternative source configured in the `Gemfile`.".yellow
213
- puts "We can't do anything with this. Sorry! We'll proceed, but you have to link this package yourself.".red
214
- elsif `cat Gemfile | grep "gem \\\"#{gem}\\\""`.chomp.present?
215
- puts "This gem is directly present in the `Gemfile`, so we'll update that line.".green
216
- text = File.read("Gemfile")
217
- new_contents = text.gsub(/gem "#{gem}"/, "gem \"#{gem}\", path: \"local/#{package}\"#{glob}")
218
- File.open("Gemfile", "w") { |file| file.puts new_contents }
219
- else
220
- puts "This gem isn't directly present in the `Gemfile`, so we'll add it temporarily.".green
221
- File.open("Gemfile", "a+") { |file|
222
- file.puts
223
- file.puts "gem \"#{gem}\", path: \"local/#{package}\"#{glob} # Added by `bin/develop`."
224
- }
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)
207
+
208
+ puts ""
209
+ puts "OK, here's a list of things this script still doesn't do you for you:".yellow
210
+ puts "1. It doesn't clean up the repository that was cloned into `local`.".yellow
211
+ puts "2. Unless you remove it, it won't update that repository the next time you link to it.".yellow
212
+ end
213
+
214
+ # Pass "--link" or "--reset" as a flag to set the gems.
215
+ def set_core_gems(flag, framework_packages)
216
+ packages = framework_packages.keys
217
+ gemfile_lines = File.readlines("./Gemfile")
218
+ new_lines = gemfile_lines.map do |line|
219
+ packages.each do |package|
220
+ if line.match?(/"#{package}"/)
221
+ original_path = "gem \"#{package}\""
222
+ local_path = "gem \"#{package}\", path: \"local/bullet_train-core/#{package}\""
223
+
224
+ case flag
225
+ when "--link"
226
+ if `cat Gemfile | grep "gem \\\"#{package}\\\", path: \\\"local/#{package}\\\""`.chomp.present?
227
+ puts "#{package} is already linked to a checked out copy in `local` in the `Gemfile`.".green
228
+ elsif `cat Gemfile | grep "gem \\\"#{package}\\\","`.chomp.present?
229
+ puts "#{package} already has some sort of alternative source configured in the `Gemfile`.".yellow
230
+ puts "We can't do anything with this. Sorry! We'll proceed, but you have to link this package yourself.".red
231
+ elsif `cat Gemfile | grep "gem \\\"#{package}\\\""`.chomp.present?
232
+ puts "#{package} is directly present in the `Gemfile`, so we'll update that line.".green
233
+ line.gsub!(original_path, local_path)
234
+ end
235
+ break
236
+ when "--reset"
237
+ line.gsub!(local_path, original_path)
238
+ puts "Resetting '#{package}' package in the Gemfile...".blue
239
+ break
240
+ end
241
+ end
225
242
  end
243
+ line
244
+ end
226
245
 
227
- puts ""
228
- puts "Now we'll run `bundle install`.".blue
229
- stream "bundle install"
246
+ File.write("./Gemfile", new_lines.join)
247
+ end
230
248
 
231
- puts ""
232
- puts "We'll restart any running Rails server now.".blue
233
- stream "rails restart"
249
+ def set_npm_packages(flag, framework_packages)
250
+ packages = framework_packages.select { |k, v| v[:npm].present? }.compact
234
251
 
235
- puts ""
236
- puts "OK, we're opening that package in your IDE, `#{ENV["IDE"] || "code"}`. (You can configure this with `export IDE=whatever`.)".blue
237
- `#{ENV["IDE"] || "code"} local/#{package}`
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
238
255
 
256
+ puts "Linking npm packages...".blue
239
257
  puts ""
240
- if details[:npm]
241
- puts "This package also has an npm package, so we'll link that up as well.".blue
242
- stream "cd local/#{gem} && yarn install && npm_config_yes=true npx yalc link && cd ../.. && npm_config_yes=true npx yalc link \"#{details[:npm]}\""
243
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
244
264
  puts ""
245
- puts "And now we're going to watch for any changes you make to the JavaScript and recompile as we go.".blue
246
- puts "When you're done, you can hit <Control + C> and we'll clean all off this up.".blue
247
- stream "cd local/#{gem} && yarn watch"
248
- else
249
- puts "This package has no npm package, so we'll just hang out here and do nothing. However, when you hit <Enter> here, we'll start the process of cleaning all of this up.".blue
250
- $stdin.gets
265
+ yarn_watch_command << "yarn --cwd local/bullet_train-core/#{package_name} watch"
251
266
  end
252
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
253
273
  puts ""
254
- puts "OK, here's a list of things this script still doesn't do you for you:".yellow
255
- puts "1. It doesn't clean up the repository that was cloned into `local`.".yellow
256
- puts "2. Unless you remove it, it won't update that repository the next time you link to it.".yellow
257
- else
258
- puts ""
259
- puts "Invalid option, \"#{number}\". Try again.".red
274
+
275
+ packages.each do |package_name, details|
276
+ system "yarn yalc remove #{details[:npm]}"
277
+ system "yarn add #{details[:npm]}"
278
+ end
260
279
  end
261
280
  end
262
281
  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.3
4
+ version: 1.2.5
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-17 00:00:00.000000000 Z
11
+ date: 2022-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: standard