mongo3 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. data/.bnignore +3 -0
  2. data/.bnsignore +16 -0
  3. data/.gitignore +1 -0
  4. data/HISTORY +2 -0
  5. data/README.rdoc +78 -0
  6. data/Rakefile +31 -0
  7. data/bin/mongo3 +29 -0
  8. data/config/mongo3.yml +33 -0
  9. data/lib/controllers/collections.rb +7 -0
  10. data/lib/controllers/databases.rb +7 -0
  11. data/lib/controllers/explore.rb +46 -0
  12. data/lib/helpers/crumb_helper.rb +46 -0
  13. data/lib/helpers/main_helper.rb +43 -0
  14. data/lib/main.rb +41 -0
  15. data/lib/mongo3/connection.rb +191 -0
  16. data/lib/mongo3/node.rb +80 -0
  17. data/lib/mongo3.rb +57 -0
  18. data/lib/public/images/c292199_a.jpg +0 -0
  19. data/lib/public/images/close.png +0 -0
  20. data/lib/public/images/close.psd +0 -0
  21. data/lib/public/images/cluster.png +0 -0
  22. data/lib/public/images/cluster.psd +0 -0
  23. data/lib/public/images/db.jpg +0 -0
  24. data/lib/public/images/db.png +0 -0
  25. data/lib/public/images/db.psd +0 -0
  26. data/lib/public/images/delete.png +0 -0
  27. data/lib/public/images/header.png +0 -0
  28. data/lib/public/images/header.psd +0 -0
  29. data/lib/public/images/li_select.png +0 -0
  30. data/lib/public/images/li_select.psd +0 -0
  31. data/lib/public/images/lock.png +0 -0
  32. data/lib/public/images/lock.psd +0 -0
  33. data/lib/public/images/mongo.png +0 -0
  34. data/lib/public/images/mongo.psd +0 -0
  35. data/lib/public/images/mongo3.png +0 -0
  36. data/lib/public/images/mongo3.psd +0 -0
  37. data/lib/public/images/mongo3_db.png +0 -0
  38. data/lib/public/images/mongo3_db.psd +0 -0
  39. data/lib/public/images/mongo_10.psd +0 -0
  40. data/lib/public/images/mongo_db.jpg +0 -0
  41. data/lib/public/images/mongo_db.png +0 -0
  42. data/lib/public/images/mongo_db.psd +0 -0
  43. data/lib/public/images/mongo_db_1.jpg +0 -0
  44. data/lib/public/images/mongo_db_2 +0 -0
  45. data/lib/public/images/mongo_db_4 +0 -0
  46. data/lib/public/images/monkey.jpg +0 -0
  47. data/lib/public/images/monkey.png +0 -0
  48. data/lib/public/images/monkey.psd +0 -0
  49. data/lib/public/images/monkey_1.jpg +8 -0
  50. data/lib/public/images/monkey_10.jpg +8 -0
  51. data/lib/public/javascripts/Jit/Examples/Hypertree/example1.html +57 -0
  52. data/lib/public/javascripts/Jit/Examples/Hypertree/example1.js +427 -0
  53. data/lib/public/javascripts/Jit/Examples/Hypertree/example2.html +58 -0
  54. data/lib/public/javascripts/Jit/Examples/Hypertree/example2.js +310 -0
  55. data/lib/public/javascripts/Jit/Examples/Hypertree/example3.html +199 -0
  56. data/lib/public/javascripts/Jit/Examples/Hypertree/example3.js +615 -0
  57. data/lib/public/javascripts/Jit/Examples/Other/example1.html +58 -0
  58. data/lib/public/javascripts/Jit/Examples/Other/example1.js +566 -0
  59. data/lib/public/javascripts/Jit/Examples/Other/example2.html +58 -0
  60. data/lib/public/javascripts/Jit/Examples/Other/example2.js +304 -0
  61. data/lib/public/javascripts/Jit/Examples/Other/example3.html +58 -0
  62. data/lib/public/javascripts/Jit/Examples/Other/example3.js +304 -0
  63. data/lib/public/javascripts/Jit/Examples/RGraph/example1.html +57 -0
  64. data/lib/public/javascripts/Jit/Examples/RGraph/example1.js +475 -0
  65. data/lib/public/javascripts/Jit/Examples/RGraph/example2.html +58 -0
  66. data/lib/public/javascripts/Jit/Examples/RGraph/example2.js +356 -0
  67. data/lib/public/javascripts/Jit/Examples/RGraph/example3.html +199 -0
  68. data/lib/public/javascripts/Jit/Examples/RGraph/example3.js +622 -0
  69. data/lib/public/javascripts/Jit/Examples/Spacetree/example1.html +91 -0
  70. data/lib/public/javascripts/Jit/Examples/Spacetree/example1.js +890 -0
  71. data/lib/public/javascripts/Jit/Examples/Spacetree/example2.html +90 -0
  72. data/lib/public/javascripts/Jit/Examples/Spacetree/example2.js +213 -0
  73. data/lib/public/javascripts/Jit/Examples/Spacetree/example3.html +75 -0
  74. data/lib/public/javascripts/Jit/Examples/Spacetree/example3.js +863 -0
  75. data/lib/public/javascripts/Jit/Examples/Treemap/example1.html +56 -0
  76. data/lib/public/javascripts/Jit/Examples/Treemap/example1.js +95 -0
  77. data/lib/public/javascripts/Jit/Examples/Treemap/example2.html +61 -0
  78. data/lib/public/javascripts/Jit/Examples/Treemap/example2.js +750 -0
  79. data/lib/public/javascripts/Jit/Examples/Treemap/example3.html +62 -0
  80. data/lib/public/javascripts/Jit/Examples/Treemap/example3.js +775 -0
  81. data/lib/public/javascripts/Jit/Examples/css/Hypertree.css +0 -0
  82. data/lib/public/javascripts/Jit/Examples/css/Other.css +8 -0
  83. data/lib/public/javascripts/Jit/Examples/css/RGraph.css +0 -0
  84. data/lib/public/javascripts/Jit/Examples/css/Spacetree.css +0 -0
  85. data/lib/public/javascripts/Jit/Examples/css/Treemap.css +78 -0
  86. data/lib/public/javascripts/Jit/Examples/css/base.css +106 -0
  87. data/lib/public/javascripts/Jit/Examples/css/col1.png +0 -0
  88. data/lib/public/javascripts/Jit/Examples/css/col2.png +0 -0
  89. data/lib/public/javascripts/Jit/Examples/css/gradient.png +0 -0
  90. data/lib/public/javascripts/Jit/Extras/excanvas.js +35 -0
  91. data/lib/public/javascripts/Jit/jit-yc.js +1 -0
  92. data/lib/public/javascripts/Jit/jit.js +9052 -0
  93. data/lib/public/javascripts/Jit-1.1.3.zip +0 -0
  94. data/lib/public/javascripts/application.js +28 -0
  95. data/lib/public/javascripts/jit.min.js +1 -0
  96. data/lib/public/javascripts/jquery.tools.min.js +38 -0
  97. data/lib/public/javascripts/jquery_min.js +19 -0
  98. data/lib/public/javascripts/jquery_ui_min.js +298 -0
  99. data/lib/public/stylesheets/mongo3.css +275 -0
  100. data/lib/utils.rb +3 -0
  101. data/lib/views/_cltn_info.erb +95 -0
  102. data/lib/views/_collection.erb +5 -0
  103. data/lib/views/_crumbs.erb +13 -0
  104. data/lib/views/_dump_array.erb +5 -0
  105. data/lib/views/_dump_hash.erb +14 -0
  106. data/lib/views/_info.erb +15 -0
  107. data/lib/views/center_js.erb +3 -0
  108. data/lib/views/cltn_show.erb +1 -0
  109. data/lib/views/collection.erb +44 -0
  110. data/lib/views/database.erb +37 -0
  111. data/lib/views/db_show.erb +1 -0
  112. data/lib/views/explore.erb +250 -0
  113. data/lib/views/landscape.erb +45 -0
  114. data/lib/views/layout.erb +28 -0
  115. data/lib/views/more_data_js.erb +3 -0
  116. data/lib/views/show_cltn.erb +1 -0
  117. data/lib/views/update_crumb_js.erb +1 -0
  118. data/spec/mongo3/node_spec.rb +84 -0
  119. data/spec/spec_helper.rb +8 -0
  120. data/tasks/bones.rake +20 -0
  121. data/tasks/gem.rake +201 -0
  122. data/tasks/git.rake +40 -0
  123. data/tasks/notes.rake +27 -0
  124. data/tasks/post_load.rake +32 -0
  125. data/tasks/rdoc.rake +56 -0
  126. data/tasks/rubyforge.rake +55 -0
  127. data/tasks/setup.rb +292 -0
  128. data/tasks/spec.rake +54 -0
  129. data/tasks/svn.rake +47 -0
  130. data/tasks/test.rake +40 -0
  131. data/tasks/zentest.rake +36 -0
  132. metadata +213 -0
