Giter VIP home page Giter VIP logo

railways's Introduction

Railways

Railways is a plugin for RubyMine and IntelliJ IDEA Ultimate (with Ruby plugin) that provides convenient way to navigate between route actions.

Features:

  • Displays routes of Ruby On Rails application/engine in a separate "Routes" panel
  • Adds quick navigation to action implementation from routes panel or "Goto route action" popup available in code editor by pressing Ctrl + Shift + G (or Cmd + Shift + G on Mac)
  • Provides quick routes filtering by route path, controller/action or route name

Current release is tested on RubyMine 2016.1, RubyMine 2016.2, IntelliJ IDEA 2016.2.

Development Environment

  1. Fork Railways repository and clone it to your local machine.

  2. Open the project in IntelliJ IDEA

  3. Set up a JDK if it's not set (File > Project Structure > SDKs > Add New JDK). Select JDK 1.8.

  4. Set up IntelliJ plugin SDK. You should have RubyMine 2016.2 installed. Go to File > Project Structure > SDKs > Add new IntelliJ IDEA Plugin SDK, name it "RubyMine 2016.2 SDK" and select path to your RubyMine installation. When you are asked to select JDK, specify JDK from previous step.

  5. Select a project SDK for your project using "File > Project Structure > Project > Project SDK". Choose the plugin SDK you have created at the previous step.

  6. Use "Run > Run 'Railways'" menu to test plugin inside RubyMine.

  7. Use "Run > Run 'All tests'" menu to run all tests for Railways.

Building the Plugin

  1. Copy and rename file build.properties.example to build.properties.

  2. Edit this file and edit properties to match your environment (see comments in build.properties file).

  3. Open Ant tool window in IntelliJ IDEA and run 'all' task. Plugin jars will be placed into release/railways-[version]/ directory. There are two versions of plugin: railways.jar for RubyMine and railways-idea.jar for IntelliJ IDEA.

railways's People

Contributors

basgren avatar hurricup avatar kotaro0522 avatar niclake avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

railways's Issues

[feature] Grape routes

There is a gem called "grape_on_rails_routes". It would be nice if this gem is installed (or a setting to change) to use "rake grape:routes" so this plugin will pick up routes from grape instead.

Failed to load routes

invalid option: --trace

Rubymine 2019.1
ruby - 2.3
rails -5

rails routes is working fine in terminal but not in your plugin

routes does not work inside a rails plugin

The command rake routes is not working inside a rails plugin.

rake aborted!
Don't know how to build task 'routes'

the command rake app:routes should be used instead.

IDE Error with RubyMine version 2018.1 EAP [bug]

Sorry to bother again, but I'm getting the following IDE Fatal Error:

org.jetbrains.plugins.ruby.ruby.lang.psi.stubs.impl.RConstantStubImpl cannot be cast to org.jetbrains.plugins.ruby.ruby.lang.psi.stubs.containers.RMethodStub
java.lang.ClassCastException: org.jetbrains.plugins.ruby.ruby.lang.psi.stubs.impl.RConstantStubImpl cannot be cast to org.jetbrains.plugins.ruby.ruby.lang.psi.stubs.containers.RMethodStub
	at org.jetbrains.plugins.ruby.ruby.lang.psi.impl.controlStructures.methods.RMethodImpl.getVisibility(RMethodImpl.java:96)
	at net.bitpot.railways.models.RailsActionInfo.getMethodVisibility(Unknown Source)
	at net.bitpot.railways.models.RailsActionInfo.getIcon(Unknown Source)
	at net.bitpot.railways.models.routes.SimpleRoute.getActionIcon(Unknown Source)
	at net.bitpot.railways.gui.RouteCellRenderer.renderRouteAction(Unknown Source)
	at net.bitpot.railways.gui.RouteCellRenderer.customizeCellRenderer(Unknown Source)
	at com.intellij.ui.ColoredTableCellRenderer.getTableCellRendererComponent(ColoredTableCellRenderer.java:36)
	at javax.swing.JTable.prepareRenderer(JTable.java:5723)
	at com.intellij.ui.table.JBTable.prepareRenderer(JBTable.java:540)
	at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114)
	at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2016)
	at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1812)
	at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
	at javax.swing.JComponent.paintComponent(JComponent.java:780)
	at com.intellij.ui.table.JBTable.paintComponent(JBTable.java:303)
	at javax.swing.JComponent.paint(JComponent.java:1057)
	at com.intellij.ui.table.JBTable.paint(JBTable.java:402)
	at javax.swing.JComponent.paintChildren(JComponent.java:890)
	at javax.swing.JComponent.paint(JComponent.java:1066)
	at javax.swing.JViewport.paint(JViewport.java:737)
	at com.intellij.ui.components.JBViewport.paint(JBViewport.java:236)
	at javax.swing.JComponent.paintChildren(JComponent.java:890)
	at javax.swing.JComponent.paint(JComponent.java:1066)
	at javax.swing.JComponent.paintChildren(JComponent.java:890)
	at javax.swing.JComponent.paint(JComponent.java:1066)
	at javax.swing.JComponent.paintChildren(JComponent.java:890)
	at javax.swing.JComponent.paint(JComponent.java:1066)
	at javax.swing.JComponent.paintToOffscreen(JComponent.java:5211)
	at javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(RepaintManager.java:1658)
	at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1630)
	at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1512)
	at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:306)
	at javax.swing.RepaintManager.paint(RepaintManager.java:1279)
	at javax.swing.JComponent._paintImmediately(JComponent.java:5159)
	at javax.swing.JComponent.paintImmediately(JComponent.java:4970)
	at javax.swing.RepaintManager$4.run(RepaintManager.java:838)
	at javax.swing.RepaintManager$4.run(RepaintManager.java:821)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:821)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
	at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:745)
	at javax.swing.RepaintManager.access$1200(RepaintManager.java:71)
	at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1934)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762)
	at java.awt.EventQueue.access$500(EventQueue.java:98)
	at java.awt.EventQueue$3.run(EventQueue.java:715)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:732)
	at com.intellij.ide.IdeEventQueue.i(IdeEventQueue.java:824)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:753)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:428)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Railways version: 0.8.10

I'm not sure what happened, but I copied a path name (company_profile_change_path) and went to paste it into the search box and then it errored out.

RubyMine info:

RubyMine 2018.1 EAP
Build #RM-181.3007.20, built on January 25, 2018
JRE: 1.8.0_152-release-1136-b5 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13.3

Plugin is incompatible with RM 2018.1 EAP [bug/feature]

Just a heads up, Railways is not compatible with RubyMine 2018.1 EAP

railways_incompatible_rm_2018 1 eap

RubyMine 2018.1 EAP
Build #RM-181.3007.20, built on January 25, 2018
JRE: 1.8.0_152-release-1136-b5 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13.3

Thanks

use a custom command to generate routes (for remote/containerized instances)

Currently the plugin configuration includes a setting for "Rake task name" (default "routes")

image

Some containerized or custom environments (e.g. where the Rails app is running in a Docker container or remote Kubernetes pod) can't run rake... directly, since the application build exists in the container or remote instance, not on the local/host environment.

