dscout/fragmenter

View on GitHub
lib/fragmenter/fragment.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Fragmenter
  class Fragment
    attr_reader :blob, :options

    def initialize(blob, options)
      @blob    = blob
      @options = options
    end

    def number
      @number ||= options.fetch(:number, 1).to_i
    end

    def total
      @total ||= options.fetch(:total, 1).to_i
    end

    def content_type
      @content_type ||= options[:content_type] || 'application/octet-stream'
    end

    def padded_number
      digits = total.to_s.length

      "%0#{digits}d" % number.to_s
    end

    def valid?
      valid_blob? && valid_number? && valid_total? && valid_content_type?
    end

    private

    def valid_blob?
      blob.size > 0
    end

    def valid_number?
      number.kind_of?(Integer) && number > 0
    end

    def valid_total?
      total.kind_of?(Integer) && total > 0 && total >= number
    end

    def valid_content_type?
      content_type =~ /\w+\/\w+/
    end
  end
end