supermodel 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -54,7 +54,9 @@ You can marshal objects to disk on startup/shutdown
54
54
  You can use Redis, you need the Redis gem installed:
55
55
 
56
56
  require "redis"
57
- class Test < SuperModel::Redis
57
+ class Test < SuperModel::Base
58
+ include SuperModel::Redis::Model
59
+
58
60
  attributes :name
59
61
  indexes :name
60
62
  end
data/Rakefile CHANGED
@@ -7,7 +7,7 @@ begin
7
7
  gemspec.homepage = "http://github.com/maccman/supermodel"
8
8
  gemspec.description = "In memory DB using ActiveModel"
9
9
  gemspec.authors = ["Alex MacCaw"]
10
- gemspec.add_dependency("activemodel", ">= 3.0.0.beta")
10
+ gemspec.add_dependency("activemodel", "~> 3.0.0")
11
11
  end
12
12
  rescue LoadError
13
13
  puts "Jeweler not available. Install it with: sudo gem install jeweler"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.1.5
data/lib/supermodel.rb CHANGED
@@ -2,15 +2,14 @@ gem "activesupport"
2
2
  gem "activemodel"
3
3
 
4
4
  require "active_support/core_ext/class/attribute_accessors"
5
- require "active_support/core_ext/class/inheritable_attributes"
6
5
  require "active_support/core_ext/hash/indifferent_access"
7
6
  require "active_support/core_ext/kernel/reporting"
8
- require "active_support/core_ext/module/attr_accessor_with_default"
9
7
  require "active_support/core_ext/module/delegation"
10
8
  require "active_support/core_ext/module/aliasing"
11
9
  require "active_support/core_ext/object/blank"
12
10
  require "active_support/core_ext/object/try"
13
11
  require "active_support/core_ext/object/to_query"
12
+ require "active_support/core_ext/class/attribute"
14
13
  require "active_support/json"
15
14
 
16
15
  require "active_model"
@@ -22,16 +21,17 @@ module SuperModel
22
21
  end
23
22
 
24
23
  $:.unshift(File.dirname(__FILE__))
25
-
26
24
  require "supermodel/ext/array"
27
25
 
28
- require "supermodel/association"
29
- require "supermodel/callbacks"
30
- require "supermodel/observing"
31
- require "supermodel/marshal"
32
- require "supermodel/random_id"
33
- require "supermodel/timestamp"
34
- require "supermodel/validations"
35
- require "supermodel/dirty"
36
- require "supermodel/base"
37
- require "supermodel/redis"
26
+ module SuperModel
27
+ autoload :Association, "supermodel/association"
28
+ autoload :Callbacks, "supermodel/callbacks"
29
+ autoload :Observing, "supermodel/observing"
30
+ autoload :Marshal, "supermodel/marshal"
31
+ autoload :RandomID, "supermodel/random_id"
32
+ autoload :Timestamp, "supermodel/timestamp"
33
+ autoload :Validations, "supermodel/validations"
34
+ autoload :Dirty, "supermodel/dirty"
35
+ autoload :Redis, "supermodel/redis"
36
+ autoload :Base, "supermodel/base"
37
+ end
@@ -1,10 +1,14 @@
1
1
  module SuperModel
2
2
  class Base
3
- class_inheritable_array :known_attributes
3
+ class_attribute :known_attributes
4
4
  self.known_attributes = []
5
5
 
6
6
  class << self
7
- attr_accessor_with_default(:primary_key, 'id') #:nodoc:
7
+ attr_accessor(:primary_key) #:nodoc:
8
+
9
+ def primary_key
10
+ @primary_key ||= 'id'
11
+ end
8
12
 
9
13
  def collection(&block)
10
14
  @collection ||= Class.new(Array)
@@ -120,12 +124,13 @@ module SuperModel
120
124
  attr_writer :new_record
121
125
 
122
126
  def known_attributes
123
- self.class.known_attributes + self.attributes.keys.map(&:to_s)
127
+ self.class.known_attributes | self.attributes.keys.map(&:to_s)
124
128
  end
125
129
 
126
130
  def initialize(attributes = {})
127
131
  @new_record = true
128
132
  @attributes = {}.with_indifferent_access
133
+ @attributes.merge!(known_attributes.inject({}) {|h, n| h[n] = nil; h })
129
134
  @changed_attributes = {}
130
135
  load(attributes)
131
136
  end
@@ -185,8 +190,10 @@ module SuperModel
185
190
  def exists?
186
191
  !new?
187
192
  end
193
+ alias_method :persisted?, :exists?
188
194
 
189
195
  def load(attributes) #:nodoc:
196
+ return unless attributes
190
197
  attributes.each do |(name, value)|
191
198
  self.send("#{name}=".to_sym, value)
192
199
  end
@@ -5,10 +5,7 @@ module SuperModel
5
5
  base.class_eval do
6
6
  class_inheritable_array :indexed_attributes
7
7
  self.indexed_attributes = []
8
-
9
- class_inheritable_array :serialized_attributes
10
- self.serialized_attributes = []
11
-
8
+
12
9
  class_inheritable_hash :redis_options
13
10
  self.redis_options = {}
14
11
  end
@@ -29,11 +26,7 @@ module SuperModel
29
26
  def indexes(*indexes)
30
27
  self.indexed_attributes += indexes.map(&:to_s)
31
28
  end
32
-
33
- def serialize(*attributes)
34
- self.serialized_attributes += attributes.map(&:to_s)
35
- end
36
-
29
+
37
30
  def redis_key(*args)
38
31
  args.unshift(self.namespace)
39
32
  args.join(":")
@@ -109,10 +102,7 @@ module SuperModel
109
102
 
110
103
  destroy_indexes