Allowing a broader custom command for retrieving the routes (matching whatever command works for the user's development environment) would enable the plugin to work for containerized or custom environments.

e.g. "Routes command" (default "rake routes")

Doesn't build routes with jruby

When I try to use the routes panel, it shows its "Running rake routes, Environment: Production". It then goes to "Failed to load routes" with a "Show details" link that opens a dialog with this line twice : "Unknown ruby string (do not know how to handle): jruby-9.2.20.1."

Let me know if you need any more info.

FYI, this use to work in the past (few years ago?).

Regards,
Rick

Railways not supported in RM 2018.3 EAP

Railways is not supported in the latest EAP

RubyMine 2018.3 EAP
Build #RM-183.2407.12, built on September 13, 2018
JRE: 1.8.0_152-release-1293-b10 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13.3

railways_rm_incompatible

BUNDLE_GEMFILE ignored

Railways ignores the BUNDLE_GEMFILE variable, and it tries to load the regular Gemfile, which in some project maybe wrong, hence stopping it to work with some error.

Is there any possibility to bypass that problem?

plugin loads in only 1 instance of multiple instances of rubymine running

RubyMine 2022.2.3
Build #RM-222.4345.14, built on October 5, 2022

Runtime version: 17.0.4.1+7-b469.62 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
macOS 12.5.1
GC: G1 Young Generation, G1 Old Generation

Metal Rendering is ON
Non-Bundled Plugins:
org.elixir_lang (13.2.1)
Railways (0.8.17)

Failed to load routes with WSL2

Hi, tried to use plugin with WSL2. Ruby SDK and path mappings added.
But get error: /bin/sh: 1: cd: can't cd to //wsl$/Ubuntu/home/skat/projects/proj

RubyMine 2021.3 RC: java.lang.NoClassDefFoundError: com/jgoodies/forms/layout/FormLayout

When I open Routes tab in RubyMine 2021.3 RC, I always get this error:

java.lang.NoClassDefFoundError: com/jgoodies/forms/layout/FormLayout
	at net.bitpot.railways.gui.MainPanel.$$$setupUI$$$(Unknown Source)
	at net.bitpot.railways.gui.MainPanel.<init>(Unknown Source)
	at net.bitpot.railways.routesView.RoutesView.<init>(Unknown Source)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
	at com.intellij.serviceContainer.ConstructorInjectionKt.instantiateUsingPicoContainer(constructorInjection.kt:52)
	at com.intellij.serviceContainer.ComponentManagerImpl.instantiateClassWithConstructorInjection(ComponentManagerImpl.kt:876)
	at com.intellij.serviceContainer.ServiceComponentAdapter.createAndInitialize(ServiceComponentAdapter.kt:47)
	at com.intellij.serviceContainer.ServiceComponentAdapter.doCreateInstance(ServiceComponentAdapter.kt:37)
	at com.intellij.serviceContainer.BaseComponentAdapter.getInstanceUncached(BaseComponentAdapter.kt:113)
	at com.intellij.serviceContainer.BaseComponentAdapter.getInstance(BaseComponentAdapter.kt:67)
	at com.intellij.serviceContainer.BaseComponentAdapter.getInstance$default(BaseComponentAdapter.kt:60)
	at com.intellij.serviceContainer.ComponentManagerImpl.doGetService(ComponentManagerImpl.kt:595)
	at com.intellij.serviceContainer.ComponentManagerImpl.getService(ComponentManagerImpl.kt:569)
	at com.intellij.openapi.client.ClientAwareComponentManager.getFromSelfOrCurrentSession(ClientAwareComponentManager.kt:37)
	at com.intellij.openapi.client.ClientAwareComponentManager.getService(ClientAwareComponentManager.kt:22)
	at com.intellij.openapi.components.ServiceManager.getService(ServiceManager.java:27)
	at net.bitpot.railways.routesView.RoutesView.getInstance(Unknown Source)
	at net.bitpot.railways.routesView.RoutesViewToolWindowFactory.createToolWindowContent(Unknown Source)
	at com.intellij.openapi.wm.impl.ToolWindowImpl.createContentIfNeeded$intellij_platform_ide_impl(ToolWindowImpl.kt:542)
	at com.intellij.openapi.wm.impl.ToolWindowImpl.scheduleContentInitializationIfNeeded$intellij_platform_ide_impl(ToolWindowImpl.kt:521)
	at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.doShowWindow(ToolWindowManagerImpl.kt:1033)
	at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.showToolWindowImpl(ToolWindowManagerImpl.kt:979)
	at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.activateToolWindow(ToolWindowManagerImpl.kt:681)
	at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.activateToolWindow$default(ToolWindowManagerImpl.kt:659)
	at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.activated$intellij_platform_ide_impl(ToolWindowManagerImpl.kt:2052)
	at com.intellij.openapi.wm.impl.StripeButton.lambda$new$0(StripeButton.java:68)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
	at java.desktop/javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:401)
	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:270)
	at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:297)
	at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:297)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6654)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3345)
	at com.intellij.openapi.wm.impl.StripeButton.processMouseEvent(StripeButton.java:329)
	at java.desktop/java.awt.Component.processEvent(Component.java:6419)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5029)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2790)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:891)
	at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:820)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:757)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:447)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:818)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:446)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:805)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:498)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.ClassNotFoundException: com.jgoodies.forms.layout.FormLayout PluginClassLoader(plugin=PluginDescriptor(name=Railways, id=Railways, descriptorPath=plugin.xml, path=~/Library/Application Support/JetBrains/Toolbox/apps/RubyMine/ch-1/213.5744.124/RubyMine 2021.3 EAP.app.plugins/railways.jar, version=0.8.17, package=null, isBundled=false), packagePrefix=null, instanceId=107, state=active)
	at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:235)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
	... 75 more

My environment is:

RubyMine 2021.3 RC
Build #RM-213.5744.124, built on November 17, 2021
Licensed to - / Junichi Ito
Subscription is active until June 13, 2022.
Runtime version: 11.0.13+7-b1751.19 aarch64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
macOS 11.6
GC: G1 Young Generation, G1 Old Generation
Memory: 4000M
Cores: 8
Non-Bundled Plugins:
    com.tabnine.TabNine (0.5.3)
    com.jetbrains.ChooseRuntime (1.2)
    com.intellij.plugins.watcher (213.5744.122)
    IdeaVIM (1.8.1)
    zielu.gittoolbox (212.8.1)
    org.jetbrains.plugins.vue (213.5744.122)
    intellij.prettierJS (213.5744.122)
    NodeJS (213.5744.122)
    Railways (0.8.17)

Gemfile.lock:

GEM
  remote: https://rubygems.org/
  specs:
    actioncable (6.0.4.1)
      actionpack (= 6.0.4.1)
      nio4r (~> 2.0)
      websocket-driver (>= 0.6.1)
    actionmailbox (6.0.4.1)
      actionpack (= 6.0.4.1)
      activejob (= 6.0.4.1)
      activerecord (= 6.0.4.1)
      activestorage (= 6.0.4.1)
      activesupport (= 6.0.4.1)
      mail (>= 2.7.1)
    actionmailer (6.0.4.1)
      actionpack (= 6.0.4.1)
      actionview (= 6.0.4.1)
      activejob (= 6.0.4.1)
      mail (~> 2.5, >= 2.5.4)
      rails-dom-testing (~> 2.0)
    actionpack (6.0.4.1)
      actionview (= 6.0.4.1)
      activesupport (= 6.0.4.1)
      rack (~> 2.0, >= 2.0.8)
      rack-test (>= 0.6.3)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.0, >= 1.2.0)
    actiontext (6.0.4.1)
      actionpack (= 6.0.4.1)
      activerecord (= 6.0.4.1)
      activestorage (= 6.0.4.1)
      activesupport (= 6.0.4.1)
      nokogiri (>= 1.8.5)
    actionview (6.0.4.1)
      activesupport (= 6.0.4.1)
      builder (~> 3.1)
      erubi (~> 1.4)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.1, >= 1.2.0)
    activejob (6.0.4.1)
      activesupport (= 6.0.4.1)
      globalid (>= 0.3.6)
    activemodel (6.0.4.1)
      activesupport (= 6.0.4.1)
    activerecord (6.0.4.1)
      activemodel (= 6.0.4.1)
      activesupport (= 6.0.4.1)
    activestorage (6.0.4.1)
      actionpack (= 6.0.4.1)
      activejob (= 6.0.4.1)
      activerecord (= 6.0.4.1)
      marcel (~> 1.0.0)
    activesupport (6.0.4.1)
      concurrent-ruby (~> 1.0, >= 1.0.2)
      i18n (>= 0.7, < 2)
      minitest (~> 5.1)
      tzinfo (~> 1.1)
      zeitwerk (~> 2.2, >= 2.2.2)
    addressable (2.8.0)
      public_suffix (>= 2.0.2, < 5.0)
    bindex (0.8.1)
    bootsnap (1.9.1)
      msgpack (~> 1.0)
    builder (3.2.4)
    byebug (11.1.3)
    capybara (3.36.0)
      addressable
      matrix
      mini_mime (>= 0.1.3)
      nokogiri (~> 1.8)
      rack (>= 1.6.0)
      rack-test (>= 0.6.3)
      regexp_parser (>= 1.5, < 3.0)
      xpath (~> 3.2)
    childprocess (4.1.0)
    concurrent-ruby (1.1.9)
    crass (1.0.6)
    erubi (1.10.0)
    ffi (1.15.4)
    globalid (0.5.2)
      activesupport (>= 5.0)
    i18n (1.8.11)
      concurrent-ruby (~> 1.0)
    jbuilder (2.11.3)
      activesupport (>= 5.0.0)
    listen (3.7.0)
      rb-fsevent (~> 0.10, >= 0.10.3)
      rb-inotify (~> 0.9, >= 0.9.10)
    loofah (2.12.0)
      crass (~> 1.0.2)
      nokogiri (>= 1.5.9)
    mail (2.7.1)
      mini_mime (>= 0.1.1)
    marcel (1.0.2)
    matrix (0.4.2)
    method_source (1.0.0)
    mini_mime (1.1.2)
    mini_portile2 (2.6.1)
    minitest (5.14.4)
    msgpack (1.4.2)
    nio4r (2.5.8)
    nokogiri (1.12.5)
      mini_portile2 (~> 2.6.1)
      racc (~> 1.4)
    public_suffix (4.0.6)
    puma (4.3.10)
      nio4r (~> 2.0)
    racc (1.6.0)
    rack (2.2.3)
    rack-proxy (0.7.0)
      rack
    rack-test (1.1.0)
      rack (>= 1.0, < 3)
    rails (6.0.4.1)
      actioncable (= 6.0.4.1)
      actionmailbox (= 6.0.4.1)
      actionmailer (= 6.0.4.1)
      actionpack (= 6.0.4.1)
      actiontext (= 6.0.4.1)
      actionview (= 6.0.4.1)
      activejob (= 6.0.4.1)
      activemodel (= 6.0.4.1)
      activerecord (= 6.0.4.1)
      activestorage (= 6.0.4.1)
      activesupport (= 6.0.4.1)
      bundler (>= 1.3.0)
      railties (= 6.0.4.1)
      sprockets-rails (>= 2.0.0)
    rails-dom-testing (2.0.3)
      activesupport (>= 4.2.0)
      nokogiri (>= 1.6)
    rails-html-sanitizer (1.4.2)
      loofah (~> 2.3)
    railties (6.0.4.1)
      actionpack (= 6.0.4.1)
      activesupport (= 6.0.4.1)
      method_source
      rake (>= 0.8.7)
      thor (>= 0.20.3, < 2.0)
    rake (13.0.6)
    rb-fsevent (0.11.0)
    rb-inotify (0.10.1)
      ffi (~> 1.0)
    regexp_parser (2.1.1)
    rexml (3.2.5)
    rubyzip (2.3.2)
    sass-rails (6.0.0)
      sassc-rails (~> 2.1, >= 2.1.1)
    sassc (2.4.0)
      ffi (~> 1.9)
    sassc-rails (2.1.2)
      railties (>= 4.0.0)
      sassc (>= 2.0)
      sprockets (> 3.0)
      sprockets-rails
      tilt
    selenium-webdriver (4.0.3)
      childprocess (>= 0.5, < 5.0)
      rexml (~> 3.2, >= 3.2.5)
      rubyzip (>= 1.2.2)
    spring (2.1.1)
    spring-watcher-listen (2.0.1)
      listen (>= 2.7, < 4.0)
      spring (>= 1.2, < 3.0)
    sprockets (4.0.2)
      concurrent-ruby (~> 1.0)
      rack (> 1, < 3)
    sprockets-rails (3.4.0)
      actionpack (>= 5.2)
      activesupport (>= 5.2)
      sprockets (>= 3.0.0)
    sqlite3 (1.4.2)
    thor (1.1.0)
    thread_safe (0.3.6)
    tilt (2.0.10)
    turbolinks (5.2.1)
      turbolinks-source (~> 5.2)
    turbolinks-source (5.2.0)
    tzinfo (1.2.9)
      thread_safe (~> 0.1)
    web-console (4.2.0)
      actionview (>= 6.0.0)
      activemodel (>= 6.0.0)
      bindex (>= 0.4.0)
      railties (>= 6.0.0)
    webdrivers (5.0.0)
      nokogiri (~> 1.6)
      rubyzip (>= 1.3.0)
      selenium-webdriver (~> 4.0)
    webpacker (4.3.0)
      activesupport (>= 4.2)
      rack-proxy (>= 0.6.1)
      railties (>= 4.2)
    websocket-driver (0.7.5)
      websocket-extensions (>= 0.1.0)
    websocket-extensions (0.1.5)
    xpath (3.2.0)
      nokogiri (~> 1.8)
    zeitwerk (2.5.1)

