mongous 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/.rspec +3 -0
- data/.travis.yml +6 -0
- data/Gemfile +5 -0
- data/README.adoc +239 -0
- data/README.ja.adoc +238 -0
- data/Rakefile +96 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/mongous.rb +11 -0
- data/lib/mongous/base.rb +68 -0
- data/lib/mongous/document.rb +159 -0
- data/lib/mongous/extention.rb +167 -0
- data/lib/mongous/filter.rb +124 -0
- data/lib/mongous/version.rb +3 -0
- data/mongous.gemspec +26 -0
- data/sample/connect_auto_1.rb +14 -0
- data/sample/connect_auto_2.rb +15 -0
- data/sample/connect_default_1.rb +14 -0
- data/sample/connect_default_2.rb +15 -0
- data/sample/connect_environ_1.rb +14 -0
- data/sample/connect_environ_2.rb +15 -0
- data/sample/connect_loadfile_1.rb +15 -0
- data/sample/connect_loadfile_2.rb +16 -0
- data/sample/connect_mongo.yml +15 -0
- data/sample/declare_compact_1.rb +27 -0
- data/sample/declare_label_1.rb +39 -0
- data/sample/declare_ndex_1.rb +41 -0
- data/sample/declare_ndex_2.rb +41 -0
- data/sample/declare_strict_1.rb +47 -0
- data/sample/declare_strict_2.rb +35 -0
- data/sample/multi_docs_1.rb +27 -0
- data/sample/multi_docs_2.rb +58 -0
- data/sample/query_basic_1.rb +18 -0
- data/sample/query_basic_2.rb +18 -0
- data/sample/query_basic_3.rb +19 -0
- data/sample/query_basic_4.rb +25 -0
- data/sample/query_basic_5.rb +39 -0
- data/sample/query_detail_1.rb +24 -0
- data/sample/query_detail_2.rb +23 -0
- data/sample/query_detail_3.rb +29 -0
- data/sample/query_limit_1.rb +44 -0
- data/sample/query_order_1.rb +49 -0
- data/sample/query_projection_1.rb +44 -0
- data/sample/query_raw_1.rb +33 -0
- data/sample/save_basic_1.rb +13 -0
- data/sample/save_basic_2.rb +18 -0
- data/sample/save_basic_3.rb +13 -0
- data/sample/save_detail_1.rb +34 -0
- data/sample/save_detail_2.rb +34 -0
- data/sample/save_detail_3.rb +40 -0
- data/sample/save_verify_1.rb +46 -0
- data/sample/save_verify_2.rb +28 -0
- data/sample/save_verify_3.rb +26 -0
- data/sample/save_verify_4.rb +29 -0
- data/sample/save_verify_5.rb +23 -0
- data/sample/save_verify_6.rb +23 -0
- data/sample/template_article.rb +5 -0
- data/sample/template_person.rb +12 -0
- data/sample/zap_basic_1.rb +11 -0
- data/sample/zap_basic_2.rb +11 -0
- data/sample/zap_basic_3.rb +11 -0
- metadata +147 -0
@@ -0,0 +1,124 @@
|
|
1
|
+
|
2
|
+
module Mongous
|
3
|
+
class Filter
|
4
|
+
def initialize( klass )
|
5
|
+
@klass = klass
|
6
|
+
@filter = {}
|
7
|
+
@option = {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def filter( _filter )
|
11
|
+
hash = {}
|
12
|
+
_filter.each do |key, item|
|
13
|
+
case item
|
14
|
+
when Array
|
15
|
+
hash[key] = {"$in"=>item}
|
16
|
+
|
17
|
+
when Range
|
18
|
+
_begin_oper = "$gte"
|
19
|
+
_end_oper = item.exclude_end? ? "$lt" : "$lte"
|
20
|
+
|
21
|
+
if item.begin && item.end
|
22
|
+
hash[key] = { _begin_oper => item.begin, _end_oper => item.end }
|
23
|
+
|
24
|
+
elsif !item.begin && item.end
|
25
|
+
hash[key] = { _end_oper => item.end }
|
26
|
+
|
27
|
+
elsif item.begin && !item.end
|
28
|
+
hash[key] = { _begin_oper => item.begin }
|
29
|
+
|
30
|
+
else
|
31
|
+
raise Mongous::Error, "invalid range. : #{ item }"
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
else
|
36
|
+
hash[key] = item
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
@filter.merge!( hash )
|
41
|
+
self.dup
|
42
|
+
end
|
43
|
+
|
44
|
+
def option( _option )
|
45
|
+
self.option!( _option )
|
46
|
+
self.dup
|
47
|
+
end
|
48
|
+
|
49
|
+
def option!( _option )
|
50
|
+
@option.merge!( _option )
|
51
|
+
end
|
52
|
+
|
53
|
+
def projection( _projection )
|
54
|
+
self.projection!( _projection )
|
55
|
+
self.dup
|
56
|
+
end
|
57
|
+
alias :select :projection
|
58
|
+
|
59
|
+
def projection!( _projection )
|
60
|
+
@projection = _projection
|
61
|
+
end
|
62
|
+
|
63
|
+
def sort( _sort )
|
64
|
+
self.sort!( _sort )
|
65
|
+
self.dup
|
66
|
+
end
|
67
|
+
alias :order :sort
|
68
|
+
|
69
|
+
def sort!( _sort )
|
70
|
+
@sort = _sort
|
71
|
+
end
|
72
|
+
|
73
|
+
def skip( _skip )
|
74
|
+
self.skip!( _skip )
|
75
|
+
self.dup
|
76
|
+
end
|
77
|
+
alias :offset :skip
|
78
|
+
|
79
|
+
def skip!( _skip )
|
80
|
+
@skip = _skip
|
81
|
+
end
|
82
|
+
|
83
|
+
def limit( _limit )
|
84
|
+
self.limit!( _limit )
|
85
|
+
self.dup
|
86
|
+
end
|
87
|
+
|
88
|
+
def limit!( _limit )
|
89
|
+
@limit = _limit
|
90
|
+
end
|
91
|
+
|
92
|
+
def do_find
|
93
|
+
_filter = @filter
|
94
|
+
_option = @option
|
95
|
+
_option[:projection] = @projection if @projection
|
96
|
+
found = @klass.collection.find( _filter, _option )
|
97
|
+
found = found.sort( @sort ) if @sort
|
98
|
+
found = found.skip( @skip ) if @skip
|
99
|
+
found = found.limit( @limit ) if @limit
|
100
|
+
found
|
101
|
+
end
|
102
|
+
|
103
|
+
def first
|
104
|
+
doc = do_find.first
|
105
|
+
@klass.new( **doc ) if doc
|
106
|
+
end
|
107
|
+
|
108
|
+
def all
|
109
|
+
do_find.map do |doc|
|
110
|
+
@klass.new( **doc )
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def each( &block )
|
115
|
+
all.each( &block )
|
116
|
+
end
|
117
|
+
|
118
|
+
def delete
|
119
|
+
_filter = @filter
|
120
|
+
@klass.collection.delete_many( _filter )
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
data/mongous.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative 'lib/mongous/version'
|
2
|
+
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = "mongous"
|
5
|
+
spec.version = Mongous::VERSION
|
6
|
+
spec.authors = ["ARIMA Yasuhiro"]
|
7
|
+
spec.email = ["arima.yasuhiro@gmail.com"]
|
8
|
+
|
9
|
+
spec.summary = %q{ Yet another mongo wrapper library. }
|
10
|
+
spec.description = %q{ It depends only on mongodb and bson, except for the built-in and standard attachment libraries. }
|
11
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
|
12
|
+
|
13
|
+
# Specify which files should be added to the gem when it is released.
|
14
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
15
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
16
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
end
|
18
|
+
spec.bindir = "exe"
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_runtime_dependency "mongo", "~> 2.13"
|
23
|
+
|
24
|
+
spec.add_development_dependency "rake", "~> 12.0"
|
25
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
26
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
require "mongous"
|
3
|
+
|
4
|
+
filepath = File.join( File.dirname(__FILE__), "connect_mongo.yml" )
|
5
|
+
Mongous.connect!( file: filepath, mode: ENV["RACK_ENV"] || "development" )
|
6
|
+
|
7
|
+
class Book
|
8
|
+
include Mongous::Document
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
Book.each do |book|
|
13
|
+
p book
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
require "mongous"
|
3
|
+
|
4
|
+
filepath = File.join( File.dirname(__FILE__), "connect_mongo.yml" )
|
5
|
+
$client = Mongous.connect( file: filepath, mode: ENV["RACK_ENV"] || "development" )
|
6
|
+
|
7
|
+
class Book
|
8
|
+
include Mongous::Document
|
9
|
+
set_client $client
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
Book.each do |book|
|
14
|
+
p book
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
require "mongous"
|
3
|
+
|
4
|
+
Mongous.connect!
|
5
|
+
|
6
|
+
class Book
|
7
|
+
include Mongous::Document
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
book = Book.new
|
12
|
+
book.title = "title compact"
|
13
|
+
book.author = "foobar"
|
14
|
+
book.publisher = nil
|
15
|
+
book.style = "A4"
|
16
|
+
book.price = 100
|
17
|
+
book.page = 100
|
18
|
+
# book.publish_at = nil # (default)
|
19
|
+
# book.isbn = "978-3-16-148410-0"
|
20
|
+
# book.lang = nil # (default)
|
21
|
+
book.save
|
22
|
+
|
23
|
+
|
24
|
+
Book.each do |book|
|
25
|
+
pp book
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
require "mongous"
|
3
|
+
|
4
|
+
Mongous.connect!
|
5
|
+
|
6
|
+
class Book
|
7
|
+
include Mongous::Document
|
8
|
+
|
9
|
+
field :title
|
10
|
+
field :author
|
11
|
+
field :publisher
|
12
|
+
field :style
|
13
|
+
field :price
|
14
|
+
field :page
|
15
|
+
field :publish_at
|
16
|
+
field :isbn
|
17
|
+
field :lang
|
18
|
+
|
19
|
+
verify :strict
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
book = Book.new
|
24
|
+
book.title = "title label"
|
25
|
+
book.author = "foobar"
|
26
|
+
book.publisher = nil
|
27
|
+
book.style = "A5"
|
28
|
+
book.price = 200
|
29
|
+
book.page = 200
|
30
|
+
# book.publish_at = nil # (default)
|
31
|
+
# book.isbn = "978-3-16-148410-0"
|
32
|
+
# book.lang = nil # (default)
|
33
|
+
book.save
|
34
|
+
|
35
|
+
|
36
|
+
Book.each do |book|
|
37
|
+
pp book
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
|
2
|
+
require "mongous"
|
3
|
+
|
4
|
+
Mongous.connect!
|
5
|
+
|
6
|
+
class Book
|
7
|
+
include Mongous::Document
|
8
|
+
|
9
|
+
field :title, String, :must
|
10
|
+
field :author
|
11
|
+
field :publisher
|
12
|
+
field :style
|
13
|
+
field :price
|
14
|
+
field :page
|
15
|
+
field :publish_at
|
16
|
+
field :isbn
|
17
|
+
field :lang
|
18
|
+
|
19
|
+
index :title
|
20
|
+
|
21
|
+
verify :strict
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
book = Book.new
|
26
|
+
book.title = "title strict"
|
27
|
+
book.author = "foobar"
|
28
|
+
book.publisher = nil
|
29
|
+
book.style = "A6"
|
30
|
+
book.price = 300
|
31
|
+
book.page = 300
|
32
|
+
# book.publish_at = nil # (default)
|
33
|
+
book.isbn = "978-3-16-148410-0"
|
34
|
+
# book.lang = nil # (default)
|
35
|
+
book.save
|
36
|
+
|
37
|
+
|
38
|
+
Book.each do |book|
|
39
|
+
pp book
|
40
|
+
end
|
41
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
|
2
|
+
require "mongous"
|
3
|
+
|
4
|
+
Mongous.connect!
|
5
|
+
|
6
|
+
class Book
|
7
|
+
include Mongous::Document
|
8
|
+
|
9
|
+
field :title, String, :must
|
10
|
+
field :author
|
11
|
+
field :publisher
|
12
|
+
field :style
|
13
|
+
field :price
|
14
|
+
field :page
|
15
|
+
field :publish_at
|
16
|
+
field :isbn
|
17
|
+
field :lang
|
18
|
+
|
19
|
+
index :isbn, unique: true
|
20
|
+
|
21
|
+
verify :strict
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
book = Book.new
|
26
|
+
book.title = "title strict"
|
27
|
+
book.author = "foobar"
|
28
|
+
book.publisher = nil
|
29
|
+
book.style = "A6"
|
30
|
+
book.price = 300
|
31
|
+
book.page = 300
|
32
|
+
# book.publish_at = nil # (default)
|
33
|
+
book.isbn = "978-3-16-148410-0"
|
34
|
+
# book.lang = nil # (default)
|
35
|
+
book.save
|
36
|
+
|
37
|
+
|
38
|
+
Book.each do |book|
|
39
|
+
pp book
|
40
|
+
end
|
41
|
+
|