rails-contact
rails-contact is a mountable Rails engine for Google-Contacts-style contact management.
It provides:
- rich contact profile fields
- multi-value contact methods (emails/phones/addresses/websites/events)
- labels/tags
- dynamic add/remove nested rows
- Elasticsearch-backed search with DB fallback
- CSV import and Google sync scaffolding
- merge and bulk-delete operations
- Devise-style override generators
Quickstart
1) Add gem
gem "rails-contact", "~> 0.1.3"
bundle install
2) Install and generate schema
rails generate rails:contact:install
rails generate rails:contact:contact Contact
rails db:migrate
3) Mount engine routes
rails_contact_for :contacts
or explicit mount:
mount Rails::Contact::Engine => "/contacts", as: "rails_contact"
rails_contact_for :contact is auto-normalized to /contacts.
4) Visit UI
/contacts/contacts/new/contacts/:id
Generators
rails generate rails:contact:install
rails generate rails:contact:contact Contact
rails generate rails:contact:views
rails generate rails:contact:controllers
viewscopies templates so host apps can customize UI.controllerscopies an override-ready contacts controller.
Feature map
Core profile fields
- Prefix, first, middle, last, suffix, nickname
- Company, job title, department
- Labels (comma-separated input)
- Notes and metadata
- Starred flag
- Photo URL
Multi-value sections (dynamic)
- Emails
- Phones
- Addresses
- Websites
- Events (birthday/custom)
Rows can be added/removed dynamically in form UI.
List/search
- Search by name/email/phone/company/job title/labels
- Filter by city/region/sync/starred
- Sort by recent updates
Actions
- Bulk delete selected contacts
- Merge source contact into target contact
Configuration
Initializer: config/initializers/rails_contact.rb
Rails::Contact.configure do |config|
config.search_backend = :elasticsearch
config.elasticsearch_url = ENV.fetch("ELASTICSEARCH_URL", "http://127.0.0.1:9200")
config.google_sync_enabled = false
config.google_max_contacts = 25_000
config.rolling_window_sort = :updated_at
config.default_per_page = 25
end
Rake tasks
rake rails_contact:reindex
rake rails_contact:sync_google
rake rails_contact:import_csv CSV_PATH=/absolute/path/to/eq.csv
Testing and coverage
RSpec is the primary framework.
bundle exec rspec
Coverage is enforced with SimpleCov:
- 100% line coverage target
- 100% branch coverage target
- CI fails below thresholds
Release
bundle exec rake build
bundle exec rake release
RubyGems MFA is required for push.
Extended docs
docs/parity_matrix.mddocs/product_decisions.mddocs/roadmap.mddocs/migration_guide.md