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 CHANGED
@@ -1 +1 @@
1
- 0.1.3
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"
@@ -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 {|(name, value)|
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)
@@ -0,0 +1,7 @@
1
+ class Array
2
+ unless defined?(deep_dup)
3
+ def deep_dup
4
+ Marshal.load(Marshal.dump(self))
5
+ end
6
+ end
7
+ end
@@ -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.new
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.set_member?(redis_key, id.to_s)
63
+ redis.sismember(redis_key, id.to_s)
60
64
  end
61
65
 
62
66
  def count
63
- redis.set_count(redis_key)
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
- # Redis integers are stored as strings
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.delete(redis_key(key))
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.parse(value)
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.3"
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-05-11}
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.6}
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::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
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
- - 3
9
- version: 0.1.3
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-05-11 00:00:00 +01:00
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.6
93
+ rubygems_version: 1.3.7
90
94
  signing_key:
91
95
  specification_version: 3
92
96
  summary: In memory DB using ActiveModel