mongous 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
|