mongoid-crud 1.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/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: []
|