kvj 0.0.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 +7 -0
- data/lib/base_manager.rb +14 -0
- data/lib/file_connector.rb +42 -0
- data/lib/kvj.rb +44 -0
- data/lib/lock_manager.rb +13 -0
- metadata +62 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a1538b407a7ed4da590eba89c2da2a4260f820e2
|
4
|
+
data.tar.gz: 48fb6f5171b37cce09831bc895cd2a8034c75725
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b2c35b6d234fd0e230f0c8c61cf7593fd472b717a8a54359d7526056f92574bd5ac316d9ab316dcd7f57fd1fd8375659c0b8c3de9ab38c8b9f1252d710ea267a
|
7
|
+
data.tar.gz: 7daf213a82b0437b8ac45eb0168e6cc10f8c7f3c1f89452b8a948be026648f06945b436eaaa8b3e2232fe325b8cfc0a304c7aae31c30983c35a176f4d2641b71
|
data/lib/base_manager.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
module BaseManager
|
3
|
+
def list
|
4
|
+
base_directory = CONFIG['base_directory']
|
5
|
+
databases = Dir.entries(base_directory)
|
6
|
+
databases.delete_if { |database| database =~ /^\./ }
|
7
|
+
databases.map { |file_name| file_name.chomp('.json') }
|
8
|
+
end
|
9
|
+
|
10
|
+
def drop(database)
|
11
|
+
base_directory = CONFIG['base_directory']
|
12
|
+
File.delete(base_directory + database + '.json')
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'pry'
|
3
|
+
require 'fileutils'
|
4
|
+
require_relative 'lock_manager'
|
5
|
+
|
6
|
+
class FileConnector
|
7
|
+
include LockManager
|
8
|
+
|
9
|
+
def initialize(name, directory)
|
10
|
+
@file_path = directory + name.to_s + '.json'
|
11
|
+
create_file unless if_exist
|
12
|
+
@file = File.open(@file_path, File::RDWR)
|
13
|
+
end
|
14
|
+
|
15
|
+
def read
|
16
|
+
file = File.read(@file_path)
|
17
|
+
JSON.parse(file)
|
18
|
+
end
|
19
|
+
|
20
|
+
def write(hash)
|
21
|
+
File.open(@file_path, 'w') do |f|
|
22
|
+
f.write(hash.to_json)
|
23
|
+
end
|
24
|
+
read
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def if_exist
|
30
|
+
File.file?(@file_path)
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_file
|
34
|
+
# creat directory
|
35
|
+
dirname = File.dirname(@file_path)
|
36
|
+
FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
|
37
|
+
# create empty json file
|
38
|
+
File.open(@file_path, 'w') do |f|
|
39
|
+
f.write({}.to_json)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/kvj.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative 'file_connector'
|
2
|
+
require_relative 'base_manager'
|
3
|
+
require 'pry'
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
CONFIG = YAML.load_file('config/kvj_config.yml')
|
7
|
+
|
8
|
+
class KVJ
|
9
|
+
extend BaseManager
|
10
|
+
|
11
|
+
def initialize(name)
|
12
|
+
directory = CONFIG['base_directory']
|
13
|
+
@file_connector = FileConnector.new(name, directory)
|
14
|
+
end
|
15
|
+
|
16
|
+
def write(key, value)
|
17
|
+
@file_connector.grab_ex_lock
|
18
|
+
hash = @file_connector.read
|
19
|
+
hash[key] = value
|
20
|
+
@file_connector.write(hash)
|
21
|
+
ensure
|
22
|
+
@file_connector.release_lock
|
23
|
+
end
|
24
|
+
|
25
|
+
def read(key)
|
26
|
+
@file_connector.grab_sh_lock
|
27
|
+
@file_connector.read[key]
|
28
|
+
ensure
|
29
|
+
@file_connector.release_lock
|
30
|
+
end
|
31
|
+
|
32
|
+
def inspect_keys
|
33
|
+
@file_connector.grab_sh_lock
|
34
|
+
@file_connector.read.keys
|
35
|
+
ensure
|
36
|
+
@file_connector.release_lock
|
37
|
+
end
|
38
|
+
|
39
|
+
class << self
|
40
|
+
alias connect new
|
41
|
+
end
|
42
|
+
alias []= write
|
43
|
+
alias [] read
|
44
|
+
end
|
data/lib/lock_manager.rb
ADDED
metadata
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kvj
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- RundongGao
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-09-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: a supper light key value storage database in json file provides ACID
|
28
|
+
transcation on disk for multiple programs.
|
29
|
+
email: asphinx423@gmail.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- lib/base_manager.rb
|
35
|
+
- lib/file_connector.rb
|
36
|
+
- lib/kvj.rb
|
37
|
+
- lib/lock_manager.rb
|
38
|
+
homepage: http://rubygems.org/gems/hola
|
39
|
+
licenses:
|
40
|
+
- MIT
|
41
|
+
metadata: {}
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options: []
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - '>='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '0'
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
requirements: []
|
57
|
+
rubyforge_project:
|
58
|
+
rubygems_version: 2.4.6
|
59
|
+
signing_key:
|
60
|
+
specification_version: 4
|
61
|
+
summary: A supper light weight value data database.
|
62
|
+
test_files: []
|