io_shuten 0.1.0.dev7 → 0.1.1.dev1
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.
- data/Gemfile +8 -14
- data/Gemfile.lock +42 -58
- data/README.md +148 -24
- data/Rakefile +0 -29
- data/benchmark/viiite-template-redis.rb +75 -0
- data/benchmark/viiite-template.rb +24 -31
- data/benchmarks.sh +7 -46
- data/benchmarks/redis.kvc.rb +8 -0
- data/benchmarks/redis.kvs.rb +8 -0
- data/io_shuten.gemspec +30 -92
- data/lib/io_shuten/redis.rb +1 -1
- data/lib/io_shuten/stores/redis/key_value/collection.rb +15 -3
- data/lib/io_shuten/version.rb +1 -1
- data/spec/lib/redis_spec.rb +5 -5
- data/spec/spec_helper.rb +1 -3
- metadata +109 -131
- data/.rvmrc +0 -71
- data/.simplecov +0 -16
- data/.yardopts +0 -3
- data/doc/IO_3A_3ABuffer.html +0 -198
- data/doc/IO_shuten.html +0 -126
- data/doc/IO_shuten/Base.html +0 -1062
- data/doc/IO_shuten/Base/FileAccessError.html +0 -129
- data/doc/IO_shuten/Base/FileNotFoundError.html +0 -129
- data/doc/IO_shuten/Base/NodeNameError.html +0 -129
- data/doc/IO_shuten/Base/NodeNotFoundError.html +0 -129
- data/doc/IO_shuten/Base/NotYetImplemented.html +0 -129
- data/doc/IO_shuten/Buffer.html +0 -1822
- data/doc/IO_shuten/Errors.html +0 -119
- data/doc/IO_shuten/Errors/FileAccessError.html +0 -129
- data/doc/IO_shuten/Errors/FileNotFoundError.html +0 -129
- data/doc/IO_shuten/Errors/NodeExistsError.html +0 -129
- data/doc/IO_shuten/Errors/NodeNameError.html +0 -129
- data/doc/IO_shuten/Errors/NodeNameExistsError.html +0 -129
- data/doc/IO_shuten/Errors/NodeNotFoundError.html +0 -129
- data/doc/IO_shuten/Errors/NotYetImplemented.html +0 -129
- data/doc/IO_shuten/Memory.html +0 -1778
- data/doc/IO_shuten/Mongo.html +0 -166
- data/doc/IO_shuten/Redis.html +0 -868
- data/doc/IO_shuten/Stores.html +0 -121
- data/doc/IO_shuten/Stores/BaseContainer.html +0 -377
- data/doc/IO_shuten/Stores/Mongo.html +0 -121
- data/doc/IO_shuten/Stores/Mongo/Collection.html +0 -109
- data/doc/IO_shuten/Stores/Mongo/GridFS.html +0 -109
- data/doc/IO_shuten/Stores/Redis.html +0 -123
- data/doc/IO_shuten/Stores/Redis/Container.html +0 -778
- data/doc/IO_shuten/Stores/Redis/KeyValue.html +0 -279
- data/doc/IO_shuten/Stores/Redis/KeyValue/Collection.html +0 -504
- data/doc/IO_shuten/Stores/Redis/KeyValue/Single.html +0 -438
- data/doc/IO_shuten/Stores/Redis/PubSub.html +0 -245
- data/doc/IO_shuten/Zmq.html +0 -166
- data/doc/_index.html +0 -375
- data/doc/class_list.html +0 -47
- data/doc/css/blame.css +0 -11
- data/doc/css/common.css +0 -1
- data/doc/css/full_list.css +0 -55
- data/doc/css/style.css +0 -322
- data/doc/file.README.html +0 -158
- data/doc/file_list.html +0 -49
- data/doc/frames.html +0 -13
- data/doc/index.html +0 -158
- data/doc/js/app.js +0 -205
- data/doc/js/full_list.js +0 -167
- data/doc/js/jquery.js +0 -16
- data/doc/method_list.html +0 -390
- data/doc/top-level-namespace.html +0 -105
data/Gemfile
CHANGED
@@ -1,34 +1,28 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
|
-
gem "iobuffer", "~> 1.
|
3
|
+
gem "iobuffer", "~> 1.1.2"
|
4
4
|
|
5
5
|
# REDIS STORE
|
6
|
-
gem "hiredis", "~> 0.4.
|
7
|
-
gem "redis", "~>
|
8
|
-
gem "redis-namespace"
|
6
|
+
gem "hiredis", "~> 0.4.5"
|
7
|
+
gem "redis", "~> 3.0.2", :require => ["redis/connection/hiredis", "redis"]
|
8
|
+
gem "redis-namespace", "~> 1.2.1"
|
9
9
|
|
10
10
|
# MONGO STORE
|
11
11
|
gem "bson_ext", "~> 1.5.2"
|
12
12
|
gem "mongo", "~> 1.5.2"
|
13
13
|
|
14
14
|
# ZMQ "STORE"
|
15
|
-
gem "ffi"
|
16
|
-
gem "ffi-rzmq"
|
15
|
+
gem "ffi", "~> 1.1.5"
|
16
|
+
gem "ffi-rzmq", "~> 0.9.6"
|
17
17
|
|
18
18
|
group :development, :test do
|
19
19
|
gem "rake"
|
20
20
|
gem "jeweler"
|
21
21
|
|
22
|
-
gem "rspec", "~> 2.
|
23
|
-
gem "simplecov", :require => false
|
24
|
-
gem "simplecov-rcov", :require => false
|
25
|
-
gem "simplecov-csv", :require => false
|
26
|
-
|
27
|
-
gem "redcarpet"
|
28
|
-
gem "yard"
|
29
|
-
gem "yard-blame"
|
22
|
+
gem "rspec", "~> 2.11.0"
|
30
23
|
|
31
24
|
gem "pry"
|
25
|
+
gem "pry-doc"
|
32
26
|
|
33
27
|
gem "alf"
|
34
28
|
gem "fastercsv"
|
data/Gemfile.lock
CHANGED
@@ -8,66 +8,55 @@ GEM
|
|
8
8
|
bson (1.5.2)
|
9
9
|
bson_ext (1.5.2)
|
10
10
|
bson (= 1.5.2)
|
11
|
-
coderay (0.
|
11
|
+
coderay (1.0.8)
|
12
12
|
diff-lcs (1.1.3)
|
13
|
-
fastercsv (1.5.
|
14
|
-
ffi (1.
|
15
|
-
ffi-rzmq (0.9.
|
13
|
+
fastercsv (1.5.5)
|
14
|
+
ffi (1.1.5)
|
15
|
+
ffi-rzmq (0.9.6)
|
16
16
|
ffi
|
17
17
|
git (1.2.5)
|
18
18
|
gnuplot (2.3.6)
|
19
|
-
highline (1.6.
|
20
|
-
hiredis (0.4.
|
21
|
-
iobuffer (1.
|
22
|
-
jeweler (1.
|
19
|
+
highline (1.6.15)
|
20
|
+
hiredis (0.4.5)
|
21
|
+
iobuffer (1.1.2)
|
22
|
+
jeweler (1.8.4)
|
23
23
|
bundler (~> 1.0)
|
24
24
|
git (>= 1.2.5)
|
25
25
|
rake
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
rdoc
|
27
|
+
json (1.7.5)
|
28
|
+
method_source (0.8.1)
|
29
29
|
mongo (1.5.2)
|
30
30
|
bson (= 1.5.2)
|
31
|
-
multi_json (1.0.4)
|
32
31
|
myrrha (1.2.2)
|
33
|
-
pry (0.9.
|
34
|
-
coderay (~> 0.
|
35
|
-
method_source (~> 0.
|
36
|
-
|
37
|
-
|
38
|
-
|
32
|
+
pry (0.9.10)
|
33
|
+
coderay (~> 1.0.5)
|
34
|
+
method_source (~> 0.8)
|
35
|
+
slop (~> 3.3.1)
|
36
|
+
pry-doc (0.4.4)
|
37
|
+
pry (>= 0.9.9.6)
|
38
|
+
yard (~> 0.8.1)
|
39
|
+
quickl (0.4.3)
|
39
40
|
rake (0.9.2.2)
|
40
|
-
|
41
|
-
|
42
|
-
redis
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
rspec-
|
47
|
-
rspec-
|
48
|
-
|
49
|
-
rspec-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
sexp_processor (3.0.10)
|
55
|
-
simplecov (0.5.4)
|
56
|
-
multi_json (~> 1.0.3)
|
57
|
-
simplecov-html (~> 0.5.3)
|
58
|
-
simplecov-csv (0.1.3)
|
59
|
-
simplecov
|
60
|
-
simplecov-html (0.5.3)
|
61
|
-
simplecov-rcov (0.2.3)
|
62
|
-
simplecov (>= 0.4.1)
|
63
|
-
slop (2.1.0)
|
41
|
+
rdoc (3.12)
|
42
|
+
json (~> 1.4)
|
43
|
+
redis (3.0.2)
|
44
|
+
redis-namespace (1.2.1)
|
45
|
+
redis (~> 3.0.0)
|
46
|
+
rspec (2.11.0)
|
47
|
+
rspec-core (~> 2.11.0)
|
48
|
+
rspec-expectations (~> 2.11.0)
|
49
|
+
rspec-mocks (~> 2.11.0)
|
50
|
+
rspec-core (2.11.1)
|
51
|
+
rspec-expectations (2.11.3)
|
52
|
+
diff-lcs (~> 1.1.3)
|
53
|
+
rspec-mocks (2.11.3)
|
54
|
+
slop (3.3.3)
|
64
55
|
viiite (0.2.0)
|
65
56
|
alf (~> 0.10.1)
|
66
57
|
gnuplot (~> 2.3.6)
|
67
58
|
json
|
68
|
-
yard (0.
|
69
|
-
yard-blame (0.0.1)
|
70
|
-
yard
|
59
|
+
yard (0.8.3)
|
71
60
|
|
72
61
|
PLATFORMS
|
73
62
|
ruby
|
@@ -76,21 +65,16 @@ DEPENDENCIES
|
|
76
65
|
alf
|
77
66
|
bson_ext (~> 1.5.2)
|
78
67
|
fastercsv
|
79
|
-
ffi
|
80
|
-
ffi-rzmq
|
81
|
-
hiredis (~> 0.4.
|
82
|
-
iobuffer (~> 1.
|
68
|
+
ffi (~> 1.1.5)
|
69
|
+
ffi-rzmq (~> 0.9.6)
|
70
|
+
hiredis (~> 0.4.5)
|
71
|
+
iobuffer (~> 1.1.2)
|
83
72
|
jeweler
|
84
73
|
mongo (~> 1.5.2)
|
85
74
|
pry
|
75
|
+
pry-doc
|
86
76
|
rake
|
87
|
-
|
88
|
-
redis (~>
|
89
|
-
|
90
|
-
rspec (~> 2.8.0)
|
91
|
-
simplecov
|
92
|
-
simplecov-csv
|
93
|
-
simplecov-rcov
|
77
|
+
redis (~> 3.0.2)
|
78
|
+
redis-namespace (~> 1.2.1)
|
79
|
+
rspec (~> 2.11.0)
|
94
80
|
viiite
|
95
|
-
yard
|
96
|
-
yard-blame
|
data/README.md
CHANGED
@@ -2,6 +2,11 @@
|
|
2
2
|
|
3
3
|
Use databases as IO handler like you would do with files and streams.
|
4
4
|
|
5
|
+
Backends are (or will be): Redis, MongoDB.
|
6
|
+
|
7
|
+
Special backend will be: ZeroMQ (not a database but cool message queue backend).
|
8
|
+
|
9
|
+
Wishes? MySQL, Postgres, Sqlite? Other NoSQLs, memcache? Tell me!
|
5
10
|
|
6
11
|
## Motivation
|
7
12
|
|
@@ -9,16 +14,37 @@ One purpose for creating this project is to have an IO like interface to databas
|
|
9
14
|
|
10
15
|
With this gem you should have the possibility to use redis or mongodb as endpoints for IO related tasks like logging.
|
11
16
|
|
12
|
-
|
17
|
+
And logging was my first idea for this project. I want to have the possibility to set my own logger (endpoint) in a Ruby/Rails app.
|
18
|
+
|
19
|
+
Also you could use different logger endpoints in the same app for different purposes but without bloating your app/tmp dir with huge files.
|
20
|
+
|
21
|
+
If you have more cool ideas, what to do with it, tell me (and I will put it in this README).
|
22
|
+
|
23
|
+
### Example
|
13
24
|
|
14
25
|
```ruby
|
15
26
|
require "io_shuten"
|
16
27
|
require "logger"
|
17
28
|
|
18
|
-
|
29
|
+
# use redis namespace to separate and avoid naming conflicts
|
30
|
+
IO_shuten::Redis.redis = Redis::Namespace.new("io_shuten:test", :redis => Redis.new)
|
31
|
+
|
32
|
+
# instantiate logdev and logger
|
33
|
+
logdev = IO_shuten::Redis.new(:app_log, :key_value, :collection)
|
19
34
|
logger = Logger.new(logdev)
|
20
35
|
|
21
|
-
|
36
|
+
# log something
|
37
|
+
logger.info "This message will be stored in redis as a single key."
|
38
|
+
logger.debug "And this message will be also a single key"
|
39
|
+
|
40
|
+
#check
|
41
|
+
puts logdev.read #=> will return both messages as a single string
|
42
|
+
```
|
43
|
+
|
44
|
+
And check in redis for the keys:
|
45
|
+
|
46
|
+
```bash
|
47
|
+
redis-cli KEYS "io_shuten/test"
|
22
48
|
```
|
23
49
|
|
24
50
|
|
@@ -27,44 +53,137 @@ logger.info "This message will be stored in memory."
|
|
27
53
|
In japanese `io` means *500* or *big amount*, `shū・ten` means *endpoint* (train terminus/last stop or mathematical endpoint).
|
28
54
|
|
29
55
|
|
30
|
-
## Types
|
56
|
+
## Storage Types
|
57
|
+
|
58
|
+
|
59
|
+
### IO_shuten::Redis
|
31
60
|
|
61
|
+
Stores content in a redis database.
|
32
62
|
|
33
|
-
### IO_shuten::Memory
|
34
63
|
|
35
|
-
|
64
|
+
#### Backends
|
36
65
|
|
37
|
-
|
66
|
+
The redis storage system provides two different backends: `KeyValue` and `PubSub`.
|
38
67
|
|
39
|
-
Provides all methods of StringIO.
|
40
68
|
|
41
|
-
|
69
|
+
##### KeyValue
|
42
70
|
|
43
|
-
|
44
|
-
(Install it with `gem install iobuffer`.)
|
71
|
+
Has two different storage types: `Single` and `Collection`.
|
45
72
|
|
46
|
-
Performance depends on machine and ruby version. Almost same throughput, on 1.9.3 is the native StringIO better than the IO::Buffer cext.
|
47
73
|
|
48
|
-
|
74
|
+
##### KeyValue::Single
|
49
75
|
|
50
|
-
Stores
|
76
|
+
Stores every message in a single key in redis (like a big document).
|
77
|
+
|
78
|
+
Choose this, if you have only small amount of chunks to store.
|
79
|
+
More reads, less writes.
|
80
|
+
|
81
|
+
```ruby
|
82
|
+
require "io_shuten"
|
83
|
+
IO_shuten::Redis.redis = Redis::Namespace.new("io_shuten:key_value:single:test", :redis => Redis.new)
|
84
|
+
|
85
|
+
io_object = IO_shuten::Redis.new(:my_node, :key_value, :single)
|
86
|
+
|
87
|
+
io_object.write "my awesome data!\n"
|
88
|
+
io_object.write "chunky bacon!!!\n"
|
89
|
+
|
90
|
+
io_object.read
|
91
|
+
```
|
92
|
+
|
93
|
+
After this you will have a single key in redis like:
|
94
|
+
|
95
|
+
```
|
96
|
+
$ redis-cli KEYS "io_shuten:key_value:collection:test:*"
|
97
|
+
1) "io_shuten:key_value:single:test:my_node"
|
98
|
+
```
|
99
|
+
|
100
|
+
The content is a LIST:
|
101
|
+
|
102
|
+
```
|
103
|
+
$ redis-cli LRANGE "io_shuten:key_value:single:test:my_node" 0 -1
|
104
|
+
1) "my awesome data!\n"
|
105
|
+
2) "chunky bacon!!!\n"
|
106
|
+
```
|
51
107
|
|
52
|
-
|
53
|
-
|
108
|
+
##### KeyValue::Collection
|
109
|
+
|
110
|
+
Stores every single message in its own key. The provided node_name acts as namespace.
|
111
|
+
|
112
|
+
Choose this if you have huge amounts of chunks, especially constantly coming in, like logging events.
|
113
|
+
More writes, less reads.
|
114
|
+
|
115
|
+
```ruby
|
116
|
+
require "io_shuten"
|
117
|
+
IO_shuten::Redis.redis = Redis::Namespace.new("io_shuten:key_value:collection:test", :redis => Redis.new)
|
118
|
+
|
119
|
+
io_object = IO_shuten::Redis.new(:my_node, :key_value, :collection)
|
120
|
+
|
121
|
+
io_object.write "my awesome data!\n"
|
122
|
+
io_object.write "chunky bacon!!!\n"
|
123
|
+
|
124
|
+
io_object.read
|
125
|
+
```
|
126
|
+
|
127
|
+
After this you will have two keys in redis like:
|
128
|
+
|
129
|
+
```
|
130
|
+
$ redis-cli KEYS "io_shuten:key_value:collection:test:*"
|
131
|
+
1) "io_shuten:key_value:collection:test:my_node:0000000000000000"
|
132
|
+
2) "io_shuten:key_value:collection:test:my_node:0000000000000001"
|
133
|
+
3) "io_shuten:key_value:collection:test:my_node:0000000000000002"
|
134
|
+
```
|
135
|
+
The first key with 16 zeros is a counter (to avoid long running key searches to get the count).
|
136
|
+
|
137
|
+
Numerical part is a 16 digit number, should be enough for 10 quadrillion (minus 1) messages per node.
|
138
|
+
(The reason is for internal sorting of the keys)
|
139
|
+
|
140
|
+
With messages of an average length of only 16 bytes this would end up in 160 petabytes of raw data.
|
141
|
+
|
142
|
+
|
143
|
+
##### PubSub
|
144
|
+
|
145
|
+
**Not yet implemented!**
|
146
|
+
|
147
|
+
Will have two types: `Publisher` and `Subscriber`.
|
148
|
+
|
149
|
+
As logger backend only the `PubSub::Publisher` will be usable,
|
150
|
+
but you can use a redis subscriber on the other side to receive the messages and do something with them.
|
54
151
|
|
55
152
|
### IO_shuten::Mongo
|
56
153
|
|
57
|
-
|
154
|
+
**Not yet implemented!**
|
58
155
|
|
59
|
-
Provides basic methods like `#read`, `#write` and `#close`.
|
60
|
-
A logger only needs write and close methods of an IO object.
|
61
156
|
|
62
157
|
### IO_shuten::Zmq
|
63
158
|
|
64
|
-
|
159
|
+
**Not yet implemented!**
|
160
|
+
|
161
|
+
|
162
|
+
### IO_shuten::Memory and IO_shuten::Buffer
|
163
|
+
|
164
|
+
**Maybe only useful as temporary storage for a session.**
|
165
|
+
|
166
|
+
_These implementations were the first tests and aren't intended to be used in production._
|
65
167
|
|
66
|
-
|
67
|
-
|
168
|
+
> An in-memory storage system (handles simple StringIO/IOBuffer objects).
|
169
|
+
>
|
170
|
+
> Offers write-to-disk for single instance and all instances.
|
171
|
+
>
|
172
|
+
> Provides all methods of StringIO respectively IOBuffer.
|
173
|
+
>
|
174
|
+
> _IOBuffer usage:_ Install it with `gem install iobuffer` first.
|
175
|
+
>
|
176
|
+
> Performance of both are nearly the same.
|
177
|
+
>
|
178
|
+
> Read the _documentation_ if you really want to use them.
|
179
|
+
|
180
|
+
|
181
|
+
## [Documentation](http://asaaki.github.com/io_shuten/doc/index.html)
|
182
|
+
|
183
|
+
|
184
|
+
## Future Plans
|
185
|
+
|
186
|
+
Maybe a special Logger, especially for Redis (to get benefits of the key search).
|
68
187
|
|
69
188
|
|
70
189
|
## Not for production!
|
@@ -78,15 +197,20 @@ Feel free to contribute, write issues if you want to support me with your ideas
|
|
78
197
|
|
79
198
|
## git flowed
|
80
199
|
|
81
|
-
Development will happen in the `develop` branch
|
200
|
+
Development will happen in the `develop` branch, `master` should be in a deployable state.
|
82
201
|
|
83
|
-
Read more about `git flow` and the
|
202
|
+
Read more about `git flow` and the branching model here:
|
84
203
|
|
85
204
|
* http://nvie.com/posts/a-successful-git-branching-model/
|
86
205
|
* https://github.com/nvie/gitflow
|
87
206
|
|
88
207
|
I like this approach and try to use it whenever possible, also in one-man-development.
|
89
208
|
|
209
|
+
### Contribute
|
210
|
+
|
211
|
+
Fork it, create your feature in a `feature/branch` based on `develop`(!), make a pull request.
|
212
|
+
|
213
|
+
Hotfixes for master can be made out of master branch, of course. ;o)
|
90
214
|
|
91
215
|
## License
|
92
216
|
|
data/Rakefile
CHANGED
@@ -7,18 +7,12 @@ require "jeweler"
|
|
7
7
|
require "rspec"
|
8
8
|
require "rspec/core/rake_task"
|
9
9
|
|
10
|
-
require "yard"
|
11
|
-
|
12
10
|
|
13
11
|
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
14
12
|
require "io_shuten/version"
|
15
13
|
|
16
|
-
|
17
|
-
|
18
14
|
RUBY_ENGINE = '(no engine)' unless defined? RUBY_ENGINE
|
19
15
|
|
20
|
-
|
21
|
-
|
22
16
|
Jeweler::Tasks.new do |gem|
|
23
17
|
gem.name = "io_shuten"
|
24
18
|
gem.version = IO_shuten::VERSION
|
@@ -31,8 +25,6 @@ Jeweler::Tasks.new do |gem|
|
|
31
25
|
gem.description = "IO::shuten – Use databases as IO handler like you would do with files and streams."
|
32
26
|
end
|
33
27
|
|
34
|
-
|
35
|
-
|
36
28
|
task :gem => :build
|
37
29
|
|
38
30
|
desc "Release current gem version to rubygems.org"
|
@@ -49,21 +41,6 @@ task RSpec::Core::RakeTask.new(:spec) do |t|
|
|
49
41
|
t.verbose = false
|
50
42
|
end
|
51
43
|
|
52
|
-
desc "Run all specs + code coverage"
|
53
|
-
task "spec:cov" do
|
54
|
-
ENV["COV"] = 'true'
|
55
|
-
Rake::Task["spec"].invoke
|
56
|
-
end
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
YARD::Rake::YardocTask.new do |t|
|
61
|
-
t.files = ['lib/**/*.rb']
|
62
|
-
#t.options = ['--any', '--extra', '--opts']
|
63
|
-
end
|
64
|
-
|
65
|
-
|
66
|
-
|
67
44
|
desc "Starts IRB with env"
|
68
45
|
task :irb do
|
69
46
|
sh "irb -I lib -r io_shuten"
|
@@ -74,15 +51,11 @@ task :pry do
|
|
74
51
|
sh "pry -I lib -r io_shuten --no-pager"
|
75
52
|
end
|
76
53
|
|
77
|
-
|
78
|
-
|
79
54
|
desc "Prints current environment"
|
80
55
|
task :envinfo do
|
81
56
|
puts ['RUBY:',RUBY_PLATFORM,RUBY_ENGINE,RUBY_VERSION].join(" ")
|
82
57
|
end
|
83
58
|
|
84
|
-
|
85
|
-
|
86
59
|
desc "RBX ONLY: Clean up rbc and .rbx"
|
87
60
|
task :rbx_clean do
|
88
61
|
Dir["./**/*.rbc","./**/.*.rbc"].each do |f|
|
@@ -91,8 +64,6 @@ task :rbx_clean do
|
|
91
64
|
sh "rm -rf .rbx" if File.exists?(".rbx") && File.directory?(".rbx")
|
92
65
|
end
|
93
66
|
|
94
|
-
|
95
|
-
|
96
67
|
desc "Runs complex viiite benchmark suite"
|
97
68
|
task :benchmark do
|
98
69
|
sh "./benchmarks.sh"
|