PLATFORMS
  ruby

DEPENDENCIES
  bootsnap (>= 1.4.2)
  byebug
  capybara (>= 2.15)
  jbuilder (~> 2.7)
  listen (~> 3.2)
  puma (~> 4.1)
  rails (~> 6.0.4, >= 6.0.4.1)
  sass-rails (>= 6)
  selenium-webdriver
  spring
  spring-watcher-listen (~> 2.0.0)
  sqlite3 (~> 1.4)
  turbolinks (~> 5)
  tzinfo-data
  web-console (>= 3.3.0)
  webdrivers
  webpacker (~> 4.0)

RUBY VERSION
   ruby 2.7.4p191

BUNDLED WITH
   2.1.4

Could you investigate this? If you need more detailed information, please let me know.

Not working on RubyMine 2016.2.3

I'm using RubyMine 2016.2.3 / Build #RM-162.1812.23, built on September 5, 2016.
Railways does not show up at all in the tool windows.

All other plugins I have are JetBrains ("Native") Plugins, is it working on this new build for someone else?

Railways crashes on start

IntelliJ IDEA 14.1.5
Railways 0.8.4

Everything worked fine before updating Railways.

com/intellij/ide/TextCopyProvider
java.lang.NoClassDefFoundError: com/intellij/ide/TextCopyProvider
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.lang.ClassLoader.defineClass(ClassLoader.java:642)
at com.intellij.util.lang.UrlClassLoader._defineClass(UrlClassLoader.java:259)
at com.intellij.util.lang.UrlClassLoader.defineClass(UrlClassLoader.java:255)
at com.intellij.util.lang.UrlClassLoader._findClass(UrlClassLoader.java:231)
at com.intellij.ide.plugins.cl.PluginClassLoader.b(PluginClassLoader.java:124)
at com.intellij.ide.plugins.cl.PluginClassLoader.a(PluginClassLoader.java:77)
at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:66)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at net.bitpot.railways.gui.LabelWithCopy.(Unknown Source)
at net.bitpot.railways.gui.MainPanel.createUIComponents(Unknown Source)
at net.bitpot.railways.gui.MainPanel.$$$setupUI$$$(Unknown Source)
at net.bitpot.railways.gui.MainPanel.(Unknown Source)
at net.bitpot.railways.routesView.RoutesView.(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at org.picocontainer.defaults.InstantiatingComponentAdapter.newInstance(InstantiatingComponentAdapter.java:193)
at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:220)
at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
at com.intellij.util.pico.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:58)
at com.intellij.openapi.components.impl.ServiceManagerImpl$MyComponentAdapter.initializeInstance(ServiceManagerImpl.java:228)
at com.intellij.openapi.components.impl.ServiceManagerImpl$MyComponentAdapter$1.compute(ServiceManagerImpl.java:216)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:884)
at com.intellij.openapi.components.impl.ServiceManagerImpl$MyComponentAdapter.getComponentInstance(ServiceManagerImpl.java:207)
at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:245)
at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:211)
at com.intellij.openapi.components.ServiceManager.getService(ServiceManager.java:37)
at net.bitpot.railways.routesView.RoutesView.getInstance(Unknown Source)
at net.bitpot.railways.routesView.RoutesViewToolWindowFactory.createToolWindowContent(Unknown Source)
at com.intellij.openapi.wm.impl.ToolWindowImpl.ensureContentInitialized(ToolWindowImpl.java:510)
at com.intellij.openapi.wm.impl.ToolWindowManagerImpl$11.run(ToolWindowManagerImpl.java:520)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:332)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:734)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:569)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:382)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.ClassNotFoundException: com.intellij.ide.TextCopyProvider PluginClassLoader[Railways for IDEA, 0.8.4]
at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:68)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 53 more

Failed to load routes in Rails 6.1

Title says it all.
After a little research, it seems, rake routes is not available in Rails 6.1 as a task, by default. However, rails routes works fine.

You might consider a fix. Would hate to see this plugin unusable, I depend on it so much.

RM 2020.3 EAP PsiInvalidElementAccessException error

With the latest RM EAP, I will get the follow error. I'm not sure what is cuasing it or how to replicate it as I notice it after a short period of time.

com.intellij.psi.PsiInvalidElementAccessException: Element class com.intellij.psi.impl.source.tree.CompositeElement of type Ruby:Call (class org.jetbrains.plugins.ruby.ruby.lang.psi.stubs.types.RCallStubElementType)
	at com.intellij.psi.PsiInvalidElementAccessException.createByNode(PsiInvalidElementAccessException.java:80)
	at com.intellij.psi.impl.source.SubstrateRef$2.getContainingFile(SubstrateRef.java:101)
	at com.intellij.extapi.psi.StubBasedPsiElementBase.getContainingFile(StubBasedPsiElementBase.java:239)
	at com.intellij.extapi.psi.StubBasedPsiElementBase.isPhysical(StubBasedPsiElementBase.java:282)
	at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:154)
	at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:54)
	at com.intellij.util.CachedValueBase.lambda$getValueWithLock$1(CachedValueBase.java:235)
	at com.intellij.openapi.util.RecursionManager$1.computePreventingRecursion(RecursionManager.java:111)
	at com.intellij.openapi.util.RecursionGuard.doPreventingRecursion(RecursionGuard.java:42)
	at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
	at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:236)
	at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:43)
	at com.intellij.util.CachedValuesManagerImpl.getCachedValue(CachedValuesManagerImpl.java:78)
	at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:150)
	at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:120)
	at org.jetbrains.plugins.ruby.ruby.lang.psi.impl.RPossibleCallElementBase.getCallType(RPossibleCallElementBase.java:31)
	at org.jetbrains.plugins.ruby.ruby.lang.psi.impl.controlStructures.methods.RMethodImpl$1.visitRCall(RMethodImpl.java:177)
	at org.jetbrains.plugins.ruby.ruby.lang.psi.impl.methodCall.RCallImpl.accept(RCallImpl.java:57)
	at com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
	at org.jetbrains.plugins.ruby.ruby.lang.psi.visitors.RubyRecursiveElementVisitor.visitElement(RubyRecursiveElementVisitor.java:31)
	at org.jetbrains.plugins.ruby.ruby.lang.psi.visitors.RubyElementVisitor.visitRCompoundStatement(RubyElementVisitor.java:125)
	at org.jetbrains.plugins.ruby.ruby.lang.psi.impl.controlStructures.blocks.RCompoundStatementImpl.accept(RCompoundStatementImpl.java:46)
	at com.intellij.psi.impl.source.tree.LazyParseablePsiElement.acceptChildren(LazyParseablePsiElement.java:104)
	at org.jetbrains.plugins.ruby.ruby.lang.psi.visitors.RubyRecursiveElementVisitor.visitElement(RubyRecursiveElementVisitor.java:31)
	at org.jetbrains.plugins.ruby.ruby.lang.psi.visitors.RubyElementVisitor.visitRBodyStatement(RubyElementVisitor.java:121)
	at org.jetbrains.plugins.ruby.ruby.lang.psi.impl.controlStructures.blocks.RBodyStatementImpl.accept(RBodyStatementImpl.java:54)
	at com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
	at org.jetbrains.plugins.ruby.ruby.lang.psi.impl.controlStructures.methods.RMethodImpl.computeVisibilities(RMethodImpl.java:208)
	at org.jetbrains.plugins.ruby.ruby.lang.psi.impl.controlStructures.methods.RMethodImpl.lambda$getVisibility$1(RMethodImpl.java:133)
	at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:153)
	at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:54)
	at com.intellij.util.CachedValueBase.lambda$getValueWithLock$1(CachedValueBase.java:235)
	at com.intellij.openapi.util.RecursionManager$1.computePreventingRecursion(RecursionManager.java:111)
	at com.intellij.openapi.util.RecursionGuard.doPreventingRecursion(RecursionGuard.java:42)
	at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:68)
	at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:236)
	at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:43)
	at com.intellij.util.CachedValuesManagerImpl.getCachedValue(CachedValuesManagerImpl.java:78)
	at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:150)
	at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:120)
	at org.jetbrains.plugins.ruby.ruby.lang.psi.impl.controlStructures.methods.RMethodImpl.getVisibility(RMethodImpl.java:133)
	at net.bitpot.railways.models.RailsActionInfo.getMethodVisibility(Unknown Source)
	at net.bitpot.railways.models.RailsActionInfo.getIcon(Unknown Source)
	at net.bitpot.railways.models.routes.SimpleRoute.getActionIcon(Unknown Source)
	at net.bitpot.railways.gui.RouteCellRenderer.renderRouteAction(Unknown Source)
	at net.bitpot.railways.gui.RouteCellRenderer.customizeCellRenderer(Unknown Source)
	at com.intellij.ui.ColoredTableCellRenderer.rendererComponentInner(ColoredTableCellRenderer.java:58)
	at com.intellij.ui.ColoredTableCellRenderer.getTableCellRendererComponent(ColoredTableCellRenderer.java:41)
	at java.desktop/javax.swing.JTable.prepareRenderer(JTable.java:5741)
	at com.intellij.ui.table.JBTable.prepareRenderer(JBTable.java:680)
	at java.desktop/javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2185)
	at java.desktop/javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2087)
	at java.desktop/javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1883)
	at java.desktop/javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
	at java.desktop/javax.swing.JComponent.paintComponent(JComponent.java:800)
	at com.intellij.ui.table.JBTable.paintComponent(JBTable.java:391)
	at java.desktop/javax.swing.JComponent.paint(JComponent.java:1077)
	at com.intellij.ui.table.JBTable.paint(JBTable.java:521)
	at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:910)
	at java.desktop/javax.swing.JComponent.paint(JComponent.java:1086)
	at java.desktop/javax.swing.JViewport.paint(JViewport.java:737)
	at com.intellij.ui.components.JBViewport.paint(JBViewport.java:241)
	at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:910)
	at java.desktop/javax.swing.JComponent.paint(JComponent.java:1086)
	at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5263)
	at java.desktop/javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:246)
	at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1333)
	at java.desktop/javax.swing.JComponent._paintImmediately(JComponent.java:5211)
	at java.desktop/javax.swing.JComponent.paintImmediately(JComponent.java:5021)
	at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:868)
	at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:851)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:851)
	at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:826)
	at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:775)
	at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1901)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:974)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:841)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:452)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:773)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:451)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:495)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
