text: import ActionCable from "./index"
  
  // The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,
  // the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.
  // The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription
  // method.
  //
  // The following example shows how this can be setup:
  //
  //   App = {}
  //   App.cable = ActionCable.createConsumer("ws://example.com/accounts/1")
  //   App.appearance = App.cable.subscriptions.create("AppearanceChannel")
  //
  // For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.
  //
  // When a consumer is created, it automatically connects with the server.
  //
  // To disconnect from the server, call
  //
  //   App.cable.disconnect()
  //
  // and to restart the connection:
  //
  //   App.cable.connect()
  //
  // Any channel subscriptions which existed prior to disconnecting will
  // automatically resubscribe.
  
  export default class Consumer {
    constructor(url) {
      this.url = url
      this.subscriptions = new ActionCable.Subscriptions(this)
      this.connection = new ActionCable.Connection(this)
    }
  
    send(data) {
      return this.connection.send(data)
    }
  
    connect() {
      return this.connection.open()
    }
  
    disconnect() {
      return this.connection.close({allowReconnect: false})
    }
  
    ensureActiveConnection() {
      if (!this.connection.isActive()) {
        return this.connection.open()
      }
    }
  }
  