csv_record 1.8.0 → 1.9.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
@@ -1,6 +1,6 @@
1
1
  # CsvRecord
2
2
 
3
- [![Build Status](https://secure.travis-ci.org/lukasalexandre/csv_record.png)](http://travis-ci.org/lukasalexandre/csv_record) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/lukasalexandre/csv_record)
3
+ [![Build Status](https://secure.travis-ci.org/lukasalexandre/csv_record.png)](http://travis-ci.org/lukasalexandre/csv_record) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/lukasalexandre/csv_record) [![Dependency Status](https://gemnasium.com/lukasalexandre/csv_record.png)](https://gemnasium.com/lukasalexandre/csv_record)
4
4
 
5
5
  CSV Record connects Ruby classes to CSV documents database to establish an almost zero-configuration persistence layer for applications.
6
6
 
@@ -126,6 +126,26 @@ car.save
126
126
  company.cars # [#<Car:0x007f9b249b24d8>]
127
127
  ```
128
128
 
129
+ ###Has One
130
+ The same as has_many but limited to one associated record.
131
+
132
+ ```ruby
133
+ class Company
134
+ include CsvRecord::Document
135
+
136
+ attr_accessor :name
137
+
138
+ has_one :car
139
+ end
140
+
141
+ company = Company.create :name => 'Chutz'
142
+
143
+ car.save
144
+ company.car = car
145
+
146
+ company.car # #<Car:0x007f9b249b24d8>
147
+ ```
148
+
129
149
  ##Callbacks
130
150
  ###Overview
131
151
  Callbacks can be used to execute code on predetermined moments.
@@ -141,18 +161,30 @@ end
141
161
  ###Avaiable Callbacks
142
162
  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
163
 
164
+ ####Finding an Object
165
+ * after_initialize
166
+ * after_find
167
+
144
168
  ####Creating an Object
145
169
  * after_initialize
146
170
  * before_validation
147
171
  * after_validation
172
+ * before_save
148
173
  * before_create
149
174
  * after_create
175
+ * after_save
150
176
 
151
177
  ####Updating an Object
152
178
  * before_validation
153
179
  * after_validation
180
+ * before_save
154
181
  * before_update
155
182
  * after_update
183
+ * after_save
184
+
185
+ ####Destroying an Object
186
+ * before_destroy
187
+ * after_destroy
156
188
 
157
189
  ##Validations
158
190
 
@@ -175,8 +207,12 @@ class Company
175
207
 
176
208
  validate :my_custom_validator_method
177
209
 
210
+ validate do
211
+ self.errors.add :attribute
212
+ end
213
+
178
214
  def my_custom_validator_method
179
- @errors = self.errors.add attribute
215
+ self.errors.add :attribute
180
216
  end
181
217
  end
182
218
 
data/csv_record.gemspec CHANGED
@@ -8,6 +8,8 @@ Gem::Specification.new do |gem|
8
8
  gem.summary = %q{CSV Record connects Ruby classes to CSV documents database to establish an almost zero-configuration persistence layer for applications.}
9
9
  gem.homepage = "https://github.com/lukasalexandre/csv_record"
10
10
 
11
+ gem.license = 'MIT'
12
+
11
13
  gem.files = `git ls-files`.split($\)
12
14
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
15
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
@@ -19,11 +19,21 @@ module CsvRecord
19
19
  end
20
20
 
21
21
  def has_many(klass)
22
- klass_name = klass.to_s
22
+ self.class_eval do
23
+ define_method klass do
24
+ klass.to_s.to_class.where :"#{self.underscored_class_name}_id" => self.id
25
+ end
26
+ end
27
+ end
23
28
 
29
+ def has_one(klass)
24
30
  self.class_eval do
31
+ define_method "#{klass}=" do |obj|
32
+ obj.send "#{self.underscored_class_name}_id=", self.id
33
+ obj.save
34
+ end
25
35
  define_method klass do
26
- klass_name.to_class.where :"#{self.underscored_class_name}_id" => self.id
36
+ klass.to_s.to_class.where("#{self.underscored_class_name}_id" => self.id).first
27
37
  end
28
38
  end
29
39
  end
@@ -2,10 +2,13 @@ module CsvRecord
2
2
  module Callbacks
3
3
  CALLBACKS = [
4
4
  :after_initialize,
5
+ :after_find,
5
6
  :before_validation,
6
7
  :after_validation,
7
8
  :before_save,
8
9
  :after_save,
10
+ :after_destroy,
11
+ :before_destroy,
9
12
  :before_create,
10
13
  :after_create,
11
14
  :before_update,
@@ -20,6 +23,12 @@ module CsvRecord
20
23
  const_get(const_variable) << block if block
21
24
  end
22
25
  end
26
+
27
+ def __where__(*args)
28
+ results = super
29
+ results.each &:run_after_find_callbacks
30
+ results
31
+ end
23
32
  end
24
33
 
25
34
  module InstanceMethods
@@ -50,6 +59,13 @@ module CsvRecord
50
59
  is_valid
51
60
  end
52
61
 
62
+ def destroy
63
+ self.run_before_destroy_callbacks
64
+ is_destroyed = super
65
+ self.run_after_destroy_callbacks if is_destroyed
66
+ is_destroyed
67
+ end
68
+
53
69
  def save(*args)
54
70
  self.run_before_save_callbacks
55
71
  is_saved = super
@@ -67,6 +83,7 @@ module CsvRecord
67
83
  def update_registry
68
84
  self.run_before_update_callbacks
69
85
  saved = super
86
+ self.run_after_destroy_callbacks if saved
70
87
  self.run_after_update_callbacks if saved
71
88
  saved
72
89
  end
@@ -32,10 +32,4 @@ class String
32
32
  tr("-", "_").
33
33
  downcase
34
34
  end
35
- end
36
-
37
- class Array
38
- def add(obj)
39
- self << obj
40
- end
41
35
  end
@@ -46,6 +46,22 @@ module CsvRecord
46
46
  end
47
47
  end
48
48
 
49
+ def method_missing(meth, *args, &block)
50
+ if meth.to_s =~ DYNAMIC_FINDER_PATTERN
51
+ dynamic_finder $1, *args, &block
52
+ else
53
+ super # You *must* call super if you don't handle the
54
+ # method, otherwise you'll mess up Ruby's method
55
+ # lookup.
56
+ end
57
+ end
58
+
59
+ def respond_to?(meth)
60
+ (meth.to_s =~ DYNAMIC_FINDER_PATTERN) || super
61
+ end
62
+
63
+ protected
64
+
49
65
  def search_for(csv, params)
50
66
  conditions = handle_params params
51
67
  csv.entries.select do |attributes|
@@ -64,22 +80,6 @@ module CsvRecord
64
80
  conditions
65
81
  end
66
82
 
67
- def method_missing(meth, *args, &block)
68
- if meth.to_s =~ DYNAMIC_FINDER_PATTERN
69
- dynamic_finder $1, *args, &block
70
- else
71
- super # You *must* call super if you don't handle the
72
- # method, otherwise you'll mess up Ruby's method
73
- # lookup.
74
- end
75
- end
76
-
77
- def respond_to?(meth)
78
- (meth.to_s =~ DYNAMIC_FINDER_PATTERN) || super
79
- end
80
-
81
- protected
82
-
83
83
  def dynamic_finder(meth, *args, &block)
84
84
  properties = meth.split '_and_'
85
85
  conditions = Hash[properties.zip args]
@@ -102,7 +102,7 @@ module CsvRecord
102
102
  end
103
103
 
104
104
  def __to_param__
105
- self.id
105
+ self.id.to_s
106
106
  end
107
107
 
108
108
  def ==(obj)
@@ -14,12 +14,12 @@ module CsvRecord
14
14
  end
15
15
 
16
16
  def custom_validators
17
- @custom_validators || []
17
+ @custom_validators ||= []
18
18
  end
19
19
 
20
20
  def validate(*args, &block)
21
21
  @custom_validators ||= []
22
- args.each { |arg| @custom_validators << arg }
22
+ @custom_validators += args
23
23
  @custom_validators << block if block_given?
24
24
  end
25
25
  end
@@ -37,7 +37,14 @@ module CsvRecord
37
37
  end
38
38
 
39
39
  def errors
40
- @errors || []
40
+ unless @errors
41
+ @errors = []
42
+ def @errors.add(attribute)
43
+ self << attribute
44
+ end
45
+ end
46
+
47
+ @errors
41
48
  end
42
49
 
43
50
  alias :valid? :__valid__?
@@ -46,7 +53,7 @@ module CsvRecord
46
53
  def trigger_presence_validations
47
54
  self.class.fields_to_validate_presence.each do |attribute|
48
55
  if self.public_send(attribute).nil?
49
- @errors = self.errors.add attribute
56
+ self.errors.add attribute
50
57
  end
51
58
  end
52
59
  end
@@ -57,7 +64,7 @@ module CsvRecord
57
64
  condition[attribute] = self.public_send attribute
58
65
  records = self.class.__where__ condition
59
66
  if records.any? { |record| record != self }
60
- @errors = self.errors.add attribute
67
+ self.errors.add attribute
61
68
  end
62
69
  end
63
70
  end
@@ -67,7 +74,7 @@ module CsvRecord
67
74
  if not validator.is_a? Proc
68
75
  self.send validator
69
76
  else
70
- validator.call self
77
+ self.instance_eval &validator
71
78
  end
72
79
  end
73
80
  end
@@ -1,3 +1,3 @@
1
1
  module CsvRecord
2
- VERSION = "1.8.0"
2
+ VERSION = "1.9.0"
3
3
  end
@@ -1,19 +1,21 @@
1
1
  require_relative '../test_helper'
2
2
  require_relative '../models/jedi'
3
3
  require_relative '../models/jedi_order'
4
+ require_relative '../models/padawan'
4
5
 
5
6
  describe CsvRecord::Associations do
6
- describe 'initializing class methods' do
7
+ describe 'belongs_to' do
7
8
  it ('responds to belongs_to') { Jedi.must_respond_to :belongs_to }
9
+
8
10
  it ('responds to jedi_order') { Jedi.new.must_respond_to :jedi_order }
9
11
  it ('responds to jedi_order=') { Jedi.new.must_respond_to :jedi_order= }
10
12
  it ('responds to jedi_order_id') { Jedi.new.must_respond_to :jedi_order_id }
11
- it ('responds to has_many') { JediOrder.must_respond_to :has_many }
12
- end
13
13
 
14
- describe 'belongs_to behavior' do
15
- it 'checking to param extraction' do
14
+ before do
16
15
  jedi_council.save
16
+ end
17
+
18
+ it 'checking to param extraction' do
17
19
  luke.save
18
20
  luke.jedi_order = jedi_council
19
21
  luke.jedi_order_id.wont_be_nil
@@ -22,7 +24,6 @@ describe CsvRecord::Associations do
22
24
  end
23
25
 
24
26
  it 'has a single jedi order associated' do
25
- jedi_council.save
26
27
  luke.jedi_order = jedi_council
27
28
  luke.save.must_equal true
28
29
  first_jedi = Jedi.first
@@ -32,7 +33,9 @@ describe CsvRecord::Associations do
32
33
  end
33
34
  end
34
35
 
35
- describe 'has_many behavior' do
36
+ describe 'has_many' do
37
+ it ('responds to has_many') { JediOrder.must_respond_to :has_many }
38
+
36
39
  it 'has many jedis associated' do
37
40
  jedi_council.save
38
41
  yoda.jedi_order = jedi_council
@@ -44,4 +47,16 @@ describe CsvRecord::Associations do
44
47
  jedis.first.must_be_instance_of Jedi
45
48
  end
46
49
  end
50
+
51
+ describe 'has_one' do
52
+ it ('responds to has_one') { Jedi.must_respond_to :has_one }
53
+
54
+ it 'has_one padawan' do
55
+ qui_gon_jinn.save
56
+ obi_wan_kenobi_padawan.save
57
+ qui_gon_jinn.padawan = obi_wan_kenobi_padawan
58
+ qui_gon_jinn.padawan.must_equal obi_wan_kenobi_padawan
59
+ qui_gon_jinn.padawan.must_be_instance_of Padawan
60
+ end
61
+ end
47
62
  end
@@ -1,5 +1,4 @@
1
1
  require_relative '../test_helper'
2
-
3
2
  require_relative '../models/car'
4
3
  require_relative '../models/callback_test_class'
5
4
 
@@ -10,15 +9,20 @@ describe CsvRecord::Callbacks do
10
9
  it ('before_create callback') { klass.must_respond_to(:before_create) }
11
10
  it ('after_create callback') { klass.must_respond_to(:after_create) }
12
11
  it ('before_save callback') { klass.must_respond_to(:before_save) }
12
+ it ('before_destroy callback') {klass.must_respond_to(:before_destroy)}
13
13
  it ('after_save callback') { klass.must_respond_to(:after_save) }
14
+ it ('before_update callback') { klass.must_respond_to(:before_update) }
15
+ it ('after_update callback') { klass.must_respond_to(:after_update) }
14
16
  it ('after_initialize callback') { klass.must_respond_to(:after_initialize) }
17
+ it ('after_destroy callback') { klass.must_respond_to(:after_destroy) }
18
+ it ('after_find callback') { klass.must_respond_to(:after_find) }
15
19
  end
16
20
 
17
21
  describe "Check the run callback definitions" do
18
22
  let (:klass) { CallbackTestClass.new }
19
-
20
23
  it ('run before_create callbacks') { klass.must_respond_to(:run_before_create_callbacks) }
21
24
  it ('run after_create callbacks') { klass.must_respond_to(:run_after_create_callbacks) }
25
+ it ('run after_destroy callback') { klass.must_respond_to(:run_after_destroy_callbacks) }
22
26
  it ('run before_validation callbacks') { klass.must_respond_to(:run_before_validation_callbacks) }
23
27
  it ('run after_validation callbacks') { klass.must_respond_to(:run_after_validation_callbacks) }
24
28
  it ('run before_save callbacks') { klass.must_respond_to(:run_before_save_callbacks) }
@@ -26,6 +30,8 @@ describe CsvRecord::Callbacks do
26
30
  it ('run after_initialize callbacks') { klass.must_respond_to(:run_after_initialize_callbacks) }
27
31
  it ('run before_update callbacks') { klass.must_respond_to(:run_before_update_callbacks) }
28
32
  it ('run after_update callbacks') { klass.must_respond_to(:run_after_update_callbacks) }
33
+ it ('run before_destroy callbacks ') { klass.must_respond_to(:run_before_destroy_callbacks) }
34
+ it ('run after_find callbacks') { klass.must_respond_to(:run_after_find_callbacks) }
29
35
  end
30
36
 
31
37
  describe 'Checking the callbacks execution' do
@@ -35,6 +41,11 @@ describe CsvRecord::Callbacks do
35
41
  object_created
36
42
  end
37
43
 
44
+ let (:object_destroyed) do
45
+ object_created.destroy
46
+ object_created
47
+ end
48
+
38
49
  it 'after_initialize' do
39
50
  CallbackTestClass.new.after_initialize_called.must_equal true
40
51
  end
@@ -70,5 +81,17 @@ describe CsvRecord::Callbacks do
70
81
  it 'after_update' do
71
82
  object_created.after_save_called.must_equal true
72
83
  end
84
+
85
+ it 'after_destroy' do
86
+ object_destroyed.after_destroy_called.must_equal true
87
+ end
88
+ it 'before_destroy' do
89
+ object_destroyed.before_destroy_called.must_equal true
90
+ end
91
+
92
+ it 'after_find using FIND' do
93
+ object_found = CallbackTestClass.find(object_created)
94
+ object_found.after_find_called.must_equal true
95
+ end
73
96
  end
74
97
  end
@@ -70,8 +70,7 @@ describe CsvRecord::Reader do
70
70
  it 'checking to_param' do
71
71
  car.save
72
72
  car.to_param.wont_be_nil
73
- car.to_param.must_be_instance_of Fixnum
74
- car.to_param.must_equal 1
73
+ car.to_param.must_equal '1'
75
74
  end
76
75
 
77
76
  describe '==' do
@@ -2,6 +2,7 @@ require_relative '../test_helper'
2
2
  require 'pry'
3
3
  require_relative '../models/jedi'
4
4
  require_relative '../models/jedi_order'
5
+ require_relative '../models/custom_errors_class'
5
6
 
6
7
  describe CsvRecord::Validations do
7
8
  let (:invalid_jedi) { Jedi.new }
@@ -9,8 +10,12 @@ describe CsvRecord::Validations do
9
10
  describe 'initializing class methods' do
10
11
  it ('responds to validates_presence_of') { Jedi.must_respond_to :validates_presence_of }
11
12
  it ('responds to validates_uniqueness_of') { Jedi.must_respond_to :validates_uniqueness_of }
13
+ end
14
+
15
+ describe 'initializing instance methods' do
12
16
  it ('responds to valid?') { Jedi.new.must_respond_to :valid? }
13
17
  it ('responds to invalid?') { Jedi.new.must_respond_to :invalid? }
18
+ it ('responds to errors') { Jedi.new.must_respond_to :errors }
14
19
  end
15
20
 
16
21
  describe 'validates_presence_of :name and :age behavior' do
@@ -50,34 +55,45 @@ describe CsvRecord::Validations do
50
55
  yoda.valid?.wont_equal true
51
56
  yoda.save.wont_equal true
52
57
  end
58
+
53
59
  end
54
60
 
55
- describe 'default methods' do
56
- describe 'invalid?' do
57
- it 'invalid object' do
58
- invalid_jedi.invalid?.must_equal true
59
- end
61
+ describe 'invalid?' do
62
+ it 'invalid object' do
63
+ invalid_jedi.invalid?.must_equal true
64
+ end
60
65
 
61
- it 'valid object' do
62
- yoda.invalid?.must_equal false
63
- end
66
+ it 'valid object' do
67
+ yoda.invalid?.must_equal false
68
+ end
69
+ end
70
+
71
+ describe 'errors' do
72
+ it 'wont be empty when invalid' do
73
+ invalid_jedi.valid?
74
+ invalid_jedi.errors.wont_be_empty
64
75
  end
65
76
 
66
- describe 'errors' do
67
- it 'wont be empty when invalid' do
68
- invalid_jedi.valid?
69
- invalid_jedi.errors.wont_be_empty
70
- end
77
+ it 'should have two erros' do
78
+ invalid_jedi.valid?
79
+ invalid_jedi.errors.length.must_equal 2
80
+ end
71
81
 
72
- it 'should have two erros' do
73
- invalid_jedi.valid?
74
- invalid_jedi.errors.length.must_equal 2
75
- end
82
+ it 'should contain the errors found' do
83
+ invalid_jedi.valid?
84
+ invalid_jedi.errors.must_include :name
85
+ invalid_jedi.errors.must_include :age
86
+ end
87
+
88
+ describe 'add' do
89
+ it ('responds to add') { invalid_jedi.errors.must_respond_to :add }
76
90
 
77
- it 'should contain the errors found' do
78
- invalid_jedi.valid?
79
- invalid_jedi.errors.must_include :name
80
- invalid_jedi.errors.must_include :age
91
+ it 'adding' do
92
+ invalid_jedi.instance_eval do
93
+ self.errors.add(:testing)
94
+ self.errors.wont_be_empty
95
+ self.errors.last.must_equal :testing
96
+ end
81
97
  end
82
98
  end
83
99
  end
@@ -95,16 +111,17 @@ describe CsvRecord::Validations do
95
111
  end
96
112
 
97
113
  describe 'custom_validator' do
98
- it ('responds to validate') { Jedi.must_respond_to :validate }
114
+ it ('responds to validate') { CustomErrorsClass.must_respond_to :validate }
99
115
 
100
- before { yoda.valid? }
116
+ let(:custom_error_class) { CustomErrorsClass.new }
117
+ before { custom_error_class.valid? }
101
118
 
102
119
  it 'adding a custom validator' do
103
- yoda.custom_validator_checker.must_equal true
120
+ custom_error_class.errors.must_include :custom_error
104
121
  end
105
122
 
106
123
  it 'validate can have a block' do
107
- yoda.custom_validator_checker_with_block.must_equal true
124
+ custom_error_class.errors.must_include :custom_error_with_block
108
125
  end
109
126
  end
110
127
 
@@ -8,11 +8,17 @@ class CallbackTestClass
8
8
  attr_accessor :before_validation_called, :after_validation_called
9
9
  attr_accessor :before_update_called, :after_update_called
10
10
  attr_accessor :before_save_called, :after_save_called
11
+ attr_accessor :before_destroy_called, :after_destroy_called
12
+ attr_accessor :after_find_called, :after_where_called
11
13
 
12
14
  after_initialize do
13
15
  self.after_initialize_called = true
14
16
  end
15
17
 
18
+ after_find do
19
+ self.after_find_called = true
20
+ end
21
+
16
22
  before_create do
17
23
  self.before_create_called = true
18
24
  end
@@ -44,4 +50,13 @@ class CallbackTestClass
44
50
  after_save do
45
51
  self.after_save_called = true
46
52
  end
53
+
54
+ after_destroy do
55
+ self.after_destroy_called = true
56
+ end
57
+
58
+ before_destroy do
59
+ self.before_destroy_called = true
60
+ end
61
+
47
62
  end
@@ -0,0 +1,13 @@
1
+ class CustomErrorsClass
2
+ include CsvRecord::Document
3
+
4
+ validate :my_custom_validator_method
5
+ validate do
6
+ self.errors.add :custom_error_with_block
7
+ end
8
+
9
+ private
10
+ def my_custom_validator_method
11
+ self.errors.add :custom_error
12
+ end
13
+ end
data/test/models/jedi.rb CHANGED
@@ -2,20 +2,16 @@ class Jedi
2
2
  include CsvRecord::Document
3
3
 
4
4
  attr_accessor :name, :age, :midi_chlorians
5
- attr_reader :custom_validator_checker, :custom_validator_checker_with_block
5
+ attr_reader :custom_validator_checker, :custom_validator_checker_with_block, :after_destroy_value, :after_save_value
6
6
 
7
+ after_destroy :my_after_destroy_method
8
+ after_save :my_after_save_method
7
9
  belongs_to :jedi_order
10
+ has_one :padawan
8
11
 
9
12
  validates_presence_of :name, :age
10
13
  validates_uniqueness_of :name
11
14
 
12
- validate :my_custom_validator_method
13
- validate do |obj|
14
- obj.instance_eval do
15
- @custom_validator_checker_with_block = true
16
- end
17
- end
18
-
19
15
  def initialize(params={})
20
16
  params.each do |key, value|
21
17
  self.public_send("#{key}=", value)
@@ -26,4 +22,11 @@ class Jedi
26
22
  def my_custom_validator_method
27
23
  @custom_validator_checker = true
28
24
  end
25
+ def my_after_destroy_method
26
+ @after_destroy_value = true
27
+ end
28
+ def my_after_save_method
29
+ @after_save_value = true
30
+ end
31
+
29
32
  end
@@ -0,0 +1,7 @@
1
+ class Padawan
2
+ include CsvRecord::Document
3
+
4
+ attr_accessor :name, :age, :midi_chlorians
5
+
6
+ belongs_to :jedi
7
+ end
data/test/test_helper.rb CHANGED
@@ -48,4 +48,11 @@ class MiniTest::Spec
48
48
  midi_chlorians: '3k'
49
49
  )
50
50
  end
51
+ let(:obi_wan_kenobi_padawan) do
52
+ Padawan.build(
53
+ name: 'Qui-Gon Jinn',
54
+ age: 22,
55
+ midi_chlorians: '4k'
56
+ )
57
+ end
51
58
  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.8.0
4
+ version: 1.9.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-12-03 00:00:00.000000000 Z
12
+ date: 2012-12-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -128,13 +128,15 @@ files:
128
128
  - test/csv_record/writer_test.rb
129
129
  - test/models/callback_test_class.rb
130
130
  - test/models/car.rb
131
+ - test/models/custom_errors_class.rb
131
132
  - test/models/jedi.rb
132
133
  - test/models/jedi_order.rb
133
- - test/monkey_patches/array_test.rb
134
+ - test/models/padawan.rb
134
135
  - test/monkey_patches/object_test.rb
135
136
  - test/test_helper.rb
136
137
  homepage: https://github.com/lukasalexandre/csv_record
137
- licenses: []
138
+ licenses:
139
+ - MIT
138
140
  post_install_message:
139
141
  rdoc_options: []
140
142
  require_paths:
@@ -171,8 +173,9 @@ test_files:
171
173
  - test/csv_record/writer_test.rb
172
174
  - test/models/callback_test_class.rb
173
175
  - test/models/car.rb
176
+ - test/models/custom_errors_class.rb
174
177
  - test/models/jedi.rb
175
178
  - test/models/jedi_order.rb
176
- - test/monkey_patches/array_test.rb
179
+ - test/models/padawan.rb
177
180
  - test/monkey_patches/object_test.rb
178
181
  - test/test_helper.rb
@@ -1,14 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- describe Array do
4
- describe 'add' do
5
- it ('responds to add') { Object.new.must_respond_to :integer? }
6
-
7
- it 'adding' do
8
- arr = Array.new
9
- arr.add(:testing)
10
- arr.wont_be_empty
11
- arr.last.must_equal :testing
12
- end
13
- end
14
- end