minimal_tags 0.2.5 → 0.2.6
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 +4 -4
- data/.gitignore +1 -1
- data/.travis.yml +3 -4
- data/README.md +22 -0
- data/gemfiles/mongoid_5.gemfile +5 -0
- data/gemfiles/sequel_4.gemfile +5 -0
- data/gemfiles/sequel_4.gemfile.lock +38 -0
- data/lib/minimal_tags/persistence/activerecord.rb +3 -3
- data/lib/minimal_tags/persistence/mongoid.rb +3 -3
- data/lib/minimal_tags/persistence/sequel.rb +55 -0
- data/lib/minimal_tags/simple_formatter.rb +3 -2
- data/lib/minimal_tags/version.rb +1 -1
- data/lib/minimal_tags.rb +4 -0
- data/minimal_tags.gemspec +0 -2
- metadata +6 -42
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eeffa05e90f3cba0710036ad177d58cb8e512c57
|
4
|
+
data.tar.gz: 4a4fc394035d3c25dac9281b9cabb7d6df01366b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61300358c14afa8950b008f5199aa8263c75e0d11a970efa5da4e1a8c60e8e2d0d97a3bca0ba77dcefea5137b401bfd0e4bd3afe349bb9ef09aa015382a1f7d4
|
7
|
+
data.tar.gz: e16c5cf443078a005cfec088695e2d99784a871a24640f8eedc2a25bbbd2e5713d411445f8d1f7a9d3edc20dab9370e52e9bf130e02b98b9be01b52a0db52685
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
language: ruby
|
2
|
+
cache: bundler
|
2
3
|
rvm:
|
3
|
-
- 2.1.0
|
4
4
|
- 2.2.3
|
5
5
|
- 2.3.0
|
6
6
|
gemfile:
|
7
7
|
- gemfiles/activerecord_41.gemfile
|
8
8
|
- gemfiles/activerecord_42.gemfile
|
9
9
|
- gemfiles/activerecord_50.gemfile
|
10
|
+
- gemfiles/mongoid_5.gemfile
|
11
|
+
- gemfiles/sequel_4.gemfile
|
10
12
|
services:
|
11
13
|
- mongodb
|
12
14
|
- postgresql
|
@@ -17,6 +19,3 @@ before_script:
|
|
17
19
|
addons:
|
18
20
|
code_climate:
|
19
21
|
repo_token: 3c954617ba40beceb056cc73b82e00a6dc1fa2193cda386dc6c2128bdd61a804
|
20
|
-
matrix:
|
21
|
-
allow_failures:
|
22
|
-
- gemfile: gemfiles/activerecord_50.gemfile
|
data/README.md
CHANGED
@@ -36,6 +36,28 @@ end
|
|
36
36
|
|
37
37
|
```
|
38
38
|
|
39
|
+
### Sequel
|
40
|
+
|
41
|
+
Add the following migration for each tag field you want.
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
Sequel.migration do
|
45
|
+
change do
|
46
|
+
add_column :posts, :tags, 'text[]', default: [], null: false
|
47
|
+
add_index :posts, :tags, type: :gin
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
```
|
52
|
+
|
53
|
+
Also enable the `pg_array` and `pg_array_ops` extensions:
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
DB = Sequel.connect('postgres://...')
|
57
|
+
DB.extension :pg_array
|
58
|
+
Sequel.extension :pg_array_ops
|
59
|
+
```
|
60
|
+
|
39
61
|
## Usage
|
40
62
|
|
41
63
|
Start by including the `MinimalTags` module and define your tag fields
|
@@ -0,0 +1,38 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ../
|
3
|
+
specs:
|
4
|
+
minimal_tags (0.2.5)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
codeclimate-test-reporter (0.6.0)
|
10
|
+
simplecov (>= 0.7.1, < 1.0.0)
|
11
|
+
docile (1.1.5)
|
12
|
+
json (1.8.3)
|
13
|
+
minitest (5.9.0)
|
14
|
+
pg (0.18.4)
|
15
|
+
rake (10.5.0)
|
16
|
+
sequel (4.36.0)
|
17
|
+
simplecov (0.12.0)
|
18
|
+
docile (~> 1.1.0)
|
19
|
+
json (>= 1.8, < 3)
|
20
|
+
simplecov-html (~> 0.10.0)
|
21
|
+
simplecov-html (0.10.0)
|
22
|
+
yard (0.9.0)
|
23
|
+
|
24
|
+
PLATFORMS
|
25
|
+
ruby
|
26
|
+
|
27
|
+
DEPENDENCIES
|
28
|
+
bundler (~> 1.10)
|
29
|
+
codeclimate-test-reporter
|
30
|
+
minimal_tags!
|
31
|
+
minitest
|
32
|
+
pg
|
33
|
+
rake (~> 10.0)
|
34
|
+
sequel (>= 4.0.0, <= 6.0.0)
|
35
|
+
yard
|
36
|
+
|
37
|
+
BUNDLED WITH
|
38
|
+
1.12.5
|
@@ -11,16 +11,16 @@ module MinimalTags
|
|
11
11
|
# normalization on save.
|
12
12
|
#
|
13
13
|
# @example
|
14
|
-
# class
|
14
|
+
# class Post < ActiveRecord::Base
|
15
15
|
# include MinimalTags
|
16
16
|
#
|
17
17
|
# tag_field :tags
|
18
18
|
# end
|
19
19
|
#
|
20
|
-
# doc =
|
20
|
+
# doc = Post.create(tags: ['hello world', 'this is a test']).tags
|
21
21
|
# # => ['hello-world', 'this-is-a-test']
|
22
22
|
#
|
23
|
-
# doc ==
|
23
|
+
# doc == Post.any_tags(['HELLO WORLD']).first
|
24
24
|
# # => true
|
25
25
|
#
|
26
26
|
# @param [String] field_name The field name to use in mongo and searching methods
|
@@ -13,17 +13,17 @@ module MinimalTags
|
|
13
13
|
# normalization on save.
|
14
14
|
#
|
15
15
|
# @example
|
16
|
-
# class
|
16
|
+
# class Post
|
17
17
|
# include Mongoid::Document
|
18
18
|
# include MinimalTags
|
19
19
|
#
|
20
20
|
# tag_field :tags
|
21
21
|
# end
|
22
22
|
#
|
23
|
-
# doc =
|
23
|
+
# doc = Post.create(tags: ['hello world', 'this is a test']).tags
|
24
24
|
# # => ['hello-world', 'this-is-a-test']
|
25
25
|
#
|
26
|
-
# doc ==
|
26
|
+
# doc == Post.any_tags(['HELLO WORLD']).first
|
27
27
|
# # => true
|
28
28
|
#
|
29
29
|
# @param [String] field_name The field name to use in mongo and searching methods
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module MinimalTags
|
2
|
+
module Persistence
|
3
|
+
module Sequel
|
4
|
+
TAG_SEARCH_TYPES = {
|
5
|
+
all: :contains,
|
6
|
+
any: :overlaps
|
7
|
+
}
|
8
|
+
|
9
|
+
TAG_PREFIX_TYPES = {
|
10
|
+
where: '',
|
11
|
+
exclude: 'without_'
|
12
|
+
}
|
13
|
+
|
14
|
+
##
|
15
|
+
# Creates a tag field, index, search methods and a callback for tag
|
16
|
+
# normalization on save.
|
17
|
+
#
|
18
|
+
# @example
|
19
|
+
# class Post < Sequel::Model
|
20
|
+
# include MinimalTags
|
21
|
+
#
|
22
|
+
# tag_field :tags
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# doc = Post.create(tags: ['hello world', 'this is a test']).tags
|
26
|
+
# # => ['hello-world', 'this-is-a-test']
|
27
|
+
#
|
28
|
+
# doc == Post.any_tags(['HELLO WORLD']).first
|
29
|
+
# # => true
|
30
|
+
#
|
31
|
+
# @param [String] field_name The field name to use in mongo and searching methods
|
32
|
+
# @param [Object] formatter The formatter to use, overriding the default
|
33
|
+
def tag_field(field_name, formatter: MinimalTags.default_formatter)
|
34
|
+
# Create the scopes for searching tags
|
35
|
+
TAG_SEARCH_TYPES.each do |prefix, operator|
|
36
|
+
TAG_PREFIX_TYPES.each do |method, without_prefix|
|
37
|
+
define_singleton_method "#{without_prefix}#{prefix}_#{field_name}" do |tags|
|
38
|
+
formatted_tags = formatter.normalize(tags)
|
39
|
+
query = ::Sequel.pg_array_op(field_name).send(operator, formatted_tags)
|
40
|
+
send(method, query)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
tag_fields << field_name
|
46
|
+
|
47
|
+
# # Normalize tags on save
|
48
|
+
before_save do |*args|
|
49
|
+
tags = send(field_name) || []
|
50
|
+
send("#{field_name}=", formatter.normalize(tags))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module MinimalTags
|
2
|
-
# A very simple tag formatter
|
2
|
+
# A very simple tag formatter.
|
3
3
|
# You should create your own rather than using this.
|
4
|
+
# The Stringex gem works well - https://github.com/rsl/stringex
|
4
5
|
class SimpleFormatter
|
5
6
|
##
|
6
7
|
# Returns an array of normalized tags
|
@@ -9,7 +10,7 @@ module MinimalTags
|
|
9
10
|
#
|
10
11
|
# @return [Array] Unique, parameterized tags
|
11
12
|
def normalize(tags)
|
12
|
-
tags.map(
|
13
|
+
tags.map { |tag| tag.downcase.gsub(/\s/, '-') }.uniq
|
13
14
|
end
|
14
15
|
end
|
15
16
|
end
|
data/lib/minimal_tags/version.rb
CHANGED
data/lib/minimal_tags.rb
CHANGED
@@ -15,6 +15,10 @@ module MinimalTags
|
|
15
15
|
elsif ancestors.include?('ActiveRecord::Base')
|
16
16
|
require 'minimal_tags/persistence/activerecord'
|
17
17
|
base.send :extend, Persistence::Activerecord
|
18
|
+
elsif ancestors.include?('Sequel::Model')
|
19
|
+
require 'minimal_tags/persistence/sequel'
|
20
|
+
base.plugin :hook_class_methods
|
21
|
+
base.send :extend, Persistence::Sequel
|
18
22
|
end
|
19
23
|
end
|
20
24
|
|
data/minimal_tags.gemspec
CHANGED
@@ -18,8 +18,6 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency 'mongoid', '>= 5.0.0', '<= 6.0.0'
|
22
|
-
spec.add_development_dependency 'activerecord', '>= 4.0.0', '<= 6.0.0'
|
23
21
|
spec.add_development_dependency 'pg'
|
24
22
|
|
25
23
|
spec.add_development_dependency 'bundler', '~> 1.10'
|
metadata
CHANGED
@@ -1,55 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minimal_tags
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- harrisbaird
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-21 00:00:00.000000000 Z
|
12
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: 5.0.0
|
20
|
-
- - "<="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 6.0.0
|
23
|
-
type: :development
|
24
|
-
prerelease: false
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
requirements:
|
27
|
-
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 5.0.0
|
30
|
-
- - "<="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 6.0.0
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: activerecord
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - ">="
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: 4.0.0
|
40
|
-
- - "<="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 6.0.0
|
43
|
-
type: :development
|
44
|
-
prerelease: false
|
45
|
-
version_requirements: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - ">="
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: 4.0.0
|
50
|
-
- - "<="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 6.0.0
|
53
13
|
- !ruby/object:Gem::Dependency
|
54
14
|
name: pg
|
55
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,9 +109,13 @@ files:
|
|
149
109
|
- gemfiles/activerecord_41.gemfile
|
150
110
|
- gemfiles/activerecord_42.gemfile
|
151
111
|
- gemfiles/activerecord_50.gemfile
|
112
|
+
- gemfiles/mongoid_5.gemfile
|
113
|
+
- gemfiles/sequel_4.gemfile
|
114
|
+
- gemfiles/sequel_4.gemfile.lock
|
152
115
|
- lib/minimal_tags.rb
|
153
116
|
- lib/minimal_tags/persistence/activerecord.rb
|
154
117
|
- lib/minimal_tags/persistence/mongoid.rb
|
118
|
+
- lib/minimal_tags/persistence/sequel.rb
|
155
119
|
- lib/minimal_tags/simple_formatter.rb
|
156
120
|
- lib/minimal_tags/version.rb
|
157
121
|
- minimal_tags.gemspec
|