shoden 0.1.1 → 0.2.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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/shoden.rb +24 -5
- data/shoden.gemspec +1 -1
- data/test/shoden_test.rb +11 -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: 47609f0a06edadfafbcc844d6b91d23eca91244e
|
4
|
+
data.tar.gz: e7507a40336852be18a4cd30e7c3b78168f4bc3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa632c8f3b300e52655d5a3c5ce27777e348e5cea84f8e75d6533c594911bc367c1f765f0bf94633081d192bf112e339a8952528058c878369c734604e840cfb
|
7
|
+
data.tar.gz: 2bc95a32031322ca1601cff586950f305fb12623829848c1207d9a9bac383f9c36382fdd137244f45e23a0ab0755b1c2bad604a90a642e5a147d5e0ed67a14f4
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
#
|
1
|
+
# Shôden
|
2
2
|
|
3
3
|

|
4
4
|
|
5
|
-
|
5
|
+
Shôden is a persistance library on top of Postgres.
|
6
6
|
It is basically an [Ohm](https://github.com/soveran/ohm) clone but using
|
7
7
|
Postgres as a main database.
|
8
8
|
|
data/lib/shoden.rb
CHANGED
@@ -36,7 +36,7 @@ module Shoden
|
|
36
36
|
class Model
|
37
37
|
def initialize(attrs = {})
|
38
38
|
@_id = attrs.delete(:id) if attrs[:id]
|
39
|
-
@attributes =
|
39
|
+
@attributes = {}
|
40
40
|
update(attrs)
|
41
41
|
end
|
42
42
|
|
@@ -60,9 +60,9 @@ module Shoden
|
|
60
60
|
|
61
61
|
def save
|
62
62
|
if defined? @_id
|
63
|
-
table.where(id: @_id).update data:
|
63
|
+
table.where(id: @_id).update data: sanitized_attrs
|
64
64
|
else
|
65
|
-
@_id = table.insert data:
|
65
|
+
@_id = table.insert data: sanitized_attrs
|
66
66
|
end
|
67
67
|
|
68
68
|
self
|
@@ -78,12 +78,18 @@ module Shoden
|
|
78
78
|
new(attrs).save
|
79
79
|
end
|
80
80
|
|
81
|
+
def self.attributes
|
82
|
+
@attributes ||= []
|
83
|
+
end
|
84
|
+
|
81
85
|
def self.[](id)
|
82
86
|
new(id: id).load!
|
83
87
|
end
|
84
88
|
|
85
|
-
def self.attribute(name)
|
86
|
-
|
89
|
+
def self.attribute(name, caster = ->(x) { x })
|
90
|
+
attributes << name if !attributes.include?(name)
|
91
|
+
|
92
|
+
define_method(name) { caster[@attributes[name]] }
|
87
93
|
define_method(:"#{name}=") { |value| @attributes[name] = value }
|
88
94
|
end
|
89
95
|
|
@@ -98,6 +104,8 @@ module Shoden
|
|
98
104
|
reader = :"#{name}_id"
|
99
105
|
writer = :"#{name}_id="
|
100
106
|
|
107
|
+
attributes << name if !attributes.include?(name)
|
108
|
+
|
101
109
|
define_method(reader) { @attributes[reader] }
|
102
110
|
define_method(writer) { |value| @attributes[reader] = value }
|
103
111
|
|
@@ -116,6 +124,17 @@ module Shoden
|
|
116
124
|
downcase.to_sym
|
117
125
|
end
|
118
126
|
|
127
|
+
def sanitized_attrs
|
128
|
+
sanitized = @attributes.map do |k, _|
|
129
|
+
val = send(k)
|
130
|
+
return if !val
|
131
|
+
|
132
|
+
[k, val.to_s]
|
133
|
+
end.compact
|
134
|
+
|
135
|
+
Sequel::Postgres::HStore.new(sanitized)
|
136
|
+
end
|
137
|
+
|
119
138
|
def lookup(id)
|
120
139
|
raise NotFound if !conn.tables.include?(table_name.to_sym)
|
121
140
|
|
data/shoden.gemspec
CHANGED
data/test/shoden_test.rb
CHANGED
@@ -67,3 +67,14 @@ test 'deletion' do
|
|
67
67
|
|
68
68
|
assert_raise(Shoden::NotFound) { User[id] }
|
69
69
|
end
|
70
|
+
|
71
|
+
test 'casting' do
|
72
|
+
class A < Shoden::Model
|
73
|
+
attribute :n, ->(x) { x.to_i }
|
74
|
+
end
|
75
|
+
|
76
|
+
a = A.create(n: 1)
|
77
|
+
a_prime = A[a.id]
|
78
|
+
|
79
|
+
assert_equal a_prime.n, 1
|
80
|
+
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.
|
4
|
+
version: 0.2.0
|
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-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|