mongoid-minimal_tags 0.1.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 +10 -0
- data/.travis.yml +11 -0
- data/Gemfile +3 -0
- data/README.md +58 -0
- data/Rakefile +13 -0
- data/lib/mongoid/minimal_tags/minimal_tags.rb +49 -0
- data/lib/mongoid/minimal_tags/simple_formatter.rb +17 -0
- data/lib/mongoid/minimal_tags/version.rb +5 -0
- data/lib/mongoid/minimal_tags.rb +25 -0
- data/mongoid-minimal_tags.gemspec +29 -0
- metadata +158 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 65a1888231645e34885a1f4082681d4c1cd96202
|
4
|
+
data.tar.gz: 834fb1a17e0de8257cebb2abbd26e13e7c191e74
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f2192f50bbbd799cc2b626a75d10527ffa9ec6d6838a2debdf171eb64ca2f2ac8723b5ba44142ba1321d7d347a78a6c22f311acfe239d0a00603f7c3723fcb2a
|
7
|
+
data.tar.gz: e8807d5f6620ba81afef2e6af5eb313f73ef757cad2f01108082dc46269f035e9d1a0bb78799945421f52d88f000efee35a5888ec62a2a225e44a2d1b2a5b34a
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
[](https://travis-ci.org/harrisbaird/mongoid-minimal_tags)
|
2
|
+
[](https://codeclimate.com/github/harrisbaird/mongoid-minimal_tags)
|
3
|
+
[](https://codeclimate.com/github/harrisbaird/mongoid-minimal_tags/coverage)
|
4
|
+
[](http://inch-ci.org/github/harrisbaird/mongoid-minimal_tags)
|
5
|
+
|
6
|
+
---
|
7
|
+
|
8
|
+
# Mongoid::MinimalTags
|
9
|
+
|
10
|
+
Mongoid::MinimalTags is a tiny gem for adding tagging support to [Mongoid](https://github.com/mongodb/mongoid) documents.
|
11
|
+
|
12
|
+
Multiple tag fields can be used, each with their own way of formatting.
|
13
|
+
|
14
|
+
## Installation
|
15
|
+
|
16
|
+
Add to your Gemfile:
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
gem 'mongoid-minimal_tags'
|
20
|
+
```
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
Start by including the `Mongoid::MinimalTags` module and define your tag fields
|
25
|
+
with the `tag_field` method.
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
class Document
|
29
|
+
include Mongoid::Document
|
30
|
+
include Mongoid::MinimalTags
|
31
|
+
|
32
|
+
tag_field :tags
|
33
|
+
tag_field :upcase_tags, formatter: UpcaseFormatter.new
|
34
|
+
end
|
35
|
+
```
|
36
|
+
|
37
|
+
You can define multiple tag fields, just ensure they have unique names.
|
38
|
+
Formatters can be defined on each tag field if needed, otherwise the default be used.
|
39
|
+
|
40
|
+
## Searching
|
41
|
+
The following scopes are also added for each tag field:
|
42
|
+
`.any_*`, `.all_*`, `.without_any_*`
|
43
|
+
All scopes return a `Mongoid::Criteria` and can be chained.
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
Document.any_tags(['a', 'b', 'c'])
|
47
|
+
Document.all_tags(['a', 'b', 'c'])
|
48
|
+
Document.without_any_tags(['a', 'b', 'c'])
|
49
|
+
```
|
50
|
+
|
51
|
+
## Contributing
|
52
|
+
|
53
|
+
1. Fork it
|
54
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
55
|
+
3. Write your tests
|
56
|
+
4. Commit your changes (`git commit -am 'Add some feature'`)
|
57
|
+
5. Push to the branch (`git push origin my-new-feature`)
|
58
|
+
6. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
|
+
|
4
|
+
require 'yard'
|
5
|
+
YARD::Rake::YardocTask.new(:doc)
|
6
|
+
|
7
|
+
Rake::TestTask.new(:test) do |t|
|
8
|
+
t.libs << 'test'
|
9
|
+
t.libs << 'lib'
|
10
|
+
t.test_files = FileList['test/**/*_test.rb']
|
11
|
+
end
|
12
|
+
|
13
|
+
task default: :test
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'mongoid'
|
2
|
+
|
3
|
+
module Mongoid
|
4
|
+
module MinimalTags
|
5
|
+
def self.included(base)
|
6
|
+
base.send :extend, ClassMethods
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
##
|
11
|
+
# Creates a tag field, index, search methods and a callback for tag
|
12
|
+
# normalization on save.
|
13
|
+
#
|
14
|
+
# @example
|
15
|
+
# class Document
|
16
|
+
# include Mongoid::Document
|
17
|
+
# include Mongoid::MinimalTags
|
18
|
+
#
|
19
|
+
# tag_field :tags
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# doc = Document.create(tags: ['hello world', 'this is a test']).tags
|
23
|
+
# # => ['hello-world', 'this-is-a-test']
|
24
|
+
#
|
25
|
+
# doc == Document.any_tags(['HELLO WORLD']).first
|
26
|
+
# # => true
|
27
|
+
#
|
28
|
+
# @param [String] field_name The field name to use in mongo and searching methods
|
29
|
+
# @param [Object] formatter The formatter to use, overriding the default
|
30
|
+
def tag_field(field_name, formatter: MinimalTags.default_formatter)
|
31
|
+
field field_name, type: Array, default: []
|
32
|
+
index field_name => 1
|
33
|
+
|
34
|
+
# Create the scopes for searching tags
|
35
|
+
MinimalTags.search_types.each do |type, prefix|
|
36
|
+
scope "#{prefix}_#{field_name}", lambda { |tags|
|
37
|
+
criteria.send(type, field_name => formatter.normalize(tags))
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
# Normalize tags on save
|
42
|
+
set_callback(:save, :before) do
|
43
|
+
tags = read_attribute(field_name)
|
44
|
+
write_attribute(field_name, formatter.normalize(tags))
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module MinimalTags
|
3
|
+
# A very simple tag formatter using ActiveSupport's parameterize.
|
4
|
+
# You should create your own rather than using this.
|
5
|
+
class SimpleFormatter
|
6
|
+
##
|
7
|
+
# Returns an array of normalized tags
|
8
|
+
#
|
9
|
+
# @param [Array] tags Tags to normalize
|
10
|
+
#
|
11
|
+
# @return [Array] Unique, parameterized tags
|
12
|
+
def normalize(tags)
|
13
|
+
tags.map(&:parameterize).uniq
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'mongoid/minimal_tags/minimal_tags'
|
2
|
+
require 'mongoid/minimal_tags/simple_formatter'
|
3
|
+
require 'mongoid/minimal_tags/version'
|
4
|
+
|
5
|
+
module Mongoid
|
6
|
+
module MinimalTags
|
7
|
+
class << self
|
8
|
+
attr_writer :default_formatter
|
9
|
+
|
10
|
+
DEFAULT_SEARCH_TYPES = {
|
11
|
+
all: 'all',
|
12
|
+
in: 'any',
|
13
|
+
nin: 'without_any'
|
14
|
+
}
|
15
|
+
|
16
|
+
def default_formatter
|
17
|
+
@default_formatter ||= SimpleFormatter.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def search_types
|
21
|
+
@search_types ||= DEFAULT_SEARCH_TYPES
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'mongoid/minimal_tags/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'mongoid-minimal_tags'
|
8
|
+
spec.version = Mongoid::MinimalTags::VERSION
|
9
|
+
spec.authors = ['harrisbaird']
|
10
|
+
spec.email = ['mydancake@gmail.com']
|
11
|
+
|
12
|
+
spec.summary = 'Simple tag fields for mongodb documents.'
|
13
|
+
spec.description = 'Simple tag fields for mongodb documents.'
|
14
|
+
spec.homepage = 'https://github.com/harrisbaird/mongoid-minimal_tags'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
spec.bindir = 'exe'
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_dependency 'mongoid', '>= 4.0.0', '<= 6.0.0'
|
22
|
+
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.10'
|
24
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
25
|
+
spec.add_development_dependency 'yard'
|
26
|
+
spec.add_development_dependency 'minitest'
|
27
|
+
spec.add_development_dependency 'database_cleaner'
|
28
|
+
spec.add_development_dependency 'codeclimate-test-reporter'
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongoid-minimal_tags
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- harrisbaird
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-11-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mongoid
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.0.0
|
20
|
+
- - "<="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 6.0.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 4.0.0
|
30
|
+
- - "<="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 6.0.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: bundler
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.10'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.10'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '10.0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '10.0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: yard
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: minitest
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: database_cleaner
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: codeclimate-test-reporter
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
description: Simple tag fields for mongodb documents.
|
118
|
+
email:
|
119
|
+
- mydancake@gmail.com
|
120
|
+
executables: []
|
121
|
+
extensions: []
|
122
|
+
extra_rdoc_files: []
|
123
|
+
files:
|
124
|
+
- ".gitignore"
|
125
|
+
- ".travis.yml"
|
126
|
+
- Gemfile
|
127
|
+
- README.md
|
128
|
+
- Rakefile
|
129
|
+
- lib/mongoid/minimal_tags.rb
|
130
|
+
- lib/mongoid/minimal_tags/minimal_tags.rb
|
131
|
+
- lib/mongoid/minimal_tags/simple_formatter.rb
|
132
|
+
- lib/mongoid/minimal_tags/version.rb
|
133
|
+
- mongoid-minimal_tags.gemspec
|
134
|
+
homepage: https://github.com/harrisbaird/mongoid-minimal_tags
|
135
|
+
licenses: []
|
136
|
+
metadata: {}
|
137
|
+
post_install_message:
|
138
|
+
rdoc_options: []
|
139
|
+
require_paths:
|
140
|
+
- lib
|
141
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
requirements: []
|
152
|
+
rubyforge_project:
|
153
|
+
rubygems_version: 2.4.5.1
|
154
|
+
signing_key:
|
155
|
+
specification_version: 4
|
156
|
+
summary: Simple tag fields for mongodb documents.
|
157
|
+
test_files: []
|
158
|
+
has_rdoc:
|