java.lang.Throwable
	at com.intellij.psi.impl.DebugUtil.startPsiModification(DebugUtil.java:534)
	at com.intellij.psi.impl.DebugUtil.performPsiModification(DebugUtil.java:565)
	at com.intellij.pom.core.impl.PomModelImpl.lambda$runTransaction$2(PomModelImpl.java:104)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeNonCancelableSection(CoreProgressManager.java:213)
	at com.intellij.pom.core.impl.PomModelImpl.runTransaction(PomModelImpl.java:93)
	at com.intellij.psi.impl.DiffLog.lambda$doActualPsiChange$0(DiffLog.java:270)
	at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.lambda$performActionWithFormatterDisabled$6(CodeStyleManagerImpl.java:717)
	at com.intellij.psi.impl.source.PostprocessReformattingAspect.disablePostprocessFormattingInside(PostprocessReformattingAspect.java:127)
	at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.lambda$performActionWithFormatterDisabled$8(CodeStyleManagerImpl.java:746)
	at com.intellij.formatting.FormatterImpl.runWithFormattingDisabled(FormatterImpl.java:682)
	at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.performActionWithFormatterDisabled(CodeStyleManagerImpl.java:744)
	at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.performActionWithFormatterDisabled(CodeStyleManagerImpl.java:716)
	at com.intellij.psi.impl.DiffLog.doActualPsiChange(DiffLog.java:258)
	at com.intellij.psi.impl.DocumentCommitThread.lambda$doCommit$5(DocumentCommitThread.java:332)
	at com.intellij.psi.impl.PsiDocumentManagerBase.commitToExistingPsi(PsiDocumentManagerBase.java:413)
	at com.intellij.psi.impl.PsiDocumentManagerBase.lambda$finishCommitInWriteAction$5(PsiDocumentManagerBase.java:386)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$computeInNonCancelableSection$3(CoreProgressManager.java:237)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:658)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:610)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:65)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeNonCancelableSection(CoreProgressManager.java:218)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeInNonCancelableSection(CoreProgressManager.java:235)
	at com.intellij.psi.impl.PsiDocumentManagerBase.finishCommitInWriteAction(PsiDocumentManagerBase.java:380)
	at com.intellij.psi.impl.PsiDocumentManagerImpl.finishCommitInWriteAction(PsiDocumentManagerImpl.java:125)
	at com.intellij.psi.impl.PsiDocumentManagerBase$1.run(PsiDocumentManagerBase.java:339)
	at com.intellij.psi.impl.PsiDocumentManagerBase.finishCommit(PsiDocumentManagerBase.java:343)
	at com.intellij.psi.impl.DocumentCommitThread.lambda$createFinishCommitRunnable$2(DocumentCommitThread.java:160)
	at com.intellij.psi.impl.DocumentCommitThread.commitSynchronously(DocumentCommitThread.java:112)
	at com.intellij.psi.impl.PsiDocumentManagerBase.lambda$doCommit$7(PsiDocumentManagerBase.java:474)
	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1001)
	at com.intellij.psi.impl.PsiDocumentManagerBase.doCommit(PsiDocumentManagerBase.java:483)
	at com.intellij.psi.impl.PsiDocumentManagerBase.commitAllDocuments(PsiDocumentManagerBase.java:208)
	at com.intellij.codeInsight.editorActions.PasteHandler.indentEachLine(PasteHandler.java:273)
	at com.intellij.codeInsight.editorActions.PasteHandler.lambda$doPaste$4(PasteHandler.java:237)
	at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1001)
	at com.intellij.codeInsight.editorActions.PasteHandler.doPaste(PasteHandler.java:220)
	at com.intellij.codeInsight.editorActions.PasteHandler.lambda$execute$2(PasteHandler.java:110)
	at com.intellij.openapi.project.DumbService.runWithAlternativeResolveEnabled(DumbService.java:367)
	at com.intellij.codeInsight.editorActions.PasteHandler.execute(PasteHandler.java:101)
	at com.intellij.codeInsight.editorActions.PasteHandler.doExecute(PasteHandler.java:58)
	at com.intellij.openapi.editor.actionSystem.DynamicEditorActionHandler.doExecute(DynamicEditorActionHandler.java:52)
	at com.intellij.openapi.editor.actionSystem.EditorActionHandler.lambda$execute$4(EditorActionHandler.java:198)
	at com.intellij.openapi.editor.actionSystem.EditorActionHandler.doIfEnabled(EditorActionHandler.java:88)
	at com.intellij.openapi.editor.actionSystem.EditorActionHandler.execute(EditorActionHandler.java:197)
	at com.intellij.openapi.editor.actionSystem.EditorAction.lambda$actionPerformed$0(EditorAction.java:89)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:220)
	at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:177)
	at com.intellij.openapi.editor.actionSystem.EditorAction.actionPerformed(EditorAction.java:98)
	at com.intellij.openapi.editor.actionSystem.EditorAction.actionPerformed(EditorAction.java:73)
	at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:281)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher$1.performAction(IdeKeyEventDispatcher.java:615)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.lambda$processAction$3(IdeKeyEventDispatcher.java:675)
	at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:95)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:674)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:625)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processActionOrWaitSecondStroke(IdeKeyEventDispatcher.java:522)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.inInitState(IdeKeyEventDispatcher.java:476)
	at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.dispatchKeyEvent(IdeKeyEventDispatcher.java:225)
	at com.intellij.ide.IdeEventQueue.dispatchKeyEvent(IdeEventQueue.java:890)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:835)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:452)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:773)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:451)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:823)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:505)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
RubyMine 2020.3 EAP
Build #RM-203.4818.9, built on October 13, 2020
Runtime version: 11.0.8+10-b1129.2 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
macOS 10.13
GC: ParNew, ConcurrentMarkSweep
Memory: 1966M
Cores: 4
Non-Bundled Plugins: Railways

Wasn't sure if you wanted a report about this or if I should wait to see if it happens on the next full relese of RM (non-EAP release)?

If there is anything else you need, let me know.

Thanks!

Add regex support -- feature

I would like to request the feature of adding of a wild card or regex to search for a route. Currently when searching for a route, it has to be in the exact way that it's typed in the routes.rb file.


Example:

When typing companies/ I want to add a wild card (*) after the slash (/), but if the route doesn't have the * in it, it doesn't match anything.

screen shot 2017-10-20 at 4 41 26 pm

screen shot 2017-10-20 at 4 41 44 pm

screen shot 2017-10-20 at 4 41 55 pm


Settings:

screen shot 2017-10-20 at 4 44 32 pm

Thanks for the awesome plugin!

Railsways causes the RubyMine application to pause sporadically.

As I am using the Railways plugin with our application I find that every few seconds to every minute the whole RubyMine application pauses and becomes unresponsive (ui is also not updated). If I disable the Railways plugin everything works as expected.

Environment:
RubyMine (EAP) 7.1 141.373 (Though this has been happening in version 7.0 as well).
Railways 0.8.2
Ruby 2.1.5 with Rails 3.1.
Routes in application: 2460

NoSuchMethodError for RubyMine 2017.3 EAP

Error with EAP RubyMine:

org.jetbrains.plugins.ruby.gem.GemsRunner.runGemsExecutableScript(Lcom/intellij/openapi/projectRoots/Sdk;Lcom/intellij/openapi/module/Module;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/intellij/execution/ExecutionMode;[Ljava/lang/String;)Lcom/intellij/execution/process/ProcessOutput;
java.lang.NoSuchMethodError: org.jetbrains.plugins.ruby.gem.GemsRunner.runGemsExecutableScript(Lcom/intellij/openapi/projectRoots/Sdk;Lcom/intellij/openapi/module/Module;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/intellij/execution/ExecutionMode;[Ljava/lang/String;)Lcom/intellij/execution/process/ProcessOutput;
	at net.bitpot.railways.utils.RailwaysUtils.queryRakeRoutes(Unknown Source)
	at net.bitpot.railways.routesView.RoutesManager$UpdateRoutesTask.run(Unknown Source)
	at com.intellij.openapi.progress.impl.CoreProgressManager$TaskRunnable.run(CoreProgressManager.java:704)
	at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:157)
	at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:534)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:479)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:94)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:144)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:165)
	at com.intellij.openapi.application.impl.ApplicationImpl$1.run(ApplicationImpl.java:320)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
