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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 42c6a44ad65e4d4f7fa846868284ab44c45daa10
4
- data.tar.gz: 84a2a4690b49e879b6c2301aa89abdfa31a33395
3
+ metadata.gz: 4793168a17a83f7ad3eb5d49cc0e052088959cce
4
+ data.tar.gz: 9d0c92ef993e8341addaff73a31ed7bc55b0b51a
5
5
  SHA512:
6
- metadata.gz: 6bffc48fe1baefaafd860eeea3e2d9c665c0a0691c95ca1743ee4ae790d849c002a2bdfd936c046ce9cf023d607891b80c6d0ccbac296b58db902a6325a5c41b
7
- data.tar.gz: 3af5f5bac55261d94f1b04aa5b568ecb4826206b874d9dc8c9b3d5a229cf1e476b7d3b8bb8db2b52becf486882f4fd70e02dcfb04c5c649a0e4675b459da9b5a
6
+ metadata.gz: 2922cbddb35a1b3809b9d12e60cb6a7422f3cab7bd983b3ef8c657b12cee4cdb47874698f5b2a66359337ff724730b2bb2a3dfdeb9b74177ee68352416603b87
7
+ data.tar.gz: 591ba95be5babb2d39e7021c73f09dd80bdfa2bd25ec8391c97f1564bdfe7c1856937d8de49ac6c71eee6cc5305268cf5f8ad66d71d82560bdf266b9fe33cfaa
@@ -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/db')
7
- require File.join(this_dir, 'jsondb/validation')
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/resultset')
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')
@@ -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
@@ -1,58 +1,95 @@
1
- #db.rb
2
1
  module JSONdb
3
- class Db
4
-
5
- attr_reader :root, :tables, :writeable
6
-
7
- def initialize(root, writeable = true)
8
- @root = root
9
- @writeable = writeable
10
- @file = FileOps.new(@root, '_db.json', 'db', @writeable)
11
- load_tables
12
- end
13
-
14
- def table(name)
15
- @tables[name] ||= Table.new(name, @root, Time.now.to_i, @writeable)
16
- end
17
-
18
- def table_add(name)
19
- if @tables.keys.include?(name)
20
- raise "Table '#{name}' already defined."
21
- else
22
- @tables[name] = Table.new(name, @root, Time.now.to_i, @writeable)
23
- end
24
- end
25
-
26
- def table_drop(name)
27
- @tables[name].drop
28
- @tables.delete(name)
29
- end
30
-
31
- def table_names
32
- @tables.keys
33
- end
34
-
35
- def persist
36
- @file.contents['tables'] = {}
37
- @tables.each do |name, table|
38
- if table.persisted == false
39
- table.updated_at = Time.now.to_i
40
- table.persist
41
- end
42
- @file.contents['tables'][name] = { "name" => name, "updated_at" => table.updated_at }
43
- end
44
- return @file.save
45
- end
46
-
47
- private
48
-
49
- def load_tables
50
- @tables_in_file = @file.contents['tables'] || Hash.new({})
51
- @tables = Hash.new
52
- @tables_in_file.each do |name, values|
53
- @tables[name] = Table.new(name, @root, values['updated_at'], @writeable)
54
- end
55
- end
56
-
57
- end # class
58
- end # module
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
@@ -1,50 +1,82 @@
1
1
  module JSONdb
2
- class Field
3
-
4
- include Validation
5
-
6
- attr_reader :name, :type, :nullable, :default
7
-
8
- def initialize(name)
9
- allowed_name?(name)
10
-
11
- @name = name
12
- @nullable = true
13
- @default = nil
14
- @type = "String"
15
- end
16
-
17
- def type=(_class)
18
- @type = allowed?(_class)
19
- end
20
-
21
- def type
22
- @type
23
- end
24
-
25
- def nullable=(value)
26
- @nullable = validate_type("Bool", value)
27
- end
28
-
29
- def nullable
30
- @nullable
31
- end
32
-
33
- def default=(value)
34
- @default = validate_type(@type, value)
35
- end
36
-
37
- def default
38
- @default
39
- end
40
-
41
- def to_hash
42
- data = Hash.new
43
- data['type'] = @type
44
- data['nullable'] = @nullable
45
- data['default'] = @default
46
- data
47
- end
48
-
49
- end
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