tadb 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a5a09612a6813d6b0189e55a15ec9eacab887498
4
- data.tar.gz: 9a979bd35ae38a76f21a15e6259693e865341d71
3
+ metadata.gz: 0f80b3709c6d94354ea8ba525b9831a165b6fe26
4
+ data.tar.gz: eee504adeeefe58d7f33808829472a38da42bd74
5
5
  SHA512:
6
- metadata.gz: 97ac92e74fbab2b9e566aa5843a1d09450a2f2a6026eba7aec8d2de0bf04cd928d188c255c8e3c51806765337abe56afd9c622d75cedbf5270a153b84af6650a
7
- data.tar.gz: de8e970f03b3d6339984798a39adf58d63878755a5d5da4c5024714d3fb6d9194a0dda99f493742dc47ab11a8361ffa93ca9369a9926678e146b06098c64f62e
6
+ metadata.gz: ec9a255021177f287a0c1aac98484bce94342c0ccfdad710989f3ac7e6b64ecf09603057fe3f28d04a0a4d456502802657405209b0a220f026df8e54fa7c936f
7
+ data.tar.gz: 5b780f0f50eefac645aa24ad3234f541dfd10186974343bcddf45389468ba7f7f7b216c16bbac67a1914bdd37a93dd9fc43cf213c6e4cdf8149a18fb2f6a7ad9
@@ -0,0 +1,4 @@
1
+ require_relative './tadb/db'
2
+ require_relative './tadb/table'
3
+ require_relative './tadb/version'
4
+ require_relative './tadb/utils'
@@ -0,0 +1,18 @@
1
+ require 'fileutils'
2
+ module TADB
3
+ module DB
4
+
5
+ def self.table(table_name)
6
+ Table.new(table_name)
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
@@ -0,0 +1,70 @@
1
+ require 'securerandom'
2
+ require 'json'
3
+
4
+ class TADB::Table
5
+
6
+ def initialize(name)
7
+ @name = name
8
+ end
9
+
10
+ def entries
11
+ file('r') do |f|
12
+ f.readlines.map do |line|
13
+ JSON.parse(line).map {|k, v| [k.to_sym, v]}.to_h
14
+ end
15
+ end
16
+ end
17
+
18
+ def insert(_entry)
19
+ entry = _entry.clone
20
+ entry[:id] ||= SecureRandom.uuid
21
+
22
+ validate_types(entry)
23
+
24
+ file('a') do |f|
25
+ f.puts(JSON.generate(entry))
26
+ end
27
+ entry[:id]
28
+ end
29
+
30
+ def delete(id)
31
+ remaining = entries.reject {|entry| entry[:id] === id}
32
+
33
+ file('w') do |f|
34
+ remaining.each do |entry|
35
+ f.puts(JSON.generate(entry))
36
+ end
37
+ end
38
+ end
39
+
40
+ def clear
41
+ File.open(db_path, 'w') {}
42
+ end
43
+
44
+ private
45
+
46
+ def file(mode, &block)
47
+ Dir.mkdir('./db') unless File.exists?('./db')
48
+ clear unless File.exists?(db_path)
49
+
50
+ File.open(db_path, mode) {|file| block.call(file)}
51
+ end
52
+
53
+ def db_path
54
+ "./db/#{@name}"
55
+ end
56
+
57
+ def validate_types(entry)
58
+ invalid_pairs = entry.select do |_, value|
59
+ !value.is_a?(String) && !value.is_a?(Numeric) && value != true && value != false
60
+ end
61
+
62
+ unless invalid_pairs.empty?
63
+ separator = '/n/t'
64
+ pairs_description = invalid_pairs
65
+ .map {|key, value| " #{key}: #{value}"}
66
+ .join(",#{separator}")
67
+ raise TypeError.new("Can't persist field(s) because they contain non-primitive values at" + separator + pairs_description)
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,7 @@
1
+ module Utils
2
+ class << self
3
+ def db_files
4
+ Dir.entries('./db').reject {|filename| filename == '.' || filename == '..'}
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module TADB
2
+ VERSION = '0.2.0'
3
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tadb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - UTN FRBA - TADP
@@ -66,13 +66,18 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.0'
69
- description: Toy DB adapter for academic purposes
69
+ description: Toy file based object storage for academic purposes
70
70
  email:
71
71
  - erwincdl@gmail.com
72
72
  executables: []
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
- files: []
75
+ files:
76
+ - lib/tadb.rb
77
+ - lib/tadb/db.rb
78
+ - lib/tadb/table.rb
79
+ - lib/tadb/utils.rb
80
+ - lib/tadb/version.rb
76
81
  homepage: http://tadp-utn-frba.github.io/
77
82
  licenses:
78
83
  - MIT
@@ -96,5 +101,5 @@ rubyforge_project:
96
101
  rubygems_version: 2.5.2
97
102
  signing_key:
98
103
  specification_version: 4
99
- summary: A simple file DB adapter
104
+ summary: File based storage
100
105
  test_files: []