mongoid-name 0.0.0
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.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/Gemfile +3 -0
- data/README.md +53 -0
- data/Rakefile +9 -0
- data/lib/mongoid-name.rb +46 -0
- data/mongoid-name.gemspec +16 -0
- data/test/integration_test.rb +32 -0
- data/test/mongoid.yml +6 -0
- data/test/name_test.rb +49 -0
- data/test/test_helper.rb +11 -0
- metadata +113 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7670e12bccea46f99fe54bef51f4185120dcb0bf
|
4
|
+
data.tar.gz: ff0bba90cc5aee9db1c9272f7928562ffa0b5294
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6ae4cd222a3e9f5ec36405c881a0aaaa33dd4c44f961ee8c075d8d806e8e4f6c019d4c9996d71c45269b0487ef09e48bcae59eaa58da3d50237833f35e0252c2
|
7
|
+
data.tar.gz: 445b436df8290522a913a9348e446be83873e3daaf8a85e046251f78d55e2c9e126a9d0010e2bf6cb1aff456e724a61c90a9a3aaa7b05df23fb3c8497bfcf514
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# Mongoid Name
|
2
|
+
|
3
|
+
Custom serialized type for Mongoid schemas. A string, struct, and array.
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
require 'mongoid'
|
7
|
+
require 'mongoid-name'
|
8
|
+
|
9
|
+
class User
|
10
|
+
include Mongoid::Document
|
11
|
+
field :name, type: Mongoid::Name
|
12
|
+
end
|
13
|
+
```
|
14
|
+
|
15
|
+
It's an array to encourage autocomplete search. (Index it tho please!)
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
User.create(name: %w(AJ Ostrow))
|
19
|
+
user = User.find_by(name: /^ostr/i)
|
20
|
+
```
|
21
|
+
|
22
|
+
A string for the API and/or views.
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
user.name
|
26
|
+
# => "AJ Ostrow"
|
27
|
+
```
|
28
|
+
|
29
|
+
And a struct for custom messages.
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
'%s you have 0 stars' % user.name.first
|
33
|
+
# => "AJ you have 0 stars"
|
34
|
+
```
|
35
|
+
|
36
|
+
Got `middle` and `last` as well. The middle name is always optional (default `nil`).
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
user.name = [ 'Gabriel', 'José de la Concordia', 'García Márquez' ]
|
40
|
+
user.name = [ 'Albert', 'Camus' ]
|
41
|
+
```
|
42
|
+
|
43
|
+
### Notes
|
44
|
+
|
45
|
+
Install with bundler.
|
46
|
+
|
47
|
+
```
|
48
|
+
$ gem install mongoid-name
|
49
|
+
```
|
50
|
+
|
51
|
+
Please contribute ideas, code, criticism, etc.
|
52
|
+
|
53
|
+
License: **MIT**
|
data/Rakefile
ADDED
data/lib/mongoid-name.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
module Mongoid
|
2
|
+
class Name < String
|
3
|
+
attr_reader :first, :middle, :last
|
4
|
+
|
5
|
+
# Name.new('AJ', 'Ostrow')
|
6
|
+
# Name.new('Alexander', 'Jacob', 'Ostrow')
|
7
|
+
# Name.new(%w(AJ Ostrow))
|
8
|
+
# Name.new(%w(Alexander Jacob Ostrow))
|
9
|
+
def initialize(*args)
|
10
|
+
args.flatten!
|
11
|
+
@first, @last = args.shift, args.pop
|
12
|
+
@middle = args.join(' ') if args.any?
|
13
|
+
super(to_s)
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_h
|
17
|
+
{ 'first' => first,
|
18
|
+
'middle' => middle,
|
19
|
+
'last' => last }
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_a
|
23
|
+
[ first, middle, last ].compact
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_s
|
27
|
+
to_a.join(' ')
|
28
|
+
end
|
29
|
+
|
30
|
+
# Mongoid conversions
|
31
|
+
|
32
|
+
alias_method :mongoize, :to_a
|
33
|
+
|
34
|
+
def self.demongoize(array)
|
35
|
+
new(*array)
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.mongoize(object)
|
39
|
+
object.respond_to?(:mongoize) ? object.mongoize : object
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.evolve(object)
|
43
|
+
object.respond_to?(:mongoize) ? object.mongoize : object
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'mongoid-name'
|
3
|
+
s.version = '0.0.0'
|
4
|
+
s.license = 'MIT'
|
5
|
+
s.summary = 'Mongoid Name Type'
|
6
|
+
s.author = 'aj0strow'
|
7
|
+
s.email = 'alexander.ostrow@gmail.com'
|
8
|
+
s.homepage = 'https://github.com/aj0strow/mongoid-name'
|
9
|
+
s.files = `git ls-files`.split($/)
|
10
|
+
s.test_files = s.files.grep(/test/)
|
11
|
+
s.require_path = 'lib'
|
12
|
+
s.add_development_dependency 'rake', '~> 10'
|
13
|
+
s.add_development_dependency 'mongoid', '~> 4.0.0.beta2'
|
14
|
+
s.add_development_dependency 'minitest', '~> 5.3'
|
15
|
+
s.add_development_dependency 'database_cleaner', '~> 1'
|
16
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Person
|
4
|
+
include Mongoid::Document
|
5
|
+
|
6
|
+
field :name, type: Mongoid::Name
|
7
|
+
end
|
8
|
+
|
9
|
+
describe Person do
|
10
|
+
before do
|
11
|
+
@person = Person.create(name: %w(AJ Ostrow))
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'persist' do
|
15
|
+
it 'should save and fix' do
|
16
|
+
@person.update(name: %w(Elijah Ostrow))
|
17
|
+
assert_equal 'Elijah Ostrow', @person.reload.name
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'query' do
|
22
|
+
it 'should query whole name' do
|
23
|
+
result = Person.where(name: %w(AJ Ostrow)).first
|
24
|
+
assert_equal @person.name, result.name
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should query first name' do
|
28
|
+
result = Person.where(name: /aj/i).first
|
29
|
+
assert_equal @person.name, result.name
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/test/mongoid.yml
ADDED
data/test/name_test.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe Mongoid::Name do
|
4
|
+
before do
|
5
|
+
@name = Mongoid::Name.new(%w(AJ Ostrow))
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '#initialize' do
|
9
|
+
it 'should be a string' do
|
10
|
+
assert_equal 'AJ Ostrow', @name
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should have first name' do
|
14
|
+
assert_equal 'AJ', @name.first
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should have middle name' do
|
18
|
+
assert_nil nil, @name.middle
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should have last name' do
|
22
|
+
assert_equal 'Ostrow', @name.last
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#mongoize' do
|
27
|
+
it 'should store the name as an array' do
|
28
|
+
assert_equal %w(AJ Ostrow), @name.mongoize
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '::demongoize' do
|
33
|
+
it 'should create a name object' do
|
34
|
+
assert_equal @name, Mongoid::Name.demongoize(%w(AJ Ostrow))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '::mongoize' do
|
39
|
+
it 'should convert to string array' do
|
40
|
+
assert_equal %w(AJ Ostrow), Mongoid::Name.mongoize(@name)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '::evolve' do
|
45
|
+
it 'should convert to string array' do
|
46
|
+
assert_equal %w(AJ Ostrow), Mongoid::Name.evolve(@name)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
ENV['RACK_ENV'] = 'test'
|
2
|
+
|
3
|
+
require 'mongoid'
|
4
|
+
require 'mongoid-name'
|
5
|
+
require 'minitest/autorun'
|
6
|
+
require 'database_cleaner'
|
7
|
+
|
8
|
+
Mongoid.load!(File.expand_path('../mongoid.yml', __FILE__))
|
9
|
+
|
10
|
+
DatabaseCleaner.strategy = :truncation
|
11
|
+
DatabaseCleaner.clean
|
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongoid-name
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- aj0strow
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-05-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '10'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: mongoid
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 4.0.0.beta2
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 4.0.0.beta2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: database_cleaner
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1'
|
69
|
+
description:
|
70
|
+
email: alexander.ostrow@gmail.com
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- ".gitignore"
|
76
|
+
- Gemfile
|
77
|
+
- README.md
|
78
|
+
- Rakefile
|
79
|
+
- lib/mongoid-name.rb
|
80
|
+
- mongoid-name.gemspec
|
81
|
+
- test/integration_test.rb
|
82
|
+
- test/mongoid.yml
|
83
|
+
- test/name_test.rb
|
84
|
+
- test/test_helper.rb
|
85
|
+
homepage: https://github.com/aj0strow/mongoid-name
|
86
|
+
licenses:
|
87
|
+
- MIT
|
88
|
+
metadata: {}
|
89
|
+
post_install_message:
|
90
|
+
rdoc_options: []
|
91
|
+
require_paths:
|
92
|
+
- lib
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
requirements: []
|
104
|
+
rubyforge_project:
|
105
|
+
rubygems_version: 2.2.0
|
106
|
+
signing_key:
|
107
|
+
specification_version: 4
|
108
|
+
summary: Mongoid Name Type
|
109
|
+
test_files:
|
110
|
+
- test/integration_test.rb
|
111
|
+
- test/mongoid.yml
|
112
|
+
- test/name_test.rb
|
113
|
+
- test/test_helper.rb
|