tag_columns 0.1.2 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 916161bd2f1a95730ddd6801964cf49db63031dc
4
- data.tar.gz: 841bfffd779bf8bcbeeac455f88cd9e7793f3942
3
+ metadata.gz: defa7c70b8eab8d413f513c5b9941b1e5511ae49
4
+ data.tar.gz: e4beea230867f5bacb9c7ead7ab372bc323ee18c
5
5
  SHA512:
6
- metadata.gz: 4ee1165ec2966aa7899a25a630a6608328b743879ea6fe6bc92ef977b60637feaf44b28252e433621130d023ddb5d815ffa20f9e34c6bda6838fe46152bd2554
7
- data.tar.gz: 3efc49aefd5ceeab7989b9aa568e9ce9d6ea16230eedb915109c49fcb1bed47c34f7b73ebe991fcc95d1063ee9b2a9011efbb7b10d605d88dbda0164b7f0e7d2
6
+ metadata.gz: cc061350f163cb0b9ba87ac398c48dbbf676acf6e7d8dd737e71848d3ed7e6072aa107d4c1c4990c90d150f9af6999f5b50c2481d1caaf1ec5fa9e402c8b7bfe
7
+ data.tar.gz: 61f90575de2bf67f1d252bf4b6f94d109c504434a03c1f8ec5a345e8eb53f6fc9f2780204105970a6a028e7cf9d008f3e79c07e7d466cef178f500fb241bfbec
data/Gemfile.lock CHANGED
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tag_columns (0.1.2)
4
+ tag_columns (0.1.4)
5
5
  activesupport
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activesupport (5.0.2)
10
+ activesupport (5.1.2)
11
11
  concurrent-ruby (~> 1.0, >= 1.0.2)
12
12
  i18n (~> 0.7)
13
13
  minitest (~> 5.1)
@@ -26,11 +26,11 @@ GEM
26
26
  tins (~> 1.6)
27
27
  debug_inspector (0.0.2)
28
28
  docile (1.1.5)
29
- i18n (0.8.1)
29
+ i18n (0.8.6)
30
30
  interception (0.5)
31
31
  json (2.0.4)
32
32
  method_source (0.8.2)
33
- minitest (5.10.1)
33
+ minitest (5.10.3)
34
34
  os (1.0.0)
35
35
  parser (2.4.0.0)
36
36
  ast (~> 2.2)
