moonrope 1.4.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +9 -0
- data/Gemfile.lock +47 -0
- data/MIT-LICENCE +20 -0
- data/README.md +24 -0
- data/bin/moonrope +28 -0
- data/docs/authentication.md +114 -0
- data/docs/controllers.md +106 -0
- data/docs/exceptions.md +27 -0
- data/docs/introduction.md +29 -0
- data/docs/structures.md +214 -0
- data/example/authentication.rb +50 -0
- data/example/controllers/meta_controller.rb +14 -0
- data/example/controllers/users_controller.rb +92 -0
- data/example/structures/pet_structure.rb +12 -0
- data/example/structures/user_structure.rb +35 -0
- data/html/assets/lock.svg +3 -0
- data/html/assets/reset.css +101 -0
- data/html/assets/style.css +348 -0
- data/html/assets/tool.svg +4 -0
- data/html/assets/try.js +151 -0
- data/html/authenticators/default.html +191 -0
- data/html/controllers/meta/version.html +144 -0
- data/html/controllers/meta.html +73 -0
- data/html/controllers/users/create.html +341 -0
- data/html/controllers/users/list.html +348 -0
- data/html/controllers/users/show.html +261 -0
- data/html/controllers/users/update.html +387 -0
- data/html/controllers/users.html +93 -0
- data/html/index.html +166 -0
- data/html/moonrope.txt +0 -0
- data/html/structures/pet.html +176 -0
- data/html/structures/user.html +338 -0
- data/lib/moonrope/action.rb +165 -37
- data/lib/moonrope/authenticator.rb +39 -0
- data/lib/moonrope/base.rb +24 -6
- data/lib/moonrope/controller.rb +4 -2
- data/lib/moonrope/doc_context.rb +94 -0
- data/lib/moonrope/doc_server.rb +123 -0
- data/lib/moonrope/dsl/action_dsl.rb +159 -9
- data/lib/moonrope/dsl/authenticator_dsl.rb +31 -0
- data/lib/moonrope/dsl/base_dsl.rb +21 -18
- data/lib/moonrope/dsl/controller_dsl.rb +60 -9
- data/lib/moonrope/dsl/filterable_dsl.rb +27 -0
- data/lib/moonrope/dsl/structure_dsl.rb +27 -2
- data/lib/moonrope/errors.rb +3 -0
- data/lib/moonrope/eval_environment.rb +82 -3
- data/lib/moonrope/eval_helpers/filter_helper.rb +82 -0
- data/lib/moonrope/eval_helpers.rb +28 -5
- data/lib/moonrope/guard.rb +35 -0
- data/lib/moonrope/html_generator.rb +65 -0
- data/lib/moonrope/param_set.rb +11 -1
- data/lib/moonrope/rack_middleware.rb +1 -1
- data/lib/moonrope/railtie.rb +31 -14
- data/lib/moonrope/request.rb +25 -14
- data/lib/moonrope/structure.rb +74 -11
- data/lib/moonrope/structure_attribute.rb +15 -0
- data/lib/moonrope/version.rb +1 -1
- data/lib/moonrope.rb +5 -4
- data/moonrope.gemspec +21 -0
- data/spec/spec_helper.rb +32 -0
- data/spec/specs/action_spec.rb +455 -0
- data/spec/specs/base_spec.rb +29 -0
- data/spec/specs/controller_spec.rb +31 -0
- data/spec/specs/param_set_spec.rb +31 -0
- data/templates/basic/_action_form.erb +77 -0
- data/templates/basic/_errors_table.erb +32 -0
- data/templates/basic/_structure_attributes_list.erb +55 -0
- data/templates/basic/action.erb +168 -0
- data/templates/basic/assets/lock.svg +3 -0
- data/templates/basic/assets/reset.css +101 -0
- data/templates/basic/assets/style.css +348 -0
- data/templates/basic/assets/tool.svg +4 -0
- data/templates/basic/assets/try.js +151 -0
- data/templates/basic/authenticator.erb +51 -0
- data/templates/basic/controller.erb +20 -0
- data/templates/basic/index.erb +114 -0
- data/templates/basic/layout.erb +46 -0
- data/templates/basic/structure.erb +23 -0
- data/test/test_helper.rb +81 -0
- data/test/tests/action_access_test.rb +63 -0
- data/test/tests/actions_test.rb +524 -0
- data/test/tests/authenticators_test.rb +87 -0
- data/test/tests/base_test.rb +35 -0
- data/test/tests/controllers_test.rb +49 -0
- data/test/tests/eval_environment_test.rb +136 -0
- data/test/tests/evel_helpers_test.rb +60 -0
- data/test/tests/examples_test.rb +11 -0
- data/test/tests/helpers_test.rb +97 -0
- data/test/tests/param_set_test.rb +44 -0
- data/test/tests/rack_middleware_test.rb +109 -0
- data/test/tests/request_test.rb +232 -0
- data/test/tests/structures_param_extensions_test.rb +159 -0
- data/test/tests/structures_test.rb +335 -0
- metadata +82 -48
@@ -0,0 +1,93 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Users API - API Documentation</title>
|
5
|
+
<link href='https://fonts.googleapis.com/css?family=Lato:400,700,900' rel='stylesheet' type='text/css'>
|
6
|
+
<link href='https://fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
|
7
|
+
<link rel="stylesheet" href="../assets/reset.css">
|
8
|
+
<link rel="stylesheet" href="../assets/style.css">
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<section class='sidebarBackground'></section>
|
12
|
+
<section class="sidebar">
|
13
|
+
<nav>
|
14
|
+
<ul>
|
15
|
+
<li>
|
16
|
+
<a href='../index.html' class="">
|
17
|
+
Home
|
18
|
+
</a>
|
19
|
+
</li>
|
20
|
+
|
21
|
+
<li>
|
22
|
+
<a href='../authenticators/default.html' class="">
|
23
|
+
Authentication
|
24
|
+
</a>
|
25
|
+
</li>
|
26
|
+
|
27
|
+
|
28
|
+
<li>
|
29
|
+
<a href='../controllers/meta.html' class="">
|
30
|
+
Meta API
|
31
|
+
</a>
|
32
|
+
</li>
|
33
|
+
|
34
|
+
<li>
|
35
|
+
<a href='../controllers/users.html' class="active">
|
36
|
+
Users API
|
37
|
+
</a>
|
38
|
+
</li>
|
39
|
+
|
40
|
+
</ul>
|
41
|
+
</nav>
|
42
|
+
</section>
|
43
|
+
<section class='content'>
|
44
|
+
|
45
|
+
|
46
|
+
<h1>Users API</h1>
|
47
|
+
|
48
|
+
<p class='text'> The Users API provides full access to manage the users
|
49
|
+
which exist on your account.
|
50
|
+
</p>
|
51
|
+
|
52
|
+
<h2>Action</h2>
|
53
|
+
<p class='text'>
|
54
|
+
The following actions are available. Choose from the list below
|
55
|
+
to view full details of how to access them.
|
56
|
+
</p>
|
57
|
+
<ul class='standardList'>
|
58
|
+
|
59
|
+
<li>
|
60
|
+
<a class='link' href='../controllers/users/list.html'>List all users</a>
|
61
|
+
<p class='apiURL'><span>/api/v1/</span><b>users/list</b></p>
|
62
|
+
<p class='meta'>This action will return a list of all users which the authenticated user has access to.</p>
|
63
|
+
</li>
|
64
|
+
|
65
|
+
<li>
|
66
|
+
<a class='link' href='../controllers/users/show.html'>Get unit information</a>
|
67
|
+
<p class='apiURL'><span>/api/v1/</span><b>users/show</b></p>
|
68
|
+
|
69
|
+
</li>
|
70
|
+
|
71
|
+
<li>
|
72
|
+
<a class='link' href='../controllers/users/create.html'>Create a new user</a>
|
73
|
+
<p class='apiURL'><span>/api/v1/</span><b>users/create</b></p>
|
74
|
+
<p class='meta'> This action will create a new user with the properties which have been provided.
|
75
|
+
</p>
|
76
|
+
</li>
|
77
|
+
|
78
|
+
<li>
|
79
|
+
<a class='link' href='../controllers/users/update.html'>Update an existing user</a>
|
80
|
+
<p class='apiURL'><span>/api/v1/</span><b>users/update</b></p>
|
81
|
+
<p class='meta'>This action will update an existing user with the properties provided.</p>
|
82
|
+
</li>
|
83
|
+
|
84
|
+
</ul>
|
85
|
+
|
86
|
+
</section>
|
87
|
+
<footer class='footer'>
|
88
|
+
<p>Generated by Moonrope at 12:43 on Monday 22 February 2016 for d3c499</p>
|
89
|
+
</footer>
|
90
|
+
<script src='https://code.jquery.com/jquery-1.12.0.min.js'></script>
|
91
|
+
<script src='../assets/try.js'></script>
|
92
|
+
</body>
|
93
|
+
</html>
|
data/html/index.html
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Welcome - API Documentation</title>
|
5
|
+
<link href='https://fonts.googleapis.com/css?family=Lato:400,700,900' rel='stylesheet' type='text/css'>
|
6
|
+
<link href='https://fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
|
7
|
+
<link rel="stylesheet" href="assets/reset.css">
|
8
|
+
<link rel="stylesheet" href="assets/style.css">
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<section class='sidebarBackground'></section>
|
12
|
+
<section class="sidebar">
|
13
|
+
<nav>
|
14
|
+
<ul>
|
15
|
+
<li>
|
16
|
+
<a href='index.html' class="active">
|
17
|
+
Home
|
18
|
+
</a>
|
19
|
+
</li>
|
20
|
+
|
21
|
+
<li>
|
22
|
+
<a href='authenticators/default.html' class="">
|
23
|
+
Authentication
|
24
|
+
</a>
|
25
|
+
</li>
|
26
|
+
|
27
|
+
|
28
|
+
<li>
|
29
|
+
<a href='controllers/meta.html' class="">
|
30
|
+
Meta API
|
31
|
+
</a>
|
32
|
+
</li>
|
33
|
+
|
34
|
+
<li>
|
35
|
+
<a href='controllers/users.html' class="">
|
36
|
+
Users API
|
37
|
+
</a>
|
38
|
+
</li>
|
39
|
+
|
40
|
+
</ul>
|
41
|
+
</nav>
|
42
|
+
</section>
|
43
|
+
<section class='content'>
|
44
|
+
|
45
|
+
|
46
|
+
<h1>Welcome to our API documentation</h1>
|
47
|
+
<p class='text'>
|
48
|
+
From here you can browse the full documentation for our HTTP
|
49
|
+
API. Our API is split into sections which you can browse using
|
50
|
+
the menu on the right. If you have any questions, you can
|
51
|
+
<a href='#'>contact our team</a> and we'll be happy to help out.
|
52
|
+
</p>
|
53
|
+
<p class='text'>
|
54
|
+
Before you get started, take a few minutes to review the
|
55
|
+
information below about how to interact with our API. It includes
|
56
|
+
information about how to send requests, what response data is
|
57
|
+
sent in and how to handle errors.
|
58
|
+
</p>
|
59
|
+
|
60
|
+
<h2>Making requests</h2>
|
61
|
+
<p class='text'>
|
62
|
+
Our API works over the HTTP protocol with JSON. It is implemented
|
63
|
+
in an RPC-like manner and everything you can do with the API has
|
64
|
+
its own <em>action</em>.
|
65
|
+
</p>
|
66
|
+
<p class='text'>
|
67
|
+
All HTTP requests must be made over HTTPS to the URL shown on the
|
68
|
+
action's page in this documentation. All responses you receive from
|
69
|
+
the API will be returned in JSON. Requests should be made using the
|
70
|
+
<code>POST</code> method with any parameters encoded as JSON in the
|
71
|
+
body of the request.
|
72
|
+
</p>
|
73
|
+
|
74
|
+
<h2>Receiving responses</h2>
|
75
|
+
<p class='text'>
|
76
|
+
All responses will be returned to you encoded as JSON. You will always
|
77
|
+
receive a hash as the response which will look like the JSON below:
|
78
|
+
</p>
|
79
|
+
<pre class='code'>
|
80
|
+
{
|
81
|
+
<span class='jsonKey'>"status"</span>:<span class='jsonString'>"success"</span>,
|
82
|
+
<span class='jsonKey'>"time"</span>:<span class='jsonString'>0.123</span>,
|
83
|
+
<span class='jsonKey'>"flags"</span>:{
|
84
|
+
<span class='jsonComment'>... additional information about the request ...</span>
|
85
|
+
},
|
86
|
+
<span class='jsonKey'>"data"</span>:{
|
87
|
+
<span class='jsonComment'>... the data returned from the action ...</span>
|
88
|
+
}
|
89
|
+
}
|
90
|
+
</pre>
|
91
|
+
<p class='text'>
|
92
|
+
The <b>status</b> attribute will give you can indication about whether the
|
93
|
+
request was performed successfully or whether an error occurred. Values which
|
94
|
+
may be returned are shown below:
|
95
|
+
</p>
|
96
|
+
<ul class='standardList'>
|
97
|
+
<li>
|
98
|
+
<code>success</code> - this means that the request completed successfully
|
99
|
+
and returned the data that was expected.
|
100
|
+
</li>
|
101
|
+
<li>
|
102
|
+
<code>parameter-error</code> - the parameters provided for the action are
|
103
|
+
not valid and should be revised.
|
104
|
+
</li>
|
105
|
+
<li>
|
106
|
+
<code>error</code> - an error occurred that didn't fit into the above categories.
|
107
|
+
This will be accompanied with an error code, a descriptive message and further
|
108
|
+
attributes which may be useful. The actual potential errors for each action are
|
109
|
+
shown in the documentation.
|
110
|
+
</li>
|
111
|
+
</ul>
|
112
|
+
<p class='text'>
|
113
|
+
The <b>time</b> attribute shows how long the request took to complete on the
|
114
|
+
server side.
|
115
|
+
</p>
|
116
|
+
<p class='text'>
|
117
|
+
The <b>flags</b> attribute contains a hash of additional attributes
|
118
|
+
which are relevant to your request. For example, if you receive an array of data
|
119
|
+
it may be paginated and this pagination data will be returned in this
|
120
|
+
hash.
|
121
|
+
</p>
|
122
|
+
<p class='text'>
|
123
|
+
The <b>data</b> attribute contains the result of your request. Depending on the
|
124
|
+
status, this will either contain the data requested or details of any
|
125
|
+
error which has occurred.
|
126
|
+
</p>
|
127
|
+
<h3>A note about HTTP status code</h3>
|
128
|
+
<p class='text'>
|
129
|
+
The API does not generally use HTTP status codes to return information
|
130
|
+
about the outcome of a request. There are two supported statuses with
|
131
|
+
the API:
|
132
|
+
</p>
|
133
|
+
<ul class='standardList'>
|
134
|
+
<li>
|
135
|
+
<code>200 OK</code> - This is the code you'll usually receive.
|
136
|
+
It indicates that the response was successfully delivered and
|
137
|
+
returned to our service (although does not nessesary mean that
|
138
|
+
the action you were expecting was successful). Further status
|
139
|
+
information will be provided in the <code>status</code> attribute
|
140
|
+
on your response body.
|
141
|
+
</li>
|
142
|
+
<li>
|
143
|
+
<code>301 Moved Permanently</code> or <code>308 Permanent Redirect</code> -
|
144
|
+
This means that the API request should be sent to an alternative
|
145
|
+
URL. This may just mean you need to send your request using <code>https</code>
|
146
|
+
rather than <code>http</code> as the protocol.
|
147
|
+
</li>
|
148
|
+
<li>
|
149
|
+
<code>500 Internal Server Error</code> - This will be returned
|
150
|
+
when an error occurred within the API itself. This was not
|
151
|
+
anticipated by us and should be reported to us.
|
152
|
+
</li>
|
153
|
+
<li>
|
154
|
+
<code>503 Service Unavailable</code> - This will be returned if
|
155
|
+
API is currently unavailable for maintenance or other issue.
|
156
|
+
</li>
|
157
|
+
</ul>
|
158
|
+
|
159
|
+
</section>
|
160
|
+
<footer class='footer'>
|
161
|
+
<p>Generated by Moonrope at 12:43 on Monday 22 February 2016 for d3c499</p>
|
162
|
+
</footer>
|
163
|
+
<script src='https://code.jquery.com/jquery-1.12.0.min.js'></script>
|
164
|
+
<script src='assets/try.js'></script>
|
165
|
+
</body>
|
166
|
+
</html>
|
data/html/moonrope.txt
ADDED
File without changes
|
@@ -0,0 +1,176 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Pet Structure - API Documentation</title>
|
5
|
+
<link href='https://fonts.googleapis.com/css?family=Lato:400,700,900' rel='stylesheet' type='text/css'>
|
6
|
+
<link href='https://fonts.googleapis.com/css?family=Droid+Sans+Mono' rel='stylesheet' type='text/css'>
|
7
|
+
<link rel="stylesheet" href="../assets/reset.css">
|
8
|
+
<link rel="stylesheet" href="../assets/style.css">
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<section class='sidebarBackground'></section>
|
12
|
+
<section class="sidebar">
|
13
|
+
<nav>
|
14
|
+
<ul>
|
15
|
+
<li>
|
16
|
+
<a href='../index.html' class="">
|
17
|
+
Home
|
18
|
+
</a>
|
19
|
+
</li>
|
20
|
+
|
21
|
+
<li>
|
22
|
+
<a href='../authenticators/default.html' class="">
|
23
|
+
Authentication
|
24
|
+
</a>
|
25
|
+
</li>
|
26
|
+
|
27
|
+
|
28
|
+
<li>
|
29
|
+
<a href='../controllers/meta.html' class="">
|
30
|
+
Meta API
|
31
|
+
</a>
|
32
|
+
</li>
|
33
|
+
|
34
|
+
<li>
|
35
|
+
<a href='../controllers/users.html' class="">
|
36
|
+
Users API
|
37
|
+
</a>
|
38
|
+
</li>
|
39
|
+
|
40
|
+
</ul>
|
41
|
+
</nav>
|
42
|
+
</section>
|
43
|
+
<section class='content'>
|
44
|
+
|
45
|
+
|
46
|
+
<h1>Pet Structure</h1>
|
47
|
+
|
48
|
+
<h2>Base Attributes</h2>
|
49
|
+
<table class='table paramTable'>
|
50
|
+
<thead>
|
51
|
+
<tr>
|
52
|
+
<th width="45%">Attribute</th>
|
53
|
+
<th width="20%">Type</th>
|
54
|
+
<th width="35%">Example</th>
|
55
|
+
</tr>
|
56
|
+
</thead>
|
57
|
+
|
58
|
+
<tr>
|
59
|
+
<td>
|
60
|
+
<p>
|
61
|
+
<span class='paramTable__name'>id</span>
|
62
|
+
</p>
|
63
|
+
|
64
|
+
<p class='paramTable__description'>The ID of the pet</p>
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
</td>
|
70
|
+
<td>Integer</td>
|
71
|
+
<td>
|
72
|
+
|
73
|
+
148
|
74
|
+
|
75
|
+
</td>
|
76
|
+
</tr>
|
77
|
+
|
78
|
+
<tr>
|
79
|
+
<td>
|
80
|
+
<p>
|
81
|
+
<span class='paramTable__name'>name</span>
|
82
|
+
</p>
|
83
|
+
|
84
|
+
<p class='paramTable__description'>The name of the pet</p>
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
</td>
|
90
|
+
<td>String</td>
|
91
|
+
<td>
|
92
|
+
|
93
|
+
Fido
|
94
|
+
|
95
|
+
</td>
|
96
|
+
</tr>
|
97
|
+
|
98
|
+
<tr>
|
99
|
+
<td>
|
100
|
+
<p>
|
101
|
+
<span class='paramTable__name'>color</span>
|
102
|
+
</p>
|
103
|
+
|
104
|
+
<p class='paramTable__description'>What color is the pet?</p>
|
105
|
+
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
</td>
|
110
|
+
<td>String</td>
|
111
|
+
<td>
|
112
|
+
|
113
|
+
Green
|
114
|
+
|
115
|
+
</td>
|
116
|
+
</tr>
|
117
|
+
|
118
|
+
|
119
|
+
|
120
|
+
</table>
|
121
|
+
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
<h2>Expansions</h2>
|
128
|
+
<p class='text'>
|
129
|
+
Expansions are embedded structures of other objects that are related to the structure
|
130
|
+
that you're viewing. Which expansions are returned by a specific action are shown on that
|
131
|
+
action's documentation however some actions allow you to choose which expansions are
|
132
|
+
returned.
|
133
|
+
</p>
|
134
|
+
<table class='table paramTable'>
|
135
|
+
<thead>
|
136
|
+
<tr>
|
137
|
+
<th width="45%">Attribute</th>
|
138
|
+
<th width="20%">Type</th>
|
139
|
+
<th width="35%">Example</th>
|
140
|
+
</tr>
|
141
|
+
</thead>
|
142
|
+
|
143
|
+
<tr>
|
144
|
+
<td>
|
145
|
+
<p>
|
146
|
+
<span class='paramTable__name'>user</span>
|
147
|
+
</p>
|
148
|
+
|
149
|
+
<p class='paramTable__description'>The user who owns this pet</p>
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
|
154
|
+
</td>
|
155
|
+
<td>Hash</td>
|
156
|
+
<td>
|
157
|
+
|
158
|
+
<a class='link' href="../structures/user.html">User structure</a>
|
159
|
+
|
160
|
+
</td>
|
161
|
+
</tr>
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
</table>
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
</section>
|
170
|
+
<footer class='footer'>
|
171
|
+
<p>Generated by Moonrope at 12:43 on Monday 22 February 2016 for d3c499</p>
|
172
|
+
</footer>
|
173
|
+
<script src='https://code.jquery.com/jquery-1.12.0.min.js'></script>
|
174
|
+
<script src='../assets/try.js'></script>
|
175
|
+
</body>
|
176
|
+
</html>
|