supermodel 0.1.3 → 0.1.4
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.
- data/VERSION +1 -1
- data/lib/supermodel.rb +3 -2
- data/lib/supermodel/base.rb +15 -4
- data/lib/supermodel/ext/array.rb +7 -0
- data/lib/supermodel/redis.rb +16 -13
- data/supermodel.gemspec +5 -4
- metadata +8 -4
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.1.
|
|
1
|
+
0.1.4
|
data/lib/supermodel.rb
CHANGED
|
@@ -9,13 +9,12 @@ require "active_support/core_ext/module/attr_accessor_with_default"
|
|
|
9
9
|
require "active_support/core_ext/module/delegation"
|
|
10
10
|
require "active_support/core_ext/module/aliasing"
|
|
11
11
|
require "active_support/core_ext/object/blank"
|
|
12
|
-
require "active_support/core_ext/object/misc"
|
|
13
12
|
require "active_support/core_ext/object/try"
|
|
14
13
|
require "active_support/core_ext/object/to_query"
|
|
14
|
+
require "active_support/json"
|
|
15
15
|
|
|
16
16
|
require "active_model"
|
|
17
17
|
|
|
18
|
-
|
|
19
18
|
module SuperModel
|
|
20
19
|
class SuperModelError < StandardError; end
|
|
21
20
|
class UnknownRecord < SuperModelError; end
|
|
@@ -24,6 +23,8 @@ end
|
|
|
24
23
|
|
|
25
24
|
$:.unshift(File.dirname(__FILE__))
|
|
26
25
|
|
|
26
|
+
require "supermodel/ext/array"
|
|
27
|
+
|
|
27
28
|
require "supermodel/association"
|
|
28
29
|
require "supermodel/callbacks"
|
|
29
30
|
require "supermodel/observing"
|
data/lib/supermodel/base.rb
CHANGED
|
@@ -27,7 +27,7 @@ module SuperModel
|
|
|
27
27
|
|
|
28
28
|
def find_all_by_attribute(name, value) #:nodoc:
|
|
29
29
|
items = records.values.select {|r| r.send(name) == value }
|
|
30
|
-
collection.new(items)
|
|
30
|
+
collection.new(items.deep_dup)
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def raw_find(id) #:nodoc:
|
|
@@ -60,7 +60,11 @@ module SuperModel
|
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
def all
|
|
63
|
-
collection.new(records.values)
|
|
63
|
+
collection.new(records.values.deep_dup)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def select(&block)
|
|
67
|
+
collection.new(records.values.select(&block).deep_dup)
|
|
64
68
|
end
|
|
65
69
|
|
|
66
70
|
def update(id, atts)
|
|
@@ -183,9 +187,16 @@ module SuperModel
|
|
|
183
187
|
end
|
|
184
188
|
|
|
185
189
|
def load(attributes) #:nodoc:
|
|
186
|
-
attributes.each
|
|
190
|
+
attributes.each do |(name, value)|
|
|
187
191
|
self.send("#{name}=".to_sym, value)
|
|
188
|
-
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def reload
|
|
196
|
+
return self if new?
|
|
197
|
+
item = self.class.find(id)
|
|
198
|
+
load(item.attributes)
|
|
199
|
+
return self
|
|
189
200
|
end
|
|
190
201
|
|
|
191
202
|
def update_attribute(name, value)
|
data/lib/supermodel/redis.rb
CHANGED
|
@@ -5,8 +5,12 @@ module SuperModel
|
|
|
5
5
|
base.class_eval do
|
|
6
6
|
class_inheritable_array :indexed_attributes
|
|
7
7
|
self.indexed_attributes = []
|
|
8
|
+
|
|
8
9
|
class_inheritable_array :serialized_attributes
|
|
9
10
|
self.serialized_attributes = []
|
|
11
|
+
|
|
12
|
+
class_inheritable_hash :redis_options
|
|
13
|
+
self.redis_options = {}
|
|
10
14
|
end
|
|
11
15
|
end
|
|
12
16
|
|
|
@@ -19,7 +23,7 @@ module SuperModel
|
|
|
19
23
|
end
|
|
20
24
|
|
|
21
25
|
def redis
|
|
22
|
-
@redis ||= ::Redis.
|
|
26
|
+
@redis ||= ::Redis.connect(redis_options)
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
def indexes(*indexes)
|
|
@@ -56,17 +60,21 @@ module SuperModel
|
|
|
56
60
|
end
|
|
57
61
|
|
|
58
62
|
def exists?(id)
|
|
59
|
-
redis.
|
|
63
|
+
redis.sismember(redis_key, id.to_s)
|
|
60
64
|
end
|
|
61
65
|
|
|
62
66
|
def count
|
|
63
|
-
redis.
|
|
67
|
+
redis.scard(redis_key)
|
|
64
68
|
end
|
|
65
69
|
|
|
66
70
|
def all
|
|
67
71
|
from_ids(redis.sort(redis_key))
|
|
68
72
|
end
|
|
69
73
|
|
|
74
|
+
def select
|
|
75
|
+
raise "Not implemented"
|
|
76
|
+
end
|
|
77
|
+
|
|
70
78
|
def delete_all
|
|
71
79
|
raise "Not implemented"
|
|
72
80
|
end
|
|
@@ -94,13 +102,8 @@ module SuperModel
|
|
|
94
102
|
end
|
|
95
103
|
end
|
|
96
104
|
|
|
97
|
-
module InstanceMethods
|
|
98
|
-
|
|
99
|
-
def id
|
|
100
|
-
super.try(:to_s)
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
protected
|
|
105
|
+
module InstanceMethods
|
|
106
|
+
protected
|
|
104
107
|
def raw_destroy
|
|
105
108
|
return if new?
|
|
106
109
|
|
|
@@ -108,7 +111,7 @@ module SuperModel
|
|
|
108
111
|
redis.srem(self.class.redis_key, self.id)
|
|
109
112
|
|
|
110
113
|
attributes.keys.each do |key|
|
|
111
|
-
redis.
|
|
114
|
+
redis.del(redis_key(key))
|
|
112
115
|
end
|
|
113
116
|
end
|
|
114
117
|
|
|
@@ -127,7 +130,7 @@ module SuperModel
|
|
|
127
130
|
end
|
|
128
131
|
|
|
129
132
|
def generate_id
|
|
130
|
-
redis.incr(self.class.redis_key(:uid))
|
|
133
|
+
redis.incr(self.class.redis_key(:uid)).to_s
|
|
131
134
|
end
|
|
132
135
|
|
|
133
136
|
def indexed_attributes
|
|
@@ -153,7 +156,7 @@ module SuperModel
|
|
|
153
156
|
|
|
154
157
|
def deserialize_attribute(key, value)
|
|
155
158
|
return value unless serialized_attributes.include?(key)
|
|
156
|
-
value && JSON.
|
|
159
|
+
value && ActiveSupport::JSON.decode(value)
|
|
157
160
|
end
|
|
158
161
|
|
|
159
162
|
def redis_set
|
data/supermodel.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{supermodel}
|
|
8
|
-
s.version = "0.1.
|
|
8
|
+
s.version = "0.1.4"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Alex MacCaw"]
|
|
12
|
-
s.date = %q{2010-
|
|
12
|
+
s.date = %q{2010-08-04}
|
|
13
13
|
s.description = %q{In memory DB using ActiveModel}
|
|
14
14
|
s.email = %q{info@eribium.org}
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
|
27
27
|
"lib/supermodel/base.rb",
|
|
28
28
|
"lib/supermodel/callbacks.rb",
|
|
29
29
|
"lib/supermodel/dirty.rb",
|
|
30
|
+
"lib/supermodel/ext/array.rb",
|
|
30
31
|
"lib/supermodel/marshal.rb",
|
|
31
32
|
"lib/supermodel/observing.rb",
|
|
32
33
|
"lib/supermodel/random_id.rb",
|
|
@@ -39,14 +40,14 @@ Gem::Specification.new do |s|
|
|
|
39
40
|
s.homepage = %q{http://github.com/maccman/supermodel}
|
|
40
41
|
s.rdoc_options = ["--charset=UTF-8"]
|
|
41
42
|
s.require_paths = ["lib"]
|
|
42
|
-
s.rubygems_version = %q{1.3.
|
|
43
|
+
s.rubygems_version = %q{1.3.7}
|
|
43
44
|
s.summary = %q{In memory DB using ActiveModel}
|
|
44
45
|
|
|
45
46
|
if s.respond_to? :specification_version then
|
|
46
47
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
|
47
48
|
s.specification_version = 3
|
|
48
49
|
|
|
49
|
-
if Gem::Version.new(Gem::
|
|
50
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
50
51
|
s.add_runtime_dependency(%q<activemodel>, [">= 3.0.0.beta"])
|
|
51
52
|
else
|
|
52
53
|
s.add_dependency(%q<activemodel>, [">= 3.0.0.beta"])
|
metadata
CHANGED
|
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
|
5
5
|
segments:
|
|
6
6
|
- 0
|
|
7
7
|
- 1
|
|
8
|
-
-
|
|
9
|
-
version: 0.1.
|
|
8
|
+
- 4
|
|
9
|
+
version: 0.1.4
|
|
10
10
|
platform: ruby
|
|
11
11
|
authors:
|
|
12
12
|
- Alex MacCaw
|
|
@@ -14,13 +14,14 @@ autorequire:
|
|
|
14
14
|
bindir: bin
|
|
15
15
|
cert_chain: []
|
|
16
16
|
|
|
17
|
-
date: 2010-
|
|
17
|
+
date: 2010-08-04 00:00:00 +01:00
|
|
18
18
|
default_executable:
|
|
19
19
|
dependencies:
|
|
20
20
|
- !ruby/object:Gem::Dependency
|
|
21
21
|
name: activemodel
|
|
22
22
|
prerelease: false
|
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
|
24
|
+
none: false
|
|
24
25
|
requirements:
|
|
25
26
|
- - ">="
|
|
26
27
|
- !ruby/object:Gem::Version
|
|
@@ -52,6 +53,7 @@ files:
|
|
|
52
53
|
- lib/supermodel/base.rb
|
|
53
54
|
- lib/supermodel/callbacks.rb
|
|
54
55
|
- lib/supermodel/dirty.rb
|
|
56
|
+
- lib/supermodel/ext/array.rb
|
|
55
57
|
- lib/supermodel/marshal.rb
|
|
56
58
|
- lib/supermodel/observing.rb
|
|
57
59
|
- lib/supermodel/random_id.rb
|
|
@@ -70,6 +72,7 @@ rdoc_options:
|
|
|
70
72
|
require_paths:
|
|
71
73
|
- lib
|
|
72
74
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
75
|
+
none: false
|
|
73
76
|
requirements:
|
|
74
77
|
- - ">="
|
|
75
78
|
- !ruby/object:Gem::Version
|
|
@@ -77,6 +80,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
77
80
|
- 0
|
|
78
81
|
version: "0"
|
|
79
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
|
+
none: false
|
|
80
84
|
requirements:
|
|
81
85
|
- - ">="
|
|
82
86
|
- !ruby/object:Gem::Version
|
|
@@ -86,7 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
86
90
|
requirements: []
|
|
87
91
|
|
|
88
92
|
rubyforge_project:
|
|
89
|
-
rubygems_version: 1.3.
|
|
93
|
+
rubygems_version: 1.3.7
|
|
90
94
|
signing_key:
|
|
91
95
|
specification_version: 3
|
|
92
96
|
summary: In memory DB using ActiveModel
|