mongoid-crud 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +2 -0
- data/LICENSE +20 -0
- data/README.md +47 -0
- data/Rakefile +1 -0
- data/VERSION +1 -0
- data/examples/crud.rb +28 -0
- data/examples/helper/connection.rb +2 -0
- data/examples/helper/models.rb +34 -0
- data/examples/helper/mongoid.yml +6 -0
- data/lib/mongoid-crud.rb +103 -0
- data/mongoid-crud.gemspec +22 -0
- metadata +97 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b7086bf12049b8739ecbc8aeedeefb60c897087d
|
4
|
+
data.tar.gz: 24afb72a0b0710c5e8fde42360515d4f7d506300
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e1c752a14299e935071f1709c9c37db4da4f7dc865b9680c91ba841acab4fc54a42e85e2a032f0fdb454737e0a08d15b216f721e646118cfbae1927d7e222e76
|
7
|
+
data.tar.gz: b7ba1bb51b0d702657268ee22ad69a0ff10b9ae0538484fd5377bcbd5c19f116ac2df837926c5cfc6221c9b01b733a9a72f6fce2842204939e3eb1181f898391
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2013 Adam Luzsi
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
mongoid-crud
|
2
|
+
============
|
3
|
+
|
4
|
+
CRUD methods for mongoid
|
5
|
+
Four super simple to use method on any mongoid model.
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
|
9
|
+
__create__
|
10
|
+
__read__
|
11
|
+
__update__
|
12
|
+
__delete__
|
13
|
+
|
14
|
+
```
|
15
|
+
|
16
|
+
### Example
|
17
|
+
|
18
|
+
```ruby
|
19
|
+
|
20
|
+
test_a= TestA.__create__ hello: "world"
|
21
|
+
#> TestA obj return
|
22
|
+
|
23
|
+
test_b= TestB.__create__( hello: "world", world: "no", parent_id: test_a['_id'] )
|
24
|
+
#> TestB obj return
|
25
|
+
|
26
|
+
TestB.__read__( hello: "world", world: "no", parent_id: test_a['_id'] ).each{|e|puts(e.inspect)}
|
27
|
+
#> search by parent_id + query , mongoid criteria return
|
28
|
+
|
29
|
+
puts TestB.__read__( _id: test_b['_id'] ).inspect
|
30
|
+
#> search for target _id in embeds, object return
|
31
|
+
|
32
|
+
TestB.__read__( hello: "world", world: "no" ).inspect
|
33
|
+
#> search all embeds by query , return in simple array
|
34
|
+
|
35
|
+
TestB.__update__ _id: test_b['_id'], hello: "sup!"
|
36
|
+
#> true
|
37
|
+
|
38
|
+
TestB.__read__( _id: test_b['_id'] )
|
39
|
+
#> TestB Obj
|
40
|
+
|
41
|
+
TestB.__delete__( _id: test_b['_id'] )
|
42
|
+
#> true
|
43
|
+
|
44
|
+
TestB.__read__( _id: test_b['_id'] )
|
45
|
+
#> nil
|
46
|
+
|
47
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require File.join"bundler","gem_tasks"
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.1.0
|
data/examples/crud.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require_relative "../lib/mongoid-crud"
|
2
|
+
require_relative "helper/connection"
|
3
|
+
require_relative "helper/models"
|
4
|
+
|
5
|
+
test_a= TestA.__create__( hello: "world" )
|
6
|
+
test_b= TestB.__create__( hello: "world", world: "no", parent_id: test_a['_id'] )
|
7
|
+
test_C= TestC.__create__( hello: "embeds one", parent_id: test_a['_id'] )
|
8
|
+
|
9
|
+
#> puts into json
|
10
|
+
puts TestA._read( _id: test_a['_id'] ).to_json
|
11
|
+
# [{"_id":"536b298b241548e55a000001","created_at":"2014-05-08T08:51:55+02:00","hello":"world","test_b":[{"_id":"536b298b241548e55a000002","created_at":"2014-05-08T08:51:55+02:00","hello":"world","updated_at":"2014-05-08T08:51:55+02:00","world":"no"}],"test_c":{"_id":"536b298b241548e55a000003","created_at":"2014-05-08T08:51:55+02:00","hello":"embeds one","updated_at":"2014-05-08T08:51:55+02:00"},"updated_at":"2014-05-08T08:51:55+02:00"}]
|
12
|
+
|
13
|
+
TestB.__read__( hello: "world", world: "no", parent_id: test_a['_id'] ).each{|e|puts(e.inspect)}
|
14
|
+
#> search by parent_id + query
|
15
|
+
|
16
|
+
puts TestB.__read__( _id: test_b['_id'] ).inspect
|
17
|
+
#> search for target _id in embeds
|
18
|
+
|
19
|
+
puts TestB.__read__( hello: "world", world: "no" ).inspect
|
20
|
+
#> search all embeds by query
|
21
|
+
|
22
|
+
puts TestB.__update__ _id: test_b['_id'], hello: "sup!"
|
23
|
+
|
24
|
+
puts TestB.__read__( _id: test_b['_id'] ).inspect
|
25
|
+
puts TestB.__delete__( _id: test_b['_id'] ).inspect
|
26
|
+
puts TestB.__read__( _id: test_b['_id'] ).inspect
|
27
|
+
|
28
|
+
Mongoid.purge!
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
class TestA
|
3
|
+
|
4
|
+
include Mongoid::Document
|
5
|
+
include Mongoid::Timestamps
|
6
|
+
include Mongoid::CRUD #> but you should use extend for right use!
|
7
|
+
|
8
|
+
store_in :collection => self.mongoid_name
|
9
|
+
|
10
|
+
embeds_many :TestB.mongoid_name
|
11
|
+
embeds_one :TestC.mongoid_name
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
class TestB
|
16
|
+
|
17
|
+
include Mongoid::Document
|
18
|
+
include Mongoid::Timestamps
|
19
|
+
include Mongoid::CRUD
|
20
|
+
|
21
|
+
embedded_in :TestA.mongoid_name
|
22
|
+
embeds_many :TestC.mongoid_name
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
class TestC
|
27
|
+
|
28
|
+
include Mongoid::Document
|
29
|
+
include Mongoid::Timestamps
|
30
|
+
include Mongoid::CRUD
|
31
|
+
|
32
|
+
embedded_in :TestA.mongoid_name
|
33
|
+
|
34
|
+
end
|
data/lib/mongoid-crud.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'mongoid'
|
2
|
+
require 'mongoid-dsl'
|
3
|
+
|
4
|
+
module Mongoid
|
5
|
+
|
6
|
+
module CRUD
|
7
|
+
|
8
|
+
module Extend
|
9
|
+
|
10
|
+
@@parent_sym= :parent_id
|
11
|
+
|
12
|
+
def __create__ *args
|
13
|
+
|
14
|
+
query = Hash[*args.select{|e| e.class <= ::Hash }]
|
15
|
+
classes = args.select{|e| e.class <= ::Class }
|
16
|
+
|
17
|
+
if self.embedded?
|
18
|
+
|
19
|
+
raise(ArgumentError,"for embeded document, you need :#{@@parent_sym}") if query[@@parent_sym].nil?
|
20
|
+
parent_model= self._get_class_path(*classes).pinch.last
|
21
|
+
|
22
|
+
case parent_model.relation_connection_type(self).to_s.downcase.split('::').last.to_sym
|
23
|
+
|
24
|
+
when :many
|
25
|
+
return self._get_class_path(*classes).pinch.last._find(query.delete(@@parent_sym)).__send__(self.mongoid_name).create!(query)
|
26
|
+
|
27
|
+
when :one
|
28
|
+
return self._get_class_path(*classes).pinch.last._find(query.delete(@@parent_sym)).__send__("create_#{self.mongoid_name}",query)
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
else
|
33
|
+
return self.create!(query)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
alias _create __create__
|
38
|
+
|
39
|
+
def __read__ *args
|
40
|
+
|
41
|
+
query = Hash[*args.select{|e| e.class <= ::Hash }]
|
42
|
+
classes = args.select{|e| e.class <= ::Class }
|
43
|
+
|
44
|
+
if self.embedded?
|
45
|
+
|
46
|
+
parent_id = query.delete(@@parent_sym)
|
47
|
+
_id = query.delete('_id')
|
48
|
+
|
49
|
+
if !_id.nil?
|
50
|
+
return self._find(_id)#.__send__(self.mongoid_name).create(query)
|
51
|
+
elsif !query[@@parent_sym].nil?
|
52
|
+
return self._get_class_path(*classes).pinch.last._find(parent_id).__send__(self.mongoid_name).where(query)
|
53
|
+
else
|
54
|
+
return self._where(query)
|
55
|
+
end
|
56
|
+
|
57
|
+
else
|
58
|
+
return self.where(query)
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
alias _read __read__
|
63
|
+
|
64
|
+
def __update__ *args
|
65
|
+
|
66
|
+
query = Hash[*args.select{|e| e.class <= ::Hash }]
|
67
|
+
classes = args.select{|e| e.class <= ::Class }
|
68
|
+
|
69
|
+
raise(ArgumentError,"to #{__method__} document, you need :_id") if query[:_id].nil?
|
70
|
+
var= self._find(query.delete(:_id))
|
71
|
+
query.each{|k,v| var[k]= v }
|
72
|
+
return var.save!
|
73
|
+
|
74
|
+
end
|
75
|
+
alias _update __update__
|
76
|
+
|
77
|
+
def __delete__ *args
|
78
|
+
|
79
|
+
query = Hash[*args.select{|e| e.class <= ::Hash }]
|
80
|
+
classes = args.select{|e| e.class <= ::Class }
|
81
|
+
|
82
|
+
raise(ArgumentError,"to #{__method__} document, you need :_id") if query[:_id].nil?
|
83
|
+
return self._find(query[:_id]).delete
|
84
|
+
|
85
|
+
end
|
86
|
+
alias _delete __delete__
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
class << self
|
91
|
+
|
92
|
+
def included klass
|
93
|
+
klass.__send__ :extend, self::Extend
|
94
|
+
end
|
95
|
+
|
96
|
+
def extended klass
|
97
|
+
klass.__send__ :extend, self::Extend
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
|
5
|
+
spec.name = "mongoid-crud"
|
6
|
+
spec.version = File.open(File.join(File.dirname(__FILE__),"VERSION")).read.split("\n")[0].chomp.gsub(' ','')
|
7
|
+
spec.authors = ["Adam Luzsi"]
|
8
|
+
spec.email = ["adamluzsi@gmail.com"]
|
9
|
+
spec.description = "four method to rule them all! Use crud methods on mongoid classes to do anything. Super easy to use! Work even on deeply embedded models. Check on GitHub"
|
10
|
+
spec.summary = "CRUD on any mongoid model"
|
11
|
+
|
12
|
+
spec.files = `git ls-files`.split($/)
|
13
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
14
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
15
|
+
spec.require_paths = ["lib"]
|
16
|
+
|
17
|
+
spec.add_development_dependency "bundler"
|
18
|
+
spec.add_development_dependency "rake"
|
19
|
+
|
20
|
+
spec.add_dependency "mongoid-dsl", ">= 1.0.2"
|
21
|
+
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongoid-crud
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Adam Luzsi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-05-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: mongoid-dsl
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.0.2
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.0.2
|
55
|
+
description: four method to rule them all! Use crud methods on mongoid classes to
|
56
|
+
do anything. Super easy to use! Work even on deeply embedded models. Check on GitHub
|
57
|
+
email:
|
58
|
+
- adamluzsi@gmail.com
|
59
|
+
executables: []
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- Gemfile
|
64
|
+
- LICENSE
|
65
|
+
- README.md
|
66
|
+
- Rakefile
|
67
|
+
- VERSION
|
68
|
+
- examples/crud.rb
|
69
|
+
- examples/helper/connection.rb
|
70
|
+
- examples/helper/models.rb
|
71
|
+
- examples/helper/mongoid.yml
|
72
|
+
- lib/mongoid-crud.rb
|
73
|
+
- mongoid-crud.gemspec
|
74
|
+
homepage:
|
75
|
+
licenses: []
|
76
|
+
metadata: {}
|
77
|
+
post_install_message:
|
78
|
+
rdoc_options: []
|
79
|
+
require_paths:
|
80
|
+
- lib
|
81
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
requirements: []
|
92
|
+
rubyforge_project:
|
93
|
+
rubygems_version: 2.2.2
|
94
|
+
signing_key:
|
95
|
+
specification_version: 4
|
96
|
+
summary: CRUD on any mongoid model
|
97
|
+
test_files: []
|