sabisu_rails 0.0.1.pre.beta

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.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +8 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +109 -0
  6. data/Rakefile +1 -0
  7. data/app/assets/javascripts/sabisu_rails/application.js +12 -0
  8. data/app/assets/javascripts/sabisu_rails/sabisu.js.coffee +40 -0
  9. data/app/assets/stylesheets/sabisu_rails/application.css.scss +9 -0
  10. data/app/assets/stylesheets/sabisu_rails/explorer.css.scss +117 -0
  11. data/app/assets/stylesheets/sabisu_rails/furatto_overrides.scss +24 -0
  12. data/app/controllers/sabisu_rails/base_controller.rb +16 -0
  13. data/app/controllers/sabisu_rails/explorer_controller.rb +15 -0
  14. data/app/helpers/sabisu_rails/explorer_helper.rb +28 -0
  15. data/app/helpers/sabisu_rails_helper.rb +3 -0
  16. data/app/views/layouts/sabisu_rails.html.erb +28 -0
  17. data/app/views/sabisu_rails/explorer/index.html.erb +86 -0
  18. data/app/views/sabisu_rails/explorer/index.js.erb +6 -0
  19. data/config/routes.rb +3 -0
  20. data/lib/generators/sabisu_rails/install_generator.rb +17 -0
  21. data/lib/generators/sabisu_rails/templates/sabisu_rails.rb +34 -0
  22. data/lib/sabisu_rails/builders/base.rb +26 -0
  23. data/lib/sabisu_rails/builders/headers_builder.rb +6 -0
  24. data/lib/sabisu_rails/builders/url_params_builder.rb +6 -0
  25. data/lib/sabisu_rails/builders.rb +7 -0
  26. data/lib/sabisu_rails/engine.rb +5 -0
  27. data/lib/sabisu_rails/explorer.rb +35 -0
  28. data/lib/sabisu_rails/helpers/required.rb +14 -0
  29. data/lib/sabisu_rails/helpers.rb +5 -0
  30. data/lib/sabisu_rails/railtie.rb +22 -0
  31. data/lib/sabisu_rails/request.rb +28 -0
  32. data/lib/sabisu_rails/route_recognizer.rb +34 -0
  33. data/lib/sabisu_rails/version.rb +3 -0
  34. data/lib/sabisu_rails.rb +70 -0
  35. data/sabisu_rails.gemspec +30 -0
  36. data/vendor/assets/javascripts/sabisu_rails/KelpJSONView.js +120 -0
  37. data/vendor/assets/javascripts/sabisu_rails/pace.js +2 -0
  38. data/vendor/assets/stylesheets/sabisu_rails/KelpJSONView.css.scss +50 -0
  39. data/vendor/assets/stylesheets/sabisu_rails/pace.css +80 -0
  40. metadata +167 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 284b0d527cd0903c0553fdbb85a121935c342e83