RubyMine 2017.3 EAP
Build #RM-173.3302.28, built on October 23, 2017
JRE: 1.8.0_152-release-1024-b5 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.13

RM 2019.1 EAP not supported

Railways is not supported in RM 2019.1 EAP.

RubyMine 2019.1 EAP
Build #RM-191.4212.20, built on January 22, 2019
JRE: 1.8.0_152-release-1402-b1 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13

Icon missing

The Icon for opening the routes panel is missing in the latest version of ruby mine (on Linux) if you are using the new UI.
The workaround disable/enable sadly does not work anymore.
A keyboard shortcut for opening the panel or an entry in the view menu would be a welcome alternative.

NullPointerException

The following exception occurred today just after opening Unicode Browser (not sure if it's relevant).
RubyMine 7.1.1, Build #RM - 141.910, built on April 30, 2015
JRE: 1.6.0_65-b14-466.1-11M4716 x86_64 (Apple)
OS X 10.10.3

null
java.lang.NullPointerException
    at net.bitpot.railways.routesView.RoutesView$PSIModificationListener.modificationCountChanged(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor81.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:116)
    at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:322)
    at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:309)
    at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:295)
    at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:288)
    at com.intellij.util.messages.impl.MessageBusImpl.access$200(MessageBusImpl.java:41)
    at com.intellij.util.messages.impl.MessageBusImpl$2.invoke(MessageBusImpl.java:177)
    at com.sun.proxy.$Proxy58.modificationCountChanged(Unknown Source)
    at com.intellij.psi.impl.PsiModificationTrackerImpl.treeChanged(PsiModificationTrackerImpl.java:84)
    at com.intellij.psi.impl.PsiManagerImpl.fireEvent(PsiManagerImpl.java:391)
    at com.intellij.psi.impl.PsiManagerImpl.beforeChildrenChange(PsiManagerImpl.java:270)
    at com.intellij.psi.impl.source.text.BlockSupportImpl.sendBeforeChildrenChangeEvent(BlockSupportImpl.java:343)
    at com.intellij.pom.core.impl.PomModelImpl.startTransaction(PomModelImpl.java:311)
    at com.intellij.pom.core.impl.PomModelImpl.runTransaction(PomModelImpl.java:143)
    at com.intellij.psi.impl.DocumentCommitProcessor$2.run(DocumentCommitProcessor.java:215)
    at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl$8.compute(CodeStyleManagerImpl.java:674)
    at com.intellij.psi.impl.source.PostprocessReformattingAspect.disablePostprocessFormattingInside(PostprocessReformattingAspect.java:121)
    at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl$10.compute(CodeStyleManagerImpl.java:709)
    at com.intellij.formatting.FormatterImpl.runWithFormattingDisabled(FormatterImpl.java:894)
    at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.performActionWithFormatterDisabled(CodeStyleManagerImpl.java:705)
    at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.performActionWithFormatterDisabled(CodeStyleManagerImpl.java:671)
    at com.intellij.psi.impl.DocumentCommitProcessor.doActualPsiChange(DocumentCommitProcessor.java:200)
    at com.intellij.psi.impl.DocumentCommitProcessor$1.process(DocumentCommitProcessor.java:136)
    at com.intellij.psi.impl.DocumentCommitProcessor$1.process(DocumentCommitProcessor.java:126)
    at com.intellij.psi.impl.PsiDocumentManagerBase.finishCommitInWriteAction(PsiDocumentManagerBase.java:322)
    at com.intellij.psi.impl.PsiDocumentManagerImpl.finishCommitInWriteAction(PsiDocumentManagerImpl.java:133)
    at com.intellij.psi.impl.PsiDocumentManagerBase$3.run(PsiDocumentManagerBase.java:292)
    at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:931)
    at com.intellij.psi.impl.PsiDocumentManagerBase.finishCommit(PsiDocumentManagerBase.java:289)
    at com.intellij.psi.impl.DocumentCommitThread$5.run(DocumentCommitThread.java:521)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:715)
    at java.awt.EventQueue.access$400(EventQueue.java:82)
    at java.awt.EventQueue$2.run(EventQueue.java:676)
    at java.awt.EventQueue$2.run(EventQueue.java:674)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:685)
    at com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:734)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:569)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:382)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)



java.lang.NullPointerException
    at net.bitpot.railways.routesView.RoutesView$PSIModificationListener.modificationCountChanged(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor81.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:116)
    at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:322)
    at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:309)
    at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:295)
    at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:288)
    at com.intellij.util.messages.impl.MessageBusImpl.access$200(MessageBusImpl.java:41)
    at com.intellij.util.messages.impl.MessageBusImpl$2.invoke(MessageBusImpl.java:177)
    at com.sun.proxy.$Proxy58.modificationCountChanged(Unknown Source)
    at com.intellij.psi.impl.PsiModificationTrackerImpl.treeChanged(PsiModificationTrackerImpl.java:84)
    at com.intellij.psi.impl.PsiManagerImpl.fireEvent(PsiManagerImpl.java:391)
    at com.intellij.psi.impl.PsiManagerImpl.beforeChildrenChange(PsiManagerImpl.java:270)
    at com.intellij.psi.impl.source.text.BlockSupportImpl.sendBeforeChildrenChangeEvent(BlockSupportImpl.java:343)
    at com.intellij.pom.core.impl.PomModelImpl.startTransaction(PomModelImpl.java:311)
    at com.intellij.pom.core.impl.PomModelImpl.runTransaction(PomModelImpl.java:143)
    at com.intellij.psi.impl.DocumentCommitProcessor$2.run(DocumentCommitProcessor.java:215)
    at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl$8.compute(CodeStyleManagerImpl.java:674)
    at com.intellij.psi.impl.source.PostprocessReformattingAspect.disablePostprocessFormattingInside(PostprocessReformattingAspect.java:121)
    at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl$10.compute(CodeStyleManagerImpl.java:709)
    at com.intellij.formatting.FormatterImpl.runWithFormattingDisabled(FormatterImpl.java:894)
    at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.performActionWithFormatterDisabled(CodeStyleManagerImpl.java:705)
    at com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl.performActionWithFormatterDisabled(CodeStyleManagerImpl.java:671)
    at com.intellij.psi.impl.DocumentCommitProcessor.doActualPsiChange(DocumentCommitProcessor.java:200)
    at com.intellij.psi.impl.DocumentCommitProcessor$1.process(DocumentCommitProcessor.java:136)
    at com.intellij.psi.impl.DocumentCommitProcessor$1.process(DocumentCommitProcessor.java:126)
    at com.intellij.psi.impl.PsiDocumentManagerBase.finishCommitInWriteAction(PsiDocumentManagerBase.java:322)
    at com.intellij.psi.impl.PsiDocumentManagerImpl.finishCommitInWriteAction(PsiDocumentManagerImpl.java:133)
    at com.intellij.psi.impl.PsiDocumentManagerBase$3.run(PsiDocumentManagerBase.java:292)
    at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:931)
    at com.intellij.psi.impl.PsiDocumentManagerBase.finishCommit(PsiDocumentManagerBase.java:289)
    at com.intellij.psi.impl.DocumentCommitThread$5.run(DocumentCommitThread.java:521)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:715)
    at java.awt.EventQueue.access$400(EventQueue.java:82)
    at java.awt.EventQueue$2.run(EventQueue.java:676)
    at java.awt.EventQueue$2.run(EventQueue.java:674)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:685)
    at com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:734)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:569)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:382)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

RubyMine steals focus when switching windows quickly

https://youtrack.jetbrains.com/issue/RUBY-16411

What steps will reproduce the problem?

  1. Click on "Routes" to run rake:routes to initialize route lookup table.
  2. Switch to a different application window
  3. Switch to RubyMine (using mouse or ALT+TAB) and then quickly switch back to the other application window
  4. RubyMine will now steal window focus

What is the expected result?

RubyMine should not steal focus since the user actively switched to a different application window.

What happens instead?

RubyMine steals the window focus. If you happen to start typing anything it'll show up in the RubyMine editor instead.

Please provide any additional information below.

$ lsb_release -a
No LSB modules are available.
Distributor ID:  Ubuntu
Description:     Ubuntu 14.04.2 LTS
Release:         14.04
Codename:        trusty
$ java -version
java version "1.7.0_76"
Java(TM) SE Runtime Environment (build 1.7.0_76-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.76-b04, mixed mode)

Incompatible with RM 2019.2 EAP

JB is at it again. Just installed the latest 2019.2 EAP and railways doesn't work anymore.

Screen Shot 2019-06-03 at 9 40 30 AM

RubyMine 2019.2 EAP
Build #RM-192.4205.37, built on May 23, 2019
Runtime version: 11.0.3+12-b248.2 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13

No routes are loaded

Hello!

I'm on RubyMine 2021.EAP RM-211-5538.3, Rails 4.1

Opening Routes panel, I could see the 'Running 'rake routes'text displayed, and in RubyMines status there is also aUpdating route list for module..., but it ends with a blank list and 'Nothing to show text.

The only log item found is:

2021-02-04 13:42:56,269 [72718478]   WARN - com.intellij.util.xmlb.Binding - no accessors for net.bitpot.railways.routesView.RoutesView$State 

Exception in Plugin Railways

I haven't updated Railways, and have never had a problem with the plugin. In fact, it's become a pretty integral part of my workflow. A couple of weeks ago I started seeing an IDE Fatal Error related to Railways. RubyMine does technically still function, as does the plugin, but at a snails pace rendering it unusable. As soon as I deactivate the plugin, all's well. Here's the stacktrace for the error:

Write access is allowed from write-safe contexts only. Please ensure you're using invokeLater/invokeAndWait with a correct modality state (not "any"). See TransactionGuard documentation for details. current modality=ModalityState:Loading Project 1320988162: running=true; canceled=false known modalities={ModalityState.NON_MODAL=true, ModalityState:Loading Project 1828521477: running=false; canceled=false=true, ModalityState:Loading Project 1320988162: running=true; canceled=false=true} java.lang.Throwable at com.intellij.openapi.diagnostic.Logger.error(Logger.java:132) at com.intellij.openapi.application.TransactionGuardImpl.assertWriteActionAllowed(TransactionGuardImpl.java:235) at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.saveAllDocuments(FileDocumentManagerImpl.java:298) at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.saveAllDocuments(FileDocumentManagerImpl.java:290) at net.bitpot.railways.routesView.RoutesManager.updateRouteList(Unknown Source) at net.bitpot.railways.routesView.RoutesManager.initRouteList(Unknown Source) at net.bitpot.railways.routesView.RoutesViewPane.<init>(Unknown Source) at net.bitpot.railways.routesView.RoutesView.addModulePane(Unknown Source) at net.bitpot.railways.routesView.RoutesView.initToolWindow(Unknown Source) at net.bitpot.railways.routesView.RoutesViewToolWindowFactory.createToolWindowContent(Unknown Source) at com.intellij.openapi.wm.impl.ToolWindowImpl.ensureContentInitialized(ToolWindowImpl.java:568) at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.a(ToolWindowManagerImpl.java:488) at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.initToolWindow(ToolWindowManagerImpl.java:491) at com.intellij.openapi.wm.impl.ToolWindowManagerImpl$4.run(ToolWindowManagerImpl.java:448) at com.intellij.openapi.wm.impl.CommandProcessor.a(CommandProcessor.java:92) at com.intellij.openapi.wm.impl.CommandProcessor.run(CommandProcessor.java:72) at com.intellij.openapi.wm.impl.commands.FinalizableCommand.finish(FinalizableCommand.java:36) at com.intellij.openapi.wm.impl.ToolWindowsPane$AddToolStripeButtonCmd.run(ToolWindowsPane.java:993) at com.intellij.openapi.wm.impl.CommandProcessor.a(CommandProcessor.java:92) at com.intellij.openapi.wm.impl.CommandProcessor.run(CommandProcessor.java:72) at com.intellij.openapi.wm.impl.commands.FinalizableCommand.finish(FinalizableCommand.java:36) at com.intellij.openapi.wm.impl.ToolWindowsPane$AddToolStripeButtonCmd.run(ToolWindowsPane.java:993) at com.intellij.openapi.wm.impl.CommandProcessor.a(CommandProcessor.java:92) at com.intellij.openapi.wm.impl.CommandProcessor.run(CommandProcessor.java:72) at com.intellij.openapi.wm.impl.commands.FinalizableCommand.finish(FinalizableCommand.java:36) at com.intellij.openapi.wm.impl.ToolWindowsPane$AddToolStripeButtonCmd.run(ToolWindowsPane.java:993) at com.intellij.openapi.wm.impl.CommandProcessor.a(CommandProcessor.java:92) at com.intellij.openapi.wm.impl.CommandProcessor.run(CommandProcessor.java:72) at com.intellij.openapi.wm.impl.CommandProcessor.flush(CommandProcessor.java:46) at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.l(ToolWindowManagerImpl.java:570) at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.access$3500(ToolWindowManagerImpl.java:90) at com.intellij.openapi.wm.impl.ToolWindowManagerImpl$InitToolWindowsActivity.a(ToolWindowManagerImpl.java:2491) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762) at java.awt.EventQueue.access$500(EventQueue.java:98) at java.awt.EventQueue$3.run(EventQueue.java:715) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:732) at com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:827) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:655) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:365) at com.intellij.ide.IdeEventQueue.pumpEventsForHierarchy(IdeEventQueue.java:923) at com.intellij.openapi.progress.util.ProgressWindow.startBlocking(ProgressWindow.java:199) at com.intellij.openapi.progress.util.ProgressWindow.startBlocking(ProgressWindow.java:186) at com.intellij.openapi.application.impl.ApplicationImpl.runProcessWithProgressSynchronously(ApplicationImpl.java:608) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcessWithProgressSynchronously(CoreProgressManager.java:422) at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcessWithProgressSynchronously(ProgressManagerImpl.java:89) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcessWithProgressSynchronously(CoreProgressManager.java:270) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcessWithProgressSynchronously(CoreProgressManager.java:222) at com.intellij.openapi.project.impl.ProjectManagerImpl.openProject(ProjectManagerImpl.java:387) at com.intellij.platform.PlatformProjectOpenProcessor.doOpenProject(PlatformProjectOpenProcessor.java:254) at com.intellij.ide.RecentDirectoryProjectsManager.doOpenProject(RecentDirectoryProjectsManager.java:59) at com.intellij.ide.RecentProjectsManagerBase.doReopenLastProject(RecentProjectsManagerBase.java:619) at com.intellij.ide.RecentProjectsManagerBase$MyAppLifecycleListener.appStarting(RecentProjectsManagerBase.java:661) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:117) at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:437) at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:398) at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:387) at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:373) at com.intellij.util.messages.impl.MessageBusImpl.access$200(MessageBusImpl.java:44) at com.intellij.util.messages.impl.MessageBusImpl$2.invoke(MessageBusImpl.java:230) at com.sun.proxy.$Proxy55.appStarting(Unknown Source) at com.intellij.idea.IdeaApplication$IdeStarter.a(IdeaApplication.java:350) at com.intellij.openapi.application.TransactionGuardImpl.a(TransactionGuardImpl.java:86) at com.intellij.openapi.application.TransactionGuardImpl.a(TransactionGuardImpl.java:109) at com.intellij.openapi.application.TransactionGuardImpl.submitTransaction(TransactionGuardImpl.java:118) at com.intellij.openapi.application.TransactionGuard.submitTransaction(TransactionGuard.java:122) at com.intellij.idea.IdeaApplication$IdeStarter.main(IdeaApplication.java:348) at com.intellij.idea.IdeaApplication.b(IdeaApplication.java:202) at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:193) at com.intellij.idea.IdeaApplication.run(IdeaApplication.java:202) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.idea.MainImpl$1$1.a(MainImpl.java:65) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762) at java.awt.EventQueue.access$500(EventQueue.java:98) at java.awt.EventQueue$3.run(EventQueue.java:715) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:732) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:343) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Any ideas or plans for a fix I'm not aware of?

Plugin reports activemodel-serializers-xml missing

Using Rubymine 2018.3.3
Ruby 2.5.0
Rals 5.2.2

Refreshing routes, Railways complains that activemodel-serializers-xml is missing, but gem is installed.

Bundler::GemNotFound: Could not find activemodel-serializers-xml-1.0.2 in any of the sources
/Users/shaun/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-1.17.3/lib/bundler/spec_set.rb:91:in block in materialize' /Users/shaun/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-1.17.3/lib/bundler/spec_set.rb:85:in map!'
/Users/shaun/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-1.17.3/lib/bundler/spec_set.rb:85:in materialize' /Users/shaun/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-1.17.3/lib/bundler/definition.rb:170:in specs'
/Users/shaun/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-1.17.3/lib/bundler/definition.rb:237:in specs_for' /Users/shaun/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-1.17.3/lib/bundler/definition.rb:226:in requested_specs'
/Users/shaun/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-1.17.3/lib/bundler/runtime.rb:108:in block in definition_method' /Users/shaun/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-1.17.3/lib/bundler/runtime.rb:20:in setup'
/Users/shaun/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-1.17.3/lib/bundler.rb:107:in setup' /Users/shaun/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/bundler-1.17.3/lib/bundler/setup.rb:20:in <top (required)>'
/Users/shaun/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in require' /Users/shaun/.rbenv/versions/2.5.0/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in require'

Add environment setting

Railways relies on the development environment, and if you don't have one it cannot work. We have several apps that just don't have any development configured since each developer uses his own. Adding a simple setting would allow its usage also in that case.

Failed to load routes with docker.

Does this plugin support docker-compose?
It says "Failed to load routes" and error details is "/usr/local/bin/ruby: No such file or directory -- C:UsersrootDocumentsgithubprojectnamebinrake (LoadError)". seems like there is no separate between directory like / (anyways I'm currently using windows so maybe it lost \ somewhere).

If someone has solution to make it work on docker-compose environment, please let me know!

Broken in RubyMine 2016.2

Running in:

  • RubyMine 2016.2
  • Build #RM-162.1236.14, built on July 14, 2016
  • JRE: 1.8.0_76-release-b216 x86_64
  • JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
  • Railways plugin version 0.8.5

Attempting to refresh the list of routes results in the following exception:

org.jetbrains.plugins.ruby.ruby.lang.psi.expressions.RListOfExpressions.getElement(I)Lorg/jetbrains/plugins/ruby/ruby/lang/psi/RPsiElement;
java.lang.NoSuchMethodError: org.jetbrains.plugins.ruby.ruby.lang.psi.expressions.RListOfExpressions.getElement(I)Lorg/jetbrains/plugins/ruby/ruby/lang/psi/RPsiElement;
    at net.bitpot.railways.utils.RailwaysPsiUtils.findMethodInClassModules(Unknown Source)
    at net.bitpot.railways.utils.RailwaysPsiUtils.findControllerMethod(Unknown Source)
    at net.bitpot.railways.models.RailsActionInfo.update(Unknown Source)
    at net.bitpot.railways.models.routes.SimpleRoute.updateActionStatus(Unknown Source)
    at net.bitpot.railways.utils.RailwaysUtils.updateActionsStatus(Unknown Source)
    at net.bitpot.railways.routesView.RoutesManager.parseRakeRoutesOutput(Unknown Source)
    at net.bitpot.railways.routesView.RoutesManager.access$500(Unknown Source)
    at net.bitpot.railways.routesView.RoutesManager$UpdateRoutesTask.onSuccess(Unknown Source)
    at com.intellij.openapi.progress.impl.CoreProgressManager.finishTask(CoreProgressManager.java:412)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$1.a(ProgressManagerImpl.java:152)
    at com.intellij.openapi.application.TransactionGuardImpl$6.run(TransactionGuardImpl.java:291)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.a(LaterInvocator.java:326)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:310)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at com.intellij.ide.IdeEventQueue.h(IdeEventQueue.java:863)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:699)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:385)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

