locomotive-mongoid-tree 0.6.2
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.
- data/.rspec +2 -0
- data/Gemfile +6 -0
- data/LICENSE +20 -0
- data/README.rdoc +192 -0
- data/Rakefile +31 -0
- data/lib/mongoid/tree.rb +318 -0
- data/lib/mongoid/tree/ordering.rb +195 -0
- data/lib/mongoid/tree/traversal.rb +119 -0
- data/spec/mongoid/tree/ordering_spec.rb +328 -0
- data/spec/mongoid/tree/traversal_spec.rb +175 -0
- data/spec/mongoid/tree_spec.rb +382 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/support/macros/tree_macros.rb +44 -0
- data/spec/support/models/node.rb +28 -0
- metadata +125 -0
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
|
4
|
+
require 'mongoid'
|
5
|
+
require 'mongoid/tree'
|
6
|
+
|
7
|
+
require 'rspec'
|
8
|
+
|
9
|
+
Mongoid.configure do |config|
|
10
|
+
config.master = Mongo::Connection.new.db('mongoid_tree_test')
|
11
|
+
config.allow_dynamic_fields = false
|
12
|
+
end
|
13
|
+
|
14
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
15
|
+
|
16
|
+
RSpec.configure do |config|
|
17
|
+
config.mock_with :rspec
|
18
|
+
config.after :each do
|
19
|
+
Mongoid.master.collections.reject { |c| c.name =~ /^system\./ }.each(&:drop)
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Mongoid::Tree::TreeMacros
|
4
|
+
|
5
|
+
def setup_tree(tree)
|
6
|
+
create_tree(YAML.load(tree))
|
7
|
+
end
|
8
|
+
|
9
|
+
def node(name)
|
10
|
+
@nodes[name].reload
|
11
|
+
end
|
12
|
+
|
13
|
+
def print_tree(node, inspect = false, depth = 0)
|
14
|
+
print ' ' * depth
|
15
|
+
print '- ' unless depth == 0
|
16
|
+
print node.name
|
17
|
+
print " (#{node.inspect})" if inspect
|
18
|
+
print ':' if node.children.any?
|
19
|
+
print "\n"
|
20
|
+
node.children.each { |c| print_tree(c, inspect, depth + 1) }
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
def create_tree(object)
|
25
|
+
case object
|
26
|
+
when String then return create_node(object)
|
27
|
+
when Array then object.each { |tree| create_tree(tree) }
|
28
|
+
when Hash then
|
29
|
+
name, children = object.first
|
30
|
+
node = create_node(name)
|
31
|
+
children.each { |c| node.children << create_tree(c) }
|
32
|
+
return node
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def create_node(name)
|
37
|
+
@nodes ||= HashWithIndifferentAccess.new
|
38
|
+
@nodes[name] = subject.create(:name => name)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
RSpec.configure do |config|
|
43
|
+
config.include Mongoid::Tree::TreeMacros
|
44
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Node
|
2
|
+
include Mongoid::Document
|
3
|
+
include Mongoid::Tree
|
4
|
+
include Mongoid::Tree::Traversal
|
5
|
+
|
6
|
+
field :name
|
7
|
+
|
8
|
+
attr_accessible :name
|
9
|
+
end
|
10
|
+
|
11
|
+
class SubclassedNode < Node
|
12
|
+
end
|
13
|
+
|
14
|
+
# Adding ordering on subclasses currently doesn't work as expected.
|
15
|
+
#
|
16
|
+
# class OrderedNode < Node
|
17
|
+
# include Mongoid::Tree::Ordering
|
18
|
+
# end
|
19
|
+
class OrderedNode
|
20
|
+
include Mongoid::Document
|
21
|
+
include Mongoid::Tree
|
22
|
+
include Mongoid::Tree::Traversal
|
23
|
+
include Mongoid::Tree::Ordering
|
24
|
+
|
25
|
+
field :name
|
26
|
+
|
27
|
+
attr_accessible :name
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: locomotive-mongoid-tree
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.6.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Benedikt Deicke
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-01-31 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mongoid
|
16
|
+
requirement: &2151887880 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2151887880
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &2151903180 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.8.7
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2151903180
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &2151902360 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '2.3'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2151902360
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rdoc
|
49
|
+
requirement: &2151901680 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.4'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2151901680
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: autotest
|
60
|
+
requirement: &2151900880 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 4.3.2
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2151900880
|
69
|
+
description: A tree structure for Mongoid documents using the materialized path pattern
|
70
|
+
email:
|
71
|
+
- benedikt@synatic.net
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files:
|
75
|
+
- README.rdoc
|
76
|
+
- LICENSE
|
77
|
+
files:
|
78
|
+
- lib/mongoid/tree/ordering.rb
|
79
|
+
- lib/mongoid/tree/traversal.rb
|
80
|
+
- lib/mongoid/tree.rb
|
81
|
+
- spec/mongoid/tree/ordering_spec.rb
|
82
|
+
- spec/mongoid/tree/traversal_spec.rb
|
83
|
+
- spec/mongoid/tree_spec.rb
|
84
|
+
- spec/spec_helper.rb
|
85
|
+
- spec/support/macros/tree_macros.rb
|
86
|
+
- spec/support/models/node.rb
|
87
|
+
- LICENSE
|
88
|
+
- README.rdoc
|
89
|
+
- Rakefile
|
90
|
+
- Gemfile
|
91
|
+
- .rspec
|
92
|
+
homepage: https://github.com/benedikt/mongoid-tree
|
93
|
+
licenses: []
|
94
|
+
post_install_message:
|
95
|
+
rdoc_options:
|
96
|
+
- --main
|
97
|
+
- README.rdoc
|
98
|
+
- --charset=UTF-8
|
99
|
+
require_paths:
|
100
|
+
- lib
|
101
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
103
|
+
requirements:
|
104
|
+
- - ! '>='
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
segments:
|
108
|
+
- 0
|
109
|
+
hash: 1779933615643382818
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
112
|
+
requirements:
|
113
|
+
- - ! '>='
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
segments:
|
117
|
+
- 0
|
118
|
+
hash: 1779933615643382818
|
119
|
+
requirements: []
|
120
|
+
rubyforge_project:
|
121
|
+
rubygems_version: 1.8.10
|
122
|
+
signing_key:
|
123
|
+
specification_version: 3
|
124
|
+
summary: A tree structure for Mongoid documents
|
125
|
+
test_files: []
|