dm-pg-types 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.rvmrc +1 -0
- data/Gemfile +21 -0
- data/Gemfile.lock +60 -0
- data/LICENSE +20 -0
- data/README.md +30 -0
- data/Rakefile +30 -0
- data/VERSION +1 -0
- data/dm-pg-types.gemspec +100 -0
- data/lib/dm-pg-types.rb +47 -0
- data/lib/dm-pg-types/decimal_array.rb +29 -0
- data/lib/dm-pg-types/hstore.rb +37 -0
- data/spec/fixtures/person.rb +20 -0
- data/spec/integration/decimal_array_spec.rb +69 -0
- data/spec/integration/full_spec.rb +36 -0
- data/spec/integration/hstore_spec.rb +70 -0
- data/spec/rcov.opts +6 -0
- data/spec/shared/flags_shared_spec.rb +37 -0
- data/spec/shared/identity_function_group.rb +5 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +28 -0
- data/spec/unit/hstore_spec.rb +55 -0
- data/spec/unit/pg_array_spec.rb +43 -0
- data/tasks/spec.rake +38 -0
- data/tasks/yard.rake +9 -0
- data/tasks/yardstick.rake +19 -0
- metadata +282 -0
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use 1.9.3@dm-pg-types
|
data/Gemfile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
source 'http://rubygems.org'
|
4
|
+
|
5
|
+
DM_VERSION = '~> 1.2.0'
|
6
|
+
DO_VERSION = '~> 0.10.6'
|
7
|
+
|
8
|
+
gem 'dm-core', DM_VERSION
|
9
|
+
gem 'dm-migrations', DM_VERSION
|
10
|
+
gem 'dm-types', DM_VERSION
|
11
|
+
gem 'dm-validations', DM_VERSION
|
12
|
+
gem 'data_objects', DO_VERSION
|
13
|
+
gem 'do_postgres', DO_VERSION
|
14
|
+
|
15
|
+
gem 'dm-do-adapter', DM_VERSION
|
16
|
+
gem 'dm-postgres-adapter', DM_VERSION
|
17
|
+
|
18
|
+
gem 'rake', '~> 0.9.2'
|
19
|
+
gem 'rspec', '~> 1.3.2'
|
20
|
+
|
21
|
+
gem 'jeweler', '~> 1.8.4'
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
addressable (2.2.8)
|
5
|
+
bcrypt-ruby (3.0.1)
|
6
|
+
data_objects (0.10.8)
|
7
|
+
addressable (~> 2.1)
|
8
|
+
dm-core (1.2.0)
|
9
|
+
addressable (~> 2.2.6)
|
10
|
+
dm-do-adapter (1.2.0)
|
11
|
+
data_objects (~> 0.10.6)
|
12
|
+
dm-core (~> 1.2.0)
|
13
|
+
dm-migrations (1.2.0)
|
14
|
+
dm-core (~> 1.2.0)
|
15
|
+
dm-postgres-adapter (1.2.0)
|
16
|
+
dm-do-adapter (~> 1.2.0)
|
17
|
+
do_postgres (~> 0.10.6)
|
18
|
+
dm-types (1.2.1)
|
19
|
+
bcrypt-ruby (~> 3.0.0)
|
20
|
+
dm-core (~> 1.2.0)
|
21
|
+
fastercsv (~> 1.5.4)
|
22
|
+
json (~> 1.6.1)
|
23
|
+
multi_json (~> 1.0.3)
|
24
|
+
stringex (~> 1.3.0)
|
25
|
+
uuidtools (~> 2.1.2)
|
26
|
+
dm-validations (1.2.0)
|
27
|
+
dm-core (~> 1.2.0)
|
28
|
+
do_postgres (0.10.8)
|
29
|
+
data_objects (= 0.10.8)
|
30
|
+
fastercsv (1.5.5)
|
31
|
+
git (1.2.5)
|
32
|
+
jeweler (1.8.4)
|
33
|
+
bundler (~> 1.0)
|
34
|
+
git (>= 1.2.5)
|
35
|
+
rake
|
36
|
+
rdoc
|
37
|
+
json (1.6.7)
|
38
|
+
multi_json (1.0.4)
|
39
|
+
rake (0.9.2.2)
|
40
|
+
rdoc (3.12)
|
41
|
+
json (~> 1.4)
|
42
|
+
rspec (1.3.2)
|
43
|
+
stringex (1.3.3)
|
44
|
+
uuidtools (2.1.2)
|
45
|
+
|
46
|
+
PLATFORMS
|
47
|
+
ruby
|
48
|
+
|
49
|
+
DEPENDENCIES
|
50
|
+
data_objects (~> 0.10.6)
|
51
|
+
dm-core (~> 1.2.0)
|
52
|
+
dm-do-adapter (~> 1.2.0)
|
53
|
+
dm-migrations (~> 1.2.0)
|
54
|
+
dm-postgres-adapter (~> 1.2.0)
|
55
|
+
dm-types (~> 1.2.0)
|
56
|
+
dm-validations (~> 1.2.0)
|
57
|
+
do_postgres (~> 0.10.6)
|
58
|
+
jeweler (~> 1.8.4)
|
59
|
+
rake (~> 0.9.2)
|
60
|
+
rspec (~> 1.3.2)
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Sam Smoot, Dan Kubb
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# dm-pg-types
|
2
|
+
|
3
|
+
DataMapper plugin providing support for PostgreSQL's HSTORE and ARRAY types. An example will suffice
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
DataMapper.setup(:default, 'postgres://svs@localhost/dm_pg_types_person')
|
7
|
+
DataMapper.repository(:default).adapter.execute("DROP TABLE IF EXISTS people")
|
8
|
+
DataMapper.repository(:default).adapter.execute("CREATE EXTENSION HSTORE")
|
9
|
+
|
10
|
+
class Person
|
11
|
+
include DataMapper::Resource
|
12
|
+
|
13
|
+
property :id, Serial
|
14
|
+
property :name, String
|
15
|
+
property :info, HStore
|
16
|
+
property :decimals, DecimalArray, :scale => 5, :precision => 10
|
17
|
+
end
|
18
|
+
|
19
|
+
DataMapper.finalize
|
20
|
+
DataMapper.auto_migrate!
|
21
|
+
|
22
|
+
p = Person.new
|
23
|
+
p.info = {:a => "b", :c => "d"}
|
24
|
+
p.decimals = [10.1, 11.2]
|
25
|
+
p.save
|
26
|
+
|
27
|
+
```
|
28
|
+
|
29
|
+
Thanks to https://github.com/softa/activerecord-postgres-hstore for doing most of the heavy lifting
|
30
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
gem 'jeweler', '~> 1.8.4'
|
6
|
+
require 'jeweler'
|
7
|
+
|
8
|
+
Jeweler::Tasks.new do |gem|
|
9
|
+
gem.name = 'dm-pg-types'
|
10
|
+
gem.summary = 'DataMapper plugin providing HSTORE and ARRAY datatype support for postgres'
|
11
|
+
gem.description = gem.summary
|
12
|
+
gem.email = 'svs [a] svs [d] io'
|
13
|
+
gem.homepage = 'http://github.com/svs/%s' % gem.name
|
14
|
+
gem.authors = [ 'svs' ]
|
15
|
+
gem.has_rdoc = 'yard'
|
16
|
+
|
17
|
+
gem.rubyforge_project = 'dm-pg-types'
|
18
|
+
|
19
|
+
gem.add_dependency 'data_mapper', '~> 1.2.0'
|
20
|
+
gem.add_dependency 'dm-postgres-adapter', '~> 1.2.0'
|
21
|
+
|
22
|
+
gem.version = "0.8.1"
|
23
|
+
end
|
24
|
+
|
25
|
+
Jeweler::GemcutterTasks.new
|
26
|
+
|
27
|
+
FileList['tasks/**/*.rake'].each { |task| import task }
|
28
|
+
rescue LoadError
|
29
|
+
puts 'Jeweler (or a dependency) not available. Install it with: gem install jeweler -v 1.6.4'
|
30
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.2.1
|
data/dm-pg-types.gemspec
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "dm-pg-types"
|
8
|
+
s.version = "0.8.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["svs"]
|
12
|
+
s.date = "2012-09-08"
|
13
|
+
s.description = "DataMapper plugin providing HSTORE and ARRAY datatype support for postgres"
|
14
|
+
s.email = "svs [a] svs [d] io"
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.md"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".rvmrc",
|
21
|
+
"Gemfile",
|
22
|
+
"Gemfile.lock",
|
23
|
+
"LICENSE",
|
24
|
+
"README.md",
|
25
|
+
"Rakefile",
|
26
|
+
"VERSION",
|
27
|
+
"dm-pg-types.gemspec",
|
28
|
+
"lib/dm-pg-types.rb",
|
29
|
+
"lib/dm-pg-types/decimal_array.rb",
|
30
|
+
"lib/dm-pg-types/hstore.rb",
|
31
|
+
"spec/fixtures/person.rb",
|
32
|
+
"spec/integration/decimal_array_spec.rb",
|
33
|
+
"spec/integration/full_spec.rb",
|
34
|
+
"spec/integration/hstore_spec.rb",
|
35
|
+
"spec/rcov.opts",
|
36
|
+
"spec/shared/flags_shared_spec.rb",
|
37
|
+
"spec/shared/identity_function_group.rb",
|
38
|
+
"spec/spec.opts",
|
39
|
+
"spec/spec_helper.rb",
|
40
|
+
"spec/unit/hstore_spec.rb",
|
41
|
+
"spec/unit/pg_array_spec.rb",
|
42
|
+
"tasks/spec.rake",
|
43
|
+
"tasks/yard.rake",
|
44
|
+
"tasks/yardstick.rake"
|
45
|
+
]
|
46
|
+
s.homepage = "http://github.com/svs/dm-pg-types"
|
47
|
+
s.require_paths = ["lib"]
|
48
|
+
s.rubyforge_project = "dm-pg-types"
|
49
|
+
s.rubygems_version = "1.8.23"
|
50
|
+
s.summary = "DataMapper plugin providing HSTORE and ARRAY datatype support for postgres"
|
51
|
+
|
52
|
+
if s.respond_to? :specification_version then
|
53
|
+
s.specification_version = 3
|
54
|
+
|
55
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
56
|
+
s.add_runtime_dependency(%q<dm-core>, ["~> 1.2.0"])
|
57
|
+
s.add_runtime_dependency(%q<dm-migrations>, ["~> 1.2.0"])
|
58
|
+
s.add_runtime_dependency(%q<dm-types>, ["~> 1.2.0"])
|
59
|
+
s.add_runtime_dependency(%q<dm-validations>, ["~> 1.2.0"])
|
60
|
+
s.add_runtime_dependency(%q<data_objects>, ["~> 0.10.6"])
|
61
|
+
s.add_runtime_dependency(%q<do_postgres>, ["~> 0.10.6"])
|
62
|
+
s.add_runtime_dependency(%q<dm-do-adapter>, ["~> 1.2.0"])
|
63
|
+
s.add_runtime_dependency(%q<dm-postgres-adapter>, ["~> 1.2.0"])
|
64
|
+
s.add_runtime_dependency(%q<rake>, ["~> 0.9.2"])
|
65
|
+
s.add_runtime_dependency(%q<rspec>, ["~> 1.3.2"])
|
66
|
+
s.add_runtime_dependency(%q<jeweler>, ["~> 1.8.4"])
|
67
|
+
s.add_runtime_dependency(%q<data_mapper>, ["~> 1.2.0"])
|
68
|
+
s.add_runtime_dependency(%q<dm-postgres-adapter>, ["~> 1.2.0"])
|
69
|
+
else
|
70
|
+
s.add_dependency(%q<dm-core>, ["~> 1.2.0"])
|
71
|
+
s.add_dependency(%q<dm-migrations>, ["~> 1.2.0"])
|
72
|
+
s.add_dependency(%q<dm-types>, ["~> 1.2.0"])
|
73
|
+
s.add_dependency(%q<dm-validations>, ["~> 1.2.0"])
|
74
|
+
s.add_dependency(%q<data_objects>, ["~> 0.10.6"])
|
75
|
+
s.add_dependency(%q<do_postgres>, ["~> 0.10.6"])
|
76
|
+
s.add_dependency(%q<dm-do-adapter>, ["~> 1.2.0"])
|
77
|
+
s.add_dependency(%q<dm-postgres-adapter>, ["~> 1.2.0"])
|
78
|
+
s.add_dependency(%q<rake>, ["~> 0.9.2"])
|
79
|
+
s.add_dependency(%q<rspec>, ["~> 1.3.2"])
|
80
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
81
|
+
s.add_dependency(%q<data_mapper>, ["~> 1.2.0"])
|
82
|
+
s.add_dependency(%q<dm-postgres-adapter>, ["~> 1.2.0"])
|
83
|
+
end
|
84
|
+
else
|
85
|
+
s.add_dependency(%q<dm-core>, ["~> 1.2.0"])
|
86
|
+
s.add_dependency(%q<dm-migrations>, ["~> 1.2.0"])
|
87
|
+
s.add_dependency(%q<dm-types>, ["~> 1.2.0"])
|
88
|
+
s.add_dependency(%q<dm-validations>, ["~> 1.2.0"])
|
89
|
+
s.add_dependency(%q<data_objects>, ["~> 0.10.6"])
|
90
|
+
s.add_dependency(%q<do_postgres>, ["~> 0.10.6"])
|
91
|
+
s.add_dependency(%q<dm-do-adapter>, ["~> 1.2.0"])
|
92
|
+
s.add_dependency(%q<dm-postgres-adapter>, ["~> 1.2.0"])
|
93
|
+
s.add_dependency(%q<rake>, ["~> 0.9.2"])
|
94
|
+
s.add_dependency(%q<rspec>, ["~> 1.3.2"])
|
95
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
96
|
+
s.add_dependency(%q<data_mapper>, ["~> 1.2.0"])
|
97
|
+
s.add_dependency(%q<dm-postgres-adapter>, ["~> 1.2.0"])
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
data/lib/dm-pg-types.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'dm-core'
|
2
|
+
require 'dm-migrations'
|
3
|
+
require 'dm-types'
|
4
|
+
require 'dm-postgres-adapter'
|
5
|
+
|
6
|
+
module DataMapper
|
7
|
+
class Property
|
8
|
+
autoload :HStore, 'dm-pg-types/hstore'
|
9
|
+
autoload :DecimalArray, 'dm-pg-types/decimal_array'
|
10
|
+
end
|
11
|
+
|
12
|
+
module Migrations
|
13
|
+
module PostgresAdapter
|
14
|
+
def property_schema_hash(property)
|
15
|
+
schema = super
|
16
|
+
|
17
|
+
if property.kind_of?(Property::DecimalArray)
|
18
|
+
schema[:primitive] = "#{schema[:primitive]}(#{property.precision},#{property.scale})[]"
|
19
|
+
schema[:precision] = schema[:scale] = nil
|
20
|
+
end
|
21
|
+
schema
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
module PgTypes
|
27
|
+
def self.included(base)
|
28
|
+
base.extend ClassMethods
|
29
|
+
end
|
30
|
+
|
31
|
+
module ClassMethods
|
32
|
+
# Types for PostgreSQL databases.
|
33
|
+
#
|
34
|
+
# @return [Hash] types for PostgreSQL databases.
|
35
|
+
#
|
36
|
+
# @api private
|
37
|
+
def type_map
|
38
|
+
super.merge(
|
39
|
+
Property::HStore => {:primitive => 'HSTORE'},
|
40
|
+
Property::DecimalArray => {:primitive => "NUMERIC"}
|
41
|
+
).freeze
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
DataMapper::Adapters::PostgresAdapter.send(:include,DataMapper::PgTypes)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'dm-core'
|
2
|
+
|
3
|
+
module DataMapper
|
4
|
+
class Property
|
5
|
+
class DecimalArray < Object
|
6
|
+
accept_options :precision, :scale, :min, :max
|
7
|
+
attr_reader :precision, :scale, :min, :max
|
8
|
+
|
9
|
+
def initialize(model, name, options = {})
|
10
|
+
super
|
11
|
+
@precision = @options[:precision] || 10
|
12
|
+
@scale = @options[:scale] || 0
|
13
|
+
|
14
|
+
unless @precision > 0
|
15
|
+
raise ArgumentError, "precision must be greater than 0, but was #{@precision.inspect}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def load(value)
|
21
|
+
value.gsub(/[{}]/,'').split(",").map(&:to_f) if value
|
22
|
+
end
|
23
|
+
|
24
|
+
def dump(value)
|
25
|
+
"{#{value.join(",")}}" if value
|
26
|
+
end
|
27
|
+
end # class DecimalArray
|
28
|
+
end # class Property
|
29
|
+
end # module DataMapper
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'dm-core'
|
2
|
+
|
3
|
+
module DataMapper
|
4
|
+
class Property
|
5
|
+
class HStore < Object
|
6
|
+
|
7
|
+
def load(value)
|
8
|
+
return nil unless value
|
9
|
+
rv = value.split(",").map{|i| i.split("=>").map{|x| x.gsub('"','').strip}}
|
10
|
+
Hash[*(rv.map{|k,v| [k, v == "NULL" ? nil : v]}.flatten)]
|
11
|
+
end
|
12
|
+
|
13
|
+
def dump(value)
|
14
|
+
return "" unless value
|
15
|
+
|
16
|
+
# following code lifted from https://github.com/softa/activerecord-postgres-hstore/blob/master/lib/activerecord-postgres-hstore/hash.rb
|
17
|
+
|
18
|
+
|
19
|
+
value.map { |idx, val|
|
20
|
+
iv = [idx,val].map { |_|
|
21
|
+
e = _.to_s.gsub(/"/, '\"')
|
22
|
+
if _.nil?
|
23
|
+
'NULL'
|
24
|
+
elsif e =~ /[,\s=>]/ || e.empty?
|
25
|
+
'"%s"' % e
|
26
|
+
else
|
27
|
+
e
|
28
|
+
end
|
29
|
+
}
|
30
|
+
|
31
|
+
"%s => %s" % iv
|
32
|
+
} * ","
|
33
|
+
end
|
34
|
+
|
35
|
+
end # class HStore
|
36
|
+
end # class Property
|
37
|
+
end # module DataMapper
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module DataMapper
|
2
|
+
module TypesFixtures
|
3
|
+
class Person
|
4
|
+
#
|
5
|
+
# Behaviors
|
6
|
+
#
|
7
|
+
|
8
|
+
include DataMapper::Resource
|
9
|
+
|
10
|
+
#
|
11
|
+
# Properties
|
12
|
+
#
|
13
|
+
|
14
|
+
property :id, Serial
|
15
|
+
property :name, String
|
16
|
+
property :other_information, HStore
|
17
|
+
property :numbers, DecimalArray
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'debugger'
|
4
|
+
try_spec do
|
5
|
+
|
6
|
+
require './spec/fixtures/person'
|
7
|
+
|
8
|
+
describe DataMapper::TypesFixtures::Person do
|
9
|
+
supported_by :all do
|
10
|
+
before :all do
|
11
|
+
@resource = DataMapper::TypesFixtures::Person.new(:name => '')
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'with no other information' do
|
15
|
+
before :all do
|
16
|
+
@resource.numbers = nil
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'when dumped and loaded again' do
|
20
|
+
before :all do
|
21
|
+
@resource.save.should be(true)
|
22
|
+
@resource.reload
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'has no numbers' do
|
26
|
+
@resource.numbers.should == nil
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe 'with no numbers information' do
|
32
|
+
before :all do
|
33
|
+
@resource.numbers = []
|
34
|
+
end
|
35
|
+
|
36
|
+
describe 'when dumped and loaded again' do
|
37
|
+
before :all do
|
38
|
+
debugger
|
39
|
+
@resource.save.should be(true)
|
40
|
+
@resource.reload
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'has empty numbers list' do
|
44
|
+
@resource.numbers.should == []
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'with a few items on the numbers list' do
|
50
|
+
before :all do
|
51
|
+
@input = [10.1,11.2,12.3]
|
52
|
+
@resource.numbers = @input
|
53
|
+
end
|
54
|
+
|
55
|
+
describe 'when dumped and loaded again' do
|
56
|
+
before :all do
|
57
|
+
@resource.save.should be(true)
|
58
|
+
@resource.reload
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'includes "fire" in numbers' do
|
62
|
+
@resource.numbers.should == [10.1,11.2,12.3]
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "dm-pg-types" do
|
4
|
+
before :all do
|
5
|
+
# Create the table manually before running this spec.
|
6
|
+
DataMapper.setup(:default, 'postgres://svs@localhost/dm_pg_types_person')
|
7
|
+
DataMapper.repository(:default).adapter.execute("DROP TABLE IF EXISTS people")
|
8
|
+
DataMapper.repository(:default).adapter.execute("CREATE EXTENSION HSTORE") rescue nil
|
9
|
+
class Person
|
10
|
+
include DataMapper::Resource
|
11
|
+
|
12
|
+
property :id, Serial
|
13
|
+
property :name, String
|
14
|
+
property :info, HStore
|
15
|
+
property :decimals, DecimalArray, :scale => 5, :precision => 10
|
16
|
+
end
|
17
|
+
|
18
|
+
DataMapper.finalize
|
19
|
+
DataMapper.auto_migrate!
|
20
|
+
|
21
|
+
p = Person.new
|
22
|
+
p.info = {:a => "b", :c => "d"}
|
23
|
+
p.decimals = [10.1, 11.2]
|
24
|
+
p.save
|
25
|
+
@p = Person.last
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should provide a person with info" do
|
29
|
+
@p.info.should == {"a" => "b", "c" => "d"}
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should provide a person with decimals" do
|
33
|
+
@p.decimals.should == [10.1,11.2]
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
try_spec do
|
4
|
+
|
5
|
+
require './spec/fixtures/person'
|
6
|
+
|
7
|
+
describe DataMapper::TypesFixtures::Person do
|
8
|
+
supported_by :all do
|
9
|
+
before :all do
|
10
|
+
@resource = DataMapper::TypesFixtures::Person.new(:name => '')
|
11
|
+
end
|
12
|
+
|
13
|
+
describe 'with no other information' do
|
14
|
+
before :all do
|
15
|
+
@resource.other_information = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'when dumped and loaded again' do
|
19
|
+
before :all do
|
20
|
+
@resource.save.should be(true)
|
21
|
+
@resource.reload
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'has no other_information' do
|
25
|
+
@resource.other_information.should == {}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'with no other_information information' do
|
31
|
+
before :all do
|
32
|
+
@resource.other_information = {}
|
33
|
+
end
|
34
|
+
|
35
|
+
describe 'when dumped and loaded again' do
|
36
|
+
before :all do
|
37
|
+
@resource.save.should be(true)
|
38
|
+
@resource.reload
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'has empty other_information list' do
|
42
|
+
@resource.other_information.should == {}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe 'with a few items on the other_information list' do
|
48
|
+
before :all do
|
49
|
+
@input = {:a => 'b', :c => 'd'}
|
50
|
+
@resource.other_information = @input
|
51
|
+
end
|
52
|
+
|
53
|
+
describe 'when dumped and loaded again' do
|
54
|
+
before :all do
|
55
|
+
@resource.save.should be(true)
|
56
|
+
@resource.reload
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'includes "fire" in other_information' do
|
60
|
+
@resource.other_information.keys.should include("a")
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'has blank entries removed' do
|
64
|
+
@resource.other_information.any? { |i| DataMapper::Ext.blank?(i) }.should be(false)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/spec/rcov.opts
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
share_examples_for "A property with flags" do
|
2
|
+
before :all do
|
3
|
+
%w[ @property_klass ].each do |ivar|
|
4
|
+
raise "+#{ivar}+ should be defined in before block" unless instance_variable_defined?(ivar)
|
5
|
+
end
|
6
|
+
|
7
|
+
@flags = [ :one, :two, :three ]
|
8
|
+
|
9
|
+
class ::User
|
10
|
+
include DataMapper::Resource
|
11
|
+
end
|
12
|
+
|
13
|
+
@property = User.property :item, @property_klass[@flags], :key => true
|
14
|
+
end
|
15
|
+
|
16
|
+
describe ".generated_classes" do
|
17
|
+
it "should cache the generated class" do
|
18
|
+
@property_klass.generated_classes[@flags].should_not be_nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should include :flags in accepted_options" do
|
23
|
+
@property_klass.accepted_options.should include(:flags)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should respond to :generated_classes" do
|
27
|
+
@property_klass.should respond_to(:generated_classes)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should respond to :flag_map" do
|
31
|
+
@property.should respond_to(:flag_map)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should be custom" do
|
35
|
+
@property.custom?.should be(true)
|
36
|
+
end
|
37
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'dm-core/spec/setup'
|
2
|
+
require 'dm-core/spec/lib/adapter_helpers'
|
3
|
+
|
4
|
+
require 'dm-types'
|
5
|
+
require 'dm-migrations'
|
6
|
+
require 'dm-validations'
|
7
|
+
require 'dm-pg-types'
|
8
|
+
|
9
|
+
Dir["#{Pathname(__FILE__).dirname.expand_path}/shared/*.rb"].each { |file| require file }
|
10
|
+
|
11
|
+
DataMapper::Spec.setup
|
12
|
+
|
13
|
+
Spec::Runner.configure do |config|
|
14
|
+
config.extend(DataMapper::Spec::Adapters::Helpers)
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
def try_spec
|
19
|
+
begin
|
20
|
+
yield
|
21
|
+
rescue LoadError => error
|
22
|
+
raise error unless lib = error.message.match(/\Ano such file to load -- (.+)\z/)[1]
|
23
|
+
|
24
|
+
gem_location = DEPENDENCIES[lib] || raise("Unknown lib #{lib}")
|
25
|
+
|
26
|
+
warn "[WARNING] Skipping specs using #{lib}, please do: gem install #{gem_location}"
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
try_spec do
|
4
|
+
describe DataMapper::Property::HStore do
|
5
|
+
supported_by :all do
|
6
|
+
before :all do
|
7
|
+
class User
|
8
|
+
include DataMapper::Resource
|
9
|
+
property :id, Serial
|
10
|
+
property :doc, HStore
|
11
|
+
end
|
12
|
+
|
13
|
+
@property = User.properties[:doc]
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '.load' do
|
17
|
+
describe "argument is a string that is an hstore document" do
|
18
|
+
before :all do
|
19
|
+
@input = '"branch_id"=>"3", "center_id"=>"5", "client_id"=>"4"'
|
20
|
+
@result = @property.load(@input)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "parses the input into a hash" do
|
24
|
+
@result.should == {"branch_id" => "3", "center_id" => "5", "client_id" => "4"}
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should read NULLs properly" do
|
28
|
+
@property.load('"a" => "3", "b" => "NULL"').should == {"a" => "3", "b" => nil}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe ".dump" do
|
34
|
+
before :all do
|
35
|
+
@input = {:a => 1, :b => "def"}
|
36
|
+
@result = @property.dump(@input)
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "when argument is a Hash" do
|
40
|
+
it "should result in a Hashified string" do
|
41
|
+
@result.should == 'a => 1,b => def'
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should write a nil as NULL" do
|
45
|
+
@property.dump({:a => 1, :b => nil}).should == 'a => 1,b => NULL'
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
try_spec do
|
4
|
+
describe DataMapper::Property::DecimalArray do
|
5
|
+
supported_by :all do
|
6
|
+
before :all do
|
7
|
+
class User
|
8
|
+
include DataMapper::Resource
|
9
|
+
property :id, Serial
|
10
|
+
property :things, DecimalArray, :precision => 8, :scale => 6
|
11
|
+
end
|
12
|
+
|
13
|
+
@property = User.properties[:things]
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '.load' do
|
17
|
+
describe "argument is a string that is a decimal array" do
|
18
|
+
before :all do
|
19
|
+
@input = '{10.1,2.3,4,5,6}'
|
20
|
+
@result = @property.load(@input)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "parses the input into an array" do
|
24
|
+
@result.should == [10.1,2.3,4,5,6]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe ".dump" do
|
30
|
+
before :all do
|
31
|
+
@input = [1,2,3.4,5,6]
|
32
|
+
@result = @property.dump(@input)
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "when argument is a Hash" do
|
36
|
+
it "should result in a postgres array string" do
|
37
|
+
@result.should == '{1,2,3.4,5,6}'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/tasks/spec.rake
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
spec_defaults = lambda do |spec|
|
2
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
3
|
+
spec.libs << 'lib' << 'spec'
|
4
|
+
spec.spec_opts << '--options' << 'spec/spec.opts'
|
5
|
+
end
|
6
|
+
|
7
|
+
begin
|
8
|
+
require 'spec/rake/spectask'
|
9
|
+
|
10
|
+
Spec::Rake::SpecTask.new(:spec, &spec_defaults)
|
11
|
+
rescue LoadError
|
12
|
+
task :spec do
|
13
|
+
abort 'rspec is not available. In order to run spec, you must: gem install rspec'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
begin
|
18
|
+
require 'rcov'
|
19
|
+
require 'spec/rake/verify_rcov'
|
20
|
+
|
21
|
+
Spec::Rake::SpecTask.new(:rcov) do |rcov|
|
22
|
+
spec_defaults.call(rcov)
|
23
|
+
rcov.rcov = true
|
24
|
+
rcov.rcov_opts = File.read('spec/rcov.opts').split(/\s+/)
|
25
|
+
end
|
26
|
+
|
27
|
+
RCov::VerifyTask.new(:verify_rcov => :rcov) do |rcov|
|
28
|
+
rcov.threshold = 100
|
29
|
+
end
|
30
|
+
rescue LoadError
|
31
|
+
%w[ rcov verify_rcov ].each do |name|
|
32
|
+
task name do
|
33
|
+
abort "rcov is not available. In order to run #{name}, you must: gem install rcov"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
task :default => :spec
|
data/tasks/yard.rake
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
begin
|
2
|
+
require 'pathname'
|
3
|
+
require 'yardstick/rake/measurement'
|
4
|
+
require 'yardstick/rake/verify'
|
5
|
+
|
6
|
+
# yardstick_measure task
|
7
|
+
Yardstick::Rake::Measurement.new
|
8
|
+
|
9
|
+
# verify_measurements task
|
10
|
+
Yardstick::Rake::Verify.new do |verify|
|
11
|
+
verify.threshold = 100
|
12
|
+
end
|
13
|
+
rescue LoadError
|
14
|
+
%w[ yardstick_measure verify_measurements ].each do |name|
|
15
|
+
task name.to_s do
|
16
|
+
abort "Yardstick is not available. In order to run #{name}, you must: gem install yardstick"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,282 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dm-pg-types
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- svs
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-09-08 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: dm-core
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.2.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.2.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: dm-migrations
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.2.0
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.2.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: dm-types
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.2.0
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.2.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: dm-validations
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.2.0
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.2.0
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: data_objects
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 0.10.6
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 0.10.6
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: do_postgres
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 0.10.6
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.10.6
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: dm-do-adapter
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 1.2.0
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 1.2.0
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: dm-postgres-adapter
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ~>
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: 1.2.0
|
134
|
+
type: :runtime
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 1.2.0
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: rake
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ~>
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 0.9.2
|
150
|
+
type: :runtime
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 0.9.2
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: rspec
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
none: false
|
162
|
+
requirements:
|
163
|
+
- - ~>
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: 1.3.2
|
166
|
+
type: :runtime
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ~>
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 1.3.2
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: jeweler
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ~>
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: 1.8.4
|
182
|
+
type: :runtime
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ~>
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: 1.8.4
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: data_mapper
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ~>
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: 1.2.0
|
198
|
+
type: :runtime
|
199
|
+
prerelease: false
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ~>
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: 1.2.0
|
206
|
+
- !ruby/object:Gem::Dependency
|
207
|
+
name: dm-postgres-adapter
|
208
|
+
requirement: !ruby/object:Gem::Requirement
|
209
|
+
none: false
|
210
|
+
requirements:
|
211
|
+
- - ~>
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: 1.2.0
|
214
|
+
type: :runtime
|
215
|
+
prerelease: false
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
218
|
+
requirements:
|
219
|
+
- - ~>
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: 1.2.0
|
222
|
+
description: DataMapper plugin providing HSTORE and ARRAY datatype support for postgres
|
223
|
+
email: svs [a] svs [d] io
|
224
|
+
executables: []
|
225
|
+
extensions: []
|
226
|
+
extra_rdoc_files:
|
227
|
+
- LICENSE
|
228
|
+
- README.md
|
229
|
+
files:
|
230
|
+
- .rvmrc
|
231
|
+
- Gemfile
|
232
|
+
- Gemfile.lock
|
233
|
+
- LICENSE
|
234
|
+
- README.md
|
235
|
+
- Rakefile
|
236
|
+
- VERSION
|
237
|
+
- dm-pg-types.gemspec
|
238
|
+
- lib/dm-pg-types.rb
|
239
|
+
- lib/dm-pg-types/decimal_array.rb
|
240
|
+
- lib/dm-pg-types/hstore.rb
|
241
|
+
- spec/fixtures/person.rb
|
242
|
+
- spec/integration/decimal_array_spec.rb
|
243
|
+
- spec/integration/full_spec.rb
|
244
|
+
- spec/integration/hstore_spec.rb
|
245
|
+
- spec/rcov.opts
|
246
|
+
- spec/shared/flags_shared_spec.rb
|
247
|
+
- spec/shared/identity_function_group.rb
|
248
|
+
- spec/spec.opts
|
249
|
+
- spec/spec_helper.rb
|
250
|
+
- spec/unit/hstore_spec.rb
|
251
|
+
- spec/unit/pg_array_spec.rb
|
252
|
+
- tasks/spec.rake
|
253
|
+
- tasks/yard.rake
|
254
|
+
- tasks/yardstick.rake
|
255
|
+
homepage: http://github.com/svs/dm-pg-types
|
256
|
+
licenses: []
|
257
|
+
post_install_message:
|
258
|
+
rdoc_options: []
|
259
|
+
require_paths:
|
260
|
+
- lib
|
261
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
262
|
+
none: false
|
263
|
+
requirements:
|
264
|
+
- - ! '>='
|
265
|
+
- !ruby/object:Gem::Version
|
266
|
+
version: '0'
|
267
|
+
segments:
|
268
|
+
- 0
|
269
|
+
hash: -3719502644642354910
|
270
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
271
|
+
none: false
|
272
|
+
requirements:
|
273
|
+
- - ! '>='
|
274
|
+
- !ruby/object:Gem::Version
|
275
|
+
version: '0'
|
276
|
+
requirements: []
|
277
|
+
rubyforge_project: dm-pg-types
|
278
|
+
rubygems_version: 1.8.23
|
279
|
+
signing_key:
|
280
|
+
specification_version: 3
|
281
|
+
summary: DataMapper plugin providing HSTORE and ARRAY datatype support for postgres
|
282
|
+
test_files: []
|