json_store 0.1.3 → 0.1.4

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: b77ef3a7d0a66c2d77dd27125f3cdb2099f69835
4
- data.tar.gz: d20ae02567719e9685dd1b85b7d600bdede5ef12
3
+ metadata.gz: 5aff085a13c5db3917ffb78d77faecd80f31e7f8
4
+ data.tar.gz: 462c05300901e67a8fc86a9fc0c798c460a28631
5
5
  SHA512:
6
- metadata.gz: 508a228e2c509a08906fcd5db9c8425200efa314a8967cc3ca8969ec748c2ea0d68f432cc0d6be9a9a7ff5a37e7a3f39ae0ce7975b133c5df52b230c36e98c77
7
- data.tar.gz: a2e576228c8ee7df9023324f1e55556fdafea6bd45444b14413a8f883fdb83d78786d937a063ec96a21b5a7262a2a0f35877d5ebb3cd954a32464c7df67e3969
6
+ metadata.gz: ae1b6f3ad3f482a6e0fb078bdf8fe689c5217ac83dd57dee780fff25d9df6234db5ba072b9b2ca7224c182b8c4333219993f15f04df7ae612cf8c6fa6c1256c7
7
+ data.tar.gz: 088095aa91ad6508563ba5f8342a42820c8320a71b383ce040691a6ce76b0b5ef4370b0c811d4cf34b2460269a047d0c93d0540bc41346cd4297d22ac9dcd8d1
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/kingsleyh/json_store.svg?branch=master)](https://travis-ci.org/kingsleyh/json_store)
4
4
  [![Gem Version](https://badge.fury.io/rb/json_store.svg)](http://badge.fury.io/rb/json_store)
5
- [![json_store Downloads](http://www.gemetric.me/images/json_store.gif)](https://rubygems.org/gems/json_store)
5
+ [![json_store downloads](http://www.gemetric.me/images/json_store.gif?1)](https://rubygems.org/gems/json_store)
6
6
 
7
7
 
8
8
  Very simple key/value in memory database using json
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
data/json_store.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: json_store 0.1.3 ruby lib
5
+ # stub: json_store 0.1.4 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "json_store"
9
- s.version = "0.1.3"
9
+ s.version = "0.1.4"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Kingsley Hendrickse"]
14
- s.date = "2014-06-23"
14
+ s.date = "2014-06-26"
15
15
  s.description = "A simple in memory key/value database using json that writes to file"
16
16
  s.email = "kingsleyhendrickse@me.com"
17
17
  s.extra_rdoc_files = [
data/lib/json_store.rb CHANGED
@@ -2,50 +2,75 @@ require 'oj'
2
2
  require 'lock_method'
3
3
  require 'json_select'
4
4
 
5
+
6
+ # JsonStore is a simple key/value database in which key/values are stored in json format
7
+ # The basic concept is to pull data into an in memory map and then set or get data and push the data to file.
8
+ # You can also merge in 2 different ways to decide how you want to use the data coming from file or the map
9
+ # file locking is handled by the lock_method gem to prevent concurrent access when reading and writing
5
10
  class JsonStore
6
11
 
12
+ # Creates a new store at the path/filename provided to the constructor
13
+ # e.g. db = JsonStore.new('path/to/some/file.json')
7
14
  def initialize(db)
8
15
  @db = db
9
16
  @map = {}
10
17
  @json_opts = Oj.default_options
11
18
  end
12
19
 
20
+ # Sets data into the memory map by key/value
21
+ # e.g db.set('name','Kingsley')
13
22
  def set(key, value)
14
23
  @map[key] = value
15
24
  end
16
25
 
26
+ # Gets data from the memory map by key
27
+ # e.g. db.get('name')
17
28
  def get(key)
18
29
  @map[key]
19
30
  end
20
31
 
32
+ # Returns the whole memory map
21
33
  def all
22
34
  @map
23
35
  end
24
36
 
37
+ # Replaces the memory map with some json directly
38
+ def set_json(json)
39
+ @map = Oj.load(json)
40
+ end
41
+
42
+ # Sets the Oj json parser options by overriding defaults. See Oj josn parser docs for more details.
25
43
  def set_json_opts(options)
26
44
  @json_opts.merge!(options)
27
45
  end
28
46
 
47
+ # Lists the Oj json parser options that have been set
29
48
  def get_json_opts
30
49
  @json_opts
31
50
  end
32
51
 
52
+ #�Clears the memory map
33
53
  def clear
34
54
  @map = {}
35
55
  end
36
56
 
57
+ # Returns the whole memory map as a json string
37
58
  def all_as_json
38
59
  Oj.dump(@map,@json_opts)
39
60
  end
40
61
 
62
+ # Uses the ruby gem for JSONSelect to search basic json. (doesn't work on ruby objects stored as json by Oj :object mode)
63
+ # See the JSONSelect website / json_select ruby gem docs for more details
41
64
  def search(selector, kind=:matches)
42
65
  JSONSelect(selector).send(kind, @map)
43
66
  end
44
67
 
68
+ # Gets data from the memory map by key but as a json string
45
69
  def get_as_json(key)
46
70
  Oj.dump(@map[key],@json_opts)
47
71
  end
48
72
 
73
+ # Pulls data from file into the memory map - replacing the memory map with the data from file.
49
74
  def pull
50
75
  begin
51
76
  @map = read_data
@@ -55,6 +80,7 @@ class JsonStore
55
80
  end
56
81
  end
57
82
 
83
+ # Pushes the data in the memory map to file
58
84
  def push
59
85
  begin
60
86
  write_data
@@ -64,6 +90,11 @@ class JsonStore
64
90
  end
65
91
  end
66
92
 
93
+ # Merges the data in 2 ways
94
+ # 1. db.merge(:into_remote) is the default and will merge data from the memory map into data from file and assign the result to the memory map
95
+ # 2. db.merge(:into_local) will merge data from file into the memory map and assign the result to the memory map.
96
+ # into_remote will essentially load the memory map data into the file data thus overwriting the file data with the memory map data where the keys match
97
+ # into_local will essentially merge the file data into the memory map thus overwriting the memory map data with the file data where the keys match
67
98
  def merge(direction=:into_remote)
68
99
  begin
69
100
  @map = direction == :into_local ? @map.merge(read_data) : read_data.merge(@map)
@@ -73,6 +104,7 @@ class JsonStore
73
104
  end
74
105
  end
75
106
 
107
+ # Get the path to the datastore json file
76
108
  def db_path
77
109
  @db
78
110
  end
@@ -86,8 +118,12 @@ class JsonStore
86
118
  def read_data
87
119
  data = {}
88
120
  if File.exists?(@db)
89
- f = File.read(@db)
90
- data = Oj.load(f) unless f.empty?
121
+ f = File.open(@db)
122
+ begin
123
+ data = Oj.load(f)
124
+ rescue => e
125
+ puts "WARNING: #{e}"
126
+ end
91
127
  end
92
128
  data
93
129
  end
@@ -132,6 +132,12 @@ describe JsonStore do
132
132
  expect(db.get_json_opts[:mode]).to eq(:compat)
133
133
  end
134
134
 
135
+ it 'should set the map directly with json' do
136
+ db = JsonStore.new('test')
137
+ db.set_json('{"name":{"first":"Kingsley"}}')
138
+ expect(db.get('name')).to eq({'first' =>'Kingsley'})
139
+ end
140
+
135
141
  private
136
142
 
137
143
  def create_new_db(path, content={name: 'Kingsley'})
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kingsley Hendrickse
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-23 00:00:00.000000000 Z
11
+ date: 2014-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj