hyperloop 0.99.6 → 1.0.0.lap22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 98893ccb9ddb270692b88c8f750e3c882c2f1a916a547640554db32bd326f1a8
4
- data.tar.gz: d5adcdee8284c1d73672564efe8dd619e6dd75834bf18c08320ff1decca13c67
2
+ SHA1:
3
+ metadata.gz: f8aa194bf33e2741fd225cd418a4a6918e93293e
4
+ data.tar.gz: 22b6b94e218b5d4742d07e857a053da7d1cc961d
5
5
  SHA512:
6
- metadata.gz: fc1992507fb80ddca247354c662bd058509a913ebb0b6c3d7c4ae644de39d8cbadde3383ababe2a603042881ce1875a9c4df2eb44060065e70106986ae0ee5dd
7
- data.tar.gz: 11cd556dcee2002d0e17036cd6a8114122467701b32b88f748f8aaa38ee35119389d75f4d6a8ed0a125f65a1c794df5b90eda361400e81028779087031d8f6bf
6
+ metadata.gz: 1271bca0abf5bc500be7c622edea319333c3538c6a9b63d569221994b4965b3994ed1085672e4de1791fe5a85b804f329485be273b34b1dd3cb6cad5ec0d4154
7
+ data.tar.gz: aee59ee929259c9c61680bc7c545dd2d884b605e8d5a3847203fd4e9aedfed4408141065b0f4725536f3edce9adceb2c0f61b901c878f6c3167406b95354e38c
data/.gitignore CHANGED
@@ -46,3 +46,4 @@ bower.json
46
46
 
47
47
  # ignore Idea
48
48
  .idea
49
+ Gemfile.lock
data/Gemfile CHANGED
@@ -1,8 +1,4 @@
1
1
  source 'https://rubygems.org'
2
- gem 'hyperloop-config', path: '../hyperloop-config'
3
- gem 'hyper-store', path: '../hyper-store'
4
- gem 'hyper-component', path: '../hyper-component'
5
- gem 'hyper-operation', path: '../hyper-operation'
6
- gem 'hyper-model', path: '../hyper-model'
7
- gem 'hyper-router', path: '../hyper-router'
2
+ gem "opal-jquery", git: "https://github.com/opal/opal-jquery.git", branch: "master"
3
+ gem "opal-rails", git: "https://github.com/opal/opal-rails.git", branch: "master"
8
4
  gemspec
data/README.md CHANGED
@@ -1,10 +1,20 @@
1
- Install instructions for the latest lap (lap is hyperloop designation for release candidate):
1
+ Lap 21 (Lap is hyperloop designation for release candidate)
2
+
3
+ Install instructions for the latest lap:
2
4
  ```
5
+ source https://gems.ruby-hyperloop.org
6
+
3
7
  gem "opal-jquery", git: "https://github.com/opal/opal-jquery.git", branch: "master"
8
+ gem "opal-rails", git: "https://github.com/opal/opal-rails.git", branch: "master"
4
9
 
5
- gem 'hyperloop', '~> 1.0.0.lap0'
6
- gem 'hyper-spec', '~> 1.0.0.lap0'
10
+ gem 'hyperloop', '~> 1.0.0.lap'
11
+ gem 'hyper-spec', '~> 1.0.0.lap'
7
12
  ```
13
+ ### lap21 advancements
14
+ works with standard opal 0.11 as above
15
+ fixes for hyper-operation, dispatch_to only dispatches once to a channel for a ServerOp.run
16
+ client side debugging messages for ActionCable websockets and :simple_poller in development environment
17
+ correct server side logging/non-logging for :simple_poller
8
18
 
9
19
  ### testing ruby-hyperloop gems
10
20
  See, section **Testing Ruby-Hyperloop**
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require './tasks/gems'
2
2
  require './tasks/git'
3
3
  require './tasks/version'
4
4
 
5
- HYPERLOOP_REPOS =%w[hyper-component hyper-console hyper-mesh hyper-model hyper-operation hyper-react
5
+ HYPERLOOP_REPOS =%w[hyper-component hyper-mesh hyper-model hyper-operation hyper-react
6
6
  hyper-router hyper-spec hyper-store hyperloop hyperloop-config]
7
7
 
8
8
  task :default do
@@ -11,5 +11,6 @@ end
11
11
 
12
12
  namespace :spec do
13
13
  task :prepare do
14
+ sh %{bundle update}
14
15
  end
15
16
  end
@@ -19,19 +19,13 @@ Gem::Specification.new do |spec|
19
19
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(tasks)/}) }
20
20
  spec.require_paths = ['lib']
21
21
 
22
- # temporarily moved to installer until opal-jquery version issue is fixed
23
22
  spec.add_dependency 'hyper-model', Hyperloop::VERSION
24
23
  spec.add_dependency 'hyper-router', Hyperloop::ROUTERVERSION
25
- spec.add_dependency 'opal-rails', '~> 0.9.4'
26
- # spec.add_dependency 'opal-jquery'
27
-
28
- #spec.add_dependency 'hyperloop-config', Hyperloop::VERSION
24
+ spec.add_dependency 'hyperloop-config', Hyperloop::VERSION
29
25
  spec.add_dependency 'opal-browser', '~> 0.2.0'
26
+ spec.add_dependency 'opal-rails', '~> 0.9.3'
30
27
  spec.add_dependency 'react-rails', '>= 2.4.0', '< 2.5.0'
31
- spec.add_dependency 'libv8', '~> 6.7.0'
32
- spec.add_dependency 'mini_racer', '~> 0.2.4'
33
-
34
- spec.add_dependency 'rails', '>= 4.0.0'
35
- spec.add_development_dependency 'chromedriver-helper'
28
+ spec.add_dependency 'mini_racer', '~> 0.1.15'
29
+ spec.add_runtime_dependency 'rails', '>= 4.0.0'
36
30
  spec.add_development_dependency 'geminabox', '>= 0.13.11'
