README.md in postgres_ext-0.0.4 vs README.md in postgres_ext-0.0.5

- old
+ new

@@ -1,18 +1,16 @@ # PostgresExt -## Current Status: [![Build Status](https://secure.travis-ci.org/dockyard/postgres_ext.png?branch=master)](http://travis-ci.org/dockyard/postgres_ext) - Adds support for missing PostgreSQL data types to ActiveRecord. -## Data Type Supported by postgres_ext +## Current Status: [![Build Status](https://secure.travis-ci.org/dockyard/postgres_ext.png?branch=master)](http://travis-ci.org/dockyard/postgres_ext) - * INET - * CIDR - * MACADDR - * Arrays +## Roadmap + * Arel support for INET, CIDR and Array related where clauses + * Backport HStore code from Rails 4.0 + ## Installation Add this line to your application's Gemfile: gem 'postgres_ext' @@ -27,9 +25,129 @@ ## Usage Just `require 'postgres_ext'` and use ActiveRecord as you normally would! postgres_ext extends ActiveRecord's data type handling. + + * [Migration/Schema.rb support](#migrationschemarb-support) + * [Type Casting support](#type-casting-support) + +## Migration/Schema.rb support + +### INET + +```ruby +create_table :testing do |t| + t.inet :inet_column + # or + t.inet :inet_column_1, :inet_column_2 + # or + t.column :inet_column, :inet +end +``` + +### CIDR + +```ruby +create_table :testing do |t| + t.cidr :cidr_column + # or + t.cidr :cidr_column_1, :cidr_column_2 + # or + t.column :cidr_column, :cidr +end +``` + +### MACADDR + +```ruby +create_table :testing do |t| + t.macaddr :macaddr_column + # or + t.macaddr :macaddr_column_1, :macaddr_column_2 + # or + t.column :macaddr_column, :macaddr +end +``` + +### UUID + +```ruby +create_table :testing do |t| + t.uuid :uuid_column + # or + t.uuid :uuid_column_1, :uuid_column_2 + # or + t.column :uuid_column, :uuid +end +``` + +### Arrays +Arrays are created from any ActiveRecord supported datatype (including +ones added by postgre\_ext), and respect length constraints + +```ruby +create_table :testing do |t| + t.integer :int_array, :array => true + # integer[] + t.integer :int_array, :array => true, :length => 2 + # smallint[] + t.string :macaddr_column_1, :array => true, :length => 30 + # char varying(30)[] +end +``` + +## Type Casting support + +### INET and CIDR +INET and CIDR values are converted to +[IPAddr](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/ipaddr/rdoc/IPAddr.html) +objects when retrieved from the database, or set as a string. + +```ruby +create_table :inet_examples do |t| + t.inet :ip_address +end + +class InetExample < ActiveRecord::Base +end + +inetExample = InetExample.new +inetExample.ip_address = '127.0.0.0/24' +inetExample.ip_address +# => #<IPAddr: IPv4:127.0.0.0/255.255.255.0> +inetExample.save + +inet_2 = InetExample.first +inet_2.ip_address +# => #<IPAddr: IPv4:127.0.0.0/255.255.255.0> +``` + +### Arrays +Array values can be set with Array objects. Any array stored in the +database will be converted to a properly casted array of values on the +way out. + +```ruby +create_table :people do |t| + t.integer :favorite_numbers, :array => true +end + +class Person < ActiveRecord::Base +end + +person = Person.new +person.favorite_numbers = [1,2,3] +person.favorite_numbers +# => [1,2,3] +person.save + +person_2 = Person.first +person_2.favoite_numbers +# => [1,2,3] +person_2.favoite_numbers.first.class +# => Fixnum +``` ## Authors Dan McClain [twitter](http://twitter.com/_danmcclain) [github](http://github.com/danmcclain)