module IntegerFieldTrait
  as_trait do |*fields|
    fields.each do |field|
      set_field = "#{field}="
      field_var = "@#{field}"
      attr_reader field
      define_method(set_field) do |value|
        value = value.to_i if value.is_a?(String) && value =~ /\A\-\d+\z/
        value = nil unless value.is_a?(Fixnum)
        instance_variable_set field_var, value
      end
    end
  end
end
