easy_api_doc 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +58 -0
- data/Rakefile +40 -0
- data/app/assets/images/easy_api_doc/favicon.ico +0 -0
- data/app/assets/images/easy_api_doc/glyphicons-halflings-white.png +0 -0
- data/app/assets/images/easy_api_doc/glyphicons-halflings.png +0 -0
- data/app/assets/images/easy_api_doc/loading.gif +0 -0
- data/app/assets/javascripts/easy_api_doc/api.js +2 -0
- data/app/assets/javascripts/easy_api_doc/application.js +15 -0
- data/app/assets/javascripts/easy_api_doc/base64.js +65 -0
- data/app/assets/javascripts/easy_api_doc/bootstrap.js +1999 -0
- data/app/assets/javascripts/easy_api_doc/documentation.js +223 -0
- data/app/assets/javascripts/easy_api_doc/status_codes.js +61 -0
- data/app/assets/stylesheets/easy_api_doc/api.css +4 -0
- data/app/assets/stylesheets/easy_api_doc/application.css +13 -0
- data/app/assets/stylesheets/easy_api_doc/bootstrap.css +6805 -0
- data/app/assets/stylesheets/easy_api_doc/documentation.css +47 -0
- data/app/controllers/easy_api_doc/api_controller.rb +13 -0
- data/app/controllers/easy_api_doc/application_controller.rb +17 -0
- data/app/controllers/easy_api_doc/documentation_controller.rb +42 -0
- data/app/helpers/easy_api_doc/application_helper.rb +71 -0
- data/app/helpers/easy_api_doc/documentation_helper.rb +5 -0
- data/app/models/easy_api_doc/action.rb +59 -0
- data/app/models/easy_api_doc/api_version.rb +18 -0
- data/app/models/easy_api_doc/namespace.rb +14 -0
- data/app/models/easy_api_doc/parameter.rb +49 -0
- data/app/models/easy_api_doc/resource.rb +18 -0
- data/app/views/easy_api_doc/api/index.html.erb +5 -0
- data/app/views/easy_api_doc/documentation/_parameter.html.erb +29 -0
- data/app/views/easy_api_doc/documentation/_resource_index.html.erb +16 -0
- data/app/views/easy_api_doc/documentation/api_action.html.erb +105 -0
- data/app/views/easy_api_doc/documentation/namespace.html.erb +13 -0
- data/app/views/easy_api_doc/documentation/resource.html.erb +18 -0
- data/app/views/layouts/easy_api_doc/_header.html.erb +23 -0
- data/app/views/layouts/easy_api_doc/application.html.erb +34 -0
- data/app/views/shared/_versions_index.html.erb +10 -0
- data/config/routes.rb +9 -0
- data/lib/configurable.rb +92 -0
- data/lib/configuration.rb +31 -0
- data/lib/easy_api_doc/engine.rb +5 -0
- data/lib/easy_api_doc/version.rb +3 -0
- data/lib/easy_api_doc.rb +6 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +36 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +39 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +3 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/doc/api_doc.yml +104 -0
- data/test/dummy/log/development.log +742 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/04965396c9cfe69081b5dd98c3212fae +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/16d88b38a506ba01a817e258ad8fb263 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/203aa633656e7d9c927c57c46e470c83 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2f062b493cefffdbc012a973e9a105d5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2f0ed6020953bd16ba9b363edbf7cda0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/30465ccaba36954861158b4242883bd6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/36351f369d6eaf233c5e86e07555c170 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/405c9c78a785fb067d1c67657cfc62ef +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4abfd2becb22be944eb58bcf7107c873 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4c371d51ee36edfddc4b8428b18dd632 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4e7b4f8fde8fe12c9c12da639bed576e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/543e8b4a615c1577865f6ef73059d40f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/593636db3cefe193ebf65f5b58f57c9a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/67409083f86d1b03662b495d04418132 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6afb7fed89c6f68558c4186d7a740a3a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6b1110992dffe4c4455380229a0b8dff +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6db6675fbfed66d3d342f71869217dac +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/75d2dc9028e3a3f3e6ca14d8f2fe7b5e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/76b036b95dde7edc081890640b4e7ed0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/76da432edc6235bd7d73c3335233b1ed +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/76faccd1d102ff2260e90ba48328b865 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7cbc737c6b2b24706bf9170823e12d87 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7de191b871e66d0c65b1cbaf04a60f58 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/802227e7577d1f42b5991586df8c9f02 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/848e56c99230cfa8034c10a99fc52c28 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8619cf373138f78fdaab67c14cf6593b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8b8f23bb1606d4e7f5738827686ff14f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8dde0af325a3c57426da61982576c899 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/92396eadb57dc8abfb0bf5b3a01295a8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/92a86617e44e9093fb483fc122b75752 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/940b911c55d2dc0ea6ca56b25f087739 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a39a3034ca0b3e6ae8eaca11c3ca5ad6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a8036af98430c82633505d9ca5fcde5f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b4869b1ad3dab2a1821989791a57171f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b7ad7703003d24dab911bd3730756ca6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b89605b311bfb96d01c875e7a9710861 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c237c4326b837e51c2650d4f6ed7b7a5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c780d1da090d4bb4d9fa09753f04e17f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ca91101b167a195ab54cdbc39efec3e9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cdb61eee371606ef082a5ee3189889d2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d86f52fe55c0b5686bacec92537b0c03 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e9636c04426623ad28848cb917d96a95 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ee9a7b09a7ab141b6ae0cf8ce9197a3c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f0fcdc72564e7709bcdeb9e88dd86135 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f5bcd46e1a1371d63dec98bc97bcda4c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/fb3e3925ae8dcb2704d2602719387463 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/fcbbb63c7069e7c3b471d13ff0441d2a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ff8858e82d7df03c855d847837676e31 +0 -0
- data/test/test_helper.rb +10 -0
- metadata +291 -0
@@ -0,0 +1,223 @@
|
|
1
|
+
// Place all the behaviors and hooks related to the matching controller here.
|
2
|
+
// All this logic will automatically be available in application.js.
|
3
|
+
|
4
|
+
// Disables all fields in the API example, (convenience so that not all are needed to be disabled one at a time to update just one field)
|
5
|
+
$(document).ready(function () {
|
6
|
+
$('.disable-all-toggle').on('click', function(e){
|
7
|
+
var link = $(e.target);
|
8
|
+
if(link.html().match(/disable/)){
|
9
|
+
$('form.api_call .input').attr('disabled', 'disabled');
|
10
|
+
link.html('enable all');
|
11
|
+
$('form.api_call .disable-field-toggle').html('enable');
|
12
|
+
}
|
13
|
+
else {
|
14
|
+
$('form.api_call .input').removeAttr('disabled');
|
15
|
+
link.html('disable all');
|
16
|
+
$('form.api_call .disable-field-toggle').html('disable');
|
17
|
+
}
|
18
|
+
});
|
19
|
+
|
20
|
+
// Execute the example API call form
|
21
|
+
$('form.api_call .run_api_call').on('click', function(e) {
|
22
|
+
try {
|
23
|
+
var form = $(e.target).parents('form');
|
24
|
+
var params = get_form_params(form);
|
25
|
+
var format = params.format;
|
26
|
+
delete params['format'];
|
27
|
+
var uri = form.attr('action') + '.' + format;
|
28
|
+
var auth_settings = pop_auth_settings(params);
|
29
|
+
|
30
|
+
// switch out url variables;
|
31
|
+
var matches = uri.match(/\/(\:\w+)/g);
|
32
|
+
if(matches) {
|
33
|
+
$.each(matches, function(i, key) {
|
34
|
+
param_name = key.replace("/:", "");
|
35
|
+
var value = params[param_name];
|
36
|
+
uri = uri.replace(key, "/" + value);
|
37
|
+
delete params[param_name];
|
38
|
+
});
|
39
|
+
}
|
40
|
+
if (params['_doc_post_data'] != null) {
|
41
|
+
params = serialize_params(params);
|
42
|
+
var query_string = [];
|
43
|
+
for (var key in params)
|
44
|
+
if (key != '_doc_post_data') {
|
45
|
+
query_string.push(key + "=" + params[key]);
|
46
|
+
}
|
47
|
+
if (query_string.length > 0) {
|
48
|
+
uri += "?" + query_string.join("&")
|
49
|
+
}
|
50
|
+
params = params['_doc_post_data'];
|
51
|
+
} else {
|
52
|
+
params = serialize_params(params);
|
53
|
+
}
|
54
|
+
|
55
|
+
var remote_method = form.attr('method');
|
56
|
+
|
57
|
+
process_api_call(uri, remote_method, params, auth_settings, {'form': form, 'format': format});
|
58
|
+
}
|
59
|
+
catch(e) {
|
60
|
+
alert("There was an error within the test harness");
|
61
|
+
throw(e);
|
62
|
+
}
|
63
|
+
return false;
|
64
|
+
});
|
65
|
+
|
66
|
+
// Disable a single field in the API example (prevents blank parameters being passed that aren't wanted to be filled out)
|
67
|
+
$('form.api_call .disable-field-toggle').on('click', function(e){
|
68
|
+
var link = $(e.target);
|
69
|
+
var input = link.closest('tr').children().children('.input');
|
70
|
+
|
71
|
+
if(input.attr('disabled')){
|
72
|
+
input.removeAttr('disabled');
|
73
|
+
link.html('disable');
|
74
|
+
}
|
75
|
+
else {
|
76
|
+
input.attr('disabled', 'disabled')
|
77
|
+
link.html('enable');
|
78
|
+
}
|
79
|
+
return false;
|
80
|
+
});
|
81
|
+
|
82
|
+
// Array data structure support:
|
83
|
+
// appends fields using a hash structure with keys of '_array_0' ...
|
84
|
+
$('.append-fields').on('click', function(e){
|
85
|
+
var link = $(e.target);
|
86
|
+
var input = link.parent().children('.input').first();
|
87
|
+
|
88
|
+
new_node = input.clone();
|
89
|
+
new_node.val(""); // blank contents
|
90
|
+
new_node.addClass('additional');
|
91
|
+
|
92
|
+
elem_to_insert_after = link.parent().children('.input, .append-fields').last();
|
93
|
+
elem_to_insert_after.after(new_node);
|
94
|
+
|
95
|
+
link.parent().children('.input').each(function(i, elem) {
|
96
|
+
elem = $(elem);
|
97
|
+
var field_name = elem.attr('name');
|
98
|
+
field_name = field_name.replace(/\[(_array_)?\d*\]$/, "[_array_" + i + "]");
|
99
|
+
elem.attr('name', field_name);
|
100
|
+
});
|
101
|
+
|
102
|
+
return false;
|
103
|
+
});
|
104
|
+
|
105
|
+
});
|
106
|
+
|
107
|
+
// Example of how to send an api call via jQuery. Note that there are issues running this from a separate domain
|
108
|
+
// when executed in a web browser, due to Cross-Site security constraints from browsers
|
109
|
+
// For basic auth, either use already encoded credentials, or you'll need a javascript Base64 library as used below
|
110
|
+
// See: http://ostermiller.org/calc/encode.html for an example Base64 encoding js library
|
111
|
+
function process_api_call(uri, method, data, auth_settings, options) {
|
112
|
+
var form = options.form;
|
113
|
+
$.ajax({
|
114
|
+
url: uri,
|
115
|
+
type: method,
|
116
|
+
data: data,
|
117
|
+
error: function(xhr, data, ex) {
|
118
|
+
response = xhr.responseText;
|
119
|
+
if(response == null || response == '' || response.size == 0){
|
120
|
+
response = data;
|
121
|
+
}
|
122
|
+
form_output(options.form, response, xhr.status, options.format);
|
123
|
+
},
|
124
|
+
beforeSend: function(xhr, settings) {
|
125
|
+
form_output(options.form, '', '', options.format); // clear output
|
126
|
+
form.children('.loading').show();
|
127
|
+
auth_value = null;
|
128
|
+
if(auth_settings && auth_settings.type == 'basic') {
|
129
|
+
auth_value = "Basic " + encodeBase64(auth_settings.user + ":" + auth_settings.password);
|
130
|
+
} else if (auth_settings && auth_settings.type == 'oauth_grant') {
|
131
|
+
auth_value = "Basic " + encodeBase64(auth_settings.client_id + ":" + auth_settings.secret);
|
132
|
+
} else if (auth_settings && auth_settings.type == 'oauth_bearer') {
|
133
|
+
auth_value = "Bearer " + auth_settings.access_token;
|
134
|
+
}
|
135
|
+
if (auth_value != null)
|
136
|
+
xhr.setRequestHeader("Authorization", auth_value.replace(/(\r\n|\n|\r)/gm,"")); // dont send through \n on headers or they will be ignored
|
137
|
+
return true;
|
138
|
+
},
|
139
|
+
success: function(data, textStatus, xhr) {
|
140
|
+
response = xhr.responseText;
|
141
|
+
form_output(options.form, response, xhr.status, options.format);
|
142
|
+
},
|
143
|
+
complete: function(xhr, textStatus){
|
144
|
+
form.children('.loading').hide();
|
145
|
+
}
|
146
|
+
});
|
147
|
+
}
|
148
|
+
|
149
|
+
// Print the API response
|
150
|
+
function form_output(form, response, status, format) {
|
151
|
+
form.children('.response').show();
|
152
|
+
|
153
|
+
var pre = $(form.children('.response').children('.output'));
|
154
|
+
if(format == 'json') {
|
155
|
+
try {
|
156
|
+
response = JSON.stringify(JSON.parse(response), null, 4);
|
157
|
+
}
|
158
|
+
catch(e) {
|
159
|
+
// ignore formatting errors, and fall back to plain string response
|
160
|
+
}
|
161
|
+
}
|
162
|
+
// pre.html(response);
|
163
|
+
pre.val(response);
|
164
|
+
|
165
|
+
if(status != null) {
|
166
|
+
status_header = HTTP_STATUS_CODES[status.toString()[0] + 'XX'];
|
167
|
+
status_message = HTTP_STATUS_CODES[status];
|
168
|
+
if(status_header || status_message) {
|
169
|
+
status = status.toString() + " - " + status_header + " (" + status_message + ")";
|
170
|
+
}
|
171
|
+
form.children('.response').children().children('.http_status').html(status);
|
172
|
+
}
|
173
|
+
}
|
174
|
+
|
175
|
+
function pop_auth_settings(params){
|
176
|
+
var auth_settings = {};
|
177
|
+
|
178
|
+
auth_settings['type'] = params['_doc_authentication[type]'];
|
179
|
+
auth_settings['user'] = params['_doc_authentication[user]'];
|
180
|
+
auth_settings['client_id'] = params['_doc_authentication[client_id]'];
|
181
|
+
auth_settings['password'] = params['_doc_authentication[password]'];
|
182
|
+
auth_settings['secret'] = params['_doc_authentication[secret]'];
|
183
|
+
auth_settings['access_token'] = params['_doc_authentication[access_token]'];
|
184
|
+
delete params['_doc_authentication[type]'];
|
185
|
+
delete params['_doc_authentication[user]'];
|
186
|
+
delete params['_doc_authentication[client_id]'];
|
187
|
+
delete params['_doc_authentication[password]'];
|
188
|
+
delete params['_doc_authentication[secret]'];
|
189
|
+
delete params['_doc_authentication[access_token]'];
|
190
|
+
|
191
|
+
return auth_settings;
|
192
|
+
}
|
193
|
+
|
194
|
+
// helper to map the html form parameters to a hash
|
195
|
+
function get_form_params(form) {
|
196
|
+
var attrs = {};
|
197
|
+
jQuery.map(form.serializeArray(), function(n, i){
|
198
|
+
attrs[n['name']] = n['value'];
|
199
|
+
});
|
200
|
+
delete attrs['utf8']; // remove this jQuery param
|
201
|
+
return attrs;
|
202
|
+
}
|
203
|
+
|
204
|
+
// This maps our pseudo array hash structure into a true javascript array value
|
205
|
+
function serialize_params(params) {
|
206
|
+
formatted_params = {};
|
207
|
+
jQuery.map(params, function(value, key){
|
208
|
+
if(key.match(/\[\_array\_\d+\]$/)) {
|
209
|
+
real_key_name = key.replace(/\[\_array\_\d+\]$/, '');
|
210
|
+
if(formatted_params[real_key_name]){
|
211
|
+
formatted_params[real_key_name].push(value);
|
212
|
+
}
|
213
|
+
else {
|
214
|
+
formatted_params[real_key_name] = [value];
|
215
|
+
}
|
216
|
+
}
|
217
|
+
else {
|
218
|
+
formatted_params[key] = value;
|
219
|
+
}
|
220
|
+
});
|
221
|
+
return formatted_params;
|
222
|
+
}
|
223
|
+
|
@@ -0,0 +1,61 @@
|
|
1
|
+
var HTTP_STATUS_CODES = {
|
2
|
+
'2XX': 'Success',
|
3
|
+
200: 'OK',
|
4
|
+
201: 'Created',
|
5
|
+
202: 'Accepted',
|
6
|
+
203: 'Non-Authoritative Information',
|
7
|
+
204: 'No Content',
|
8
|
+
205: 'Reset Content',
|
9
|
+
206: 'Partial Content',
|
10
|
+
207: 'Multi-Status',
|
11
|
+
208: 'Already Reported',
|
12
|
+
226: 'IM Used',
|
13
|
+
|
14
|
+
'3XX': 'Redirect',
|
15
|
+
300: 'Multiple Choices',
|
16
|
+
301: 'Moved Permanently',
|
17
|
+
302: 'Found',
|
18
|
+
303: 'See Other',
|
19
|
+
304: 'Not Modified',
|
20
|
+
305: 'Use Proxy',
|
21
|
+
306: 'Switch Proxy',
|
22
|
+
307: 'Temporary Redirect',
|
23
|
+
308: 'Permanent Redirect',
|
24
|
+
|
25
|
+
'4XX': 'Client Error',
|
26
|
+
400: 'Bad Request',
|
27
|
+
401: 'Unauthorized',
|
28
|
+
402: 'Payment Required',
|
29
|
+
403: 'Forbidden',
|
30
|
+
404: 'Not Found',
|
31
|
+
405: 'Method Not Allowed',
|
32
|
+
406: 'Not Acceptable',
|
33
|
+
407: 'Proxy Authentication Required',
|
34
|
+
408: 'Request Timeout',
|
35
|
+
409: 'Conflict',
|
36
|
+
410: 'Gone',
|
37
|
+
411: 'Length Required',
|
38
|
+
412: 'Precondition Failed',
|
39
|
+
413: 'Request Entity Too Large',
|
40
|
+
414: 'Request-URI Too Long',
|
41
|
+
415: 'Unsupported Media Type',
|
42
|
+
416: 'Requested Range Not Satisfiable',
|
43
|
+
429: 'Too Many Requests',
|
44
|
+
431: 'Request Header Fields Too Large',
|
45
|
+
444: 'No Response',
|
46
|
+
449: 'Retry With',
|
47
|
+
499: 'Client Closed Request',
|
48
|
+
|
49
|
+
'5XX': 'Server Error',
|
50
|
+
500: 'Internal Server Error',
|
51
|
+
501: 'Not Implemented',
|
52
|
+
502: 'Bad Gateway',
|
53
|
+
503: 'Service Unavailable',
|
54
|
+
504: 'Gateway Timeout',
|
55
|
+
505: 'HTTP Version Not Supported',
|
56
|
+
509: 'Bandwidth Limit Exceeded',
|
57
|
+
511: 'Network Authentication Required',
|
58
|
+
598: 'Network read timeout error',
|
59
|
+
599: 'Network connect timeout error',
|
60
|
+
|
61
|
+
};
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the top of the
|
9
|
+
* compiled file, but it's generally better to create a new file per style scope.
|
10
|
+
*
|
11
|
+
*= require_self
|
12
|
+
*= require_tree .
|
13
|
+
*/
|