Mycowriter Gem Documentation

Mycowriter is a Rails engine that provides intelligent taxonomic autocomplete for genus and species names, powered by MycoBank data.

Installation

1. Add to your Gemfile

gem 'mycowriter'

2. Install the gem

bundle install
rails generate mycowriter:install

3. Set up your database

Mycowriter expects an mb_lists table with MycoBank taxonomic data:

create_table "mb_lists" do |t|
  t.string "taxon_name"
  t.string "rank_name"
  t.timestamps
end

4. Use in your text fields

<div data-controller="inline-autocomplete"
     data-inline-autocomplete-genus-url-value="<%= mycowriter.genera_autocomplete_path %>"
     data-inline-autocomplete-species-url-value="<%= mycowriter.species_autocomplete_path %>"
     data-inline-autocomplete-min-value="4">

  <%= f.text_area :body,
      data: {
        inline_autocomplete_target: "textarea",
        action: "input->inline-autocomplete#onInput keydown->inline-autocomplete#onKeydown"
      },
      class: "form-textarea" %>

  <div data-inline-autocomplete-target="dropdown" class="hidden"></div>
</div>

Features

🔍 Real-time Autocomplete

Instant suggestions as users type genus and species names

✍️ Inline Text Autocomplete

Autocomplete at cursor position in textareas while writing

⚡ Debounced Search

150ms debounce for optimal performance

🎯 Two-Stage Completion

Select genus first, then get species suggestions for that genus

📊 MycoBank Data

Integrated with MycoBank's comprehensive taxonomic database

🔧 Configurable

Customizable minimum characters, case sensitivity, and results limit

Configuration

Customize Mycowriter in config/initializers/mycowriter.rb:

Mycowriter.configure do |config|
  # Minimum characters before autocomplete triggers (default: 3)
  config.min_characters = 3

  # Case-sensitive search (default: false)
  config.case_sensitive = false

  # Maximum results to return (default: 20)
  config.results_limit = 20
end

Usage Examples

Basic Usage in Forms

<div data-controller="inline-autocomplete"
     data-inline-autocomplete-genus-url-value="<%= mycowriter.genera_autocomplete_path %>"
     data-inline-autocomplete-species-url-value="<%= mycowriter.species_autocomplete_path %>"
     data-inline-autocomplete-min-value="4">

  <%= f.text_area :body,
      data: {
        inline_autocomplete_target: "textarea",
        action: "input->inline-autocomplete#onInput keydown->inline-autocomplete#onKeydown"
      },
      class: "form-textarea w-full h-48 p-4 border rounded",
      placeholder: "Start typing a genus name (capitalized, 4+ characters)..." %>

  <div data-inline-autocomplete-target="dropdown" class="hidden"></div>
</div>

How It Works

  1. User types a capitalized word with 4+ characters (e.g., "Agar")
  2. Genus dropdown appears below cursor position
  3. User clicks a genus (e.g., "Agaricus")
  4. Genus is inserted into text at cursor
  5. User continues typing species name (e.g., "campes")
  6. Species dropdown shows matches for the selected genus
  7. User clicks species (e.g., "campestris")
  8. Complete binomial "Agaricus campestris" appears in text as plain text

📝 Output Format

The gem inserts plain text without HTML formatting. This gives you flexibility to format binomial names as needed in your application.

To add italics: Wrap inserted text with <em> tags in your JavaScript, or apply CSS styling to your textarea.

Customizing Minimum Characters

<!-- Use 3 characters instead of default 4 -->
<div data-controller="inline-autocomplete"
     data-inline-autocomplete-genus-url-value="<%= mycowriter.genera_autocomplete_path %>"
     data-inline-autocomplete-species-url-value="<%= mycowriter.species_autocomplete_path %>"
     data-inline-autocomplete-min-value="3">
  <!-- textarea here -->
</div>

📝 Data Attribution

MycoBank License: Creative Commons CC BY-NC-ND

  • BY (Attribution): Credit must be given to MycoBank
  • NC (Non-Commercial): Non-commercial use only
  • ND (No Derivatives): Data used in unadapted form only

Attribution: MBList taxonomic data provided by MycoBank (www.mycobank.org)

API Routes

GET /mycowriter/autocomplete/genera

Returns genus autocomplete results

Parameters: q (query string, min 3 chars)

GET /mycowriter/autocomplete/species

Returns species autocomplete results

Parameters: q (query string), mushroom_id (optional, for genus filtering)

Support & Contributing

Found a bug? Please open an issue on GitHub.

Want to contribute? Pull requests are welcome! Please read our contributing guidelines.

Need help? Check out our README or open a discussion on GitHub.