Sha256: 5488fe89a58e5482999c1fc7a2d02e3cb99e75f1cbd7c27393a24d95ca67e7e4

Contents?: true

Size: 1.35 KB

Versions: 12

Compression:

Stored size: 1.35 KB

Contents

module PopulateMe
  module DocumentMixins
    module Typecasting

      # This module deals with typecasting the fields
      # when they are received as strings,
      # generally from a form or a csv file

      def typecast k, v
        unless self.class.fields.key?(k)
          return WebUtils.automatic_typecast(v) 
        end
        f = self.class.fields[k].dup
        meth = "typecast_#{f[:type]}".to_sym
        unless respond_to? meth
          return WebUtils.automatic_typecast(v, [f[:type],:nil])
        end
        __send__ meth, k, v
      end

      def typecast_integer k, v
        v.to_i
      end

      def typecast_price k, v
        return nil if WebUtils.blank?(v)
        WebUtils.parse_price(v)
      end

      def typecast_date k, v
        if v[/\d\d(\/|-)\d\d(\/|-)\d\d\d\d/]
          Date.parse v
        else
          nil
        end
      end

      def typecast_datetime k, v
        if v[/\d\d(\/|-)\d\d(\/|-)\d\d\d\d \d\d?:\d\d?:\d\d?/]
          d,m,y,h,min,s = v.split(/[-:\s\/]/)
          Time.utc(y,m,d,h,min,s)
        else
          nil
        end
      end

      def typecast_attachment k, v
        attached = self.attachment k
        if WebUtils.blank? v
          attached.delete_all
          return nil
        elsif v.is_a?(Hash)&&v.key?(:tempfile)
          return attached.create v
        end
      end

    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
populate-me-0.4.0 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.3.0 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.2.0 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.1.8 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.1.7 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.1.6 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.1.5 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.1.4 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.1.3 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.1.2 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.1.1 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.1.0 lib/populate_me/document_mixins/typecasting.rb