@@ -0,0 +1,250 @@
1
+ <div id="crumbs"><%= partial 'crumbs' %></div>
2
+
3
+ <div id="landscape"></div>
4
+
5
+ <div id="right">
6
+ <span id="log"></span>
7
+ <div id="info"></div>
8
+ </div>
9
+
10
+ <div id="details" class="overlay">
11
+ <div id="wrap"></div>
12
+ </div>
13
+
14
+ <script>
15
+
16
+ function center( node_id ) {
17
+ ht.onClick( node_id, {
18
+ Move: { enable: true, offsetX: 30, offsetY: 5 },
19
+ onComplete: function() { update_info( node_id ); } });
20
+ }
21
+
22
+ function morphit( id, json ) {
23
+ ht.op.sum( eval( "(" + json + ")" ),
24
+ {
25
+ type: 'fade:con',
26
+ delay: 10,
27
+ hideLabels: false,
28
+ transition: Trans.Quart.easeOut,
29
+ onComplete: function() { update_info(id); }
30
+ });
31
+ Log.write( "plotting..." );
32
+ }
33
+
34
+ $( function() {
35
+ init_landscape();
36
+ });
37
+
38
+ var Log = {
39
+ log: false,
40
+ write: function(text) {
41
+ if ( ! this.log )
42
+ this.log = $('span#log');
43
+ this.log.show();
44
+ this.log.html( text );
45
+ this.log.css('left', ((500 - this.log.offsetWidth / 2) + 'px') );
46
+ this.log.fadeOut( 5000 );
47
+ }
48
+ };
49
+
50
+ function addEvent(obj, type, fn) {
51
+ if (obj.addEventListener) obj.addEventListener(type, fn, false);
52
+ else obj.attachEvent('on' + type, fn);
53
+ };
54
+
55
+
56
+ function init_landscape() {
57
+ var tree = document.getElementById('landscape');
58
+ var w = tree.offsetWidth - 100, h = tree.offsetHeight - 40;
59
+
60
+ var canvas = new Canvas( 'tree', {
61
+ 'injectInto': 'landscape',
62
+ 'width': w,
63
+ 'height': h
64
+ });
65
+
66
+ var style = document.getElementById('tree').style;
67
+ style.marginLeft = "50px";
68
+ style.marginTop = "10px";
69
+ //init Hypertree
70
+ ht = new Hypertree( canvas, {
71
+ Node: {
72
+ type: 'circle',
73
+ overridable: true,
74
+ dim: 10,
75
+ color: "#7c8a61"
76
+ },
77
+ Edge: {
78
+ overridable: true,
79
+ lineWidth: 1,
80
+ color: " #9a4c4c"
81
+ },
82
+
83
+ onBeforeCompute: function(node) {
84
+ Log.write( "plotting..." );
85
+ },
86
+
87
+ onCreateLabel: function(domElement, node){
88
+ domElement.innerHTML = truncate( unescape(node.name), 15 );
89
+
90
+ addEvent(domElement, 'click', function () {
91
+ var children_count = 0;
92
+ for( var i in node.adjacencies )
93
+ children_count += 1;
94
+
95
+ if ( node.data && children_count == 1 && node.data.dyna )
96
+ {
97
+ Log.write( "fetching new data..." );
98
+ var url = "/explore/more_data/";
99
+ url += node.data.path + "/" + node.data.crumbs + "/";
100
+ $.ajax( {
101
+ dataType: 'script',
102
+ type: 'GET',
103
+ url: url
104
+ });
105
+ }
106
+ else
107
+ {
108
+ if( node.data.path.split( '|' ).length < 4 ) {
109
+ Log.write( "centering..." );
110
+ ht.onClick( node.id, {
111
+ Move: { enable: true, offsetX: 30, offsetY: 5 },
112
+ onComplete: function() {
113
+ update_info( node.id );
114
+ $.ajax( {
115
+ dataType: 'script',
116
+ type: 'GET',
117
+ url: "/explore/update_crumb/" + node.data.path + "/" + node.data.crumbs });
118
+ } });
119
+ }
120
+ else {
121
+ Log.write( "no more data" );
122
+ }
123
+ }
124
+ });
125
+ },
126
+
127
+ onPlaceLabel: function(domElement, node){
128
+ var item = $(domElement);
129
+
130
+ item.css( 'class', "node level_#{node._depth}" );
131
+
132
+ if (node._depth <= 1 ) {
133
+ item.css('top', (parseInt(item.css('top')) + 10) + 'px' );
134
+ }
135
+ else if(node._depth == 2) {
136
+ item.css('top', (parseInt(item.css('top')) + 10) + 'px' );
137
+ }
138
+ else {
139
+ }
140
+ item.css( "left", (parseInt(item.css( 'left' )) - domElement.offsetWidth/2) + 'px');
141
+ },
142
+
143
+ onBeforePlotNode: function( node ) {
144
+ level = node.data.path.split("|").length;
145
+
146
+ if( level == 1 )
147
+ {
148
+ node.data.$dim = 10;
149
+ node.data.$color = "#ff8a00";
150
+ }
151
+ else if( level == 2 ) {
152
+ node.data.$dim = 15;
153
+ node.data.$color = "#d200ff"
154
+ }
155
+ else if( level == 3 ) {
156
+ node.data.$dim = 10;
157
+ node.data.$color = "#7891ff"
158
+ }
159
+ else {
160
+ node.data.$dim = 10;
161
+ node.data.$color = "#7da241";
162
+ }
163
+ },
164
+
165
+ onAfterCompute: function() {
166
+ Log.write("loaded");
167
+ }
168
+ });
169
+
170
+
171
+ ht.loadJSON( eval( <%=@root.to_json%> ) );
172
+ ht.controller.onAfterCompute();
173
+ ht.refresh();
174
+ update_info( 'home' );
175
+ }
176
+
177
+ function update_info(node_id)
178
+ {
179
+ var node = null;
180
+ if( node_id )
181
+ node = Graph.Util.getNode(ht.graph, node_id);
182
+ else
183
+ node = Graph.Util.getClosestNodeToOrigin(ht.graph, "pos");
184
+
185
+ // var parents = Graph.Util.getParents( node );
186
+ // var parent = parents[0];
187
+ var html = "";
188
+ var depth = node.data.path.split( '|' ).length
189
+ var legends = ['', 'environments', 'databases', 'collections']
190
+
191
+ var children = [];
192
+ var children_hash = {};
193
+ Graph.Util.eachAdjacency( node, function(adj) {
194
+ child = adj.nodeTo;
195
+ if( parent ) {
196
+ if( child.name != parent.name ) {
197
+ children_hash[child.name] = child;
198
+ children.push( child.name );
199
+ }
200
+ }
201
+ else {
202
+ children_hash[child.name] = child;
203
+ children.push( child.name );
204
+ }
205
+ });
206
+ children = children.sort();
207
+
208
+ html += "<span class=\"what\">" + legends[depth] + "(" + children.length + ")</span>";
209
+ html += "<p style='padding:5px 10px;text-align:left;color:#c1c1c1'>";
210
+
211
+ var buff = "<ul style='font-size:0.4em'>";
212
+ for( var i in children ) {
213
+ var node = children_hash[children[i]];
214
+ buff += "<li>";
215
+ buff += make_link( node );
216
+ buff += "</li>";
217
+ }
218
+ html += "</ul>" + buff;
219
+ html += "</p>";
220
+ $('div#info').html( html );
221
+
222
+ $('a.info[rel]').overlay(
223
+ { top: '15%',
224
+ expose: '#1c1c1c',
225
+ onBeforeLoad: function() {
226
+ var wrap = this.getContent().find( 'div#wrap' );
227
+ wrap.load( this.getTrigger().attr( 'href' ) );
228
+ // $.ajax( {
229
+ // url: this.getTrigger().attr( 'href' ),
230
+ // dataType: 'script',
231
+ // success: function(data) { $('div#details').html( data ); },
232
+ // type: 'GET' } );
233
+ }
234
+ });
235
+ }
236
+
237
+ function make_link( node )
238
+ {
239
+ return "<a rel=\"div#details\" class=\"info\" href=\"/explore/show/" + node.data.path + "/" + node.data.crumbs + "\">" + node.name + "</a>";
240
+ }
241
+
242
+ function refresh_data( url, path, name )
243
+ {
244
+ $.ajax( {
245
+ dataType: 'script',
246
+ type: 'GET',
247
+ url: url + "/" + path + "/" + name
248
+ });
249
+ }
250
+ </script>
@@ -0,0 +1,45 @@
1
+ <%= partial :crumbs %>
2
+
3
+ <div id="actions">
4
+ <a class="prevPage">&laquo; back</a>
5
+ <a class="nextPage">more &raquo;</a>
6
+ </div>
7
+
8
+ <div class="scrollable vertical">
9
+ <div class="items">
10
+ <% @landscape.keys.sort{ |a,b| a <=> b }.each do |name|%>
11
+ <% config = @landscape[name] %>
12
+ <div id="<%=name%>" class="item host">
13
+ <img class="tag" src="/images/monkey.png"/>
14
+ <p class="heading">
15
+ <%= name %>
16
+ </p>
17
+ <% if config.has_key?(:user) %>
18
+ <img class="lock" src="/images/lock.png"/>
19
+ <% end %>
20
+ <ul class="host_info">
21
+ <li><%=config[:host]%></li>
22
+ <li><%=config[:port]%></li>
23
+ </ul>
24
+ </div>
25
+ <% end %>
26
+ </div>
27
+ </div>
28
+
29
+ <script>
30
+ $("div.scrollable").scrollable({
31
+ vertical:true,
32
+ size: 5
33
+ }).mousewheel();
34
+
35
+ $( function() {
36
+ $("div.item").click( function() {
37
+ window.location.href = "/db/" + this.id;
38
+ });
39
+
40
+ $("div.item").hover(
41
+ function() { $(this).addClass( "selected" ) },
42
+ function() { $(this).removeClass( "selected" ) }
43
+ );
44
+ })
45
+ </script>
@@ -0,0 +1,28 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3
+ <head>
4
+ <title>M O N G O 3</title>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
+ <link rel="icon" href="/favicon.ico" type="image/x-icon"/>
7
+ <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
8
+ <link rel="stylesheet" href="/stylesheets/mongo3.css" type="text/css" media="screen" />
9
+ <script src="/javascripts/jquery_min.js" type="text/javascript"></script>
10
+ <script src="/javascripts/jquery_ui_min.js" type="text/javascript"></script>
11
+ <script src="/javascripts/jquery.tools.min.js" type="text/javascript"></script>
12
+ <script src="/javascripts/application.js" type="text/javascript"></script>
13
+ <script src="/javascripts/jit.min.js" type="text/javascript"></script>
14
+ </head>
15
+
16
+ <body id="body">
17
+ <div id="overall">
18
+ <div id="logo">
19
+ <a href="/">
20
+ <img src='/images/mongo3.png' style="border:none"/>
21
+ </a>
22
+ </div>
23
+ <div id="main">
24
+ <%= yield %>
25
+ </div>
26
+ </div>
27
+ </body>
28
+ </html>
@@ -0,0 +1,3 @@
1
+ $('div#crumbs').html( "<%=escape_javascript(partial(:crumbs))%>" );
2
+
3
+ morphit( '<%=@node_id%>', '<%=escape_javascript( @sub_tree.to_json )%>' );
@@ -0,0 +1 @@
1
+ $('div.content').html( "<%= escape_javascript( partial :cltn_info )%>")
@@ -0,0 +1 @@
1
+ $('div#crumbs').html( "<%=escape_javascript(partial(:crumbs))%>" );
@@ -0,0 +1,84 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. spec_helper])
2
+ require 'ostruct'
3
+
4
+ describe Mongo3::Node do
5
+
6
+ before( :all ) do
7
+ @root = Mongo3::Node.new( 0, "root", :blee => 'duh', :fred => 10 )
8
+ id = 100
9
+
10
+ @envs = []
11
+ 2.times do |i|
12
+ node = Mongo3::Node.new( id, "env_#{i}" )
13
+ @envs << node
14
+ @root << node
15
+ id += 1
16
+ end
17
+
18
+ @dbs = []
19
+ @cltns = []
20
+ 4.times do |i|
21
+ db = Mongo3::Node.new( id, "db_#{i}" )
22
+ @dbs << db
23
+ 4.times do |j|
24
+ cltn = Mongo3::Node.new( id, "cltn_#{j}" )
25
+ @cltns << cltn
26
+ db << cltn
27
+ id += 1
28
+ end
29
+ if i % 2 == 0
30
+ @root.children.first << db
31
+ else
32
+ @root.children.last << db
33
+ end
34
+ id += 1
35
+ end
36
+ end
37
+
38
+ it "should create a node correctly" do
39
+ @root.oid.should == 0
40
+ @root.name.should == "root"
41
+ @root.children.should have(2).items
42
+ @root.data.should_not be_nil
43
+ @root.data[:blee].should == 'duh'
44
+ @root.data[:fred].should == 10
45
+ end
46
+
47
+ it "should add children correctly" do
48
+ @root.children.should have(2).items
49
+ @root.children.first.name.should == "env_0"
50
+ @root.children.last.name.should == "env_1"
51
+ end
52
+
53
+ it "should set the parent correctly" do
54
+ @root.parent.should be_nil
55
+ @envs.each do |env|
56
+ env.parent.should == @root
57
+ end
58
+
59
+ @dbs.each do |db|
60
+ db.parent.name.should match(/^env_/)
61
+ end
62
+
63
+ @cltns.each do |cltn|
64
+ cltn.parent.name.should match(/^db_/)
65
+ end
66
+ end
67
+
68
+ it "should set the path correctly" do
69
+ @cltns.first.data[:path].should == "root|env_0|db_0|cltn_0"
70
+ @dbs.last.data[:path].should == "root|env_1|db_3"
71
+ @envs.first.data[:path].should == "root|env_0"
72
+ @root.data[:path].should be_nil
73
+ end
74
+
75
+ it "should dump to json correctly" do
76
+ @cltns.first.to_json.should == "{\"name\":\"cltn_0\",\"id\":102,\"children\":[],\"data\":{\"path\":\"root|env_0|db_0|cltn_0\"}}"
77
+ @dbs.first.to_json.should == "{\"name\":\"db_0\",\"id\":102,\"children\":[{\"name\":\"cltn_0\",\"id\":102,\"children\":[],\"data\":{\"path\":\"root|env_0|db_0|cltn_0\"}},{\"name\":\"cltn_1\",\"id\":103,\"children\":[],\"data\":{\"path\":\"root|env_0|db_0|cltn_1\"}},{\"name\":\"cltn_2\",\"id\":104,\"children\":[],\"data\":{\"path\":\"root|env_0|db_0|cltn_2\"}},{\"name\":\"cltn_3\",\"id\":105,\"children\":[],\"data\":{\"path\":\"root|env_0|db_0|cltn_3\"}}],\"data\":{\"path\":\"root|env_0|db_0\"}}"
78
+ end
79
+
80
+ it "should dump adjacencies correctly" do
81
+ @cltns.first.to_adjacencies.should == [{:adjacencies=>[], :name=>"cltn_0", :data=>{:path=>"root|env_0|db_0|cltn_0"}, :id=>102}]
82
+ @dbs.first.to_adjacencies.should == [{:name=>"db_0", :adjacencies=>[102, 103, 104, 105], :data=>{:path=>"root|env_0|db_0"}, :id=>102}, {:name=>"cltn_0", :adjacencies=>[], :data=>{:path=>"root|env_0|db_0|cltn_0"}, :id=>102}, {:name=>"cltn_1", :adjacencies=>[], :data=>{:path=>"root|env_0|db_0|cltn_1"}, :id=>103}, {:name=>"cltn_2", :adjacencies=>[], :data=>{:path=>"root|env_0|db_0|cltn_2"}, :id=>104}, {:name=>"cltn_3", :adjacencies=>[], :data=>{:path=>"root|env_0|db_0|cltn_3"}, :id=>105}]
83
+ end
84
+ end
@@ -0,0 +1,8 @@
1
+ require 'rubygems'
2
+ require 'rack'
3
+ # require 'rack/test'
4
+
5
+ require File.join(File.dirname(__FILE__), %w[.. lib mongo3])
6
+
7
+ Spec::Runner.configure do |config|
8
+ end
data/tasks/bones.rake ADDED
@@ -0,0 +1,20 @@
1
+
2
+ if HAVE_BONES
3
+
4
+ namespace :bones do
5
+
6
+ desc 'Show the PROJ open struct'
7
+ task :debug do |t|
8
+ atr = if t.application.top_level_tasks.length == 2
9
+ t.application.top_level_tasks.pop
10
+ end
11
+
12
+ if atr then Bones::Debug.show_attr(PROJ, atr)
13
+ else Bones::Debug.show PROJ end
14
+ end
15
+
16
+ end # namespace :bones
17
+
18
+ end # HAVE_BONES
19
+
20
+ # EOF
data/tasks/gem.rake ADDED
@@ -0,0 +1,201 @@
1
+
2
+ require 'find'
3
+ require 'rake/packagetask'
4
+ require 'rubygems/user_interaction'
5
+ require 'rubygems/builder'
6
+
7
+ module Bones
8
+ class GemPackageTask < Rake::PackageTask
9
+ # Ruby GEM spec containing the metadata for this package. The
10
+ # name, version and package_files are automatically determined
11
+ # from the GEM spec and don't need to be explicitly provided.
12
+ #
13
+ attr_accessor :gem_spec
14
+
15
+ # Tasks from the Bones gem directory
16
+ attr_reader :bones_files
17
+
18
+ # Create a GEM Package task library. Automatically define the gem
19
+ # if a block is given. If no block is supplied, then +define+
20
+ # needs to be called to define the task.
21
+ #
22
+ def initialize(gem_spec)
23
+ init(gem_spec)
24
+ yield self if block_given?
25
+ define if block_given?
26
+ end
27
+
28
+ # Initialization tasks without the "yield self" or define
29
+ # operations.
30
+ #
31
+ def init(gem)
32
+ super(gem.name, gem.version)
33
+ @gem_spec = gem
34
+ @package_files += gem_spec.files if gem_spec.files
35
+ @bones_files = []
36
+
37
+ local_setup = File.join(Dir.pwd, %w[tasks setup.rb])
38
+ if !test(?e, local_setup)
39
+ Dir.glob(::Bones.path(%w[lib bones tasks *])).each {|fn| bones_files << fn}
40
+ end
41
+ end
42
+
43
+ # Create the Rake tasks and actions specified by this
44
+ # GemPackageTask. (+define+ is automatically called if a block is
45
+ # given to +new+).
46
+ #
47
+ def define
48
+ super
49
+ task :prereqs
50
+ task :package => ['gem:prereqs', "#{package_dir_path}/#{gem_file}"]
51
+ file "#{package_dir_path}/#{gem_file}" => [package_dir_path] + package_files + bones_files do
52
+ when_writing("Creating GEM") {
53
+ chdir(package_dir_path) do
54
+ Gem::Builder.new(gem_spec).build
55
+ verbose(true) {
56
+ mv gem_file, "../#{gem_file}"
57
+ }
58
+ end
59
+ }
60
+ end
61
+
62
+ file package_dir_path => bones_files do
63
+ mkdir_p package_dir rescue nil
64
+
65
+ gem_spec.files = (gem_spec.files +
66
+ bones_files.map {|fn| File.join('tasks', File.basename(fn))}).sort
67
+
68
+ bones_files.each do |fn|
69
+ base_fn = File.join('tasks', File.basename(fn))
70
+ f = File.join(package_dir_path, base_fn)
71
+ fdir = File.dirname(f)
72
+ mkdir_p(fdir) if !File.exist?(fdir)
73
+ if File.directory?(fn)
74
+ mkdir_p(f)
75
+ else
76
+ raise "file name conflict for '#{base_fn}' (conflicts with '#{fn}')" if test(?e, f)
77
+ safe_ln(fn, f)
78
+ end
79
+ end
80
+ end
81
+ end
82
+
83
+ def gem_file
84
+ if @gem_spec.platform == Gem::Platform::RUBY
85
+ "#{package_name}.gem"
86
+ else
87
+ "#{package_name}-#{@gem_spec.platform}.gem"
88
+ end
89
+ end
90
+ end # class GemPackageTask
91
+ end # module Bones
92
+
93
+ namespace :gem do
94
+
95
+ PROJ.gem._spec = Gem::Specification.new do |s|
96
+ s.name = PROJ.name
97
+ s.version = PROJ.version
98
+ s.summary = PROJ.summary
99
+ s.authors = Array(PROJ.authors)
100
+ s.email = PROJ.email
101
+ s.homepage = Array(PROJ.url).first
102
+ s.rubyforge_project = PROJ.rubyforge.name
103
+
104
+ s.description = PROJ.description
105
+
106
+ PROJ.gem.dependencies.each do |dep|
107
+ s.add_dependency(*dep)
108
+ end
109
+
110
+ PROJ.gem.development_dependencies.each do |dep|
111
+ s.add_development_dependency(*dep)
112
+ end
113
+
114
+ s.files = PROJ.gem.files
115
+ s.executables = PROJ.gem.executables.map {|fn| File.basename(fn)}
116
+ s.extensions = PROJ.gem.files.grep %r/extconf\.rb$/
117
+
118
+ s.bindir = 'bin'
119
+ dirs = Dir["{#{PROJ.libs.join(',')}}"]
120
+ s.require_paths = dirs unless dirs.empty?
121
+
122
+ incl = Regexp.new(PROJ.rdoc.include.join('|'))
123
+ excl = PROJ.rdoc.exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
124
+ excl = Regexp.new(excl.join('|'))
125
+ rdoc_files = PROJ.gem.files.find_all do |fn|
126
+ case fn
127
+ when excl; false
128
+ when incl; true
129
+ else false end
130
+ end
131
+ s.rdoc_options = PROJ.rdoc.opts + ['--main', PROJ.rdoc.main]
132
+ s.extra_rdoc_files = rdoc_files
133
+ s.has_rdoc = true
134
+
135
+ if test ?f, PROJ.test.file
136
+ s.test_file = PROJ.test.file
137
+ else
138
+ s.test_files = PROJ.test.files.to_a
139
+ end
140
+
141
+ # Do any extra stuff the user wants
142
+ PROJ.gem.extras.each do |msg, val|
143
+ case val
144
+ when Proc
145
+ val.call(s.send(msg))
146
+ else
147
+ s.send "#{msg}=", val
148
+ end
149
+ end
150
+ end # Gem::Specification.new
151
+
152
+ Bones::GemPackageTask.new(PROJ.gem._spec) do |pkg|
153
+ pkg.need_tar = PROJ.gem.need_tar
154
+ pkg.need_zip = PROJ.gem.need_zip
155
+ end
156
+
157
+ desc 'Show information about the gem'
158
+ task :debug => 'gem:prereqs' do
159
+ puts PROJ.gem._spec.to_ruby
160
+ end
161
+
162
+ desc 'Write the gemspec '
163
+ task :spec => 'gem:prereqs' do
164
+ File.open("#{PROJ.name}.gemspec", 'w') do |f|
165
+ f.write PROJ.gem._spec.to_ruby
166
+ end
167
+ end
168
+
169
+ desc 'Install the gem'
170
+ task :install => [:clobber, 'gem:package'] do
171
+ sh "#{SUDO} #{GEM} install --local pkg/#{PROJ.gem._spec.full_name}"
172
+
173
+ # use this version of the command for rubygems > 1.0.0
174
+ #sh "#{SUDO} #{GEM} install --no-update-sources pkg/#{PROJ.gem._spec.full_name}"
175
+ end
176
+
177
+ desc 'Uninstall the gem'
178
+ task :uninstall do
179
+ installed_list = Gem.source_index.find_name(PROJ.name)
180
+ if installed_list and installed_list.collect { |s| s.version.to_s}.include?(PROJ.version) then
181
+ sh "#{SUDO} #{GEM} uninstall --version '#{PROJ.version}' --ignore-dependencies --executables #{PROJ.name}"
182
+ end
183
+ end
184
+
185
+ desc 'Reinstall the gem'
186
+ task :reinstall => [:uninstall, :install]
187
+
188
+ desc 'Cleanup the gem'
189
+ task :cleanup do
190
+ sh "#{SUDO} #{GEM} cleanup #{PROJ.gem._spec.name}"
191
+ end
192
+ end # namespace :gem
193
+
194
+
195
+ desc 'Alias to gem:package'
196
+ task :gem => 'gem:package'
197
+
198
+ task :clobber => 'gem:clobber_package'
199
+ remove_desc_for_task 'gem:clobber_package'
200
+
201
+ # EOF
data/tasks/git.rake ADDED
@@ -0,0 +1,40 @@
1
+
2
+ if HAVE_GIT
3
+
4
+ namespace :git do
5
+
6
+ # A prerequisites task that all other tasks depend upon
7
+ task :prereqs
8
+
9
+ desc 'Show tags from the Git repository'
10
+ task :show_tags => 'git:prereqs' do |t|
11
+ puts %x/git tag/
12
+ end
13
+
14
+ desc 'Create a new tag in the Git repository'
15
+ task :create_tag => 'git:prereqs' do |t|
16
+ v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
17
+ abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
18
+
19
+ tag = "%s-%s" % [PROJ.name, PROJ.version]
20
+ msg = "Creating tag for #{PROJ.name} version #{PROJ.version}"
21
+
22
+ puts "Creating Git tag '#{tag}'"
23
+ unless system "git tag -a -m '#{msg}' #{tag}"
24
+ abort "Tag creation failed"
25
+ end
26
+
27
+ if %x/git remote/ =~ %r/^origin\s*$/
28
+ unless system "git push origin #{tag}"
29
+ abort "Could not push tag to remote Git repository"
30
+ end
31
+ end
32
+ end
33
+
34
+ end # namespace :git
35
+
36
+ task 'gem:release' => 'git:create_tag'
37
+
38
+ end # if HAVE_GIT
39
+
40
+ # EOF