active_type 0.4.5 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: facbcaa21321fefe498b9dfd06e01373a76bc0c4
4
- data.tar.gz: 1d49f4942cea269483f1e9f4c1054ef517267a8f
3
+ metadata.gz: 87578ffca30cf6e55491dbdf6d2979e5f1417983
4
+ data.tar.gz: 85c59e32dfd6f173cee644da43706f74e1591d6e
5
5
  SHA512:
6
- metadata.gz: 37658e011161ce41985c72c649f62f6686f6465a7ead8e7546accfe7a38bc82fdde513701d3b2c7d3eb59ba63774d4597bad2f87b6c2b9e0b1bcd50606ac3c2e
7
- data.tar.gz: 99064aa007b6b5b3f16063f884bee388e63ae2fdbed7b3b4afeae9aa5080ef01702edb2b63318ca402a195d3ea00d931d60a99abae56dc05c494167fab4b1643
6
+ metadata.gz: 63c1a195fb0f6cb52ec7cdcfcdf7f32bb78dc8d584edde830eb9de59690b02bc67b2500b1365d4e3f534f2900da9bde01d006d9a74b68a205159f96c433c01dd
7
+ data.tar.gz: 87f1849abb23e4c2181d3509d6d40d6757f296f011aa8e21d7afb74d6e686b120aa2a76e905ac04a5b126d560200f8e8309188538f160f5053c1f99cdfa6e6fe
data/.travis.yml CHANGED
@@ -37,19 +37,27 @@ matrix:
37
37
  gemfile: gemfiles/Gemfile.4.2.1.mysql2
38
38
  - rvm: "1.8.7"
39
39
  gemfile: gemfiles/Gemfile.4.2.1.pg
40
+ - rvm: "1.9.3"
41
+ gemfile: gemfiles/Gemfile.4.0.sqlite3
40
42
  - rvm: "1.9.3"
41
43
  gemfile: gemfiles/Gemfile.4.2.1.mysql2
42
44
  - rvm: "1.9.3"
43
45
  gemfile: gemfiles/Gemfile.4.2.1.pg
46
+ - rvm: "1.9.3"
47
+ gemfile: gemfiles/Gemfile.3.2.mysql2
48
+ - rvm: "2.0.0"
49
+ gemfile: gemfiles/Gemfile.4.0.sqlite3
44
50
  - rvm: "2.0.0"
45
51
  gemfile: gemfiles/Gemfile.4.2.1.mysql2
46
52
  - rvm: "2.0.0"
47
53
  gemfile: gemfiles/Gemfile.4.2.1.pg
48
- - rvm: "2.1.2"
49
- gemfile: gemfiles/Gemfile.4.0.sqlite3
50
- - rvm: "2.2.0"
51
- gemfile: gemfiles/Gemfile.3.2.sqlite3
52
- - rvm: "2.2.0"
54
+ - rvm: "2.0.0"
53
55
  gemfile: gemfiles/Gemfile.3.2.mysql2
54
- - rvm: "2.2.0"
56
+ - rvm: "2.1.7"
55
57
  gemfile: gemfiles/Gemfile.4.0.sqlite3