37
31
  end
@@ -1,23 +1,19 @@
1
- require 'rails/generators'
2
- module Hyper
3
- class Router < Rails::Generators::Base
4
- source_root File.expand_path('../templates', __FILE__)
5
-
6
- argument :component, type: :string
7
- class_option :path, type: :string, default: '/(*other)'
8
- def create_component_file
9
- component_array = component.split('::')
10
- @modules = component_array[0..-2]
11
- @file_name = component_array.last
12
- @indent = 0
13
- template 'router_template.rb',
14
- File.join('app/hyperloop/components',
15
- @modules.map(&:downcase).join('/'),
16
- "#{@file_name.underscore}.rb")
17
- end
18
-
19
- def add_route
20
- route "get '#{options['path']}', to: 'hyperloop##{@file_name.underscore}'"
21
- end
22
- end
23
- end
1
+ # require 'rails/generators'
2
+ # module Hyperloop
3
+ # class Router < Rails::Generators::Base
4
+ # source_root File.expand_path('../templates', __FILE__)
5
+ # argument :components, type: :array
6
+ # def create_component_file
7
+ # self.components.each do |component|
8
+ # component_array = component.split('::')
9
+ # @modules = component_array[0..-2]
10
+ # @file_name = component_array.last
11
+ # @indent = 0
12
+ # template 'router_template.rb',
13
+ # File.join('app/views/components',
14
+ # @modules.map(&:downcase).join('/'),
15
+ # "#{@file_name.underscore}.rb")
16
+ # end
17
+ # end
18
+ # end
19
+ # end
@@ -1,40 +1,40 @@
1
1
  <%- @modules.each do |module_name| %><%= " "* @indent %>module <%= module_name.camelize %><%- @indent += 1 %>
2
2
  <%- end %><%=" "* @indent %>class <%= @file_name %> < Hyperloop::Component
3
3
 
4
- <%=" "* @indent %> # param :my_param
5
- <%=" "* @indent %> # param param_with_default: "default value"
6
- <%=" "* @indent %> # param :param_with_default2, default: "default value" # alternative syntax
7
- <%=" "* @indent %> # param :param_with_type, type: Hash
8
- <%=" "* @indent %> # param :array_of_hashes, type: [Hash]
9
- <%=" "* @indent %> # collect_other_params_as :attributes # collects all other params into a hash
4
+ <%=" "* @indent %># param :my_param
5
+ <%=" "* @indent %># param param_with_default: "default value"
6
+ <%=" "* @indent %># param :param_with_default2, default: "default value" # alternative syntax
7
+ <%=" "* @indent %># param :param_with_type, type: Hash
8
+ <%=" "* @indent %># param :array_of_hashes, type: [Hash]
9
+ <%=" "* @indent %># collect_other_params_as :attributes # collects all other params into a hash
10
10
 
11
- <%=" "* @indent %> # The following are the most common lifecycle call backs,
12
- <%=" "* @indent %> # the following are the most common lifecycle call backs# delete any that you are not using.
13
- <%=" "* @indent %> # call backs may also reference an instance method i.e. before_mount :my_method
11
+ <%=" "* @indent %># The following are the most common lifecycle call backs,
12
+ <%=" "* @indent %># the following are the most common lifecycle call backs# delete any that you are not using.
13
+ <%=" "* @indent %># call backs may also reference an instance method i.e. before_mount :my_method
14
14
 
15
- <%=" "* @indent %> before_mount do
16
- <%=" "* @indent %> # any initialization particularly of state variables goes here.
17
- <%=" "* @indent %> # this will execute on server (prerendering) and client.
18
- <%=" "* @indent %> end
15
+ <%=" "* @indent %>before_mount do
16
+ <%=" "* @indent %> # any initialization particularly of state variables goes here.
17
+ <%=" "* @indent %> # this will execute on server (prerendering) and client.
18
+ <%=" "* @indent %>end
19
19
 
20
- <%=" "* @indent %> after_mount do
21
- <%=" "* @indent %> # any client only post rendering initialization goes here.
22
- <%=" "* @indent %> # i.e. start timers, HTTP requests, and low level jquery operations etc.
23
- <%=" "* @indent %> end
20
+ <%=" "* @indent %>after_mount do
21
+ <%=" "* @indent %> # any client only post rendering initialization goes here.
22
+ <%=" "* @indent %> # i.e. start timers, HTTP requests, and low level jquery operations etc.
23
+ <%=" "* @indent %>end
24
24
 
25
- <%=" "* @indent %> before_update do
26
- <%=" "* @indent %> # called whenever a component will be re-rerendered
27
- <%=" "* @indent %> end
25
+ <%=" "* @indent %>before_update do
26
+ <%=" "* @indent %> # called whenever a component will be re-rerendered
27
+ <%=" "* @indent %>end
28
28
 
29
- <%=" "* @indent %> before_unmount do
30
- <%=" "* @indent %> # cleanup any thing (i.e. timers) before component is destroyed
31
- <%=" "* @indent %> end
29
+ <%=" "* @indent %>before_unmount do
30
+ <%=" "* @indent %> # cleanup any thing (i.e. timers) before component is destroyed
31
+ <%=" "* @indent %>end
32
32
 
33
- <%=" "* @indent %> render do
34
- <%=" "* @indent %> DIV do
35
- <%=" "* @indent %> "<%= (@modules+[@file_name]).join('::') %>"
36
- <%=" "* @indent %> end
33
+ <%=" "* @indent %>def render
34
+ <%=" "* @indent %> DIV do
35
+ <%=" "* @indent %> "<%= (@modules+[@file_name]).join('::') %>"
37
36
  <%=" "* @indent %> end
38
37
  <%=" "* @indent %>end
38
+ <%=" "* @indent %>end
39
39
  <%- @modules.each do %><%- @indent -= 1 %><%=" "* @indent %>end
40
40
  <%- end %>
