mongoid_flaggable 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ff6b2abe837b1dd044e1a8afcf38e4c66605e68d
4
+ data.tar.gz: 4aa81b9af99e6237852eafc88aef908a62112cc5
5
+ SHA512:
6
+ metadata.gz: 1b7b00c7d34488f154b8c538848ced376b323a11fdcc67605be3dd0127caca40c2547593c356e996e85002eba15f171b530017d994d5e0b543835847586adfb0
7
+ data.tar.gz: 7a6008b740b07b80e4bac4696a2c9aaf877541c30017e828f6d604f35a8714cb6d58b63a9963f650c8cffd1c9f3deb569884baba2d1a8eb13cb2cee04b02c573
data/README.md ADDED
File without changes
@@ -0,0 +1,26 @@
1
+ require "mongoid"
2
+ require "mongoid_flaggable/instance_methods"
3
+ require "mongoid_flaggable/class_methods"
4
+
5
+ module Mongoid
6
+ module Flaggable
7
+ include InstanceMethods
8
+
9
+ def self.included(base)
10
+ base.extend(ClassMethods)
11
+ setup(base)
12
+ end
13
+
14
+ private
15
+
16
+ def self.setup(base)
17
+ base.field :flag_array, type: Array, default: nil
18
+ base.index({
19
+ flag_array: 1
20
+ }, {
21
+ background: true,
22
+ sparse: true
23
+ })
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,71 @@
1
+ module Mongoid
2
+ module Flaggable
3
+ module ClassMethods
4
+ def flag_frequency
5
+ aggregation = collection.aggregate([
6
+ {
7
+ '$match' => {
8
+ 'flag_array' => {
9
+ '$ne' => nil
10
+ }
11
+ }
12
+ },
13
+ {
14
+ '$project' => {
15
+ 'flag_array' => 1
16
+ }
17
+ },
18
+ {
19
+ '$unwind' => '$flag_array'
20
+ },
21
+ {
22
+ '$group' => {
23
+ '_id' => '$flag_array',
24
+ 'count' => {
25
+ '$sum' => 1
26
+ }
27
+ }
28
+ }
29
+ ])
30
+ aggregation.map!(&:values)
31
+ aggregation.sort_by! do |value|
32
+ value.last * -1
33
+ end
34
+ Hash[aggregation]
35
+ end
36
+
37
+ def by_all_flags(*flags)
38
+ flags.flatten!
39
+ where(:flag_array.all => flags)
40
+ end
41
+ alias_method :by_flag, :by_all_flags
42
+ alias_method :by_flags, :by_all_flags
43
+
44
+ def by_any_flags(*flags)
45
+ flags.flatten!
46
+ where(:flag_array.in => flags)
47
+ end
48
+
49
+ def flag_count(*flags)
50
+ flags.flatten!
51
+ if flags.size == 1
52
+ where(:flag_array => flags.first).count
53
+ else
54
+ by_all_flags(flags).count
55
+ end
56
+ end
57
+
58
+ def bulk_add_flag!(flag, conditions = {})
59
+ where(conditions).add_to_set(:flag_array, flag.to_s)
60
+ end
61
+
62
+ def bulk_remove_flag!(flag, conditions = {})
63
+ where(conditions).pull(:flag_array, flag.to_s)
64
+ end
65
+
66
+ def distinct_flags
67
+ distinct :flag_array
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,50 @@
1
+ module Mongoid
2
+ module Flaggable
3
+ module InstanceMethods
4
+ def add_flag(flag)
5
+ self.flag_array = [] if flag_array.nil?
6
+ flag_array << flag.to_s
7
+ flag_array.uniq!
8
+ end
9
+
10
+ def add_flag!(flag)
11
+ add_to_set(:flag_array, flag.to_s)
12
+ end
13
+
14
+ def remove_flag(flag)
15
+ return if flag_array.nil?
16
+ flag_array.delete(flag.to_s)
17
+ end
18
+
19
+ def remove_flag!(flag)
20
+ pull(:flag_array, flag.to_s)
21
+ end
22
+
23
+ def clear_flags
24
+ self.flag_array = []
25
+ end
26
+
27
+ def clear_flags!
28
+ clear_flags
29
+ save
30
+ end
31
+
32
+ def flags
33
+ flag_array || []
34
+ end
35
+
36
+ def all_flags?(*p_flags)
37
+ p_flags = p_flags.flatten.map(&:to_s).uniq.sort
38
+ (p_flags - flags).empty?
39
+ end
40
+ alias_method :flag?, :all_flags?
41
+ alias_method :flags?, :all_flags?
42
+
43
+ def any_flags?(*p_flags)
44
+ p_flags = p_flags.flatten.map(&:to_s)
45
+ (flags & p_flags).any?
46
+ end
47
+ alias_method :any_flag?, :any_flags?
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,5 @@
1
+ module Mongoid
2
+ module Flaggable
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mongoid_flaggable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Steve McHail
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-31 00:00:00.000000000 Z
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: '3.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '2.14'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '2.14'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard-rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: database_cleaner
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Add and manipulate flags (boolean values) on mongoid models
112
+ email:
113
+ - mchail@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - README.md
119
+ - lib/mongoid_flaggable.rb
120
+ - lib/mongoid_flaggable/class_methods.rb
121
+ - lib/mongoid_flaggable/instance_methods.rb
122
+ - lib/mongoid_flaggable/version.rb
123
+ homepage: http://github.com/mchail/mongoid_flaggable
124
+ licenses:
125
+ - MIT
126
+ metadata: {}
127
+ post_install_message:
128
+ rdoc_options: []
129
+ require_paths:
130
+ - lib
131
+ required_ruby_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - '>='
139
+ - !ruby/object:Gem::Version
140
+ version: 1.3.6
141
+ requirements: []
142
+ rubyforge_project: mongoid_flaggable
143
+ rubygems_version: 2.2.0
144
+ signing_key:
145
+ specification_version: 4
146
+ summary: Add and manipulate flags (boolean values) on mongoid models
147
+ test_files: []