csv_record 1.7.0 → 1.8.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 CHANGED
@@ -57,7 +57,7 @@ car.new_record? # checks if the record is new
57
57
  ```
58
58
 
59
59
  ##Retrieving
60
- Records can be queried through the following methds:
60
+ Records can be queried through the following methods:
61
61
 
62
62
  ```ruby
63
63
  Car.all # retrieves all saved records
@@ -113,9 +113,9 @@ Extending the previous example, you can use the `has_many` method to establish t
113
113
  class Company
114
114
  include CsvRecord::Document
115
115
 
116
- has_many :cars
117
-
118
116
  attr_accessor :name
117
+
118
+ has_many :cars
119
119
  end
120
120
 
121
121
  company = Company.create :name => 'Chutz'
@@ -132,34 +132,37 @@ Callbacks can be used to execute code on predetermined moments.
132
132
 
133
133
  ####Usage
134
134
  ```ruby
135
- after_create do |obj|
136
- obj.do_something
135
+ after_create do
136
+ self.do_something
137
137
  end
138
138
  ```
139
- `obj` refers to the instance you are in
139
+ `self` refers to the instance you are in
140
140
 
141
141
  ###Avaiable Callbacks
142
142
  Here is a list with all the available callbacks, listed in the same order in which they will get called during the respective operations:
143
143
 
144
144
  ####Creating an Object
145
- * before_create
145
+ * after_initialize
146
146
  * before_validation
147
147
  * after_validation
148
+ * before_create
148
149
  * after_create
149
150
 
150
151
  ####Updating an Object
151
152
  * before_validation
152
153
  * after_validation
154
+ * before_update
155
+ * after_update
153
156
 
154
157
  ##Validations
155
158
 
156
159
  Helpers available:
157
160
 
158
- `validates_presence_of`: Ensures if the specified attributes were filled
161
+ `validates_presence_of`: Ensures if the specified attribute(s) were filled
159
162
 
160
163
  `validates_uniqueness_of`: Ensures that the specified attribute(s) are unique within the database
161
164
 
162
- `validate`: Uses custom methods to validate the model
165
+ `validate`: Uses custom method(s) to validate the model
163
166
 
164
167
  ```ruby
165
168
  class Company
@@ -178,14 +181,11 @@ class Company
178
181
  end
179
182
 
180
183
  company = Company.create
181
- company.save
182
- # => false
184
+ company.save # => false
183
185
 
184
186
  company = Company.create
185
- company.valid?
186
- # => false
187
- company.invalid?
188
- # => true
187
+ company.valid? # => false
188
+ company.invalid? # => true
189
189
 
190
190
  ```
191
191
 
@@ -4,10 +4,12 @@ module CsvRecord
4
4
  :after_initialize,
5
5
  :before_validation,
6
6
  :after_validation,
7
- :before_create,
8
7
  :before_save,
8
+ :after_save,
9
+ :before_create,
9
10
  :after_create,
10
- :after_save
11
+ :before_update,
12
+ :after_update
11
13
  ].freeze
12
14
 
13
15
  module ClassMethods
@@ -27,11 +29,47 @@ module CsvRecord
27
29
  if self.class.const_defined? const_variable
28
30
  callbacks_collection = self.class.const_get("#{callback}_callbacks".upcase)
29
31
  callbacks_collection.each do |callback_proc|
30
- callback_proc.call self
32
+ self.instance_eval &callback_proc
31
33
  end
32
34
  end
33
35
  end
34
36
  end
