ru.Bee 1.7.0 → 1.8.0

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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rubee/cli/server.rb +26 -3
  3. data/lib/rubee.rb +1 -1
  4. data/readme.md +143 -96
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4ecb77e79daf38768a10a5da26f7f1e3013734c864774e128ffb767d5d6d9a1
4
- data.tar.gz: 1f9a6de22160db7ac4deb411278f4bb53bb94ee0a58893a9089a5eb99fd061fa
3
+ metadata.gz: 3a7e2d8462e9cf796796f117503bbc4d51dfebaa8d9923d5e1e6905d522a5af7
4
+ data.tar.gz: d8eb71da20db0400dc96900f73f53481c835449d4b3f1ee20979dc95e7c083f4
5
5
  SHA512:
6
- metadata.gz: 312f2143e4244dec12bdd6e40a815eeb9a2cf70af31bea3ef2c5211ae4a491dc8532931ca4d0ef4529979d579f2c17e3ade73fd09c3f9f75a0b79697e3c93200
7
- data.tar.gz: d53621c81d31e8b7e48b030762d5f58726756e3946da14a2774fd8c6239f96ccb87a4f8d4c533b862981a792a5c90a0755d22a66d6b5b5428d4df75d46ac8265
6
+ metadata.gz: 041f294e20e60f29ab5c03833613815fe7c462b7cc248a79aad228fbfe680e5474f6c38695c884d060a9cebfa0c0f2e918a915c102e2476e98d45df39b7a77ab
7
+ data.tar.gz: b0f0acda20a4de0d3c8bfebc32b9229c9be04f1311d7f2bab5e3d6a5fa7819a7414f05d0902988801a7ed624b681dfbd14ca3e7682a85a5daf094014ee907a0c
@@ -17,22 +17,27 @@ LOGO
17
17
 
18
18
  def start(argv)
19
19
  _, port = argv.first&.split(':')
20
+ jit = argv[1]
20
21
 
21
22
  port ||= '7000'
22
23
  print_logo
23
24
  color_puts("Starting takeoff of ruBee server on port #{port}...", color: :yellow)
24
- exec("rackup #{ENV['RACKUP_FILE']} -p #{port}")
25
+ command = "#{jit_prefix(jit)}rackup #{ENV['RACKUP_FILE']} -p #{port}"
26
+ color_puts(command, color: :gray)
27
+ exec(command)
25
28
  end
26
29
 
27
30
  def start_dev(argv)
28
31
  _, port = argv.first&.split(':')
32
+ jit = argv[1]
29
33
 
30
34
  port ||= '7000'
31
35
  print_logo
32
36
 
33
37
  color_puts("Starting takeoff of ruBee server on port #{port} in dev mode...", color: :yellow)
34
-
35
- exec("rerun -- rackup --port #{port} #{ENV['RACKUP_FILE']}")
38
+ command = "rerun -- #{jit_prefix_dev(jit)}rackup --port #{port} #{ENV['RACKUP_FILE']}"
39
+ color_puts(command, color: :gray)
40
+ exec(command)
36
41
  end
37
42
 
38
43
  def stop(_argv)
@@ -46,6 +51,24 @@ LOGO
46
51
  def print_logo
47
52
  puts "\e[36m#{LOGO % Rubee::VERSION}\e[0m" # Cyan color
48
53
  end
54
+
55
+ def jit_prefix(key)
56
+ case key
57
+ when 'yjit'
58
+ "ruby --yjit -S "
59
+ else
60
+ ""
61
+ end
62
+ end
63
+
64
+ def jit_prefix_dev(key)
65
+ case key
66
+ when 'yjit'
67
+ "ruby --yjit -S "
68
+ else
69
+ ""
70
+ end
71
+ end
49
72
  end
50
73
  end
51
74
  end
data/lib/rubee.rb CHANGED
@@ -16,7 +16,7 @@ module Rubee
16
16
  JS_DIR = File.join(APP_ROOT, LIB, 'js') unless defined?(JS_DIR)
17
17
  CSS_DIR = File.join(APP_ROOT, LIB, 'css') unless defined?(CSS_DIR)
18
18
  ROOT_PATH = File.expand_path(File.join(__dir__, '..')) unless defined?(ROOT_PATH)
