supermodel 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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