PSI and index do not match error in RM 2019.3 EAP

I am now getting an error when first launching railways in RM. This doesn't seem to affect anything, but figured that I should put in an issue just in case it does cause a problem further down the road.

Not sure if this is an issue with RM itself or railways.

Thanks!

RubyMine 2019.3 EAP
Build #RM-193.4099.3, built on October 1, 2019
Runtime version: 11.0.4+10-b485.1 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.13
GC: G1 Young Generation, G1 Old Generation
Memory: 2000M
Cores: 4
Registry: debugger.watches.in.variables=false, ide.tooltip.initialDelay=702
Non-Bundled Plugins: Railways, com.intellij.plugins.webcomponents
com.intellij.psi.stubs.UpToDateStubIndexMismatch: PSI and index do not match.
Please report the problem to JetBrains with the files attached
INDEXED VERSION IS THE CURRENT ONE file=Ruby file, file.class=class org.jetbrains.plugins.ruby.ruby.lang.psi.impl.RFileImpl, file.lang=Language: ruby, modStamp=0
 tree consistent
 stub debugInfo=created in getStubTree(), with AST = false; with backReference
latestIndexedStub=StubTree{myDebugInfo='created from index; with backReference', myRoot=PsiFileStubImpl}2046590630
   same size=true
   debugInfo=created from index; with backReference
 viewProvider=com.intellij.psi.SingleRootFileViewProvider{myVirtualFile=file:///Users/user/.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/aws-sdk-v1-1.67.0/lib/aws/record/model.rb, content=VirtualFileContent{size=13513}}
 viewProvider stamp: 0; file stamp: 0; file modCount: 1546881312000; file length: 13513
 doc saved: true; doc stamp: 0; doc size: 13513; committed: true
indexing info: indexed at 1546881312000 with document  byte size = 13513, char size = 13513
	at com.intellij.psi.stubs.StubTreeLoader.handleUpToDateMismatch(StubTreeLoader.java:134)
	at com.intellij.psi.stubs.StubTreeLoader.stubTreeAndIndexDoNotMatch(StubTreeLoader.java:127)
	at com.intellij.psi.stubs.StubProcessingHelperBase.inconsistencyDetected(StubProcessingHelperBase.java:147)
	at com.intellij.psi.stubs.StubProcessingHelperBase.checkType(StubProcessingHelperBase.java:89)
	at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:68)
	at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:393)
	at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:107)
	at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:95)
	at net.bitpot.railways.utils.RailwaysPsiUtils.findClassesAndModules(Unknown Source)
	at net.bitpot.railways.utils.RailwaysPsiUtils.findClassOrModule(Unknown Source)
	at net.bitpot.railways.utils.RailwaysPsiUtils.findControllerClass(Unknown Source)
	at net.bitpot.railways.utils.RailwaysPsiUtils.findControllerMethod(Unknown Source)
	at net.bitpot.railways.models.RailsActionInfo.update(Unknown Source)
	at net.bitpot.railways.models.routes.SimpleRoute.updateActionStatus(Unknown Source)
	at net.bitpot.railways.utils.RailwaysUtils.updateActionsStatus(Unknown Source)
	at net.bitpot.railways.routesView.RoutesManager.parseRakeRoutesOutput(Unknown Source)
	at net.bitpot.railways.routesView.RoutesManager.access$500(Unknown Source)
	at net.bitpot.railways.routesView.RoutesManager$UpdateRoutesTask.onSuccess(Unknown Source)
	at com.intellij.openapi.progress.impl.CoreProgressManager.finishTask(CoreProgressManager.java:501)
	at com.intellij.openapi.progress.impl.CoreProgressManager$4.lambda$run$1(CoreProgressManager.java:420)
	at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:309)
	at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:441)
	at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:424)
	at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:407)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
	at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:906)
	at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:779)
	at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:422)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:698)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:421)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

The following a files that were marked for "attachment" in the fatal error dialog in RM, so not sure if they are needed or not.

model.rb_file.txt

# Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
#     http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.

# todo move these to included modules (like validations and naming)


