solnic / virtus

[DISCONTINUED ] Attributes on Steroids for Plain Old Ruby Objects
MIT License
3.77k stars 229 forks source link

FixedWidth Coercion #390

Open endersonmaia opened 6 years ago

endersonmaia commented 6 years ago

It would be nice to have a coercion like FiexdWiththat you could inform parameters like :

Example :

class Register
  include Virtua.model

  attribute :some_field, FixedWidth, width: 6, alignment: :right, padding: " "
end

my_register = Register:new()
my_register.some_field = "abc"

puts my_register.some_field
"   abc"

I tried to navigate through the classes to find where to make this via Custom Coercion, but couldn't come up with an simple implementation.

You someone could point me the direction, I can try to put some effort and code into this.

endersonmaia commented 6 years ago

I did something like this

require 'virtus'

class FixedWidth < Virtus::Attribute
    primitive String
    accept_options :width

    def coerce(value)
        if options.include?(:width)
            value.rjust(options[:width], ' ') unless value.nil?
        end
    end
  end

class Registro
    include Virtus.model

    attribute :versao, FixedWidth, width: 10
end
my01caddi commented 6 years ago

require 'virtus'

class FixedWidth < Virtus::Attribute primitive String accept_options :width

def coerce(value)
    if options.include?(:width)
        value.rjust(options[:width], ' ') unless value.nil?
    end
end

end

class Registro include Virtus.model

attribute :versao, FixedWidth, width: 10

end