ssd 0.1.2 → 0.1.3

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: 66fbedba3d0cd3cae41d234f436fd58b706d0fd7
4
- data.tar.gz: 13b3f1c961041b5ce1f3b93b961597c374dd1b90
3
+ metadata.gz: deeb33a039ae9fe9134ce820c77d31dbebdac967
4
+ data.tar.gz: a5ff690e9e4104f532d4f05065899ea5cd49c45c
5
5
  SHA512:
6
- metadata.gz: 2afea1097690895891a0cd9c7f6e6037ef8e53cc0e5db637e86426ee518dfd777097afd6e9f6b9e562a1ff1e9436695f6548d737951f07f123e2b555a5dbe4cc
7
- data.tar.gz: 7bf3abe7e9b32b7fe3b7b8f31f00278acc8cb36e7fa8c468ae0cce283743d8cbfe9649216233fd0306e9b0fb157da3cc9639a62bf5d42872870375e36d15603d
6
+ metadata.gz: 2be1fd3a716666afba008493a4c177315682e46afc679d3099058d512c7b04579420c012bac67b96ca1bc8b832c3cc87e644bd2f127d3bcf896f3588899cb15a
7
+ data.tar.gz: 0ed3aed894aefe020752028fb59901bb983c205c9746ceeb40ce7f5cfbd92f23eeb08c9fea7c9955e58d014fcfd7644130f84a2c8a120dd99a9d000eafac1bcc
data/README.md CHANGED
@@ -4,18 +4,23 @@ SSD (Simply-Smart-Data) is an append-only, file-based, immutable key-value store
4
4
 
5
5
  Key Features
6
6
  =================
