mongoid_taggable_on 0.2.0 → 1.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 +5 -5
- data/README.md +17 -15
- data/lib/mongoid/taggable_on.rb +49 -50
- data/lib/mongoid_taggable_on.rb +2 -1
- metadata +3 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: aa9bccd81c373a905c99bfea71aab6777a9635b72973cc26350d4446ba4b55bc
|
4
|
+
data.tar.gz: 28d11471201c20eec2daf073fb76f13b06a3ad99af26359ebc305e11469c4d00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4c5f7736ccd32b0763a6b1823c41c3eac2af53dd096358c0ff98d9256c418b6f5af80e6ad16403a86c847b601edb72a05d7388902d2422c772c1b8f1dcbfe86
|
7
|
+
data.tar.gz: 9339e982366afaa28de7cd5be07ac6ab2d59f987d2366e2803b8ce09d4f7ed3d5076ef4e307782c00c35e48cc7eab5b976bb2afa22a4e032389173fe8008ab48
|
data/README.md
CHANGED
@@ -4,8 +4,8 @@ Mongoid Taggable provides some helpers to create taggable documents, can use man
|
|
4
4
|
|
5
5
|
## Status
|
6
6
|
|
7
|
-
- [](https://rubygems.org/gems/mongoid_taggable_on)
|
8
|
+
- [](http://travis-ci.org/huacnlee/mongoid_taggable_on)
|
9
9
|
|
10
10
|
## Installation
|
11
11
|
|
@@ -17,20 +17,19 @@ gem install mongoid_taggable_on
|
|
17
17
|
|
18
18
|
or in Gemfile:
|
19
19
|
|
20
|
-
```
|
21
|
-
gem
|
20
|
+
```rb
|
21
|
+
gem "mongoid_taggable_on"
|
22
22
|
```
|
23
23
|
|
24
24
|
## Usage
|
25
25
|
|
26
|
-
[中文介绍去这里](http://huacnlee.com/blog/new_gem_mongoid_taggable_on)
|
27
26
|
|
28
27
|
```ruby
|
29
28
|
class Movie
|
30
29
|
include Mongoid::Document
|
31
30
|
include Mongoid::TaggableOn
|
32
31
|
|
33
|
-
taggable_on :actors, :
|
32
|
+
taggable_on :actors, index: false
|
34
33
|
taggable_on :directors
|
35
34
|
taggable_on :countries
|
36
35
|
|
@@ -42,26 +41,29 @@ end
|
|
42
41
|
Now you can use sample:
|
43
42
|
|
44
43
|
```bash
|
45
|
-
irb>
|
46
|
-
irb>
|
47
|
-
irb>
|
44
|
+
irb> movie = Movie.new
|
45
|
+
irb> movie.actor_list = "Jason Statham, Joseph Gordon-Levitt, Johnny Depp, Nicolas Cage"
|
46
|
+
irb> movie.actors
|
48
47
|
["Jason Statham", "Joseph Gordon-Levitt", "Johnny De", "Nicolas Cage"]
|
49
|
-
|
50
|
-
irb>
|
51
|
-
|
48
|
+
|
49
|
+
irb> movie.country_list = "United States| China|Mexico"
|
50
|
+
irb> movie.countries
|
51
|
+
["United States", "China","Mexico"]
|
52
52
|
```
|
53
53
|
|
54
54
|
find with tag:
|
55
55
|
|
56
56
|
```bash
|
57
57
|
irb> Movie.tagged_with_on(:actors, "Jason Statham, Joseph Gordon-Levitt")
|
58
|
-
irb> Movie.tagged_with_on(:actors, "Jason Statham, Joseph Gordon-Levitt", :
|
59
|
-
irb> Movie.tagged_with_on(:actors, "Nicolas Cage", :
|
58
|
+
irb> Movie.tagged_with_on(:actors, "Jason Statham, Joseph Gordon-Levitt", match: :any)
|
59
|
+
irb> Movie.tagged_with_on(:actors, "Nicolas Cage", match: :not)
|
60
60
|
```
|
61
61
|
|
62
62
|
## Allow split chars
|
63
63
|
|
64
|
-
|
64
|
+
```
|
65
|
+
, ,| /
|
66
|
+
```
|
65
67
|
|
66
68
|
## Who used that?
|
67
69
|
|
data/lib/mongoid/taggable_on.rb
CHANGED
@@ -1,72 +1,71 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Mongoid
|
3
4
|
module TaggableOn
|
4
5
|
extend ActiveSupport::Concern
|
5
6
|
|
6
7
|
included do
|
7
|
-
|
8
|
-
find items with tag
|
9
|
-
|
10
|
-
*Params*
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
*Usage*
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
scope :tagged_with_on, Proc.new { |field_name, tags, opts|
|
8
|
+
# rdoc
|
9
|
+
# find items with tag
|
10
|
+
#
|
11
|
+
# *Params*
|
12
|
+
#
|
13
|
+
# * field_name tagged field
|
14
|
+
# * tags match value, allow String or Array, case insensitive, for example: "Ruby,Python" or ["Ruby","Python"] or "ruby"
|
15
|
+
# * match (any,all,not) match type, default: all
|
16
|
+
#
|
17
|
+
# *Usage*
|
18
|
+
#
|
19
|
+
# Person.tagged_with_on(:skills, "ui design, photograph")
|
20
|
+
# Person.tagged_with_on(:skills, "ui design, photograph").tagged_with_on(:languages, "english,chinese")
|
21
|
+
# Person.tagged_with_on(:skills, "ui design, photograph").paginate(:page => params[:page])
|
22
|
+
#
|
23
|
+
scope :tagged_with_on, proc { |field_name, tags, opts|
|
24
24
|
return [] if field_name.blank?
|
25
|
+
|
25
26
|
opts ||= {}
|
26
27
|
opts[:match] ||= ""
|
27
28
|
field_name = field_name.to_s.tableize
|
28
29
|
tags = split_tag(tags) if tags.is_a?(String)
|
29
|
-
tags = tags.collect
|
30
|
+
tags = tags.collect(&:to_s)
|
30
31
|
case opts[:match].to_sym
|
31
32
|
when :any then
|
32
|
-
any_in(
|
33
|
+
any_in("#{field_name}": tags)
|
33
34
|
when :not then
|
34
|
-
not_in(
|
35
|
+
not_in("#{field_name}": tags)
|
35
36
|
else
|
36
37
|
# ALL
|
37
|
-
all_in(
|
38
|
+
all_in("#{field_name}": tags)
|
38
39
|
end
|
39
40
|
}
|
40
41
|
end
|
41
42
|
|
42
43
|
module ClassMethods
|
43
|
-
|
44
|
-
=
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
include Mongoid::
|
50
|
-
|
51
|
-
taggable_on :
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
=end
|
44
|
+
# rdoc
|
45
|
+
# =Define a tag field
|
46
|
+
# *For example:*
|
47
|
+
#
|
48
|
+
# class Person
|
49
|
+
# include Mongoid::Document
|
50
|
+
# include Mongoid::TaggableOn
|
51
|
+
# taggable_on :languages
|
52
|
+
# taggable_on :skills
|
53
|
+
# end
|
54
|
+
#
|
55
|
+
# *Then will has there methods and fields:*
|
56
|
+
#
|
57
|
+
# field :languages, :type => Array, :default => []
|
58
|
+
# def language_list; end
|
59
|
+
# def language_list=(value); end
|
60
|
+
# field :skills, :type => Array, :default => []
|
61
|
+
# def skill_list; end
|
62
|
+
# def skill_list=(value); end
|
63
|
+
#
|
64
|
+
# *Params*
|
65
|
+
#
|
66
|
+
# * field_name <em>name for tag field</em>
|
67
|
+
# * opts[:index] <em>(true/false) allow create index in MongoDB, default: true</em>
|
68
|
+
#
|
70
69
|
def taggable_on(field_name, opts = {})
|
71
70
|
field_name = field_name.to_s.tableize
|
72
71
|
field_name_single = field_name.singularize
|
@@ -104,7 +103,7 @@ find items with tag
|
|
104
103
|
end
|
105
104
|
|
106
105
|
def split_tag(value)
|
107
|
-
value.split(
|
106
|
+
value.split(%r{,|,|/|\|}).collect(&:strip).uniq
|
108
107
|
end
|
109
108
|
end
|
110
109
|
end
|
data/lib/mongoid_taggable_on.rb
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative "./mongoid/taggable_on"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_taggable_on
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Lee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-07-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongoid
|
@@ -53,11 +53,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
requirements: []
|
56
|
-
|
57
|
-
rubygems_version: 2.4.7
|
56
|
+
rubygems_version: 3.0.3
|
58
57
|
signing_key:
|
59
58
|
specification_version: 4
|
60
59
|
summary: Mongoid Taggable provides some helpers to create taggable documents, can
|
61
60
|
use many fields.
|
62
61
|
test_files: []
|
63
|
-
has_rdoc:
|