geode 0.1.0

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 (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/geode.rb +57 -0
  3. metadata +89 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e9d2e925a8364400b6115a4223c5856f12e2c24b56f1ef8bf1720e4d00e1e4c9
4
+ data.tar.gz: 8d6419d449bb81d08ea6eead65910120ec0e157d925b046847e8b191a4adf084
5
+ SHA512:
6
+ metadata.gz: 851f343021aa0a78e16cda8669ccacba8b40a608504352d59e87985287882da06b376de9fd99c918e89d4a0c30ecb61e9c7718a1ceb7ce340721886ba75f5a09
7
+ data.tar.gz: 62ab42620321c4e6c5c9c88a422d411732b31b6d01dad4cf9e1415338ad192da2e6870aa2f4826d73c566f3b063082feb42338d4288eb9ca1a47ce8c22024b3c
data/lib/geode.rb ADDED
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'redis'
4
+
5
+ require 'sequel'
6
+
7
+ module Geode
8
+ class RedisStore
9
+ def initialize(name)
10
+ @name = name
11
+ @redis = Redis.new
12
+ end
13
+
14
+ # "Open" the store for reading and/or writing.
15
+ # Returns the result of the block.
16
+ def open
17
+ table = if @redis.exists? @name
18
+ Marshal.load(@redis.get @name)
19
+ else
20
+ {}
21
+ end
22
+
23
+ (yield table).tap do
24
+ @redis.set(@name, Marshal.dump(table))
25
+ end
26
+ end
27
+ end
28
+
29
+ class PostgresStore
30
+ def initialize(name, connection=nil)
31
+ @name = name
32
+ @db = connection.nil? ? Sequel.postgres : Sequel.connect(connection)
33
+ @db.create_table? :geode do
34
+ primary_key :id
35
+ String :name
36
+ File :value
37
+ end
38
+
39
+ end
40
+
41
+ def open
42
+ geode = @db[:geode]
43
+ store = geode.where(name: @name)
44
+ table = if store.first.nil?
45
+ store.insert(name: @name, value: '')
46
+ {}
47
+ else
48
+ Marshal.load(store.first[:value])
49
+ end
50
+
51
+ (yield table).tap do
52
+ dumped = Marshal.dump(table)
53
+ store.update(value: Sequel.blob(dumped))
54
+ end
55
+ end
56
+ end
57
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: geode
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - biqqles
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-10-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pg
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
+ - !ruby/object:Gem::Dependency
28
+ name: redis
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sequel
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description:
56
+ email:
57
+ - biqqles@protonmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/geode.rb
63
+ homepage: https://github.com/biqqles/geode
64
+ licenses:
65
+ - MPL-2.0
66
+ metadata:
67
+ homepage_uri: https://github.com/biqqles/geode
68
+ source_code_uri: https://github.com/biqqles/geode
69
+ changelog_uri: https://github.com/biqqles/geode/releases
70
+ post_install_message:
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 2.4.0
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubygems_version: 3.1.2
86
+ signing_key:
87
+ specification_version: 4
88
+ summary: A simple hierarchical key-store for Ruby
89
+ test_files: []