ohm-contrib 0.1.2 → 1.0.rc0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/ohm/{contrib/callbacks.rb → callbacks.rb} +20 -65
- data/lib/ohm/contrib.rb +9 -17
- data/lib/ohm/datatypes.rb +38 -0
- data/lib/ohm/{contrib/locking.rb → locking.rb} +1 -2
- data/lib/ohm/plugin.rb +54 -0
- data/lib/ohm/{contrib/scope.rb → scope.rb} +7 -6
- data/lib/ohm/{contrib/slug.rb → slug.rb} +11 -6
- data/lib/ohm/{contrib/soft_delete.rb → softdelete.rb} +23 -19
- data/lib/ohm/timestamping.rb +41 -0
- data/ohm-contrib.gemspec +30 -0
- data/rakefile +6 -0
- data/test/{instance_callbacks_test.rb → instance_callbacks.rb} +2 -6
- data/test/{macro_callbacks_test.rb → macro_callbacks.rb} +1 -9
- data/test/plugin.rb +212 -0
- data/test/{scope_test.rb → scope.rb} +2 -3
- data/test/slug.rb +24 -0
- data/test/{soft_delete_test.rb → soft_delete.rb} +13 -3
- data/test/{timestamping_test.rb → timestamping.rb} +5 -6
- metadata +33 -70
- data/Rakefile +0 -8
- data/lib/ohm/contrib/active_model_extension.rb +0 -87
- data/lib/ohm/contrib/boundaries.rb +0 -41
- data/lib/ohm/contrib/date_validations.rb +0 -23
- data/lib/ohm/contrib/extra_validations.rb +0 -48
- data/lib/ohm/contrib/fulltext_searching.rb +0 -80
- data/lib/ohm/contrib/length_validations.rb +0 -32
- data/lib/ohm/contrib/number_validations.rb +0 -14
- data/lib/ohm/contrib/timestamping.rb +0 -38
- data/lib/ohm/contrib/typecast.rb +0 -350
- data/lib/ohm/contrib/web_validations.rb +0 -52
- data/test/activemodel_test.rb +0 -27
- data/test/boundaries_test.rb +0 -45
- data/test/callbacks_lint.rb +0 -141
- data/test/date_validations_test.rb +0 -29
- data/test/fixtures/ascii8bit.txt +0 -1
- data/test/fulltext_searching_test.rb +0 -63
- data/test/length_validations_test.rb +0 -31
- data/test/membership_validation_test.rb +0 -31
- data/test/number_validations_test.rb +0 -37
- data/test/slug_test.rb +0 -30
- data/test/typecast_array_test.rb +0 -146
- data/test/typecast_boolean_test.rb +0 -43
- data/test/typecast_date_test.rb +0 -82
- data/test/typecast_decimal_test.rb +0 -82
- data/test/typecast_existing_attribute_test.rb +0 -22
- data/test/typecast_float_test.rb +0 -57
- data/test/typecast_hash_test.rb +0 -120
- data/test/typecast_integer_test.rb +0 -71
- data/test/typecast_string_test.rb +0 -43
- data/test/typecast_time_test.rb +0 -72
- data/test/typecast_timezone_test.rb +0 -37
- data/test/web_validations_test.rb +0 -79
@@ -4,8 +4,6 @@ module Ohm
|
|
4
4
|
# You can implement callbacks by overriding any of the following
|
5
5
|
# methods:
|
6
6
|
#
|
7
|
-
# - before_validate
|
8
|
-
# - after_validate
|
9
7
|
# - before_create
|
10
8
|
# - after_create
|
11
9
|
# - before_save
|
@@ -22,8 +20,6 @@ module Ohm
|
|
22
20
|
# class Post < Ohm::Model
|
23
21
|
# include Ohm::Callbacks
|
24
22
|
#
|
25
|
-
# before :validate, :clean_decimals
|
26
|
-
#
|
27
23
|
# before :create, :timestamp!
|
28
24
|
# before :save, :recalc_votes
|
29
25
|
#
|
@@ -53,11 +49,11 @@ module Ohm
|
|
53
49
|
# end
|
54
50
|
|
55
51
|
module Callbacks
|
56
|
-
def self.included(
|
57
|
-
|
52
|
+
def self.included(model)
|
53
|
+
model.extend ClassMethods
|
58
54
|
end
|
59
55
|
|
60
|
-
module
|
56
|
+
module ClassMethods
|
61
57
|
# Use to add a before callback on `method`. Only symbols
|
62
58
|
# are allowed, no string eval, no block option also.
|
63
59
|
#
|
@@ -79,12 +75,12 @@ module Ohm
|
|
79
75
|
# end
|
80
76
|
# end
|
81
77
|
#
|
82
|
-
# @param [Symbol] method the method type,
|
78
|
+
# @param [Symbol] method the method type, e.g. `:create`, or `:save`
|
83
79
|
# @param [Symbol] callback the name of the method to execute
|
84
80
|
# @return [Array] the callback in an array if added e.g. [:timestamp]
|
85
81
|
# @return [nil] if the callback already exists
|
86
82
|
def before(method, callback)
|
87
|
-
unless callbacks[:before][method].include?
|
83
|
+
unless callbacks[:before][method].include?(callback)
|
88
84
|
callbacks[:before][method] << callback
|
89
85
|
end
|
90
86
|
end
|
@@ -115,7 +111,7 @@ module Ohm
|
|
115
111
|
# @return [Array] the callback in an array if added e.g. [:timestamp]
|
116
112
|
# @return [nil] if the callback already exists
|
117
113
|
def after(method, callback)
|
118
|
-
unless callbacks[:after][method].include?
|
114
|
+
unless callbacks[:after][method].include?(callback)
|
119
115
|
callbacks[:after][method] << callback
|
120
116
|
end
|
121
117
|
end
|
@@ -126,76 +122,35 @@ module Ohm
|
|
126
122
|
end
|
127
123
|
end
|
128
124
|
|
129
|
-
# Overrides the validate method of Ohm::Model. This is a bit tricky,
|
130
|
-
# since typically you override this. Make sure you do something like:
|
131
|
-
#
|
132
|
-
# def validate
|
133
|
-
# super
|
134
|
-
#
|
135
|
-
# # do your assertions
|
136
|
-
# end
|
137
|
-
#
|
138
|
-
# This ensures that you call this method when you defined your own validate
|
139
|
-
# method.
|
140
|
-
#
|
141
|
-
# In all honesty, I don't see the value of putting this here, and I'm still
|
142
|
-
# weighing if this is _really_ needed.
|
143
|
-
def validate
|
144
|
-
execute_callback(:before, :validate)
|
145
|
-
super
|
146
|
-
execute_callback(:after, :validate)
|
147
|
-
end
|
148
|
-
|
149
125
|
# The overriden create of Ohm::Model. It checks if the
|
150
126
|
# model is valid, and executes all before :create callbacks.
|
151
127
|
#
|
152
128
|
# If the create succeeds, all after :create callbacks are
|
153
129
|
# executed.
|
154
|
-
def
|
155
|
-
|
130
|
+
def write
|
131
|
+
creating = @creating
|
156
132
|
|
157
|
-
execute_callback(:before, :create)
|
133
|
+
execute_callback(:before, :create) if creating
|
134
|
+
execute_callback(:before, :update) unless creating
|
158
135
|
execute_callback(:before, :save)
|
159
136
|
|
160
|
-
|
161
|
-
|
162
|
-
mutex do
|
163
|
-
create_model_membership
|
164
|
-
write
|
165
|
-
add_to_indices
|
137
|
+
super
|
166
138
|
|
167
|
-
|
168
|
-
|
169
|
-
|
139
|
+
execute_callback(:after, :create) if creating
|
140
|
+
execute_callback(:after, :update) unless creating
|
141
|
+
execute_callback(:after, :save)
|
170
142
|
end
|
171
143
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
# executed.
|
177
|
-
def save
|
178
|
-
return create if new?
|
179
|
-
return unless valid?
|
180
|
-
|
181
|
-
execute_callback(:before, :save)
|
182
|
-
execute_callback(:before, :update)
|
183
|
-
|
184
|
-
mutex do
|
185
|
-
write
|
186
|
-
update_indices
|
187
|
-
|
188
|
-
execute_callback(:after, :save)
|
189
|
-
execute_callback(:after, :update)
|
190
|
-
end
|
144
|
+
def create
|
145
|
+
@creating = true
|
146
|
+
super
|
147
|
+
@creating = false
|
191
148
|
end
|
192
149
|
|
193
150
|
def delete
|
194
151
|
execute_callback(:before, :delete)
|
195
|
-
|
196
|
-
|
197
|
-
execute_callback(:after, :delete) if is_deleted
|
198
|
-
end
|
152
|
+
super
|
153
|
+
execute_callback(:after, :delete)
|
199
154
|
end
|
200
155
|
|
201
156
|
protected
|
data/lib/ohm/contrib.rb
CHANGED
@@ -1,21 +1,13 @@
|
|
1
|
+
require_relative "callbacks"
|
2
|
+
require_relative "datatypes"
|
3
|
+
require_relative "locking"
|
4
|
+
require_relative "scope"
|
5
|
+
require_relative "slug"
|
6
|
+
require_relative "softdelete"
|
7
|
+
require_relative "timestamping"
|
8
|
+
|
1
9
|
module Ohm
|
2
10
|
module Contrib
|
3
|
-
VERSION = "0.
|
11
|
+
VERSION = "1.0.rc0"
|
4
12
|
end
|
5
|
-
|
6
|
-
autoload :ActiveModelExtension, "ohm/contrib/active_model_extension"
|
7
|
-
autoload :Boundaries, "ohm/contrib/boundaries"
|
8
|
-
autoload :Timestamping, "ohm/contrib/timestamping"
|
9
|
-
autoload :LengthValidations, "ohm/contrib/length_validations"
|
10
|
-
autoload :WebValidations, "ohm/contrib/web_validations"
|
11
|
-
autoload :NumberValidations, "ohm/contrib/number_validations"
|
12
|
-
autoload :DateValidations, "ohm/contrib/date_validations"
|
13
|
-
autoload :ExtraValidations, "ohm/contrib/extra_validations"
|
14
|
-
autoload :Typecast, "ohm/contrib/typecast"
|
15
|
-
autoload :Locking, "ohm/contrib/locking"
|
16
|
-
autoload :Callbacks, "ohm/contrib/callbacks"
|
17
|
-
autoload :Slug, "ohm/contrib/slug"
|
18
|
-
autoload :Scope, "ohm/contrib/scope"
|
19
|
-
autoload :SoftDelete, "ohm/contrib/soft_delete"
|
20
|
-
autoload :FulltextSearching, "ohm/contrib/fulltext_searching"
|
21
13
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "bigdecimal"
|
2
|
+
require "date"
|
3
|
+
require "json"
|
4
|
+
require "time"
|
5
|
+
|
6
|
+
module Ohm
|
7
|
+
module DataTypes
|
8
|
+
module Type
|
9
|
+
Integer = lambda { |x| x.to_i }
|
10
|
+
Decimal = lambda { |x| x && BigDecimal(x.to_s) }
|
11
|
+
Float = lambda { |x| x.to_f }
|
12
|
+
Boolean = lambda { |x| !!x }
|
13
|
+
Time = lambda { |t| t && (t.kind_of?(::Time) ? t : ::Time.parse(t)) }
|
14
|
+
Date = lambda { |d| d && (d.kind_of?(::Date) ? d : ::Date.parse(d)) }
|
15
|
+
Timestamp = lambda { |t| t && UnixTime.at(t.to_i) }
|
16
|
+
Hash = lambda { |h| h && (h.kind_of?(::Hash) ? SerializedHash[h] : JSON(h)) }
|
17
|
+
Array = lambda { |a| a && (a.kind_of?(::Array) ? SerializedArray.new(a) : JSON(a)) }
|
18
|
+
end
|
19
|
+
|
20
|
+
class UnixTime < Time
|
21
|
+
def to_s
|
22
|
+
to_i.to_s
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class SerializedHash < Hash
|
27
|
+
def to_s
|
28
|
+
JSON.dump(self)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class SerializedArray < Array
|
33
|
+
def to_s
|
34
|
+
JSON.dump(self)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/ohm/plugin.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
module Ohm
|
2
|
+
module Plugin
|
3
|
+
def plugin(name)
|
4
|
+
mixin = Plugin[name]
|
5
|
+
|
6
|
+
include mixin
|
7
|
+
extend mixin::ClassMethods if mixin.const_defined?(:ClassMethods, false)
|
8
|
+
|
9
|
+
mixin.setup(self) if mixin.respond_to?(:setup)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.[](plugin)
|
13
|
+
case plugin
|
14
|
+
when Module
|
15
|
+
plugin
|
16
|
+
when Symbol
|
17
|
+
name, path = Plugin.registry[plugin]
|
18
|
+
|
19
|
+
raise Unknown.new(plugin) if name.nil?
|
20
|
+
|
21
|
+
require path
|
22
|
+
Ohm.const_get(name, false)
|
23
|
+
else
|
24
|
+
raise Unknown.new(plugin)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.register(name, name_and_path)
|
29
|
+
registry[name] = name_and_path
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.registry
|
33
|
+
@registry ||= {
|
34
|
+
:callbacks => [:Callbacks, "ohm/contrib/callbacks"],
|
35
|
+
:datatypes => [:DataTypes, "ohm/contrib/data_types"],
|
36
|
+
:locking => [:Locking, "ohm/contrib/locking"],
|
37
|
+
:scope => [:Scope, "ohm/contrib/scope"],
|
38
|
+
:slug => [:Slug, "ohm/contrib/slug"],
|
39
|
+
:softdelete => [:SoftDelete, "ohm/contrib/soft_delete"],
|
40
|
+
:timestamping => [:Timestamping, "ohm/contrib/timestamping"]
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
class Unknown < StandardError
|
45
|
+
def initialize(plugin)
|
46
|
+
@plugin = plugin
|
47
|
+
end
|
48
|
+
|
49
|
+
def message
|
50
|
+
"Unknown plugin: #{@plugin}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module Ohm
|
2
2
|
module Scope
|
3
|
-
def self.included(
|
4
|
-
unless
|
5
|
-
|
3
|
+
def self.included(model)
|
4
|
+
unless model.const_defined?(:DefinedScopes, false)
|
5
|
+
model.const_set(:DefinedScopes, Module.new)
|
6
6
|
end
|
7
7
|
|
8
|
-
|
8
|
+
model.extend ClassMethods
|
9
9
|
end
|
10
10
|
|
11
|
-
module
|
11
|
+
module ClassMethods
|
12
12
|
def scope(scope = nil, &block)
|
13
13
|
self::DefinedScopes.module_eval(&block) if block_given?
|
14
14
|
self::DefinedScopes.send(:include, scope) if scope
|
@@ -25,5 +25,6 @@ module Ohm
|
|
25
25
|
|
26
26
|
Ohm::Model::Set.send :include, OverloadedSet
|
27
27
|
end
|
28
|
-
end
|
29
28
|
|
29
|
+
Model::Set.send :include, Scope::OverloadedSet
|
30
|
+
end
|
@@ -1,17 +1,17 @@
|
|
1
1
|
module Ohm
|
2
2
|
module Slug
|
3
|
-
def self.included(
|
4
|
-
|
3
|
+
def self.included(model)
|
4
|
+
model.extend ClassMethods
|
5
5
|
end
|
6
6
|
|
7
|
-
module
|
7
|
+
module ClassMethods
|
8
8
|
def [](id)
|
9
9
|
super(id.to_i)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
def slug(str = to_s)
|
14
|
-
ret =
|
14
|
+
ret = transcode(str)
|
15
15
|
ret.gsub!("'", "")
|
16
16
|
ret.gsub!(/\p{^Alnum}/u, " ")
|
17
17
|
ret.strip!
|
@@ -20,16 +20,21 @@ module Ohm
|
|
20
20
|
end
|
21
21
|
module_function :slug
|
22
22
|
|
23
|
-
def
|
23
|
+
def transcode(str)
|
24
24
|
begin
|
25
|
+
# TODO: replace with a String#encode version which will
|
26
|
+
# contain proper transliteration tables. For now, Iconv
|
27
|
+
# still wins because we get that for free.
|
28
|
+
v, $VERBOSE = $VERBOSE, nil
|
25
29
|
require "iconv"
|
30
|
+
$VERBOSE = v
|
26
31
|
|
27
32
|
Iconv.iconv("ascii//translit//ignore", "utf-8", str)[0]
|
28
33
|
rescue LoadError
|
29
34
|
return str
|
30
35
|
end
|
31
36
|
end
|
32
|
-
module_function :
|
37
|
+
module_function :transcode
|
33
38
|
|
34
39
|
def to_param
|
35
40
|
"#{ id }-#{ slug }"
|
@@ -4,7 +4,7 @@ module Ohm
|
|
4
4
|
# @example
|
5
5
|
#
|
6
6
|
# class Post < Ohm::Model
|
7
|
-
#
|
7
|
+
# plugin :softdelete
|
8
8
|
#
|
9
9
|
# attribute :title
|
10
10
|
# index :title
|
@@ -23,7 +23,7 @@ module Ohm
|
|
23
23
|
# Post.all.empty?
|
24
24
|
# # => true
|
25
25
|
#
|
26
|
-
# Post.find(:title => 'Title').
|
26
|
+
# Post.find(:title => 'Title').include?(post)
|
27
27
|
# # => true
|
28
28
|
#
|
29
29
|
# Post.exists?(post.id)
|
@@ -34,35 +34,39 @@ module Ohm
|
|
34
34
|
# post.deleted?
|
35
35
|
# # => true
|
36
36
|
module SoftDelete
|
37
|
-
|
37
|
+
DELETED_FLAG = "1"
|
38
38
|
|
39
|
-
def self.included(
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
def self.included(model)
|
40
|
+
model.attribute :deleted
|
41
|
+
|
42
|
+
model.extend ClassMethods
|
43
43
|
end
|
44
44
|
|
45
45
|
def delete
|
46
|
-
|
47
|
-
|
46
|
+
self.class.all.delete(self)
|
47
|
+
self.class.deleted.add(self)
|
48
48
|
|
49
|
-
|
50
|
-
deleted == IS_DELETED
|
49
|
+
update(deleted: DELETED_FLAG)
|
51
50
|
end
|
52
51
|
|
53
|
-
|
54
|
-
|
55
|
-
self.class.
|
52
|
+
def restore
|
53
|
+
self.class.all.add(self)
|
54
|
+
self.class.deleted.delete(self)
|
55
|
+
|
56
|
+
update(deleted: nil)
|
56
57
|
end
|
57
58
|
|
58
|
-
def
|
59
|
-
|
60
|
-
self.class.key[:all].srem(self.id)
|
59
|
+
def deleted?
|
60
|
+
deleted == DELETED_FLAG
|
61
61
|
end
|
62
62
|
|
63
63
|
module ClassMethods
|
64
|
-
def
|
65
|
-
|
64
|
+
def deleted
|
65
|
+
Model::Set.new(key[:deleted], Model::Wrapper.wrap(self))
|
66
|
+
end
|
67
|
+
|
68
|
+
def exists?(id)
|
69
|
+
super || key[:deleted].sismember(id)
|
66
70
|
end
|
67
71
|
end
|
68
72
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative "callbacks"
|
2
|
+
require_relative "datatypes"
|
3
|
+
|
4
|
+
module Ohm
|
5
|
+
# Provides created_at / updated_at timestamps.
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
#
|
9
|
+
# class Post < Ohm::Model
|
10
|
+
# include Ohm::Timestamping
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# post = Post.create
|
14
|
+
# post.created_at.to_s == Time.now.utc.to_s
|
15
|
+
# # => true
|
16
|
+
#
|
17
|
+
# post = Post[post.id]
|
18
|
+
# post.save
|
19
|
+
# post.updated_at.to_s == Time.now.utc.to_s
|
20
|
+
# # => true
|
21
|
+
module Timestamping
|
22
|
+
def self.included(model)
|
23
|
+
model.send :include, Callbacks
|
24
|
+
|
25
|
+
model.attribute :created_at, DataTypes::Type::Timestamp
|
26
|
+
model.attribute :updated_at, DataTypes::Type::Timestamp
|
27
|
+
|
28
|
+
model.before :create, :set_created_at
|
29
|
+
model.before :save, :set_updated_at
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
def set_created_at
|
34
|
+
self.created_at ||= Time.now.utc.to_i
|
35
|
+
end
|
36
|
+
|
37
|
+
def set_updated_at
|
38
|
+
self.updated_at = Time.now.utc.to_i
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/ohm-contrib.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "ohm-contrib"
|
3
|
+
s.version = "1.0.rc0"
|
4
|
+
s.summary = %{A collection of decoupled drop-in modules for Ohm.}
|
5
|
+
s.description = %{Includes a couple of core functions such as callbacks, timestamping, typecasting and lots of generic validation routines.}
|
6
|
+
s.author = "Cyril David"
|
7
|
+
s.email = "cyx.ucron@gmail.com"
|
8
|
+
s.homepage = "http://github.com/cyx/ohm-contrib"
|
9
|
+
|
10
|
+
s.specification_version = 2 if s.respond_to? :specification_version=
|
11
|
+
|
12
|
+
s.files = Dir[
|
13
|
+
"LICENSE",
|
14
|
+
"README.markdown",
|
15
|
+
"rakefile",
|
16
|
+
"lib/**/*.rb",
|
17
|
+
"*.gemspec",
|
18
|
+
"test/*.*",
|
19
|
+
]
|
20
|
+
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
s.rubyforge_project = "ohm-contrib"
|
23
|
+
|
24
|
+
s.has_rdoc = false
|
25
|
+
s.add_dependency "ohm"
|
26
|
+
|
27
|
+
s.add_development_dependency "cutest"
|
28
|
+
s.add_development_dependency "redis"
|
29
|
+
s.add_development_dependency "override"
|
30
|
+
end
|
data/rakefile
ADDED
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
|
-
|
3
|
+
require_relative "helper"
|
4
4
|
|
5
5
|
class Post < Ohm::Model
|
6
6
|
include Ohm::Callbacks
|
@@ -22,8 +22,6 @@ class Post < Ohm::Model
|
|
22
22
|
end
|
23
23
|
|
24
24
|
protected
|
25
|
-
def before_validate() incr(:do_before_validate) end
|
26
|
-
def after_validate() incr(:do_after_validate) end
|
27
25
|
def before_create() incr(:do_before_create) end
|
28
26
|
def after_create() incr(:do_after_create) end
|
29
27
|
def before_save() incr(:do_before_save) end
|
@@ -33,7 +31,6 @@ protected
|
|
33
31
|
def before_delete() incr(:do_before_delete) end
|
34
32
|
def after_delete() incr(:do_after_delete) end
|
35
33
|
|
36
|
-
|
37
34
|
def incr(action)
|
38
35
|
val = instance_variable_get("@#{ action }")
|
39
36
|
val ||= 0
|
@@ -43,5 +40,4 @@ protected
|
|
43
40
|
end
|
44
41
|
end
|
45
42
|
|
46
|
-
load File.expand_path('
|
47
|
-
|
43
|
+
load File.expand_path('lint/callbacks.rb', File.dirname(__FILE__))
|
@@ -7,9 +7,6 @@ class Post < Ohm::Model
|
|
7
7
|
|
8
8
|
attribute :body
|
9
9
|
|
10
|
-
before :validate, :do_before_validate
|
11
|
-
after :validate, :do_after_validate
|
12
|
-
|
13
10
|
before :create, :do_before_create
|
14
11
|
after :create, :do_after_create
|
15
12
|
|
@@ -23,8 +20,6 @@ class Post < Ohm::Model
|
|
23
20
|
after :update, :do_after_update
|
24
21
|
|
25
22
|
def validate
|
26
|
-
super
|
27
|
-
|
28
23
|
assert_present :body
|
29
24
|
end
|
30
25
|
|
@@ -37,8 +32,6 @@ class Post < Ohm::Model
|
|
37
32
|
end
|
38
33
|
|
39
34
|
protected
|
40
|
-
def do_before_validate() incr(:do_before_validate) end
|
41
|
-
def do_after_validate() incr(:do_after_validate) end
|
42
35
|
def do_before_create() incr(:do_before_create) end
|
43
36
|
def do_after_create() incr(:do_after_create) end
|
44
37
|
def do_before_save() incr(:do_before_save) end
|
@@ -58,5 +51,4 @@ protected
|
|
58
51
|
end
|
59
52
|
end
|
60
53
|
|
61
|
-
load File.expand_path('
|
62
|
-
|
54
|
+
load File.expand_path('lint/callbacks.rb', File.dirname(__FILE__))
|