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 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
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ test/coverage
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 2.1.0
5
+ - 2.2.3
6
+ services:
7
+ - mongodb
8
+ before_install: gem install bundler -v 1.10.6
9
+ addons:
10
+ code_climate:
11
+ repo_token: 32212930c3d28b5f18f53b94b273de85659924850fc07c007ed87b852437c687
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,58 @@
1
+ [![Build Status](https://travis-ci.org/harrisbaird/mongoid-minimal_tags.svg?branch=master)](https://travis-ci.org/harrisbaird/mongoid-minimal_tags)
2
+ [![Code Climate](https://codeclimate.com/github/harrisbaird/mongoid-minimal_tags/badges/gpa.svg)](https://codeclimate.com/github/harrisbaird/mongoid-minimal_tags)
3
+ [![Test Coverage](https://codeclimate.com/github/harrisbaird/mongoid-minimal_tags/badges/coverage.svg)](https://codeclimate.com/github/harrisbaird/mongoid-minimal_tags/coverage)
4
+ [![Inline docs](http://inch-ci.org/github/harrisbaird/mongoid-minimal_tags.svg?branch=master)](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,5 @@
1
+ module Mongoid
2
+ module MinimalTags
3
+ VERSION = '0.1.0'
4
+ end
5
+ 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: