tadb 0.3.1 → 0.3.7
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 +5 -5
- data/lib/tadb.rb +8 -4
- data/lib/tadb/db.rb +18 -0
- data/lib/tadb/table.rb +86 -0
- data/lib/tadb/utils.rb +7 -0
- metadata +16 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7c93f62a11b009c566e1fb48f69ac3ab7bd2766efacc7221cffa9b96fb1d61eb
|
4
|
+
data.tar.gz: cd883727d6213e37415bdbd8b6354d7ed7220cd89a963a6df30b573dbdafc186
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86c9aef15d2d8c2996e077b0686944967b5edd168034d9cd6847443fdcb7e1b2a3621e1b4b7daaddc59f669218d581af9ab848b5efe897f32bda20c1e3bc246a
|
7
|
+
data.tar.gz: 5f4c20841823515e815ac9db0340bc01eb085783733c69a671daa14ef08aed8dece3f2dce1115eb1f2f8ade819f781b80b0294d4e344bbe8e5ddd6bbd5b05d98
|
data/lib/tadb.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
module TADB
|
2
|
+
VERSION = '0.3.7'
|
3
|
+
end
|
4
|
+
|
5
|
+
require_relative 'tadb/db'
|
6
|
+
require_relative 'tadb/table'
|
7
|
+
require_relative 'tadb/utils'
|
8
|
+
|
data/lib/tadb/db.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
module TADB
|
3
|
+
module DB
|
4
|
+
|
5
|
+
def self.table(table_name, clear_if_content = false)
|
6
|
+
Table.new(table_name, clear_if_content)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.clear_all
|
10
|
+
#FileUtils.remove_dir('./db', true)
|
11
|
+
Utils.db_files.each do |filename|
|
12
|
+
FileUtils.chdir('./db') do
|
13
|
+
File.delete(filename)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/tadb/table.rb
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
class TADB::Table
|
5
|
+
|
6
|
+
def initialize(name, clear_if_content = false)
|
7
|
+
@name = name
|
8
|
+
clear_file_contents if clear_if_content
|
9
|
+
end
|
10
|
+
|
11
|
+
def entries
|
12
|
+
file('r') do |f|
|
13
|
+
f.readlines.map do |line|
|
14
|
+
JSON.parse(line, symbolize_names: true)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def insert(_entry)
|
20
|
+
entry = _entry.clone
|
21
|
+
entry[:id] ||= SecureRandom.uuid
|
22
|
+
|
23
|
+
validate_types(entry)
|
24
|
+
|
25
|
+
file('a') do |f|
|
26
|
+
f.puts(JSON.generate(entry))
|
27
|
+
end
|
28
|
+
entry[:id]
|
29
|
+
end
|
30
|
+
|
31
|
+
def delete(id)
|
32
|
+
remaining = entries.reject {|entry| entry[:id] === id}
|
33
|
+
|
34
|
+
file('w') do |f|
|
35
|
+
remaining.each do |entry|
|
36
|
+
f.puts(JSON.generate(entry))
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def clear
|
42
|
+
File.open(db_path, 'w') do |f|
|
43
|
+
f.sync = true
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def clear_file_contents
|
50
|
+
return unless file_present?
|
51
|
+
clear
|
52
|
+
end
|
53
|
+
|
54
|
+
def file_present?
|
55
|
+
File.file?(db_path)
|
56
|
+
end
|
57
|
+
|
58
|
+
def file(mode, &block)
|
59
|
+
Dir.mkdir('./db') unless File.exists?('./db')
|
60
|
+
clear unless File.exists?(db_path)
|
61
|
+
|
62
|
+
File.open(db_path, mode) do |file|
|
63
|
+
# The new File object is buffered mode (or non-sync mode), unless filename is a tty. See IO#flush, IO#fsync, IO#fdatasync, and IO#sync= about sync mode.
|
64
|
+
file.sync = true # https://ruby-doc.org/core-3.0.0/File.html#method-c-new-label-Examples
|
65
|
+
block.call(file)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def db_path
|
70
|
+
"./db/#{@name}"
|
71
|
+
end
|
72
|
+
|
73
|
+
def validate_types(entry)
|
74
|
+
invalid_pairs = entry.select do |_, value|
|
75
|
+
!value.is_a?(String) && !value.is_a?(Numeric) && value != true && value != false
|
76
|
+
end
|
77
|
+
|
78
|
+
unless invalid_pairs.empty?
|
79
|
+
separator = '/n/t'
|
80
|
+
pairs_description = invalid_pairs
|
81
|
+
.map {|key, value| " #{key}: #{value}"}
|
82
|
+
.join(",#{separator}")
|
83
|
+
raise TypeError.new("Can't persist field(s) because they contain non-primitive values at" + separator + pairs_description)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
data/lib/tadb/utils.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tadb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- UTN FRBA - TADP
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec-collection_matchers
|
@@ -16,64 +16,68 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.2'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.2.15
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 2.2.15
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '13.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '13.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '3.
|
61
|
+
version: '3.10'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '3.
|
68
|
+
version: '3.10'
|
69
69
|
description: Toy file based object storage for academic purposes
|
70
70
|
email:
|
71
71
|
- erwincdl@gmail.com
|
72
|
+
- ebossicarranza@frba.utn.edu.ar
|
72
73
|
executables: []
|
73
74
|
extensions: []
|
74
75
|
extra_rdoc_files: []
|
75
76
|
files:
|
76
77
|
- lib/tadb.rb
|
78
|
+
- lib/tadb/db.rb
|
79
|
+
- lib/tadb/table.rb
|
80
|
+
- lib/tadb/utils.rb
|
77
81
|
homepage: http://tadp-utn-frba.github.io/
|
78
82
|
licenses:
|
79
83
|
- MIT
|
@@ -81,11 +85,7 @@ metadata: {}
|
|
81
85
|
post_install_message:
|
82
86
|
rdoc_options: []
|
83
87
|
require_paths:
|
84
|
-
- lib
|
85
|
-
- lib/tadb/table.rb
|
86
|
-
- lib/tadb/utils.rb
|
87
|
-
- lib/tadb/version.rb
|
88
|
-
- lib/tadb.rb
|
88
|
+
- lib
|
89
89
|
required_ruby_version: !ruby/object:Gem::Requirement
|
90
90
|
requirements:
|
91
91
|
- - ">="
|
@@ -97,8 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: '0'
|
99
99
|
requirements: []
|
100
|
-
|
101
|
-
rubygems_version: 2.5.2
|
100
|
+
rubygems_version: 3.2.0.rc.1
|
102
101
|
signing_key:
|
103
102
|
specification_version: 4
|
104
103
|
summary: File based storage
|