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.
- checksums.yaml +4 -4
- data/lib/rubee/cli/server.rb +26 -3
- data/lib/rubee.rb +1 -1
- data/readme.md +143 -96
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a7e2d8462e9cf796796f117503bbc4d51dfebaa8d9923d5e1e6905d522a5af7
|
4
|
+
data.tar.gz: d8eb71da20db0400dc96900f73f53481c835449d4b3f1ee20979dc95e7c083f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 041f294e20e60f29ab5c03833613815fe7c462b7cc248a79aad228fbfe680e5474f6c38695c884d060a9cebfa0c0f2e918a915c102e2476e98d45df39b7a77ab
|
7
|
+
data.tar.gz: b0f0acda20a4de0d3c8bfebc32b9229c9be04f1311d7f2bab5e3d6a5fa7819a7414f05d0902988801a7ed624b681dfbd14ca3e7682a85a5daf094014ee907a0c
|
data/lib/rubee/cli/server.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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.
|
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
|
-
|
12
|
-
|
13
|
-
|
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
|
-
[](https://www.youtube.com/watch?v=ko7H70s7qq0)
|
18
|
+
## Content
|
22
19
|
|
23
|
-
- [Installation](#
|
20
|
+
- [Installation](#installation)
|
24
21
|
- [Run tests](#run-tests)
|
25
22
|
- [Draw contract](#draw-contract)
|
26
|
-
- [Model](#
|
27
|
-
- [Routing](#
|
28
|
-
- [Database](#
|
29
|
-
- [Views](#
|
30
|
-
- [Hooks](#
|
31
|
-
- [JWT based authentification](#
|
32
|
-
- [Rubee commands](#
|
33
|
-
- [Generate commands](#
|
34
|
-
- [Migration commands](#
|
35
|
-
- [Rubee console](#
|
36
|
-
- [Testing](#
|
37
|
-
- [Background jobs](#
|
38
|
-
- [Modular](#
|
39
|
-
- [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
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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.
|
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
|
-
|
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.
|
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
|
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: '
|
362
|
-
{ name: '
|
363
|
-
{ name: '
|
364
|
-
{ name: '
|
365
|
-
{ name: '
|
366
|
-
{ name: '
|
367
|
-
{ name: '
|
368
|
-
{ name: '
|
369
|
-
{ name: '
|
370
|
-
{ name: '
|
371
|
-
{ name: '
|
372
|
-
{ name: '
|
373
|
-
{ name: '
|
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
|
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
|
-
|
406
|
+
```ruby
|
407
|
+
{name: 'key', type: :string, options: { size: 50, fixed: true } }
|
408
|
+
```
|
380
409
|
|
381
410
|
Gets translated to:\
|
382
|
-
|
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
|
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
|
-
|
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
|
-
|
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
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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.
|
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.
|
293
|
+
version: 3.4.1
|
294
294
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
295
295
|
requirements:
|
296
296
|
- - ">="
|