shoden 0.1.0 → 0.1.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 +4 -4
- data/README.md +2 -0
- data/lib/shoden.rb +33 -9
- data/shoden.gemspec +1 -1
- data/test/shoden_test.rb +13 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7442a9c8dc8cf92f8b21c5f65164c7203997e22
|
4
|
+
data.tar.gz: 2e8ab617da448d44c007d316424d996055a9d656
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f85c95ca70139368f3f28ef288e834677524c259a776461696e64a8e3fee7bb6278952b0d1e137004a64241cff70b6626deb50b2a058cdbcc4bc8334e5c14cff
|
7
|
+
data.tar.gz: 5282c522a75466b3d1a5566a194fff963627d5d17098f7906c0888b83536f0f8e0c9a949dc2efae5bdf602106837c0a280952cc463b9ffdd40bc452da2c7f3d7
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Shoden
|
2
2
|
|
3
|
+

|
4
|
+
|
3
5
|
Shoden is a persistance library on top of Postgres.
|
4
6
|
It is basically an [Ohm](https://github.com/soveran/ohm) clone but using
|
5
7
|
Postgres as a main database.
|
data/lib/shoden.rb
CHANGED
@@ -4,6 +4,7 @@ Sequel.extension :pg_hstore, :pg_hstore_ops
|
|
4
4
|
|
5
5
|
module Shoden
|
6
6
|
MissingID = Class.new(StandardError)
|
7
|
+
NotFound = Class.new(StandardError)
|
7
8
|
|
8
9
|
Proxy = Struct.new(:klass, :parent) do
|
9
10
|
def create(args = {})
|
@@ -26,6 +27,12 @@ module Shoden
|
|
26
27
|
@_connection ||= Sequel.connect(url)
|
27
28
|
end
|
28
29
|
|
30
|
+
def self.destroy_all
|
31
|
+
connection.tables.select do |t|
|
32
|
+
connection.drop_table(t) if t.to_s.start_with?('Shoden::')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
29
36
|
class Model
|
30
37
|
def initialize(attrs = {})
|
31
38
|
@_id = attrs.delete(:id) if attrs[:id]
|
@@ -38,6 +45,10 @@ module Shoden
|
|
38
45
|
@_id.to_i
|
39
46
|
end
|
40
47
|
|
48
|
+
def destroy
|
49
|
+
lookup(id).delete
|
50
|
+
end
|
51
|
+
|
41
52
|
def update(attrs = {})
|
42
53
|
attrs.each { |name, value| send(:"#{name}=", value) }
|
43
54
|
end
|
@@ -48,12 +59,6 @@ module Shoden
|
|
48
59
|
end
|
49
60
|
|
50
61
|
def save
|
51
|
-
conn.execute("CREATE EXTENSION IF NOT EXISTS hstore")
|
52
|
-
conn.create_table? table_name do
|
53
|
-
primary_key :id
|
54
|
-
hstore :data
|
55
|
-
end
|
56
|
-
|
57
62
|
if defined? @_id
|
58
63
|
table.where(id: @_id).update data: @attributes
|
59
64
|
else
|
@@ -64,7 +69,7 @@ module Shoden
|
|
64
69
|
end
|
65
70
|
|
66
71
|
def load!
|
67
|
-
ret =
|
72
|
+
ret = lookup(@_id)
|
68
73
|
update(ret.to_a.first[:data])
|
69
74
|
self
|
70
75
|
end
|
@@ -97,7 +102,7 @@ module Shoden
|
|
97
102
|
define_method(writer) { |value| @attributes[reader] = value }
|
98
103
|
|
99
104
|
define_method(name) do
|
100
|
-
klass = Kernel.const_get(model)
|
105
|
+
klass = Kernel.const_get("Shoden::#{model}")
|
101
106
|
klass[send(reader)]
|
102
107
|
end
|
103
108
|
end
|
@@ -111,6 +116,23 @@ module Shoden
|
|
111
116
|
downcase.to_sym
|
112
117
|
end
|
113
118
|
|
119
|
+
def lookup(id)
|
120
|
+
raise NotFound if !conn.tables.include?(table_name.to_sym)
|
121
|
+
|
122
|
+
row = table.where(id: id)
|
123
|
+
raise NotFound if !row.any?
|
124
|
+
|
125
|
+
row
|
126
|
+
end
|
127
|
+
|
128
|
+
def setup
|
129
|
+
Shoden.connection.execute("CREATE EXTENSION IF NOT EXISTS hstore")
|
130
|
+
Shoden.connection.create_table? table_name do
|
131
|
+
primary_key :id
|
132
|
+
hstore :data
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
114
136
|
def table_name
|
115
137
|
:"Shoden::#{self.class.name}"
|
116
138
|
end
|
@@ -120,7 +142,9 @@ module Shoden
|
|
120
142
|
end
|
121
143
|
|
122
144
|
def conn
|
123
|
-
Shoden.connection
|
145
|
+
c = Shoden.connection
|
146
|
+
@created ||= setup
|
147
|
+
c
|
124
148
|
end
|
125
149
|
end
|
126
150
|
end
|
data/shoden.gemspec
CHANGED
data/test/shoden_test.rb
CHANGED
@@ -7,6 +7,10 @@ class User < Shoden::Model
|
|
7
7
|
attribute :name
|
8
8
|
end
|
9
9
|
|
10
|
+
setup do
|
11
|
+
Shoden.destroy_all
|
12
|
+
end
|
13
|
+
|
10
14
|
test 'model' do
|
11
15
|
model = Model.create
|
12
16
|
assert_equal model.id.class, Fixnum
|
@@ -54,3 +58,12 @@ test 'relations' do
|
|
54
58
|
assert sprout.is_a?(Sprout)
|
55
59
|
assert_equal sprout.tree.id, tree.id
|
56
60
|
end
|
61
|
+
|
62
|
+
test 'deletion' do
|
63
|
+
user = User.create(name: 'Damian')
|
64
|
+
id = user.id
|
65
|
+
|
66
|
+
user.destroy
|
67
|
+
|
68
|
+
assert_raise(Shoden::NotFound) { User[id] }
|
69
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shoden
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- elcuervo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|