pact_broker 0.0.10 → 1.0.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. data/.gitignore +3 -0
  2. data/Gemfile +0 -3
  3. data/README.md +28 -1
  4. data/Rakefile +4 -2
  5. data/assets/d3.v3.js +9263 -0
  6. data/assets/force.csv +29 -0
  7. data/assets/index.html +186 -0
  8. data/assets/index2.html +224 -0
  9. data/assets/relationships +4 -0
  10. data/assets/stylesheets/github.css +387 -0
  11. data/bethtest.rb +67 -0
  12. data/config.ru +10 -4
  13. data/config/boot.rb +4 -0
  14. data/example/Gemfile +5 -0
  15. data/example/config.ru +18 -0
  16. data/lib/db.rb +52 -0
  17. data/lib/pact_broker.rb +2 -0
  18. data/lib/pact_broker/api.rb +2 -0
  19. data/lib/pact_broker/api/decorators/pact_collection_decorator.rb +1 -1
  20. data/lib/pact_broker/api/decorators/pacticipant_collection_decorator.rb +1 -1
  21. data/lib/pact_broker/api/decorators/relationships_csv_decorator.rb +32 -0
  22. data/lib/pact_broker/api/renderers/html_pact_renderer.rb +43 -0
  23. data/lib/pact_broker/api/resources/latest_pact.rb +7 -1
  24. data/lib/pact_broker/api/resources/relationships.rb +29 -0
  25. data/lib/pact_broker/app.rb +82 -0
  26. data/lib/pact_broker/configuration.rb +47 -0
  27. data/lib/pact_broker/db.rb +7 -39
  28. data/lib/pact_broker/models/relationship.rb +27 -0
  29. data/lib/pact_broker/project_root.rb +7 -0
  30. data/lib/pact_broker/services/pacticipant_service.rb +6 -0
  31. data/lib/pact_broker/ui/controllers/base_controller.rb +15 -0
  32. data/lib/pact_broker/ui/controllers/clusters.rb +28 -0
  33. data/lib/pact_broker/ui/controllers/relationships.rb +21 -0
  34. data/lib/pact_broker/ui/view_models/clusters.rb +0 -0
  35. data/lib/pact_broker/ui/view_models/relationship.rb +35 -0
  36. data/lib/pact_broker/ui/view_models/relationships.rb +21 -0
  37. data/lib/pact_broker/ui/views/clusters/show.haml +2 -0
  38. data/lib/pact_broker/ui/views/layouts/main.haml +2 -0
  39. data/lib/pact_broker/ui/views/relationships/show.haml +44 -0
  40. data/lib/pact_broker/version.rb +1 -1
  41. data/lib/rack/hal_browser.rb +1 -0
  42. data/lib/rack/hal_browser/redirect.rb +45 -0
  43. data/pact_broker.gemspec +10 -8
  44. data/public/bootstrap.zip +0 -0
  45. data/public/config.json +412 -0
  46. data/public/css/bootstrap-theme.css +346 -0
  47. data/public/css/bootstrap-theme.min.css +7 -0
  48. data/public/css/bootstrap.css +5780 -0
  49. data/public/css/bootstrap.min.css +7 -0
  50. data/public/fonts/glyphicons-halflings-regular.eot +0 -0
  51. data/public/fonts/glyphicons-halflings-regular.svg +229 -0
  52. data/public/fonts/glyphicons-halflings-regular.ttf +0 -0
  53. data/public/fonts/glyphicons-halflings-regular.woff +0 -0
  54. data/public/javascripts/jquery-2.1.1.min.js +4 -0
  55. data/public/javascripts/jquery.tablesorter.js +1765 -0
  56. data/public/javascripts/jquery.tablesorter.min.js +5 -0
  57. data/public/js/bootstrap.js +1943 -0
  58. data/public/js/bootstrap.min.js +7 -0
  59. data/public/stylesheets/github.css +387 -0
  60. data/public/stylesheets/relationships.css +18 -0
  61. data/script/update-hal-browser +6 -0
  62. data/spec/fixtures/renderer_pact.json +34 -0
  63. data/spec/lib/pact_broker/api/decorators/relationships_csv_decorator_spec.rb +30 -0
  64. data/spec/lib/pact_broker/api/renderers/html_pact_renderer_spec.rb +29 -0
  65. data/spec/lib/pact_broker/api/resources/latest_pact_spec.rb +57 -0
  66. data/spec/lib/pact_broker/configuration_spec.rb +21 -0
  67. data/spec/lib/pact_broker/services/pacticipant_service_spec.rb +30 -0
  68. data/spec/lib/pact_broker/ui/controllers/clusters_spec.rb +27 -0
  69. data/spec/lib/pact_broker/ui/controllers/relationships_spec.rb +37 -0
  70. data/spec/lib/pact_broker/ui/view_models/relationship_spec.rb +29 -0
  71. data/spec/lib/rack/hal_browser/redirect_spec.rb +63 -0
  72. data/spec/service_consumers/pact_helper.rb +1 -1
  73. data/spec/spec_helper.rb +10 -3
  74. data/tasks/database.rb +57 -0
  75. data/tasks/db.rake +57 -12
  76. data/tasks/pact.rake +1 -1
  77. data/tasks/rspec.rake +1 -9
  78. data/vendor/hal-browser/.gitignore +1 -0
  79. data/vendor/hal-browser/MIT-LICENSE.txt +20 -0
  80. data/vendor/hal-browser/README.md +35 -0
  81. data/vendor/hal-browser/browser.html +246 -0
  82. data/vendor/hal-browser/js/hal.js +57 -0
  83. data/vendor/hal-browser/js/hal/browser.js +60 -0
  84. data/vendor/hal-browser/js/hal/http/client.js +38 -0
  85. data/vendor/hal-browser/js/hal/resource.js +34 -0
  86. data/vendor/hal-browser/js/hal/views/browser.js +29 -0
  87. data/vendor/hal-browser/js/hal/views/documentation.js +7 -0
  88. data/vendor/hal-browser/js/hal/views/embedded_resource.js +56 -0
  89. data/vendor/hal-browser/js/hal/views/embedded_resources.js +41 -0
  90. data/vendor/hal-browser/js/hal/views/explorer.js +23 -0
  91. data/vendor/hal-browser/js/hal/views/inspector.js +39 -0
  92. data/vendor/hal-browser/js/hal/views/links.js +54 -0
  93. data/vendor/hal-browser/js/hal/views/location_bar.js +40 -0
  94. data/vendor/hal-browser/js/hal/views/navigation.js +19 -0
  95. data/vendor/hal-browser/js/hal/views/non_safe_request_dialog.js +53 -0
  96. data/vendor/hal-browser/js/hal/views/properties.js +14 -0
  97. data/vendor/hal-browser/js/hal/views/query_uri_dialog.js +69 -0
  98. data/vendor/hal-browser/js/hal/views/request_headers.js +30 -0
  99. data/vendor/hal-browser/js/hal/views/resource.js +38 -0
  100. data/vendor/hal-browser/js/hal/views/response.js +24 -0
  101. data/vendor/hal-browser/js/hal/views/response_body.js +40 -0
  102. data/vendor/hal-browser/js/hal/views/response_headers.js +19 -0
  103. data/vendor/hal-browser/styles.css +67 -0
  104. data/vendor/hal-browser/vendor/css/bootstrap-responsive.css +1109 -0
  105. data/vendor/hal-browser/vendor/css/bootstrap.css +6158 -0
  106. data/vendor/hal-browser/vendor/img/ajax-loader.gif +0 -0
  107. data/vendor/hal-browser/vendor/img/glyphicons-halflings-white.png +0 -0
  108. data/vendor/hal-browser/vendor/img/glyphicons-halflings.png +0 -0
  109. data/vendor/hal-browser/vendor/js/backbone.js +1487 -0
  110. data/vendor/hal-browser/vendor/js/bootstrap.js +2276 -0
  111. data/vendor/hal-browser/vendor/js/jquery-1.9.1.js +9597 -0
  112. data/vendor/hal-browser/vendor/js/underscore.js +1227 -0
  113. data/vendor/hal-browser/vendor/js/uritemplates.js +438 -0
  114. metadata +162 -47
  115. data/Gemfile.lock +0 -110
data/tasks/pact.rake CHANGED
@@ -5,7 +5,7 @@ Pact::VerificationTask.new(:dev) do | pact |
5
5
  end
6
6
 
7
7
  namespace :pact do
8
- task :prepare => [:overwrite_rack_env, 'db:recreate']
8
+ #task :prepare => [:overwrite_rack_env, 'db:recreate']
9
9
  task :verify => :prepare
10
10
  task 'verify:at' => :prepare
11
11
  task 'verify:dev' => :prepare
data/tasks/rspec.rake CHANGED
@@ -1,14 +1,6 @@
1
1
  require 'rspec/core'
2
2
  require 'rspec/core/rake_task'
3
- require 'ci/reporter/rake/rspec'
4
3
 
5
- RSpec::Core::RakeTask.new(:spec => ['ci:setup:rspecdoc']) do |task|
4
+ RSpec::Core::RakeTask.new(:spec) do |task|
6
5
  task.pattern = FileList['spec/**/*_spec.rb']
7
6
  end
8
-
9
- task :overwrite_rack_env do
10
- ENV['RACK_ENV'] = 'test'
11
- RACK_ENV = 'test'
12
- end
13
-
14
- task :spec => [:overwrite_rack_env, 'db:recreate']
@@ -0,0 +1 @@
1
+ .DS_Store
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Mike Kelly, http://stateless.co/
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.
@@ -0,0 +1,35 @@
1
+ HAL-browser
2
+ ===========
3
+ An API browser for the hal+json media type
4
+
5
+ About HAL
6
+ ========
7
+ HAL is a format based on json that establishes conventions for
8
+ representing links. For example:
9
+
10
+ ```javascript
11
+ {
12
+ "_links": {
13
+ "self": { "href": "/orders" },
14
+ "next": { "href": "/orders?page=2" }
15
+ }
16
+ }
17
+ ```
18
+
19
+ More detail about HAL can be found at
20
+ [http://stateless.co/hal_specification.html](http://stateless.co/hal_specification.html).
21
+
22
+ Instructions
23
+ ============
24
+ All you should need to do is copy the files into your webroot.
25
+ It is OK to put it in a subdirectory; it does not need to be in the root.
26
+
27
+ All the JS and CSS dependencies come included in the vendor directory.
28
+
29
+
30
+ TODO
31
+ ===========
32
+ * Make Location and Content-Location headers clickable links
33
+ * Provide feedback to user when there are issues with response (missing
34
+ self link, wrong media type identifier)
35
+ * Give 'self' and 'curies' links special treatment
@@ -0,0 +1,246 @@
1
+ <!doctype html>
2
+ <head>
3
+ <meta charset="utf-8">
4
+ <title>The HAL Browser</title>
5
+ <link rel="stylesheet" media="screen" href="vendor/css/bootstrap.css" />
6
+ <style type="text/css">
7
+ body {
8
+ padding-top: 60px;
9
+ padding-bottom: 40px;
10
+ }
11
+ .sidebar-nav {
12
+ padding: 9px 0;
13
+ }
14
+ </style>
15
+ <link rel="stylesheet" media="screen" href="vendor/css/bootstrap-responsive.css" />
16
+ <link rel="stylesheet" media="screen" href="styles.css" />
17
+ </head>
18
+
19
+ <body>
20
+
21
+ <div class="navbar navbar-fixed-top">
22
+ <div class="navbar-inner">
23
+ <div class="container-fluid">
24
+ <a class="brand">The HAL Browser</a>
25
+ <div class="nav-collapse">
26
+ <ul class="nav">
27
+ <li><a href="#/" id="entryPointLink">Go To Entry Point</a></li>
28
+ <li><a href="https://github.com/mikekelly/hal-browser">About The HAL Browser</a></li>
29
+ </ul>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ </div>
34
+
35
+ <div id="browser" class="container-fluid"></div>
36
+
37
+ <script id="location-bar-template" type="text/template">
38
+ <form>
39
+ <div class="input-append span12 location-bar-container">
40
+ <input class="span11" id="appendedInputButton" type="text" value="<%= url %>">
41
+ <button class="btn" type="submit">Go!</button>
42
+ <span class="ajax-loader"></span>
43
+ </div>
44
+ </form>
45
+ </script>
46
+
47
+ <script id="links-template" type="text/template">
48
+ <h2>Links</h2>
49
+ <table class="table">
50
+ <thead>
51
+ <tr>
52
+ <th>rel</th>
53
+ <th>title</th>
54
+ <th>name / index</th>
55
+ <th>docs</th>
56
+ <th>GET</th>
57
+ <th>NON-GET</th>
58
+ </tr>
59
+ </thead>
60
+ <tbody>
61
+ <% _.each(links, function(obj, rel) { %>
62
+ <% if ($.isArray(obj)) { %>
63
+ <% _.each(obj, function(link, i) { %>
64
+ <tr>
65
+ <td><strong><%= HAL.truncateIfUrl(rel) %></strong></td>
66
+ <td><%= link.title || '' %></td>
67
+ <td><%= link.name ? 'name: ' + link.name : 'index: ' + i %></a></td>
68
+ <td>
69
+ <% if (HAL.isUrl(rel)) { %>
70
+ <a class="dox" href="<%= HAL.buildUrl(rel) %>"><i class="icon-book"></i></a>
71
+ <% } %>
72
+ </td>
73
+ <td>
74
+ <% if (link.templated === true) { %>
75
+ <a class="query btn btn-success" href="<%= link.href %>" title="Query URI template"><i class="icon-question-sign"></i></a>
76
+ <% } else { %>
77
+ <a class="follow btn btn-success" href="<%= link.href %>" title="Follow link"><i class="icon-arrow-right"></i></a>
78
+ <% } %>
79
+ </td>
80
+ <td>
81
+ <a class="non-get btn btn-warning" href="<%= link.href %>" title="Perform non-GET request">!</a>
82
+ </td>
83
+ </tr>
84
+ <% }); %>
85
+ <% } else { %>
86
+ <tr>
87
+ <td><strong><%= HAL.truncateIfUrl(rel) %></strong></td>
88
+ <td><%= obj.title || '' %></td>
89
+ <td><%= obj.name || '' %></td>
90
+ <td>
91
+ <% if (HAL.isUrl(rel)) { %>
92
+ <a class="dox" href="<%= HAL.buildUrl(rel) %>"><i class="icon-book"></i></a>
93
+ <% } %>
94
+ </td>
95
+ <td>
96
+ <% if (obj.templated === true) { %>
97
+ <a class="query btn btn-success" href="<%= obj.href %>" title="Query URI template"><i class="icon-question-sign"></i></a>
98
+ <% } else { %>
99
+ <a class="follow btn btn-success" href="<%= obj.href %>" title="Follow link"><i class="icon-arrow-right"></i></a>
100
+ <% } %>
101
+ </td>
102
+ <td>
103
+ <a class="non-get btn btn-warning" href="<%= obj.href %>" title="Perform non-GET request">!</a>
104
+ </td>
105
+ </tr>
106
+ <% } %>
107
+ <% }) %>
108
+ </tbody>
109
+ </table>
110
+ </script>
111
+
112
+ <script id="properties-template" type="text/template">
113
+ <h2>Properties</h2>
114
+ <pre><%= _.escape(JSON.stringify(properties, null, HAL.jsonIndent)) %></pre>
115
+ </script>
116
+
117
+ <script id="request-headers-template" type="text/template">
118
+ <h2>Custom Request Headers</h2>
119
+ <textarea class="span12"></textarea>
120
+ </script>
121
+
122
+ <script id="response-headers-template" type="text/template">
123
+ <h2>Response Headers</h2>
124
+ <pre><%= status.code %> <%= status.text %>
125
+
126
+ <%= headers %></pre>
127
+ </script>
128
+
129
+ <script id="response-body-template" type="text/template">
130
+ <h2>Response Body</h2>
131
+ <pre><%= _.escape(body) %></pre>
132
+ </script>
133
+
134
+ <script id="query-uri-template" type="text/template">
135
+ <div class="modal-header">
136
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
137
+ <h3>Expand URI Template</h3>
138
+ </div>
139
+
140
+ <form id="query" action="<%= href %>">
141
+ <div class="modal-body">
142
+ <p>URI Template:</p>
143
+ <pre><%= href %></pre>
144
+ <p>Input (JSON):</p>
145
+ <textarea><%= input %></textarea>
146
+ <p>Expanded URI:</p>
147
+ <pre class="preview">&nbsp;</pre>
148
+ </div>
149
+
150
+ <div class="modal-footer">
151
+ <button type="submit" class="btn btn-primary">Follow URI</button>
152
+ </div>
153
+ </form>
154
+ </script>
155
+
156
+
157
+ <script id="non-safe-request-template" type="text/template">
158
+ <div class="modal-header">
159
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
160
+ <h3>Make a non-GET request</h3>
161
+ </div>
162
+
163
+ <form class="non-safe" action="<%= href %>">
164
+ <div class="modal-body">
165
+ <p>Target URI</p>
166
+ <input name="url" type="text" class="url" value="<%= href %>" />
167
+ <p>Method:</p>
168
+ <input name="method" type="text" class="method" value="POST" />
169
+ <p>Headers:</p>
170
+ <textarea name="headers" class="headers" style="height: 100px">
171
+ Content-Type: application/json
172
+ <%= user_defined_headers %>
173
+ </textarea>
174
+ <p>Body:</p>
175
+ <textarea name="body" class="body" style="height: 200px">
176
+ {
177
+
178
+ }
179
+ </textarea>
180
+ </div>
181
+
182
+ <div class="modal-footer">
183
+ <button type="submit" class="btn btn-primary">Make Request</button>
184
+ </div>
185
+ </form>
186
+ </script>
187
+
188
+ <script id="embedded-resources-template" type="text/template">
189
+ <h2>Embedded Resources</h2>
190
+ </script>
191
+
192
+ <script id="embedded-resource-template" type="text/template">
193
+ <div class="accordion-heading">
194
+ <a class="accordion-toggle" href="#"><%= resource.identifier %>
195
+ <% if (HAL.isUrl(resource.embed_rel)) { %>
196
+ <span class="dox pull-right" data-href="<%= HAL.buildUrl(resource.embed_rel) %>">
197
+ <i class="icon-book"></i>
198
+ </span>
199
+ <% } %>
200
+ </a>
201
+ </div>
202
+ </script>
203
+
204
+ <script src="vendor/js/jquery-1.9.1.js"></script>
205
+ <script src="vendor/js/underscore.js"></script>
206
+ <script src="vendor/js/backbone.js"></script>
207
+ <script src="vendor/js/uritemplates.js"></script>
208
+ <script src="vendor/js/bootstrap.js"></script>
209
+
210
+ <script src="js/hal.js"></script>
211
+ <script src="js/hal/browser.js"></script>
212
+
213
+ <script src="js/hal/http/client.js"></script>
214
+ <script src="js/hal/resource.js"></script>
215
+
216
+ <script src="js/hal/views/browser.js"></script>
217
+ <script src="js/hal/views/explorer.js"></script>
218
+ <script src="js/hal/views/inspector.js"></script>
219
+
220
+ <script src="js/hal/views/navigation.js"></script>
221
+ <script src="js/hal/views/location_bar.js"></script>
222
+ <script src="js/hal/views/request_headers.js"></script>
223
+
224
+ <script src="js/hal/views/resource.js"></script>
225
+ <script src="js/hal/views/properties.js"></script>
226
+ <script src="js/hal/views/links.js"></script>
227
+ <script src="js/hal/views/embedded_resources.js"></script>
228
+ <script src="js/hal/views/embedded_resource.js"></script>
229
+
230
+ <script src="js/hal/views/non_safe_request_dialog.js"></script>
231
+ <script src="js/hal/views/query_uri_dialog.js"></script>
232
+
233
+ <script src="js/hal/views/response.js"></script>
234
+ <script src="js/hal/views/response_headers.js"></script>
235
+ <script src="js/hal/views/response_body.js"></script>
236
+
237
+ <script src="js/hal/views/documentation.js"></script>
238
+
239
+ <script>
240
+ var browser = new HAL.Browser({
241
+ container: $('#browser'),
242
+ entryPoint: '/'
243
+ });
244
+ Backbone.history.start();
245
+ </script>
246
+ </body>
@@ -0,0 +1,57 @@
1
+ (function() {
2
+ var urlRegex = /(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
3
+
4
+ function isCurie(string) {
5
+ return string.split(':').length > 1;
6
+ };
7
+
8
+ var HAL = {
9
+ Models: {},
10
+ Views: {},
11
+ Http: {},
12
+ currentDocument: {},
13
+ jsonIndent: 2,
14
+ isUrl: function(str) {
15
+ return str.match(urlRegex) || isCurie(str);
16
+ },
17
+ truncateIfUrl: function(str) {
18
+ var replaceRegex = /(http|https):\/\/([^\/]*)\//;
19
+ return str.replace(replaceRegex, '.../');
20
+ },
21
+ buildUrl: function(rel) {
22
+ if (!rel.match(urlRegex) && isCurie(rel) && HAL.currentDocument._links.curies) {
23
+ var parts = rel.split(':');
24
+ var curies = HAL.currentDocument._links.curies;
25
+ for (var i=0; i<curies.length; i++) {
26
+ if (curies[i].name == parts[0]) {
27
+ var tmpl = uritemplate(curies[i].href);
28
+ return tmpl.expand({ rel: parts[1] });
29
+ }
30
+ }
31
+ }
32
+ else if (!rel.match(urlRegex) && isCurie(rel) && HAL.currentDocument._links.curie) {
33
+ // Backward compatibility with <04 version of spec.
34
+ var tmpl = uritemplate(HAL.currentDocument._links.curie.href);
35
+ return tmpl.expand({ rel: rel.split(':')[1] });
36
+ }
37
+ else {
38
+ return rel;
39
+ }
40
+ },
41
+ parseHeaders: function(string) {
42
+ var header_lines = string.split("\n");
43
+ var headers = {};
44
+ _.each(header_lines, function(line) {
45
+ var parts = line.split(':');
46
+ if (parts.length > 1) {
47
+ var name = parts.shift().trim();
48
+ var value = parts.join(':').trim();
49
+ headers[name] = value;
50
+ }
51
+ });
52
+ return headers;
53
+ },
54
+ };
55
+
56
+ window.HAL = HAL;
57
+ })();
@@ -0,0 +1,60 @@
1
+ HAL.Browser = Backbone.Router.extend({
2
+ initialize: function(opts) {
3
+ opts = opts || {};
4
+
5
+ var vent = _.extend({}, Backbone.Events),
6
+ $container = opts.container || $('#browser');
7
+
8
+ this.entryPoint = opts.entryPoint || '/';
9
+
10
+ // TODO: don't hang currentDoc off namespace
11
+ vent.bind('response', function(e) {
12
+ window.HAL.currentDocument = e.resource || {};
13
+ });
14
+
15
+ vent.bind('location-go', _.bind(this.loadUrl, this));
16
+
17
+ HAL.client = new HAL.Http.Client({ vent: vent });
18
+
19
+ var browser = new HAL.Views.Browser({ vent: vent, entryPoint: this.entryPoint });
20
+ browser.render()
21
+
22
+ $container.html(browser.el);
23
+ vent.trigger('app:loaded');
24
+
25
+ if (window.location.hash === '') {
26
+ window.location.hash = this.entryPoint;
27
+ }
28
+
29
+ if(location.hash.slice(1,9) === 'NON-GET:') {
30
+ new HAL.Views.NonSafeRequestDialog({
31
+ href: location.hash.slice(9),
32
+ vent: vent
33
+ }).render({});
34
+ }
35
+ },
36
+
37
+ routes: {
38
+ '*url': 'resourceRoute'
39
+ },
40
+
41
+ loadUrl: function(url) {
42
+ if (this.getHash() === url) {
43
+ HAL.client.get(url);
44
+ } else {
45
+ window.location.hash = url;
46
+ }
47
+ },
48
+
49
+ getHash: function() {
50
+ return window.location.hash.slice(1);
51
+ },
52
+
53
+ resourceRoute: function() {
54
+ url = location.hash.slice(1);
55
+ console.log('target url changed to: ' + url);
56
+ if (url.slice(0,8) !== 'NON-GET:') {
57
+ HAL.client.get(url);
58
+ }
59
+ }
60
+ });