{"record":{"id":"e79563e427ba7a66","repo":"we-promise/sure","slug":"invalid-field-type-field-type-for-field-e79563","errorCode":null,"errorMessage":"Invalid field type '#{field[:type]}' for #{field[:name]}. Must be one of: text, string, integer, boolean","messagePattern":"Invalid field type '#(.+?)' for #(.+?)\\. Must be one of: text, string, integer, boolean","errorType":"exception","errorClass":"Thor::Error","httpStatus":null,"severity":"error","filePath":"lib/generators/provider/global/global_generator.rb","lineNumber":48,"sourceCode":"  include Rails::Generators::Migration\n\n  source_root File.expand_path(\"templates\", __dir__)\n\n  argument :fields, type: :array, default: [], banner: \"field:type[:secret][:default=value] field:type[:secret]\"\n\n  class_option :skip_migration, type: :boolean, default: false, desc: \"Skip generating migration\"\n  class_option :skip_models, type: :boolean, default: false, desc: \"Skip generating models\"\n  class_option :skip_adapter, type: :boolean, default: false, desc: \"Skip generating adapter\"\n\n  def validate_fields\n    if parsed_fields.empty?\n      raise Thor::Error, \"At least one credential field is required. Example: api_key:text:secret\"\n    end\n\n    # Validate field types\n    parsed_fields.each do |field|\n      unless %w[text string integer boolean].include?(field[:type])\n        raise Thor::Error, \"Invalid field type '#{field[:type]}' for #{field[:name]}. Must be one of: text, string, integer, boolean\"\n      end\n    end\n  end\n\n  def generate_migration\n    return if options[:skip_migration]\n\n    migration_template \"global_migration.rb.tt\",\n                       \"db/migrate/create_#{table_name}_and_accounts.rb\",\n                       migration_version: migration_version\n  end\n\n  def create_models\n    return if options[:skip_models]\n\n    # Create item model\n    item_model_path = \"app/models/#{file_name}_item.rb\"\n    if File.exist?(item_model_path)","sourceCodeStart":30,"sourceCodeEnd":66,"githubUrl":"https://github.com/we-promise/sure/blob/e69894adb92547273377398c15f45c979cd9416a/lib/generators/provider/global/global_generator.rb#L30-L66","documentation":"Raised as Thor::Error by the provider global generator (lib/generators/provider/global/global_generator.rb:48) when a credential field's declared type is not one of text, string, integer, boolean. Same restriction as the family generator: the migration template can only emit those four types, so types like datetime, json, or decimal are rejected during validate_fields, before any file is generated.","triggerScenarios":"Running rails g provider:global acme token:json expires:datetime secret:decimal — any :type suffix outside the allowed four.","commonSituations":"Modeling a provider credential that is naturally structured (JSON keyfile) or time-based (token expiry); forgetting the :secret modifier is separate from the type.","solutions":["Use text for blobs/JSON keys and string for timestamps; parse in the model code.","Or generate with valid types and hand-edit the migration plus model to refine the column type.","Validation runs first, so a failed invocation leaves the tree clean — just re-run with corrected args."],"exampleFix":"// before\nrails g provider:global acme keyfile:json\n\n// after\nrails g provider:global acme keyfile:text:secret","handlingStrategy":"validation","validationCode":"ALLOWED = %w[text string integer boolean]\nfields.each { |f| name, type = f.split(':'); raise \"#{name}: #{type} invalid\" unless ALLOWED.include?(type) }","typeGuard":"type = arg.split(':')[1]\n%w[text string integer boolean].include?(type)","tryCatchPattern":"begin\n  Rails::Generators.invoke 'provider:global', args\nrescue Thor::Error => e\n  # correct the named field's type to text/string/integer/boolean and re-run\nend","preventionTips":["JSON keyfiles and blobs -> text (:secret), timestamps -> string; refine types in the generated migration.","Validation precedes file generation, so failed runs leave a clean tree.","Keep a checked-in Rake task wrapping provider generator calls with type validation."],"tags":["rails","generator","thor","field-types","cli"],"backgroundTag":"generator-invalid-argument","analyzedSha":"e69894adb92547273377398c15f45c979cd9416a","analyzedAt":"2026-08-21T18:22:41.165Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}