dm-types 0.9.5 → 0.9.6
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/Manifest.txt +5 -0
- data/Rakefile +2 -2
- data/lib/dm-types.rb +4 -1
- data/lib/dm-types/regexp.rb +20 -0
- data/lib/dm-types/slug.rb +37 -0
- data/lib/dm-types/uri.rb +7 -1
- data/lib/dm-types/uuid.rb +43 -0
- data/lib/dm-types/version.rb +1 -1
- data/spec/integration/slug_spec.rb +54 -0
- data/spec/integration/uri_spec.rb +5 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/regexp_spec.rb +23 -0
- metadata +18 -3
data/Manifest.txt
CHANGED
@@ -13,8 +13,11 @@ lib/dm-types/file_path.rb
|
|
13
13
|
lib/dm-types/flag.rb
|
14
14
|
lib/dm-types/ip_address.rb
|
15
15
|
lib/dm-types/json.rb
|
16
|
+
lib/dm-types/slug.rb
|
17
|
+
lib/dm-types/regexp.rb
|
16
18
|
lib/dm-types/serial.rb
|
17
19
|
lib/dm-types/uri.rb
|
20
|
+
lib/dm-types/uuid.rb
|
18
21
|
lib/dm-types/version.rb
|
19
22
|
lib/dm-types/yaml.rb
|
20
23
|
spec/integration/bcrypt_hash_spec.rb
|
@@ -23,6 +26,7 @@ spec/integration/file_path_spec.rb
|
|
23
26
|
spec/integration/flag_spec.rb
|
24
27
|
spec/integration/ip_address_spec.rb
|
25
28
|
spec/integration/json_spec.rb
|
29
|
+
spec/integration/slug_spec.rb
|
26
30
|
spec/integration/uri_spec.rb
|
27
31
|
spec/integration/yaml_spec.rb
|
28
32
|
spec/spec.opts
|
@@ -35,5 +39,6 @@ spec/unit/file_path_spec.rb
|
|
35
39
|
spec/unit/flag_spec.rb
|
36
40
|
spec/unit/ip_address_spec.rb
|
37
41
|
spec/unit/json_spec.rb
|
42
|
+
spec/unit/regexp_spec.rb
|
38
43
|
spec/unit/uri_spec.rb
|
39
44
|
spec/unit/yaml_spec.rb
|
data/Rakefile
CHANGED
@@ -10,7 +10,7 @@ AUTHOR = "Sam Smoot"
|
|
10
10
|
EMAIL = "ssmoot@gmail.com"
|
11
11
|
GEM_NAME = "dm-types"
|
12
12
|
GEM_VERSION = DataMapper::Types::VERSION
|
13
|
-
GEM_DEPENDENCIES = [["dm-core", GEM_VERSION]]
|
13
|
+
GEM_DEPENDENCIES = [["dm-core", GEM_VERSION], "uuidtools"]
|
14
14
|
GEM_CLEAN = ["log", "pkg", "coverage"]
|
15
15
|
GEM_EXTRAS = { :has_rdoc => true, :extra_rdoc_files => %w[ README.txt LICENSE TODO ] }
|
16
16
|
|
@@ -45,7 +45,7 @@ end
|
|
45
45
|
desc 'Run specifications'
|
46
46
|
Spec::Rake::SpecTask.new(:spec) do |t|
|
47
47
|
t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
|
48
|
-
t.spec_files = Pathname.glob(
|
48
|
+
t.spec_files = Pathname.glob((ROOT + 'spec/**/*_spec.rb').to_s)
|
49
49
|
|
50
50
|
begin
|
51
51
|
t.rcov = ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true
|
data/lib/dm-types.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'pathname'
|
3
3
|
|
4
|
-
gem 'dm-core', '=0.9.
|
4
|
+
gem 'dm-core', '=0.9.6'
|
5
5
|
require 'dm-core'
|
6
6
|
|
7
7
|
dir = Pathname(__FILE__).dirname.expand_path / 'dm-types'
|
@@ -14,8 +14,11 @@ require dir / 'flag'
|
|
14
14
|
require dir / 'ip_address'
|
15
15
|
require dir / "json"""
|
16
16
|
require dir / 'uri'
|
17
|
+
require dir / 'uuid'
|
17
18
|
require dir / 'yaml'
|
18
19
|
require dir / 'serial'
|
20
|
+
require dir / 'regexp'
|
21
|
+
require dir / 'slug'
|
19
22
|
|
20
23
|
# this looks a little ugly, but everyone who uses dm-types shouldn't have to have ruby-bcrypt installed
|
21
24
|
module DataMapper
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module DataMapper
|
2
|
+
module Types
|
3
|
+
class Regexp < DataMapper::Type
|
4
|
+
primitive String
|
5
|
+
|
6
|
+
def self.load(value, property)
|
7
|
+
::Regexp.new(value) unless value.nil?
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.dump(value, property)
|
11
|
+
return nil if value.nil?
|
12
|
+
value.source
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.typecast(value, property)
|
16
|
+
value.kind_of?(::Regexp) ? value : load(value, property)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'iconv'
|
2
|
+
|
3
|
+
module DataMapper
|
4
|
+
module Types
|
5
|
+
class Slug < DataMapper::Type
|
6
|
+
primitive String
|
7
|
+
size 65535
|
8
|
+
|
9
|
+
def self.load(value, property)
|
10
|
+
value
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.dump(value, property)
|
14
|
+
if value.nil?
|
15
|
+
nil
|
16
|
+
elsif value.is_a?(String)
|
17
|
+
#Iconv.new('UTF-8//TRANSLIT//IGNORE', 'UTF-8').iconv(value.gsub(/[^\w\s\-\—]/,'').gsub(/[^\w]|[\_]/,' ').split.join('-').downcase).to_s
|
18
|
+
escape(value)
|
19
|
+
else
|
20
|
+
raise ArgumentError.new("+value+ must be nil or a String")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Hugs and kisses to Rick Olsons permalink_fu for the escape method
|
25
|
+
def self.escape(string)
|
26
|
+
result = Iconv.iconv('ascii//translit//IGNORE', 'utf-8', string).to_s
|
27
|
+
result.gsub!(/[^\x00-\x7F]+/, '') # Remove anything non-ASCII entirely (e.g. diacritics).
|
28
|
+
result.gsub!(/[^\w_ \-]+/i, '') # Remove unwanted chars.
|
29
|
+
result.gsub!(/[ \-]+/i, '-') # No more than one of the separator in a row.
|
30
|
+
result.gsub!(/^\-|\-$/i, '') # Remove leading/trailing separator.
|
31
|
+
result.downcase!
|
32
|
+
result
|
33
|
+
end
|
34
|
+
|
35
|
+
end # class Slug
|
36
|
+
end # module Types
|
37
|
+
end # module DataMapper
|
data/lib/dm-types/uri.rb
CHANGED
@@ -16,7 +16,13 @@ module DataMapper
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def self.typecast(value, property)
|
19
|
-
value.kind_of?(Addressable::URI)
|
19
|
+
if value.kind_of?(Addressable::URI)
|
20
|
+
value
|
21
|
+
elsif value.nil?
|
22
|
+
load(nil, property)
|
23
|
+
else
|
24
|
+
load(value.to_s, property)
|
25
|
+
end
|
20
26
|
end
|
21
27
|
end # class URI
|
22
28
|
end # module Types
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'uuidtools'
|
2
|
+
|
3
|
+
module DataMapper
|
4
|
+
module Types
|
5
|
+
# UUID Type
|
6
|
+
# First run at this, because I need it. A few caveats:
|
7
|
+
# * Only works on postgres, using the built-in native uuid type.
|
8
|
+
# To make it work in mysql, you'll have to add a typemap entry to
|
9
|
+
# the mysql_adapter. I think. I don't have mysql handy, so I'm
|
10
|
+
# not going to try. For SQLite, this will have to inherit from the
|
11
|
+
# String primitive
|
12
|
+
# * Won't accept a random default, because of the namespace clash
|
13
|
+
# between this and the UUIDtools gem. Also can't set the default
|
14
|
+
# type to UUID() (postgres-contrib's native generator) and
|
15
|
+
# automigrate, because auto_migrate! tries to make it a string "UUID()"
|
16
|
+
# Feel free to enchance this, and delete these caveats when they're fixed.
|
17
|
+
#
|
18
|
+
# -- Rando Sept 25, 08
|
19
|
+
#
|
20
|
+
class UUID < DataMapper::Type
|
21
|
+
primitive 'UUID'
|
22
|
+
|
23
|
+
def self.load(value, property)
|
24
|
+
return nil if value.nil?
|
25
|
+
::UUID.parse(value)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.dump(value, property)
|
29
|
+
return nil if value.nil?
|
30
|
+
value.to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.typecast(value, property)
|
34
|
+
value.kind_of?(::UUID) ? value : load(value, property)
|
35
|
+
end
|
36
|
+
|
37
|
+
::DataMapper::Property::TYPES << self
|
38
|
+
if defined? DataMapper::Adapters::PostgresAdapter
|
39
|
+
DataMapper::Adapters::PostgresAdapter.type_map.map(self).to('UUID')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/dm-types/version.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'iconv'
|
3
|
+
require Pathname(__FILE__).dirname.parent.expand_path + 'spec_helper'
|
4
|
+
|
5
|
+
describe DataMapper::Types::Slug do
|
6
|
+
|
7
|
+
before(:all) do
|
8
|
+
class SlugTest
|
9
|
+
include DataMapper::Resource
|
10
|
+
|
11
|
+
property :id, Serial
|
12
|
+
property :name, Slug
|
13
|
+
|
14
|
+
end
|
15
|
+
SlugTest.auto_migrate!
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should create the permalink" do
|
19
|
+
repository(:default) do
|
20
|
+
SlugTest.create(:name => 'New DataMapper Type')
|
21
|
+
end
|
22
|
+
|
23
|
+
SlugTest.first.name.should == "new-datamapper-type"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should find by a slug" do
|
27
|
+
repository(:default) do
|
28
|
+
SlugTest.create(:name => "This Should Be a Slug")
|
29
|
+
end
|
30
|
+
slug = "this-should-be-a-slug"
|
31
|
+
|
32
|
+
slugged = SlugTest.first(:name => slug)
|
33
|
+
slugged.should_not be_nil
|
34
|
+
slugged.name.should == slug
|
35
|
+
end
|
36
|
+
|
37
|
+
[
|
38
|
+
["Iñtërnâtiônàlizætiøn", "internationalizaetion" ],
|
39
|
+
["Hello World", "hello-world"],
|
40
|
+
["This is Dan's Blog", "this-is-dans-blog"],
|
41
|
+
["This is My Site, and Blog", "this-is-my-site-and-blog"]
|
42
|
+
].each do |name, slug|
|
43
|
+
|
44
|
+
it "should sluggify #{name}" do
|
45
|
+
repository(:default) do
|
46
|
+
SlugTest.create(:name => name)
|
47
|
+
end
|
48
|
+
SlugTest.first(:name => slug).should_not be_nil
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
|
54
|
+
end
|
@@ -23,4 +23,9 @@ describe DataMapper::Types::URI do
|
|
23
23
|
it 'should immediately typecast supplied values' do
|
24
24
|
URITest.new(:uri => 'http://localhost').uri.should == Addressable::URI.parse('http://localhost')
|
25
25
|
end
|
26
|
+
|
27
|
+
it "should correctly typecast nil values" do
|
28
|
+
URITest.new(:uri => nil).uri.should == nil
|
29
|
+
end
|
30
|
+
|
26
31
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,6 +8,8 @@ ENV["SQLITE3_SPEC_URI"] ||= 'sqlite3::memory:'
|
|
8
8
|
ENV["MYSQL_SPEC_URI"] ||= 'mysql://localhost/dm_core_test'
|
9
9
|
ENV["POSTGRES_SPEC_URI"] ||= 'postgres://postgres@localhost/dm_more_test'
|
10
10
|
|
11
|
+
# DataMapper::Logger.new(STDOUT, :debug)
|
12
|
+
|
11
13
|
def setup_adapter(name, default_uri = nil)
|
12
14
|
begin
|
13
15
|
DataMapper.setup(name, ENV["#{ENV['ADAPTER'].to_s.upcase}_SPEC_URI"] || default_uri)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require Pathname(__FILE__).dirname.parent.expand_path + 'spec_helper'
|
3
|
+
|
4
|
+
describe DataMapper::Types::Regexp, ".load" do
|
5
|
+
it 'should make a Regexp from the value if a string is provided' do
|
6
|
+
Regexp.should_receive(:new).with('regexp_string').once
|
7
|
+
DataMapper::Types::Regexp.load('regexp_string', :property)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should return nil otherwise' do
|
11
|
+
DataMapper::Types::Regexp.load(nil, :property).should == nil
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe DataMapper::Types::Regexp, ".dump" do
|
16
|
+
it 'should dump to a string' do
|
17
|
+
DataMapper::Types::Regexp.dump(/\d+/, :property).should == "\\d+"
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should return nil if the value is nil' do
|
21
|
+
DataMapper::Types::Regexp.dump(nil, :property).should == nil
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-types
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Smoot
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-10-12 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,17 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - "="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.9.
|
23
|
+
version: 0.9.6
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: uuidtools
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
24
34
|
version:
|
25
35
|
- !ruby/object:Gem::Dependency
|
26
36
|
name: hoe
|
@@ -59,8 +69,11 @@ files:
|
|
59
69
|
- lib/dm-types/flag.rb
|
60
70
|
- lib/dm-types/ip_address.rb
|
61
71
|
- lib/dm-types/json.rb
|
72
|
+
- lib/dm-types/slug.rb
|
73
|
+
- lib/dm-types/regexp.rb
|
62
74
|
- lib/dm-types/serial.rb
|
63
75
|
- lib/dm-types/uri.rb
|
76
|
+
- lib/dm-types/uuid.rb
|
64
77
|
- lib/dm-types/version.rb
|
65
78
|
- lib/dm-types/yaml.rb
|
66
79
|
- spec/integration/bcrypt_hash_spec.rb
|
@@ -69,6 +82,7 @@ files:
|
|
69
82
|
- spec/integration/flag_spec.rb
|
70
83
|
- spec/integration/ip_address_spec.rb
|
71
84
|
- spec/integration/json_spec.rb
|
85
|
+
- spec/integration/slug_spec.rb
|
72
86
|
- spec/integration/uri_spec.rb
|
73
87
|
- spec/integration/yaml_spec.rb
|
74
88
|
- spec/spec.opts
|
@@ -81,6 +95,7 @@ files:
|
|
81
95
|
- spec/unit/flag_spec.rb
|
82
96
|
- spec/unit/ip_address_spec.rb
|
83
97
|
- spec/unit/json_spec.rb
|
98
|
+
- spec/unit/regexp_spec.rb
|
84
99
|
- spec/unit/uri_spec.rb
|
85
100
|
- spec/unit/yaml_spec.rb
|
86
101
|
has_rdoc: true
|