mongoid_taggable_on 0.2.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
- [![Gem Version](https://badge.fury.io/rb/mongoid_taggable_on.
|
8
|
-
- [![CI Status](https://api.travis-ci.org/huacnlee/mongoid_taggable_on.
|
7
|
+
- [![Gem Version](https://badge.fury.io/rb/mongoid_taggable_on.svg)](https://rubygems.org/gems/mongoid_taggable_on)
|
8
|
+
- [![CI Status](https://api.travis-ci.org/huacnlee/mongoid_taggable_on.svg)](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:
|