mongoid_frequency 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,53 @@
1
+ mongoid-frequency
2
+ =================
3
+
4
+ `mongoid-frequency` adds syntactic sugar for generating frequency maps using the mongodb aggregation framework.
5
+
6
+ # Installation
7
+
8
+ Install directly from rubygems:
9
+
10
+ ```ruby
11
+ gem install mongoid-frequency
12
+ ```
13
+
14
+ Or if you are using a Gemfile, place this in your Gemfile:
15
+
16
+ ```ruby
17
+ gem 'mongoid-frequency'
18
+ ```
19
+
20
+ # Demo
21
+
22
+ ```ruby
23
+ > Book.all.frequency :genre
24
+ => {"Adventure" => 12,
25
+ "Sci-fi" => 8",
26
+ "Romance" => 4",
27
+ "Non-Fiction" => 7}
28
+
29
+ > Book.collection.freq :genre
30
+ => {"Adventure" => 12,
31
+ "Sci-fi" => 8",
32
+ "Romance" => 4",
33
+ "Non-Fiction" => 7}
34
+
35
+ > Book.collection.freq :genre, :published.lt => 40.years.ago
36
+ => {"Sci-fi" => 2,
37
+ "Romance" => 1}
38
+
39
+ > author.books.freq :genre
40
+ => {"Romance" => 2,
41
+ "Non-Fiction" => 1}
42
+ ```
43
+
44
+ # Contributing
45
+
46
+ 1. Fork it
47
+ 2. Make your changes
48
+ 3. Write/update tests. Run with `rake`.
49
+ 4. Issue a Pull Request
50
+
51
+ # License
52
+
53
+ MIT. Go nuts.
@@ -0,0 +1,2 @@
1
+ require "mongoid_frequency/collection"
2
+ require "mongoid_frequency/criteria"
@@ -0,0 +1,12 @@
1
+ require 'moped'
2
+ require_relative 'query'
3
+
4
+ module Moped
5
+ class Collection
6
+ def frequency(group, match = {})
7
+ Mongoid::Frequency.query(self, match, group)
8
+ end
9
+
10
+ alias_method :freq, :frequency
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'mongoid'
2
+ require_relative 'query'
3
+
4
+ module Mongoid
5
+ class Criteria
6
+ def frequency(group)
7
+ Mongoid::Frequency.query(klass.collection, selector, group)
8
+ end
9
+
10
+ alias_method :freq, :frequency
11
+ end
12
+ end
@@ -0,0 +1,29 @@
1
+ module Mongoid
2
+ module Frequency
3
+ extend self
4
+
5
+ def query(collection, match, group)
6
+ collection.aggregate([
7
+ {
8
+ '$match' => match
9
+ },
10
+ {
11
+ '$group' => {
12
+ _id: ensure_bling(group),
13
+ count: {
14
+ '$sum' => 1
15
+ }
16
+ }
17
+ }
18
+ ]).each_with_object({}) do |element, h|
19
+ h[element['_id']] = element['count']
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def ensure_bling(group)
26
+ group.to_s.sub(/^\$?/, '$')
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,5 @@
1
+ module Mongoid
2
+ module Frequency
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mongoid_frequency
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Steve McHail
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-04-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: mongoid
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '3.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '2.14'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '2.14'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: pry
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: guard
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: guard-rspec
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: database_cleaner
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description: Generate frequency maps using mongodb aggregations
127
+ email:
128
+ - mchail@gmail.com
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - lib/mongoid_frequency/collection.rb
134
+ - lib/mongoid_frequency/criteria.rb
135
+ - lib/mongoid_frequency/query.rb
136
+ - lib/mongoid_frequency/version.rb
137
+ - lib/mongoid_frequency.rb
138
+ - README.md
139
+ homepage: http://github.com/perfectaudience/mongoid_frequency
140
+ licenses:
141
+ - MIT
142
+ post_install_message:
143
+ rdoc_options: []
144
+ require_paths:
145
+ - lib
146
+ required_ruby_version: !ruby/object:Gem::Requirement
147
+ none: false
148
+ requirements:
149
+ - - ! '>='
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: 1.3.6
158
+ requirements: []
159
+ rubyforge_project: mongoid_frequency
160
+ rubygems_version: 1.8.23
161
+ signing_key:
162
+ specification_version: 3
163
+ summary: Generate frequency maps using mongodb aggregations
164
+ test_files: []