@@ -1,17 +1,44 @@
1
- <%- @modules.each do |module_name| %><%= " "* @indent %>module <%= module_name.camelize %><%- @indent += 1 %>
2
- <%- end %><%=" "* @indent %>class <%= @file_name %> < Hyperloop::Router
3
- <%=" "* @indent %>
4
- <%=" "* @indent %> route do
5
- <%=" "* @indent %> DIV do
6
- <%=" "* @indent %> "<%= (@modules+[@file_name]).join('::') %>"
7
- <%=" "* @indent %> # define routes using the Route psuedo component. Examples:
8
- <%=" "* @indent %> # Route('/foo', mounts: Foo) : match the path beginning with /foo and mount component Foo here
9
- <%=" "* @indent %> # Route('/foo') { Foo(...) } : display the contents of the block
10
- <%=" "* @indent %> # Route('/', exact: true, mounts: Home) : match the exact path / and mount the Home component
11
- <%=" "* @indent %> # Route('/user/:id/name', mounts: UserName) : path segments beginning with a colon will be captured in the match param
12
- <%=" "* @indent %> # see the hyper-router gem documentation for more details
13
- <%=" "* @indent %> end
14
- <%=" "* @indent %> end
1
+ module Components
2
+ <%- @modules.each do |module_name| %><%= " "* @indent %>module <%= module_name.camelize %><%- @indent += 1 %>
3
+ <%- end %><%=" "* @indent %>class <%= @file_name %>
4
+
5
+ <%=" "* @indent %>include React::Router
6
+
7
+ <%=" "* @indent %>routes(path: "/") do # change path to be the base path
8
+ <%=" "* @indent %> # you will probably want to update your config/routes.rb file so that it matches all
9
+ <%=" "* @indent %> # subroutes: i.e. get '(*subroutes)' => "<%= (@modules.last || 'home').underscore %>#<%= @file_name.underscore %>"
10
+ <%=" "* @indent %> # basic route has:
11
+ <%=" "* @indent %> # a path
12
+ <%=" "* @indent %> # a name - used to reference the route in methods like redirect, and link)
13
+ <%=" "* @indent %> # a handler - the component that will be mounted on this route
14
+ <%=" "* @indent %> route(path: "subroute1-path", name: :subroute1, handler: Subroute1Component)
15
+ <%=" "* @indent %> route(path: "subroute2-path", name: :subroute2, handler: Subroute2Component)
16
+ <%=" "* @indent %> # routes can take parameters designated with a colon:
17
+ <%=" "* @indent %> route(path: "subroute3-path/:user_id", name: subroute3, handler: Subroute3Component)
18
+ <%=" "* @indent %> # the redirect method will transition any incoming matching routes to a new route
19
+ <%=" "* @indent %> redirect(from: "/", to: :subroute1)
20
+ <%=" "* @indent %> # the not_found method indicates which component to load if no route matches:
21
+ <%=" "* @indent %> not_found(handler: NotFound)
22
+ <%=" "* @indent %>end
23
+
24
+ <%=" "* @indent %>router_param :user_id, as: :user do |id|
25
+ <%=" "* @indent %> # Translate incoming route params to internal values.
26
+ <%=" "* @indent %> # In this case we will refer to the translated user_id as user.
27
+ <%=" "* @indent %> # The block param (id) will have the value of the param.
28
+ <%=" "* @indent %> # This is useful for looking up ActiveRecord models by ids, etc.
29
+ <%=" "* @indent %>end
30
+
31
+ <%=" "* @indent %>def show # note that the top level router has a show method NOT render
32
+ <%=" "* @indent %> DIV do
33
+ <%=" "* @indent %> # content to display on every route
34
+ <%=" "* @indent %> # link generates an anchor tag.
35
+ <%=" "* @indent %> link(to: :subroute3, params: {user_id: 12}, class: "link-class") { "Click to go to subroute3" }
36
+ <%=" "* @indent %> # within an event handler use transition_to to move to a new route
37
+ <%=" "* @indent %> # the route_handler method will display the current route, it can be called in the
38
+ <%=" "* @indent %> # router, or in some child component.
39
+ <%=" "* @indent %> route_handler
40
+ <%=" "* @indent %> end
41
+ <%=" "* @indent %>end
15
42
  <%=" "* @indent %>end
16
- <%- @modules.each do %><%- @indent -= 1 %><%=" "* @indent %>end
17
- <%- end %>
43
+ <%- @modules.each do %><%- @indent -= 1 %><%=" "* @indent %>end
44
+ <%- end %>end
@@ -1,21 +1,7 @@
1
- require_relative 'install_generator_base'
1
+ require 'rails/generators'
2
2
  module Hyperloop
3
3
  class InstallGenerator < Rails::Generators::Base
4
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
5
  def inject_react_file_js
20
6
  append_file 'app/assets/javascripts/application.js' do
21
7
  <<-'JS'
@@ -24,6 +10,10 @@ module Hyperloop
24
10
  end
25
11
  end
26
12
 
13
+ def inject_engine_to_routes
14
+ route 'mount Hyperloop::Engine => \'/hyperloop\''
15
+ end
16
+
27
17
  def create_hyperloop_directories
28
18
  create_file 'app/hyperloop/components/.keep', ''
29
19
  create_file 'app/hyperloop/operations/.keep', ''
@@ -31,18 +21,6 @@ module Hyperloop
31
21
  create_file 'app/hyperloop/models/.keep', ''
32
22
  end
33
23
 
34
- def move_and_update_application_record
35
- unless File.exists? 'app/hyperloop/models/application_record.rb'
36
- `mv app/models/application_record.rb app/hyperloop/models/application_record.rb`
37
- create_file 'app/models/application_record.rb', <<-RUBY
38
- # app/models/application_record.rb
39
- # the presence of this file prevents rails migrations from recreating application_record.rb see https://github.com/rails/rails/issues/29407
40
-
41
- require 'models/application_record.rb'
42
- RUBY
43
- end
44
- end
45
-
46
24
  def create_policies_directory