data/README.md CHANGED
@@ -1,7 +1,18 @@
1
+ [![Lines of Code](http://img.shields.io/badge/lines_of_code-53-brightgreen.svg?style=flat)](http://blog.codinghorror.com/the-best-code-is-no-code-at-all/)
2
+ [![Code Status](http://img.shields.io/codeclimate/github/hopsoft/tag_columns.svg?style=flat)](https://codeclimate.com/github/hopsoft/tag_columns)
3
+ [![Dependency Status](http://img.shields.io/gemnasium/hopsoft/tag_columns.svg?style=flat)](https://gemnasium.com/hopsoft/tag_columns)
4
+ [![Build Status](http://img.shields.io/travis/hopsoft/tag_columns.svg?style=flat)](https://travis-ci.org/hopsoft/tag_columns)
5
+ [![Coverage Status](https://img.shields.io/coveralls/hopsoft/tag_columns.svg?style=flat)](https://coveralls.io/r/hopsoft/tag_columns?branch=master)
6
+ [![Downloads](http://img.shields.io/gem/dt/tag_columns.svg?style=flat)](http://rubygems.org/gems/tag_columns)
7
+
8
+ [![Sponsor](https://app.codesponsor.io/embed/QMSjMHrtPhvfmCnk5Hbikhhr/hopsoft/tag_columns.svg)](https://app.codesponsor.io/link/QMSjMHrtPhvfmCnk5Hbikhhr/hopsoft/tag_columns)
9
+
1
10
  # TagColumns
2
11
 
3
- Fast & simple model tagging using [PostgreSQL's](https://www.postgresql.org/) [Array datatype](https://www.postgresql.org/docs/current/static/arrays.html).
12
+ Fast & simple Rails ActiveRecord model tagging using [PostgreSQL's](https://www.postgresql.org/) [Array datatype](https://www.postgresql.org/docs/current/static/arrays.html).
13
+
4
14
  *Similar to [acts_as_taggable_on](https://github.com/mbleigh/acts-as-taggable-on) but lighter weight with fewer features.*
15
+ *Also, be sure to check out [acts_as_taggable_array_on](https://github.com/tmiyamon/acts-as-taggable-array-on).*
5
16
 
6
17
  ## Use Cases
7
18
 
@@ -29,8 +40,10 @@ end
29
40
  ```
30
41
 
31
42
  ```ruby
43
+ # app/models/user.rb
32
44
  class User < ApplicationRecord
33
- include SelfRenderer
45
+ include TagColumns
46
+ tag_columns :groups
34
47
  end
35
48
  ```
36
49
 
@@ -53,4 +66,10 @@ non_writers = User.without_any_groups(:writer)
53
66
  readers_or_writers = User.with_any_groups(:reader, :writer)
54
67
  readers_and_writers = User.with_all_groups(:reader, :writer)
55
68
  non_readers_and_writers = User.without_all_groups(:reader, :writer)
69
+
70
+ # find unique tags across all users
71
+ User.unique_groups
72
+
73
+ # find unique tags for users with the last name 'Smith'
74
+ User.unique_groups(last_name: "Smith")
56
75
  ```
data/lib/tag_columns.rb CHANGED
@@ -23,6 +23,18 @@ module TagColumns
23
23
  method_name = column_name.downcase
24
24
  quoted_column_name = "#{quoted_table_name}.#{connection.quote_column_name column_name}"
25
25
 
26
+ define_singleton_method :"unique_#{method_name}" do |conditions='true'|
27
+ result = connection.execute <<~QUERY
28
+ SELECT DISTINCT unnest(#{quoted_column_name}) AS unique_#{method_name}
29
+ FROM #{quoted_table_name}
30
+ WHERE #{where(conditions).to_sql.split(/ WHERE /i).last}
31
+ AND #{quoted_column_name} IS NOT NULL
32
+ AND #{quoted_column_name} != '{}'
33
+ ORDER BY unique_#{method_name}
34
+ QUERY
35
+ result.values.flatten
36
+ end
37
+
26
38
  scope :"with_any_#{method_name}", ->(*tags) { where "#{quoted_column_name} && ARRAY[?]::varchar[]", tag_columns_sanitize_list(tags) }
27
39
  scope :"with_all_#{method_name}", ->(*tags) { where "#{quoted_column_name} @> ARRAY[?]::varchar[]", tag_columns_sanitize_list(tags) }
28
40
  scope :"without_any_#{method_name}", ->(*tags) { where.not "#{quoted_column_name} && ARRAY[?]::varchar[]", tag_columns_sanitize_list(tags) }
@@ -40,7 +52,7 @@ module TagColumns
40
52
  values = self.class.tag_columns_sanitize_list(values)
41
53
  existing = self.class.tag_columns_sanitize_list(self[column_name] || [])
42
54
  (values & existing).size == values.size
43
- end
55
+ end
44
56
 
45
57
  alias_method :"has_#{method_name.singularize}?", :"has_all_#{method_name}?"
46
58
 
@@ -1,3 +1,3 @@
1
1
  module TagColumns
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -0,0 +1,11 @@
1
+ require "pry-test"
2
+ require "coveralls"
3
+ Coveralls.wear!
4
+ SimpleCov.command_name "pry-test"
5
+ require_relative "../lib/tag_columns"
6
+
7
+ class TestTagColumns < PryTest::Test
8
+ test "stub" do
9
+ assert true
10
+ end
11
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tag_columns
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Hopkins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-14 00:00:00.000000000 Z
11
+ date: 2017-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -96,6 +96,7 @@ files:
96
96
  - bin/setup
97
97
  - lib/tag_columns.rb
98
98
  - lib/tag_columns/version.rb
99
+ - test/test_tag_columns.rb
99
100
  homepage: https://github.com/hopsoft/tag_columns
100
101
  licenses:
101
102
  - MIT
@@ -119,5 +120,6 @@ rubyforge_project:
119
120
  rubygems_version: 2.6.11
120
121
  signing_key:
121
122
  specification_version: 4
122
- summary: Fast & simple model tagging using PostgreSQL's Array datatype
123
- test_files: []
123
+ summary: Fast & simple Rails ActiveRecord model tagging using PostgreSQL's Array datatype
124
+ test_files:
125
+ - test/test_tag_columns.rb