19
- VERSION = '1.7.0'
19
+ VERSION = '1.8.0'
20
20
 
21
21
  require_relative 'rubee/router'
22
22
  require_relative 'rubee/logger'
data/readme.md CHANGED
@@ -8,56 +8,67 @@
8
8
 
9
9
  # <img src="lib/images/rubee.svg" alt="ruBee" height="40"> ... ruBee
10
10
 
11
- ruBee is a fast and lightweight Ruby application server designed for minimalism and flexibility .
12
-
13
- The main philosophy of ruBee is to focus on Ruby language explicit implementation of the MVC web application.
11
+ Rubee is a Ruby-based framework designed to streamline the development of modular monolith applications. \
12
+ It offers a structured approach to building scalable, maintainable, and React-ready projects, \
13
+ making it an ideal choice for developers seeking a balance between monolithic simplicity and modular flexibility.
14
14
 
15
15
  Want to get a quick API server up and runing? You can do it for real quick!
16
16
  <br />
17
- [![Video Title](https://img.youtube.com/vi/ko7H70s7qq0/0.jpg)](https://www.youtube.com/watch?v=ko7H70s7qq0)
18
-
19
- All great features are yet to come!
20
-
21
- ## Content:
17
+ [![Watch the demo](https://img.youtube.com/vi/ko7H70s7qq0/hqdefault.jpg)](https://www.youtube.com/watch?v=ko7H70s7qq0)
18
+ ## Content
22
19
 
23
- - [Installation](#Installation)
20
+ - [Installation](#installation)
24
21
  - [Run tests](#run-tests)
25
22
  - [Draw contract](#draw-contract)
26
- - [Model](#Model)
27
- - [Routing](#Routing)
28
- - [Database](#Database)
29
- - [Views](#Views)
30
- - [Hooks](#Hooks)
31
- - [JWT based authentification](#JWT-based-authentification)
32
- - [Rubee commands](#Rubee-commands)
33
- - [Generate commands](#Generate-commands)
34
- - [Migration commands](#Migration-commands)
35
- - [Rubee console](#Rubee-console)
36
- - [Testing](#Testing)
37
- - [Background jobs](#Background-jobs)
38
- - [Modular](#Modular application)
39
- - [Logger](#Logger)
23
+ - [Model](#model)
24
+ - [Routing](#routing)
25
+ - [Database](#database)
26
+ - [Views](#views)
27
+ - [Hooks](#hooks)
28
+ - [JWT based authentification](#jwt-based-authentification)
29
+ - [Rubee commands](#rubee-commands)
30
+ - [Generate commands](#generate-commands)
31
+ - [Migration commands](#migration-commands)
32
+ - [Rubee console](#rubee-console)
33
+ - [Testing](#testing)
34
+ - [Background jobs](#background-jobs)
35
+ - [Modular](#modualar-application)
36
+ - [Logger](#logger)
40
37
 
41
38
  ## Features
42
39
 
43
- - **Lightweight**: A minimal footprint that focuses on serving Ruby applications efficiently.
44
- - **Moduled** A modular approach to application development. Build modular monolith applications with ease by \
45
- attaching as many subprojects you need.
46
- - **Contract driven**: Define your API contracts in a simple, declarative manner.\
47
- Then generate the biolerplate files you need.
48
- - **Fast**: Optimized for speed, providing a quick response to requests. Everything is relative, I know!
49
- - **Rack**: Rack backed. All Rack api is available for integration.
50
- - **Databases**: Sqlite3, Postgres, Mysql and many more supported by sequel gem.
51
- - **Views**: Json, ERB and plain HTML and ..
52
- - **React** is supported out of the box as a rubee view
53
- - **Bundlable** Charge your ruBee with any gem you need and update your project with bundle.
54
- - **ORM** All models are natively ORM objects, however you can use it as a blueurpint for any datasources.
55
- - **Authentificatable** Add JWT authentification easily to any controller action.
56
- - **Hooks** Add logic before, after and around any action.
57
- - **Test** Run all or selected tests witin fast and beloved minitest.
58
- - **Asyncable** Add async adapter and pick any popular background job queue enginee
59
- - **Console** Start the interactive console and reload it on the fly
60
- - **Background jobs** Add async adapter and pick any popular background job queue engine
40
+ 🐝 Lightweight A minimal footprint focused on serving Ruby applications efficiently.
41
+ <br>
42
+ 🧩 Modular A modular approach to application development. Build modular monoliths with ease by attaching \
43
+ as many subprojects as you need.
44
+ <br>
45
+ 📜 Contract-driven Define your API contracts in a simple, declarative way, then generate all the boilerplate you need.
46
+ <br>
47
+ Fast Optimized for speed, providing quick responses. (Everything is relative, we know! 😄)
48
+ <br>
49
+ 🧱 Rack-powered Built on Rack. The full Rack API is available for easy integration.
50
+ <br>
51
+ 🗄️ Databases Supports SQLite3, PostgreSQL, MySQL, and more via the Sequel gem.
52
+ <br>
53
+ 🖼️ Views JSON, ERB, and plain HTML out of the box.
54
+ <br>
55
+ ⚛️ React Ready React is supported as a first-class Rubee view engine.
56
+ <br>
57
+ 📦 Bundlable Charge your Rubee app with any gem you need. Update effortlessly via Bundler.
58
+ <br>
59
+ 🧬 ORM-agnostic – Models are native ORM objects, but you can use them as blueprints for any data source.
60
+ <br>
61
+ 🔐 Authenticatable – Easily add JWT authentication to any controller action.
62
+ <br>
63
+ 🪝 Hooks – Add logic before, after, or around any controller action.
64
+ <br>
65
+ 🧪 Testable – Run all or selected tests using fast, beloved Minitest.
66
+ <br>
67
+ 👷 Asyncable – Plug in async adapters and use any popular background job engine.
68
+ <br>
69
+ ⌨️ Console – Start an interactive console and reload on the fly.
70
+ <br>
71
+ ⚙️ Background Jobs – Schedule and process background jobs using your preferred async stack.
61
72
 
62
73
  ## Installation
63
74
 
@@ -69,16 +80,17 @@ gem install ru.Bee
69
80
  2. Create your first project
70
81
  ```bash
71
82
  rubee project my_project
83
+
72
84
  cd my_project
73
85
  ```
74
- - [Back to content](#Content)
75
86
 
87
+ [Back to content](#content)
76
88
 
77
89
  3. Install dependencies
78
90
 
79
91
  ***Prerequisites***<br />
80
92
  Make sure:
81
- **Ruby** language (3+) is installed
93
+ **Ruby** language (3.1>) is installed
82
94
  **Bundler** is installed
83
95
 
84
96
  ```bash
@@ -87,7 +99,7 @@ bundle install
87
99
 
88
100
  4. Run ruBee server. Default port is 7000
89
101
  ```bash
90
- rubee start
102
+ rubee start # or rubee start_dev for development
91
103
  ```
92
104
 
93
105
  5. Open your browser and go to http://localhost:7000
@@ -95,10 +107,13 @@ rubee start
95
107
  ## Run tests
96
108
  ```bash
97
109
  rubee test
110
+ # or you can specify specific test file
111
+ rubee test models/user_model_test.rb
98
112
  ```
99
- - [Back to content](#Content)
113
+ [Back to content](#content)
100
114
 
101
115
  ## Draw contract
116
+
102
117
  1. Add the routes to the routes.rb
103
118
  ```ruby
104
119
  Rubee::Router.draw do |router|
@@ -115,6 +130,7 @@ rubee test
115
130
  }
116
131
  end
117
132
  ```
133
+
118
134
  2. generate the files
119
135
  ```bash
120
136
  rubee generate get /apples
@@ -128,17 +144,17 @@ This will generate the following files
128
144
  ```
129
145
 
130
146
  3. Run the initial db migration
131
- ```bash
147
+ ```bash
132
148
  rubee db run:all
133
- ```
149
+ ```
150
+
151
+ 4. Fill the generated files with the logic you need and run the server again!
134
152
 
135
- 5. Fill the generated files with the logic you need and run the server again!
136
- - [Back to content](#Content)
153
+ [Back to content](#content)
137
154
 
138
155
  ## Model
139
156
  Model in ruBee is just simple ruby object that can be serilalized in the view
140
157
  in the way it required (ie json).
141
-
142
158
  Here below is a simple example on how it can be used by rendering json from in memory object
143
159
 
144
160
  ```ruby
@@ -160,6 +176,7 @@ Just make sure Serializable module included in the target class.
160
176
  attr_accessor :id, :colour, :weight
161
177
  end
162
178
  ```
179
+
163
180
  However, you can simply turn it to ORM object by extending database class Rubee::SequelObject.
164
181
  This one is already serializable and charged with hooks.
165
182
  ```Ruby
@@ -182,9 +199,10 @@ So in the controller you would need to query your target object now.
182
199
  end
183
200
  end
184
201
  ```
185
- - [Back to content](#Content)
186
202
 
187
- #### Rubee::SequelObject base methods:
203
+ [Back to content](#content)
204
+
205
+ #### Rubee::SequelObject base methods
188
206
 
189
207
  Initiate new record in memory
190
208
  ```Ruby
@@ -313,10 +331,13 @@ irb(main):010> .then { |dataset| Comment.serialize(dataset) }
313
331
  ```
314
332
  This is recommended when you want to run one query and serialize it back to Rubee object only once.
315
333
  So it may safe some resources.
316
- - [Back to content](#Content)
334
+
335
+ [Back to content](#content)
317
336
 
318
337
  ## Routing
319
- Rubee uses explicit routes. In the routes.rb yout can define routes for any of the main HTTP methods. You can also add any matched parameter denoted by a pair of `{ }` in the path of the route. Eg. `/path/to/{a_key}/somewhere`
338
+ Rubee uses explicit routes. In the routes.rb yout can define routes for any of the main HTTP methods. \
339
+ You can also add any matched parameter denoted by a pair of `{ }` in the path of the route. \
340
+ Eg. `/path/to/{a_key}/somewhere`
320
341
 
321
342
  ### Routing methods
322
343
  ``` ruby
@@ -334,10 +355,14 @@ end
334
355
  ```
335
356
 
336
357
  As you see above every route is set up as:\
337
- `route.http_method path, to: "controller#action", model { ...optional }`
358
+ ```ruby
359
+ route.{http_method} {path}, to: "{controller}#{action}",
360
+ model { ...optional }, namespace { ...optional }, react { ...optional }
361
+ ```
338
362
 
339
363
  ### Defining Model attributes in routes
340
- One of Rubee's unique traits is where we can define our models for generation. You've seen above one possible way you can set up.
364
+ One of Rubee's unique traits is where we can define our models for generation. \
365
+ You've seen above one possible way you can set up.
341
366
 
342
367
  ```ruby
343
368
  Rubee::Router.draw do |router|
@@ -355,41 +380,52 @@ Rubee::Router.draw do |router|
355
380
  end
356
381
  ```
357
382
 
358
- There are many other keys supported by us and Sequel to help generate your initial db files. Other supported attribute key types are:
383
+ There are many other types supported by us and Sequel to help generate your initial db files. \
384
+ Other supported attribute key types are:
359
385
  ``` ruby
360
386
  [
361
- { name: 'key1', type: :primary},
362
- { name: 'key2', type: :string },
363
- { name: 'key3', type: :text },
364
- { name: 'key4', type: :integer },
365
- { name: 'key5', type: :date },
366
- { name: 'key6', type: :datetime },
367
- { name: 'key7', type: :time },
368
- { name: 'key8', type: :boolean },
369
- { name: 'key9', type: :bigint },
370
- { name: 'key10', type: :decimal },
371
- { name: 'key11', type: :foreign_key },
372
- { name: 'key12', type: :index },
373
- { name: 'key13', type: :unique }
387
+ { name: 'id', type: :primary},
388
+ { name: 'name', type: :string },
389
+ { name: 'description', type: :text },
390
+ { name: 'quntity', type: :integer },
391
+ { name: 'created', type: :date },
392
+ { name: 'modified', type: :datetime },
393
+ { name: 'exists', type: :time },
394
+ { name: 'active', type: :boolean },
395
+ { name: 'hash', type: :bigint },
396
+ { name: 'price', type: :decimal },
397
+ { name: 'item_id', type: :foreign_key },
398
+ { name: 'item_id_index', type: :index },
399
+ { name: 'item_id_unique', type: :unique }
374
400
  ]
375
401
  ```
376
- Every attribute can have a set of options passed based on their related [Sequel schema definition](https://github.com/jeremyevans/sequel/blob/master/doc/schema_modification.rdoc).
402
+ Every attribute can have a set of options passed based on their related \
403
+ [Sequel schema definition](https://github.com/jeremyevans/sequel/blob/master/doc/schema_modification.rdoc).
377
404
 
378
405
  An example of this would be for the type string: \
379
- `{name: 'key', type: :string, options: { size: 50, fixed: true } }`
406
+ ```ruby
407
+ {name: 'key', type: :string, options: { size: 50, fixed: true } }
408
+ ```
380
409
 
381
410
  Gets translated to:\
382
- `String :key, size: 50, fixed: true`
411
+ ```
412
+ rubyString :key, size: 50, fixed: true
413
+ ```
383
414
 
384
415
  ### Generation from routes
385
- As long as you have a `{ model: 'something' }` passed to your given route you can use it to generate your initial model files. If only a `path` and a `to:` are defined will only generate a controller and a corresponding view.
416
+ As long as you have a `{ model: 'something' }` passed to your given route, \
417
+ you can use it to generate your initial model files. If only a `path` and a `to:` are defined will only generate \
418
+ a controller and a corresponding view.
386
419
 
387
420
  To generate based on a get route for the path /apples:\
388
- `rubee generate get /apples` or `rubee gen get /apples`\
421
+ ```ruby
422
+ rubee generate get /apples # or rubee gen get /apples
423
+ ```
389
424
 
390
425
  To generate base on a patch request for the path /apples/{id}:\
391
- `rubee generate patch /apples/{id}` or `rubee gen patch /apples/{id}`
392
-
426
+ ```ruby
427
+ rubee generate patch /apples/{id} # or rubee gen patch /apples/{id}
428
+ ```
393
429
 
394
430
  Example:
395
431
  ```ruby
@@ -413,6 +449,7 @@ Rubee::Router.draw do |router|
413
449
  router.get "/apples", to: "apples#index", model: { name: 'apple' }
414
450
  end
415
451
  ```
452
+
416
453
  Will generate:
417
454
  ```bash
418
455
  ./app/controllers/apples_controller.rb # Controller with respective action
@@ -446,15 +483,16 @@ Will generate:
446
483
  ./db/create_apples.rb # Database migration file needed for creating repsective table
447
484
  ```
448
485
 
486
+
449
487
  ### Modualar application
450
488
 
451
489
  You can also use ruBee to create modular applications.\
452
490
  And attach as many subprojects you need.
453
491
  Main philosophy of attach functinality is to keep the main project clean and easy to maintain. It will still\
454
- share data with the main app. So where to define a border between main app and subprojects is up to developer.
492
+ share data with the main app. So where to define a border between the main app and subprojects is up to developer.
455
493
  Howerver by attching new subproject you will get a new folder and files configured and namespaced respectively.
456
494
 
457
- So if you need to extend your main app with a separate project you can do it easily in ruBee.
495
+ So if you need to extend your main app with a separate project, you can do it easily in ruBee.
458
496
  1. Attach new subrpoject
459
497
 
460
498
  ```bash
@@ -470,17 +508,18 @@ files will be created there.
470
508
  Rubee::Router.draw do |router|
471
509
  ...
472
510
  # draw the contract
473
- router.get '/admin/cabages', to: 'cabages#index',
474
- model: {
475
- name: 'cabage',
476
- attributes: [
477
- { name: 'id', type: :primary },
478
- { name: 'name', type: :string }
479
- ]
480
- },
481
- namespace: :admin # mandatory option for supporting namespacing
511
+ router.get '/admin/cabages', to: 'cabages#index',
512
+ model: {
513
+ name: 'cabage',
514
+ attributes: [
515
+ { name: 'id', type: :primary },
516
+ { name: 'name', type: :string }
517
+ ]
518
+ },
519
+ namespace: :admin # mandatory option for supporting namespacing
482
520
  end
483
521
  ```
522
+
484
523
  3. Run gen command
485
524
 
486
525
  ```bash
@@ -501,6 +540,7 @@ This will generate the bolierplate files:
501
540
  ```bash
502
541
  rubee db run:create_cabages
503
542
  ```
543
+
504
544
  5. Fill the views and controller with the content
505
545
 
506
546
  ```ruby
@@ -518,7 +558,7 @@ end
518
558
  rubee start # or rubee start_dev for development
519
559
  ```
520
560
 
521
- - [Back to content](#Content)
561
+ [Back to content](#content)
522
562
 
523
563
  ## Views
524
564
  View in ruBee is just a plain html/erb/react file that can be rendered from the controller.
@@ -567,6 +607,7 @@ Prerequisites: Node and NPM are required
567
607
  ```bash
568
608
  rubee react prepare # this will install react related node modules
569
609
  ```
610
+
570
611
  2. Make sure you have configured react in the configuration file
571
612
 
572
613
  ```ruby
@@ -600,7 +641,7 @@ Rubee::Router.draw do |router|
600
641
  router.get('/', to: 'welcome#show') # override it for your app
601
642
 
602
643
  router.get('/api/users', to: 'user#index', react: { view_name: 'users.tsx' })
603
- # Please note /api/users is the backend endpoint
644
+ # Please note /api/users here is the backend endpoint
604
645
  # For rendering generated /app/views/users.tsx file, you need to update react routes
605
646
  end
606
647
  ```
@@ -654,7 +695,7 @@ function Users() {
654
695
  }
655
696
 
656
697
  ```
657
- - [Back to content](#Content)
698
+ [Back to content](#content)
658
699
 
659
700
  ## Object hooks
660
701
 
@@ -697,10 +738,11 @@ after index2
697
738
  after log around
698
739
  127.0.0.1 - - [17/Feb/2025:11:42:14 -0500] "GET /apples HTTP/1.1" 401 - 0.0359
699
740
  ```
700
- - [Back to content](#Content)
701
741
 
742
+ [Back to content](#content)
702
743
 
703
744
  ## JWT based authentification
745
+
704
746
  Charge you rpoject with token based authentification system and customize it for your needs.
705
747
  include AuthTokenable module to your controller and authentificate any action you need.
706
748
 
@@ -748,7 +790,8 @@ class UsersController < Rubee::BaseController
748
790
  end
749
791
  end
750
792
  ```
751
- - [Back to content](#Content)
793
+
794
+ [Back to content](#content)
752
795
 
753
796
  ## Rubee commands
754
797
  ```bash
@@ -783,7 +826,8 @@ rubee console # start the console
783
826
  rubee test # run all tests
784
827
  rubee test auth_tokenable_test.rb # run specific tests
785
828
  ```
786
- - [Back to content](#Content)
829
+
830
+ [Back to content](#content)
787
831
 
788
832
 
789
833
  If you want to run any ruBee command within a specific ENV make sure you added it before a command.
@@ -850,6 +894,7 @@ end
850
894
  ```ruby
851
895
  TestAsyncRunnner.new.perform_async(options: {"email"=> "new@new.com", "password"=> "123"})
852
896
  ```
897
+
853
898
  ### Default engine is ThreadAsync
854
899
  However it is not yet recommended for production. Use it with cautions!
855
900
  1. Do not define any adapter in the /config/base_configuration.rb file, so default ThreadAsync will be taken.
@@ -866,7 +911,8 @@ end
866
911
 
867
912
  TestAsyncRunnner.new.perform_async(options: {"email"=> "new@new.com", "password"=> "123"})
868
913
  ```
869
- - [Back to content](#Content)
914
+
915
+ [Back to content](#content)
870
916
 
871
917
  ### Logger
872
918
 
@@ -913,7 +959,8 @@ When you trigger the controller action, the logs will look like this:
913
959
  [2025-04-26 12:32:33] INFO [method: show][class_name: WelcomeController] Execution Time: 0.000655 seconds
914
960
  [2025-04-26 12:32:33] DEBUG [method: show][class_name: WelcomeController] #<User:0x000000012c5c63e0 @id=4545, @email="ok@op.com", @password="123">
915
961
  ```
916
- - [Back to content](#Content)
962
+
963
+ [Back to content](#content)
917
964
 
918
965
  ### Contributing
919
966
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ru.Bee
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oleg Saltykov
@@ -290,7 +290,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
290
290
  requirements:
291
291
  - - ">="
292
292
  - !ruby/object:Gem::Version
293
- version: 3.2.1
293
+ version: 3.4.1
294
294
  required_rubygems_version: !ruby/object:Gem::Requirement
295
295
  requirements:
296
296
  - - ">="