cx-mongo_query 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d561f30f7d359c55f678226e08b2a10878cb435a
4
+ data.tar.gz: c3d23c9b981b740729b09ad457e4f19336dfcf0f
5
+ SHA512:
6
+ metadata.gz: a403e6a1f7978f8a4204761422f6734980495b0a2305b288cf33c5b2c9a9a7823e3b448f1fd417560885beaf187e14dc723cf9b420b42656161640c1655d2372
7
+ data.tar.gz: b9658f254526232bb2ddf2870636fe4833b44de88b99062a0c593ca082f4843d1d34ed48d7b578ca88bf32f27eae53fd5a387f7bdd8c17031b33e667d925bd1b
@@ -0,0 +1,19 @@
1
+ tasks
2
+ .idea
3
+ *.gem
4
+ *.rbc
5
+ .bundle
6
+ .config
7
+ .yardoc
8
+ Gemfile.lock
9
+ InstalledFiles
10
+ _yardoc
11
+ coverage
12
+ doc/
13
+ lib/bundler/man
14
+ pkg
15
+ rdoc
16
+ spec/reports
17
+ test/tmp
18
+ test/version_tmp
19
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in volt-watch.gemspec
4
+ gemspec
@@ -0,0 +1,20 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'cx/mongo_query/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'cx-mongo_query'
8
+ spec.version = CX::Mongo::Query::VERSION
9
+ spec.date = '2015-10-02'
10
+ spec.summary = 'Shorthand helpers for constructing readable Mongo query args in Ruby'
11
+ spec.authors = ['Colin Gunn']
12
+ spec.email = 'colgunn@icloud.com'
13
+ spec.homepage = 'http://rubygemspec.org/gems/cx-mongo_query' # TODO: push to rubygems ??
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+ end
@@ -0,0 +1 @@
1
+ require 'cx/mongo_query/operators.rb'
@@ -0,0 +1,172 @@
1
+ # http://docs.mongodb.org/manual/reference/operator/query/
2
+ #
3
+ # COMPARISON
4
+ # ---- -------------------------
5
+ # Name Description
6
+ # ---- -------------------------
7
+ # $eq Matches values that are equal to a specified value.
8
+ # $gt Matches values that are greater than a specified value.
9
+ # $gte Matches values that are greater than or equal to a specified value.
10
+ # $lt Matches values that are less than a specified value.
11
+ # $lte Matches values that are less than or equal to a specified value.
12
+ # $ne Matches all values that are not equal to a specified value.
13
+ # $in Matches any of the values specified in an array.
14
+ # $nin Matches none of the values specified in an array.
15
+ #
16
+ # LOGICAL
17
+ # ---- -------------------------
18
+ # Name Description
19
+ # ---- -------------------------
20
+ # $or Joins query clauses with a logical OR : returns all documents that match the conditions of either clause.
21
+ # $and Joins query clauses with a logical AND : returns all documents that match the conditions of both clauses.
22
+ # $not Inverts the effect of a query expression : returns documents that do not match the query expression.
23
+ # $nor Joins query clauses with a logical NOR : returns all documents that fail to match both clauses.
24
+ #
25
+ # EG
26
+ #
27
+ # db.inventory.find( { qty: { $gte: 20 } } )
28
+ #
29
+ # db.inventory.update( { "carrier.fee": { $gte: 2 } }, { $set: { price: 9.99 } } )
30
+ #
31
+ # db.inventory.find( { $and: [ { price: { $ne: 1.99 } }, { price: { $exists: true } } ] } )
32
+ #
33
+ # db.inventory.find( { qty: { $nin: [ 5, 15 ] } } )
34
+ #
35
+ # db.inventory.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } )
36
+ #
37
+ # DB.bars.find(symbol: 'AAPL', $and => [{date: {$gte => '20150615'}}, {date: {$lte => '20150618'}} ])
38
+ #
39
+ # db.inventory.find( {
40
+ # $and : [
41
+ # { $or : [ { price : 0.99 }, { price : 1.99 } ] },
42
+ # { $or : [ { sale : true }, { qty : { $lt : 20 } } ] }
43
+ # ]
44
+ # } )
45
+ #
46
+ # REGEX SYNTAX
47
+ # { <field>: { $regex: /pattern/, $options: '<options>' } }
48
+ # { <field>: { $regex: 'pattern', $options: '<options>' } }
49
+ # { <field>: { $regex: /pattern/<options> } }
50
+ #
51
+ # REGEX EG
52
+ # { name: { $in: [ /^acme/i, /^ack/ ] } }
53
+ # { name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } }
54
+ # { name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } }
55
+ # { name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } }
56
+ #
57
+ # REGEX REF
58
+ # http://docs.mongodb.org/manual/reference/operator/query/regex/#op._S_regex
59
+ #
60
+ #
61
+ # TODO: add all mongo query and projection stuff
62
+
63
+ # COMPARISON
64
+ $eq = '$eq'
65
+ $ne = '$ne'
66
+ $gt = '$gt'
67
+ $gte = '$gte'
68
+ $lt = '$lt'
69
+ $lte = '$lte'
70
+ $in = '$in'
71
+ $nin = '$nin'
72
+ # LOGICAL
73
+ $and = '$and'
74
+ $or = '$or'
75
+ $not = '$not'
76
+ $nor = '$nor'
77
+ # REGEX
78
+ $regex = '$regex'
79
+ $options = '$options'
80
+
81
+
82
+
83
+ # Include this module or use as module_function.
84
+ # EG
85
+ # and( eq(:name, 'Smith'), eq(:dob, '19991231'))
86
+ # =>
87
+ # {"$and"=>[{"name"=>{"$eq"=>"Fred"}}, {"dob"=>{"$eq"=>"19991231"}}]}
88
+ module CX; module Mongo
89
+ module Query
90
+
91
+ module_function
92
+
93
+ # COMPARISON OPS
94
+ def eq( attr, val ); { attr.to_s => { $eq => val } } end
95
+ def ne( attr, val ); { attr.to_s => { $ne => val } } end
96
+ def gt( attr, val ); { attr.to_s => { $gt => val } } end
97
+ def ge( attr, val ); { attr.to_s => { $gte => val } } end
98
+ def lt( attr, val ); { attr.to_s => { $lt => val } } end
99
+ def le( attr, val ); { attr.to_s => { $lte => val } } end
100
+ def in( attr, *vals ); { attr.to_s => { $in => vals } } end
101
+ def nin( attr, *vals ); { attr.to_s => { $nin => vals } } end
102
+ def in_s( attr, str ); { attr.to_s => { $in => str } } end
103
+ def nin_s( attr, str ); { attr.to_s => { $nin => str } } end
104
+
105
+ # LOGICAL OPS
106
+ def and( *args ); { $and => args } end # one or more query args
107
+ def or( *args ); { $or => args } end # one or more query args
108
+ def nor( *args ); { $nor => args } end # one or more query args
109
+ def not( arg ); { $not => arg } end # single query argument only
110
+
111
+ # REGEX EXPRESSION
112
+ def rx(pattern, *qualifiers)
113
+ r = { $regex => pattern }
114
+ qualifiers.each {|q| r.merge!(q)}
115
+ r
116
+ end
117
+
118
+ # REGEX OPTIONS
119
+ def rxo(string)
120
+ { $options => string.to_s }
121
+ end
122
+
123
+ # Intended for use in monkey patching String and Symbol
124
+ module Postfix
125
+ def eq(val); { self.to_s => { $eq => val } } end
126
+ def ne(val); { self.to_s => { $ne => val } } end
127
+ def gt(val); { self.to_s => { $gt => val } } end
128
+ def ge(val); { self.to_s => { $gte => val } } end
129
+ def lt(val); { self.to_s => { $lt => val } } end
130
+ def le(val); { self.to_s => { $lte => val } } end
131
+ def in(*vals); { self.to_s => { $in => vals } } end
132
+ def nin(*vals); { self.to_s => { $nin => vals } } end
133
+ end
134
+ end
135
+ end end
136
+
137
+ # EG
138
+ # Using string as an attribute name:
139
+ # 'name'.ne('Colin') => {"name"=>{"$gte"=>"Colin"}}
140
+ # 'date'.le('20151231') => {"date"=>{"$lte"=>"20151231"}}
141
+ #
142
+ # Using string as target of $in and $nin operators
143
+ # 'abcdefg'.nin => {"$nin"=>"abcdefg"}
144
+ class String
145
+ include CX::Mongo::Query::Postfix
146
+ def rxo; CX::Mongo::Query.rxo(self) end
147
+ def in; CX::Mongo::Query.in_s(self) end
148
+ def nin; CX::Mongo::Query.nin_s(self) end
149
+ end
150
+
151
+ # EG
152
+ #
153
+ # Using symbol as an attribute name:
154
+ # :name.ne('Colin')
155
+ # :date.le('20151231')
156
+ #
157
+ class Symbol
158
+ include CX::Mongo::Query::Postfix
159
+ end
160
+
161
+ # EG
162
+ # either
163
+ # /.*/.qrx('i'.qrxo, 'abcdefg'))
164
+ # or
165
+ # $q.regex(/.*/, $q.options('i'), $q.in_string('abcdefg'))
166
+ class Regexp
167
+ def rx(*qualifiers)
168
+ CX::Mongo::Query.rx(self, *qualifiers)
169
+ end
170
+ end
171
+
172
+
@@ -0,0 +1,5 @@
1
+ module CX; module Mongo
2
+ module Query
3
+ VERSION = '1.0.0'
4
+ end
5
+ end end
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cx-mongo_query
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Colin Gunn
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-02 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email: colgunn@icloud.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - ".gitignore"
20
+ - Gemfile
21
+ - cx-mongo_query.gemspec
22
+ - lib/cx/mongo_query.rb
23
+ - lib/cx/mongo_query/operators.rb
24
+ - lib/cx/mongo_query/version.rb
25
+ homepage: http://rubygemspec.org/gems/cx-mongo_query
26
+ licenses:
27
+ - MIT
28
+ metadata: {}
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ required_rubygems_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ requirements: []
44
+ rubyforge_project:
45
+ rubygems_version: 2.4.6
46
+ signing_key:
47
+ specification_version: 4
48
+ summary: Shorthand helpers for constructing readable Mongo query args in Ruby
49
+ test_files: []
50
+ has_rdoc: