jsondb 0.0.2 → 0.1.1

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: 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