ramdo 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +96 -0
- data/Gemfile.lock +2 -2
- data/README.md +1 -1
- data/lib/ramdo/ramdisk/darwin_wrapper.rb +8 -1
- data/lib/ramdo/ramdisk/exceptions.rb +2 -1
- data/lib/ramdo/ramdisk/factory.rb +2 -2
- data/lib/ramdo/ramdisk/instance.rb +5 -5
- data/lib/ramdo/ramdisk/linux_wrapper.rb +56 -1
- data/lib/ramdo/version.rb +2 -2
- data/ramdo.gemspec +1 -1
- data/spec/ramdisk_factory_spec.rb +1 -4
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f92ac84a314fad2f1cf45da69f8c27418ee02a8c
|
4
|
+
data.tar.gz: 5ce4534961997c995b66794f7cdf5ada80bb5b5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49203b023b7950ac56e0f33e4aa669456c9b8041f2570bf43afaa6d9f0d74a9f8324c294db1901e0f92278890355bd762b50e2b38390ab5320539d0992c330a3
|
7
|
+
data.tar.gz: f42d7d6f90642876e961ab0ffa2279e1b7f68c874d761b05dfb58d4b17b79ea17c227ff4a4ae68aa7f000d62993917e4aaa726fcc5150dccef151701d739aaa2
|
data/.gitignore
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
|
2
|
+
# Created by https://www.gitignore.io/api/ruby,osx,linux
|
3
|
+
|
4
|
+
### Ruby ###
|
5
|
+
*.gem
|
6
|
+
*.rbc
|
7
|
+
/.config
|
8
|
+
/coverage/
|
9
|
+
/InstalledFiles
|
10
|
+
/pkg/
|
11
|
+
/spec/reports/
|
12
|
+
/spec/examples.txt
|
13
|
+
/test/tmp/
|
14
|
+
/test/version_tmp/
|
15
|
+
/tmp/
|
16
|
+
|
17
|
+
# Used by dotenv library to load environment variables.
|
18
|
+
# .env
|
19
|
+
|
20
|
+
## Specific to RubyMotion:
|
21
|
+
.dat*
|
22
|
+
.repl_history
|
23
|
+
build/
|
24
|
+
*.bridgesupport
|
25
|
+
build-iPhoneOS/
|
26
|
+
build-iPhoneSimulator/
|
27
|
+
|
28
|
+
## Specific to RubyMotion (use of CocoaPods):
|
29
|
+
#
|
30
|
+
# We recommend against adding the Pods directory to your .gitignore. However
|
31
|
+
# you should judge for yourself, the pros and cons are mentioned at:
|
32
|
+
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
|
33
|
+
#
|
34
|
+
# vendor/Pods/
|
35
|
+
|
36
|
+
## Documentation cache and generated files:
|
37
|
+
/.yardoc/
|
38
|
+
/_yardoc/
|
39
|
+
/doc/
|
40
|
+
/rdoc/
|
41
|
+
|
42
|
+
## Environment normalization:
|
43
|
+
/.bundle/
|
44
|
+
/vendor/bundle
|
45
|
+
/lib/bundler/man/
|
46
|
+
|
47
|
+
# for a library or gem, you might want to ignore these files since the code is
|
48
|
+
# intended to run in multiple environments; otherwise, check them in:
|
49
|
+
# Gemfile.lock
|
50
|
+
# .ruby-version
|
51
|
+
# .ruby-gemset
|
52
|
+
|
53
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
54
|
+
.rvmrc
|
55
|
+
|
56
|
+
|
57
|
+
### OSX ###
|
58
|
+
*.DS_Store
|
59
|
+
.AppleDouble
|
60
|
+
.LSOverride
|
61
|
+
|
62
|
+
# Icon must end with two \r
|
63
|
+
Icon
|
64
|
+
|
65
|
+
|
66
|
+
# Thumbnails
|
67
|
+
._*
|
68
|
+
|
69
|
+
# Files that might appear in the root of a volume
|
70
|
+
.DocumentRevisions-V100
|
71
|
+
.fseventsd
|
72
|
+
.Spotlight-V100
|
73
|
+
.TemporaryItems
|
74
|
+
.Trashes
|
75
|
+
.VolumeIcon.icns
|
76
|
+
.com.apple.timemachine.donotpresent
|
77
|
+
|
78
|
+
# Directories potentially created on remote AFP share
|
79
|
+
.AppleDB
|
80
|
+
.AppleDesktop
|
81
|
+
Network Trash Folder
|
82
|
+
Temporary Items
|
83
|
+
.apdisk
|
84
|
+
|
85
|
+
|
86
|
+
### Linux ###
|
87
|
+
*~
|
88
|
+
|
89
|
+
# temporary files which can be created if a process still has a handle open of a deleted file
|
90
|
+
.fuse_hidden*
|
91
|
+
|
92
|
+
# KDE directory preferences
|
93
|
+
.directory
|
94
|
+
|
95
|
+
# Linux trash folder which might appear on any partition or disk
|
96
|
+
.Trash-*
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -42,6 +42,13 @@ module Ramdo
|
|
42
42
|
list().select { |disk| disk.device == device }.first
|
43
43
|
end
|
44
44
|
|
45
|
+
def destroy(instance)
|
46
|
+
return false unless File.exist? instance.device
|
47
|
+
|
48
|
+
line = Cocaine::CommandLine.new("hdiutil", "detach :device")
|
49
|
+
line.run(device: instance.device)
|
50
|
+
end
|
51
|
+
|
45
52
|
private
|
46
53
|
def enough_ram?(size)
|
47
54
|
size = Filesize.from(size) if size.is_a? String
|
@@ -61,4 +68,4 @@ module Ramdo
|
|
61
68
|
end
|
62
69
|
end
|
63
70
|
end
|
64
|
-
end
|
71
|
+
end
|
@@ -2,7 +2,7 @@ module Ramdo
|
|
2
2
|
module Ramdisk
|
3
3
|
class Factory
|
4
4
|
def self.get
|
5
|
-
if RUBY_PLATFORM =~ /
|
5
|
+
if RUBY_PLATFORM =~ /linux/
|
6
6
|
LinuxWrapper.new
|
7
7
|
elsif RUBY_PLATFORM =~ /darwin/
|
8
8
|
DarwinWrapper.new
|
@@ -13,4 +13,4 @@ module Ramdo
|
|
13
13
|
end
|
14
14
|
|
15
15
|
end
|
16
|
-
end
|
16
|
+
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module Ramdo
|
2
2
|
module Ramdisk
|
3
3
|
class Instance
|
4
|
+
NAME_PATTERN = /ramdo_[A-Za-z0-9_-]+$/
|
5
|
+
|
4
6
|
def self.generate_name
|
5
7
|
"ramdo_#{SecureRandom.uuid}"
|
6
8
|
end
|
@@ -14,11 +16,9 @@ module Ramdo
|
|
14
16
|
end
|
15
17
|
|
16
18
|
def destroy!
|
17
|
-
|
18
|
-
|
19
|
-
line = Cocaine::CommandLine.new("hdiutil", "detach :device")
|
20
|
-
line.run(device: @device)
|
19
|
+
wrapper = Ramdisk::Factory.get
|
20
|
+
wrapper.destroy self
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
24
|
-
end
|
24
|
+
end
|
@@ -1,7 +1,62 @@
|
|
1
1
|
module Ramdo
|
2
2
|
module Ramdisk
|
3
3
|
class LinuxWrapper
|
4
|
+
def initialize
|
5
|
+
@shm_path = "/dev/shm"
|
6
|
+
end
|
4
7
|
|
8
|
+
def list
|
9
|
+
disks = []
|
10
|
+
|
11
|
+
found_shm = false
|
12
|
+
line = Cocaine::CommandLine.new("cat", "/proc/mounts")
|
13
|
+
line.run.each_line do |line|
|
14
|
+
found_shm ||= line =~ /^tmpfs \/dev\/shm tmpfs/
|
15
|
+
end
|
16
|
+
raise GeneralRamdiskException.new("#{@shm_path} not found") unless found_shm
|
17
|
+
|
18
|
+
Dir.glob(@shm_path + '/*').each do |dir|
|
19
|
+
if dir =~ Instance::NAME_PATTERN
|
20
|
+
disks << Instance.new(path: dir, device: @shm_path, size: Filesize.from("1 GB"))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
disks
|
25
|
+
end
|
26
|
+
|
27
|
+
def create(size)
|
28
|
+
size = Filesize.from(size) if size.is_a? String
|
29
|
+
raise NotEnoughFreeRamException.new unless enough_ram? size
|
30
|
+
|
31
|
+
# Create new directory as dedicated space
|
32
|
+
path = [@shm_path, Instance.generate_name].join('/')
|
33
|
+
Dir.mkdir(path)
|
34
|
+
|
35
|
+
# Receive all disk and select just created one
|
36
|
+
list().select { |disk| disk.path == path }.first
|
37
|
+
end
|
38
|
+
|
39
|
+
def destroy(instance)
|
40
|
+
return false unless File.exist? instance.path
|
41
|
+
|
42
|
+
Dir.glob(instance.path + "/*").each { |file| File.delete(file) if File.file? file }
|
43
|
+
Dir.rmdir(instance.path)
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
def enough_ram?(size)
|
48
|
+
size = Filesize.from(size) if size.is_a? String
|
49
|
+
free_mem = ""
|
50
|
+
|
51
|
+
line = Cocaine::CommandLine.new("cat", "/proc/meminfo")
|
52
|
+
line.run.each_line do |line|
|
53
|
+
if line =~ /^MemFree:[\s]+([0-9]+ kB)/
|
54
|
+
free_mem = Regexp.last_match[1]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
Filesize.from(free_mem) > size
|
59
|
+
end
|
5
60
|
end
|
6
61
|
end
|
7
|
-
end
|
62
|
+
end
|
data/lib/ramdo/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module Ramdo
|
2
|
-
VERSION = '0.1.
|
3
|
-
end
|
2
|
+
VERSION = '0.1.2'
|
3
|
+
end
|
data/ramdo.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Ramdo::VERSION
|
9
9
|
spec.authors = ["Patrick Franken"]
|
10
10
|
spec.email = ["p.franken@aisler.net"]
|
11
|
-
spec.summary = "Fast temporary store
|
11
|
+
spec.summary = "Fast temporary store powered by RAM disks"
|
12
12
|
spec.description = spec.summary
|
13
13
|
spec.homepage = "http://aisler.net"
|
14
14
|
spec.license = "MIT"
|
@@ -23,7 +23,7 @@ describe Ramdisk::Factory do
|
|
23
23
|
expect(wrapper.send(:enough_ram?, '100 GB')).to be_falsey
|
24
24
|
end
|
25
25
|
|
26
|
-
it 'should create a new RAM disk and save a file to it' do
|
26
|
+
it 'should create a new RAM disk and save a file to it', focus: true do
|
27
27
|
size = '100 MB'
|
28
28
|
|
29
29
|
wrapper = Ramdisk::Factory.get
|
@@ -31,7 +31,6 @@ describe Ramdisk::Factory do
|
|
31
31
|
|
32
32
|
expect(disk).to be_an(Ramdisk::Instance)
|
33
33
|
expect { IO.write("#{disk.path}/test.bin", IO.read('/dev/urandom', 100000)) }.not_to raise_error
|
34
|
-
expect(disk.size).to eq(Filesize.from(size))
|
35
34
|
end
|
36
35
|
|
37
36
|
it 'should remove a RAM disk' do
|
@@ -54,7 +53,6 @@ describe Ramdisk::Factory do
|
|
54
53
|
expect(list.first.device).not_to be_empty
|
55
54
|
expect(File.exist?(list.first.device)).to be_truthy
|
56
55
|
expect(Dir.exist?(list.first.path)).to be_truthy
|
57
|
-
expect(list.first.size).to eq(Filesize.from('100 MB'))
|
58
56
|
|
59
57
|
disk = wrapper.create('200 MB')
|
60
58
|
|
@@ -63,6 +61,5 @@ describe Ramdisk::Factory do
|
|
63
61
|
expect(list.last.device).not_to be_empty
|
64
62
|
expect(File.exist?(list.last.device)).to be_truthy
|
65
63
|
expect(Dir.exist?(list.last.path)).to be_truthy
|
66
|
-
expect(list.last.size).to eq(Filesize.from('200 MB'))
|
67
64
|
end
|
68
65
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ramdo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick Franken
|
@@ -108,13 +108,14 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
-
description: Fast temporary store
|
111
|
+
description: Fast temporary store powered by RAM disks
|
112
112
|
email:
|
113
113
|
- p.franken@aisler.net
|
114
114
|
executables: []
|
115
115
|
extensions: []
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
|
+
- ".gitignore"
|
118
119
|
- Gemfile
|
119
120
|
- Gemfile.lock
|
120
121
|
- LICENSE.txt
|
@@ -156,9 +157,8 @@ rubyforge_project:
|
|
156
157
|
rubygems_version: 2.4.5.1
|
157
158
|
signing_key:
|
158
159
|
specification_version: 4
|
159
|
-
summary: Fast temporary store
|
160
|
+
summary: Fast temporary store powered by RAM disks
|
160
161
|
test_files:
|
161
162
|
- spec/ramdisk_factory_spec.rb
|
162
163
|
- spec/spec_helper.rb
|
163
164
|
- spec/store_spec.rb
|
164
|
-
has_rdoc:
|