rails-hyperstack 1.0.alpha1.2 → 1.0.alpha1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.gitignore +10 -0
 - data/.ruby-version +1 -0
 - data/Gemfile +2 -1
 - data/Rakefile +21 -11
 - data/lib/generators/hyper/component_generator.rb +3 -16
 - data/lib/generators/hyper/generator_base.rb +18 -0
 - data/lib/generators/hyper/router_generator.rb +3 -19
 - data/lib/generators/hyper/templates/component_template.rb +19 -8
 - data/lib/generators/hyper/templates/hyper_component_template.rb +10 -0
 - data/lib/generators/hyper/templates/router_template.rb +4 -4
 - data/lib/generators/hyperstack/install_generator.rb +137 -137
 - data/lib/generators/hyperstack/install_generator_base.rb +268 -3
 - data/lib/generators/install/hyperstack_generator.rb +229 -0
 - data/lib/generators/install/hyperstack_generator_base.rb +102 -0
 - data/lib/hyperstack/server_side_auto_require.rb +39 -0
 - data/lib/hyperstack/version.rb +1 -1
 - data/lib/rails-hyperstack.rb +10 -2
 - data/lib/tasks/hyperstack/install.rake +32 -0
 - data/rails-hyperstack.gemspec +45 -19
 - data/spec/gems.rb +10 -0
 - data/spec/rails_hyperstack_spec.rb +22 -16
 - data/spec/server_side_sample.rb +5 -0
 - metadata +82 -77
 - data/Gemfile.lock +0 -421
 
| 
         @@ -6,11 +6,128 @@ module Rails 
     | 
|
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                  protected
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
      
 9 
     | 
    
         
            +
                  def warnings
         
     | 
| 
      
 10 
     | 
    
         
            +
                    @warnings ||= []
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  def create_component_file(template)
         
     | 
| 
      
 14 
     | 
    
         
            +
                    clear_cache
         
     | 
| 
      
 15 
     | 
    
         
            +
                    insure_hyperstack_loader_installed
         
     | 
| 
      
 16 
     | 
    
         
            +
                    check_javascript_link_directory
         
     | 
| 
      
 17 
     | 
    
         
            +
                    added = webpack_check
         
     | 
| 
      
 18 
     | 
    
         
            +
                    insure_base_component_class_exists
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @no_help = options.key?('no-help')
         
     | 
| 
      
 20 
     | 
    
         
            +
                    self.components.each do |component|
         
     | 
| 
      
 21 
     | 
    
         
            +
                      component_array = component.split('::')
         
     | 
| 
      
 22 
     | 
    
         
            +
                      @modules = component_array[0..-2]
         
     | 
| 
      
 23 
     | 
    
         
            +
                      @file_name = component_array.last
         
     | 
| 
      
 24 
     | 
    
         
            +
                      @indent = 0
         
     | 
| 
      
 25 
     | 
    
         
            +
                      template template,
         
     | 
| 
      
 26 
     | 
    
         
            +
                               Rails.root.join('app', 'hyperstack', 'components',
         
     | 
| 
      
 27 
     | 
    
         
            +
                                         *@modules.map(&:downcase),
         
     | 
| 
      
 28 
     | 
    
         
            +
                                         "#{@file_name.underscore}.rb")
         
     | 
| 
      
 29 
     | 
    
         
            +
                    end
         
     | 
| 
      
 30 
     | 
    
         
            +
                    add_route
         
     | 
| 
      
 31 
     | 
    
         
            +
                    return unless added
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                    say '📦 Webpack integrated with Hyperstack.  '\
         
     | 
| 
      
 34 
     | 
    
         
            +
                        'Add javascript assets to app/javascript/packs/client_only.js and /client_and_server.js 📦', :green
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                  def clear_cache
         
     | 
| 
      
 39 
     | 
    
         
            +
                    run 'rm -rf tmp/cache' unless Dir.exist?(Rails.root.join('app', 'hyperstack'))
         
     | 
| 
      
 40 
     | 
    
         
            +
                  end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  def insure_hyperstack_loader_installed
         
     | 
| 
      
 43 
     | 
    
         
            +
                    hyperstack_loader = %r{//=\s+require\s+hyperstack-loader\s+}
         
     | 
| 
      
 44 
     | 
    
         
            +
                    application_js = Rails.root.join(
         
     | 
| 
      
 45 
     | 
    
         
            +
                      'app', 'assets', 'javascripts', 'application.js'
         
     | 
| 
      
 46 
     | 
    
         
            +
                    )
         
     | 
| 
      
 47 
     | 
    
         
            +
                    if File.exist? application_js
         
     | 
| 
      
 48 
     | 
    
         
            +
                      unless File.foreach(application_js).any? { |l| l =~ hyperstack_loader }
         
     | 
| 
      
 49 
     | 
    
         
            +
                        require_tree = %r{//=\s+require_tree\s+}
         
     | 
| 
      
 50 
     | 
    
         
            +
                        if File.foreach(application_js).any? { |l| l =~ require_tree }
         
     | 
| 
      
 51 
     | 
    
         
            +
                          inject_into_file 'app/assets/javascripts/application.js', verbose: false, before: require_tree do
         
     | 
| 
      
 52 
     | 
    
         
            +
                            "//= require hyperstack-loader\n"
         
     | 
| 
      
 53 
     | 
    
         
            +
                          end
         
     | 
| 
      
 54 
     | 
    
         
            +
                        else
         
     | 
| 
      
 55 
     | 
    
         
            +
                          warnings <<
         
     | 
| 
      
 56 
     | 
    
         
            +
                            " ***********************************************************\n"\
         
     | 
| 
      
 57 
     | 
    
         
            +
                            " * Could not add `//= require hyperstack-loader` directive *\n"\
         
     | 
| 
      
 58 
     | 
    
         
            +
                            " * to the app/assets/application.js file.                  *\n"\
         
     | 
| 
      
 59 
     | 
    
         
            +
                            " * Normally this directive is added just before the        *\n"\
         
     | 
| 
      
 60 
     | 
    
         
            +
                            " * `//= require_tree .` directive at the end of the file,  *\n"\
         
     | 
| 
      
 61 
     | 
    
         
            +
                            " * but no require_tree directive was found.  You need to   *\n"\
         
     | 
| 
      
 62 
     | 
    
         
            +
                            " * manually add `//= require hyperstack-loader` to the     *\n"\
         
     | 
| 
      
 63 
     | 
    
         
            +
                            " * app/assets/application.js file.                         *\n"\
         
     | 
| 
      
 64 
     | 
    
         
            +
                            " ***********************************************************\n"
         
     | 
| 
      
 65 
     | 
    
         
            +
                        end
         
     | 
| 
      
 66 
     | 
    
         
            +
                      end
         
     | 
| 
      
 67 
     | 
    
         
            +
                    else
         
     | 
| 
      
 68 
     | 
    
         
            +
                      create_file application_js, "//= require hyperstack-loader\n"
         
     | 
| 
      
 69 
     | 
    
         
            +
                      warnings <<
         
     | 
| 
      
 70 
     | 
    
         
            +
                        " ***********************************************************\n"\
         
     | 
| 
      
 71 
     | 
    
         
            +
                        " * Could not find the  app/assets/application.js file.     *\n"\
         
     | 
| 
      
 72 
     | 
    
         
            +
                        " * We created one for you, and added the                   *\n"\
         
     | 
| 
      
 73 
     | 
    
         
            +
                        " * `<%= javascript_include_tag 'application' %>` to your   *\n"\
         
     | 
| 
      
 74 
     | 
    
         
            +
                        " * `html.erb` files immediately after any                  *\n"\
         
     | 
| 
      
 75 
     | 
    
         
            +
                        " * `<%= javascript_pack 'application' %>` tags we found.   *\n"\
         
     | 
| 
      
 76 
     | 
    
         
            +
                        " ***********************************************************\n"
         
     | 
| 
      
 77 
     | 
    
         
            +
                      application_pack_tag =
         
     | 
| 
      
 78 
     | 
    
         
            +
                        /\s*\<\%\=\s+javascript_pack_tag\s+(\'|\")application(\'|\").*\%\>.*$/
         
     | 
| 
      
 79 
     | 
    
         
            +
                      Dir.glob(Rails.root.join('app', 'views', '**', '*.erb')) do |file|
         
     | 
| 
      
 80 
     | 
    
         
            +
                        if File.foreach(file).any? { |l| l =~ application_pack_tag }
         
     | 
| 
      
 81 
     | 
    
         
            +
                          inject_into_file file, verbose: false, after: application_pack_tag do
         
     | 
| 
      
 82 
     | 
    
         
            +
                            "\n    <%= javascript_include_tag 'application' %>"
         
     | 
| 
      
 83 
     | 
    
         
            +
                          end
         
     | 
| 
      
 84 
     | 
    
         
            +
                        end
         
     | 
| 
      
 85 
     | 
    
         
            +
                      end
         
     | 
| 
      
 86 
     | 
    
         
            +
                    end
         
     | 
| 
      
 87 
     | 
    
         
            +
                  end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                  def check_javascript_link_directory
         
     | 
| 
      
 90 
     | 
    
         
            +
                    manifest_js_file = Rails.root.join("app", "assets", "config", "manifest.js")
         
     | 
| 
      
 91 
     | 
    
         
            +
                    return unless File.exist? manifest_js_file
         
     | 
| 
      
 92 
     | 
    
         
            +
                    return unless File.readlines(manifest_js_file).grep(/javascripts \.js/).empty?
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                    append_file manifest_js_file, "//= link_directory ../javascripts .js\n", verbose: false
         
     | 
| 
      
 95 
     | 
    
         
            +
                  end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                  def insure_base_component_class_exists
         
     | 
| 
      
 98 
     | 
    
         
            +
                    @component_base_class = options['base-class'] || Hyperstack.component_base_class
         
     | 
| 
      
 99 
     | 
    
         
            +
                    file_name = Rails.root.join(
         
     | 
| 
      
 100 
     | 
    
         
            +
                      'app', 'hyperstack', 'components', "#{@component_base_class.underscore}.rb"
         
     | 
| 
      
 101 
     | 
    
         
            +
                    )
         
     | 
| 
      
 102 
     | 
    
         
            +
                    template 'hyper_component_template.rb', file_name unless File.exist? file_name
         
     | 
| 
      
 103 
     | 
    
         
            +
                  end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
       9 
105 
     | 
    
         
             
                  def add_to_manifest(manifest, &block)
         
     | 
| 
       10 
     | 
    
         
            -
                    if File. 
     | 
| 
       11 
     | 
    
         
            -
                      append_file "app/javascript/packs/#{manifest}", &block
         
     | 
| 
      
 106 
     | 
    
         
            +
                    if File.exist? "app/javascript/packs/#{manifest}"
         
     | 
| 
      
 107 
     | 
    
         
            +
                      append_file "app/javascript/packs/#{manifest}", verbose: false, &block
         
     | 
| 
       12 
108 
     | 
    
         
             
                    else
         
     | 
| 
       13 
     | 
    
         
            -
                      create_file "app/javascript/packs/#{manifest}", &block
         
     | 
| 
      
 109 
     | 
    
         
            +
                      create_file "app/javascript/packs/#{manifest}", verbose: false, &block
         
     | 
| 
      
 110 
     | 
    
         
            +
                    end
         
     | 
| 
      
 111 
     | 
    
         
            +
                  end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                  def add_route
         
     | 
| 
      
 114 
     | 
    
         
            +
                    return unless options['add-route']
         
     | 
| 
      
 115 
     | 
    
         
            +
                    if self.components.count > 1
         
     | 
| 
      
 116 
     | 
    
         
            +
                      warnings <<
         
     | 
| 
      
 117 
     | 
    
         
            +
                        " ***********************************************************\n"\
         
     | 
| 
      
 118 
     | 
    
         
            +
                        " * The add-route option ignored because more than one      *\n"\
         
     | 
| 
      
 119 
     | 
    
         
            +
                        " * component is being generated.                           *\n"\
         
     | 
| 
      
 120 
     | 
    
         
            +
                        " ***********************************************************\n"
         
     | 
| 
      
 121 
     | 
    
         
            +
                      return
         
     | 
| 
      
 122 
     | 
    
         
            +
                    end
         
     | 
| 
      
 123 
     | 
    
         
            +
                    action_name = (@modules+[@file_name.underscore]).join('__')
         
     | 
| 
      
 124 
     | 
    
         
            +
                    path = options['add-route'] == 'add-route' ? '/(*others)' : options['add-route']
         
     | 
| 
      
 125 
     | 
    
         
            +
                    routing_code = "get '#{path}', to: 'hyperstack##{action_name}'\n"
         
     | 
| 
      
 126 
     | 
    
         
            +
                    log :route, routing_code
         
     | 
| 
      
 127 
     | 
    
         
            +
                    [/mount\s+Hyperstack::Engine[^\n]+\n/m, /\.routes\.draw do\s*\n/m].each do |sentinel|
         
     | 
| 
      
 128 
     | 
    
         
            +
                      in_root do
         
     | 
| 
      
 129 
     | 
    
         
            +
                        inject_into_file 'config/routes.rb', routing_code.indent(2), after: sentinel, verbose: false, force: false
         
     | 
| 
      
 130 
     | 
    
         
            +
                      end
         
     | 
| 
       14 
131 
     | 
    
         
             
                    end
         
     | 
| 
       15 
132 
     | 
    
         
             
                  end
         
     | 
| 
       16 
133 
     | 
    
         | 
| 
         @@ -18,6 +135,154 @@ module Rails 
     | 
|
| 
       18 
135 
     | 
    
         
             
                    return if system("yarn add #{package}#{'@' + version if version}")
         
     | 
| 
       19 
136 
     | 
    
         
             
                    raise Thor::Error.new("yarn failed to install #{package} with version #{version}")
         
     | 
| 
       20 
137 
     | 
    
         
             
                  end
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                  def install_webpack
         
     | 
| 
      
 140 
     | 
    
         
            +
                    insure_yarn_loaded
         
     | 
| 
      
 141 
     | 
    
         
            +
                    add_webpacker_manifests
         
     | 
| 
      
 142 
     | 
    
         
            +
                    add_webpacks
         
     | 
| 
      
 143 
     | 
    
         
            +
                    cancel_react_source_import
         
     | 
| 
      
 144 
     | 
    
         
            +
                    install_webpacker
         
     | 
| 
      
 145 
     | 
    
         
            +
                  end
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                  def inject_into_initializer(s)
         
     | 
| 
      
 148 
     | 
    
         
            +
                    file_name = Rails.root.join('config', 'initializers', 'hyperstack.rb')
         
     | 
| 
      
 149 
     | 
    
         
            +
                    if File.exist?(file_name)
         
     | 
| 
      
 150 
     | 
    
         
            +
                      prepend_to_file(file_name, verbose: false) { "#{s}\n" }
         
     | 
| 
      
 151 
     | 
    
         
            +
                    else
         
     | 
| 
      
 152 
     | 
    
         
            +
                      create_file file_name, <<-RUBY
         
     | 
| 
      
 153 
     | 
    
         
            +
            #{s}
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
            # server_side_auto_require will patch the ActiveSupport Dependencies module
         
     | 
| 
      
 156 
     | 
    
         
            +
            # so that you can define classes and modules with files in both the
         
     | 
| 
      
 157 
     | 
    
         
            +
            # app/hyperstack/xxx and app/xxx directories.  For example you can split
         
     | 
| 
      
 158 
     | 
    
         
            +
            # a Todo model into server and client related definitions and place this
         
     | 
| 
      
 159 
     | 
    
         
            +
            # in `app/hyperstack/models/todo.rb`, and place any server only definitions in
         
     | 
| 
      
 160 
     | 
    
         
            +
            # `app/models/todo.rb`.
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
            require "hyperstack/server_side_auto_require.rb"
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
            # set the component base class
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
            Hyperstack.component_base_class = 'HyperComponent' # i.e. 'ApplicationComponent'
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
            # prerendering is default :off, you should wait until your
         
     | 
| 
      
 169 
     | 
    
         
            +
            # application is relatively well debugged before turning on.
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
            Hyperstack.prerendering = :off # or :on
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
            # add this line if you need jQuery AND ARE NOT USING WEBPACK
         
     | 
| 
      
 174 
     | 
    
         
            +
            # Hyperstack.import 'hyperstack/component/jquery', client_only: true
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
            # change definition of on_error to control how errors such as validation
         
     | 
| 
      
 177 
     | 
    
         
            +
            # exceptions are reported on the server
         
     | 
| 
      
 178 
     | 
    
         
            +
            module Hyperstack
         
     | 
| 
      
 179 
     | 
    
         
            +
              def self.on_error(operation, err, params, formatted_error_message)
         
     | 
| 
      
 180 
     | 
    
         
            +
                ::Rails.logger.debug(
         
     | 
| 
      
 181 
     | 
    
         
            +
                  "\#{formatted_error_message}\\n\\n" +
         
     | 
| 
      
 182 
     | 
    
         
            +
                  Pastel.new.red(
         
     | 
| 
      
 183 
     | 
    
         
            +
                    'To further investigate you may want to add a debugging '\\
         
     | 
| 
      
 184 
     | 
    
         
            +
                    'breakpoint to the on_error method in config/initializers/hyperstack.rb'
         
     | 
| 
      
 185 
     | 
    
         
            +
                  )
         
     | 
| 
      
 186 
     | 
    
         
            +
                )
         
     | 
| 
      
 187 
     | 
    
         
            +
              end
         
     | 
| 
      
 188 
     | 
    
         
            +
            end if Rails.env.development?
         
     | 
| 
      
 189 
     | 
    
         
            +
                      RUBY
         
     | 
| 
      
 190 
     | 
    
         
            +
                    end
         
     | 
| 
      
 191 
     | 
    
         
            +
                    # whenever we modify the initializer its best to empty the cache, BUT
         
     | 
| 
      
 192 
     | 
    
         
            +
                    # we only need to it once per generator execution
         
     | 
| 
      
 193 
     | 
    
         
            +
                    run 'rm -rf tmp/cache' unless @cache_emptied_already
         
     | 
| 
      
 194 
     | 
    
         
            +
                    @cache_emptied_already = true
         
     | 
| 
      
 195 
     | 
    
         
            +
                  end
         
     | 
| 
      
 196 
     | 
    
         
            +
             
     | 
| 
      
 197 
     | 
    
         
            +
                  private
         
     | 
| 
      
 198 
     | 
    
         
            +
             
     | 
| 
      
 199 
     | 
    
         
            +
                  def webpack_check
         
     | 
| 
      
 200 
     | 
    
         
            +
                    return unless defined? ::Webpacker
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
      
 202 
     | 
    
         
            +
                    client_and_server = Rails.root.join("app", "javascript", "packs", "client_only.js")
         
     | 
| 
      
 203 
     | 
    
         
            +
                    return if File.exist? client_and_server
         
     | 
| 
      
 204 
     | 
    
         
            +
             
     | 
| 
      
 205 
     | 
    
         
            +
                    # Dir.chdir(Rails.root.join.to_s) { run 'bundle exec rails hyperstack:install:webpack' }
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
      
 207 
     | 
    
         
            +
                    # say "warning: you are running webpacker, but the hyperstack webpack files have not been created.\n"\
         
     | 
| 
      
 208 
     | 
    
         
            +
                    #     "         Suggest you run bundle exec rails hyperstack:install:webpack soon.\n"\
         
     | 
| 
      
 209 
     | 
    
         
            +
                    #     "         Or to avoid this warning create an empty file named app/javascript/packs/client_only.js",
         
     | 
| 
      
 210 
     | 
    
         
            +
                    #     :red
         
     | 
| 
      
 211 
     | 
    
         
            +
                    install_webpack
         
     | 
| 
      
 212 
     | 
    
         
            +
                    true
         
     | 
| 
      
 213 
     | 
    
         
            +
                  end
         
     | 
| 
      
 214 
     | 
    
         
            +
             
     | 
| 
      
 215 
     | 
    
         
            +
                  def insure_yarn_loaded
         
     | 
| 
      
 216 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 217 
     | 
    
         
            +
                      yarn_version = `yarn --version`
         
     | 
| 
      
 218 
     | 
    
         
            +
                      raise Errno::ENOENT if yarn_version.blank?
         
     | 
| 
      
 219 
     | 
    
         
            +
                    rescue Errno::ENOENT
         
     | 
| 
      
 220 
     | 
    
         
            +
                      raise Thor::Error.new("please insure nodejs is installed and the yarn command is available if using webpacker")
         
     | 
| 
      
 221 
     | 
    
         
            +
                    end
         
     | 
| 
      
 222 
     | 
    
         
            +
                  end
         
     | 
| 
      
 223 
     | 
    
         
            +
             
     | 
| 
      
 224 
     | 
    
         
            +
                  def add_webpacker_manifests
         
     | 
| 
      
 225 
     | 
    
         
            +
                    create_file 'app/javascript/packs/client_and_server.js', <<-JAVASCRIPT
         
     | 
| 
      
 226 
     | 
    
         
            +
            //app/javascript/packs/client_and_server.js
         
     | 
| 
      
 227 
     | 
    
         
            +
            // these packages will be loaded both during prerendering and on the client
         
     | 
| 
      
 228 
     | 
    
         
            +
            React = require('react');                         // react-js library
         
     | 
| 
      
 229 
     | 
    
         
            +
            createReactClass = require('create-react-class'); // backwards compatibility with ECMA5
         
     | 
| 
      
 230 
     | 
    
         
            +
            History = require('history');                     // react-router history library
         
     | 
| 
      
 231 
     | 
    
         
            +
            ReactRouter = require('react-router');            // react-router js library
         
     | 
| 
      
 232 
     | 
    
         
            +
            ReactRouterDOM = require('react-router-dom');     // react-router DOM interface
         
     | 
| 
      
 233 
     | 
    
         
            +
            ReactRailsUJS = require('react_ujs');             // interface to react-rails
         
     | 
| 
      
 234 
     | 
    
         
            +
            // to add additional NPM packages run `yarn add package-name@version`
         
     | 
| 
      
 235 
     | 
    
         
            +
            // then add the require here.
         
     | 
| 
      
 236 
     | 
    
         
            +
                    JAVASCRIPT
         
     | 
| 
      
 237 
     | 
    
         
            +
                    create_file 'app/javascript/packs/client_only.js', <<-JAVASCRIPT
         
     | 
| 
      
 238 
     | 
    
         
            +
            //app/javascript/packs/client_only.js
         
     | 
| 
      
 239 
     | 
    
         
            +
            // add any requires for packages that will run client side only
         
     | 
| 
      
 240 
     | 
    
         
            +
            ReactDOM = require('react-dom');               // react-js client side code
         
     | 
| 
      
 241 
     | 
    
         
            +
            jQuery = require('jquery');                    // remove if you don't need jQuery
         
     | 
| 
      
 242 
     | 
    
         
            +
            // to add additional NPM packages call run yarn add package-name@version
         
     | 
| 
      
 243 
     | 
    
         
            +
            // then add the require here.
         
     | 
| 
      
 244 
     | 
    
         
            +
                    JAVASCRIPT
         
     | 
| 
      
 245 
     | 
    
         
            +
                    append_file 'config/initializers/assets.rb', verbose: false do
         
     | 
| 
      
 246 
     | 
    
         
            +
                      <<-RUBY
         
     | 
| 
      
 247 
     | 
    
         
            +
              Rails.application.config.assets.paths << Rails.root.join('public', 'packs', 'js').to_s
         
     | 
| 
      
 248 
     | 
    
         
            +
                      RUBY
         
     | 
| 
      
 249 
     | 
    
         
            +
                    end
         
     | 
| 
      
 250 
     | 
    
         
            +
                    inject_into_file 'config/environments/test.rb', verbose: false, before: /^end/ do
         
     | 
| 
      
 251 
     | 
    
         
            +
                      <<-RUBY
         
     | 
| 
      
 252 
     | 
    
         
            +
             
     | 
| 
      
 253 
     | 
    
         
            +
              # added by hyperstack installer
         
     | 
| 
      
 254 
     | 
    
         
            +
              config.assets.paths << Rails.root.join('public', 'packs-test', 'js').to_s
         
     | 
| 
      
 255 
     | 
    
         
            +
                      RUBY
         
     | 
| 
      
 256 
     | 
    
         
            +
                    end
         
     | 
| 
      
 257 
     | 
    
         
            +
                  end
         
     | 
| 
      
 258 
     | 
    
         
            +
             
     | 
| 
      
 259 
     | 
    
         
            +
                  def add_webpacks
         
     | 
| 
      
 260 
     | 
    
         
            +
                    yarn 'react', '16'
         
     | 
| 
      
 261 
     | 
    
         
            +
                    yarn 'react-dom', '16'
         
     | 
| 
      
 262 
     | 
    
         
            +
                    yarn 'react-router', '^5.0.0'
         
     | 
| 
      
 263 
     | 
    
         
            +
                    yarn 'react-router-dom', '^5.0.0'
         
     | 
| 
      
 264 
     | 
    
         
            +
                    yarn 'react_ujs', '^2.5.0'
         
     | 
| 
      
 265 
     | 
    
         
            +
                    yarn 'jquery', '^3.4.1'
         
     | 
| 
      
 266 
     | 
    
         
            +
                    yarn 'create-react-class'
         
     | 
| 
      
 267 
     | 
    
         
            +
                  end
         
     | 
| 
      
 268 
     | 
    
         
            +
             
     | 
| 
      
 269 
     | 
    
         
            +
                  def cancel_react_source_import
         
     | 
| 
      
 270 
     | 
    
         
            +
                    inject_into_initializer(
         
     | 
| 
      
 271 
     | 
    
         
            +
                      "# Hyperstack.import 'react/react-source-browser' "\
         
     | 
| 
      
 272 
     | 
    
         
            +
                      "# uncomment this line if you want hyperstack to use its copy of react"
         
     | 
| 
      
 273 
     | 
    
         
            +
                    )
         
     | 
| 
      
 274 
     | 
    
         
            +
                  end
         
     | 
| 
      
 275 
     | 
    
         
            +
             
     | 
| 
      
 276 
     | 
    
         
            +
                  def install_webpacker
         
     | 
| 
      
 277 
     | 
    
         
            +
                    return if defined?(::Webpacker)
         
     | 
| 
      
 278 
     | 
    
         
            +
             
     | 
| 
      
 279 
     | 
    
         
            +
                    gem "webpacker"
         
     | 
| 
      
 280 
     | 
    
         
            +
                    Bundler.with_unbundled_env do
         
     | 
| 
      
 281 
     | 
    
         
            +
                      run "bundle install"
         
     | 
| 
      
 282 
     | 
    
         
            +
                    end
         
     | 
| 
      
 283 
     | 
    
         
            +
                    `spring stop`
         
     | 
| 
      
 284 
     | 
    
         
            +
                    Dir.chdir(Rails.root.join.to_s) { run 'bundle exec rails webpacker:install' }
         
     | 
| 
      
 285 
     | 
    
         
            +
                  end
         
     | 
| 
       21 
286 
     | 
    
         
             
                end
         
     | 
| 
       22 
287 
     | 
    
         
             
              end
         
     | 
| 
       23 
288 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,229 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative '../hyperstack/install_generator_base'
         
     | 
| 
      
 2 
     | 
    
         
            +
            module Install
         
     | 
| 
      
 3 
     | 
    
         
            +
              class HyperstackGenerator < Rails::Generators::Base
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                class_option 'skip-webpack', type: :boolean
         
     | 
| 
      
 6 
     | 
    
         
            +
                class_option 'skip-hot-reloader', type: :boolean
         
     | 
| 
      
 7 
     | 
    
         
            +
                class_option 'add-framework', type: :string
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def insure_yarn_loaded
         
     | 
| 
      
 10 
     | 
    
         
            +
                  return if skip_webpack?
         
     | 
| 
      
 11 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 12 
     | 
    
         
            +
                    yarn_version = `yarn --version`
         
     | 
| 
      
 13 
     | 
    
         
            +
                    raise Errno::ENOENT if yarn_version.blank?
         
     | 
| 
      
 14 
     | 
    
         
            +
                  rescue Errno::ENOENT
         
     | 
| 
      
 15 
     | 
    
         
            +
                    raise Thor::Error.new("please insure the yarn command is available if using webpacker")
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                APPJS = 'app/assets/javascripts/application.js'
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def inject_hyperstack_loader_js
         
     | 
| 
      
 22 
     | 
    
         
            +
                  unless File.foreach(APPJS).any?{ |l| l['//= require hyperstack-loader'] }
         
     | 
| 
      
 23 
     | 
    
         
            +
                    inject_into_file 'app/assets/javascripts/application.js', before: %r{//= require_tree .} do
         
     | 
| 
      
 24 
     | 
    
         
            +
                      "//= require hyperstack-loader\n"
         
     | 
| 
      
 25 
     | 
    
         
            +
                    end
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                def create_hyperstack_files_and_directories
         
     | 
| 
      
 30 
     | 
    
         
            +
                  create_file 'app/hyperstack/components/hyper_component.rb', <<-RUBY
         
     | 
| 
      
 31 
     | 
    
         
            +
              class HyperComponent
         
     | 
| 
      
 32 
     | 
    
         
            +
                include Hyperstack::Component
         
     | 
| 
      
 33 
     | 
    
         
            +
                include Hyperstack::State::Observable
         
     | 
| 
      
 34 
     | 
    
         
            +
                param_accessor_style :accessors
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
                    RUBY
         
     | 
| 
      
 37 
     | 
    
         
            +
                  create_file 'app/hyperstack/operations/.keep', ''
         
     | 
| 
      
 38 
     | 
    
         
            +
                  create_file 'app/hyperstack/stores/.keep', ''
         
     | 
| 
      
 39 
     | 
    
         
            +
                  create_file 'app/hyperstack/models/.keep', ''
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                def move_and_update_application_record
         
     | 
| 
      
 43 
     | 
    
         
            +
                  unless File.exists? 'app/hyperstack/models/application_record.rb'
         
     | 
| 
      
 44 
     | 
    
         
            +
                    `mv app/models/application_record.rb app/hyperstack/models/application_record.rb`
         
     | 
| 
      
 45 
     | 
    
         
            +
                    create_file 'app/models/application_record.rb', <<-RUBY
         
     | 
| 
      
 46 
     | 
    
         
            +
            # app/models/application_record.rb
         
     | 
| 
      
 47 
     | 
    
         
            +
            # the presence of this file prevents rails migrations from recreating application_record.rb see https://github.com/rails/rails/issues/29407
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            require 'models/application_record.rb'
         
     | 
| 
      
 50 
     | 
    
         
            +
                    RUBY
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
                end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                def create_policies_directory
         
     | 
| 
      
 55 
     | 
    
         
            +
                  create_file 'app/policies/application_policy.rb', <<-RUBY
         
     | 
| 
      
 56 
     | 
    
         
            +
            # app/policies/application_policy.rb
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            # Policies regulate access to your public models
         
     | 
| 
      
 59 
     | 
    
         
            +
            # The following policy will open up full access (but only in development)
         
     | 
| 
      
 60 
     | 
    
         
            +
            # The policy system is very flexible and powerful.  See the documentation
         
     | 
| 
      
 61 
     | 
    
         
            +
            # for complete details.
         
     | 
| 
      
 62 
     | 
    
         
            +
            class Hyperstack::ApplicationPolicy
         
     | 
| 
      
 63 
     | 
    
         
            +
              # Allow any session to connect:
         
     | 
| 
      
 64 
     | 
    
         
            +
              always_allow_connection
         
     | 
| 
      
 65 
     | 
    
         
            +
              # Send all attributes from all public models
         
     | 
| 
      
 66 
     | 
    
         
            +
              regulate_all_broadcasts { |policy| policy.send_all }
         
     | 
| 
      
 67 
     | 
    
         
            +
              # Allow all changes to models
         
     | 
| 
      
 68 
     | 
    
         
            +
              allow_change(to: :all, on: [:create, :update, :destroy]) { true }
         
     | 
| 
      
 69 
     | 
    
         
            +
              # allow remote access to all scopes - i.e. you can count or get a list of ids
         
     | 
| 
      
 70 
     | 
    
         
            +
              # for any scope or relationship
         
     | 
| 
      
 71 
     | 
    
         
            +
              ApplicationRecord.regulate_scope :all
         
     | 
| 
      
 72 
     | 
    
         
            +
            end unless Rails.env.production?
         
     | 
| 
      
 73 
     | 
    
         
            +
                  RUBY
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                def add_router
         
     | 
| 
      
 77 
     | 
    
         
            +
                  generate "hyper:router", "App"
         
     | 
| 
      
 78 
     | 
    
         
            +
                  route "get '/(*other)', to: 'hyperstack#app'"
         
     | 
| 
      
 79 
     | 
    
         
            +
                end
         
     | 
| 
      
 80 
     | 
    
         
            +
            if false
         
     | 
| 
      
 81 
     | 
    
         
            +
                def add_webpackin
         
     | 
| 
      
 82 
     | 
    
         
            +
                  run 'yarn add react'
         
     | 
| 
      
 83 
     | 
    
         
            +
                  run 'yarn add react-dom'
         
     | 
| 
      
 84 
     | 
    
         
            +
                  run 'yarn add react-router'
         
     | 
| 
      
 85 
     | 
    
         
            +
                  create_file 'app/javascript/packs/hyperstack.js', <<-CODE
         
     | 
| 
      
 86 
     | 
    
         
            +
                    // Import all the modules
         
     | 
| 
      
 87 
     | 
    
         
            +
                    import React from 'react';
         
     | 
| 
      
 88 
     | 
    
         
            +
                    import ReactDOM from 'react-dom';
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                    // for opal/hyperstack modules to find React and others they must explicitly be saved
         
     | 
| 
      
 91 
     | 
    
         
            +
                    // to the global space, otherwise webpack will encapsulate them locally here
         
     | 
| 
      
 92 
     | 
    
         
            +
                    global.React = React;
         
     | 
| 
      
 93 
     | 
    
         
            +
                    global.ReactDOM = ReactDOM;
         
     | 
| 
      
 94 
     | 
    
         
            +
                    CODE
         
     | 
| 
      
 95 
     | 
    
         
            +
                  inject_into_file 'app/views/layouts/application.html.erb', before: %r{<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>} do
         
     | 
| 
      
 96 
     | 
    
         
            +
            <<-CODE
         
     | 
| 
      
 97 
     | 
    
         
            +
            <%= javascript_pack_tag 'hyperstack' %>
         
     | 
| 
      
 98 
     | 
    
         
            +
            CODE
         
     | 
| 
      
 99 
     | 
    
         
            +
                  end
         
     | 
| 
      
 100 
     | 
    
         
            +
                  gem 'webpacker'
         
     | 
| 
      
 101 
     | 
    
         
            +
                end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
            else
         
     | 
| 
      
 105 
     | 
    
         
            +
                def add_webpacker_manifests
         
     | 
| 
      
 106 
     | 
    
         
            +
                  return if skip_webpack?
         
     | 
| 
      
 107 
     | 
    
         
            +
                  create_file 'app/javascript/packs/client_and_server.js', <<-JAVASCRIPT
         
     | 
| 
      
 108 
     | 
    
         
            +
            //app/javascript/packs/client_and_server.js
         
     | 
| 
      
 109 
     | 
    
         
            +
            // these packages will be loaded both during prerendering and on the client
         
     | 
| 
      
 110 
     | 
    
         
            +
            React = require('react');                      // react-js library
         
     | 
| 
      
 111 
     | 
    
         
            +
            History = require('history');                  // react-router history library
         
     | 
| 
      
 112 
     | 
    
         
            +
            ReactRouter = require('react-router');         // react-router js library
         
     | 
| 
      
 113 
     | 
    
         
            +
            ReactRouterDOM = require('react-router-dom');  // react-router DOM interface
         
     | 
| 
      
 114 
     | 
    
         
            +
            ReactRailsUJS = require('react_ujs');          // interface to react-rails
         
     | 
| 
      
 115 
     | 
    
         
            +
            // to add additional NPM packages call run yarn add package-name@version
         
     | 
| 
      
 116 
     | 
    
         
            +
            // then add the require here.
         
     | 
| 
      
 117 
     | 
    
         
            +
                  JAVASCRIPT
         
     | 
| 
      
 118 
     | 
    
         
            +
                  create_file 'app/javascript/packs/client_only.js', <<-JAVASCRIPT
         
     | 
| 
      
 119 
     | 
    
         
            +
            //app/javascript/packs/client_only.js
         
     | 
| 
      
 120 
     | 
    
         
            +
            // add any requires for packages that will run client side only
         
     | 
| 
      
 121 
     | 
    
         
            +
            ReactDOM = require('react-dom');               // react-js client side code
         
     | 
| 
      
 122 
     | 
    
         
            +
            jQuery = require('jquery');
         
     | 
| 
      
 123 
     | 
    
         
            +
            // to add additional NPM packages call run yarn add package-name@version
         
     | 
| 
      
 124 
     | 
    
         
            +
            // then add the require here.
         
     | 
| 
      
 125 
     | 
    
         
            +
                  JAVASCRIPT
         
     | 
| 
      
 126 
     | 
    
         
            +
                  append_file 'config/initializers/assets.rb' do
         
     | 
| 
      
 127 
     | 
    
         
            +
                    <<-RUBY
         
     | 
| 
      
 128 
     | 
    
         
            +
            Rails.application.config.assets.paths << Rails.root.join('public', 'packs', 'js').to_s
         
     | 
| 
      
 129 
     | 
    
         
            +
                    RUBY
         
     | 
| 
      
 130 
     | 
    
         
            +
                  end
         
     | 
| 
      
 131 
     | 
    
         
            +
                  inject_into_file 'config/environments/test.rb', before: /^end/ do
         
     | 
| 
      
 132 
     | 
    
         
            +
                    <<-RUBY
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
              # added by hyperstack installer
         
     | 
| 
      
 135 
     | 
    
         
            +
              config.assets.paths << Rails.root.join('public', 'packs-test', 'js').to_s
         
     | 
| 
      
 136 
     | 
    
         
            +
                    RUBY
         
     | 
| 
      
 137 
     | 
    
         
            +
                  end
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                end
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                def add_webpacks
         
     | 
| 
      
 142 
     | 
    
         
            +
                  return if skip_webpack?
         
     | 
| 
      
 143 
     | 
    
         
            +
                  yarn 'react', '16'
         
     | 
| 
      
 144 
     | 
    
         
            +
                  yarn 'react-dom', '16'
         
     | 
| 
      
 145 
     | 
    
         
            +
                  yarn 'react-router', '^5.0.0'
         
     | 
| 
      
 146 
     | 
    
         
            +
                  yarn 'react-router-dom', '^5.0.0'
         
     | 
| 
      
 147 
     | 
    
         
            +
                  # yarn 'history'#, '4.2' this will be brought in by react-router
         
     | 
| 
      
 148 
     | 
    
         
            +
                  yarn 'react_ujs', '^2.5.0'
         
     | 
| 
      
 149 
     | 
    
         
            +
                  yarn 'jquery', '^3.4.1'
         
     | 
| 
      
 150 
     | 
    
         
            +
                end
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
                def add_webpacker_gem
         
     | 
| 
      
 153 
     | 
    
         
            +
                  gem 'webpacker'
         
     | 
| 
      
 154 
     | 
    
         
            +
                end
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
                def add_framework
         
     | 
| 
      
 157 
     | 
    
         
            +
                  framework = options['add-framework']
         
     | 
| 
      
 158 
     | 
    
         
            +
                  return unless framework
         
     | 
| 
      
 159 
     | 
    
         
            +
                  generate "hyperstack:install_#{framework}", "--no-build"
         
     | 
| 
      
 160 
     | 
    
         
            +
                end
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
                # def build_webpack
         
     | 
| 
      
 163 
     | 
    
         
            +
                #   system('bin/webpack')
         
     | 
| 
      
 164 
     | 
    
         
            +
                # end
         
     | 
| 
      
 165 
     | 
    
         
            +
            end
         
     | 
| 
      
 166 
     | 
    
         
            +
                # all generators should be run before the initializer due to the opal-rails opal-jquery
         
     | 
| 
      
 167 
     | 
    
         
            +
                # conflict
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
                def create_initializer
         
     | 
| 
      
 170 
     | 
    
         
            +
                  create_file 'config/initializers/hyperstack.rb', <<-CODE
         
     | 
| 
      
 171 
     | 
    
         
            +
                  # config/initializers/hyperstack.rb
         
     | 
| 
      
 172 
     | 
    
         
            +
                  # If you are not using ActionCable, see http://hyperstack.orgs/docs/models/configuring-transport/
         
     | 
| 
      
 173 
     | 
    
         
            +
                  Hyperstack.configuration do |config|
         
     | 
| 
      
 174 
     | 
    
         
            +
                    config.transport = :action_cable
         
     | 
| 
      
 175 
     | 
    
         
            +
                    config.prerendering = :off # or :on
         
     | 
| 
      
 176 
     | 
    
         
            +
                    config.cancel_import 'react/react-source-browser' # bring your own React and ReactRouter via Yarn/Webpacker
         
     | 
| 
      
 177 
     | 
    
         
            +
                    config.import 'hyperstack/component/jquery', client_only: true # remove this line if you don't need jquery
         
     | 
| 
      
 178 
     | 
    
         
            +
                    config.import 'hyperstack/hotloader', client_only: true if Rails.env.development?
         
     | 
| 
      
 179 
     | 
    
         
            +
                  end
         
     | 
| 
      
 180 
     | 
    
         
            +
             
     | 
| 
      
 181 
     | 
    
         
            +
                  # useful for debugging
         
     | 
| 
      
 182 
     | 
    
         
            +
                  module Hyperstack
         
     | 
| 
      
 183 
     | 
    
         
            +
                    def self.on_error(operation, err, params, formatted_error_message)
         
     | 
| 
      
 184 
     | 
    
         
            +
                      ::Rails.logger.debug(
         
     | 
| 
      
 185 
     | 
    
         
            +
                        "\#{formatted_error_message}\\n\\n" +
         
     | 
| 
      
 186 
     | 
    
         
            +
                        Pastel.new.red(
         
     | 
| 
      
 187 
     | 
    
         
            +
                          'To further investigate you may want to add a debugging '\\
         
     | 
| 
      
 188 
     | 
    
         
            +
                          'breakpoint to the on_error method in config/initializers/hyperstack.rb'
         
     | 
| 
      
 189 
     | 
    
         
            +
                        )
         
     | 
| 
      
 190 
     | 
    
         
            +
                      )
         
     | 
| 
      
 191 
     | 
    
         
            +
                    end
         
     | 
| 
      
 192 
     | 
    
         
            +
                  end if Rails.env.development?
         
     | 
| 
      
 193 
     | 
    
         
            +
                  CODE
         
     | 
| 
      
 194 
     | 
    
         
            +
                end
         
     | 
| 
      
 195 
     | 
    
         
            +
             
     | 
| 
      
 196 
     | 
    
         
            +
                def inject_engine_to_routes
         
     | 
| 
      
 197 
     | 
    
         
            +
                  # this needs to be the first route, thus it must be the last method executed
         
     | 
| 
      
 198 
     | 
    
         
            +
                  route 'mount Hyperstack::Engine => \'/hyperstack\''  # this route should be first in the routes file so it always matches
         
     | 
| 
      
 199 
     | 
    
         
            +
                end
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
      
 201 
     | 
    
         
            +
                def add_opal_hot_reloader
         
     | 
| 
      
 202 
     | 
    
         
            +
                  return if options['skip-hot-reloader']
         
     | 
| 
      
 203 
     | 
    
         
            +
                  create_file 'Procfile', <<-TEXT
         
     | 
| 
      
 204 
     | 
    
         
            +
            web:        bundle exec rails s -b 0.0.0.0
         
     | 
| 
      
 205 
     | 
    
         
            +
            hot-loader: bundle exec hyperstack-hotloader -p 25222 -d app/hyperstack
         
     | 
| 
      
 206 
     | 
    
         
            +
                  TEXT
         
     | 
| 
      
 207 
     | 
    
         
            +
                  gem_group :development do
         
     | 
| 
      
 208 
     | 
    
         
            +
                    gem 'foreman'
         
     | 
| 
      
 209 
     | 
    
         
            +
                  end
         
     | 
| 
      
 210 
     | 
    
         
            +
                end
         
     | 
| 
      
 211 
     | 
    
         
            +
             
     | 
| 
      
 212 
     | 
    
         
            +
                def add_gems
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
      
 214 
     | 
    
         
            +
                end
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
      
 216 
     | 
    
         
            +
                def install
         
     | 
| 
      
 217 
     | 
    
         
            +
                  Bundler.with_unbundled_env do
         
     | 
| 
      
 218 
     | 
    
         
            +
                    run "bundle install"
         
     | 
| 
      
 219 
     | 
    
         
            +
                  end
         
     | 
| 
      
 220 
     | 
    
         
            +
                  run 'bundle exec rails webpacker:install'
         
     | 
| 
      
 221 
     | 
    
         
            +
                end
         
     | 
| 
      
 222 
     | 
    
         
            +
             
     | 
| 
      
 223 
     | 
    
         
            +
                private
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
                def skip_webpack?
         
     | 
| 
      
 226 
     | 
    
         
            +
                  options['skip-webpack'] #|| !defined?(Webpacker)
         
     | 
| 
      
 227 
     | 
    
         
            +
                end
         
     | 
| 
      
 228 
     | 
    
         
            +
              end
         
     | 
| 
      
 229 
     | 
    
         
            +
            end
         
     |