From d4ee4c614083d633edd9fb2601f1764860ff6f34 Mon Sep 17 00:00:00 2001 From: Vladimir Dementyev Date: Wed, 2 Sep 2020 16:23:12 +0300 Subject: [PATCH] Upgrade Ruby Next Use Hash shorthand notation --- Gemfile | 2 +- Gemfile.lock | 95 +++++++++++++---------- app/channels/application_cable/channel.rb | 7 +- app/channels/chat_channel.rb | 3 +- app/controllers/concerns/authenticated.rb | 2 +- app/controllers/items_controller.rb | 2 +- app/controllers/lists_controller.rb | 2 +- app/controllers/workspaces_controller.rb | 6 +- app/models/user.rb | 2 +- app/services/workspaces/create_demo.rb | 4 +- config/boot.rb | 2 + db/seeds.rb | 2 +- 12 files changed, 71 insertions(+), 58 deletions(-) diff --git a/Gemfile b/Gemfile index 5ad922a..69478ac 100644 --- a/Gemfile +++ b/Gemfile @@ -11,7 +11,7 @@ gem 'redis', '~> 4.0' gem 'anycable-rails', '~> 1.0.0' gem 'bootsnap', '>= 1.4.2', require: false -gem 'ruby-next', '>= 0.9.2', require: false +gem 'ruby-next', '>= 0.10.0', require: false gem 'nanoid' # We only need controllers integration diff --git a/Gemfile.lock b/Gemfile.lock index 68002d3..aa1bfff 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -62,6 +62,10 @@ GEM memoizable (~> 0.4.0) addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) + anima (0.3.1) + abstract_type (~> 0.0.7) + adamantium (~> 0.2) + equalizer (~> 0.0.11) anycable (1.0.1) anyway_config (>= 1.4.2) grpc (~> 1.17) @@ -71,11 +75,11 @@ GEM anyway_config (2.0.6) ruby-next-core (>= 0.8.0) ast (2.4.1) - bootsnap (1.4.6) + bootsnap (1.4.8) msgpack (~> 1.0) builder (3.2.4) byebug (11.1.3) - capybara (3.32.1) + capybara (3.33.0) addressable mini_mime (>= 0.1.3) nokogiri (~> 1.8) @@ -85,40 +89,40 @@ GEM xpath (~> 3.2) childprocess (3.0.0) cliver (0.3.2) - coderay (1.1.2) + coderay (1.1.3) concord (0.1.5) adamantium (~> 0.2.0) equalizer (~> 0.0.9) - concurrent-ruby (1.1.6) + concurrent-ruby (1.1.7) crass (1.0.6) - cuprite (0.10) + cuprite (0.11) capybara (>= 2.1, < 4) - ferrum (~> 0.8.0) - diff-lcs (1.4.1) + ferrum (~> 0.9.0) + diff-lcs (1.4.4) equalizer (0.0.11) erubi (1.9.0) - ferrum (0.8) - addressable (~> 2.6) + ferrum (0.9) + addressable (~> 2.5) cliver (~> 0.3) concurrent-ruby (~> 1.1) websocket-driver (>= 0.6, < 0.8) - ffi (1.12.2) + ffi (1.13.1) globalid (0.4.2) activesupport (>= 4.2.0) - google-protobuf (3.12.2) + google-protobuf (3.13.0) googleapis-common-protos-types (1.0.5) google-protobuf (~> 3.11) - grpc (1.30.0) + grpc (1.31.1) google-protobuf (~> 3.12) googleapis-common-protos-types (~> 1.0) - i18n (1.8.3) + i18n (1.8.5) concurrent-ruby (~> 1.0) ice_nine (0.11.2) jaro_winkler (1.5.4) listen (3.2.1) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - loofah (2.6.0) + loofah (2.7.0) crass (~> 1.0.2) nokogiri (>= 1.5.9) mail (2.7.1) @@ -131,13 +135,20 @@ GEM mimemagic (0.3.5) mini_mime (1.0.2) mini_portile2 (2.4.0) - minitest (5.14.1) + minitest (5.14.2) + mprelude (0.1.0) + abstract_type (~> 0.0.7) + adamantium (~> 0.2.0) + concord (~> 0.1.5) + equalizer (~> 0.0.9) + ice_nine (~> 0.11.1) + procto (~> 0.0.2) msgpack (1.3.3) nanoid (2.0.0) nio4r (2.5.2) - nokogiri (1.10.9) + nokogiri (1.10.10) mini_portile2 (~> 2.4.0) - parallel (1.19.1) + parallel (1.19.2) parser (2.7.1.4) ast (~> 2.4.1) pg (1.2.3) @@ -150,8 +161,8 @@ GEM pry (~> 0.13.0) pry-rails (0.3.9) pry (>= 0.10.4) - public_suffix (4.0.4) - puma (4.3.3) + public_suffix (4.0.6) + puma (4.3.5) nio4r (~> 2.0) rack (2.2.3) rack-proxy (0.6.5) @@ -186,21 +197,21 @@ GEM thor (>= 0.20.3, < 2.0) rainbow (3.0.0) rake (13.0.1) - rb-fsevent (0.10.3) + rb-fsevent (0.10.4) rb-inotify (0.10.1) ffi (~> 1.0) - redis (4.1.3) - regexp_parser (1.7.0) + redis (4.2.1) + regexp_parser (1.7.1) rexml (3.2.4) - rspec-core (3.9.1) - rspec-support (~> 3.9.1) - rspec-expectations (3.9.1) + rspec-core (3.9.2) + rspec-support (~> 3.9.3) + rspec-expectations (3.9.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.9.0) rspec-mocks (3.9.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.9.0) - rspec-rails (4.0.0) + rspec-rails (4.0.1) actionpack (>= 4.2) activesupport (>= 4.2) railties (>= 4.2) @@ -208,7 +219,7 @@ GEM rspec-expectations (~> 3.9) rspec-mocks (~> 3.9) rspec-support (~> 3.9) - rspec-support (3.9.2) + rspec-support (3.9.3) rubocop (0.80.1) jaro_winkler (~> 1.5.1) parallel (~> 1.10) @@ -223,15 +234,15 @@ GEM activesupport rack (>= 1.1) rubocop (>= 0.72.0) - rubocop-rspec (1.39.0) + rubocop-rspec (1.41.0) rubocop (>= 0.68.1) - ruby-next (0.9.2) - ruby-next-core (= 0.9.2) - ruby-next-parser (>= 2.8.0.7) - unparser (>= 0.4.7) - ruby-next-core (0.9.2) - ruby-next-parser (2.8.0.7) - parser (>= 2.7.1.4) + ruby-next (0.10.0) + ruby-next-core (= 0.10.0) + ruby-next-parser (>= 3.0.0.0) + unparser (>= 0.4.8) + ruby-next-core (0.10.0) + ruby-next-parser (3.0.0.0) + parser (>= 2.7.0.5) ruby-progressbar (1.10.1) rubyzip (2.3.0) selenium-webdriver (3.142.7) @@ -247,7 +258,7 @@ GEM standard (0.2.5) rubocop (~> 0.80.1) rubocop-performance (~> 1.5.2) - test-prof (0.11.3) + test-prof (0.12.1) thor (1.0.1) thread_safe (0.3.6) turbolinks (5.2.1) @@ -256,24 +267,26 @@ GEM tzinfo (1.2.7) thread_safe (~> 0.1) unicode-display_width (1.6.1) - unparser (0.4.7) + unparser (0.4.8) abstract_type (~> 0.0.7) adamantium (~> 0.2.0) + anima (~> 0.3.1) concord (~> 0.1.5) diff-lcs (~> 1.3) equalizer (~> 0.0.9) + mprelude (~> 0.1.0) parser (>= 2.6.5) procto (~> 0.0.2) - webpacker (4.2.2) + webpacker (4.3.0) activesupport (>= 4.2) rack-proxy (>= 0.6.1) railties (>= 4.2) - websocket-driver (0.7.2) + websocket-driver (0.7.3) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.3.0) + zeitwerk (2.4.0) PLATFORMS ruby @@ -294,7 +307,7 @@ DEPENDENCIES rspec-rails (~> 4.0.0) rubocop-rails rubocop-rspec - ruby-next (>= 0.9.2) + ruby-next (>= 0.10.0) selenium-webdriver standard (~> 0.2.0) test-prof diff --git a/app/channels/application_cable/channel.rb b/app/channels/application_cable/channel.rb index 77e1863..5959b76 100644 --- a/app/channels/application_cable/channel.rb +++ b/app/channels/application_cable/channel.rb @@ -2,11 +2,8 @@ module ApplicationCable class Channel < ActionCable::Channel::Base - def html(template, **locals) - ApplicationController.render( - partial: template, - locals: locals - ) + def html(partial, **locals) + ApplicationController.render(**{partial, locals}) end end end diff --git a/app/channels/chat_channel.rb b/app/channels/chat_channel.rb index 4df0190..a966e96 100644 --- a/app/channels/chat_channel.rb +++ b/app/channels/chat_channel.rb @@ -12,11 +12,12 @@ def subscribed def speak(data) message = data.fetch("message") + name = user.name broadcast_to( workspace, action: "newMessage", - html: html("chats/message", message: message, name: user.name), + html: html("chats/message", **{message, name}), author_id: user.id ) end diff --git a/app/controllers/concerns/authenticated.rb b/app/controllers/concerns/authenticated.rb index 217b60c..3062488 100644 --- a/app/controllers/concerns/authenticated.rb +++ b/app/controllers/concerns/authenticated.rb @@ -30,7 +30,7 @@ def login_from_cookie return unless cookies[:uid] name, id = cookies[:uid].split("/") - User.new(name: name, id: id).tap do |user| + User.new({name, id}).tap do |user| # store in session commit_user_to_session! user end diff --git a/app/controllers/items_controller.rb b/app/controllers/items_controller.rb index a24838e..f7b80e0 100644 --- a/app/controllers/items_controller.rb +++ b/app/controllers/items_controller.rb @@ -71,7 +71,7 @@ def set_item def broadcast_new_item return if item.errors.any? - ListChannel.broadcast_to list, type: "created", html: render_to_string(partial: "items/item", layout: false, locals: {item: item}) + ListChannel.broadcast_to list, type: "created", html: render_to_string(partial: "items/item", layout: false, locals: {item}) end def broadcast_changes diff --git a/app/controllers/lists_controller.rb b/app/controllers/lists_controller.rb index 490ac5f..ea94d2d 100644 --- a/app/controllers/lists_controller.rb +++ b/app/controllers/lists_controller.rb @@ -44,7 +44,7 @@ def set_list def broadcast_new_list return if list.errors.any? - WorkspaceChannel.broadcast_to workspace, type: "newList", html: render_to_string(partial: "lists/list", layout: false, locals: {list: list}) + WorkspaceChannel.broadcast_to workspace, type: "newList", html: render_to_string(partial: "lists/list", layout: false, locals: {list}) end def broadcast_changes diff --git a/app/controllers/workspaces_controller.rb b/app/controllers/workspaces_controller.rb index 7e2d5ad..a4aa9ba 100644 --- a/app/controllers/workspaces_controller.rb +++ b/app/controllers/workspaces_controller.rb @@ -12,11 +12,11 @@ def create workspace = Workspace.new(workspace_params) if workspace.save # populate demo data - Workspaces::CreateDemo.call(workspace: workspace) + Workspaces::CreateDemo.call(**{workspace}) redirect_to workspace_path(workspace), notice: "Welcome to your new workspace!" else flash.now[:alert] = "Failed to create a workspace: #{workspace.errors.full_messages.join(";")}" - render :new, locals: {workspace: workspace} + render :new, locals: {workspace} end end @@ -25,7 +25,7 @@ def index def show workspace = Workspace.find_by!(public_id: params[:id]) - render locals: {workspace: workspace} + render locals: {workspace} end private diff --git a/app/models/user.rb b/app/models/user.rb index 5903700..19786f8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -10,6 +10,6 @@ class User attribute :id, :string class << self - def generate(name) = new(name: name, id: Nanoid.generate(size: 5)) + def generate(name) = new({name, id: Nanoid.generate(size: 5)}) end end diff --git a/app/services/workspaces/create_demo.rb b/app/services/workspaces/create_demo.rb index b03c7cb..098f74a 100644 --- a/app/services/workspaces/create_demo.rb +++ b/app/services/workspaces/create_demo.rb @@ -3,10 +3,10 @@ module Workspaces module CreateDemo class << self - def call(name: "Demo Workspace", id: nil, workspace: nil) + def call(name: "Demo Workspace", public_id: nil, workspace: nil) ActiveRecord::Base.transaction do # We can use the existing workspace to populate demo data - demo = workspace || Workspace.create!(name: name, public_id: id) + demo = workspace || Workspace.create!({name, public_id}) # First list demo.lists.create(name: "Migrate to AnyCable").tap do |list| diff --git a/config/boot.rb b/config/boot.rb index cc26c4e..9380329 100644 --- a/config/boot.rb +++ b/config/boot.rb @@ -4,9 +4,11 @@ require "bundler/setup" # Set up gems listed in the Gemfile. require "bootsnap/setup" # Speed up boot time by caching expensive operations. + # Use edge Ruby syntax require "ruby-next/language" RubyNext::Language.mode = :rewrite require "ruby-next/language/edge" +require "ruby-next/language/proposed" require "ruby-next/language/bootsnap" diff --git a/db/seeds.rb b/db/seeds.rb index 48ecc24..05b6afb 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -2,5 +2,5 @@ ActiveRecord::Base.transaction do # create demo workspace - _demo = Workspaces::CreateDemo.call(id: "demo") + _demo = Workspaces::CreateDemo.call(public_id: "demo") end