tadb 0.3.0 → 0.3.6

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
- SHA1:
3
- metadata.gz: 39b25407fdc5f64769e5bd0b767d4a74beb64f58
4
- data.tar.gz: 5564d2c5ae7d8cbc9a32edbd7347619340ae5fa2
2
+ SHA256:
3
+ metadata.gz: 5402411b27ddb23194835e49002e3888cc934900b8516fd120ced85c7135a183
4
+ data.tar.gz: 7f9b1468c0a330d5b19c347b124562a4e20bd6190fe42e1705610e29fb8fd3cb
5
5
  SHA512:
6
- metadata.gz: dac28aa3c536c92ef842de756268f0291de6482dfa3655b8fb8127f3018c9b846a78ccf1b974941865a79a78a0ff76e08d8e07235215e1132cc5a20f01c98a3f
7
- data.tar.gz: 79806770d43411204b6109515f616aed0e15f9c409188874363d2c383b3b2336f10080da0a99edc763553c68081bc40ce92097ae94d36c7de5b61cec5f00bc92
6
+ metadata.gz: 519d4e21077de739ecbd940f3cda39f6902ac2582dc422c03eb808ee8122d9236881b504ca93fbacecfe588f65391a782788983f953534f0c693436144694a09
7
+ data.tar.gz: 27c00935960a1a18ed6138ea904439cf3e7c3419c635dcb3b32b04139005a2066b779b0dc5da65f06346face932c71bb65d46ed8c8338dd468c9286eefe97d0e
data/lib/tadb.rb CHANGED
@@ -1,4 +1,8 @@
1
- require_relative './tadb/db'
2
- require_relative './tadb/table'
3
- require_relative './tadb/version'
4
- require_relative './tadb/utils'
1
+ module TADB
2
+ VERSION = '0.3.6'
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)
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
data/lib/tadb/table.rb ADDED
@@ -0,0 +1,77 @@
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, symbolize_names: true)
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') do |f|
42
+ f.sync = true
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def file(mode, &block)
49
+ Dir.mkdir('./db') unless File.exists?('./db')
50
+ clear unless File.exists?(db_path)
51
+
52
+ File.open(db_path, mode) do |file|
53
+ # 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.
54
+ puts "Forcing sync on file #{db_path}..."
55
+ file.sync = true # https://ruby-doc.org/core-3.0.0/File.html#method-c-new-label-Examples
56
+ block.call(file)
57
+ end
58
+ end
59
+
60
+ def db_path
61
+ "./db/#{@name}"
62
+ end
63
+
64
+ def validate_types(entry)
65
+ invalid_pairs = entry.select do |_, value|
66
+ !value.is_a?(String) && !value.is_a?(Numeric) && value != true && value != false
67
+ end
68
+
69
+ unless invalid_pairs.empty?
70
+ separator = '/n/t'
71
+ pairs_description = invalid_pairs
72
+ .map {|key, value| " #{key}: #{value}"}
73
+ .join(",#{separator}")
74
+ raise TypeError.new("Can't persist field(s) because they contain non-primitive values at" + separator + pairs_description)
75
+ end
76
+ end
77
+ end
data/lib/tadb/utils.rb ADDED
@@ -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
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.0
4
+ version: 0.3.6
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: 2017-09-11 00:00:00.000000000 Z
11
+ date: 2021-04-23 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.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.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: '1.15'
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: '1.15'
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: '10.0'
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: '10.0'
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.0'
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.0'
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
@@ -93,8 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
97
  - !ruby/object:Gem::Version
94
98
  version: '0'
95
99
  requirements: []
96
- rubyforge_project:
97
- rubygems_version: 2.5.2
100
+ rubygems_version: 3.2.0.rc.1
98
101
  signing_key:
99
102
  specification_version: 4
100
103
  summary: File based storage