37
+
38
+ [:build, :initialize].each do |initialize_method|
39
+ define_method initialize_method do |*args|
40
+ result = super(*args)
41
+ self.run_after_initialize_callbacks
42
+ result
43
+ end
44
+ end
45
+
46
+ def valid?
47
+ self.run_before_validation_callbacks
48
+ is_valid = super
49
+ self.run_after_validation_callbacks if is_valid
50
+ is_valid
51
+ end
52
+
53
+ def save(*args)
54
+ self.run_before_save_callbacks
55
+ is_saved = super
56
+ self.run_after_save_callbacks if is_saved
57
+ is_saved
58
+ end
59
+
60
+ def append_registry
61
+ self.run_before_create_callbacks
62
+ is_saved = super
63
+ self.run_after_create_callbacks if is_saved
64
+ is_saved
65
+ end
66
+
67
+ def update_registry
68
+ self.run_before_update_callbacks
69
+ saved = super
70
+ self.run_after_update_callbacks if saved
71
+ saved
72
+ end
35
73
  end
36
74
 
37
75
  def self.included(receiver)
@@ -1,3 +1,3 @@
1
1
  module CsvRecord
2
- VERSION = "1.7.0"
2
+ VERSION = "1.8.0"
3
3
  end
@@ -3,9 +3,7 @@ module CsvRecord
3
3
  module ClassMethods
4
4
  def __create__(attributes={})
5
5
  instance = self.build attributes
6
- instance.run_before_create_callbacks
7
6
  result = instance.save
8
- instance.run_after_create_callbacks if result
9
7
  instance
10
8
  end
11
9
 
@@ -25,16 +23,12 @@ module CsvRecord
25
23
  receiver.send :attr_accessor, :id
26
24
  end
27
25
 
28
- def __save__
29
- result = nil
30
- self.run_before_validation_callbacks
31
- if self.valid?
32
- result = self.new_record? ? self.append_registry : self.update_registry
26
+ def __save__(validate=true)
27
+ if (not validate) || self.valid?
28
+ self.new_record? ? self.append_registry : self.update_registry
33
29
  else
34
- result = false
30
+ false
35
31
  end
36
- self.run_after_validation_callbacks
37
- result
38
32
  end
39
33
 
40
34
  def new_record?
@@ -43,14 +37,17 @@ module CsvRecord
43
37
 
44
38
  def __update_attribute__(field, value)
45
39
  self.public_send "#{field}=", value
46
- self.save
40
+ self.save false
47
41
  end
48
42
 
49
- def __update_attributes__(params={})
43
+ def __update_attributes__(params={validate: true})
44
+ validate = params[:validate]
45
+ params.delete(:validate)
46
+
50
47
  params.each do |field, value|
51
48
  self.public_send "#{field}=", value
52
49
  end
53
- self.save
50
+ self.save validate
54
51
  end
55
52
 
56
53
  def __destroy__
@@ -24,10 +24,20 @@ describe CsvRecord::Callbacks do
24
24
  it ('run before_save callbacks') { klass.must_respond_to(:run_before_save_callbacks) }
25
25
  it ('run after_save callbacks') { klass.must_respond_to(:run_after_save_callbacks) }
26
26
  it ('run after_initialize callbacks') { klass.must_respond_to(:run_after_initialize_callbacks) }
27
+ it ('run before_update callbacks') { klass.must_respond_to(:run_before_update_callbacks) }
28
+ it ('run after_update callbacks') { klass.must_respond_to(:run_after_update_callbacks) }
27
29
  end
28
30
 
29
31
  describe 'Checking the callbacks execution' do
30
32
  let (:object_created) { CallbackTestClass.create }
33
+ let (:object_updated) do
34
+ object_created.update_attribute :sample_field, 'something'
35
+ object_created
36
+ end
37
+
38
+ it 'after_initialize' do
39
+ CallbackTestClass.new.after_initialize_called.must_equal true
40
+ end
31
41
 
32
42
  it 'before_create' do
33
43
  object_created.before_create_called.must_equal true
@@ -42,7 +52,23 @@ describe CsvRecord::Callbacks do
42
52
  end
43
53
 
44
54
  it 'after_validation' do