7
- - Scalable file-based design (each key gets its own file).
8
- - Immutable (timestamped inserts).
9
- - Fault tolerance (transactional operations).
10
- - Measurably low technical debt (consciously clean small-sized library that wouldn't complect your codebase).
11
- - Zero external dependencies.
12
- - Schemaless (easily meets your Application evolution needs).
13
- - Append-only (easily keeps track of Applications Data timeline).
14
- - Key-based rolling-forward\rolling-back.
15
- - Strict Security-first policy SHA256 Encryption (implment your own logging for intercepting keys required for decrypting data).
16
- - JSON objects (based on ruby's native pstore).
17
- - RESTful HTTP/JSON API Endpoint.
18
- - Super easy to learn (up & running in mins).
7
+ - **Scalable file**-based design (each key gets its own file).
8
+ - **Immutable** (timestamped inserts as **accountants don't use erasers, otherwise they go to jail**).
9
+ - **Fault tolerance** (transactional operations).
10
+ - **Measurably low technical debt** (consciously clean small-sized library that wouldn't complect your codebase).
11
+ - **Zero external dependencies**.
12
+ - **Schemaless** (easily meets your Application evolution needs).
13
+ - **Append-only** (easily keeps track of Applications Data timeline).
14
+ - **Key-based rolling-forward\rolling-back**.
15
+ - **Super easy to learn and use** (up & running in mins).
16
+
17
+ TODO
18
+ ======
19
+ - **Strict Security-first policy SHA256 Encryption** (implment your own logging for intercepting keys required for decrypting data).
20
+ - **JSON objects** (based on ruby's native pstore).
21
+ - **RESTful HTTP/JSON API Endpoint**.
22
+ - REPL console
23
+ - Server Web-based Admin Interface
19
24
 
20
25
  Use Cases
21
26
  ==========
@@ -28,14 +33,17 @@ module MyApp
28
33
  class User
29
34
  include SSD
30
35
  attr_accessor :id # ssd key
36
+
37
+ def initialize id
38
+ @ssd = id
39
+ end
31
40
  end
32
41
 
33
42
  class API < Sinatra::Base
34
43
  get '/' do
35
- @user = User.new # Initialize an object form any Class that `include SSD`
36
- @user.id = "generated_id" # Give it an ssd key via it's :id
37
- @user.append! # Do an `append!` operation and viola! DONE
38
- User.ssd("generated_id") # Later to read it via Class.ssd(id)
44
+ @user = User.new("generated_id") # Initialize an object form any Class that `include SSD` and assign it a :ssd key
45
+ @user.append! # Do an `append!` operation and viola! DONE
46
+ @user = User.ssd("generated_id") # Afterwards read it via Class.ssd(:ssd)
39
47
  end
40
48
  end
41
49
  end
data/bin/console CHANGED
@@ -6,9 +6,5 @@ require "ssd"
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
9
  require "irb"
14
10
  IRB.start
data/bin/repl.rb ADDED
@@ -0,0 +1,41 @@
1
+ puts "SSD Console -h for help"
2
+ puts " "
3
+ puts " "
4
+
5
+ def colorize(text, color_code)
6
+ "#{color_code}#{text}e[0m"
7
+ end
8
+
9
+ def red(text); colorize(text, "e[31m"); end
10
+ def green(text); colorize(text, "e[32m"); end
11
+
12
+ # Actual work
13
+ puts 'Importing categories [ ' + green('DONE') + ' ]'
14
+ # Actual work
15
+ puts 'Importing tags [' + red('FAILED') + ']'
16
+
17
+ # Handle the input, this would probably run some method
18
+ # as a part of the DSL you'd have to create. Place this
19
+ # repl as your command line interface to your service.
20
+ def handle_input(input)
21
+ result = eval(input)
22
+ puts(" => #{result}")
23
+ end
24
+
25
+ # This is a lambda that runs the content of the block
26
+ # after the input is chomped.
27
+ repl = -> prompt do
28
+ begin
29
+ print prompt
30
+ handle_input(gets.chomp!)
31
+ rescue "Error"
32
+ raise "ERROR"
33
+ end
34
+ end
35
+
36
+ # After evaling and returning, fire up the prompt lambda
37
+ # again, this loops after every input and exits with
38
+ # exit or a HUP.
39
+ loop do
40
+ repl["SSD> "]
41
+ end
data/lib/ssd.rb CHANGED
@@ -23,12 +23,12 @@ module SSD
23
23
  @@ssd_name = base.new.class.to_s.downcase
24
24
  end
25
25
 
26
- attr_accessor :id
26
+ attr_accessor :ssd
27
27
 
28
- def id= value
29
- @id = value
28
+ def ssd= value
29
+ @ssd = value
30
30
  FileUtils::mkdir_p ".ssd/#{@@ssd_name}"
31
- @@ssd_path = ".ssd/#{@@ssd_name}/#{@id}.ssd"
31
+ @@ssd_path = ".ssd/#{@@ssd_name}/#{@ssd}.ssd"
32
32
  @@ssd_db = PStore.new @@ssd_path, true
33
33
  @@ssd_db.ultra_safe = true
34
34
  @@ssd_db.transaction(true) {}
@@ -44,14 +44,13 @@ module SSD
44
44
 
45
45
  def []=
46
46
  begin
47
- if !@id.nil? then
47
+ if !@ssd.nil? then
48
48
  @@ssd_db.transaction do
49
- #todo should be somthing like??? timestamp instead of id as a key?? and use .last while reading
50
- #@@ssd_db[id.to_sym] = self
49
+ #todo should be somthing like??? timestamp instead of ssd as a key?? and use .last while reading
51
50
  @@ssd_db[Time.now.utc.to_s + "_" + Random.new_seed.to_s ] = self
52
51
  end
53
52
  else
54
- raise 'ssd id can not be nil. see more (documentation url)'
53
+ raise 'ssd key can not be nil. see more (documentation url)'
55
54
  end
56
55
  end
57
56
  end
@@ -72,50 +71,50 @@ module SSD
72
71
  #@@ssd_db
73
72
  end
74
73
 
75
- def setup id
76
- @@id = id
74
+ def setup ssd
75
+ @@ssd = ssd
77
76
  FileUtils::mkdir_p ".ssd/#{@@ssd_name}"
78
- @@ssd_path = ".ssd/#{@@ssd_name}/#{@@id}.ssd"
77
+ @@ssd_path = ".ssd/#{@@ssd_name}/#{@@ssd}.ssd"
79
78
  @@ssd_db = PStore.new @@ssd_path, true
80
79
  @@ssd_db.ultra_safe = true
81
80
  @@ssd_db.transaction(true) {}
82
81
  return @@ssd_db
83
82
  end
84
83
 
85
- def last_key id
86
- setup id
84
+ def last_key ssd
85
+ setup ssd
87
86
  last_key = @@ssd_db.transaction true do
88
87
  @@ssd_db.roots
89
88
  end
90
89
  last_key.last
91
90
  end
92
91
 
93
- def keys id
94
- setup id
92
+ def keys ssd
93
+ setup ssd
95
94
  @@ssd_db.transaction true do
96
95
  @@ssd_db.roots
97
96
  end
98
97
  end
99
98
 
100
- def key? id
101
- setup id
99
+ def key? ssd
100
+ setup ssd
102
101
  @@ssd_db.transaction true do
103
- @@ssd_db.root? id.to_sym
102
+ @@ssd_db.root? ssd
104
103
  end
105
104
  end
106
105
 
107
106
  alias exists? key?
108
107
 
109
- def [] id
110
- setup id
108
+ def [] ssd
109
+ setup ssd
111
110
  @@ssd_db.transaction true do
112
- @@ssd_db[id.to_sym]
111
+ @@ssd_db[ssd]
113
112
  end
114
113
  end
115
114
 
116
- def ssd id
117
- #TODO add raise if id.nil?
118
- last_key = (last_key id)
115
+ def ssd ssd
116
+ #TODO add raise if ssd.nil?
117
+ last_key = (last_key ssd)
119
118
  @@ssd_db.transaction true do
120
119
  @@ssd_db.fetch last_key
121
120
  end
@@ -124,20 +123,20 @@ module SSD
124
123
  #alias get fetch
125
124
  #alias find fetch
126
125
 
127
- def delete *ids
126
+ def delete *ssds
128
127
  @@ssd_db.transaction do
129
- ids.each do |id|
130
- @@ssd_db.delete id.to_sym
128
+ ssds.each do |ssd|
129
+ @@ssd_db.delete ssd.to_sym
131
130
  end
132
131
  @@ssd_db.commit
133
132
  end
134
133
  end
135
134
  alias remove delete
136
135
 
137
- def count id
138
- setup id
136
+ def count ssd
137
+ setup ssd
139
138
  $log.info("count")
140
- return keys(id).count
139
+ return keys(ssd).count
141
140
  end
142
141
  end
143
142
 
data/lib/ssd/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module SSD
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
data/specs/ssd_spec.rb CHANGED
@@ -3,21 +3,31 @@ require_relative "./spec_helper"
3
3
  describe SSD do
4
4
 
5
5
  before do
6
- class User
6
+
7
+ class User
7
8
  include SSD
8
- attr_accessor :first_name, :last_name, :location
9
+ attr_accessor :id, :first_name, :last_name, :location
10
+
11
+ def initialize id=""
12
+ @ssd = id
13
+ end
14
+
15
+ def id= id
16
+ @id = id
17
+ @ssd = @id
18
+ end
9
19
  end
10
20
 
11
- @generated_id = Random.new.seed
21
+ @generated_ssd = Random.new.seed
12
22
  end
13
23
 
14
24
  describe "#append!" do
15
25
  it "saves an object to the database" do
16
26
  #skip
17
27
  @user = User.new
18
- @user.id = @generated_id
28
+ @user.ssd = @generated_ssd
19
29
  @user.append!
20
- @user.id.must_equal @generated_id
30
+ @user.ssd.must_equal @generated_ssd
21
31
  end
22
32
  end
23
33
 
@@ -25,10 +35,10 @@ describe SSD do
25
35
  it "fetches an object from the database" do
26
36
  # skip
27
37
  @user = User.new
28
- @user.id = @generated_id
38
+ @user.ssd = @generated_ssd
29
39
  @user.append!
30
- user = User.ssd(@generated_id)
31
- user.id.must_equal @generated_id
40
+ user = User.ssd(@generated_ssd)
41
+ user.ssd.must_equal @generated_ssd
32
42
  end
33
43
  end
34
44
 
@@ -36,19 +46,19 @@ describe SSD do
36
46
  it "it keeps adding new objects" do
37
47
  @user = User.new
38
48
 
39
- @user.id = @generated_id
49
+ @user.ssd = @generated_ssd
40
50
  @user.location = "Egypt"
41
51
  @user.append!
42
52
 
43
- @user = User.ssd(@generated_id)
53
+ @user = User.ssd(@generated_ssd)
44
54
  @user.location = "Brazil"
45
55
  @user.append!
46
56
 
47
- @user = User.ssd(@generated_id)
57
+ @user = User.ssd(@generated_ssd)
48
58
  @user.location = "France"
49
59
  @user.append!
50
60
 
51
- User.count(@generated_id).must_equal 3
61
+ User.count(@generated_ssd).must_equal 3
52
62
  end
53
63
  end
54
64
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ssd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - zotherstupidguy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-09-10 00:00:00.000000000 Z
11
+ date: 2016-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -67,6 +67,7 @@ files:
67
67
  - README.md
68
68
  - Rakefile
69
69
  - bin/console
70
+ - bin/repl.rb
70
71
  - bin/setup
71
72
  - lib/encrypt.rb
72
73
  - lib/ssd.rb