Skip to content

Conversation

@rockwellll
Copy link
Collaborator

🎉 Valerie v1.0.0 - Production Ready Release

We're excited to announce the first stable release of Valerie! This release represents a major milestone with significant improvements in functionality, reliability, and documentation.

🐛 Critical Bug Fixes

VCard Specification Compliance

  • Fixed PERF → PREF typo in Phone, Email, and Address classes (VCard 3.0 spec)
    • Previously generated invalid PERF= fields, now correctly outputs PREF= for preference/priority
    • Affects all TEL, EMAIL, and ADR fields with position parameters
  • Fixed Phone#to_h returning @tel instead of @number (undefined variable bug)
  • Synchronized version numbers between lib/valerie.rb and valerie.gemspec

✨ New Features

FN (Formatted Name) Field Support

  • Generation: FN: field now included in VCard output (VCard 3.0 requirement)
  • Parsing: Extracts formatted name from VCard input
  • Auto-generation: Automatically creates FN when setting name (e.g., "Jane Smith")
  • Manual override: New card.formatted_name= setter for custom formatting (e.g., "Dr. Jane Smith Jr.")

Address Parsing

  • Parser now extracts addresses from VCard strings (previously only parsed phones and emails)
  • ✅ Complete support for all address components: PO Box, extended address, street, locality, region, postal code, country

🧪 Comprehensive Test Suite

Added 18 new tests (+46% increase)

  • Before: 39 tests, 68 assertions
  • After: 57 tests, 130 assertions (+91% more assertions)

New Test Coverage

  • test/address_test.rb - 7 tests covering Address class functionality
  • test/collection/address_collection_test.rb - 4 tests for address collection management
  • ✅ Enhanced card_test.rb with 10 new integration tests:
    • FN field generation and parsing
    • Address parsing from VCard strings
    • Complete end-to-end VCard creation and parsing
    • Position-based ordering in collections

All 57 tests passing with 0 failures ✅

📚 API Documentation

YARD Documentation Added (~59% coverage)

  • ✅ Comprehensive documentation for all public APIs
  • ✅ Method signatures with @param, @return, and @raise tags
  • ✅ Real-world usage examples for every public method
  • ✅ Class-level overview documentation
  • ✅ IDE integration support (Solargraph, RubyMine)

Documented Components

  • Valerie::Card - Main entry point with parsing and generation
  • Valerie::Phone, Email, Address, Name - Value objects
  • Collection::PhoneCollection, EmailCollection, AddressCollection
  • Valerie::Core::Parser - Internal parsing logic
  • Configuration system

Documentation Tools

Generate documentation

bundle exec rake yard

View locally

open doc/index.html## 📦 What's Included

Gemspec Updates

  • Added yard ~> 0.9 development dependency
  • Version bumped to 1.0.0

New Files

  • .yardopts - YARD configuration
  • .gitignore - Proper ignore patterns for gems and docs
  • test/address_test.rb - Address class tests
  • test/collection/address_collection_test.rb - Address collection tests

Enhanced Files

  • Rakefile - Added YARD documentation tasks
  • README.md - Added documentation section

🎯 Why 1.0.0?

This release represents production-ready software:

  1. Spec Compliant - VCard 3.0 specification compliance (PREF fields, FN field)
  2. Well Tested - Comprehensive test coverage with integration tests
  3. Documented - Professional API documentation with examples
  4. Stable API - Clean, intuitive public API
  5. Battle Tested - Extracted from production use at Hellotext

🚀 Breaking Changes

None! This is a fully backward-compatible release. All existing code will continue to work.

📝 Migration Notes

No migration needed. Simply update your Gemfile:

gem 'valerie', '~> 1.0

@rockwellll rockwellll merged commit f3fe2a6 into main Nov 8, 2025
1 check passed
@rockwellll rockwellll deleted the bug-fixes branch November 8, 2025 17:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants