lazymodel 0.0.1 → 0.1.0
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/README.md +24 -5
- data/lib/lazymodel/base.rb +13 -0
- data/lib/lazymodel/version.rb +1 -1
- data/test/dummy/log/test.log +1239 -0
- data/test/fixtures/sample_model.rb +29 -1
- data/test/integration/people_validation_test.rb +3 -3
- data/test/sample_model_test.rb +19 -6
- metadata +4 -6
- data/test/dummy/tmp/pids/server.pid +0 -1
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Lazymodel
|
2
2
|
|
3
|
+
[](http://travis-ci.org/spaghetticode/lazymodel)
|
4
|
+
|
3
5
|
This rails gem helps get ActiveModel goodies without the hassle to write a ton
|
4
6
|
of code.
|
5
7
|
|
@@ -9,34 +11,51 @@ Add to your gemfile:
|
|
9
11
|
```ruby
|
10
12
|
gem 'lazymodel'
|
11
13
|
```
|
14
|
+
|
12
15
|
Create the model class that gets ActiveModel features. The key point is having
|
13
16
|
the class inherit from ```Lazymodel::Base```
|
17
|
+
|
14
18
|
```ruby
|
15
19
|
class Person < Lazymodel::Base
|
16
|
-
activemodel_attributes :name, :surname, :suffix => '?'
|
20
|
+
activemodel_attributes :name, :surname, :suffix => '?', :callbacks => {
|
21
|
+
:before_create => :capitalize_attributes,
|
22
|
+
:after_update => [:notify_admin, :check_data]
|
23
|
+
}
|
17
24
|
|
18
25
|
validates :name, :surname, :presence => true
|
19
26
|
|
27
|
+
def save
|
28
|
+
run_callbacks {# saving...}
|
29
|
+
end
|
30
|
+
|
31
|
+
def update
|
32
|
+
run_callbacks {# updating...}
|
33
|
+
end
|
34
|
+
|
20
35
|
private
|
21
36
|
|
22
37
|
def attribute?(attribute)
|
23
38
|
send(attribute).present?
|
24
39
|
end
|
40
|
+
|
41
|
+
def check_data; end
|
42
|
+
def notify_admin; end
|
43
|
+
def capitalize_attributes; end
|
25
44
|
end
|
26
45
|
```
|
46
|
+
|
27
47
|
This will grant you the power of the following modules:
|
48
|
+
|
28
49
|
```ruby
|
29
50
|
ActiveModel::Naming
|
30
51
|
ActiveModel::Concern
|
52
|
+
ActiveModel::Callbacks
|
31
53
|
ActiveModel::Validations
|
32
54
|
ActiveModel::AttributeMethods
|
33
55
|
```
|
56
|
+
|
34
57
|
Via the class macro ```activemodel_attributes``` you can define in a single call the
|
35
58
|
model attributes and its prefixed and suffixed methods. You also get reasonable
|
36
59
|
``` initialize, to_model, persisted?, attributes``` method defaults.
|
37
60
|
|
38
61
|
The class complies with ```ActiveModel::Lint::Tests``` specifications.
|
39
|
-
|
40
|
-
## Todo
|
41
|
-
|
42
|
-
Add activemodel callbacks features
|
data/lib/lazymodel/base.rb
CHANGED
@@ -4,6 +4,7 @@ module Lazymodel
|
|
4
4
|
include ActiveModel::Conversion
|
5
5
|
include ActiveModel::Validations
|
6
6
|
include ActiveModel::AttributeMethods
|
7
|
+
extend ActiveModel::Callbacks
|
7
8
|
|
8
9
|
class << self
|
9
10
|
def activemodel_attributes(*args)
|
@@ -12,6 +13,7 @@ module Lazymodel
|
|
12
13
|
attr_accessor *args
|
13
14
|
define_prefix_or_affix_method :prefix, opts[:prefix]
|
14
15
|
define_prefix_or_affix_method :suffix, opts[:suffix]
|
16
|
+
define_callbacks_macros(opts[:callbacks]) if opts[:callbacks]
|
15
17
|
define_attribute_methods args
|
16
18
|
# _attributes stores at class level the
|
17
19
|
# the attribute names
|
@@ -21,6 +23,17 @@ module Lazymodel
|
|
21
23
|
|
22
24
|
private
|
23
25
|
|
26
|
+
def define_callbacks_macros(callbacks)
|
27
|
+
callbacks.keys.map do |key|
|
28
|
+
key.to_s.sub(/^(before_|after_|around_)/, '')
|
29
|
+
end.uniq.each do |method|
|
30
|
+
define_model_callbacks method
|
31
|
+
end
|
32
|
+
callbacks.each do |type, methods|
|
33
|
+
send type, *Array.wrap(methods)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
24
37
|
def define_prefix_or_affix_method(type, values)
|
25
38
|
Array.wrap(values).each do |value|
|
26
39
|
send "attribute_method_#{type}", value
|
data/lib/lazymodel/version.rb
CHANGED