111
104
  redis.srem(self.class.redis_key, self.id)
112
-
113
- attributes.keys.each do |key|
114
- redis.del(redis_key(key))
115
- end
105
+ redis.del(redis_key)
116
106
  end
117
107
 
118
108
  def destroy_indexes
@@ -130,7 +120,7 @@ module SuperModel
130
120
  end
131
121
 
132
122
  def generate_id
133
- redis.incr(self.class.redis_key(:uid)).to_s
123
+ redis.incr(self.class.redis_key(:uid))
134
124
  end
135
125
 
136
126
  def indexed_attributes
@@ -140,36 +130,17 @@ module SuperModel
140
130
  def redis
141
131
  self.class.redis
142
132
  end
143
-
133
+
144
134
  def redis_key(*args)
145
135
  self.class.redis_key(id, *args)
146
136
  end
147
137
 
148
- def serialized_attributes
149
- self.class.serialized_attributes
150
- end
151
-
152
- def serialize_attribute(key, value)
153
- return value unless serialized_attributes.include?(key)
154
- value.to_json
155
- end
156
-
157
- def deserialize_attribute(key, value)
158
- return value unless serialized_attributes.include?(key)
159
- value && ActiveSupport::JSON.decode(value)
160
- end
161
-
162
138
  def redis_set
163
- serializable_hash.each do |(key, value)|
164
- redis.set(redis_key(key), serialize_attribute(key, value))
165
- end
139
+ redis.set(redis_key, serializable_hash.to_json)
166
140
  end
167
141
 
168
142
  def redis_get
169
- known_attributes.each do |key|
170
- result = deserialize_attribute(key, redis.get(redis_key(key)))
171
- send("#{key}=", result)
172
- end
143
+ load(ActiveSupport::JSON.decode(redis.get(redis_key)))
173
144
  end
174
145
  public :redis_get
175
146
 
@@ -1,11 +1,11 @@
1
- module ActiveModel
1
+ module SuperModel
2
2
  module Validations
3
- class UniquenessValidator < EachValidator
3
+ class UniquenessValidator < ActiveModel::EachValidator
4
4
  attr_reader :klass
5
5
 
6
6
  def validate_each(record, attribute, value)
7
7
  alternate = klass.find_by_attribute(attribute, value)
8
- return unless alternate == record
8
+ return unless alternate
9
9
  record.errors.add(attribute, "must be unique", :default => options[:message])
10
10
  end
11
11
 
data/supermodel.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
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-08-04}
12
+ s.date = %q{2010-08-30}
13
13
  s.description = %q{In memory DB using ActiveModel}
14
14
  s.email = %q{info@eribium.org}
15
15
  s.extra_rdoc_files = [
@@ -48,12 +48,12 @@ Gem::Specification.new do |s|
48
48
  s.specification_version = 3
49
49
 
50
50
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
- s.add_runtime_dependency(%q<activemodel>, [">= 3.0.0.beta"])
51
+ s.add_runtime_dependency(%q<activemodel>, [">= 3.0.0"])
52
52
  else
53
- s.add_dependency(%q<activemodel>, [">= 3.0.0.beta"])
53
+ s.add_dependency(%q<activemodel>, ["~> 3.0.0"])
54
54
  end
55
55
  else
56
- s.add_dependency(%q<activemodel>, [">= 3.0.0.beta"])
56
+ s.add_dependency(%q<activemodel>, ["~> 3.0.0"])
57
57
  end
58
58
  end
59
59
 
metadata CHANGED
@@ -1,48 +1,34 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: supermodel
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 4
9
- version: 0.1.4
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.5
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Alex MacCaw
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2010-08-04 00:00:00 +01:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2011-08-26 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: activemodel
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70137254259940 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 3
30
- - 0
31
- - 0
32
- - beta
33
- version: 3.0.0.beta
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.0
34
22
  type: :runtime
35
- version_requirements: *id001
23
+ prerelease: false
24
+ version_requirements: *70137254259940
36
25
  description: In memory DB using ActiveModel
37
26
  email: info@eribium.org
38
27
  executables: []
39
-
40
28
  extensions: []
41
-
42
- extra_rdoc_files:
29
+ extra_rdoc_files:
43
30
  - README
44
- files:
45
- - .gitignore
31
+ files:
46
32
  - MIT-LICENSE
47
33
  - README
48
34
  - Rakefile
@@ -62,37 +48,28 @@ files:
62
48
  - lib/supermodel/validations.rb
63
49
  - lib/supermodel/validations/uniqueness.rb
64
50
  - supermodel.gemspec
65
- has_rdoc: true
66
51
  homepage: http://github.com/maccman/supermodel
67
52
  licenses: []
68
-
69
53
  post_install_message:
70
- rdoc_options:
71
- - --charset=UTF-8
72
- require_paths:
54
+ rdoc_options: []
55
+ require_paths:
73
56
  - lib
74
- required_ruby_version: !ruby/object:Gem::Requirement
57
+ required_ruby_version: !ruby/object:Gem::Requirement
75
58
  none: false
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- segments:
80
- - 0
81
- version: "0"
82
- required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
83
64
  none: false
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- segments:
88
- - 0
89
- version: "0"
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
90
69
  requirements: []
91
-
92
70
  rubyforge_project:
93
- rubygems_version: 1.3.7
71
+ rubygems_version: 1.8.6
94
72
  signing_key:
95
73
  specification_version: 3
96
74
  summary: In memory DB using ActiveModel
97
75
  test_files: []
98
-
data/.gitignore DELETED
@@ -1,6 +0,0 @@
1
- dump.db
2
- test.rb
3
- redis_test.rb
4
- pkg
5
- lib/supermodel/cassandra.rb
6
- *.gem