Hello community,

here is the log from the commit of package rubygem-virtus for openSUSE:Factory 
checked in at 2015-03-23 12:18:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-virtus (Old)
 and      /work/SRC/openSUSE:Factory/.rubygem-virtus.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rubygem-virtus"

Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-virtus/rubygem-virtus.changes    
2015-02-23 13:19:25.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.rubygem-virtus.new/rubygem-virtus.changes       
2015-03-23 12:18:17.000000000 +0100
@@ -1,0 +2,6 @@
+Fri Mar 20 20:13:17 UTC 2015 - [email protected]
+
+- updated to version 1.0.5
+ * [feature] Support for :nullify_blank option when configuring a virtus 
module (lucasmazza)
+
+-------------------------------------------------------------------

Old:
----
  virtus-1.0.4.gem

New:
----
  virtus-1.0.5.gem

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rubygem-virtus.spec ++++++
--- /var/tmp/diff_new_pack.khKZsY/_old  2015-03-23 12:18:18.000000000 +0100
+++ /var/tmp/diff_new_pack.khKZsY/_new  2015-03-23 12:18:18.000000000 +0100
@@ -24,7 +24,7 @@
 #
 
 Name:           rubygem-virtus
-Version:        1.0.4
+Version:        1.0.5
 Release:        0
 %define mod_name virtus
 %define mod_full_name %{mod_name}-%{version}

