jsondb 0.0.2 → 0.1.1
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 +4 -4
- data/lib/jsondb.rb +14 -5
- data/lib/jsondb/base.rb +29 -0
- data/lib/jsondb/commands.rb +56 -0
- data/lib/jsondb/constants.rb +23 -0
- data/lib/jsondb/db.rb +94 -57
- data/lib/jsondb/field.rb +80 -48
- data/lib/jsondb/fields.rb +55 -0
- data/lib/jsondb/file_ops.rb +64 -54
- data/lib/jsondb/logger.rb +36 -0
- data/lib/jsondb/record.rb +53 -88
- data/lib/jsondb/records.rb +62 -0
- data/lib/jsondb/result_set.rb +126 -0
- data/lib/jsondb/settings.rb +34 -0
- data/lib/jsondb/table.rb +93 -145
- data/lib/jsondb/tables.rb +78 -0
- data/lib/jsondb/validations.rb +133 -0
- metadata +12 -4
- data/lib/jsondb/resultset.rb +0 -109
- data/lib/jsondb/validation.rb +0 -88
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4793168a17a83f7ad3eb5d49cc0e052088959cce
|
4
|
+
data.tar.gz: 9d0c92ef993e8341addaff73a31ed7bc55b0b51a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2922cbddb35a1b3809b9d12e60cb6a7422f3cab7bd983b3ef8c657b12cee4cdb47874698f5b2a66359337ff724730b2bb2a3dfdeb9b74177ee68352416603b87
|
7
|
+
data.tar.gz: 591ba95be5babb2d39e7021c73f09dd80bdfa2bd25ec8391c97f1564bdfe7c1856937d8de49ac6c71eee6cc5305268cf5f8ad66d71d82560bdf266b9fe33cfaa
|
data/lib/jsondb.rb
CHANGED
@@ -1,11 +1,20 @@
|
|
1
1
|
#it depends on json_pure
|
2
2
|
require 'json/pure'
|
3
|
+
require 'fileutils'
|
3
4
|
|
4
5
|
this_dir = File.dirname(__FILE__)
|
6
|
+
require File.join(this_dir, 'jsondb/constants')
|
7
|
+
require File.join(this_dir, 'jsondb/logger')
|
8
|
+
require File.join(this_dir, 'jsondb/validations')
|
9
|
+
require File.join(this_dir, 'jsondb/settings')
|
5
10
|
require File.join(this_dir, 'jsondb/file_ops')
|
6
|
-
require File.join(this_dir, 'jsondb/
|
7
|
-
require File.join(this_dir, 'jsondb/
|
8
|
-
require File.join(this_dir, 'jsondb/table')
|
9
|
-
require File.join(this_dir, 'jsondb/field')
|
11
|
+
require File.join(this_dir, 'jsondb/result_set')
|
12
|
+
require File.join(this_dir, 'jsondb/commands')
|
10
13
|
require File.join(this_dir, 'jsondb/record')
|
11
|
-
require File.join(this_dir, 'jsondb/
|
14
|
+
require File.join(this_dir, 'jsondb/records')
|
15
|
+
require File.join(this_dir, 'jsondb/field')
|
16
|
+
require File.join(this_dir, 'jsondb/fields')
|
17
|
+
require File.join(this_dir, 'jsondb/table')
|
18
|
+
require File.join(this_dir, 'jsondb/tables')
|
19
|
+
require File.join(this_dir, 'jsondb/db')
|
20
|
+
require File.join(this_dir, 'jsondb/base')
|
data/lib/jsondb/base.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
module JSONdb
|
2
|
+
|
3
|
+
@@settings = Settings.new
|
4
|
+
@@constants = Constants.new
|
5
|
+
@@tables = Hash.new
|
6
|
+
@@fields = Hash.new
|
7
|
+
@@records = Hash.new
|
8
|
+
|
9
|
+
|
10
|
+
def self.settings
|
11
|
+
@@settings
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.constants
|
15
|
+
@@constants
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.tables
|
19
|
+
@@tables
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.fields
|
23
|
+
@@fields
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.records
|
27
|
+
@@records
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module JSONdb
|
2
|
+
|
3
|
+
module Commands
|
4
|
+
|
5
|
+
include JSONdb::Validations::Records
|
6
|
+
|
7
|
+
def select_from(table_name)
|
8
|
+
return ResultSet.new(table_name)
|
9
|
+
end
|
10
|
+
|
11
|
+
alias :select :select_from
|
12
|
+
|
13
|
+
def insert_into(table_name, record)
|
14
|
+
if record_validates?(table_name, record)
|
15
|
+
JSONdb.tables[table_name].insert_record(record)
|
16
|
+
log("Inserted record: #{record.inspect}", :debug)
|
17
|
+
return true
|
18
|
+
else
|
19
|
+
log("Record do not pass validations: #{record.inspect}", :error)
|
20
|
+
return false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
alias :insert :insert_into
|
25
|
+
|
26
|
+
def update_set(table_name, record)
|
27
|
+
if record_validates?(table_name, record)
|
28
|
+
JSONdb.tables[table_name].update_record(record)
|
29
|
+
log("Inserted record: #{record.inspect}", :debug)
|
30
|
+
return true
|
31
|
+
else
|
32
|
+
log("Record do not pass validations: #{record.inspect}", :error)
|
33
|
+
return false
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
alias :update :update_set
|
38
|
+
|
39
|
+
def delete(table_name, record)
|
40
|
+
if JSONdb.tables[table_name].exists?(record)
|
41
|
+
log("Deleting record: #{record.inspect}", :debug)
|
42
|
+
JSONdb.tables[table_name].drop_record(record)
|
43
|
+
return true
|
44
|
+
else
|
45
|
+
log("Record does not exists, so we can delete it", :error)
|
46
|
+
return false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def delete_by_id(table_name, id)
|
51
|
+
return delete(table_name, JSONdb.records[table_name][id])
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module JSONdb
|
2
|
+
|
3
|
+
class Constants
|
4
|
+
|
5
|
+
attr_reader :default_file_content, :loglevels
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@default_file_content = {
|
9
|
+
'db' => "{ \"tables\": {}, \"db\": { \"created_at\": #{Time.now.to_i}, \"updated_at\": #{Time.now.to_i} } }",
|
10
|
+
'table' => '{ }',
|
11
|
+
'log' => '',
|
12
|
+
'raw' => ''
|
13
|
+
}
|
14
|
+
@loglevels = {
|
15
|
+
debug: 1,
|
16
|
+
info: 2,
|
17
|
+
error: 3
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/lib/jsondb/db.rb
CHANGED
@@ -1,58 +1,95 @@
|
|
1
|
-
#db.rb
|
2
1
|
module JSONdb
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
2
|
+
|
3
|
+
class Db
|
4
|
+
|
5
|
+
attr_reader :created_at, :updated_at, :folder, :tables
|
6
|
+
|
7
|
+
include JSONdb::Tables
|
8
|
+
include JSONdb::Commands
|
9
|
+
|
10
|
+
def initialize(folder, create_folder_if_not_exists = true, writeable = true)
|
11
|
+
|
12
|
+
JSONdb.settings.folder = folder
|
13
|
+
JSONdb.settings.log_folder = folder
|
14
|
+
JSONdb.settings.writeable = writeable
|
15
|
+
|
16
|
+
@folder = File.expand_path(folder)
|
17
|
+
@created_at = nil
|
18
|
+
@updated_at = nil
|
19
|
+
|
20
|
+
open_database(create_folder_if_not_exists)
|
21
|
+
end
|
22
|
+
|
23
|
+
def writable
|
24
|
+
JSONdb.settings.writeable
|
25
|
+
end
|
26
|
+
|
27
|
+
def persist
|
28
|
+
begin
|
29
|
+
JSONdb.tables.keys.each do |key|
|
30
|
+
JSONdb.tables[key].persist if JSONdb.tables[key].persisted == false
|
31
|
+
end
|
32
|
+
@file.contents = db_to_hash(true)
|
33
|
+
@file.write
|
34
|
+
log("DB saved to disk", :debug)
|
35
|
+
return true
|
36
|
+
rescue
|
37
|
+
log("DB NOT saved to disk!", :error, true)
|
38
|
+
return false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def db_to_hash(update = false)
|
43
|
+
@updated_at = Time.now.to_i if update
|
44
|
+
{
|
45
|
+
"tables" => tables_to_hash,
|
46
|
+
"db" => {
|
47
|
+
"created_at" => @created_at,
|
48
|
+
"updated_at" => @updated_at
|
49
|
+
}
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def open_database(create_folder_if_not_exists)
|
56
|
+
create_folder if create_folder_if_not_exists == true
|
57
|
+
|
58
|
+
raise "DB Main Folder not found!" if !Dir.exists?(@folder)
|
59
|
+
|
60
|
+
@file = FileOps.new(@folder, '_db.json', 'db')
|
61
|
+
@file.read
|
62
|
+
tables_in_file = @file.contents['tables']
|
63
|
+
|
64
|
+
tables_in_file.each do |table_name, values|
|
65
|
+
JSONdb.tables[table_name] = JSONdb::Table.new(name, false)
|
66
|
+
JSONdb.tables[table_name].created_at = values['created_at']
|
67
|
+
JSONdb.tables[table_name].updated_at = values['updated_at']
|
68
|
+
JSONdb.tables[table_name].last_id = values['last_id']
|
69
|
+
JSONdb.fields[table_name] = Hash.new
|
70
|
+
# fields
|
71
|
+
fields_in_file = values['fields']
|
72
|
+
fields_in_file.each do |field_name, field_values|
|
73
|
+
JSONdb.fields[table_name][field_name] = Field.new(field_name)
|
74
|
+
JSONdb.fields[table_name][field_name].type = field_values['type']
|
75
|
+
JSONdb.fields[table_name][field_name].nullalble = field_values['nullalble']
|
76
|
+
JSONdb.fields[table_name][field_name].default = field_values['default']
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
if @file.new_file
|
81
|
+
@file.write
|
82
|
+
log("Created data file for database structure.", :info)
|
83
|
+
else
|
84
|
+
log("Loaded data file for database structure.", :info)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def create_folder
|
89
|
+
@created_at = Time.now.to_i
|
90
|
+
FileUtils.mkdir_p(@folder) if !Dir.exists?(@folder)
|
91
|
+
end
|
92
|
+
|
93
|
+
end #class
|
94
|
+
|
95
|
+
end #module
|
data/lib/jsondb/field.rb
CHANGED
@@ -1,50 +1,82 @@
|
|
1
1
|
module JSONdb
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
2
|
+
|
3
|
+
class Field
|
4
|
+
|
5
|
+
include JSONdb::Validations::Naming
|
6
|
+
include JSONdb::Validations::Types
|
7
|
+
include JSONdb::Logger
|
8
|
+
|
9
|
+
attr_reader :type, :nullable, :default
|
10
|
+
|
11
|
+
def initialize(name)
|
12
|
+
@name = name if allowed_name?(name)
|
13
|
+
|
14
|
+
# override common setters
|
15
|
+
self.type = "String"
|
16
|
+
self.nullable = true
|
17
|
+
self.default = ""
|
18
|
+
|
19
|
+
# set_defaults
|
20
|
+
end
|
21
|
+
|
22
|
+
def type=(_class)
|
23
|
+
if allowed_type?(_class)
|
24
|
+
@type = _class
|
25
|
+
return true
|
26
|
+
else
|
27
|
+
log("'#{_class}' not allowed as field type", :error)
|
28
|
+
return false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def nullable=(value)
|
33
|
+
if validate_type("Bool", value)
|
34
|
+
@nullable = value
|
35
|
+
return true
|
36
|
+
else
|
37
|
+
log("'#{value}' not allowed for nullable", :error)
|
38
|
+
return false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def default=(value)
|
43
|
+
if validate_type(@type, value)
|
44
|
+
@default = value
|
45
|
+
return true
|
46
|
+
else
|
47
|
+
log("'#{value}' not allowed as #{type} class.")
|
48
|
+
return false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def nullable
|
53
|
+
@nullable
|
54
|
+
end
|
55
|
+
|
56
|
+
def type
|
57
|
+
@type
|
58
|
+
end
|
59
|
+
|
60
|
+
def default
|
61
|
+
@default
|
62
|
+
end
|
63
|
+
|
64
|
+
def to_hash
|
65
|
+
{
|
66
|
+
"type" => @type,
|
67
|
+
"nullable" => @nullable,
|
68
|
+
"default" => @default
|
69
|
+
}
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def set_defaults
|
75
|
+
@nullable = true
|
76
|
+
@default = ""
|
77
|
+
@type = "String"
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
50
82
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module JSONdb
|
2
|
+
|
3
|
+
module Fields
|
4
|
+
|
5
|
+
def fields
|
6
|
+
JSONdb.fields[@name].keys
|
7
|
+
end
|
8
|
+
|
9
|
+
def field(name)
|
10
|
+
JSONdb.fields[@name][name]
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_field(name)
|
14
|
+
JSONdb.fields[@name][name] = Field.new(name)
|
15
|
+
end
|
16
|
+
|
17
|
+
def drop_field(name)
|
18
|
+
JSONdb.fields[@name][name] = nil
|
19
|
+
JSONdb.fields[@name].delete(name)
|
20
|
+
end
|
21
|
+
|
22
|
+
def fields_to_hash
|
23
|
+
to_hash = Hash.new
|
24
|
+
JSONdb.fields[@name].each do |key, values|
|
25
|
+
to_hash.merge!({
|
26
|
+
key => values.to_hash
|
27
|
+
})
|
28
|
+
end
|
29
|
+
return to_hash
|
30
|
+
end
|
31
|
+
|
32
|
+
def add_main_fields
|
33
|
+
if JSONdb.fields[@name]["id"].nil?
|
34
|
+
JSONdb.fields[@name]["id"] = create_field('id')
|
35
|
+
JSONdb.fields[@name]["id"].type = "Fixnum"
|
36
|
+
JSONdb.fields[@name]["id"].nullable = false
|
37
|
+
JSONdb.fields[@name]["id"].default = 0
|
38
|
+
end
|
39
|
+
if JSONdb.fields[@name]["created_at"].nil?
|
40
|
+
JSONdb.fields[@name]["created_at"] = create_field('created_at')
|
41
|
+
JSONdb.fields[@name]["created_at"].type = "Fixnum"
|
42
|
+
JSONdb.fields[@name]["created_at"].nullable = false
|
43
|
+
JSONdb.fields[@name]["created_at"].default = 0
|
44
|
+
end
|
45
|
+
if JSONdb.fields[@name]["updated_at"].nil?
|
46
|
+
JSONdb.fields[@name]["updated_at"] = create_field('updated_at')
|
47
|
+
JSONdb.fields[@name]["updated_at"].type = "Fixnum"
|
48
|
+
JSONdb.fields[@name]["updated_at"].nullable = false
|
49
|
+
JSONdb.fields[@name]["updated_at"].default = 0
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|