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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e2b4c5c52cdbf5bea63ece71f5b175352e483f3b
4
- data.tar.gz: 41fad32774779ac38368d2afbbd1db8e9bde5237
3
+ metadata.gz: eeffa05e90f3cba0710036ad177d58cb8e512c57
4
+ data.tar.gz: 4a4fc394035d3c25dac9281b9cabb7d6df01366b
5
5
  SHA512:
6
- metadata.gz: dfefab0bb1683ed4fd3ef688a32994bec272caf17df0184b0521bfdbe770d6457cd68f3bd300b8e4676749ebee31a22781906ac2df0de5f7b92700862d4b42e1
7
- data.tar.gz: f035b615d24082b5d76ef8b5e3df7a545d94b8b5f5875cec52bb97ad48b215ae3ee4b1c5a844c07a4ab9808889529145fe18a1831008ce2590f671ded795961f
6
+ metadata.gz: 61300358c14afa8950b008f5199aa8263c75e0d11a970efa5da4e1a8c60e8e2d0d97a3bca0ba77dcefea5137b401bfd0e4bd3afe349bb9ef09aa015382a1f7d4
7
+ data.tar.gz: e16c5cf443078a005cfec088695e2d99784a871a24640f8eedc2a25bbbd2e5713d411445f8d1f7a9d3edc20dab9370e52e9bf130e02b98b9be01b52a0db52685
data/.gitignore CHANGED
@@ -1,6 +1,6 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
- /Gemfile.lock
3
+ **/Gemfile.lock
4
4
  /_yardoc/
5
5
  /coverage/
6
6
  /doc/
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,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'mongoid', '>= 5.0.0', '<= 6.0.0'
4
+
5
+ gemspec path: '../'
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'sequel', '>= 4.0.0', '<= 6.0.0'
4
+
5
+ gemspec path: '../'
@@ -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 Posts < ActiveRecord::Base
14
+ # class Post < ActiveRecord::Base
15
15
  # include MinimalTags
16
16
  #
17
17
  # tag_field :tags
18
18
  # end
19
19
  #
20
- # doc = Posts.create(tags: ['hello world', 'this is a test']).tags
20
+ # doc = Post.create(tags: ['hello world', 'this is a test']).tags
21
21
  # # => ['hello-world', 'this-is-a-test']
22
22
  #
23
- # doc == Posts.any_tags(['HELLO WORLD']).first
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 Posts
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 = Posts.create(tags: ['hello world', 'this is a test']).tags
23
+ # doc = Post.create(tags: ['hello world', 'this is a test']).tags
24
24
  # # => ['hello-world', 'this-is-a-test']
25
25
  #
26
- # doc == Posts.any_tags(['HELLO WORLD']).first
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 using ActiveSupport's parameterize.
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(&:parameterize).uniq
13
+ tags.map { |tag| tag.downcase.gsub(/\s/, '-') }.uniq
13
14
  end
14
15
  end
15
16
  end
@@ -1,3 +1,3 @@
1
1
  module MinimalTags
2
- VERSION = '0.2.5'
2
+ VERSION = '0.2.6'
3
3
  end
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.5
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-10 00:00:00.000000000 Z
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