58
+ - rvm: "2.1.7"
59
+ gemfile: gemfiles/Gemfile.4.2.1.mysql2
60
+ - rvm: "2.1.7"
61
+ gemfile: gemfiles/Gemfile.4.2.1.pg
62
+ - rvm: "2.1.7"
63
+ gemfile: gemfiles/Gemfile.3.2.mysql2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- active_type (0.4.5)
4
+ active_type (0.5.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- active_type (0.4.5)
4
+ active_type (0.5.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- active_type (0.4.5)
4
+ active_type (0.5.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- active_type (0.4.5)
4
+ active_type (0.5.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- active_type (0.4.5)
4
+ active_type (0.5.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- active_type (0.4.5)
4
+ active_type (0.5.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- active_type (0.4.5)
4
+ active_type (0.5.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -43,7 +43,7 @@ module ActiveType
43
43
  module NativeCasters
44
44
 
45
45
  # Adapter for Rails 3.0 - 4.1.
46
- # In these versions, casting logic lives in ActiveRecord::ConnectionAdapters::Colum
46
+ # In these versions, casting logic lives in ActiveRecord::ConnectionAdapters::Column
47
47
  class DelegateToColumn
48
48
 
49
49
  def initialize(type)
@@ -1,3 +1,3 @@
1
1
  module ActiveType
2
- VERSION = '0.4.5'
2
+ VERSION = '0.5.0'
3
3
  end
@@ -181,6 +181,28 @@ module ActiveType
181
181
  virtual_attributes[name] = value
182
182
  end
183
183
 
184
+ # Returns the contents of the record as a nicely formatted string.
185
+ def inspect
186
+ inspection = attributes.collect do |name, value|
187
+ "#{name}: #{VirtualAttributes.attribute_for_inspect(value)}"
188
+ end.sort.compact.join(", ")
189
+ "#<#{self.class} #{inspection}>"
190
+ end
191
+
192
+ def self.attribute_for_inspect(value)
193
+ if value.is_a?(String) && value.length > 50
194
+ "#{value[0, 50]}...".inspect
195
+ elsif value.is_a?(Date) || value.is_a?(Time)
196
+ %("#{value.to_s(:db)}")
197
+ elsif value.is_a?(Array) && value.size > 10
198
+ inspected = value.first(10).inspect
199
+ %(#{inspected[0...-1]}, ...])
200
+ else
201
+ value.inspect
202
+ end
203
+ end
204
+
205
+
184
206
  module ClassMethods
185
207
 
186
208
  def _virtual_column(name)
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'ostruct'
2
3
 
3
4
  module ObjectSpec
4
5
 
@@ -61,6 +62,7 @@ module ObjectSpec
61
62
  before_validation :before_validation_callback
62
63
  after_save :after_save_callback
63
64
  after_commit :after_commit_callback
65
+ after_rollback :after_rollback_callback
64
66
 
65
67
  def before_save_callback
66
68
  end
@@ -74,6 +76,9 @@ module ObjectSpec
74
76
  def after_commit_callback
75
77
  end
76
78
 
79
+ def after_rollback_callback
80
+ end
81
+
77
82
  end
78
83
 
79
84
  class Child < ActiveRecord::Base
@@ -202,6 +207,22 @@ describe ActiveType::Object do
202
207
 
203
208
  end
204
209
 
210
+ describe '#inspect' do
211
+
212
+ it 'returns the contents of the object as a nicely formatted string' do
213
+ t = Time.now
214
+ subject.virtual_string = "string"
215
+ subject.virtual_integer = 17
216
+ subject.virtual_time = t
217
+ subject.virtual_date = Date.today
218
+ subject.virtual_boolean = true
219
+ subject.virtual_attribute = OpenStruct.new({:test => "openstruct"})
220
+
221
+ expect(subject.inspect).to eq("#<ObjectSpec::Object virtual_attribute: #<OpenStruct test=\"openstruct\">, virtual_boolean: true, virtual_date: \"#{Date.today}\", virtual_integer: 17, virtual_string: \"string\", virtual_time: \"#{t.to_s(:db)}\">")
222
+ end
223
+
224
+ end
225
+
205
226
  describe '#attributes' do
206
227
 
207
228
  it 'returns a hash of virtual attributes' do
@@ -367,6 +388,20 @@ describe ActiveType::Object do
367
388
 
368
389
  end
369
390
 
391
+ it 'runs after_rollback callbacks if an after_save callback raises an error', :rollback => false do
392
+ expect(subject).to receive(:after_save_callback).ordered.and_raise(ActiveRecord::Rollback)
393
+ expect(subject).to receive(:after_rollback_callback).ordered
394
+
395
+ expect(subject.save).to be_falsey
396
+ end
397
+
398
+ it 'does not run after_rollback callbacks if after_save does not raise an error', :rollback => false do
399
+ expect(subject).to_not receive(:after_rollback_callback)
400
+
401
+ expect(subject.save).to be_truthy
402
+
403
+ end
404
+
370
405
  end
371
406
 
372
407
  describe '.find' do
@@ -1,4 +1,5 @@
1
1
  require 'spec_helper'
2
+ require 'ostruct'
2
3
 
3
4
  module RecordSpec
4
5
 
@@ -151,6 +152,24 @@ describe ActiveType::Record do
151
152
  end
152
153
  end
153
154
 
155
+ describe '#inspect' do
156
+
157
+ it 'returns the contents of the object as a nicely formatted string' do
158
+ t = Time.now
159
+ subject.persisted_string = "persisted string"
160
+ subject.virtual_string = "string"
161
+ subject.persisted_integer = 20
162
+ subject.virtual_integer = 17
163
+ subject.virtual_time = t
164
+ subject.virtual_date = Date.today
165
+ subject.virtual_boolean = true
166
+ subject.virtual_attribute = OpenStruct.new({:test => "openstruct"})
167
+
168
+ expect(subject.inspect).to eq("#<RecordSpec::Record id: nil, persisted_boolean: nil, persisted_date: nil, persisted_integer: 20, persisted_string: \"persisted string\", persisted_time: nil, virtual_attribute: #<OpenStruct test=\"openstruct\">, virtual_boolean: true, virtual_date: \"#{Date.today}\", virtual_integer: 17, virtual_string: \"string\", virtual_time: \"#{t.to_s(:db)}\">")
169
+ end
170
+
171
+ end
172
+
154
173
  describe '#attributes' do
155
174
 
156
175
  it 'returns a hash of virtual and persisted attributes' do
data/spec/spec_helper.rb CHANGED
@@ -5,6 +5,7 @@ $: << File.join(File.dirname(__FILE__), "/../../lib" )
5
5
  require 'active_type'
6
6
 
7
7
  ActiveRecord::Base.default_timezone = :local
8
+ ActiveRecord::Base.raise_in_transactional_callbacks = true if ActiveRecord::Base.respond_to?(:raise_in_transactional_callbacks)
8
9
 
9
10
  Dir["#{File.dirname(__FILE__)}/support/*.rb"].each {|f| require f}
10
11
  Dir["#{File.dirname(__FILE__)}/shared_examples/*.rb"].each {|f| require f}
@@ -17,10 +17,8 @@ when /mysql2/
17
17
  config.merge!(custom_config)
18
18
  end
19
19
  ActiveRecord::Base.establish_connection(config)
20
- when /sqlite3/
21
- ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
22
20
  else
23
- raise "Unknown database type in Gemfile suffix: #{ENV['BUNDLE_GEMFILE']}"
21
+ ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
24
22
  end
25
23
 
26
24
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_type
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Kraze
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-02-01 00:00:00.000000000 Z
12
+ date: 2016-04-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler