rails_api_documentation 0.2.2 → 0.2.3

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -0
  3. data/app/assets/javascripts/table.js.coffee +8 -3
  4. data/app/assets/stylesheets/rails_api_doc/application.css +1 -0
  5. data/app/assets/stylesheets/rails_api_doc/default.sass +31 -0
  6. data/app/assets/stylesheets/rails_api_doc/side_menu.sass +12 -23
  7. data/app/assets/stylesheets/rails_api_doc/table.sass +104 -84
  8. data/app/controllers/rails_api_doc/api_docs_controller.rb +19 -18
  9. data/app/models/rails_api_doc/api_datum.rb +8 -0
  10. data/app/views/layouts/rails_api_doc/application.slim +10 -9
  11. data/app/views/rails_api_doc/api_docs/_request_api_table.slim +4 -3
  12. data/app/views/rails_api_doc/api_docs/_response_api_table.slim +13 -6
  13. data/app/views/rails_api_doc/api_docs/index.slim +15 -20
  14. data/app/views/shared/_param_inputs.slim +8 -0
  15. data/app/views/shared/_side_menu.slim +9 -0
  16. data/app/views/shared/_table.slim +37 -17
  17. data/lib/generators/rails_api_doc/install_generator.rb +23 -0
  18. data/lib/generators/rails_api_doc/templates/api_datum_migration.rb +15 -0
  19. data/lib/rails_api_doc/config/validate_ary_object.rb +1 -1
  20. data/lib/rails_api_doc/config/validate_enum.rb +1 -1
  21. data/lib/rails_api_doc/config/validate_type.rb +1 -1
  22. data/lib/rails_api_doc/config/validator.rb +0 -4
  23. data/lib/rails_api_doc/config.rb +0 -2
  24. data/lib/rails_api_doc/controller/request/dsl.rb +60 -0
  25. data/lib/rails_api_doc/controller/request/headers.rb +56 -0
  26. data/lib/rails_api_doc/controller/request/param.rb +81 -0
  27. data/lib/rails_api_doc/controller/{parameter → request}/repository.rb +3 -1
  28. data/lib/rails_api_doc/controller/{response_factory.rb → response/factory.rb} +2 -2
  29. data/lib/rails_api_doc/controller/response/headers.rb +30 -0
  30. data/lib/rails_api_doc/controller/response/param.rb +14 -0
  31. data/lib/rails_api_doc/controller/response/rabl.rb +3 -1
  32. data/lib/rails_api_doc/controller/response/rabl_compiler.rb +4 -13
  33. data/lib/rails_api_doc/controller/strong_params/dsl.rb +17 -0
  34. data/lib/rails_api_doc/controller/strong_params/permitted_params.rb +88 -0
  35. data/lib/rails_api_doc/engine.rb +0 -12
  36. data/lib/rails_api_doc/{controller → model}/attribute_parser.rb +1 -1
  37. data/lib/rails_api_doc/railtie.rb +5 -2
  38. data/lib/rails_api_doc/version.rb +1 -1
  39. data/lib/rails_api_doc.rb +48 -1
  40. metadata +18 -16
  41. data/app/views/rails_api_doc/api_docs/_edit_field.slim +0 -9
  42. data/app/views/rails_api_doc/api_docs/_side_menu.slim +0 -9
  43. data/app/views/rails_api_doc/api_docs/_title.slim +0 -4
  44. data/app/views/rails_api_doc/api_docs/edit.js.erb +0 -0
  45. data/app/views/rails_api_doc/api_docs/example.html.erb +0 -32
  46. data/app/views/rails_api_doc/api_docs/new.js.erb +0 -0
  47. data/app/views/shared/_response_table.slim +0 -30
  48. data/lib/rails_api_doc/controller/parameter/repository/param.rb +0 -68
  49. data/lib/rails_api_doc/controller/parameter.rb +0 -54
  50. data/lib/rails_api_doc/controller/strong_params.rb +0 -71
  51. data/lib/rails_api_doc/controller.rb +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5e7d3ec4c16b4519d33306c2bf303c712e9748f7
4
- data.tar.gz: 6c71e6cfa1298def8301c076bb88bb111fe8c7d1
3
+ metadata.gz: 32d21488a0b91b4da968d909a9988b67cc7ea427
4
+ data.tar.gz: 72c1203f43307e203f499879d0739c0adf3fe237
5
5
  SHA512:
6
- metadata.gz: c90cadfa96cd6a860dfa9b8d199deff6d8b5ea5346f63683921470e0d3efc6169e701b107d5a597eaab500c3edafc365b2ce893d7ba961cd773b11370ae86dc3
7
- data.tar.gz: 24e4970f86060efca123e637831b9986535b0e3f73c2ce24d422eca0bdbf042863d0ecc0a0d123cde958f91d7f59f335c879a73cf4e68aba3fc06d19665ecea8
6
+ metadata.gz: ad3a4d03dbb76aa738e0a7cc16fe832967d9db8b8b28fc14932398229ab6837bb3defb2d50fdea137a216b25d2ee62abe8f200ab7a9026ba2110ec67a6e32943
7
+ data.tar.gz: fdc0c2b103f36ea0443c62399b0f027aa760fd4ec25dd6733708baecb7f3a75cbc236f4abc0804e07851a66db8ac4096b17e49eac46bcf6e88028b0ffd7ce261
data/README.md CHANGED
@@ -28,6 +28,10 @@ Or install it yourself as:
28
28
 
29
29
  To display api documentation on route '/api_doc' you need to:
30
30
 
31
+ 0. config/application.rb ->
32
+ ```ruby
33
+ require 'rails_api_doc'
34
+ ```
31
35
  1. config/routes.rb ->
32
36
  ```ruby
33
37
  mount RailsApiDoc::Engine => '/api_doc'
@@ -55,6 +59,7 @@ To display api documentation on route '/api_doc' you need to:
55
59
 
56
60
  end
57
61
  ```
62
+ 3. go to localhost:3000/api_doc
58
63
 
59
64
  ## Strong params
60
65
 
@@ -6,7 +6,7 @@ _side_menu = null
6
6
  $ ->
7
7
  $('.next-is-nested').on 'click', (e) ->
8
8
  self = $(this)
9
- self.closest('.row').next().toggle()
9
+ self.closest('.row').next().toggleClass('is-shown')
10
10
 
11
11
  $('.request-action-title').on 'click', (e) ->
12
12
  self = $(this)
@@ -14,11 +14,16 @@ $ ->
14
14
  return unless next.hasClass('flex-table')
15
15
  next.toggle()
16
16
 
17
- $('.add-ico, .edit-ico').on 'click', (e) ->
17
+ $('.flex-table input, .flex-table select').on 'click', (e) ->
18
+ e.stopPropagation()
19
+
20
+ $('.ico').on 'click', (e) ->
18
21
  self = $(this)
22
+ e.preventDefault()
23
+ e.stopPropagation()
19
24
  self.closest('.row').toggleClass('is-active')
20
25
 
21
- _header_height = $('.aside').offset().top
26
+ # _header_height = $('.aside').offset().top
22
27
 
23
28
  _window = $(window)
24
29
 
@@ -25,3 +25,4 @@
25
25
  * c) left should reduce font size if too much content
26
26
  *
27
27
  */
28
+
@@ -0,0 +1,31 @@
1
+ @charset "UTF-8"
2
+ @import url(http://fonts.googleapis.com/css?family=Open+Sans:300,400,700)
3
+
4
+ body
5
+ font-family: 'Open Sans', sans-serif
6
+ font-weight: 300
7
+ line-height: 1.42em
8
+ color: #A7A1AE
9
+ background-color: #1F2739
10
+
11
+ h1.header
12
+ font-size: 3em
13
+ font-weight: 300
14
+ line-height: 1em
15
+ text-align: center
16
+ color: #4DC3FA
17
+
18
+ .blue
19
+ color: #185875
20
+
21
+ .yellow
22
+ color: #FFF842
23
+
24
+ .content
25
+ display: flex
26
+
27
+ nav
28
+ flex: 1
29
+
30
+ .tables
31
+ flex: 5
@@ -1,30 +1,19 @@
1
- .side-menu
1
+ ul
2
2
  list-style-type: none
3
3
  padding: 0
4
- font-size: 15px
5
4
 
6
- li
7
- margin-bottom: 3px
5
+ .side-menu
8
6
 
9
- span
10
- margin: 0 2px
7
+ // position: static
11
8
 
12
- a
13
- display: inline-block
14
- padding: 0
15
- font-size: 15px
16
- font-weight: 500
17
- color: #767676
18
- text-decoration: none
9
+ &.fixed
10
+ position: fixed
11
+ top: 0
19
12
 
20
- &:hover
21
- color: #563d7c
22
- text-decoration: underline
23
- background-color: transparent
13
+ a
14
+ text-decoration: none
15
+ border-bottom: 1px solid transparent
16
+ transition: border-color ease-in-out 0.3s
24
17
 
25
- &.is-current
26
- padding-left: 18px
27
- font-weight: 700
28
- color: #563d7c
29
- background-color: transparent
30
- border-left: 2px solid #563d7c
18
+ &:hover
19
+ border-color: yellow
@@ -2,36 +2,65 @@
2
2
  --row-count: 5
3
3
 
4
4
  .flex-table
5
- // display: inline-flex
6
- // justify-content: center
7
- // width: 80%
8
- // margin: 0 auto
9
- // display: inline-block
10
- padding: 5px
11
- box-sizing: border-box
12
- background: lightblue
13
-
14
- // border: 1px solid black
5
+ overflow: hidden
6
+ width: 100%
7
+ margin: 0
8
+ display: table
9
+ padding: 0 0 0 0
15
10
 
16
11
  & &
17
- display: none
12
+ visibility: hidden
13
+ position: absolute
14
+ opacity: 0
15
+
18
16
  width: 100%
19
- background: gray
17
+ background: #185875
20
18
  padding: 20px
21
19
  box-sizing: border-box
22
20
 
23
21
  & .flex-table
24
22
  padding-right: 0
25
23
 
26
- //
27
- // &.flex-table
28
- // width: 100%
29
- // background: gray
30
- // padding: 20px
31
- // box-sizing: border-box
32
- //
33
- // &.flex-table
34
- // padding-right: 0
24
+ &.is-shown
25
+ opacity: 1
26
+ position: relative
27
+ visibility: visible
28
+ transition: visibility 0s, opacity 0.5s linear
29
+
30
+ .row
31
+ font-weight: normal
32
+ font-size: 0.9em
33
+ -webkit-box-shadow: 0 2px 2px -2px #0E1119
34
+ -moz-box-shadow: 0 2px 2px -2px #0E1119
35
+ box-shadow: 0 2px 2px -2px #0E1119
36
+
37
+ input, select, [type="submit"], .exit
38
+ display: none
39
+
40
+ // input, select
41
+ font-weight: 600
42
+ color: #fff
43
+ background-color: black
44
+ border: 1px solid rgba(0,0,0,0.3)
45
+ border-radius: 4px
46
+ box-shadow: inset 0 -5px 45px
47
+
48
+
49
+ .ico
50
+ cursor: pointer
51
+ font-size: 20px
52
+ padding: 1% 2%
53
+ position: absolute
54
+ left: 2%
55
+
56
+ &:hover
57
+ background-color: #FFF842
58
+ color: #403E10
59
+
60
+ transition-delay: 0s
61
+ transition-duration: 0.4s
62
+ transition-property: all
63
+ transition-timing-function: line
35
64
 
36
65
  .flex-line
37
66
 
@@ -41,51 +70,49 @@
41
70
  border-bottom: 1px solid black
42
71
 
43
72
  &:first-child
44
- border-top: 1px solid black
73
+ color: #FB667A
45
74
 
46
75
  background: lightgreen
47
76
 
48
- // Зачем это ?
49
- // display: -webkit-box
50
- // display: -moz-box
51
- // display: -ms-flexbox
52
- // display: -webkit-flex
53
- //
54
77
  &.row
55
78
  display: flex
56
79
 
57
- &.is-active
80
+ &:hover
81
+ background-color: #464A52
58
82
 
59
- input
60
- display: inline-block
83
+ h1
84
+ margin: 0
85
+ text-align: center
86
+ font-weight: bold
87
+ background-color: #1F2739
88
+ font-size: 1em
61
89
 
62
- .mod-submit
63
- display: inline-block
64
- // flex-flow: row wrap
65
- // justify-content: space-between
90
+ &:nth-child(odd)
91
+ background-color: #323C50
66
92
 
67
- // ничего не сделало
68
- // flex-direction: row
69
- // ничего не сделало
70
- // flex-wrap: nowrap
93
+ &:nth-child(even)
94
+ background-color: #2C3446
71
95
 
72
- // -webkit-flex-flow: row wrap
96
+ &.is-active
97
+
98
+ input, select, [type="submit"], .exit
99
+ display: inline-block
100
+
101
+ .title, .ico:not(.exit)
102
+ display: none
73
103
 
74
- &.column
75
- flex: 1
76
- flex-flow: column wrap
77
- align-content: flex-start
78
- // align-items: stretch
104
+ &.column
105
+ flex: 1
106
+ flex-flow: column wrap
107
+ align-content: flex-start
79
108
 
80
109
  .flex-item
81
- border-right: 1px solid black
82
- &:first-child
83
- border-left: 1px solid black
84
- // border-bottom: 1px solid black
85
- background: tomato
86
- padding: 5px
110
+ padding-bottom: 1%
111
+ padding-top: 1%
112
+ position: relative
113
+ padding-left: 2%
87
114
 
88
- // margin: auto
115
+ border-right: 2px solid #1F2739
89
116
  text-align: center
90
117
 
91
118
  .row &
@@ -95,45 +122,38 @@
95
122
  &.mod-submit
96
123
  display: none
97
124
 
98
- input
99
- display: none
100
-
101
- // Что я сделал ?? - оно почемуто заработало было flex-grow: 1
102
- // В статье написано что это тоже самое, а на практике - не так ?
103
- // flex: 1
104
- // TODO: need function that will count % from num childs?
105
- // магические отступы ))
106
- // width: 23%
107
-
108
- // line-height: 150px
109
- // color: white
110
- // font-weight: bold
111
- // font-size: 3em
112
- // text-align: center
113
-
114
125
  .column &
115
126
  width: 100%
116
127
 
117
- .header
118
- text-align: center
128
+ div.flex-item
119
129
 
120
- .content
121
- display: flex
130
+ &:hover
131
+ background-color: #FFF842
132
+ color: #403E10
122
133
 
123
- .aside
124
- flex: 1
134
+ transition-delay: 0s
135
+ transition-duration: 0.4s
136
+ transition-property: all
137
+ transition-timing-function: line
125
138
 
126
- .main-block
127
- flex: 4
139
+ &.next-is-nested
140
+ cursor: pointer
141
+ &:hover
142
+ box-shadow: #7F7C21 -1px 1px, #7F7C21 -2px 2px, #7F7C21 -3px 3px, #7F7C21 -4px 4px, #7F7C21 -5px 5px, #7F7C21 -6px 6px
143
+ transform: translate3d(6px, -6px, 0)
128
144
 
129
- #side-menu
130
- position: static
145
+ .response-table
131
146
 
132
- &.fixed
133
- position: fixed
134
- top: 0
147
+ .request-action-title
148
+ text-align: center
135
149
 
136
- .request-action-title
137
- text-align: center
150
+ &:nth-child(odd)
151
+ background-color: #323C50
152
+
153
+ &:nth-child(even)
154
+ background-color: #2C3446
138
155
 
139
- background-color: lightblue
156
+ p.title
157
+ text-align: center
158
+ color: #4DC3FA
159
+ font-weight: 500
@@ -10,42 +10,43 @@ class RailsApiDoc::ApiDocsController < RailsApiDoc::ApplicationController
10
10
  # preload controllers for parameters to apply
11
11
  Dir.glob("#{Rails.root}/app/controllers/**/*.rb").each { |file| require_dependency file }
12
12
 
13
- @static_data = {
14
- types: RailsApiDoc::Controller::Parameter::Repository::Param::ACCEPTED_TYPES.map(&:to_s)
15
- }
13
+ @request_repository = RailsApiDoc::Controller::Request::Repository
16
14
 
17
- @request_repository = RailsApiDoc::Controller::Parameter::Repository
15
+ @registered_controllers = @request_repository.registered_controllers
18
16
 
19
- @response_repository = RailsApiDoc::Controller::Response.repo
17
+ @response_repository = RailsApiDoc::Controller::Response::Factory.repo
20
18
  end
21
19
 
22
20
  def create
23
21
  attributes = RailsApiDoc::Controller::AttributeParser.parse_attributes(permitted_params)
24
- end
25
22
 
26
- def destroy
27
- pry binding
23
+ RailsApiDoc::ApiDatum.create!(attributes)
28
24
  end
29
25
 
30
- def edit
31
- @api_record = NewRecord.new
32
-
33
- pry binding
34
- end
26
+ def destroy
27
+ attributes = RailsApiDoc::Controller::AttributeParser.parse_attributes(permitted_params)
35
28
 
36
- def new
37
- @api_record = NewRecord.new
38
- pry binding
29
+ if params[:id]
30
+ RailsApiDoc::ApiDatum.find(params[:id]).update!(attributes)
31
+ else
32
+ RailsApiDoc::ApiDatum.create!(attributes)
33
+ end
39
34
  end
40
35
 
41
36
  def update
42
- pry binding
37
+ attributes = RailsApiDoc::Controller::AttributeParser.parse_attributes(permitted_params)
38
+
39
+ if params[:id]
40
+ RailsApiDoc::ApiDatum.find(params[:id]).update!(attributes)
41
+ else
42
+ RailsApiDoc::ApiDatum.create!(attributes)
43
+ end
43
44
  end
44
45
 
45
46
  private
46
47
 
47
48
  def permitted_params
48
- params.permit!(:name, :type, :enum)
49
+ params.permit(:name, :type, :special, :desc)
49
50
  end
50
51
 
51
52
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ # author: Vadim Shaveiko <@vshaveyko>
3
+ # :nodoc:
4
+ class RailsApiDoc::ApiDatum < ActiveRecord::Base
5
+
6
+ serialize :nesting, Array
7
+
8
+ end
@@ -9,12 +9,13 @@ html lang="en"
9
9
  == stylesheet_link_tag "rails_api_doc/application", :media => "all"
10
10
  == javascript_include_tag "api_doc"
11
11
  == csrf_meta_tags
12
- body
13
- #main.container
14
- == yield
15
- footer#footer
16
- .container
17
- p
18
- | Powered by
19
- a href="http://github.com/vshaveyko/rails_api_doc" RailsApiDoc
20
- == RailsApiDoc::VERSION
12
+ body.wrap
13
+
14
+ h1.header
15
+ span.blue &lt;
16
+ span Rails
17
+ span.blue &gt;
18
+ span
19
+ a.yellow[style="text-decoration: none" href="http://github.com/vshaveyko/rails_api_doc"] Api Documentation
20
+
21
+ == yield
@@ -1,4 +1,5 @@
1
- - @request_headers = { enum: 'Values(if type is enum)' }
1
+ - request_headers = repo.headers
2
2
 
3
- div[id="#{locals[:model]}.request" style="--row-count: #{@request_headers.length}"]
4
- = render 'shared/table', locals: { model: locals[:model], rows: locals[:params] }
3
+ div[id="#{ctrl}.request" style="--row-count: #{request_headers.length}"]
4
+
5
+ = render 'shared/table', model: ctrl, rows: repo[ctrl], headers: request_headers, nesting: [], type: :request
@@ -1,8 +1,15 @@
1
- div[id="#{model}.response" style="--row-count: 3"]
2
- - repo.map[model][:actions].each do |action|
1
+ - response_headers = repo.headers
2
+
3
+ div.response-table[id="#{ctrl}.response" style="--row-count: #{response_headers.length}"]
4
+
5
+ - repo.map[ctrl][:actions].each do |action|
3
6
  // TODO: Nest table in this div for easier jq toggling
4
7
  // add borders to this div
5
- - if route = repo.action_route(model, action)
6
- div.request-action-title #{repo.action_route(model, action)}
7
- - if data = repo.load_template(model, action)
8
- = render 'shared/response_table', locals: { model: model, rows: data }
8
+
9
+ - if route = repo.action_route(ctrl, action)
10
+
11
+ div.request-action-title = route
12
+
13
+ - if rows = repo.load_template(ctrl, action)
14
+
15
+ = render 'shared/table', model: ctrl, rows: rows, headers: response_headers, nesting: [], type: :response
@@ -1,27 +1,22 @@
1
- .layout
2
- .header
3
- = render 'title'
4
- .content
5
- div.aside
6
- div#side-menu
7
- = render 'side_menu', locals: { models: @request_repository.keys }
1
+ div.content
2
+ = render 'shared/side_menu', ctrls: @registered_controllers
8
3
 
9
- div.main-block
4
+ div.tables
10
5
 
11
- - @request_repository.each do |model, params|
6
+ - @registered_controllers.each do |ctrl|
12
7
 
13
- div[id=(model.to_s)]
8
+ div[id=(ctrl.to_s)]
14
9
 
15
- h2 = model.to_s
10
+ h2 = ctrl.to_s
16
11
 
17
- p
18
- | Scopes
19
- | #{model.scopes_configuration.keys.map { |key| ":#{key}"}.join(', ')}
12
+ p.title
13
+ | Scopes
14
+ | #{ctrl.scopes_configuration.keys.map { |key| ":#{key}"}.join(', ')}
20
15
 
21
- p
22
- | Request
23
- = render 'request_api_table', locals: { model: model, params: params }
16
+ p.title
17
+ | Request
18
+ = render 'request_api_table', ctrl: ctrl, repo: @request_repository
24
19
 
25
- p
26
- | Response
27
- = render 'response_api_table', model: model, repo: @response_repository
20
+ p.title
21
+ | Response
22
+ = render 'response_api_table', ctrl: ctrl, repo: @response_repository
@@ -0,0 +1,8 @@
1
+ - value = try(:value)
2
+ - placeholder = settings[:placeholder] || ''
3
+
4
+ - case settings[:fill_type]
5
+ - when :input
6
+ = text_field_tag settings[:param], nil, placeholder: placeholder
7
+ - when :select
8
+ = select_tag settings[:param], options_for_select(settings[:values], value)
@@ -0,0 +1,9 @@
1
+ nav.bs-docs-sidebar.hidden-print.hidden-sm.hidden-xs
2
+ ul.side-menu.nav.bs-docs-sidenav
3
+ - ctrls.each do |ctrl|
4
+ li.yellow
5
+ a.yellow[href=('#' + ctrl.to_s)] = ctrl.to_s
6
+ span = '('
7
+ a.yellow[href=('#' + ctrl.to_s + '.request')] req,
8
+ a.yellow[href=('#' + ctrl.to_s + '.response')] resp
9
+ span = ')'
@@ -1,20 +1,40 @@
1
- - nesting = locals[:nesting].to_a.push(locals[:model])
1
+ - nesting = nesting + [model] # do not mutate nesting value
2
2
 
3
3
  div.flex-table
4
- div.flex-line.row
5
- / Угловой елемент
6
- div.flex-item Parameter
7
- div.flex-item Type
8
- - @request_headers.each_value do |header|
9
- div.flex-item = header
10
- - locals[:rows].each do |row_name, row_values|
11
- div.flex-line.row
12
- div.flex-item #{row_name} #{'*' if row_values.required?}
13
- - if row_values.nested?
14
- div.flex-item.next-is-nested #{row_values[:model]}(Nested)
15
- - else
16
- div.flex-item #{row_values[:type]}
17
- - @request_headers.each_key do |header_alias|
18
- div.flex-item = row_values[header_alias]
4
+
5
+ / header row
6
+ = form_tag(api_doc_url(nesting: nesting, api_type: type), method: :post, remote: true, class: 'flex-line row') do
7
+
8
+ - headers.each.with_index do |(header, settings), index|
9
+ h1.flex-item
10
+ - if index.zero?
11
+ span.add.ico +
12
+ span.exit.ico
13
+ = submit_tag '✓'
14
+
15
+ = render 'shared/param_inputs', settings: settings
16
+
17
+ span.title = header
18
+
19
+ - rows.each do |row_name, row_values|
20
+
21
+ = form_tag(api_doc_url(nesting: nesting, api_type: type), method: :put, remote: true, class: 'flex-line row') do
22
+
23
+ - headers.each_value.with_index do |(header_settings), index|
24
+
25
+ - param_value = header_settings[:value].call(row_name, row_values)
26
+
27
+ div.flex-item[class="#{'next-is-nested' if row_values.nested?}"]
28
+
29
+ - if index.zero?
30
+ span.ico ✏
31
+ span.exit.ico ❌
32
+ = submit_tag '✔'
33
+
34
+ = render 'shared/param_inputs', settings: header_settings, value: param_value
35
+
36
+ span.title = param_value
37
+
19
38
  - if row_values.nested?
20
- = render 'shared/table', locals: { nesting: nesting, model: row_values[:model] || row_name, rows: row_values[:nested] }
39
+
40
+ = render 'shared/table', nesting: nesting, model: row_values[:model] || row_name, rows: row_values.nested, headers: headers, type: type
@@ -0,0 +1,23 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/migration'
3
+
4
+ module RailsApiDoc
5
+ class InstallGenerator < ::Rails::Generators::Base
6
+ include Rails::Generators::Migration
7
+ source_root File.expand_path('../templates', __FILE__)
8
+
9
+ desc "add the migrations"
10
+ def self.next_migration_number(path)
11
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
12
+ end
13
+
14
+ def copy_migrations
15
+ filename = 'generate_rails_api_documentation_attributes_table'
16
+ if self.class.migration_exists?('db/migrate', "#{filename}")
17
+ say_status('skipped', "Migration #{filename}.rb already exists")
18
+ else
19
+ migration_template "api_datum_migration.rb", "db/migrate/#{filename}.rb"
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,15 @@
1
+ class GenerateRailsApiDocumentationAttributesTable < ActiveRecord::Migration[5.0]
2
+
3
+ def change
4
+ create_table :rails_api_doc_api_data do |t|
5
+ t.string :api_type
6
+ t.string :type
7
+ t.string :name
8
+ t.string :special
9
+ t.string :desc
10
+
11
+ t.text :nesting
12
+ end
13
+ end
14
+
15
+ end