47
25
  create_file 'app/policies/application_policy.rb', <<-RUBY
48
26
  # app/policies/application_policy
@@ -58,124 +36,23 @@ class Hyperloop::ApplicationPolicy
58
36
  regulate_all_broadcasts { |policy| policy.send_all }
59
37
  # Allow all changes to public models
60
38
  allow_change(to: :all, on: [:create, :update, :destroy]) { true }
61
- # allow remote access to all scopes - i.e. you can count or get a list of ids
62
- # for any scope or relationship
63
- ApplicationRecord.regulate_scope :all
64
39
  end unless Rails.env.production?
65
- RUBY
66
- end
67
-
68
- def add_router
69
- generate "hyper:router", "App"
70
- end
71
-
72
- def add_webpacker_manifests
73
- return if skip_webpack?
74
- create_file 'app/javascript/packs/client_and_server.js', <<-JAVASCRIPT
75
- //app/javascript/packs/client_and_server.js
76
- // these packages will be loaded both during prerendering and on the client
77
- React = require('react'); // react-js library
78
- History = require('history'); // react-router history library
79
- ReactRouter = require('react-router'); // react-router js library
80
- ReactRouterDOM = require('react-router-dom'); // react-router DOM interface
81
- ReactRailsUJS = require('react_ujs'); // interface to react-rails
82
- // to add additional NPM packages call run yarn package-name@version
83
- // then add the require here.
84
- JAVASCRIPT
85
- create_file 'app/javascript/packs/client_only.js', <<-JAVASCRIPT
86
- //app/javascript/packs/client_only.js
87
- // add any requires for packages that will run client side only
88
- ReactDOM = require('react-dom'); // react-js client side code
89
- jQuery = require('jquery');
90
- // to add additional NPM packages call run yarn package-name@version
91
- // then add the require here.
92
- JAVASCRIPT
93
- append_file 'config/initializers/assets.rb' do
94
- <<-RUBY
95
- Rails.application.config.assets.paths << Rails.root.join('public', 'packs').to_s
96
40
  RUBY
97
- end
98
- end
99
-
100
- def add_webpacks
101
- return if skip_webpack?
102
- yarn 'react', '16'
103
- yarn 'react-dom', '16'
104
- yarn 'react-router', '4.2'
105
- yarn 'react-router-dom', '4.2'
106
- yarn 'history', '4.2'
107
- yarn 'react_ujs'
108
- yarn 'jquery'
109
41
  end
110
42
 
111
- def add_framework
112
- framework = options['add-framework']
113
- return unless framework
114
- generate "hyperloop:install_#{framework}", "--no-build"
115
- end
116
-
117
- def build_webpack
118
- system('bin/webpack')
119
- end
120
-
121
- # all generators should be run before the initializer due to the opal-rails opal-jquery
122
- # conflict
123
-
124
43
  def create_initializer
125
44
  create_file 'config/initializers/hyperloop.rb', <<-RUBY
126
45
  # config/initializers/hyperloop.rb
127
46
  # If you are not using ActionCable, see http://ruby-hyperloop.io/docs/models/configuring-transport/
128
47
  Hyperloop.configuration do |config|
129
- config.transport = :action_cable # or :pusher or :simpler_poller or :none
130
- config.prerendering = :off # or :on
131
- config.import 'reactrb/auto-import' # will automatically bridge js components to hyperloop components
132
- #{" config.import 'jquery', client_only: true # remove this line if you don't need jquery" if skip_webpack?}
133
- config.import 'hyper-component/jquery', client_only: true # remove this line if you don't need jquery
134
- #{" config.import 'opal_hot_reloader' if Rails.env.development?" unless options['skip-hot-reloader']}
48
+ config.transport = :action_cable
49
+ config.import 'reactrb/auto-import'
135
50
  end
136
- RUBY
137
- end
138
-
139
- def inject_engine_to_routes
140
- # this needs to be the first route, thus it must be the last method executed
141
- route 'mount Hyperloop::Engine => \'/hyperloop\'' # this route should be first in the routes file so it always matches
142
- end
143
51
 
144
- def add_opal_hot_reloader
145
- return if options['skip-hot-reloader']
146
- create_file 'Procfile', <<-TEXT
147
- web: bundle exec rails s -b 0.0.0.0
148
- hot-loader: bundle exec opal-hot-reloader -d app/hyperloop
149
- TEXT
150
- append_file 'app/assets/javascripts/application.js' do
151
- <<-RUBY
152
- Opal.OpalHotReloader.$listen() // optional (port, false, poll_seconds) i.e. (8081, false, 1)
153
52
  RUBY
154
- end
155
- gem_group :development do
156
- gem 'opal_hot_reloader'
157
- gem 'foreman'
158
- end
159
53
  end
160
54
 
161
55
  def add_gems
162
- # gem 'hyper-model', Hyperloop::VERSION
163
- # gem 'hyper-router', Hyperloop::ROUTERVERSION
164
- # gem 'opal-rails', '~> 0.9.4'
165
- # gem 'opal-jquery'
166
- # gem "opal-jquery", git: "https://github.com/opal/opal-jquery.git", branch: "master"
167
- end
168
-
169
- def install
170
- Bundler.with_clean_env do
171
- run "bundle install"
172
- end
173
- end
174
-
175
- private
176
-
177
- def skip_webpack?
178
- options['skip-webpack'] || !defined?(Webpacker)
179
56
  end
180
57
  end
181
58
  end
@@ -1,27 +1,17 @@
1
1
  require 'hyperloop-config'
2
2
  require 'rails/generators'
3
-
4
- # remove these once lap29 is released ...
5
- Hyperloop.js_import 'react/react-source-browser', client_only: true, defines: ['ReactDOM', 'React']
6
- Hyperloop.js_import 'react/react-source-server', server_only: true, defines: 'React'
7
- Hyperloop.js_import 'hyper-router/react-router-source', defines: ['ReactRouter', 'ReactRouterDOM', 'History']
8
- Hyperloop.js_import 'react_ujs', defines: 'ReactRailsUJS'
9
- # remove above once lap29 is released ...
3
+ require 'hyper-model'
10
4
 
