Sha256: c89d199b9d489f609a06e9f2d8e16d6c1451a4ee4ded0f825980c45096b0fd62

Contents?: true

Size: 1.49 KB

Versions: 10

Compression:

Stored size: 1.49 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_select k, v
        if v.is_a?(Array)
          v.reject{|str| str=='nil' }
        else
          v
        end
      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

10 entries across 10 versions & 1 rubygems

Version Path
populate-me-0.8.0 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.7.1 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.7.0 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.6.3 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.6.2 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.6.1 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.6.0 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.5.2 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.5.1 lib/populate_me/document_mixins/typecasting.rb
populate-me-0.5.0 lib/populate_me/document_mixins/typecasting.rb