kvj 0.0.2 → 0.0.3

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/file_connector.rb +6 -5
  3. data/lib/kvj.rb +32 -8
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: db683924cd739a41874d4a32113455412d463c18
4
- data.tar.gz: ed0981e3425f16b407be7a168641919e91f5860e
3
+ metadata.gz: 05ff9c7e30c82506812d379073f6d00de58d37c6
4
+ data.tar.gz: a19ad513e5513dfb4d7af19a05ad5f99a4a7f5ca
5
5
  SHA512:
6
- metadata.gz: 131abac341b8dd544c57a55b1ae15941e60ab034395a1246e2f9927cf9cb93f29554e97c820120e9b13d08d05854defbce6adda786538441eefda458ee8e7b72
7
- data.tar.gz: 62d59ad5a545224eabf3db3e6ac48ed1e3fe91da175d44850897f6d498c54ef756f3145152ad61ba8d3128365c4f91b7379dafdc16e7dbed178868a5479a799d
6
+ metadata.gz: caf5f3baf60c37d94d19721250307337e08b6f47004943c8580cbe74f3941f5423739890e52fbcec414d652c148cf39f39b7ac46087e5d93317764eed81f8b3d
7
+ data.tar.gz: df224a20c4c42ee7fa453ac5c53bc49892573f3e18242eceba38c1eb39a34f681890f9c57b4b75308c240f3c1b1b15127f27d791279fcb58d0b1ff65ae413ae7
@@ -8,7 +8,7 @@ class FileConnector
8
8
 
9
9
  def initialize(name, directory)
10
10
  @file_path = directory + name.to_s + '.json'
11
- create_file unless if_exist
11
+ create_file unless FileConnector.exist(name, directory)
12
12
  @file = File.open(@file_path, File::RDWR)
13
13
  end
14
14
 
@@ -24,12 +24,13 @@ class FileConnector
24
24
  read
25
25
  end
26
26
 
27
- private
28
-
29
- def if_exist
30
- File.file?(@file_path)
27
+ def self.exist(name, directory)
28
+ file_path = directory + name.to_s + '.json'
29
+ File.file?(file_path)
31
30
  end
32
31
 
32
+ private
33
+
33
34
  def create_file
34
35
  # creat directory
35
36
  dirname = File.dirname(@file_path)
data/lib/kvj.rb CHANGED
@@ -8,9 +8,18 @@ CONFIG = YAML.load_file('config/kvj_config.yml')
8
8
  class KVJ
9
9
  extend BaseManager
10
10
 
11
- def initialize(name)
11
+ def self.create(database)
12
12
  directory = CONFIG['base_directory']
13
- @file_connector = FileConnector.new(name, directory)
13
+ return new(database, directory) unless FileConnector.exist(database, directory)
14
+ STDERR.puts "Request to initialize a new database : #{database} but alread exists. "
15
+ false
16
+ end
17
+
18
+ def self.connect(database)
19
+ directory = CONFIG['base_directory']
20
+ return new(database, directory) if FileConnector.exist(database, directory)
21
+ STDERR.puts "Request to connect to database : #{database} but does not exists. "
22
+ false
14
23
  end
15
24
 
16
25
  def write(key, value)
@@ -18,13 +27,16 @@ class KVJ
18
27
  hash = @file_connector.read
19
28
  hash[key] = value
20
29
  @file_connector.write(hash)
30
+ return true
21
31
  ensure
22
32
  @file_connector.release_lock
23
33
  end
24
34
 
25
35
  def read(key)
26
36
  @file_connector.grab_sh_lock
27
- @file_connector.read[key]
37
+ data = @file_connector.read
38
+ return false unless key_exist(data, key, 'read')
39
+ return data[key]
28
40
  ensure
29
41
  @file_connector.release_lock
30
42
  end
@@ -38,16 +50,28 @@ class KVJ
38
50
 
39
51
  def delete(key)
40
52
  @file_connector.grab_ex_lock
41
- hash = @file_connector.read
42
- hash.delete(key)
53
+ data = @file_connector.read
54
+ return false unless key_exist(data, key, 'delete')
55
+ data.delete(key)
43
56
  @file_connector.write(hash)
44
57
  ensure
45
58
  @file_connector.release_lock
46
59
  end
47
60
 
48
- class << self
49
- alias connect new
50
- end
51
61
  alias []= write
52
62
  alias [] read
63
+
64
+ def key_exist(data, key, action)
65
+ return true if data.key?(key)
66
+ STDERR.puts "Request to #{action} key : '#{key}' does not exist in database : '#{@database}' "
67
+ false
68
+ end
69
+
70
+ def initialize(database, directory)
71
+ @database = database
72
+ @file_connector = FileConnector.new(database, directory)
73
+ end
74
+
75
+ private :key_exist
76
+ private_class_method :new
53
77
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kvj
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - RundongGao
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-11 00:00:00.000000000 Z
11
+ date: 2016-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json