11
5
  Hyperloop.import 'reactrb/auto-import'
12
6
  Hyperloop.import 'hyper-router'
13
- Hyperloop.import 'hyper-model'
14
7
 
15
8
  require 'generators/hyperloop/install_generator'
16
9
  require 'generators/hyper/component_generator'
17
10
  require 'generators/hyper/router_generator'
18
- begin
19
- require 'opal-rails'
20
- require 'hyper-model'
21
- require 'hyper-router'
22
- rescue LoadError
23
- end
11
+ require 'opal-rails'
24
12
  require 'react-rails'
13
+ require 'hyper-model'
25
14
  require 'opal-browser'
26
15
  require 'mini_racer'
16
+ require 'hyper-router'
27
17
  require 'hyperloop/version'
@@ -1,3 +1,4 @@
1
1
  module Hyperloop
2
- ROUTERVERSION = VERSION = '0.99.6'
2
+ VERSION = '1.0.0.lap22'
3
+ ROUTERVERSION = '4.2.6.lap22'
3
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyperloop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.99.6
4
+ version: 1.0.0.lap22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Loic Boutet
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2019-01-30 00:00:00.000000000 Z
14
+ date: 2018-02-16 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: hyper-model
@@ -19,42 +19,42 @@ dependencies:
19
19
  requirements:
20
20
  - - '='
21
21
  - !ruby/object:Gem::Version
22
- version: 0.99.6
22
+ version: 1.0.0.lap22
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - '='
28
28
  - !ruby/object:Gem::Version
29
- version: 0.99.6
29
+ version: 1.0.0.lap22
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: hyper-router
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
34
  - - '='
35
35
  - !ruby/object:Gem::Version
36
- version: 0.99.6
36
+ version: 4.2.6.lap22
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - '='
42
42
  - !ruby/object:Gem::Version
43
- version: 0.99.6
43
+ version: 4.2.6.lap22
44
44
  - !ruby/object:Gem::Dependency
45
- name: opal-rails
45
+ name: hyperloop-config
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
- - - "~>"
48
+ - - '='
49
49
  - !ruby/object:Gem::Version
50
- version: 0.9.4
50
+ version: 1.0.0.lap22
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - "~>"
55
+ - - '='
56
56
  - !ruby/object:Gem::Version
57
- version: 0.9.4
57
+ version: 1.0.0.lap22
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: opal-browser
60
60
  requirement: !ruby/object:Gem::Requirement
@@ -69,6 +69,20 @@ dependencies:
69
69
  - - "~>"
70
70
  - !ruby/object:Gem::Version
71
71
  version: 0.2.0
72
+ - !ruby/object:Gem::Dependency
73
+ name: opal-rails
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - "~>"
77
+ - !ruby/object:Gem::Version
78
+ version: 0.9.3
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: 0.9.3
72
86
  - !ruby/object:Gem::Dependency
73
87
  name: react-rails
74
88
  requirement: !ruby/object:Gem::Requirement
@@ -89,34 +103,20 @@ dependencies:
89
103
  - - "<"
90
104
  - !ruby/object:Gem::Version
91
105
  version: 2.5.0
92
- - !ruby/object:Gem::Dependency
93
- name: libv8
94
- requirement: !ruby/object:Gem::Requirement
95
- requirements:
96
- - - "~>"
97
- - !ruby/object:Gem::Version
98
- version: 6.7.0
99
- type: :runtime
100
- prerelease: false
101
- version_requirements: !ruby/object:Gem::Requirement
102
- requirements:
103
- - - "~>"
104
- - !ruby/object:Gem::Version
105
- version: 6.7.0
106
106
  - !ruby/object:Gem::Dependency
107
107
  name: mini_racer
108
108
  requirement: !ruby/object:Gem::Requirement
109
109
  requirements:
110
110
  - - "~>"
111
111
  - !ruby/object:Gem::Version
112
- version: 0.2.4
112
+ version: 0.1.15
113
113
  type: :runtime
114
114
  prerelease: false
115
115
  version_requirements: !ruby/object:Gem::Requirement
116
116
  requirements:
117
117
  - - "~>"
118
118
  - !ruby/object:Gem::Version
119
- version: 0.2.4
119
+ version: 0.1.15
120
120
  - !ruby/object:Gem::Dependency
121
121
  name: rails
122
122
  requirement: !ruby/object:Gem::Requirement
@@ -131,20 +131,6 @@ dependencies:
131
131
  - - ">="
132
132
  - !ruby/object:Gem::Version
133
133
  version: 4.0.0
134
- - !ruby/object:Gem::Dependency
135
- name: chromedriver-helper
136
- requirement: !ruby/object:Gem::Requirement
137
- requirements:
138
- - - ">="
139
- - !ruby/object:Gem::Version
140
- version: '0'
141
- type: :development
142
- prerelease: false
143
- version_requirements: !ruby/object:Gem::Requirement
144
- requirements:
145
- - - ">="
146
- - !ruby/object:Gem::Version
147
- version: '0'
148
134
  - !ruby/object:Gem::Dependency
149
135
  name: geminabox
150
136
  requirement: !ruby/object:Gem::Requirement
@@ -169,21 +155,17 @@ extensions: []
169
155
  extra_rdoc_files: []
170
156
  files:
171
157
  - ".gitignore"
172
- - ".travis.yml"
173
158
  - Gemfile
174
- - Gemfile.lock
175
159
  - LICENSE
176
160
  - README.md
177
161
  - Rakefile
162
+ - hyperloop-logo-small-pink.png
178
163
  - hyperloop.gemspec
179
164
  - lib/generators/hyper/component_generator.rb
180
165
  - lib/generators/hyper/router_generator.rb