45
- object_created.after_create_called.must_equal true
55
+ object_created.after_validation_called.must_equal true
56
+ end
57
+
58
+ it 'before_update' do
59
+ object_updated.before_update_called.must_equal true
60
+ end
61
+
62
+ it 'after_update' do
63
+ object_updated.after_update_called.must_equal true
64
+ end
65
+
66
+ it 'before_save' do
67
+ object_created.before_save_called.must_equal true
68
+ end
69
+
70
+ it 'after_update' do
71
+ object_created.after_save_called.must_equal true
46
72
  end
47
73
  end
48
74
  end
@@ -4,6 +4,8 @@ require_relative '../models/jedi'
4
4
  require_relative '../models/jedi_order'
5
5
 
6
6
  describe CsvRecord::Validations do
7
+ let (:invalid_jedi) { Jedi.new }
8
+
7
9
  describe 'initializing class methods' do
8
10
  it ('responds to validates_presence_of') { Jedi.must_respond_to :validates_presence_of }
9
11
  it ('responds to validates_uniqueness_of') { Jedi.must_respond_to :validates_uniqueness_of }
@@ -51,8 +53,6 @@ describe CsvRecord::Validations do
51
53
  end
52
54
 
53
55
  describe 'default methods' do
54
- let (:invalid_jedi) { Jedi.new }
55
-
56
56
  describe 'invalid?' do
57
57
  it 'invalid object' do
58
58
  invalid_jedi.invalid?.must_equal true
@@ -107,4 +107,23 @@ describe CsvRecord::Validations do
107
107
  yoda.custom_validator_checker_with_block.must_equal true
108
108
  end
109
109
  end
110
+
111
+ describe 'skip validations' do
112
+ it 'on save' do
113
+ invalid_jedi.save(false)
114
+ invalid_jedi.new_record?.must_equal false
115
+ end
116
+
117
+ it 'on update_attributes' do
118
+ yoda.save
119
+ yoda.update_attributes name: nil, validate: false
120
+ yoda.name.must_be_nil
121
+ end
122
+
123
+ it 'update_attribute by default skips validations' do
124
+ yoda.save
125
+ yoda.update_attribute :name, nil
126
+ Jedi.last.name.must_be_nil
127
+ end
128
+ end
110
129
  end
@@ -1,25 +1,47 @@
1
1
  class CallbackTestClass
2
2
  include CsvRecord::Document
3
3
 
4
- def initialize(*args)
5
- end
4
+ attr_accessor :sample_field
6
5
 
6
+ attr_accessor :after_initialize_called
7
7
  attr_accessor :before_create_called, :after_create_called
8
8
  attr_accessor :before_validation_called, :after_validation_called
9
+ attr_accessor :before_update_called, :after_update_called
10
+ attr_accessor :before_save_called, :after_save_called
11
+
12
+ after_initialize do
13
+ self.after_initialize_called = true
14
+ end
15
+
16
+ before_create do
17
+ self.before_create_called = true
18
+ end
19
+
20
+ after_create do
21
+ self.after_create_called = true
22
+ end
23
+
24
+ before_validation do
25
+ self.before_validation_called = true
26
+ end
27
+
28
+ after_validation do
29
+ self.after_validation_called = true
30
+ end
9
31
 
10
- before_create do |obj|
11
- obj.before_create_called = true
32
+ before_update do
33
+ self.before_update_called = true
12
34
  end
13
35
 
14
- before_validation do |obj|
15
- obj.before_validation_called = true
36
+ after_update do
37
+ self.after_update_called = true
16
38
  end
17
39
 
18
- after_validation do |obj|
19
- obj.after_validation_called = true
40
+ before_save do
41
+ self.before_save_called = true
20
42
  end
21
43
 
22
- after_create do |obj|
23
- obj.after_create_called = true
44
+ after_save do
45
+ self.after_save_called = true
24
46
  end
25
47
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: csv_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-28 00:00:00.000000000 Z
12
+ date: 2012-12-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport