apes 1.0.0
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.
- checksums.yaml +7 -0
- data/.gitignore +7 -0
- data/.rubocop.yml +82 -0
- data/.travis-gemfile +15 -0
- data/.travis.yml +15 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +22 -0
- data/README.md +177 -0
- data/Rakefile +44 -0
- data/apes.gemspec +34 -0
- data/doc/Apes.html +130 -0
- data/doc/Apes/Concerns.html +127 -0
- data/doc/Apes/Concerns/Errors.html +1089 -0
- data/doc/Apes/Concerns/Pagination.html +636 -0
- data/doc/Apes/Concerns/Request.html +766 -0
- data/doc/Apes/Concerns/Response.html +940 -0
- data/doc/Apes/Controller.html +1100 -0
- data/doc/Apes/Errors.html +125 -0
- data/doc/Apes/Errors/AuthenticationError.html +133 -0
- data/doc/Apes/Errors/BadRequestError.html +157 -0
- data/doc/Apes/Errors/BaseError.html +320 -0
- data/doc/Apes/Errors/InvalidDataError.html +157 -0
- data/doc/Apes/Errors/MissingDataError.html +157 -0
- data/doc/Apes/Model.html +378 -0
- data/doc/Apes/PaginationCursor.html +2138 -0
- data/doc/Apes/RuntimeConfiguration.html +909 -0
- data/doc/Apes/Serializers.html +125 -0
- data/doc/Apes/Serializers/JSON.html +389 -0
- data/doc/Apes/Serializers/JWT.html +452 -0
- data/doc/Apes/Serializers/List.html +347 -0
- data/doc/Apes/UrlsParser.html +1432 -0
- data/doc/Apes/Validators.html +125 -0
- data/doc/Apes/Validators/BaseValidator.html +278 -0
- data/doc/Apes/Validators/BooleanValidator.html +494 -0
- data/doc/Apes/Validators/EmailValidator.html +350 -0
- data/doc/Apes/Validators/PhoneValidator.html +375 -0
- data/doc/Apes/Validators/ReferenceValidator.html +372 -0
- data/doc/Apes/Validators/TimestampValidator.html +640 -0
- data/doc/Apes/Validators/UuidValidator.html +372 -0
- data/doc/Apes/Validators/ZipCodeValidator.html +372 -0
- data/doc/Apes/Version.html +189 -0
- data/doc/ApplicationController.html +547 -0
- data/doc/Concerns.html +128 -0
- data/doc/Concerns/ErrorHandling.html +826 -0
- data/doc/Concerns/PaginationHandling.html +463 -0
- data/doc/Concerns/RequestHandling.html +512 -0
- data/doc/Concerns/ResponseHandling.html +579 -0
- data/doc/Errors.html +126 -0
- data/doc/Errors/AuthenticationError.html +123 -0
- data/doc/Errors/BadRequestError.html +147 -0
- data/doc/Errors/BaseError.html +289 -0
- data/doc/Errors/InvalidDataError.html +147 -0
- data/doc/Errors/MissingDataError.html +147 -0
- data/doc/Model.html +315 -0
- data/doc/PaginationCursor.html +764 -0
- data/doc/Serializers.html +126 -0
- data/doc/Serializers/JSON.html +253 -0
- data/doc/Serializers/JWT.html +253 -0
- data/doc/Serializers/List.html +245 -0
- data/doc/Validators.html +126 -0
- data/doc/Validators/BaseValidator.html +209 -0
- data/doc/Validators/BooleanValidator.html +391 -0
- data/doc/Validators/EmailValidator.html +298 -0
- data/doc/Validators/PhoneValidator.html +313 -0
- data/doc/Validators/ReferenceValidator.html +284 -0
- data/doc/Validators/TimestampValidator.html +476 -0
- data/doc/Validators/UuidValidator.html +310 -0
- data/doc/Validators/ZipCodeValidator.html +310 -0
- data/doc/_index.html +435 -0
- data/doc/class_list.html +58 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +339 -0
- data/doc/file.README.html +252 -0
- data/doc/file_list.html +60 -0
- data/doc/frames.html +26 -0
- data/doc/index.html +252 -0
- data/doc/js/app.js +219 -0
- data/doc/js/full_list.js +181 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +615 -0
- data/doc/top-level-namespace.html +112 -0
- data/lib/apes.rb +40 -0
- data/lib/apes/concerns/errors.rb +111 -0
- data/lib/apes/concerns/pagination.rb +81 -0
- data/lib/apes/concerns/request.rb +237 -0
- data/lib/apes/concerns/response.rb +74 -0
- data/lib/apes/controller.rb +77 -0
- data/lib/apes/errors.rb +38 -0
- data/lib/apes/model.rb +94 -0
- data/lib/apes/pagination_cursor.rb +152 -0
- data/lib/apes/runtime_configuration.rb +80 -0
- data/lib/apes/serializers.rb +88 -0
- data/lib/apes/urls_parser.rb +233 -0
- data/lib/apes/validators.rb +234 -0
- data/lib/apes/version.rb +24 -0
- data/spec/apes/concerns/errors_spec.rb +141 -0
- data/spec/apes/concerns/pagination_spec.rb +114 -0
- data/spec/apes/concerns/request_spec.rb +244 -0
- data/spec/apes/concerns/response_spec.rb +79 -0
- data/spec/apes/controller_spec.rb +54 -0
- data/spec/apes/errors_spec.rb +14 -0
- data/spec/apes/models_spec.rb +148 -0
- data/spec/apes/pagination_cursor_spec.rb +113 -0
- data/spec/apes/runtime_configuration_spec.rb +100 -0
- data/spec/apes/serializers_spec.rb +70 -0
- data/spec/apes/urls_parser_spec.rb +150 -0
- data/spec/apes/validators_spec.rb +237 -0
- data/spec/spec_helper.rb +30 -0
- data/views/_included.json.jbuilder +9 -0
- data/views/_pagination.json.jbuilder +9 -0
- data/views/collection.json.jbuilder +4 -0
- data/views/errors/400.json.jbuilder +9 -0
- data/views/errors/403.json.jbuilder +7 -0
- data/views/errors/404.json.jbuilder +6 -0
- data/views/errors/422.json.jbuilder +19 -0
- data/views/errors/500.json.jbuilder +12 -0
- data/views/errors/501.json.jbuilder +7 -0
- data/views/layouts/general.json.jbuilder +36 -0
- data/views/object.json.jbuilder +4 -0
- metadata +262 -0
data/doc/css/common.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/* Override this file with custom rules */
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
body {
|
|
2
|
+
margin: 0;
|
|
3
|
+
font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
|
|
4
|
+
font-size: 13px;
|
|
5
|
+
height: 101%;
|
|
6
|
+
overflow-x: hidden;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
h1 { padding: 12px 10px; padding-bottom: 0; margin: 0; font-size: 1.4em; }
|
|
10
|
+
.clear { clear: both; }
|
|
11
|
+
#search { position: absolute; right: 5px; top: 9px; padding-left: 24px; }
|
|
12
|
+
#content.insearch #search, #content.insearch #noresults { background: url(data:image/gif;base64,R0lGODlhEAAQAPYAAP///wAAAPr6+pKSkoiIiO7u7sjIyNjY2J6engAAAI6OjsbGxjIyMlJSUuzs7KamppSUlPLy8oKCghwcHLKysqSkpJqamvT09Pj4+KioqM7OzkRERAwMDGBgYN7e3ujo6Ly8vCoqKjY2NkZGRtTU1MTExDw8PE5OTj4+PkhISNDQ0MrKylpaWrS0tOrq6nBwcKysrLi4uLq6ul5eXlxcXGJiYoaGhuDg4H5+fvz8/KKiohgYGCwsLFZWVgQEBFBQUMzMzDg4OFhYWBoaGvDw8NbW1pycnOLi4ubm5kBAQKqqqiQkJCAgIK6urnJyckpKSjQ0NGpqatLS0sDAwCYmJnx8fEJCQlRUVAoKCggICLCwsOTk5ExMTPb29ra2tmZmZmhoaNzc3KCgoBISEiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCAAAACwAAAAAEAAQAAAHaIAAgoMgIiYlg4kACxIaACEJCSiKggYMCRselwkpghGJBJEcFgsjJyoAGBmfggcNEx0flBiKDhQFlIoCCA+5lAORFb4AJIihCRbDxQAFChAXw9HSqb60iREZ1omqrIPdJCTe0SWI09GBACH5BAkIAAAALAAAAAAQABAAAAdrgACCgwc0NTeDiYozCQkvOTo9GTmDKy8aFy+NOBA7CTswgywJDTIuEjYFIY0JNYMtKTEFiRU8Pjwygy4ws4owPyCKwsMAJSTEgiQlgsbIAMrO0dKDGMTViREZ14kYGRGK38nHguHEJcvTyIEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDAggPg4iJAAMJCRUAJRIqiRGCBI0WQEEJJkWDERkYAAUKEBc4Po1GiKKJHkJDNEeKig4URLS0ICImJZAkuQAhjSi/wQyNKcGDCyMnk8u5rYrTgqDVghgZlYjcACTA1sslvtHRgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCQARAtOUoQRGRiFD0kJUYWZhUhKT1OLhR8wBaaFBzQ1NwAlkIszCQkvsbOHL7Y4q4IuEjaqq0ZQD5+GEEsJTDCMmIUhtgk1lo6QFUwJVDKLiYJNUd6/hoEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4uen4ICCA+IkIsDCQkVACWmhwSpFqAABQoQF6ALTkWFnYMrVlhWvIKTlSAiJiVVPqlGhJkhqShHV1lCW4cMqSkAR1ofiwsjJyqGgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCSMhREZGIYYGY2ElYebi56fhyWQniSKAKKfpaCLFlAPhl0gXYNGEwkhGYREUywag1wJwSkHNDU3D0kJYIMZQwk8MjPBLx9eXwuETVEyAC/BOKsuEjYFhoEAIfkECQgAAAAsAAAAABAAEAAAB2eAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4ueICImip6CIQkJKJ4kigynKaqKCyMnKqSEK05StgAGQRxPYZaENqccFgIID4KXmQBhXFkzDgOnFYLNgltaSAAEpxa7BQoQF4aBACH5BAkIAAAALAAAAAAQABAAAAdogACCg4SFggJiPUqCJSWGgkZjCUwZACQkgxGEXAmdT4UYGZqCGWQ+IjKGGIUwPzGPhAc0NTewhDOdL7Ykji+dOLuOLhI2BbaFETICx4MlQitdqoUsCQ2vhKGjglNfU0SWmILaj43M5oEAOwAAAAAAAAAAAA==) no-repeat center left; }
|
|
13
|
+
#full_list { padding: 0; list-style: none; margin-left: 0; }
|
|
14
|
+
#full_list ul { padding: 0; }
|
|
15
|
+
#full_list li { padding: 5px; padding-left: 12px; margin: 0; font-size: 1.1em; list-style: none; }
|
|
16
|
+
#noresults { padding: 7px 12px; }
|
|
17
|
+
#content.insearch #noresults { margin-left: 7px; }
|
|
18
|
+
ul.collapsed ul, ul.collapsed li { display: none; }
|
|
19
|
+
ul.collapsed.search_uncollapsed { display: block; }
|
|
20
|
+
ul.collapsed.search_uncollapsed li { display: list-item; }
|
|
21
|
+
li a.toggle { cursor: default; position: relative; left: -5px; top: 4px; text-indent: -999px; width: 10px; height: 9px; margin-left: -10px; display: block; float: left; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUAMy8xNC8wOeNZPpQAAAE2SURBVDiNrZTBccIwEEXfelIAHUA6CZ24BGaWO+FuzZAK4k6gg5QAdGAq+Bxs2Yqx7BzyL7Llp/VfzZeQhCTc/ezuGzKKnKSzpCxXJM8fwNXda3df5RZETlIt6YUzSQDs93sl8w3wBZxCCE10GM1OcWbWjB2mWgEH4Mfdyxm3PSepBHibgQE2wLe7r4HjEidpnXMYdQPKEMJcsZ4zs2POYQOcaPfwMVOo58zsAdMt18BuoVDPxUJRacELbXv3hUIX2vYmOUvi8C8ydz/ThjXrqKqqLbDIAdsCKBd+Wo7GWa7o9qzOQHVVVXeAbs+yHHCH4aTsaCOQqunmUy1yBUAXkdMIfMlgF5EXLo2OpV/c/Up7jG4hhHcYLgWzAZXUc2b2ixsfvc/RmNNfOXD3Q/oeL9axJE1yT9IOoUu6MGUkAAAAAElFTkSuQmCC) no-repeat bottom left; }
|
|
22
|
+
li.collapsed a.toggle { opacity: 0.5; cursor: default; background-position: top left; }
|
|
23
|
+
li { color: #888; cursor: pointer; }
|
|
24
|
+
li.deprecated { text-decoration: line-through; font-style: italic; }
|
|
25
|
+
li.r1 { background: #f0f0f0; }
|
|
26
|
+
li.r2 { background: #fafafa; }
|
|
27
|
+
li:hover { background: #ddd; }
|
|
28
|
+
li small:before { content: "("; }
|
|
29
|
+
li small:after { content: ")"; }
|
|
30
|
+
li small.search_info { display: none; }
|
|
31
|
+
a:link, a:visited { text-decoration: none; color: #05a; }
|
|
32
|
+
li.clicked { background: #05a; color: #ccc; }
|
|
33
|
+
li.clicked a:link, li.clicked a:visited { color: #eee; }
|
|
34
|
+
li.clicked a.toggle { opacity: 0.5; background-position: bottom right; }
|
|
35
|
+
li.collapsed.clicked a.toggle { background-position: top right; }
|
|
36
|
+
#search input { border: 1px solid #bbb; -moz-border-radius: 3px; -webkit-border-radius: 3px; }
|
|
37
|
+
#nav { margin-left: 10px; font-size: 0.9em; display: none; color: #aaa; }
|
|
38
|
+
#nav a:link, #nav a:visited { color: #358; }
|
|
39
|
+
#nav a:hover { background: transparent; color: #5af; }
|
|
40
|
+
.frames #nav span:after { content: ' | '; }
|
|
41
|
+
.frames #nav span:last-child:after { content: ''; }
|
|
42
|
+
|
|
43
|
+
.frames #content h1 { margin-top: 0; }
|
|
44
|
+
.frames li { white-space: nowrap; cursor: normal; }
|
|
45
|
+
.frames li small { display: block; font-size: 0.8em; }
|
|
46
|
+
.frames li small:before { content: ""; }
|
|
47
|
+
.frames li small:after { content: ""; }
|
|
48
|
+
.frames li small.search_info { display: none; }
|
|
49
|
+
.frames #search { width: 170px; position: static; margin: 3px; margin-left: 10px; font-size: 0.9em; color: #888; padding-left: 0; padding-right: 24px; }
|
|
50
|
+
.frames #content.insearch #search { background-position: center right; }
|
|
51
|
+
.frames #search input { width: 110px; }
|
|
52
|
+
.frames #nav { display: block; }
|
|
53
|
+
|
|
54
|
+
#full_list.insearch li { display: none; }
|
|
55
|
+
#full_list.insearch li.found { display: list-item; padding-left: 10px; }
|
|
56
|
+
#full_list.insearch li a.toggle { display: none; }
|
|
57
|
+
#full_list.insearch li small.search_info { display: block; }
|
data/doc/css/style.css
ADDED
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
body {
|
|
2
|
+
padding: 0 20px;
|
|
3
|
+
font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
|
|
4
|
+
font-size: 13px;
|
|
5
|
+
}
|
|
6
|
+
body.frames { padding: 0 5px; }
|
|
7
|
+
h1 { font-size: 25px; margin: 1em 0 0.5em; padding-top: 4px; border-top: 1px dotted #d5d5d5; }
|
|
8
|
+
h1.noborder { border-top: 0px; margin-top: 0; padding-top: 4px; }
|
|
9
|
+
h1.title { margin-bottom: 10px; }
|
|
10
|
+
h1.alphaindex { margin-top: 0; font-size: 22px; }
|
|
11
|
+
h2 {
|
|
12
|
+
padding: 0;
|
|
13
|
+
padding-bottom: 3px;
|
|
14
|
+
border-bottom: 1px #aaa solid;
|
|
15
|
+
font-size: 1.4em;
|
|
16
|
+
margin: 1.8em 0 0.5em;
|
|
17
|
+
}
|
|
18
|
+
h2 small { font-weight: normal; font-size: 0.7em; display: block; float: right; }
|
|
19
|
+
.clear { clear: both; }
|
|
20
|
+
.inline { display: inline; }
|
|
21
|
+
.inline p:first-child { display: inline; }
|
|
22
|
+
.docstring h1, .docstring h2, .docstring h3, .docstring h4 { padding: 0; border: 0; border-bottom: 1px dotted #bbb; }
|
|
23
|
+
.docstring h1 { font-size: 1.2em; }
|
|
24
|
+
.docstring h2 { font-size: 1.1em; }
|
|
25
|
+
.docstring h3, .docstring h4 { font-size: 1em; border-bottom: 0; padding-top: 10px; }
|
|
26
|
+
.summary_desc .object_link, .docstring .object_link { font-family: monospace; }
|
|
27
|
+
.rdoc-term { padding-right: 25px; font-weight: bold; }
|
|
28
|
+
.rdoc-list p { margin: 0; padding: 0; margin-bottom: 4px; }
|
|
29
|
+
|
|
30
|
+
/* style for <table> */
|
|
31
|
+
#filecontents table, .docstring table { border-collapse: collapse; }
|
|
32
|
+
#filecontents table th, #filecontents table td,
|
|
33
|
+
.docstring table th, .docstring table td { border: 1px solid #ccc; padding: 8px; padding-right: 17px; }
|
|
34
|
+
#filecontents table tr:nth-child(odd),
|
|
35
|
+
.docstring table tr:nth-child(odd) { background: #eee; }
|
|
36
|
+
#filecontents table tr:nth-child(even),
|
|
37
|
+
.docstring table tr:nth-child(even) { background: #fff; }
|
|
38
|
+
#filecontents table th, .docstring table th { background: #fff; }
|
|
39
|
+
|
|
40
|
+
/* style for <ul> */
|
|
41
|
+
#filecontents li > p, .docstring li > p { margin: 0px; }
|
|
42
|
+
#filecontents ul, .docstring ul { padding-left: 20px; }
|
|
43
|
+
/* style for <dl> */
|
|
44
|
+
#filecontents dl, .docstring dl { border: 1px solid #ccc; }
|
|
45
|
+
#filecontents dt, .docstring dt { background: #ddd; font-weight: bold; padding: 3px 5px; }
|
|
46
|
+
#filecontents dd, .docstring dd { padding: 5px 0px; margin-left: 18px; }
|
|
47
|
+
#filecontents dd > p, .docstring dd > p { margin: 0px; }
|
|
48
|
+
|
|
49
|
+
.note {
|
|
50
|
+
color: #222;
|
|
51
|
+
-moz-border-radius: 3px; -webkit-border-radius: 3px;
|
|
52
|
+
background: #e3e4e3; border: 1px solid #d5d5d5; padding: 7px 10px;
|
|
53
|
+
display: block;
|
|
54
|
+
}
|
|
55
|
+
.note.todo { background: #ffffc5; border-color: #ececaa; }
|
|
56
|
+
.note.returns_void { background: #efefef; }
|
|
57
|
+
.note.deprecated { background: #ffe5e5; border-color: #e9dada; }
|
|
58
|
+
.note.private { background: #ffffc5; border-color: #ececaa; }
|
|
59
|
+
.note.title { padding: 1px 5px; font-size: 0.9em; font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; display: inline; }
|
|
60
|
+
.summary_signature + .note.title { margin-left: 7px; }
|
|
61
|
+
h1 .note.title { font-size: 0.5em; font-weight: normal; padding: 3px 5px; position: relative; top: -3px; text-transform: capitalize; }
|
|
62
|
+
.note.title.constructor { color: #fff; background: #6a98d6; border-color: #6689d6; }
|
|
63
|
+
.note.title.writeonly { color: #fff; background: #45a638; border-color: #2da31d; }
|
|
64
|
+
.note.title.readonly { color: #fff; background: #6a98d6; border-color: #6689d6; }
|
|
65
|
+
.note.title.private { background: #d5d5d5; border-color: #c5c5c5; }
|
|
66
|
+
.note.title.not_defined_here { background: transparent; border: none; font-style: italic; }
|
|
67
|
+
.discussion .note { margin-top: 6px; }
|
|
68
|
+
.discussion .note:first-child { margin-top: 0; }
|
|
69
|
+
|
|
70
|
+
h3.inherited {
|
|
71
|
+
font-style: italic;
|
|
72
|
+
font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
|
|
73
|
+
font-weight: normal;
|
|
74
|
+
padding: 0;
|
|
75
|
+
margin: 0;
|
|
76
|
+
margin-top: 12px;
|
|
77
|
+
margin-bottom: 3px;
|
|
78
|
+
font-size: 13px;
|
|
79
|
+
}
|
|
80
|
+
p.inherited {
|
|
81
|
+
padding: 0;
|
|
82
|
+
margin: 0;
|
|
83
|
+
margin-left: 25px;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
#filecontents dl.box, dl.box {
|
|
87
|
+
border: 0;
|
|
88
|
+
width: 520px;
|
|
89
|
+
font-size: 1em;
|
|
90
|
+
}
|
|
91
|
+
#filecontents dl.box dt, dl.box dt {
|
|
92
|
+
float: left;
|
|
93
|
+
display: block;
|
|
94
|
+
width: 100px;
|
|
95
|
+
margin: 0;
|
|
96
|
+
text-align: right;
|
|
97
|
+
font-weight: bold;
|
|
98
|
+
background: transparent;
|
|
99
|
+
border: 1px solid #aaa;
|
|
100
|
+
border-width: 1px 0px 0px 1px;
|
|
101
|
+
padding: 6px 0;
|
|
102
|
+
padding-right: 10px;
|
|
103
|
+
}
|
|
104
|
+
#filecontents dl.box dd, dl.box dd {
|
|
105
|
+
float: left;
|
|
106
|
+
display: block;
|
|
107
|
+
width: 380px;
|
|
108
|
+
margin: 0;
|
|
109
|
+
padding: 6px 0;
|
|
110
|
+
padding-right: 20px;
|
|
111
|
+
border: 1px solid #aaa;
|
|
112
|
+
border-width: 1px 1px 0 0;
|
|
113
|
+
}
|
|
114
|
+
#filecontents dl.box .last, dl.box .last {
|
|
115
|
+
border-bottom: 1px solid #aaa;
|
|
116
|
+
}
|
|
117
|
+
#filecontents dl.box .r1, dl.box .r1 { background: #eee; }
|
|
118
|
+
|
|
119
|
+
ul.toplevel { list-style: none; padding-left: 0; font-size: 1.1em; }
|
|
120
|
+
.index_inline_list { padding-left: 0; font-size: 1.1em; }
|
|
121
|
+
.index_inline_list li { list-style: none; display: inline; padding: 7px 12px; line-height: 35px; }
|
|
122
|
+
|
|
123
|
+
dl.constants { margin-left: 40px; }
|
|
124
|
+
dl.constants dt { font-weight: bold; font-size: 1.1em; margin-bottom: 5px; }
|
|
125
|
+
dl.constants dd { width: 75%; white-space: pre; font-family: monospace; margin-bottom: 18px; }
|
|
126
|
+
|
|
127
|
+
.summary_desc { margin-left: 32px; display: block; font-family: sans-serif; }
|
|
128
|
+
.summary_desc tt { font-size: 0.9em; }
|
|
129
|
+
dl.constants .note { padding: 2px 6px; padding-right: 12px; margin-top: 6px; }
|
|
130
|
+
dl.constants .docstring { margin-left: 32px; font-size: 0.9em; font-weight: normal; }
|
|
131
|
+
dl.constants .tags { padding-left: 32px; font-size: 0.9em; line-height: 0.8em; }
|
|
132
|
+
dl.constants .discussion *:first-child { margin-top: 0; }
|
|
133
|
+
dl.constants .discussion *:last-child { margin-bottom: 0; }
|
|
134
|
+
|
|
135
|
+
.method_details { border-top: 1px dotted #aaa; margin-top: 15px; padding-top: 0; }
|
|
136
|
+
.method_details.first { border: 0; }
|
|
137
|
+
p.signature, h3.signature {
|
|
138
|
+
font-size: 1.1em; font-weight: normal; font-family: Monaco, Consolas, Courier, monospace;
|
|
139
|
+
padding: 6px 10px; margin-top: 18px;
|
|
140
|
+
background: #e5e8ff; border: 1px solid #d8d8e5; -moz-border-radius: 3px; -webkit-border-radius: 3px;
|
|
141
|
+
}
|
|
142
|
+
p.signature tt,
|
|
143
|
+
h3.signature tt { font-family: Monaco, Consolas, Courier, monospace; }
|
|
144
|
+
p.signature .overload,
|
|
145
|
+
h3.signature .overload { display: block; }
|
|
146
|
+
p.signature .extras,
|
|
147
|
+
h3.signature .extras { font-weight: normal; font-family: sans-serif; color: #444; font-size: 1em; }
|
|
148
|
+
p.signature .not_defined_here,
|
|
149
|
+
h3.signature .not_defined_here,
|
|
150
|
+
p.signature .aliases,
|
|
151
|
+
h3.signature .aliases { display: block; font-weight: normal; font-size: 0.9em; font-family: sans-serif; margin-top: 0px; color: #555; }
|
|
152
|
+
p.signature .aliases .names,
|
|
153
|
+
h3.signature .aliases .names { font-family: Monaco, Consolas, Courier, monospace; font-weight: bold; color: #000; font-size: 1.2em; }
|
|
154
|
+
|
|
155
|
+
.tags .tag_title { font-size: 1em; margin-bottom: 0; font-weight: bold; }
|
|
156
|
+
.tags ul { margin-top: 5px; padding-left: 30px; list-style: square; }
|
|
157
|
+
.tags ul li { margin-bottom: 3px; }
|
|
158
|
+
.tags ul .name { font-family: monospace; font-weight: bold; }
|
|
159
|
+
.tags ul .note { padding: 3px 6px; }
|
|
160
|
+
.tags { margin-bottom: 12px; }
|
|
161
|
+
|
|
162
|
+
.tags .examples .tag_title { margin-bottom: 10px; font-weight: bold; }
|
|
163
|
+
.tags .examples .inline p { padding: 0; margin: 0; margin-left: 15px; font-weight: bold; font-size: 0.9em; }
|
|
164
|
+
|
|
165
|
+
.tags .overload .overload_item { list-style: none; margin-bottom: 25px; }
|
|
166
|
+
.tags .overload .overload_item .signature {
|
|
167
|
+
padding: 2px 8px;
|
|
168
|
+
background: #e5e8ff; border: 1px solid #d8d8e5; -moz-border-radius: 3px; -webkit-border-radius: 3px;
|
|
169
|
+
}
|
|
170
|
+
.tags .overload .signature { margin-left: -15px; font-family: monospace; display: block; font-size: 1.1em; }
|
|
171
|
+
.tags .overload .docstring { margin-top: 15px; }
|
|
172
|
+
|
|
173
|
+
.defines { display: none; }
|
|
174
|
+
|
|
175
|
+
#method_missing_details .notice.this { position: relative; top: -8px; color: #888; padding: 0; margin: 0; }
|
|
176
|
+
|
|
177
|
+
.showSource { font-size: 0.9em; }
|
|
178
|
+
.showSource a:link, .showSource a:visited { text-decoration: none; color: #666; }
|
|
179
|
+
|
|
180
|
+
#content a:link, #content a:visited { text-decoration: none; color: #05a; }
|
|
181
|
+
#content a:hover { background: #ffffa5; }
|
|
182
|
+
div.docstring, p.docstring { margin-right: 6em; }
|
|
183
|
+
|
|
184
|
+
ul.summary {
|
|
185
|
+
list-style: none;
|
|
186
|
+
font-family: monospace;
|
|
187
|
+
font-size: 1em;
|
|
188
|
+
line-height: 1.5em;
|
|
189
|
+
}
|
|
190
|
+
ul.summary a:link, ul.summary a:visited {
|
|
191
|
+
text-decoration: none; font-size: 1.1em;
|
|
192
|
+
}
|
|
193
|
+
ul.summary li { margin-bottom: 5px; }
|
|
194
|
+
.summary .summary_signature {
|
|
195
|
+
padding: 1px 10px;
|
|
196
|
+
background: #eaeaff; border: 1px solid #dfdfe5;
|
|
197
|
+
-moz-border-radius: 3px; -webkit-border-radius: 3px;
|
|
198
|
+
}
|
|
199
|
+
.summary_signature:hover { background: #eeeeff; cursor: pointer; }
|
|
200
|
+
ul.summary.compact li { display: inline-block; margin: 0px 5px 0px 0px; line-height: 2.6em;}
|
|
201
|
+
ul.summary.compact .summary_signature { padding: 5px 7px; padding-right: 4px; }
|
|
202
|
+
#content .summary_signature:hover a:link,
|
|
203
|
+
#content .summary_signature:hover a:visited {
|
|
204
|
+
background: transparent;
|
|
205
|
+
color: #48f;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
p.inherited a { font-family: monospace; font-size: 0.9em; }
|
|
209
|
+
p.inherited { word-spacing: 5px; font-size: 1.2em; }
|
|
210
|
+
|
|
211
|
+
p.children { font-size: 1.2em; }
|
|
212
|
+
p.children a { font-size: 0.9em; }
|
|
213
|
+
p.children strong { font-size: 0.8em; }
|
|
214
|
+
p.children strong.modules { padding-left: 5px; }
|
|
215
|
+
|
|
216
|
+
ul.fullTree { display: none; padding-left: 0; list-style: none; margin-left: 0; margin-bottom: 10px; }
|
|
217
|
+
ul.fullTree ul { margin-left: 0; padding-left: 0; list-style: none; }
|
|
218
|
+
ul.fullTree li { text-align: center; padding-top: 18px; padding-bottom: 12px; background: url(data:image/gif;base64,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) no-repeat top center; }
|
|
219
|
+
ul.fullTree li:first-child { padding-top: 0; background: transparent; }
|
|
220
|
+
ul.fullTree li:last-child { padding-bottom: 0; }
|
|
221
|
+
.showAll ul.fullTree { display: block; }
|
|
222
|
+
.showAll .inheritName { display: none; }
|
|
223
|
+
|
|
224
|
+
#search { position: absolute; right: 14px; top: 0px; }
|
|
225
|
+
#search a:link, #search a:visited {
|
|
226
|
+
display: block; float: left; margin-right: 4px;
|
|
227
|
+
padding: 8px 10px; text-decoration: none; color: #05a;
|
|
228
|
+
border: 1px solid #d8d8e5;
|
|
229
|
+
-moz-border-radius-bottomleft: 3px; -moz-border-radius-bottomright: 3px;
|
|
230
|
+
-webkit-border-bottom-left-radius: 3px; -webkit-border-bottom-right-radius: 3px;
|
|
231
|
+
background: #eaf0ff;
|
|
232
|
+
-webkit-box-shadow: -1px 1px 3px #ddd;
|
|
233
|
+
}
|
|
234
|
+
#search a:hover { background: #f5faff; color: #06b; }
|
|
235
|
+
#search a.active {
|
|
236
|
+
background: #568; padding-bottom: 20px; color: #fff; border: 1px solid #457;
|
|
237
|
+
-moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px;
|
|
238
|
+
-webkit-border-top-left-radius: 5px; -webkit-border-top-right-radius: 5px;
|
|
239
|
+
}
|
|
240
|
+
#search a.inactive { color: #999; }
|
|
241
|
+
.frames #search { display: none; }
|
|
242
|
+
.inheritanceTree, .toggleDefines { float: right; }
|
|
243
|
+
|
|
244
|
+
#menu { font-size: 1.3em; color: #bbb; top: -5px; position: relative; }
|
|
245
|
+
#menu .title, #menu a { font-size: 0.7em; }
|
|
246
|
+
#menu .title a { font-size: 1em; }
|
|
247
|
+
#menu .title { color: #555; }
|
|
248
|
+
#menu a:link, #menu a:visited { color: #333; text-decoration: none; border-bottom: 1px dotted #bbd; }
|
|
249
|
+
#menu a:hover { color: #05a; }
|
|
250
|
+
#menu .noframes { display: inline; }
|
|
251
|
+
.frames #menu .noframes { display: inline; float: right; }
|
|
252
|
+
|
|
253
|
+
#footer { margin-top: 15px; border-top: 1px solid #ccc; text-align: center; padding: 7px 0; color: #999; }
|
|
254
|
+
#footer a:link, #footer a:visited { color: #444; text-decoration: none; border-bottom: 1px dotted #bbd; }
|
|
255
|
+
#footer a:hover { color: #05a; }
|
|
256
|
+
|
|
257
|
+
#listing ul.alpha { font-size: 1.1em; }
|
|
258
|
+
#listing ul.alpha { margin: 0; padding: 0; padding-bottom: 10px; list-style: none; }
|
|
259
|
+
#listing ul.alpha li.letter { font-size: 1.4em; padding-bottom: 10px; }
|
|
260
|
+
#listing ul.alpha ul { margin: 0; padding-left: 15px; }
|
|
261
|
+
#listing ul small { color: #666; font-size: 0.7em; }
|
|
262
|
+
|
|
263
|
+
li.r1 { background: #f0f0f0; }
|
|
264
|
+
li.r2 { background: #fafafa; }
|
|
265
|
+
|
|
266
|
+
#search_frame {
|
|
267
|
+
z-index: 9999;
|
|
268
|
+
background: #fff;
|
|
269
|
+
display: none;
|
|
270
|
+
position: absolute;
|
|
271
|
+
top: 36px;
|
|
272
|
+
right: 18px;
|
|
273
|
+
width: 500px;
|
|
274
|
+
height: 80%;
|
|
275
|
+
overflow-y: scroll;
|
|
276
|
+
border: 1px solid #999;
|
|
277
|
+
border-collapse: collapse;
|
|
278
|
+
-webkit-box-shadow: -7px 5px 25px #aaa;
|
|
279
|
+
-moz-box-shadow: -7px 5px 25px #aaa;
|
|
280
|
+
-moz-border-radius: 2px;
|
|
281
|
+
-webkit-border-radius: 2px;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
#content ul.summary li.deprecated .summary_signature a:link,
|
|
285
|
+
#content ul.summary li.deprecated .summary_signature a:visited { text-decoration: line-through; font-style: italic; }
|
|
286
|
+
|
|
287
|
+
#toc {
|
|
288
|
+
padding: 20px; padding-right: 30px; border: 1px solid #ddd; float: right; background: #fff; margin-left: 20px; margin-bottom: 20px;
|
|
289
|
+
max-width: 300px;
|
|
290
|
+
-webkit-box-shadow: -2px 2px 6px #bbb;
|
|
291
|
+
-moz-box-shadow: -2px 2px 6px #bbb;
|
|
292
|
+
z-index: 5000;
|
|
293
|
+
position: relative;
|
|
294
|
+
overflow-x: auto;
|
|
295
|
+
}
|
|
296
|
+
#toc.nofloat { float: none; max-width: none; border: none; padding: 0; margin: 20px 0; -webkit-box-shadow: none; -moz-box-shadow: none; }
|
|
297
|
+
#toc.nofloat.hidden { padding: 0; background: 0; margin-bottom: 5px; }
|
|
298
|
+
#toc .title { margin: 0; }
|
|
299
|
+
#toc ol { padding-left: 1.8em; }
|
|
300
|
+
#toc li { font-size: 1.1em; line-height: 1.7em; }
|
|
301
|
+
#toc > ol > li { font-size: 1.1em; font-weight: bold; }
|
|
302
|
+
#toc ol > ol { font-size: 0.9em; }
|
|
303
|
+
#toc ol ol > ol { padding-left: 2.3em; }
|
|
304
|
+
#toc ol + li { margin-top: 0.3em; }
|
|
305
|
+
#toc.hidden { padding: 10px; background: #f6f6f6; -webkit-box-shadow: none; -moz-box-shadow: none; }
|
|
306
|
+
#filecontents h1 + #toc.nofloat { margin-top: 0; }
|
|
307
|
+
|
|
308
|
+
/* syntax highlighting */
|
|
309
|
+
.source_code { display: none; padding: 3px 8px; border-left: 8px solid #ddd; margin-top: 5px; }
|
|
310
|
+
#filecontents pre.code, .docstring pre.code, .source_code pre { font-family: monospace; }
|
|
311
|
+
#filecontents pre.code, .docstring pre.code { display: block; }
|
|
312
|
+
.source_code .lines { padding-right: 12px; color: #555; text-align: right; }
|
|
313
|
+
#filecontents pre.code, .docstring pre.code,
|
|
314
|
+
.tags pre.example { padding: 5px 12px; margin-top: 4px; border: 1px solid #eef; background: #f5f5ff; }
|
|
315
|
+
pre.code { color: #000; }
|
|
316
|
+
pre.code .info.file { color: #555; }
|
|
317
|
+
pre.code .val { color: #036A07; }
|
|
318
|
+
pre.code .tstring_content,
|
|
319
|
+
pre.code .heredoc_beg, pre.code .heredoc_end,
|
|
320
|
+
pre.code .qwords_beg, pre.code .qwords_end,
|
|
321
|
+
pre.code .tstring, pre.code .dstring { color: #036A07; }
|
|
322
|
+
pre.code .fid, pre.code .rubyid_new, pre.code .rubyid_to_s,
|
|
323
|
+
pre.code .rubyid_to_sym, pre.code .rubyid_to_f,
|
|
324
|
+
pre.code .dot + pre.code .id,
|
|
325
|
+
pre.code .rubyid_to_i pre.code .rubyid_each { color: #0085FF; }
|
|
326
|
+
pre.code .comment { color: #0066FF; }
|
|
327
|
+
pre.code .const, pre.code .constant { color: #585CF6; }
|
|
328
|
+
pre.code .label,
|
|
329
|
+
pre.code .symbol { color: #C5060B; }
|
|
330
|
+
pre.code .kw,
|
|
331
|
+
pre.code .rubyid_require,
|
|
332
|
+
pre.code .rubyid_extend,
|
|
333
|
+
pre.code .rubyid_include { color: #0000FF; }
|
|
334
|
+
pre.code .ivar { color: #318495; }
|
|
335
|
+
pre.code .gvar,
|
|
336
|
+
pre.code .rubyid_backref,
|
|
337
|
+
pre.code .rubyid_nth_ref { color: #6D79DE; }
|
|
338
|
+
pre.code .regexp, .dregexp { color: #036A07; }
|
|
339
|
+
pre.code a { border-bottom: 1px dotted #bbf; }
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
4
|
+
<head>
|
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
|
6
|
+
<title>
|
|
7
|
+
File: README
|
|
8
|
+
|
|
9
|
+
— Documentation by YARD 0.8.7.6
|
|
10
|
+
|
|
11
|
+
</title>
|
|
12
|
+
|
|
13
|
+
<link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
|
|
14
|
+
|
|
15
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
|
|
16
|
+
|
|
17
|
+
<script type="text/javascript" charset="utf-8">
|
|
18
|
+
hasFrames = window.top.frames.main ? true : false;
|
|
19
|
+
relpath = '';
|
|
20
|
+
framesUrl = "frames.html#!file.README.html";
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
|
25
|
+
|
|
26
|
+
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
</head>
|
|
30
|
+
<body>
|
|
31
|
+
<div id="header">
|
|
32
|
+
<div id="menu">
|
|
33
|
+
|
|
34
|
+
<a href="_index.html">Index</a> »
|
|
35
|
+
<span class="title">File: README</span>
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
<div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<div id="search">
|
|
42
|
+
|
|
43
|
+
<a class="full_list_link" id="class_list_link"
|
|
44
|
+
href="class_list.html">
|
|
45
|
+
Class List
|
|
46
|
+
</a>
|
|
47
|
+
|
|
48
|
+
<a class="full_list_link" id="method_list_link"
|
|
49
|
+
href="method_list.html">
|
|
50
|
+
Method List
|
|
51
|
+
</a>
|
|
52
|
+
|
|
53
|
+
<a class="full_list_link" id="file_list_link"
|
|
54
|
+
href="file_list.html">
|
|
55
|
+
File List
|
|
56
|
+
</a>
|
|
57
|
+
|
|
58
|
+
</div>
|
|
59
|
+
<div class="clear"></div>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<iframe id="search_frame"></iframe>
|
|
63
|
+
|
|
64
|
+
<div id="content"><div id='filecontents'><h1 id="apes">apes</h1>
|
|
65
|
+
|
|
66
|
+
<p><a href="http://badge.fury.io/rb/apes"><img src="https://badge.fury.io/rb/apes.png" alt="Gem Version" /></a>
|
|
67
|
+
<a href="https://gemnasium.com/ShogunPanda/apes"><img src="https://gemnasium.com/ShogunPanda/apes.png?travis" alt="Dependency Status" /></a>
|
|
68
|
+
<a href="http://travis-ci.org/ShogunPanda/apes"><img src="https://secure.travis-ci.org/ShogunPanda/apes.png?branch=master" alt="Build Status" /></a>
|
|
69
|
+
<a href="https://coveralls.io/r/ShogunPanda/apes"><img src="https://coveralls.io/repos/ShogunPanda/apes/badge.png" alt="Coverage Status" /></a></p>
|
|
70
|
+
|
|
71
|
+
<p>A tiny JSON API framework for Ruby on Rails.</p>
|
|
72
|
+
|
|
73
|
+
<p>https://sw.cowtech.it/apes</p>
|
|
74
|
+
|
|
75
|
+
<p>https://github.com/ShogunPanda/apes</p>
|
|
76
|
+
|
|
77
|
+
<h1 id="introduction">Introduction</h1>
|
|
78
|
+
|
|
79
|
+
<p>Apes makes it easy to deal with <a href="http://jsonapi.org/">JSON API</a> by abstracting all the oddities of the specification.</p>
|
|
80
|
+
|
|
81
|
+
<h2 id="routes">Routes</h2>
|
|
82
|
+
|
|
83
|
+
<p>There’s no requirement at all here, but a good start point for your routes might be the following:</p>
|
|
84
|
+
|
|
85
|
+
<p>```ruby
|
|
86
|
+
Rails.application.routes.draw do
|
|
87
|
+
# This is to enable AJAX cross domain
|
|
88
|
+
match ‘*path’, to: ‘application#handle_cors’, via: :options</p>
|
|
89
|
+
|
|
90
|
+
<p># Insert your routes here</p>
|
|
91
|
+
|
|
92
|
+
<p># Catch alls
|
|
93
|
+
match(“/*unused”, via: :all, to: “application#error_handle_not_found”)
|
|
94
|
+
root(to: “application#error_handle_not_found”)
|
|
95
|
+
end
|
|
96
|
+
```</p>
|
|
97
|
+
|
|
98
|
+
<h2 id="controller">Controller</h2>
|
|
99
|
+
|
|
100
|
+
<p>Once your controller inherits from <code>Apes::Controller</code>, you can implement a CRUD in virtually no time:</p>
|
|
101
|
+
|
|
102
|
+
<p>```ruby
|
|
103
|
+
class UsersController < Apes::Controller
|
|
104
|
+
before_action :find_user, except: [:index, :create]</p>
|
|
105
|
+
|
|
106
|
+
<p>def index
|
|
107
|
+
@objects = paginate(User.all)
|
|
108
|
+
end</p>
|
|
109
|
+
|
|
110
|
+
<p>def show
|
|
111
|
+
end</p>
|
|
112
|
+
|
|
113
|
+
<p>def create
|
|
114
|
+
@object = User.new
|
|
115
|
+
attributes = request_extract_model(@object)
|
|
116
|
+
@object.update_attributes!(request_cast_attributes(@object, attributes))</p>
|
|
117
|
+
|
|
118
|
+
<pre class="code ruby"><code class="ruby">response.header["Location"] = user_url(@object)
|
|
119
|
+
response.status = :created end
|
|
120
|
+
</code></pre>
|
|
121
|
+
|
|
122
|
+
<p>def update
|
|
123
|
+
attributes = request_extract_model(@object)
|
|
124
|
+
@object.update_attributes!(request_cast_attributes(@object, attributes))
|
|
125
|
+
end</p>
|
|
126
|
+
|
|
127
|
+
<p>def destroy
|
|
128
|
+
@object.destroy!
|
|
129
|
+
render(nothing: true, status: :no_content)
|
|
130
|
+
end</p>
|
|
131
|
+
|
|
132
|
+
<p>private</p>
|
|
133
|
+
|
|
134
|
+
<p>def find_user
|
|
135
|
+
@object = User.find(params[:id])
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
```</p>
|
|
139
|
+
|
|
140
|
+
<p>By definining the <code>ATTRIBUTES</code> and <code>RELATIONSHIPS</code> in your model, you can ensure no invalid attributes are provided.</p>
|
|
141
|
+
|
|
142
|
+
<p><code>
|
|
143
|
+
class Appointment < ApplicationRecord
|
|
144
|
+
ATTRIBUTES = [:user, :assignee, :date, :reason].freeze
|
|
145
|
+
RELATIONSHIPS = {user: nil, assignee: User}.freeze
|
|
146
|
+
end
|
|
147
|
+
</code></p>
|
|
148
|
+
|
|
149
|
+
<h2 id="model">Model</h2>
|
|
150
|
+
|
|
151
|
+
<p>If your model imports <code>Apes::Model</code>, it will earn two extra nice things: additional validations and enhanced search.</p>
|
|
152
|
+
|
|
153
|
+
<p>Additional validations use the same infrastructure of <code>ActiveModel::Validations</code> but it’s not bound to any attribute and it’s not reset when performing validations.</p>
|
|
154
|
+
|
|
155
|
+
<p>For instance, you can do:</p>
|
|
156
|
+
|
|
157
|
+
<p>```ruby
|
|
158
|
+
class User < ApplicationRecord
|
|
159
|
+
include Apes::Model
|
|
160
|
+
end</p>
|
|
161
|
+
|
|
162
|
+
<p>u = User.new
|
|
163
|
+
u.additional_errors.add(“whatever”, “I don’t like my name!”)
|
|
164
|
+
u.validate!
|
|
165
|
+
p u.errors
|
|
166
|
+
p u.all_validation_errors
|
|
167
|
+
```</p>
|
|
168
|
+
|
|
169
|
+
<p>Enhanced searching, instead allow to perform single or multiple rows searching using <code>find_with_any</code> (including <code>find_with_any!</code> variant) or <code>search</code>.</p>
|
|
170
|
+
|
|
171
|
+
<p>The latter will perform full text search on one or more fields returning all matching rows:</p>
|
|
172
|
+
|
|
173
|
+
<p><code>ruby
|
|
174
|
+
ZipCode.search(params: params, query: collection, fields: ["zip", "name", "county", "state"])
|
|
175
|
+
</code></p>
|
|
176
|
+
|
|
177
|
+
<p>The former instead, with perform a exact search basing on the model definition and returning the first matching row:</p>
|
|
178
|
+
|
|
179
|
+
<p><code>ruby
|
|
180
|
+
ZipCode.find_with_any!(params[:id])
|
|
181
|
+
</code></p>
|
|
182
|
+
|
|
183
|
+
<p>You can customize which fields is searching on by defining the constants <code>SECONDARY_KEY</code> or <code>SECONDARY_QUERY</code> in your model.</p>
|
|
184
|
+
|
|
185
|
+
<p>Note that UUID are always matched against the <code>id</code> column.</p>
|
|
186
|
+
|
|
187
|
+
<h2 id="view">View</h2>
|
|
188
|
+
|
|
189
|
+
<p>There’s nothing much to say here. <code>Apes::Controller</code> handles views and error rendering.</p>
|
|
190
|
+
|
|
191
|
+
<p>All you need to do is to define a partial view in <code>app/views/models</code> using JBuilder.
|
|
192
|
+
If your action defines <code>@objects</code> or <code>@object</code> variables, Apes will render a collection or a single object automagically.</p>
|
|
193
|
+
|
|
194
|
+
<p>Example (<code>app/views/models/_appointment.json.jbuilder</code>):</p>
|
|
195
|
+
|
|
196
|
+
<p>```ruby
|
|
197
|
+
json.type “appointment”
|
|
198
|
+
json.id object.to_param</p>
|
|
199
|
+
|
|
200
|
+
<p>json.attributes do
|
|
201
|
+
json.extract! object, :date, :reason
|
|
202
|
+
end</p>
|
|
203
|
+
|
|
204
|
+
<p>json.relationships do
|
|
205
|
+
included = local_assigns.fetch(:included, false)</p>
|
|
206
|
+
|
|
207
|
+
<p>json.assignee do
|
|
208
|
+
json.data(“user”, id: object.assignee.to_param)
|
|
209
|
+
json.links(user_url(object.assignee))
|
|
210
|
+
response_included(object.assignee) unless included
|
|
211
|
+
end</p>
|
|
212
|
+
|
|
213
|
+
<p>json.user do
|
|
214
|
+
json.data(“user”, id: object.user.to_param)
|
|
215
|
+
json.links(user_url(object.user))
|
|
216
|
+
response_included(object.user) unless included
|
|
217
|
+
end
|
|
218
|
+
end</p>
|
|
219
|
+
|
|
220
|
+
<p>json.links do
|
|
221
|
+
json.self appointment_url(object)
|
|
222
|
+
end</p>
|
|
223
|
+
|
|
224
|
+
<p>json.meta(meta) if local_assigns.key?(:meta)
|
|
225
|
+
```</p>
|
|
226
|
+
|
|
227
|
+
<h2 id="contributing-to-apes">Contributing to apes</h2>
|
|
228
|
+
|
|
229
|
+
<ul>
|
|
230
|
+
<li>Check out the latest master to make sure the feature hasn’t been implemented or the bug hasn’t been fixed yet.</li>
|
|
231
|
+
<li>Check out the issue tracker to make sure someone already hasn’t requested it and/or contributed it.</li>
|
|
232
|
+
<li>Fork the project.</li>
|
|
233
|
+
<li>Start a feature/bugfix branch.</li>
|
|
234
|
+
<li>Commit and push until you are happy with your contribution.</li>
|
|
235
|
+
<li>Make sure to add tests for it. This is important so I don’t break it in a future version unintentionally.</li>
|
|
236
|
+
</ul>
|
|
237
|
+
|
|
238
|
+
<h2 id="copyright">Copyright</h2>
|
|
239
|
+
|
|
240
|
+
<p>Copyright (C) 2016 and above Shogun <a href="mailto:shogun@cowtech.it">shogun@cowtech.it</a>.</p>
|
|
241
|
+
|
|
242
|
+
<p>Licensed under the MIT license, which can be found at http://opensource.org/licenses/MIT.</p>
|
|
243
|
+
</div></div>
|
|
244
|
+
|
|
245
|
+
<div id="footer">
|
|
246
|
+
Generated on Sat Jun 4 12:41:53 2016 by
|
|
247
|
+
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
|
248
|
+
0.8.7.6 (ruby-2.3.0).
|
|
249
|
+
</div>
|
|
250
|
+
|
|
251
|
+
</body>
|
|
252
|
+
</html>
|