181
166
  - lib/generators/hyper/templates/component_template.rb
182
167
  - lib/generators/hyper/templates/router_template.rb
183
- - lib/generators/hyperloop/install_bootstrap_generator.rb
184
168
  - lib/generators/hyperloop/install_generator.rb
185
- - lib/generators/hyperloop/install_generator_base.rb
186
- - lib/generators/hyperloop/install_mui_generator.rb
187
169
  - lib/hyperloop.rb
188
170
  - lib/hyperloop/version.rb
189
171
  homepage: http://ruby-hyperloop.org
@@ -201,11 +183,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
201
183
  version: '0'
202
184
  required_rubygems_version: !ruby/object:Gem::Requirement
203
185
  requirements:
204
- - - ">="
186
+ - - ">"
205
187
  - !ruby/object:Gem::Version
206
- version: '0'
188
+ version: 1.3.1
207
189
  requirements: []
208
- rubygems_version: 3.0.2
190
+ rubyforge_project:
191
+ rubygems_version: 2.6.12
209
192
  signing_key:
210
193
  specification_version: 4
211
194
  summary: Hyperloop stack and generators for Rails
@@ -1,26 +0,0 @@
1
- dist: trusty
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.4.4
6
- - 2.5.1
7
- - ruby-head
8
- env:
9
- - DRIVER=google-chrome TZ=Europe/Berlin
10
- matrix:
11
- fast_finish: true
12
- allow_failures:
13
- - rvm: ruby-head
14
- before_install:
15
- - if [[ "$DRIVER" == "google-chrome" ]]; then wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -; fi
16
- - if [[ "$DRIVER" == "google-chrome" ]]; then echo "deb http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list; fi
17
- - if [[ "$DRIVER" == "google-chrome" ]]; then sudo apt-get update -qq && sudo apt-get install -qq -y google-chrome-stable; fi
18
- - gem install bundler
19
- before_script:
20
- - bundle install --jobs=3 --retry=3
21
- - if [[ "$DRIVER" == "google-chrome" ]]; then bundle exec chromedriver-update; fi
22
- - if [[ "$DRIVER" == "google-chrome" ]]; then ls -lR ~/.chromedriver-helper/; fi
23
- - if [[ "$DRIVER" == "google-chrome" ]]; then bundle exec chromedriver --version; fi
24
- - if [[ "$DRIVER" == "google-chrome" ]]; then google-chrome --version; fi
25
- - if [[ "$DRIVER" == "google-chrome" ]]; then which google-chrome; fi
26
- script: echo "Needs tests!!"
@@ -1,275 +0,0 @@
1
- PATH
2
- remote: ../hyper-component
3
- specs:
4
- hyper-component (0.99.6)
5
- hyper-store (= 0.99.6)
6
- hyperloop-config (= 0.99.6)
7
- libv8 (~> 6.7.0)
8
- mini_racer (~> 0.2.4)
9
- opal (>= 0.11.0, < 0.12.0)
10
- opal-activesupport (~> 0.3.1)
11
- react-rails (>= 2.4.0, < 2.5.0)
12
-
13
- PATH
14
- remote: ../hyper-model
15
- specs:
16
- hyper-model (0.99.6)
17
- activemodel
18
- activerecord (>= 4.0.0)
19
- hyper-component (= 0.99.6)
20
- hyper-operation (= 0.99.6)
21
-
22
- PATH
23
- remote: ../hyper-operation
24
- specs:
25
- hyper-operation (0.99.6)
26
- activerecord (>= 4.0.0)
27
- hyper-component (= 0.99.6)
28
- mutations
29
- opal-activesupport (~> 0.3.1)
30
-
31
- PATH
32
- remote: ../hyper-router
33
- specs:
34
- hyper-router (0.99.6)
35
- hyper-component (= 0.99.6)
36
- opal-browser (~> 0.2.0)
37
-
38
- PATH
39
- remote: ../hyper-store
40
- specs:
41
- hyper-store (0.99.6)
42
- hyperloop-config (= 0.99.6)
43
- opal (>= 0.11.0, < 0.12.0)
44
-
45
- PATH
46
- remote: ../hyperloop-config
47
- specs:
48
- hyperloop-config (0.99.6)
49
- libv8 (~> 6.7.0)
50
- mini_racer (~> 0.2.4)
51
- opal (>= 0.11.0, < 0.12.0)
52
- opal-browser (~> 0.2.0)
53
- uglifier
54
-
55
- PATH
56
- remote: .
57
- specs:
58
- hyperloop (0.99.6)
59
- hyper-model (= 0.99.6)
60
- hyper-router (= 0.99.6)
61
- libv8 (~> 6.7.0)
62
- mini_racer (~> 0.2.4)
63
- opal-browser (~> 0.2.0)
64
- opal-rails (~> 0.9.4)
65
- rails (>= 4.0.0)
66
- react-rails (>= 2.4.0, < 2.5.0)
67
-
68
- GEM
69
- remote: https://rubygems.org/
70
- specs:
71
- actioncable (5.2.2)
72
- actionpack (= 5.2.2)
73
- nio4r (~> 2.0)
74
- websocket-driver (>= 0.6.1)
75
- actionmailer (5.2.2)
76
- actionpack (= 5.2.2)
77
- actionview (= 5.2.2)
78
- activejob (= 5.2.2)
79
- mail (~> 2.5, >= 2.5.4)
80
- rails-dom-testing (~> 2.0)
81
- actionpack (5.2.2)
82
- actionview (= 5.2.2)
83
- activesupport (= 5.2.2)
84
- rack (~> 2.0)
85
- rack-test (>= 0.6.3)
86
- rails-dom-testing (~> 2.0)
87
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
88
- actionview (5.2.2)
89
- activesupport (= 5.2.2)
90
- builder (~> 3.1)
91
- erubi (~> 1.4)
92
- rails-dom-testing (~> 2.0)
93
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
94
- activejob (5.2.2)
95
- activesupport (= 5.2.2)
96
- globalid (>= 0.3.6)
97
- activemodel (5.2.2)
98
- activesupport (= 5.2.2)
99
- activerecord (5.2.2)
100
- activemodel (= 5.2.2)
101
- activesupport (= 5.2.2)
102
- arel (>= 9.0)
103
- activestorage (5.2.2)
104
- actionpack (= 5.2.2)
105
- activerecord (= 5.2.2)
106
- marcel (~> 0.3.1)
107
- activesupport (5.2.2)
108
- concurrent-ruby (~> 1.0, >= 1.0.2)
109
- i18n (>= 0.7, < 2)
110
- minitest (~> 5.1)
111
- tzinfo (~> 1.1)
112
- archive-zip (0.11.0)
113
- io-like (~> 0.3.0)
114
- arel (9.0.0)
115
- ast (2.4.0)
116
- babel-source (5.8.35)
117
- babel-transpiler (0.7.0)
118
- babel-source (>= 4.0, < 6)
119
- execjs (~> 2.0)
120
- builder (3.2.3)
121
- chromedriver-helper (1.2.0)
122
- archive-zip (~> 0.10)
123
- nokogiri (~> 1.8)
124
- concurrent-ruby (1.1.4)
125
- connection_pool (2.2.2)
126
- crass (1.0.4)
127
- erubi (1.8.0)
128
- execjs (2.7.0)
129
- faraday (0.15.2)
130
- multipart-post (>= 1.2, < 3)
131
- geminabox (1.1.0)
132
- builder
133
- faraday
134
- httpclient (>= 2.2.7)
135
- nesty
136
- reentrant_flock
137
- sinatra (>= 1.2.7)
138
- globalid (0.4.2)
139
- activesupport (>= 4.2.0)
140
- hike (1.2.3)
141
- httpclient (2.8.3)
142
- i18n (1.5.3)
143
- concurrent-ruby (~> 1.0)
144
- io-like (0.3.0)
145
- jquery-rails (4.3.3)
146
- rails-dom-testing (>= 1, < 3)
147
- railties (>= 4.2.0)
148
- thor (>= 0.14, < 2.0)
149
- libv8 (6.7.288.46.1)
150
- loofah (2.2.3)
151
- crass (~> 1.0.2)
152
- nokogiri (>= 1.5.9)
153
- mail (2.7.1)
154
- mini_mime (>= 0.1.1)
155
- marcel (0.3.3)
156
- mimemagic (~> 0.3.2)
157
- method_source (0.9.2)
158
- mimemagic (0.3.3)
159
- mini_mime (1.0.1)
160
- mini_portile2 (2.3.0)
161
- mini_racer (0.2.4)
162
- libv8 (>= 6.3)
163
- minitest (5.11.3)
164
- multipart-post (2.0.0)
165
- mustermann (1.0.2)
166
- mutations (0.9.0)
167
- activesupport
168
- nesty (1.0.2)
169
- nio4r (2.3.1)
170
- nokogiri (1.8.4)
171
- mini_portile2 (~> 2.3.0)
172
- opal (0.11.4)
173
- ast (>= 2.3.0)
174
- hike (~> 1.2)
175
- parser (= 2.3.3.1)
176
- sourcemap (~> 0.1.0)
177
- opal-activesupport (0.3.1)
178
- opal (>= 0.5.0, < 1.0.0)
179
- opal-browser (0.2.0)
180
- opal
181
- paggio
182
- opal-jquery (0.4.3)
183
- opal (>= 0.10.0, < 0.12.0)
184
- opal-rails (0.9.5)
185
- jquery-rails
186
- opal (>= 0.11.0, < 0.12)
187
- opal-activesupport (>= 0.0.5)
188
- opal-jquery (~> 0.4.0)
189
- opal-sprockets (~> 0.4.2)
190
- rails (>= 4.1, < 6.0)
191
- sprockets-rails (>= 2.3.3, < 4.0)
192
- opal-sprockets (0.4.2.0.11.0.3.1)
193
- opal (~> 0.11.0)
194
- sprockets (~> 3.1)
195
- tilt (>= 1.4)
196
- paggio (0.2.6)
197
- parser (2.3.3.1)
198
- ast (~> 2.2)
199
- rack (2.0.5)
200
- rack-protection (2.0.3)
201
- rack
202
- rack-test (1.1.0)
203
- rack (>= 1.0, < 3)
204
- rails (5.2.2)
205
- actioncable (= 5.2.2)
206
- actionmailer (= 5.2.2)
207
- actionpack (= 5.2.2)
208
- actionview (= 5.2.2)
209
- activejob (= 5.2.2)
210
- activemodel (= 5.2.2)
211
- activerecord (= 5.2.2)
212
- activestorage (= 5.2.2)
213
- activesupport (= 5.2.2)
214
- bundler (>= 1.3.0)
215
- railties (= 5.2.2)
216
- sprockets-rails (>= 2.0.0)
217
- rails-dom-testing (2.0.3)
218
- activesupport (>= 4.2.0)
219
- nokogiri (>= 1.6)
220
- rails-html-sanitizer (1.0.4)
221
- loofah (~> 2.2, >= 2.2.2)
222
- railties (5.2.2)
223
- actionpack (= 5.2.2)
224
- activesupport (= 5.2.2)
225
- method_source
226
- rake (>= 0.8.7)
227
- thor (>= 0.19.0, < 2.0)
228
- rake (12.3.2)
229
- react-rails (2.4.7)
230
- babel-transpiler (>= 0.7.0)
231
- connection_pool
232
- execjs
233
- railties (>= 3.2)
234
- tilt
235
- reentrant_flock (0.1.1)
236
- sinatra (2.0.3)
237
- mustermann (~> 1.0)
238
- rack (~> 2.0)
239
- rack-protection (= 2.0.3)
240
- tilt (~> 2.0)
241
- sourcemap (0.1.1)
242
- sprockets (3.7.2)
243
- concurrent-ruby (~> 1.0)
244
- rack (> 1, < 3)
245
- sprockets-rails (3.2.1)
246
- actionpack (>= 4.0)
247
- activesupport (>= 4.0)
248
- sprockets (>= 3.0.0)
249
- thor (0.20.3)
250
- thread_safe (0.3.6)
251
- tilt (2.0.8)
252
- tzinfo (1.2.5)
253
- thread_safe (~> 0.1)
254
- uglifier (4.1.20)
255
- execjs (>= 0.3.0, < 3)
256
- websocket-driver (0.7.0)
257
- websocket-extensions (>= 0.1.0)
258
- websocket-extensions (0.1.3)
259
-
260
- PLATFORMS
261
- ruby
262
-
263
- DEPENDENCIES
264
- chromedriver-helper
265
- geminabox (>= 0.13.11)
266
- hyper-component!
267
- hyper-model!
268
- hyper-operation!
269
- hyper-router!
270
- hyper-store!
271
- hyperloop!
272
- hyperloop-config!
273
-
274
- BUNDLED WITH
275
- 1.17.3
@@ -1,73 +0,0 @@
1
- require_relative 'install_generator_base'
2
- module Hyperloop
3
- class InstallBootstrapGenerator < Rails::Generators::Base
4
-
5
- desc "Adds the bits you need for the Bootstrap 3.0 framework"
6
-
7
- class_option 'no-build', type: :boolean
8
-
9
- def insure_yarn_loaded
10
- begin
11
- yarn_version = `yarn --version`
12
- raise Errno::ENOENT if yarn_version.blank?
13
- rescue Errno::ENOENT
14
- raise Thor::Error.new("please insure the yarn command is available if using webpacker")
15
- end
16
- end
17
-
18
- def add_to_manifests
19
- add_to_manifest 'client_and_server.js' do
20
- "BS = require('react-bootstrap');\n"
21
- end
22
- end
23
-
24
- def add_style_sheet_pack_tag
25
- inject_into_file 'app/views/layouts/application.html.erb', after: /stylesheet_link_tag.*$/ do
26
- <<-JAVASCRIPT
27
-
28
- <!-- Latest compiled and minified CSS -->
29
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
30
-
31
- <!-- Optional theme -->
32
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
33
- JAVASCRIPT
34
- end
35
- end
36
-
37
- def run_yarn
38
- yarn 'react-bootstrap'
39
- yarn 'bootstrap@3'
40
- end
41
-
42
- def build_webpack
43
- system('bin/webpack') unless options['no-build']
44
- end
45
-
46
- def add_sample_component
47
- create_file 'app/hyperloop/components/bs_sampler.rb' do
48
- <<-RUBY
49
- class BsSampler < Hyperloop::Component
50
- render(DIV) do
51
- BS::Grid() do
52
- BS::Row(class: "show-grid") do
53
- BS::Col(xs: 12, md: 8) do
54
- CODE { "BS::Col(xs: 12, md: 8)" }
55
- end
56
- BS::Col(xs: 6, md: 4) do
57
- CODE { "BS::Col(xs: 6, md: 4)" }
58
- end
59
- end
60
- BS::Row() do
61
- BS::Alert(bsStyle: "warning") do
62
- STRONG { "Holy guacamole!" }
63
- SPAN { " Best check yo self, you're not looking too good." }
64
- end
65
- end
66
- end
67
- end
68
- end
69
- RUBY
70
- end
71
- end
72
- end
73
- end
@@ -1,23 +0,0 @@
1
- require 'rails/generators'
2
-
3
- module Rails
4
- module Generators
5
- class Base < Thor::Group
6
-
7
- protected
8
-
9
- def add_to_manifest(manifest, &block)
10
- if File.exists? "app/javascript/packs/#{manifest}"
11
- append_file "app/javascript/packs/#{manifest}", &block
12
- else
13
- create_file "app/javascript/packs/#{manifest}", &block
14
- end
15
- end
16
-
17
- def yarn(package, version = nil)
18
- return if system("yarn add #{package}#{'@' + version if version}")
19
- raise Thor::Error.new("yarn failed to install #{package} with version #{version}")
20
- end
21
- end
22
- end
23
- end
@@ -1,52 +0,0 @@
1
- require_relative 'install_generator_base'
2
- module Hyperloop
3
- class InstallMuiGenerator < Rails::Generators::Base
4
-
5
- desc "Adds the bits you need for the MUI framework"
6
-
7
- class_option 'no-build', type: :boolean
8
-
9
- def insure_yarn_loaded
10
- begin
11
- yarn_version = `yarn --version`
12
- raise Errno::ENOENT if yarn_version.blank?
13
- rescue Errno::ENOENT
14
- raise Thor::Error.new("please insure the yarn command is available if using webpacker")
15
- end
16
- end
17
-
18
- def add_to_manifests
19
- add_to_manifest('client_and_server.js') { "Mui = require('muicss/react');\n" }
20
- add_to_manifest('application.scss') { "@import '~muicss/lib/sass/mui'\n" }
21
- end
22
-
23
- def add_style_sheet_pack_tag
24
- inject_into_file 'app/views/layouts/application.html.erb', after: /stylesheet_link_tag.*$/ do
25
- "\n <%= stylesheet_pack_tag 'application' %>\n"
26
- end
27
- end
28
-
29
- def run_yarn
30
- yarn 'muicss'
31
- end
32
-
33
- def build_webpack
34
- system('bin/webpack') unless options['no-build']
35
- end
36
-
37
- def add_sample_component
38
- create_file 'app/hyperloop/components/mui_sampler.rb' do
39
- <<-RUBY
40
- class MuiSampler < Hyperloop::Component
41
- render(DIV) do
42
- Mui::Appbar()
43
- Mui::Container() do
44
- Mui::Button(color: :primary) { 'button' }
45
- end
46
- end
47
- end
48
- RUBY
49
- end
50
- end
51
- end
52
- end