diff --git a/README.md b/README.md index 885c0b3..79646e1 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,26 @@ The default percision is `10` and the default scale is `0`, which is suitable fo --- +### DataMapper::Property::PgIntegerArray + +Example: + +````ruby +class MyModel + include DataMapper::Resource + + property :id, Serial + property :integers, PgIntegerArray +end + +m = MyModel.new(integers: [4, 8, 15, 16, 23, 42]) +m.integers +# => [4, 8, 15, 16, 23, 42] +```` +Use this property when you want to store an array of integers (not numerics, so no type conversions). + +--- + ### DataMapper::Property::PgHStore Example: diff --git a/lib/dm-postgres-types.rb b/lib/dm-postgres-types.rb index 752d479..9c3787c 100644 --- a/lib/dm-postgres-types.rb +++ b/lib/dm-postgres-types.rb @@ -11,6 +11,7 @@ # lib require 'dm-postgres-types/property/pg_array' require 'dm-postgres-types/property/pg_numeric_array' +require 'dm-postgres-types/property/pg_integer_array' require 'dm-postgres-types/property/pg_hstore' require 'dm-postgres-types/property/pg_json' require 'dm-postgres-types/version' @@ -47,6 +48,7 @@ def type_map postgres_types = { Property::PgHStore => { primitive: 'HSTORE' }, Property::PgNumericArray => { primitive: "NUMERIC" }, + Property::PgIntegerArray => { primitive: "INTEGER" }, Property::PgArray => { primitive: "TEXT" }, Property::PgJSON => { primitive: 'JSON' } } diff --git a/lib/dm-postgres-types/property/pg_integer_array.rb b/lib/dm-postgres-types/property/pg_integer_array.rb new file mode 100644 index 0000000..e6e0b46 --- /dev/null +++ b/lib/dm-postgres-types/property/pg_integer_array.rb @@ -0,0 +1,20 @@ +# encoding: utf-8 + +require 'dm-core' +require 'dm-postgres-types/property/pg_array' + +module DataMapper + class Property + class PgIntegerArray < PgArray + def initialize(model, name, options = {}) + super + end + + def load(value) + values = super + values.map! { |val| val.to_i } if values + values + end + end + end +end