4
+ data.tar.gz: db4e336d9dfeee82b8f322b67d2730f19290db15
5
+ SHA512:
6
+ metadata.gz: 54ba3eaf47892f081eed2a42fb0ea1d6d7d7cdd8a6a9ec16a89c45ce5ecc737f0206c3c86ce292565c404a4257a077aa26bc691cdf62cdfd386ba0f1c8d63f7f
7
+ data.tar.gz: bfa4740da7113d819377b2313bc03714d41b2e90ca22e43e5cb357972b37ec41caf7df7c29b93ba89c032065b3136653355fea0765aa5a59d88c550e710e8e1d
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in sabisu.gemspec
4
+ gemspec
5
+
6
+ gem 'railties', github: 'rails/rails'
7
+ gem 'activemodel', github: 'rails/rails'
8
+ gem 'actionpack', github: 'rails/rails'
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Abraham Kuri
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,109 @@
1
+ # [Sabisu](https://github.com/IcaliaLabs/sabisu)
2
+
3
+ Sabisu is a powerful postman-like engine client to explore your Rails application api. It's still under heavy development, but it is quite impressive and beautiful. Give it a try!
4
+
5
+ It was created by [Abraham Kuri](https://twitter.com/kurenn) from [Icalia Labs](http://twitter.com/icalialabs).
6
+
7
+ To get started, checkout:
8
+
9
+ #### [http://icalialabs.github.io/sabisu-rails/](http://icalialabs.github.io/sabisu-rails/)
10
+
11
+ ## Table of contents
12
+
13
+ - [Installation](#installation)
14
+ - [Customization](#customization)
15
+ - [Bug tracker & feature request](#bug-tracker-&-feature-request)
16
+ - [Contributing](#contributing)
17
+ - [Community](#community)
18
+ - [Heroes](#heroes)
19
+ - [License](#license)
20
+
21
+ ## Quick start
22
+
23
+ Install sabisu is extremely easy, just add some gems to your `Gemfile`
24
+
25
+ ```ruby
26
+ gem 'sabisu-rails'
27
+ gem 'compass-rails'
28
+ gem 'furatto'
29
+ gem 'font-awesome-rails'
30
+ ```
31
+ And then execute:
32
+
33
+ ```console
34
+ $ bundle install
35
+ ```
36
+
37
+ After you install Sabisu you need to run the generator:
38
+
39
+ ```console
40
+ rails g sabisu_rails:install
41
+ ```
42
+
43
+ The generator will install in initializer which describes all the Sabisu configuration options.
44
+
45
+ Some of these configuration options include you api endpoint base uri, so as your resources, so you better take a look at it.
46
+
47
+ Once you are done with the configuration, start your rails application and navigate to `http://localhost:3000/sabisu_rails/explorer`
48
+
49
+ If everything went good you should see a nice explorer interface with your resources.
50
+
51
+ ## Customization
52
+
53
+ Sabisu is highly customizable to make your life easier, here is a quick example of a real app configuration, remember you have the configuration file under `config/initializers/sabisu_rails.rb`.
54
+
55
+ ```ruby
56
+ SabisuRails.setup do |config|
57
+
58
+ # Base uri for posting the
59
+ config.base_api_uri = 'api.sabisu.dev'
60
+
61
+ # Ignored attributes for building the forms
62
+ # config.ignored_attributes = %w{ created_at updated_at id }
63
+
64
+ # HTTP methods
65
+ # config.http_methods = %w{ GET POST PUT DELETE PATCH }
66
+
67
+ # Headers to include on each request
68
+ config.api_headers = {'Accept' => 'application/vnd.sabisu.v1'}
69
+
70
+ # Resources on the api
71
+ config.resources = [:products, :users]
72
+
73
+ end
74
+ ```
75
+ We invite you to look at the full file for further customization.
76
+
77
+ ## Bug tracker & feature request
78
+
79
+ Have a bug or a feature request? [Please open a new issue](https://github.com/IcaliaLabs/sabisu-rails/issues). Before opening any issue, please search for existing issues.
80
+
81
+ We recommend you to read the version [milestiones](https://github.com/IcaliaLabs/sabisu-rails/issues?milestone=2&state=open) if you feel like want to collaborate.
82
+
83
+ ## Contributing
84
+
85
+ Please submit all pull requests against a separate branch. Although it does not have tests yet, be a nice guy and add some for your feature. We'll be working hard to add them too.
86
+
87
+ In case you are wondering what to attack, we have a milestone with the version to work, some fixes and refactors. Feel free to start one.
88
+
89
+ Thanks!
90
+
91
+ ## Community
92
+
93
+ Keep track of new feautres, development issues and community news.
94
+
95
+ * Follow [@kurenn](https://twitter.com/kurenn)
96
+ * Have a question about anything, email us at weare@icalialabs.com
97
+
98
+ ## Heroes
99
+
100
+ **Abraham Kuri**
101
+
102
+ + [http://twitter.com/kurenn](http://twitter.com/kurenn)
103
+ + [http://github.com/kurenn](http://github.com/kurenn)
104
+ + [http://klout.com/#/kurenn](http://klout.com/#/kurenn)
105
+
106
+
107
+ ## Copyright and license
108
+
109
+ Code and documentation copyright 2013-2014 Icalia Labs. Code released under [the MIT license](LICENSE).
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,12 @@
1
+ // This is a manifest file that'll be compiled into including all the files listed below.
2
+ // Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
3
+ // be included in the compiled file accessible from http://example.com/assets/application.js
4
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
5
+ // the compiled file.
6
+ //
7
+ //= require jquery
8
+ //= require jquery_ujs
9
+ //= require sabisu_rails/KelpJSONView
10
+ //= require furatto
11
+ //= require sabisu_rails/sabisu
12
+ //= require sabisu_rails/pace
@@ -0,0 +1,40 @@
1
+ capitalize = (str) ->
2
+ str[0].toUpperCase() + str.slice(1)
3
+
4
+ $ ->
5
+ $addButtons = $('.explorer-fields-link-js')
6
+ fieldId = 1
7
+
8
+ $addButtons.on 'click', (e) ->
9
+ e.preventDefault()
10
+ $wrapperTarget = $($(@).data('target'))
11
+ inputType = $(@).data('type')
12
+ singleInputType = capitalize(inputType.substring(0, inputType.length - 1).replace("_", " "))
13
+
14
+ fieldsToAppend = "<div class='row'>
15
+ <div class='col-5'>
16
+ <input type='text' name='explorer[#{inputType}][#{fieldId}][#{inputType}_name_#{fieldId}]' id='explorer_#{inputType}_name_#{fieldId}' placeholder='#{singleInputType} name'/>
17
+ </div>
18
+ <div class='col-6'>
19
+ <input type='text' name='explorer[#{inputType}][#{fieldId}][#{inputType}_value_#{fieldId}]' id='explorer_#{inputType}_value_#{fieldId}' placeholder='#{singleInputType} value'/>
20
+ </div>
21
+ <div class='col-1'>
22
+ <a href='#' class='remove_input button radius nomargin danger three-d' data-counter='##{inputType}_counter_js'><i class='fa fa-trash-o'></i></a>
23
+ </div>
24
+ </div>"
25
+
26
+ $wrapperTarget.append(fieldsToAppend)
27
+ $("##{inputType}_counter_js").text($wrapperTarget.children().length)
28
+ fieldId++
29
+
30
+ $(document).on 'click', '.remove_input', (e) ->
31
+ e.preventDefault()
32
+ inputsWrapper = $(@).parent().parent().parent()
33
+ counter = $($(@).data('counter'))
34
+ $(@).parent().parent().remove()
35
+ counter.text(inputsWrapper.children().length)
36
+
37
+ $('#explorer_form').submit ->
38
+ Pace.start()
39
+
40
+
@@ -0,0 +1,9 @@
1
+ @import 'furatto/functions';
2
+ @import 'furatto/selectors';
3
+ @import 'normalize';
4
+ @import 'sabisu_rails/furatto_overrides';
5
+ @import 'font-awesome';
6
+ @import 'furatto';
7
+ @import 'sabisu_rails/KelpJSONView';
8
+ @import 'sabisu_rails/explorer';
9
+ @import 'sabisu_rails/pace';
@@ -0,0 +1,117 @@
1
+ .main-content {
2
+ border-left: 1px solid darken(#F5F5F5, 5%);
3
+ padding-left: 30px;
4
+ background: #FFF;
5
+ padding-bottom: 20px;
6
+ }
7
+
8
+ .navigation {
9
+ &.side {
10
+ height: 100%;
11
+ padding: 0;
12
+ .header {
13
+ background: #EA5D5F;
14
+ border: 1px solid darken(#EA5D5F, 4%);
15
+ padding-left: 20px;
16
+ padding-top: 50px;
17
+ padding-bottom: 10px;
18
+
19
+ &:hover {
20
+ background: #EA5D5F;
21
+ border: 1px solid darken(#EA5D5F, 4%);
22
+ }
23
+ }
24
+
25
+ li {
26
+ padding-left: 20px;
27
+ cursor: pointer;
28
+ &:hover {
29
+ background: #7BD5D3;
30
+ }
31
+ }
32
+
33
+ li.active {
34
+ position: relative;
35
+ background: #7BD5D3;
36
+ border: 1px solid darken(#7BD5D3, 4%);
37
+
38
+ &:after {
39
+ content: '';
40
+ position: absolute;
41
+ right: -2px;
42
+ top: 12px;
43
+ width: 0;
44
+ height: 0;
45
+ border-top: 12px solid transparent;
46
+ border-bottom: 12px solid transparent;
47
+
48
+ border-right:12px solid #FFF;
49
+ }
50
+ }
51
+ }
52
+ }
53
+
54
+ .nomargin {
55
+ margin: 0;
56
+ }
57
+
58
+ fieldset {
59
+ border: none;
60
+ padding: 0 0 8px 0;
61
+ margin-top: 15px;
62
+ color: #555;
63
+ text-transform: uppercase;
64
+
65
+ legend {
66
+ border-bottom: 1px solid rgba(#b3b3b3, 0.5);
67
+ display: block;
68
+ width: 100%;
69
+ padding-bottom: 8px;
70
+ }
71
+ }
72
+
73
+ .button {
74
+ &.danger {
75
+ color: #777;
76
+ }
77
+ }
78
+
79
+ .navigation {
80
+ &.inline {
81
+ li {
82
+ a {
83
+ padding: 2px 5px;
84
+ font-weight: lighter;
85
+ }
86
+
87
+ &.active {
88
+ border-top: 2px solid darken($navigation-inline-active-background, 10%);
89
+ }
90
+ }
91
+ }
92
+ }
93
+
94
+ .response-details {
95
+ float: right;
96
+ padding-right: 25px;
97
+ }
98
+
99
+ .response-wrapper {
100
+ padding-right: 10px;
101
+ }
102
+
103
+ .text-strong {
104
+ font-weight: bold;
105
+ }
106
+
107
+ .headers {
108
+ span {
109
+ display: inline-block;
110
+ margin-bottom: 10px;
111
+ font-size: 13px;
112
+ }
113
+
114
+ i.fa {
115
+ margin: 0 8px;
116
+ }
117
+ }
@@ -0,0 +1,24 @@
1
+ // Navigation overrides
2
+ $navigation-header-color: #FFF;
3
+ $navigation-header-font-size: px-to-rems(16);
4
+ $navigation-list-item-active-color: #FFF;
5
+ $navigation-list-link-display: block;
6
+ $navigation-list-link-padding: 12px 0;
7
+ $navigation-link-color: #333;
8
+ $navigation-list-item-font-size: 1rem;
9
+
10
+ $navigation-inline-active-background: #B2789C;
11
+ $navigation-inline-active-padding: 2px 10px;
12
+
13
+ // Base overrides
14
+ $body-background-color: #F5F5F5;
15
+
16
+ // Buttons
17
+ $button-default-background-color: #EA5D5F;
18
+ $button-primary-background: #7BD5D3;
19
+ $button-danger-background: #ecf0f1;
20
+ $button-success-background: #8ABD68;
21
+
22
+ // Labels
23
+ $label-default-background: $button-default-background-color;
24
+ $label-primary-background: #34495e;
@@ -0,0 +1,16 @@
1
+ module SabisuRails
2
+ class BaseController < ApplicationController
3
+
4
+ layout SabisuRails.layout
5
+
6
+ before_filter :authenticate
7
+
8
+ protected
9
+
10
+ def authenticate
11
+ authenticate_or_request_with_http_basic do |username, password|
12
+ username == SabisuRails.authentication_username && password == SabisuRails.authentication_password
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ module SabisuRails
2
+ class ExplorerController < SabisuRails::BaseController
3
+
4
+ def index
5
+ @resources = SabisuRails.resources
6
+ @explorer = SabisuRails::Explorer.new(params[:explorer] || {})
7
+ @response = SabisuRails::Request.new(@explorer, params[@explorer.resource_name], params[:explorer]).response
8
+ respond_to do |format|
9
+ format.html
10
+ format.js
11
+ end
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,28 @@
1
+ module SabisuRails::ExplorerHelper
2
+
3
+ def label_attribute(explorer, attr)
4
+ explorer.required_attribute?(attr) ? "* #{attr.capitalize}" : attr.capitalize
5
+ end
6
+
7
+ def active_resource_state(resource)
8
+ loaded_resource = SabisuRails.default_resource
9
+ if params[:explorer].nil?
10
+ "active" if loaded_resource == resource
11
+ else
12
+ "active" if params[:explorer][:resource] == resource
13
+ end
14
+ end
15
+
16
+ def prettify_headers(headers)
17
+ html = ""
18
+ headers.each do |k, v|
19
+ k = k.titleize.split(' ').join('-')
20
+ header_name = content_tag :span, k, class: 'text-muted text-strong'
21
+ arrow = content_tag :span," <i class='fa fa-long-arrow-right'></i> ".html_safe, class: 'text-muted'
22
+ header_value = content_tag :span, v, class: 'text-muted'
23
+ html << (header_name + arrow + header_value)
24
+ html << "<br />"
25
+ end
26
+ html.html_safe
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ module SabisuRailsHelper
2
+
3
+ end
@@ -0,0 +1,28 @@
1
+ <html lang="en">
2
+
3
+ <head>
4
+ <!--includes meta tags, title and more header definitions-->
5
+ <meta charset="utf-8">
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=no">
8
+ <link href="http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css">
9
+
10
+ <title>Sabisu Explorer</title>
11
+
12
+ <!-- Furatto core CSS -->
13
+ <%= stylesheet_link_tag "sabisu_rails/application", :cache => true %>
14
+ <%= csrf_meta_tag %>
15
+
16
+ <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
17
+ <!--[if lt IE 9]>
18
+ <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
19
+ <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
20
+ <![endif]-->
21
+ </head>
22
+
23
+ <body>
24
+ <%= yield %>
25
+ <%= javascript_include_tag "sabisu_rails/application" %>
26
+ <%= yield :javascripts %>
27
+ </body>
28
+ </html>
@@ -0,0 +1,86 @@
1
+ <div class="row">
2
+ <div class="col-2 nopadding">
3
+ <ul class="navigation side">
4
+ <li class="header"><%= SabisuRails.app_name %> - <br /> Api Explorer</li>
5
+ <% @resources.each do |resource| %>
6
+ <li class="<%= active_resource_state(resource) %>"><%= link_to resource.capitalize, explorer_path(explorer: { resource: resource }) %></li>
7
+ <% end %>
8
+ </ul>
9
+ </div>
10
+ <div class="col-10 nopadding">
11
+ <div class="main-content">
12
+ <div class="row">
13
+ <div class="col-2">
14
+ <h4 class="text-muted"><%= "/#{@explorer.resource}/" %></h4>
15
+ </div>
16
+ <div class="col-10">
17
+
18
+ <%= form_for :explorer, url: explorer_path, html: {id: 'explorer_form'}, method: :get, remote: true do |f| %>
19
+ <%= f.hidden_field :resource, value: @explorer.resource %>
20
+ <div class="row">
21
+ <div class="col-6">
22
+ <%= f.text_field :uri_pattern, value: @explorer.uri_pattern, placeholder: "URI pattern. 1 or bids or orders/1" %>
23
+ </div>
24
+ <div class="col-2">
25
+ <%= f.select :http_method, options_for_select(SabisuRails.http_methods, @explorer.http_method.upcase) %>
26
+ </div>
27
+ <div class="col-2">
28
+ <a href="#" class="button radius block nomargin three-d explorer-fields-link-js" data-target="#url_params_inputs" data-type="url_params"><i class="fa fa-link"></i>Url params</a>
29
+ </div>
30
+ <div class="col-2">
31
+ <a href="#" class="button radius block nomargin three-d explorer-fields-link-js" data-target="#header_inputs" data-type="headers"><i class="fa fa-indent"></i> Headers</a>
32
+ </div>
33
+ </div>
34
+ <br />
35
+ <fieldset>
36
+ <legend>Url params (<span class="label round" id="url_params_counter_js">0</span>)</legend>
37
+ <div class="row" id="url_params_inputs">
38
+
39
+ </div>
40
+ </fieldset>
41
+ <fieldset>
42
+ <legend>Headers (<span class="label round" id="headers_counter_js">0</span>)</legend>
43
+ <div class="row" id="header_inputs">
44
+
45
+ </div>
46
+ </fieldset>
47
+
48
+ <%= f.submit "Send", class: 'button large radius three-d success', data: { :disable_with => "Processing..." } %>
49
+ <% end %>
50
+ </div>
51
+ </div>
52
+
53
+ <div class="response-wrapper">
54
+ <hr />
55
+
56
+ <div class="row">
57
+ <div class="response-details">
58
+ <ul class="navigation inline">
59
+ <li><small><strong>STATUS:</strong></small> <span class="label primary radius" id="response_status"><%= @response.code %></span></li>
60
+ <li><small><strong>TIME:</strong></small> <span class="label primary radius" id="response_time"><%= @response.headers['x-runtime'] %> ms</span></li>
61
+ </ul>
62
+ </div>
63
+ <ul class="navigation inline" data-tabu>
64
+ <li><a href="#result">Body</a></li>
65
+ <li><a href="#headers_result">(<span id="headers_count"><%= @response.headers.count %></span>) Headers</a></li>
66
+ </ul>
67
+ <div class="tabu-content">
68
+ <div class="content row" id="result">
69
+ </div>
70
+ <div class="content row headers" id="headers_result">
71
+ <%= prettify_headers @response.headers %>
72
+ </div>
73
+ </div>
74
+ </div>
75
+ </div>
76
+ </div>
77
+ </div>
78
+ </div>
79
+
80
+ <%= content_for :javascripts do %>
81
+ <script type="text/javascript" charset="utf-8">
82
+ $(document).ready(function(){
83
+ $.JSONView(<%= @response.body.html_safe %>, $('#result'));
84
+ });
85
+ </script>
86
+ <% end %>
@@ -0,0 +1,6 @@
1
+ $.JSONView(<%= @response.body.html_safe %>, $('#result'));
2
+ $("#response_status").text(<%= @response.code %>);
3
+ $("#response_time").text(<%= @response.headers['x-runtime'] %>);
4
+ $('#headers_result').html("<%= j prettify_headers @response.headers %>");
5
+ $('#headers_count').text(<%= @response.headers.count %>)
6
+ Pace.stop();
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+ SabisuRails::Engine.routes.draw do
2
+ get "explorer", to: "explorer#index"
3
+ end
@@ -0,0 +1,17 @@
1
+ module SabisuRails
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path("../templates", __FILE__)
5
+
6
+ desc "Creates a Sabisu initializer in your application"
7
+
8
+ def copy_initializer
9
+ template "sabisu_rails.rb", "config/initializers/sabisu_rails.rb"
10
+ end
11
+
12
+ def mount_sabisu_engine
13
+ route %Q(mount SabisuRails::Engine => "/sabisu_rails")
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,34 @@
1
+ # Use this module to configure the sabisu available options
2
+
3
+ SabisuRails.setup do |config|
4
+
5
+ # Base uri for posting the
6
+ # config.base_api_uri = nil
7
+
8
+ # Ignored attributes for building the forms
9
+ # config.ignored_attributes = %w{ created_at updated_at id }
10
+
11
+ # HTTP methods
12
+ # config.http_methods = %w{ GET POST PUT DELETE PATCH }
13
+
14
+ # Headers to include on each request
15
+ # config.api_headers = {}
16
+
17
+ # Layout configuration
18
+ # config.layout = "sabisu"
19
+
20
+ # Resources on the api
21
+ # config.resources = [:products, :users...]
22
+
23
+ # Application name
24
+ # mattr_accessor :app_name
25
+ # @@app_name = Rails.application.class.parent_name
26
+
27
+ # Authentication
28
+ # mattr_accessor :authentication_username
29
+ # @@authentication_username = "admin"
30
+
31
+ # mattr_accessor :authentication_password
32
+ # @@authentication_password = "sekret"
33
+
34
+ end
@@ -0,0 +1,26 @@
1
+ module SabisuRails
2
+ module Builders
3
+ class Base
4
+
5
+ def initialize(params)
6
+ @params = params || {}
7
+ sanitize_params
8
+ end
9
+
10
+ def build
11
+ query_params = {}
12
+ @sanitized_params.each do |k,v|
13
+ values = v.values #returns the nested hash, and we get the values from that hash
14
+ query_params[values[0]] = values[1]
15
+ end
16
+ query_params
17
+ end
18
+
19
+ private
20
+
21
+ def sanitize_params
22
+ @sanitized_params = @params.reject { |k,v| v.blank? }
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,6 @@
1
+ module SabisuRails
2
+ module Builders
3
+ class HeadersBuilder < SabisuRails::Builders::Base
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module SabisuRails
2
+ module Builders
3
+ class UrlParamsBuilder < SabisuRails::Builders::Base
4
+ end
5
+ end
6
+ end