++++++ virtus-1.0.4.gem -> virtus-1.0.5.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Changelog.md new/Changelog.md
--- old/Changelog.md    2015-01-03 16:12:38.000000000 +0100
+++ new/Changelog.md    2015-03-18 12:49:02.000000000 +0100
@@ -1,3 +1,9 @@
+# v1.0.5 2015-03-18
+
+* [feature] Support for :nullify_blank option when configuring a virtus module 
(lucasmazza)
+
+[Compare 
v1.0.4..v1.0.5](https://github.com/solnic/virtus/compare/v1.0.4...v1.0.5)
+
 # v1.0.4 2015-01-03
 
 * [feature] Support for :required option when configuring a virtus module 
(solnic)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md       2015-01-03 16:12:38.000000000 +0100
+++ new/README.md       2015-03-18 12:49:02.000000000 +0100
@@ -10,7 +10,7 @@
 
 # Ruby Object Mapper
 
-[![Gem Version](https://badge.fury.io/rb/rom.svg)][gem]
+[![Gem Version](https://badge.fury.io/rb/virtus.svg)][gem]
 [![Build 
Status](https://travis-ci.org/solnic/virtus.svg?branch=master)][travis]
 [![Dependency Status](https://gemnasium.com/solnic/virtus.png)][gemnasium]
 [![Code 
Climate](https://codeclimate.com/github/solnic/virtus/badges/gpa.svg)][codeclimate]
@@ -60,12 +60,12 @@
   attribute :birthday, DateTime
 end
 
-user = User.new(:name => 'Piotr', :age => 29)
-user.attributes # => { :name => "Piotr", :age => 29 }
+user = User.new(:name => 'Piotr', :age => 31)
+user.attributes # => { :name => "Piotr", :age => 31 }
 
 user.name # => "Piotr"
 
-user.age = '29' # => 29
+user.age = '31' # => 31
 user.age.class # => Fixnum
 
 user.birthday = 'November 18th, 1983' # => #<DateTime: 
1983-11-18T00:00:00+00:00 (4891313/2,0/1,2299161)>
@@ -508,6 +508,22 @@
 User.new :admin => "can't really say if true or false"
 ```
 
+## Nullify Blank Strings Mode
+
+If you want to replace empty Strings with `nil` values (since they can't be
+coerced into the expected type), you can use the `:nullify_blank` option.
+
+``` ruby
+class User
+  include Virtus.model(:nullify_blank => true)
+
+  attribute :birthday, Date
+end
+
+User.new(:birthday => "").birthday # => nil
+```
+
+
 ## Building modules with custom configuration
 
 You can also build Virtus modules that contain their own configuration.
Files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/virtus/attribute/builder.rb 
new/lib/virtus/attribute/builder.rb
--- old/lib/virtus/attribute/builder.rb 2015-01-03 16:12:38.000000000 +0100
+++ new/lib/virtus/attribute/builder.rb 2015-03-18 12:49:02.000000000 +0100
@@ -160,10 +160,11 @@
       def initialize_attribute
         @attribute = klass.new(type, options)
 
-        @attribute.extend(Accessor)    if options[:name]
-        @attribute.extend(Coercible)   if options[:coerce]
-        @attribute.extend(Strict)      if options[:strict]
-        @attribute.extend(LazyDefault) if options[:lazy]
+        @attribute.extend(Accessor)     if options[:name]
+        @attribute.extend(Coercible)    if options[:coerce]
+        @attribute.extend(NullifyBlank) if options[:nullify_blank]
+        @attribute.extend(Strict)       if options[:strict]
+        @attribute.extend(LazyDefault)  if options[:lazy]
 
         @attribute.finalize if options[:finalize]
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/virtus/attribute/nullify_blank.rb 
new/lib/virtus/attribute/nullify_blank.rb
--- old/lib/virtus/attribute/nullify_blank.rb   1970-01-01 01:00:00.000000000 
+0100
+++ new/lib/virtus/attribute/nullify_blank.rb   2015-03-18 12:49:02.000000000 
+0100
@@ -0,0 +1,24 @@
+module Virtus
+  class Attribute
+
+    # Attribute extension which nullifies blank attributes when coercion failed
+    #
+    module NullifyBlank
+
+      # @see [Attribute#coerce]
+      #
+      # @api public
+      def coerce(input)
+        output = super
+
+        if !value_coerced?(output) && input.to_s.empty?
+          nil
+        else
+          output
+        end
+      end
+
+    end # NullifyBlank
+
+  end # Attribute
+end # Virtus
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/virtus/attribute.rb new/lib/virtus/attribute.rb
--- old/lib/virtus/attribute.rb 2015-01-03 16:12:38.000000000 +0100
+++ new/lib/virtus/attribute.rb 2015-03-18 12:49:02.000000000 +0100
@@ -20,12 +20,13 @@
 
     include ::Equalizer.new(:type, :options)
 
-    accept_options :primitive, :accessor, :default, :lazy, :strict, :required, 
:finalize
+    accept_options :primitive, :accessor, :default, :lazy, :strict, :required, 
:finalize, :nullify_blank
 
     strict false
     required true
     accessor :public
     finalize true
+    nullify_blank false
 
     # @see Virtus.coerce
     #
@@ -176,6 +177,23 @@
       kind_of?(Strict)
     end
 
+    # Return if the attribute is in the nullify blank coercion mode
+    #
+    # @example
+    #
+    #   attr = Virtus::Attribute.build(String, :nullify_blank => true)
+    #   attr.nullify_blank? # => true
+    #
+    #   attr = Virtus::Attribute.build(String, :nullify_blank => false)
+    #   attr.nullify_blank? # => false
+    #
+    # @return [Boolean]
+    #
+    # @api public
+    def nullify_blank?
+      kind_of?(NullifyBlank)
+    end
+
     # Return if the attribute is accepts nil values as valid coercion output
     #
     # @example
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/virtus/configuration.rb 
new/lib/virtus/configuration.rb
--- old/lib/virtus/configuration.rb     2015-01-03 16:12:38.000000000 +0100
+++ new/lib/virtus/configuration.rb     2015-03-18 12:49:02.000000000 +0100
@@ -12,6 +12,9 @@
     # Access the strict setting for this instance
     attr_accessor :strict
 
+    # Access the nullify_blank setting for this instance
+    attr_accessor :nullify_blank
+
     # Access the required setting for this instance
     attr_accessor :required
 
@@ -30,6 +33,7 @@
       @finalize        = options.fetch(:finalize, true)
       @coerce          = options.fetch(:coerce, true)
       @strict          = options.fetch(:strict, false)
+      @nullify_blank   = options.fetch(:nullify_blank, false)
       @required        = options.fetch(:required, true)
       @constructor     = options.fetch(:constructor, true)
       @mass_assignment = options.fetch(:mass_assignment, true)
@@ -59,6 +63,7 @@
       { :coerce             => coerce,
         :finalize           => finalize,
         :strict             => strict,
+        :nullify_blank      => nullify_blank,
         :required           => required,
         :configured_coercer => coercer }.freeze
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/virtus/version.rb new/lib/virtus/version.rb
--- old/lib/virtus/version.rb   2015-01-03 16:12:38.000000000 +0100
+++ new/lib/virtus/version.rb   2015-03-18 12:49:02.000000000 +0100
@@ -1,3 +1,3 @@
 module Virtus
-  VERSION = '1.0.4'.freeze
+  VERSION = '1.0.5'.freeze
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/virtus.rb new/lib/virtus.rb
--- old/lib/virtus.rb   2015-01-03 16:12:38.000000000 +0100
+++ new/lib/virtus.rb   2015-03-18 12:49:02.000000000 +0100
@@ -279,6 +279,7 @@
 require 'virtus/attribute/coercible'
 require 'virtus/attribute/strict'
 require 'virtus/attribute/lazy_default'
+require 'virtus/attribute/nullify_blank'
 
 require 'virtus/attribute/boolean'
 require 'virtus/attribute/collection'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2015-01-03 16:12:38.000000000 +0100
+++ new/metadata        2015-03-18 12:49:02.000000000 +0100
@@ -1,14 +1,14 @@
 --- !ruby/object:Gem::Specification
 name: virtus
 version: !ruby/object:Gem::Version
-  version: 1.0.4
+  version: 1.0.5
 platform: ruby
 authors:
 - Piotr Solnica
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2015-01-03 00:00:00.000000000 Z
+date: 2015-03-18 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
   name: descendants_tracker
@@ -132,6 +132,7 @@
 - lib/virtus/attribute/embedded_value.rb
 - lib/virtus/attribute/hash.rb
 - lib/virtus/attribute/lazy_default.rb
+- lib/virtus/attribute/nullify_blank.rb
 - lib/virtus/attribute/strict.rb
 - lib/virtus/attribute_set.rb
 - lib/virtus/builder.rb
@@ -237,9 +238,8 @@
       version: '0'
 requirements: []
 rubyforge_project: 
-rubygems_version: 2.2.2
+rubygems_version: 2.4.5
 signing_key: 
 specification_version: 4
 summary: Attributes on Steroids for Plain Old Ruby Objects
 test_files: []
-has_rdoc: 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spec/integration/building_module_spec.rb 
new/spec/integration/building_module_spec.rb
--- old/spec/integration/building_module_spec.rb        2015-01-03 
16:12:38.000000000 +0100
+++ new/spec/integration/building_module_spec.rb        2015-03-18 
12:49:02.000000000 +0100
@@ -19,6 +19,10 @@
         config.strict = true
       }
 
+      BlankModule = Virtus.model { |config|
+        config.nullify_blank = true
+      }
+
       class NoncoercedUser
         include NoncoercingModule
 
@@ -39,6 +43,13 @@
         attribute :stuff, Hash
         attribute :happy, Boolean, :strict => false
       end
+
+      class BlankModel
+        include BlankModule
+
+        attribute :stuff, Hash
+        attribute :happy, Boolean, :nullify_blank => false
+      end
     end
   end
 
@@ -63,6 +74,17 @@
 
     model.happy = 'foo'
 
+    expect(model.happy).to eql('foo')
+  end
+
+  specify 'including a custom module with nullify blank enabled' do
+    model = Examples::BlankModel.new
+
+    model.stuff = ''
+    expect(model.stuff).to be_nil
+
+    model.happy = 'foo'
+
     expect(model.happy).to eql('foo')
   end
 end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/spec/unit/virtus/attribute/class_methods/build_spec.rb 
new/spec/unit/virtus/attribute/class_methods/build_spec.rb
--- old/spec/unit/virtus/attribute/class_methods/build_spec.rb  2015-01-03 
16:12:38.000000000 +0100
+++ new/spec/unit/virtus/attribute/class_methods/build_spec.rb  2015-03-18 
12:49:02.000000000 +0100
@@ -78,6 +78,14 @@
     it { is_expected.to be_strict }
   end
 
+  context 'when options specify nullify blank mode' do
+    let(:options) { { :nullify_blank => true } }
+
+    it_behaves_like 'a valid attribute instance'
+
+    it { is_expected.to be_nullify_blank }
+  end
+
   context 'when type is a string' do
     let(:type) { 'Integer' }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/spec/unit/virtus/attribute/coerce_spec.rb 
new/spec/unit/virtus/attribute/coerce_spec.rb
--- old/spec/unit/virtus/attribute/coerce_spec.rb       2015-01-03 
16:12:38.000000000 +0100
+++ new/spec/unit/virtus/attribute/coerce_spec.rb       2015-03-18 
12:49:02.000000000 +0100
@@ -7,10 +7,11 @@
 
   let(:object)   {
     described_class.build(String,
-      :coercer => coercer, :strict => strict, :required => required)
+      :coercer => coercer, :strict => strict, :required => required, 
:nullify_blank => nullify_blank)
   }
 
   let(:required) { true }
+  let(:nullify_blank) { false }
   let(:input)    { 1 }
   let(:output)   { '1' }
 
@@ -78,4 +79,51 @@
       expect(coercer).to have_received.success?(String, input)
     end
   end
+
+  context 'when the input is an empty String' do
+    let(:input) { '' }
+    let(:output) { '' }
+
+    context 'when nullify_blank is turned on' do
+      let(:nullify_blank) { true }
+      let(:strict) { false }
+      let(:require) { false }
+
+      it 'returns nil' do
+        mock(coercer).call(input) { input }
+        mock(coercer).success?(String, input) { false }
+
+        expect(subject).to be_nil
+
+        expect(coercer).to have_received.call(input)
+        expect(coercer).to have_received.success?(String, input)
+      end
+
+      it 'returns the ouput if it was coerced' do
+        mock(coercer).call(input) { output }
+        mock(coercer).success?(String, output) { true }
+
+        expect(subject).to be(output)
+
+        expect(coercer).to have_received.call(input)
+        expect(coercer).to have_received.success?(String, output)
+      end
+    end
+
+    context 'when both nullify_blank and strict are turned on' do
+      let(:nullify_blank) { true }
+      let(:strict) { true }
+
+      it 'does not raises an coercion error' do
+        mock(coercer).call(input) { input }
+        mock(coercer).success?(String, input) { false }
+
+        expect { subject }.not_to raise_error
+        expect(subject).to be_nil
+
+        expect(coercer).to have_received.call(input)
+        expect(coercer).to have_received.success?(String, input)
+      end
+    end
+  end
 end

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to