tadb 0.3.1 → 0.3.7

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: 2da0e56b37341702665d402b68937939eea6940c
4
- data.tar.gz: 81a7ef2ac954587109f74d375a88f0d109d601ee
2
+ SHA256:
3
+ metadata.gz: 7c93f62a11b009c566e1fb48f69ac3ab7bd2766efacc7221cffa9b96fb1d61eb
4
+ data.tar.gz: cd883727d6213e37415bdbd8b6354d7ed7220cd89a963a6df30b573dbdafc186
5
5
  SHA512:
6
- metadata.gz: '04915b3d2bbcc0e432a80f4fb9847678b255ea05f84bb24e6347c1233cf83e8081efb53bfd5380f5ea52a2a12ec7dc357bc06764ff34372c1d63cdee448ea4ed'
7
- data.tar.gz: afee10ad4ccebaf66a191e1dc9f058989059820d68a6a0a309f26226776a79aca756edae3bb8353fb9a37e938031be0517a99edf7f15f85f515894b5a5eb2e0d
6
+ metadata.gz: 86c9aef15d2d8c2996e077b0686944967b5edd168034d9cd6847443fdcb7e1b2a3621e1b4b7daaddc59f669218d581af9ab848b5efe897f32bda20c1e3bc246a
7
+ data.tar.gz: 5f4c20841823515e815ac9db0340bc01eb085783733c69a671daa14ef08aed8dece3f2dce1115eb1f2f8ade819f781b80b0294d4e344bbe8e5ddd6bbd5b05d98
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.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
@@ -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.1
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: 2017-09-11 00:00:00.000000000 Z
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.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
@@ -81,11 +85,7 @@ metadata: {}
81
85
  post_install_message:
82
86
  rdoc_options: []
83
87
  require_paths:
84
- - lib/tadb/db.rb
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
- rubyforge_project:
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