module AWS
  module Record

    # An ActiveRecord-like interface built ontop of Amazon SimpleDB.
    #
    #     class Book < AWS::Record::Model
    #
    #       string_attr :title
    #       string_attr :author
    #       integer_attr :number_of_pages
    #
    #       timestamps # adds a :created_at and :updated_at pair of timestamps
    #
    #     end
    #
    #     b = Book.new(:title => 'My Book', :author => 'Me', :pages => 1)
    #     b.save
    #
    # # Attribute Macros
    #
    # When extending AWS::Record::Model you should first consider what
    # attributes your class should have.  Unlike ActiveRecord, AWS::Record
    # models are not backed by a database table/schema.  You must choose what
    # attributes (and what types) you need.
    #
    # * `string_attr`
    # * `boolean_attr`
    # * `integer_attr`
    # * `float_attr`
    # * `datetime_attr`
    # * `date_attr`
    #
    # ### Usage
    #
    # Normally you just call these methods inside your model class definition:
    #
    #     class Book < AWS::Record::Model
    #       string_attr :title
    #       boolean_attr :has_been_read
    #       integer_attr :number_of_pages
    #       float_attr :weight_in_pounds
    #       datetime_attr :published_at
    #     end
    #
    # For each attribute macro a pair of setter/getter methods are added #
    # to your class (and a few other useful methods).
    #
    #     b = Book.new
    #     b.title = "My Book"
    #     b.has_been_read = true
    #     b.number_of_pages = 1000
    #     b.weight_in_pounds = 1.1
    #     b.published_at = Time.now
    #     b.save
    #
    #     b.id #=> "0aa894ca-8223-4d34-831e-e5134b2bb71c"
    #     b.attributes
    #     #=> { 'title' => 'My Book', 'has_been_read' => true, ... }
    #
    # ### Default Values
    #
    # All attribute macros accept the `:default_value` option.  This sets
    # a value that is populated onto all new instnaces of the class.
    #
    #     class Book < AWS::Record::Model
    #       string_attr :author, :default_value => 'Me'
    #     end
    #
    #     Book.new.author #=> 'Me'
    #
    # ### Multi-Valued (Set) Attributes
    #
    # AWS::Record permits storing multiple values with a single attribute.
    #
    #     class Book < AWS::Record::Model
    #       string_attr :tags, :set => true
    #     end
    #
    #     b = Book.new
    #     b.tags #=> #<Set: {}>
    #
    #     b.tags = ['fiction', 'fantasy']
    #     b.tags #=> #<Set: {'fiction', 'fantasy'}>
    #
    # These multi-valued attributes are treated as sets, not arrays.  This
    # means:
    #
    # * values are unordered
    # * duplicate values are automatically omitted
    #
    # Please consider these limitations when you choose to use the `:set`
    # option with the attribute macros.
    #
    # # Validations
    #
    # It's important to validate models before there are persisted to keep
    # your data clean.  AWS::Record supports most of the ActiveRecord style
    # validators.
    #
    #     class Book < AWS::Record::Model
    #       string_attr :title
    #       validates_presence_of :title
    #     end
    #
    #     b = Book.new
    #     b.valid? #=> false
    #     b.errors.full_messages #=> ['Title may not be blank']
    #
    # Validations are checked before saving a record.  If any of the validators
    # adds an error, the the save will fail.
    #
    # For more information about the available validation methods see
    # {Validations}.
    #
    # # Finder Methods
    #
    # You can find records by their ID.  Each record gets a UUID when it
    # is saved for the first time.  You can use this ID to fetch the record
    # at a latter time:
    #
    #     b = Book["0aa894ca-8223-4d34-831e-e5134b2bb71c"]
    #
    #     b = Book.find("0aa894ca-8223-4d34-831e-e5134b2bb71c")
    #
    # If you try to find a record by ID that has no data an error will
    # be raised.
    #
    # ### All
    #
    # You can enumerate all of your records using `all`.
    #
    #     Book.all.each do |book|
    #       puts book.id
    #     end
    #
    #     Book.find(:all) do |book|
    #       puts book.id
    #     end
    #
    # Be careful when enumerating all.  Depending on the number of records
    # and number of attributes each record has, this can take a while,
    # causing quite a few requests.
    #
    # ### First
    #
    # If you only want a single record, you should use `first`.
    #
    #     b = Book.first
    #
    # ### Modifiers
    #
    # Frequently you do not want ALL records or the very first record.  You
    # can pass options to `find`, `all` and `first`.
    #
    #     my_books = Book.find(:all, :where => 'owner = "Me"')
    #
    #     book = Book.first(:where => { :has_been_read => false })
    #
    # You can pass as find options:
    #
    # * `:where` - Conditions that must be met to be returned
    # * `:order` - The order to sort matched records by
    # * `:limit` - The maximum number of records to return
    #
    # # Scopes
    #
    # More useful than writing query fragments all over the place is to
    # name your most common conditions for reuse.
    #
    #     class Book < AWS::Record::Model
    #
    #       scope :mine, where(:owner => 'Me')
    #
    #       scope :unread, where(:has_been_read => false)
    #
    #       scope :by_popularity, order(:score, :desc)
    #
    #       scope :top_10, by_popularity.limit(10)
    #
    #     end
    #
    #     # The following expression returns 10 books that belong
    #     # to me, that are unread sorted by popularity.
    #     next_good_reads = Book.mine.unread.top_10
    #
    # There are 3 standard scope methods:
    #
    # * `where`
    # * `order`
    # * `limit`
    #
    # ### Conditions (where)
    #
    # Where accepts aruments in a number of forms:
    #
    # 1. As an sql-like fragment. If you need to escape values this form is
    #    not suggested.
    #
    #        Book.where('title = "My Book"')
    #
    # 2. An sql-like fragment, with placeholders.  This escapes quoted
    #    arguments properly to avoid injection.
    #
    #        Book.where('title = ?', 'My Book')
    #
    # 3. A hash of key-value pairs. This is the simplest form, but also the
    #    least flexible.  You can not use this form if you need more complex
    #    expressions that use or.
    #
    #        Book.where(:title => 'My Book')
    #
    # ### Order
    #
    # This orders the records as returned by AWS.  Default ordering is ascending.
    # Pass the value :desc as a second argument to sort in reverse ordering.
    #
    #     Book.order(:title)        # alphabetical ordering
    #     Book.order(:title, :desc) # reverse alphabetical ordering
    #
    # You may only order by a single attribute. If you call order twice in the
    # chain, the last call gets presedence:
    #
    #     Book.order(:title).order(:price)
    #
    # In this example the books will be ordered by :price and the order(:title)
    # is lost.
    #
    # ### Limit
    #
    # Just call `limit` with an integer argument.  This sets the maximum
    # number of records to retrieve:
    #
    #     Book.limit(2)
    #
    # ### Delayed Execution
    #
    # It should be noted that all finds are lazy (except `first`).  This
    # means the value returned is not an array of records, rather a handle
    # to a {Scope} object that will return records when you enumerate over them.
    #
    # This allows you to build an expression without making unecessary requests.
    # In the following example no request is made until the call to
    # each_with_index.
    #
    #     all_books = Books.all
    #     ten_books = all_books.limit(10)
    #
    #     ten_books.each_with_index do |book,n|
    #       puts "#{n + 1} : #{book.title}"
    #     end
    #
    class Model

      require 'aws/record/model/attributes'
      require 'aws/record/model/finder_methods'
      require 'aws/record/model/scope'

      extend AbstractBase

      # The id for each record is auto-generated.  The default strategy
      # generates uuid strings.
      # @return [String] Returns the id string (uuid) for this record.  Retuns
      #   nil if this is a new record that has not been persisted yet.
      def id
        @_id
      end

      # @return [Hash] A hash with attribute names as hash keys (strings) and
      #   attribute values (of mixed types) as hash values.
      def attributes
        attributes = super
        attributes['id'] = id if persisted?
        attributes
      end

      class << self

        # Creates the SimpleDB domain that is configured for this class.
        #
        #     class Product < AWS::Record::Model
        #     end
        #
        #     Product.create_table #=> 'Product'
        #
        # If you share a single AWS account with multiple applications, you
        # can provide a domain prefix for your model classes.
        #
        #     AWS::Record.domain_prefix = 'myapp-'
        #
        #     Product.create_table #=> 'myapp-Product'
        #
        # If you have set a model shard name, this is used in place of the
        # class name.
        #
        #     AWS::Record.domain_prefix = 'prod-'
        #     class Product < AWS::Record::Model
        #       set_shard_name 'products'
        #     end
        #
        #     Product.create_table #=> 'prod-products'
        #
        # If you shard you data across multiple domains, you can specify the
        # shard name:
        #
        #     # create two domains, with the given names
        #     Product.create_domain 'products-1'
        #     Product.create_domain 'products-2'
        #
        # @param [optional,String] shard_name Defaults to the class name.
        #
        # @return [SimpleDB::Domain]
        #
        def create_domain shard_name = nil
          sdb.domains.create(sdb_domain_name(shard_name))
        end

        # @return [AWS::SimpleDB::Domain]
        # @api private
        def sdb_domain shard_name = nil
          sdb.domains[sdb_domain_name(shard_name)]
        end

        protected
        def sdb_domain_name shard_name = nil
          "#{AWS::Record.domain_prefix}#{self.shard_name(shard_name)}"
        end

        protected
        def sdb
          AWS::SimpleDB.new
        end

      end

      # @return [SimpleDB::Item] Returns a reference to the item as stored in
      #   simple db.
      # @api private
      private
      def sdb_item
        sdb_domain.items[id]
      end

      # @return [SimpleDB::Domain] Returns the domain this record is
      #   persisted to or will be persisted to.
      private
      def sdb_domain
        self.class.sdb_domain(shard)
      end

      # This function accepts a hash of item data (as returned from
      # AttributeCollection#to_h or ItemData#attributes) and returns only
      # the key/value pairs that are configured attribues for this class.
      # @api private
      private
      def deserialize_item_data item_data

        marked_for_deletion = item_data['_delete_'] || []

        data = {}
        item_data.each_pair do |attr_name,values|

          attribute = self.class.attributes[attr_name]

          next unless attribute
          next if marked_for_deletion.include?(attr_name)

          if attribute.set?
            data[attr_name] = values.map{|v| attribute.deserialize(v) }
          else
            data[attr_name] = attribute.deserialize(values.first)
          end

        end
        data
      end

      def hydrate(id, data)
        @_id = id
        super
      end

      # @api private
      def populate_id
        @_id = SecureRandom.uuid
      end

      # @api private
      protected
      def create_storage
        to_add = serialize_attributes
        sdb_item.attributes.add(to_add.merge(opt_lock_conditions))
      end

      # @api private
      private
      def update_storage

        to_update = {}
        to_delete = []

        # serialized_attributes will raise error if the entire record is blank
        attribute_values = serialize_attributes

        changed.each do |attr_name|
          if values = attribute_values[attr_name]
            to_update[attr_name] = values
          else
            to_delete << attr_name
          end
        end

        to_update.merge!(opt_lock_conditions)

        if to_delete.empty?
          sdb_item.attributes.replace(to_update)
        else
          sdb_item.attributes.replace(to_update.merge('_delete_' => to_delete))
          sdb_item.attributes.delete(to_delete + ['_delete_'])
        end

      end

      # @return [true]
      # @api private
      private
      def delete_storage
        sdb_item.delete(opt_lock_conditions)
        @_deleted = true
      end

    end

    # for backwards compatability with the old AWS::Record::Base
    Base = Model

  end
end

stubTree.txt

PsiFileStubImpl
  RModuleStub:AWS
    RModuleStub:Record
      RClassStub:Model
        RCallStubImpl
        RCallStubImpl
        RCallStubImpl
        RCallStubImpl
        RMethodStub:id
          RInstanceVariableStubImpl
        RMethodStub:attributes
        RObjectClassStubImpl
          RMethodStub:create_domain
          RMethodStub:sdb_domain
          RIdentifierStub
          RMethodStub:sdb_domain_name
          RIdentifierStub
          RMethodStub:sdb
        RIdentifierStub
        RMethodStub:sdb_item
        RIdentifierStub
        RMethodStub:sdb_domain
        RIdentifierStub
        RMethodStub:deserialize_item_data
        RMethodStub:hydrate
          RInstanceVariableStubImpl
        RMethodStub:populate_id
          RInstanceVariableStubImpl
        RIdentifierStub
        RMethodStub:create_storage
        RIdentifierStub
        RMethodStub:update_storage
        RIdentifierStub
        RMethodStub:delete_storage
          RInstanceVariableStubImpl
      RConstantStubImpl

Compatibility with IntelliJ IDEA

The module does not work with IntelliJ IDEA 13 due to a reference to "com.intellij.modules.ruby” which is not included when using the Ruby module which uses "org.jetbrains.plugins.ruby". This however may be a bug with the way IntelliJ/RubyMine handle dependancies.

Path within locale is not shown.

Hi I likely use railways plugin. I noticed paths are not shown under locale. Please check this below condition ? Thank you.

config/routes.rb

Rails.application.routes.draw do
  scope '(:locale)', locale: /en|ja/ do
    resources :spots

result of bundle exec rake routes

spots GET        (/:locale)/spots(.:format)                                                spots#index {:locale=>/en|ja/}

result of railways

none

Environment

Railways v0.8.12
Rubymine 2018.3.1

Ruby 2.5.1
Rails 5.1.4

[Feature Request] Make the input field longer or draggable

Not a big deal by any means, but figured I would put an issue in for it. I would like to request the input field to be longer to see more of what you are typing in. It would be cool if it was draggable, but I feel like that might be overkill for what is really needed.

RM_RW_Routes

From the above screenshot, there is a lot of room to extend the input field, but not sure if it's a % or a fixed width. I'm on a 15" laptop most of the time, so not sure if screen size is a big issue. Since I'm not sure what to change (as I'm not a java dev) or I would put in a pull request.

Thanks!

Can't see download in RubyMine 2018.3

Hi, thanks for making an awesome plugin!

Not sure if the problem is on RubyMine's end or Railways's, but in the latest RubyMine version, I'm unable to find the Railways plugin for download. I see in your changelog that you released a recent version of this plugin that updates it for the most recent IDE version, but for some reason, it is not showing up when I search the Marketplace.

Thanks again!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.