infold 0.1.1 → 0.2.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.
Files changed (438) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +410 -21
  3. data/Rakefile +0 -5
  4. data/lib/generators/infold/controller_generator.rb +56 -0
  5. data/lib/generators/infold/decorator_generator.rb +31 -0
  6. data/lib/generators/infold/install_generator.rb +98 -0
  7. data/lib/generators/infold/model_generator.rb +31 -0
  8. data/lib/generators/infold/resource_generator.rb +12 -0
  9. data/lib/generators/infold/scaffold_generator.rb +16 -0
  10. data/lib/generators/infold/search_form_generator.rb +23 -0
  11. data/lib/generators/infold/templates/controller.rb.tt +70 -0
  12. data/lib/generators/infold/templates/decorator.rb.tt +6 -0
  13. data/lib/generators/infold/templates/install/app/components/admin/association_field_component.html.haml +10 -0
  14. data/lib/generators/infold/templates/install/app/components/admin/association_field_component.rb +25 -0
  15. data/lib/generators/infold/templates/install/app/components/admin/badge_component.rb +18 -0
  16. data/lib/generators/infold/templates/install/app/components/admin/checkbox_component.html.haml +4 -0
  17. data/lib/generators/infold/templates/install/app/components/admin/checkbox_component.rb +22 -0
  18. data/lib/generators/infold/templates/install/app/components/admin/datetime_component.html.haml +13 -0
  19. data/lib/generators/infold/templates/install/app/components/admin/datetime_component.rb +10 -0
  20. data/lib/generators/infold/templates/install/app/components/admin/fieldset_component.html.haml +12 -0
  21. data/lib/generators/infold/templates/install/app/components/admin/fieldset_component.rb +73 -0
  22. data/lib/generators/infold/{install/templates/app/components/admin/form → templates/install/app/components/admin}/file_upload_component.html.haml +2 -6
  23. data/lib/generators/infold/templates/install/app/components/admin/file_upload_component.rb +10 -0
  24. data/lib/generators/infold/templates/install/app/components/admin/input_group_component.html.haml +6 -0
  25. data/lib/generators/infold/templates/install/app/components/admin/input_group_component.rb +10 -0
  26. data/lib/generators/infold/templates/install/app/components/admin/invalid_message_component.rb +17 -0
  27. data/lib/generators/infold/templates/install/app/components/admin/label_component.rb +16 -0
  28. data/lib/generators/infold/templates/install/app/components/admin/radio_component.html.haml +4 -0
  29. data/lib/generators/infold/templates/install/app/components/admin/radio_component.rb +22 -0
  30. data/lib/generators/infold/{install/templates → templates/install}/app/components/admin/remote_modal_component.html.haml +4 -3
  31. data/lib/generators/infold/templates/install/app/components/admin/remote_modal_component.rb +14 -0
  32. data/lib/generators/infold/templates/install/app/components/admin/select_component.rb +26 -0
  33. data/lib/generators/infold/templates/install/app/components/admin/sortable_component.html.haml +2 -0
  34. data/lib/generators/infold/templates/install/app/components/admin/sortable_component.rb +35 -0
  35. data/lib/generators/infold/templates/install/app/components/admin/switch_component.html.haml +3 -0
  36. data/lib/generators/infold/templates/install/app/components/admin/switch_component.rb +17 -0
  37. data/lib/generators/infold/templates/install/app/components/admin/text_component.rb +40 -0
  38. data/lib/generators/infold/{install/templates → templates/install}/app/controllers/admin/admin_users/registrations_controller.rb +0 -0
  39. data/lib/generators/infold/{install/templates → templates/install}/app/controllers/admin/admin_users/sessions_controller.rb +0 -0
  40. data/lib/generators/infold/{install/templates → templates/install}/app/controllers/admin/base_controller.rb +3 -3
  41. data/lib/generators/infold/{install/templates → templates/install}/app/controllers/admin/errors_controller.rb +0 -0
  42. data/lib/generators/infold/{install/templates → templates/install}/app/controllers/admin/turbo_devise_controller.rb +0 -0
  43. data/lib/generators/infold/{install/templates → templates/install}/app/controllers/concerns/admin/error_handlers.rb +1 -0
  44. data/lib/generators/infold/{install/templates/app/forms/admin/search_form_base.rb → templates/install/app/forms/admin/base_search_form.rb} +1 -1
  45. data/lib/generators/infold/templates/install/app/helpers/admin_helper.rb +23 -0
  46. data/lib/generators/infold/templates/install/app/javascript/admin/admin.css +188 -0
  47. data/lib/generators/infold/templates/install/app/javascript/admin/admin.scss +195 -0
  48. data/{app/javascript → lib/generators/infold/templates/install/app/javascript/admin}/controllers/application.js +0 -0
  49. data/lib/generators/infold/{install/templates → templates/install/app}/javascript/admin/controllers/datepicker_controller.js +1 -1
  50. data/{app/javascript → lib/generators/infold/templates/install/app/javascript/admin}/controllers/flash_controller.js +0 -0
  51. data/lib/generators/infold/{install/templates → templates/install/app}/javascript/admin/controllers/index.js +0 -0
  52. data/lib/generators/infold/{install/templates → templates/install/app}/javascript/admin/controllers/index_page_controller.js +0 -0
  53. data/lib/generators/infold/{install/templates → templates/install/app}/javascript/admin/controllers/nested_form_controller.js +0 -0
  54. data/lib/generators/infold/{install/templates → templates/install/app}/javascript/admin/controllers/relation_search_controller.js +0 -0
  55. data/lib/generators/infold/{install/templates → templates/install/app}/javascript/admin/controllers/remote_modal_controller.js +7 -7
  56. data/lib/generators/infold/{install/templates → templates/install/app}/javascript/admin/controllers/timepicker_controller.js +0 -0
  57. data/lib/generators/infold/templates/install/app/javascript/admin.js +9 -0
  58. data/lib/generators/infold/{install/templates → templates/install}/app/models/concerns/admin/datetime_field_concern.rb +12 -12
  59. data/lib/generators/infold/{install/templates → templates/install}/app/views/admin/admin_users/registrations/edit.html.haml +4 -3
  60. data/lib/generators/infold/{install/templates → templates/install}/app/views/admin/admin_users/sessions/new.html.haml +2 -2
  61. data/lib/generators/infold/{install/templates → templates/install}/app/views/admin/common/_flash.html.haml +0 -0
  62. data/lib/generators/infold/templates/install/app/views/admin/common/_header_menu.html.haml +1 -0
  63. data/lib/generators/infold/{install/templates → templates/install}/app/views/admin/errors/bad_request.html.haml +0 -0
  64. data/lib/generators/infold/{install/templates → templates/install}/app/views/admin/errors/forbidden.html.haml +0 -0
  65. data/lib/generators/infold/{install/templates → templates/install}/app/views/admin/errors/internal_server_error.html.haml +0 -0
  66. data/lib/generators/infold/{install/templates → templates/install}/app/views/admin/errors/not_found.html.haml +0 -0
  67. data/lib/generators/infold/{install/templates → templates/install}/app/views/admin/kaminari/_first_page.html.haml +0 -0
  68. data/lib/generators/infold/{install/templates → templates/install}/app/views/admin/kaminari/_gap.html.haml +0 -0
  69. data/lib/generators/infold/{install/templates → templates/install}/app/views/admin/kaminari/_last_page.html.haml +0 -0
  70. data/lib/generators/infold/{install/templates → templates/install}/app/views/admin/kaminari/_next_page.html.haml +0 -0
  71. data/lib/generators/infold/{install/templates → templates/install}/app/views/admin/kaminari/_page.html.haml +0 -0
  72. data/lib/generators/infold/{install/templates → templates/install}/app/views/admin/kaminari/_paginator.html.haml +0 -0
  73. data/lib/generators/infold/{install/templates → templates/install}/app/views/admin/kaminari/_prev_page.html.haml +0 -0
  74. data/lib/generators/infold/{install/templates/app/views/layouts/admin.haml.tt → templates/install/app/views/layouts/admin.html.haml} +8 -12
  75. data/lib/generators/infold/templates/install/config/infold/admin_user.yml +31 -0
  76. data/lib/generators/infold/{install/templates → templates/install}/config/locales/infold.en.yml +3 -2
  77. data/lib/generators/infold/{install/templates → templates/install}/config/locales/infold.ja.yml +1 -0
  78. data/lib/generators/infold/{install/templates → templates/install}/config/routes/admin.rb +0 -0
  79. data/lib/generators/infold/templates/model.rb.tt +34 -0
  80. data/lib/generators/infold/templates/resource.yml.tt +29 -0
  81. data/lib/generators/infold/templates/search_form.rb.tt +23 -0
  82. data/lib/generators/infold/templates/views/_form.haml.tt +36 -0
  83. data/lib/generators/infold/templates/views/_form_association.haml.tt +9 -0
  84. data/lib/generators/infold/templates/views/_index_row.haml.tt +12 -0
  85. data/lib/generators/infold/templates/views/_show_content.haml.tt +39 -0
  86. data/lib/generators/infold/templates/views/_show_wrapper.haml.tt +15 -0
  87. data/lib/generators/infold/templates/views/edit.html+turbo_frame.haml.tt +15 -0
  88. data/lib/generators/infold/templates/views/form.turbo_stream.haml.tt +16 -0
  89. data/lib/generators/infold/templates/views/index.csv.ruby.tt +19 -0
  90. data/lib/generators/infold/templates/views/index.haml.tt +45 -0
  91. data/lib/generators/infold/templates/views/index.html+turbo_frame.haml.tt +41 -0
  92. data/lib/generators/infold/templates/views/new.html+turbo_frame.haml.tt +15 -0
  93. data/lib/generators/infold/templates/views/show.html+turbo_frame.haml.tt +4 -0
  94. data/lib/generators/infold/views/form_generator.rb +51 -0
  95. data/lib/generators/infold/views/index_generator.rb +37 -0
  96. data/lib/generators/infold/views/show_generator.rb +33 -0
  97. data/lib/generators/infold/views_generator.rb +13 -0
  98. data/lib/generators/infold_generator.rb +11 -0
  99. data/lib/infold/db_schema.rb +28 -0
  100. data/lib/infold/field.rb +104 -0
  101. data/lib/infold/field_group.rb +108 -0
  102. data/lib/infold/property/active_storage.rb +38 -0
  103. data/lib/infold/property/association.rb +81 -0
  104. data/lib/infold/property/condition.rb +60 -0
  105. data/lib/infold/property/decorator.rb +30 -0
  106. data/lib/infold/property/default_order.rb +14 -0
  107. data/lib/infold/property/enum.rb +30 -0
  108. data/lib/infold/property/form_element.rb +56 -0
  109. data/lib/infold/property/show_element.rb +26 -0
  110. data/lib/infold/property/validation.rb +38 -0
  111. data/lib/infold/railtie.rb +4 -0
  112. data/lib/infold/resource.rb +32 -0
  113. data/lib/infold/table.rb +25 -0
  114. data/lib/infold/version.rb +1 -1
  115. data/lib/infold/writers/base_writer.rb +45 -0
  116. data/lib/infold/writers/controller_writer.rb +69 -0
  117. data/lib/infold/writers/decorator_writer.rb +94 -0
  118. data/lib/infold/writers/model_writer.rb +159 -0
  119. data/lib/infold/writers/search_form_writer.rb +23 -0
  120. data/lib/infold/writers/views/base_writer.rb +91 -0
  121. data/lib/infold/writers/views/form_writer.rb +39 -0
  122. data/lib/infold/writers/views/index_writer.rb +51 -0
  123. data/lib/infold/writers/views/show_writer.rb +16 -0
  124. data/lib/infold/yaml_reader.rb +252 -0
  125. data/lib/infold.rb +1 -1
  126. data/lib/tasks/infold_tasks.rake +0 -121
  127. metadata +246 -405
  128. data/app/assets/builds/infold.css +0 -17147
  129. data/app/assets/builds/infold.css.map +0 -7
  130. data/app/assets/builds/infold.js +0 -17202
  131. data/app/assets/builds/infold.js.map +0 -7
  132. data/app/assets/config/infold_manifest.js +0 -0
  133. data/app/assets/stylesheets/infold.custom.css +0 -76
  134. data/app/assets/stylesheets/infold.custom.css.map +0 -1
  135. data/app/components/infold/input_fieldset_component.html.haml +0 -14
  136. data/app/components/infold/input_fieldset_component.rb +0 -22
  137. data/app/components/infold/radio_fieldset_component.html.haml +0 -11
  138. data/app/components/infold/radio_fieldset_component.rb +0 -14
  139. data/app/components/infold/select_fieldset_component.html.haml +0 -7
  140. data/app/components/infold/select_fieldset_component.rb +0 -15
  141. data/app/controllers/infold/app_view_forms_controller.rb +0 -64
  142. data/app/controllers/infold/app_view_shows_controller.rb +0 -60
  143. data/app/controllers/infold/application_controller.rb +0 -17
  144. data/app/controllers/infold/apps_controller.rb +0 -68
  145. data/app/controllers/infold/attachment_fields_controller.rb +0 -59
  146. data/app/controllers/infold/builds_controller.rb +0 -21
  147. data/app/controllers/infold/columns_controller.rb +0 -89
  148. data/app/controllers/infold/csv_columns_controller.rb +0 -43
  149. data/app/controllers/infold/form_associations_controller.rb +0 -57
  150. data/app/controllers/infold/menu_directories_controller.rb +0 -19
  151. data/app/controllers/infold/menus_controller.rb +0 -35
  152. data/app/controllers/infold/models_controller.rb +0 -28
  153. data/app/controllers/infold/pages_controller.rb +0 -8
  154. data/app/controllers/infold/search_conditions_controller.rb +0 -63
  155. data/app/controllers/infold/search_result_fields_controller.rb +0 -62
  156. data/app/controllers/infold/show_associations_controller.rb +0 -54
  157. data/app/controllers/infold/sync_dbs_controller.rb +0 -13
  158. data/app/decorators/infold/app_view_form_decorator.rb +0 -56
  159. data/app/decorators/infold/app_view_index_decorator.rb +0 -53
  160. data/app/decorators/infold/app_view_modal_decorator.rb +0 -13
  161. data/app/decorators/infold/app_view_show_decorator.rb +0 -26
  162. data/app/decorators/infold/attachment_field_decorator.rb +0 -40
  163. data/app/decorators/infold/build_decorator.rb +0 -15
  164. data/app/decorators/infold/column_display_decorator.rb +0 -59
  165. data/app/decorators/infold/csv_column_decorator.rb +0 -5
  166. data/app/decorators/infold/form_association_column_decorator.rb +0 -5
  167. data/app/decorators/infold/form_column_decorator.rb +0 -57
  168. data/app/decorators/infold/model_association_decorator.rb +0 -39
  169. data/app/decorators/infold/model_column_decorator.rb +0 -201
  170. data/app/decorators/infold/model_decorator.rb +0 -27
  171. data/app/decorators/infold/search_condition_decorator.rb +0 -101
  172. data/app/decorators/infold/search_result_column_decorator.rb +0 -5
  173. data/app/decorators/infold/show_association_column_decorator.rb +0 -5
  174. data/app/decorators/infold/show_association_decorator.rb +0 -13
  175. data/app/decorators/infold/show_field_decorator.rb +0 -5
  176. data/app/helpers/infold/application_helper.rb +0 -29
  177. data/app/javascript/admin.scss +0 -5
  178. data/app/javascript/controllers/attachment_field_controller.js +0 -19
  179. data/app/javascript/controllers/column_controller.js +0 -20
  180. data/app/javascript/controllers/index.js +0 -32
  181. data/app/javascript/controllers/menu_controller.js +0 -26
  182. data/app/javascript/controllers/menu_directory_controller.js +0 -16
  183. data/app/javascript/controllers/modal_controller.js +0 -15
  184. data/app/javascript/controllers/nested_form_controller.js +0 -32
  185. data/app/javascript/controllers/search_condition_controller.js +0 -41
  186. data/app/javascript/controllers/sortable_controller.js +0 -19
  187. data/app/javascript/infold.js +0 -22
  188. data/app/javascript/infold.scss +0 -68
  189. data/app/javascript/stylesheets/admin/common.scss +0 -112
  190. data/app/javascript/stylesheets/admin/form.scss +0 -52
  191. data/app/javascript/stylesheets/admin/index.scss +0 -93
  192. data/app/javascript/stylesheets/admin/modal.scss +0 -37
  193. data/app/javascript/stylesheets/admin/show.scss +0 -16
  194. data/app/jobs/infold/application_job.rb +0 -4
  195. data/app/mailers/infold/application_mailer.rb +0 -6
  196. data/app/models/concerns/infold/app_view_search_concern.rb +0 -72
  197. data/app/models/concerns/infold/form_column_concern.rb +0 -63
  198. data/app/models/infold/app.rb +0 -41
  199. data/app/models/infold/app_view.rb +0 -27
  200. data/app/models/infold/app_view_form.rb +0 -43
  201. data/app/models/infold/app_view_index.rb +0 -36
  202. data/app/models/infold/app_view_modal.rb +0 -21
  203. data/app/models/infold/app_view_show.rb +0 -47
  204. data/app/models/infold/application_record.rb +0 -7
  205. data/app/models/infold/attachment_field.rb +0 -35
  206. data/app/models/infold/build.rb +0 -35
  207. data/app/models/infold/csv_column.rb +0 -9
  208. data/app/models/infold/enum.rb +0 -12
  209. data/app/models/infold/form_association.rb +0 -41
  210. data/app/models/infold/form_association_attachment_field.rb +0 -5
  211. data/app/models/infold/form_association_column.rb +0 -5
  212. data/app/models/infold/form_association_field.rb +0 -7
  213. data/app/models/infold/form_attachment_field.rb +0 -5
  214. data/app/models/infold/form_column.rb +0 -5
  215. data/app/models/infold/form_field.rb +0 -7
  216. data/app/models/infold/menu_item.rb +0 -45
  217. data/app/models/infold/model.rb +0 -40
  218. data/app/models/infold/model_association.rb +0 -51
  219. data/app/models/infold/model_column.rb +0 -127
  220. data/app/models/infold/project.rb +0 -29
  221. data/app/models/infold/schema_rb.rb +0 -178
  222. data/app/models/infold/search_condition.rb +0 -62
  223. data/app/models/infold/search_result_attachment_field.rb +0 -5
  224. data/app/models/infold/search_result_column.rb +0 -6
  225. data/app/models/infold/search_result_field.rb +0 -12
  226. data/app/models/infold/show_association.rb +0 -42
  227. data/app/models/infold/show_association_attachment_field.rb +0 -5
  228. data/app/models/infold/show_association_column.rb +0 -5
  229. data/app/models/infold/show_association_field.rb +0 -8
  230. data/app/models/infold/show_attachment_field.rb +0 -7
  231. data/app/models/infold/show_column.rb +0 -7
  232. data/app/models/infold/show_field.rb +0 -11
  233. data/app/validators/infold/ruby_code_validator.rb +0 -9
  234. data/app/views/infold/app_view_forms/_bulk_form.html.haml +0 -16
  235. data/app/views/infold/app_view_forms/_tab.html.haml +0 -12
  236. data/app/views/infold/app_view_forms/show.html.haml +0 -7
  237. data/app/views/infold/app_view_shows/_bulk_form.html.haml +0 -15
  238. data/app/views/infold/app_view_shows/_tab.html.haml +0 -12
  239. data/app/views/infold/app_view_shows/show.html.haml +0 -7
  240. data/app/views/infold/app_view_shows/update.turbo_stream.haml +0 -1
  241. data/app/views/infold/application/_flash.html.haml +0 -6
  242. data/app/views/infold/apps/_form.html.haml +0 -30
  243. data/app/views/infold/apps/_page_header.html.haml +0 -5
  244. data/app/views/infold/apps/_tab.html.haml +0 -13
  245. data/app/views/infold/apps/create.turbo_stream.haml +0 -3
  246. data/app/views/infold/apps/edit.html.haml +0 -6
  247. data/app/views/infold/apps/new.html.haml +0 -8
  248. data/app/views/infold/apps/update.turbo_stream.haml +0 -3
  249. data/app/views/infold/associations/_form.html.haml +0 -18
  250. data/app/views/infold/associations/edit.html.haml +0 -5
  251. data/app/views/infold/attachment_fields/_form.html.haml +0 -51
  252. data/app/views/infold/attachment_fields/edit.html.haml +0 -7
  253. data/app/views/infold/attachment_fields/form.turbo_stream.haml +0 -4
  254. data/app/views/infold/attachment_fields/index.html.haml +0 -28
  255. data/app/views/infold/attachment_fields/new.html.haml +0 -7
  256. data/app/views/infold/builds/create.turbo_stream.haml +0 -8
  257. data/app/views/infold/builds/new.html.haml +0 -23
  258. data/app/views/infold/columns/_bulk_form.html.haml +0 -18
  259. data/app/views/infold/columns/_row.html.haml +0 -26
  260. data/app/views/infold/columns/_setting.html.haml +0 -42
  261. data/app/views/infold/columns/bulk.turbo_stream.haml +0 -3
  262. data/app/views/infold/columns/edit.html.haml +0 -5
  263. data/app/views/infold/columns/index.html.haml +0 -9
  264. data/app/views/infold/columns/update.turbo_stream.haml +0 -8
  265. data/app/views/infold/csv_columns/_bulk_form.html.haml +0 -14
  266. data/app/views/infold/csv_columns/_row.html.haml +0 -10
  267. data/app/views/infold/csv_columns/bulk.turbo_stream.haml +0 -3
  268. data/app/views/infold/csv_columns/index.html.haml +0 -7
  269. data/app/views/infold/enums/_form.html.haml +0 -13
  270. data/app/views/infold/enums/_index.html.haml +0 -27
  271. data/app/views/infold/enums/index.html.haml +0 -5
  272. data/app/views/infold/form_association_attachment_fields/_form.html.haml +0 -13
  273. data/app/views/infold/form_association_columns/_form.html.haml +0 -20
  274. data/app/views/infold/form_associations/_bulk_form.html.haml +0 -16
  275. data/app/views/infold/form_associations/_form.html.haml +0 -19
  276. data/app/views/infold/form_associations/show.html.haml +0 -7
  277. data/app/views/infold/form_associations/update.turbo_stream.haml +0 -1
  278. data/app/views/infold/form_attachment_fields/_form.html.haml +0 -14
  279. data/app/views/infold/form_columns/_form.html.haml +0 -21
  280. data/app/views/infold/menu_directories/_item.html.haml +0 -20
  281. data/app/views/infold/menu_directories/create.turbo_stream.haml +0 -2
  282. data/app/views/infold/menu_directories/destroy.turbo_stream.haml +0 -5
  283. data/app/views/infold/menus/_app.html.haml +0 -10
  284. data/app/views/infold/menus/_items.html.haml +0 -7
  285. data/app/views/infold/menus/edit.html.haml +0 -23
  286. data/app/views/infold/menus/update.turbo_stream.haml +0 -3
  287. data/app/views/infold/models/_form.html.haml +0 -12
  288. data/app/views/infold/models/_tab.html.haml +0 -7
  289. data/app/views/infold/models/edit.html.haml +0 -9
  290. data/app/views/infold/models/update.turbo_stream.haml +0 -3
  291. data/app/views/infold/search_conditions/_bulk_form.html.haml +0 -24
  292. data/app/views/infold/search_conditions/_column_options.html.haml +0 -3
  293. data/app/views/infold/search_conditions/_form_kind_options.html.haml +0 -3
  294. data/app/views/infold/search_conditions/_row.html.haml +0 -31
  295. data/app/views/infold/search_conditions/_sign_options.html.haml +0 -3
  296. data/app/views/infold/search_conditions/_tab.html.haml +0 -12
  297. data/app/views/infold/search_conditions/bulk.turbo_stream.haml +0 -3
  298. data/app/views/infold/search_conditions/index.html.haml +0 -7
  299. data/app/views/infold/search_conditions/refresh_columns.turbo_stream.haml +0 -6
  300. data/app/views/infold/search_conditions/refresh_form_kinds.turbo_stream.haml +0 -4
  301. data/app/views/infold/search_conditions/refresh_signs.turbo_stream.haml +0 -2
  302. data/app/views/infold/search_result_attachment_fields/_form.html.haml +0 -12
  303. data/app/views/infold/search_result_columns/_form.html.haml +0 -12
  304. data/app/views/infold/search_result_fields/_bulk_form.html.haml +0 -23
  305. data/app/views/infold/search_result_fields/_row.html.haml +0 -12
  306. data/app/views/infold/search_result_fields/bulk.turbo_stream.haml +0 -3
  307. data/app/views/infold/search_result_fields/index.html.haml +0 -7
  308. data/app/views/infold/show_association_attachment_fields/_form.html.haml +0 -12
  309. data/app/views/infold/show_association_columns/_form.html.haml +0 -12
  310. data/app/views/infold/show_associations/_bulk_form.html.haml +0 -15
  311. data/app/views/infold/show_associations/_form.html.haml +0 -14
  312. data/app/views/infold/show_associations/show.html.haml +0 -7
  313. data/app/views/infold/show_associations/update.turbo_stream.haml +0 -1
  314. data/app/views/infold/show_attachment_fields/_form.html.haml +0 -12
  315. data/app/views/infold/show_columns/_form.html.haml +0 -12
  316. data/app/views/infold/sync_dbs/create.turbo_stream.haml +0 -1
  317. data/app/views/infold/sync_dbs/show.html.haml +0 -11
  318. data/app/views/layouts/infold/application.html.haml +0 -112
  319. data/config/database.yml +0 -11
  320. data/config/initializers/infold_assets.rb +0 -12
  321. data/config/initializers/infold_locale.rb +0 -1
  322. data/config/locales/infold/ar/app/en.yml +0 -6
  323. data/config/locales/infold/ar/app/ja.yml +0 -6
  324. data/config/locales/infold/ar/app_view/en.yml +0 -4
  325. data/config/locales/infold/ar/app_view/ja.yml +0 -4
  326. data/config/locales/infold/ar/app_view_form/en.yml +0 -10
  327. data/config/locales/infold/ar/app_view_form/ja.yml +0 -10
  328. data/config/locales/infold/ar/app_view_index/en.yml +0 -12
  329. data/config/locales/infold/ar/app_view_index/ja.yml +0 -12
  330. data/config/locales/infold/ar/app_view_modal/en.yml +0 -6
  331. data/config/locales/infold/ar/app_view_modal/ja.yml +0 -6
  332. data/config/locales/infold/ar/app_view_show/en.yml +0 -9
  333. data/config/locales/infold/ar/app_view_show/ja.yml +0 -9
  334. data/config/locales/infold/ar/csv_column/en.yml +0 -8
  335. data/config/locales/infold/ar/csv_column/ja.yml +0 -8
  336. data/config/locales/infold/ar/form_association_column/ja.yml +0 -15
  337. data/config/locales/infold/ar/form_column/ja.yml +0 -15
  338. data/config/locales/infold/ar/menu_item/ja.yml +0 -6
  339. data/config/locales/infold/ar/model/ja.yml +0 -11
  340. data/config/locales/infold/ar/model_association/en.yml +0 -6
  341. data/config/locales/infold/ar/model_association/ja.yml +0 -10
  342. data/config/locales/infold/ar/model_column/en.yml +0 -34
  343. data/config/locales/infold/ar/model_column/ja.yml +0 -34
  344. data/config/locales/infold/ar/search_condition/en.yml +0 -30
  345. data/config/locales/infold/ar/search_condition/ja.yml +0 -30
  346. data/config/locales/infold/ar/search_result_field/en.yml +0 -9
  347. data/config/locales/infold/ar/search_result_field/ja.yml +0 -9
  348. data/config/locales/infold/en.yml +0 -40
  349. data/config/locales/infold/ja.yml +0 -41
  350. data/config/routes.rb +0 -40
  351. data/db/infold_test.sqlite3 +0 -0
  352. data/db/migrate/20220419050641_create_infold_projects.rb +0 -9
  353. data/db/migrate/20220419051049_create_infold_models.rb +0 -15
  354. data/db/migrate/20220419051601_create_infold_columns.rb +0 -23
  355. data/db/migrate/20220419051718_create_infold_attachment_fields.rb +0 -15
  356. data/db/migrate/20220419052017_create_infold_model_associations.rb +0 -16
  357. data/db/migrate/20220419052154_create_infold_apps.rb +0 -10
  358. data/db/migrate/20220419052320_create_infold_app_views.rb +0 -14
  359. data/db/migrate/20220419052450_create_infold_search_conditions.rb +0 -14
  360. data/db/migrate/20220419052707_create_infold_search_result_fields.rb +0 -18
  361. data/db/migrate/20220419053338_create_infold_show_fields.rb +0 -18
  362. data/db/migrate/20220419053425_create_infold_show_association_fields.rb +0 -15
  363. data/db/migrate/20220419060937_create_infold_form_fields.rb +0 -19
  364. data/db/migrate/20220419061148_create_infold_form_association_fields.rb +0 -16
  365. data/db/migrate/20220419061725_create_infold_enums.rb +0 -16
  366. data/db/migrate/20220419062020_create_infold_menu_items.rb +0 -16
  367. data/db/migrate/20220419062119_create_infold_csv_columns.rb +0 -12
  368. data/db/schema.rb +0 -260
  369. data/lib/generators/infold/app/app_generator.rb +0 -134
  370. data/lib/generators/infold/app/templates/controller.rb.tt +0 -100
  371. data/lib/generators/infold/app/templates/search_form.rb.tt +0 -31
  372. data/lib/generators/infold/app/templates/views/_association_fields.haml.tt +0 -16
  373. data/lib/generators/infold/app/templates/views/_detail.haml.tt +0 -100
  374. data/lib/generators/infold/app/templates/views/_detail_modal_wrapper.haml.tt +0 -9
  375. data/lib/generators/infold/app/templates/views/_form.haml.tt +0 -66
  376. data/lib/generators/infold/app/templates/views/_index_row.haml.tt +0 -17
  377. data/lib/generators/infold/app/templates/views/_show_operation.haml.tt +0 -5
  378. data/lib/generators/infold/app/templates/views/edit+turbo_frame.haml.tt +0 -13
  379. data/lib/generators/infold/app/templates/views/edit.haml.tt +0 -10
  380. data/lib/generators/infold/app/templates/views/form.turbo_stream.haml.tt +0 -17
  381. data/lib/generators/infold/app/templates/views/index+turbo_frame.haml.tt +0 -43
  382. data/lib/generators/infold/app/templates/views/index.csv.ruby.tt +0 -18
  383. data/lib/generators/infold/app/templates/views/index.haml.tt +0 -49
  384. data/lib/generators/infold/app/templates/views/new+turbo_frame.haml.tt +0 -14
  385. data/lib/generators/infold/app/templates/views/new.haml.tt +0 -12
  386. data/lib/generators/infold/app/templates/views/show+turbo_frame.haml.tt +0 -4
  387. data/lib/generators/infold/app/templates/views/show.haml.tt +0 -9
  388. data/lib/generators/infold/install/install_generator.rb +0 -151
  389. data/lib/generators/infold/install/templates/app/components/admin/enum_badge_component.html.haml +0 -4
  390. data/lib/generators/infold/install/templates/app/components/admin/enum_badge_component.rb +0 -11
  391. data/lib/generators/infold/install/templates/app/components/admin/form/checkbox_fieldset_component.html.haml +0 -11
  392. data/lib/generators/infold/install/templates/app/components/admin/form/checkbox_fieldset_component.rb +0 -15
  393. data/lib/generators/infold/install/templates/app/components/admin/form/datetime_fieldset_component.html.haml +0 -20
  394. data/lib/generators/infold/install/templates/app/components/admin/form/datetime_fieldset_component.rb +0 -13
  395. data/lib/generators/infold/install/templates/app/components/admin/form/file_upload_component.rb +0 -12
  396. data/lib/generators/infold/install/templates/app/components/admin/form/input_fieldset_component.html.haml +0 -14
  397. data/lib/generators/infold/install/templates/app/components/admin/form/input_fieldset_component.rb +0 -24
  398. data/lib/generators/infold/install/templates/app/components/admin/form/radio_fieldset_component.html.haml +0 -11
  399. data/lib/generators/infold/install/templates/app/components/admin/form/radio_fieldset_component.rb +0 -15
  400. data/lib/generators/infold/install/templates/app/components/admin/form/relation_fieldset_component.html.haml +0 -17
  401. data/lib/generators/infold/install/templates/app/components/admin/form/relation_fieldset_component.rb +0 -21
  402. data/lib/generators/infold/install/templates/app/components/admin/form/select_fieldset_component.html.haml +0 -7
  403. data/lib/generators/infold/install/templates/app/components/admin/form/select_fieldset_component.rb +0 -16
  404. data/lib/generators/infold/install/templates/app/components/admin/form/switch_element_component.html.haml +0 -4
  405. data/lib/generators/infold/install/templates/app/components/admin/form/switch_element_component.rb +0 -12
  406. data/lib/generators/infold/install/templates/app/components/admin/remote_modal_component.rb +0 -21
  407. data/lib/generators/infold/install/templates/app/components/admin/sortable_th_component.html.haml +0 -4
  408. data/lib/generators/infold/install/templates/app/components/admin/sortable_th_component.rb +0 -27
  409. data/lib/generators/infold/install/templates/app/controllers/admin/admin_users_controller.rb +0 -62
  410. data/lib/generators/infold/install/templates/app/helpers/admin_helper.rb +0 -37
  411. data/lib/generators/infold/install/templates/app/views/admin/admin_users/_detail.html.haml +0 -14
  412. data/lib/generators/infold/install/templates/app/views/admin/admin_users/_form.html.haml +0 -6
  413. data/lib/generators/infold/install/templates/app/views/admin/admin_users/_index_row.html.haml +0 -9
  414. data/lib/generators/infold/install/templates/app/views/admin/admin_users/_show_operation.html.haml +0 -4
  415. data/lib/generators/infold/install/templates/app/views/admin/admin_users/edit.html+turbo_frame.haml +0 -11
  416. data/lib/generators/infold/install/templates/app/views/admin/admin_users/edit.html.haml +0 -10
  417. data/lib/generators/infold/install/templates/app/views/admin/admin_users/form.turbo_stream.haml +0 -4
  418. data/lib/generators/infold/install/templates/app/views/admin/admin_users/index.html.haml +0 -21
  419. data/lib/generators/infold/install/templates/app/views/admin/admin_users/new.html+turbo_frame.haml +0 -11
  420. data/lib/generators/infold/install/templates/app/views/admin/admin_users/new.html.haml +0 -10
  421. data/lib/generators/infold/install/templates/app/views/admin/admin_users/show.html+turbo_frame.haml +0 -11
  422. data/lib/generators/infold/install/templates/app/views/admin/admin_users/show.html.haml +0 -8
  423. data/lib/generators/infold/install/templates/app/views/admin/common/_header_menu.html.haml +0 -0
  424. data/lib/generators/infold/install/templates/javascript/admin/controllers/application.js +0 -9
  425. data/lib/generators/infold/install/templates/javascript/admin/controllers/flash_controller.js +0 -10
  426. data/lib/generators/infold/install/templates/javascript/admin/stylesheets/custom.css +0 -290
  427. data/lib/generators/infold/install/templates/javascript/admin/stylesheets/custom.css.map +0 -1
  428. data/lib/generators/infold/install/templates/javascript/esbuild/admin.js +0 -10
  429. data/lib/generators/infold/install/templates/javascript/webpacker/admin.js +0 -9
  430. data/lib/generators/infold/model/model_generator.rb +0 -50
  431. data/lib/generators/infold/model/templates/decorator.rb.tt +0 -10
  432. data/lib/generators/infold/model/templates/model.rb.tt +0 -59
  433. data/lib/generators/infold/project/project_generator.rb +0 -66
  434. data/lib/generators/infold/project/templates/_header_menu.haml.tt +0 -17
  435. data/lib/generators/infold/project/templates/locales/form.yml.tt +0 -11
  436. data/lib/generators/infold/project/templates/locales/model.yml.tt +0 -43
  437. data/lib/generators/infold/project/templates/relation_fieldset_component.rb.tt +0 -30
  438. data/lib/infold/engine.rb +0 -15
@@ -0,0 +1,108 @@
1
+ require 'infold/field'
2
+
3
+ module Infold
4
+ class FieldGroup
5
+ include Enumerable
6
+
7
+ attr_reader :fields
8
+ attr_writer :has_association_model
9
+
10
+ def initialize(table=nil)
11
+ init_fields(table)
12
+ end
13
+
14
+ def each
15
+ @fields.each { |field| yield field }
16
+ end
17
+
18
+ def find_or_initialize_field(field_name)
19
+ find { |field| field.name == field_name || field.association&.name == field_name } ||
20
+ (@fields << Field.new(field_name)).last
21
+ end
22
+
23
+ def add_field(name, type=nil)
24
+ (@fields << Field.new(name, type&.to_sym)).last
25
+ end
26
+
27
+ def datetime_fields
28
+ select{ |f| f.type.to_s == 'datetime' && !%w(created_at updated_at).include?(f.name) }
29
+ end
30
+
31
+ def association_fields
32
+ select { |f| f.association.present? }
33
+ end
34
+
35
+ def associations
36
+ association_fields.map(&:association)
37
+ end
38
+
39
+ def active_storage_fields
40
+ select { |f| f.active_storage.present? }
41
+ end
42
+
43
+ def validation_fields
44
+ select { |f| f.validation.present? }
45
+ end
46
+
47
+ def enum_fields
48
+ select { |f| f.enum.present? }
49
+ end
50
+
51
+ def decorator_fields
52
+ decorator_fields = select { |f| f.decorator.present? }.to_a
53
+ decorator_fields + select { |field| %i(datetime date boolean).include?(field.type) }.each do |field|
54
+ field.build_decorator(kind: field.type.to_sym)
55
+ end.to_a
56
+ end
57
+
58
+ def condition_fields(kind=nil)
59
+ case kind.to_s
60
+ when 'index'
61
+ select { |f| f.search_conditions.find(&:in_index?).present? }
62
+ when 'association_search'
63
+ select { |f| f.search_conditions.find(&:in_association_search?).present? }
64
+ else
65
+ select { |f| f.search_conditions.present? }
66
+ end
67
+ end
68
+
69
+ def conditions(kind=nil)
70
+ conditions = condition_fields(kind).map(&:search_conditions).flatten
71
+ if kind.to_s == 'index'
72
+ conditions.sort_by(&:index_seq)
73
+ elsif kind.to_s == 'association_search'
74
+ conditions.sort_by(&:association_seq)
75
+ else
76
+ conditions
77
+ end
78
+ end
79
+
80
+ def form_fields
81
+ select { |f| f.form_element.present? }.sort_by { |f| f.form_element.seq }
82
+ end
83
+
84
+ def index_list_fields
85
+ select { |f| f.in_index_list? }.sort_by { |f| f.index_list_seq }
86
+ end
87
+
88
+ def csv_fields
89
+ select { |f| f.in_csv? }.sort_by { |f| f.csv_seq }
90
+ end
91
+
92
+ def show_fields
93
+ select { |f| f.show_element.present? }.sort_by { |f| f.show_element.seq }
94
+ end
95
+
96
+ def association_search_list_fields
97
+ select { |f| f.in_association_search_list? }.sort_by { |f| f.association_search_list_seq }
98
+ end
99
+
100
+ def has_association_model?; @has_association_model end
101
+
102
+ private
103
+
104
+ def init_fields(table)
105
+ @fields = Array(table&.columns&.map { |column| Field.new(column.name, column.type&.to_sym) })
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,38 @@
1
+ module Infold
2
+ class ActiveStorage
3
+ include ActiveModel::Model
4
+
5
+ attr_reader :field
6
+ attr_accessor :kind,
7
+ :thumb
8
+
9
+ def initialize(field, **attrs)
10
+ @field = field
11
+ super(attrs)
12
+ end
13
+
14
+ def build_thumb(**attrs)
15
+ @thumb = ActiveStorageThumb.new(**attrs)
16
+ end
17
+
18
+ def kind_image?
19
+ kind.to_s == 'image'
20
+ end
21
+
22
+ def kind_file?
23
+ !kind_image?
24
+ end
25
+
26
+ def thumb?
27
+ @thumb.present?
28
+ end
29
+
30
+ class ActiveStorageThumb
31
+ include ActiveModel::Model
32
+
33
+ attr_accessor :kind,
34
+ :width,
35
+ :height
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,81 @@
1
+ require 'forwardable'
2
+
3
+ module Infold
4
+ class Association
5
+ include ActiveModel::Model
6
+ extend Forwardable
7
+
8
+ attr_reader :field,
9
+ :kind,
10
+ :name,
11
+ :table,
12
+ :field_group
13
+
14
+ attr_writer :name_field
15
+
16
+ attr_accessor :class_name,
17
+ :foreign_key,
18
+ :dependent
19
+
20
+ # [TODO] resourceとの共通化(associationはresourceである)
21
+ delegate association_fields: :@field_group
22
+ delegate associations: :@field_group
23
+ delegate active_storage_fields: :@field_group
24
+ delegate validation_fields: :@field_group
25
+ delegate datetime_fields: :@field_group
26
+ delegate enum_fields: :@field_group
27
+ delegate decorator_fields: :@field_group
28
+ delegate condition_fields: :@field_group
29
+ delegate conditions: :@field_group
30
+ delegate form_fields: :@field_group
31
+ delegate index_list_fields: :@field_group
32
+ delegate show_fields: :@field_group
33
+ delegate association_search_list_fields: :@field_group
34
+
35
+ def initialize(field, kind:, table:, field_group: [], name: nil, **attrs)
36
+ @field = field
37
+ @kind = kind
38
+ @table = table
39
+ @field_group = field_group
40
+ @name = name || field.name
41
+ super(**attrs)
42
+ end
43
+
44
+ def belongs_to?
45
+ kind.to_sym == :belongs_to
46
+ end
47
+
48
+ def has_many?
49
+ kind.to_sym == :has_many
50
+ end
51
+
52
+ def has_one?
53
+ kind.to_sym == :has_one
54
+ end
55
+
56
+ def model_name(*attr)
57
+ name = class_name.presence || self.name.singularize.camelize
58
+ name = name.underscore if attr.include?(:snake)
59
+ name = name.camelize if attr.include?(:camel)
60
+ name = name.singularize if attr.include?(:single)
61
+ name = name.pluralize if attr.include?(:multi)
62
+ name
63
+ end
64
+
65
+ def find_or_initialize_field(field_name)
66
+ field_group.find_or_initialize_field(field_name)
67
+ end
68
+
69
+ def search_path
70
+ "admin_#{model_name(:multi, :snake)}_path"
71
+ end
72
+
73
+ def belongs_to_show_path(object)
74
+ "admin_#{model_name( :snake)}_path(#{object})"
75
+ end
76
+
77
+ def name_field
78
+ @name_field.presence || 'id'
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,60 @@
1
+ module Infold
2
+ class Condition
3
+ include ActiveModel::Model
4
+
5
+ attr_reader :field
6
+ attr_writer :sign
7
+ attr_accessor :index_form_kind,
8
+ :index_association_name,
9
+ :index_seq,
10
+ :association_search_form_kind,
11
+ :association_seq
12
+
13
+ def initialize(field, **attrs)
14
+ @field = field
15
+ super(**attrs)
16
+ end
17
+
18
+ def sign
19
+ (@sign.presence || :eq).to_sym
20
+ end
21
+
22
+ def scope
23
+ "#{field.name}_#{sign}"
24
+ end
25
+
26
+ def in_index?
27
+ index_form_kind.present?
28
+ end
29
+
30
+ def in_association_search?
31
+ association_search_form_kind.present?
32
+ end
33
+
34
+ def form_kind(view)
35
+ # indexとassociation_searchでform_kindが異なる場合に対応
36
+ _form_kind = (view == :index ? index_form_kind : association_search_form_kind).to_s
37
+ if _form_kind == 'association_search' && field.association&.belongs_to?
38
+ :association_search
39
+ elsif _form_kind == 'select'
40
+ :select
41
+ elsif sign == :any && field.enum.present?
42
+ :checkbox
43
+ elsif field.type == :boolean || _form_kind == 'switch'
44
+ :switch
45
+ else
46
+ :text
47
+ end
48
+ end
49
+
50
+ def sign_label
51
+ case sign
52
+ when :lteq then 'or less'
53
+ when :gteq then 'or more'
54
+ when :full_like then 'like %...%'
55
+ when :start_with then 'like ...%'
56
+ else '='
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,30 @@
1
+ module Infold
2
+ class Decorator
3
+ include ActiveModel::Model
4
+
5
+ attr_reader :field
6
+ attr_writer :kind
7
+ attr_accessor :append,
8
+ :prepend,
9
+ :digit
10
+
11
+ def initialize(field, **attrs)
12
+ @field = field
13
+ super(**attrs)
14
+ end
15
+
16
+ def kind
17
+ if @kind.blank?
18
+ if field.number?
19
+ :number
20
+ elsif %i(date datetime boolean).include?(field.type)
21
+ field.type
22
+ else
23
+ :string
24
+ end
25
+ else
26
+ @kind.to_sym
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,14 @@
1
+ module Infold
2
+ class DefaultOrder
3
+
4
+ attr_reader :resource,
5
+ :field,
6
+ :order_kind
7
+
8
+ def initialize(resource, field, order_kind)
9
+ @resource = resource
10
+ @field = field
11
+ @order_kind = order_kind
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,30 @@
1
+ module Infold
2
+ class Enum
3
+ include ActiveModel::Model
4
+
5
+ attr_reader :field,
6
+ :elements
7
+
8
+ def initialize(field)
9
+ @field = field
10
+ @elements = []
11
+ end
12
+
13
+ def add_elements(**attrs)
14
+ (@elements << EnumElement.new(**attrs)).last
15
+ end
16
+
17
+ def has_color?
18
+ elements.any? { |e| e.color.present? }
19
+ end
20
+
21
+ class EnumElement
22
+ include ActiveModel::Model
23
+
24
+ attr_accessor :key,
25
+ :value,
26
+ :color
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,56 @@
1
+ module Infold
2
+ class FormElement
3
+ include ActiveModel::Model
4
+
5
+ attr_reader :field,
6
+ :association_fields
7
+
8
+ attr_accessor :association,
9
+ :in_association,
10
+ :seq
11
+
12
+ attr_writer :form_kind
13
+
14
+ def initialize(field, **attrs)
15
+ @field = field
16
+ @association_fields = []
17
+ super(**attrs)
18
+ end
19
+
20
+ def add_association_fields(field, **attrs)
21
+ field.build_form_element(in_association: true, **attrs)
22
+ @association_fields << field
23
+ field
24
+ end
25
+
26
+ def kind_has_association?
27
+ field.association && !field.association.belongs_to? || @form_kind.to_s == 'association'
28
+ end
29
+
30
+ def kind_file?
31
+ field.active_storage.present? || @form_kind.to_s == 'file'
32
+ end
33
+
34
+ def kind_datetime?
35
+ field.type.to_s == 'datetime'
36
+ end
37
+
38
+ def form_kind
39
+ if @form_kind == 'association_search'
40
+ if field.association&.belongs_to?
41
+ :association_search
42
+ else
43
+ :text
44
+ end
45
+ elsif kind_datetime?
46
+ :datetime
47
+ elsif kind_file?
48
+ :file
49
+ elsif field.type == :boolean
50
+ :switch
51
+ else
52
+ (@form_kind.presence || :text).to_sym
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,26 @@
1
+ module Infold
2
+ class ShowElement
3
+ include ActiveModel::Model
4
+
5
+ attr_reader :field,
6
+ :association_fields
7
+
8
+ attr_accessor :seq,
9
+ :association
10
+
11
+ def initialize(field, **attrs)
12
+ @field = field
13
+ @association_fields = []
14
+ super(**attrs)
15
+ end
16
+
17
+ def add_association_fields(field, **attrs)
18
+ field.build_show_element(**attrs)
19
+ @association_fields << field
20
+ end
21
+
22
+ def kind_association?
23
+ field.association.present?
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,38 @@
1
+ require "active_support/core_ext/hash/indifferent_access"
2
+
3
+ module Infold
4
+ class Validation
5
+ include ActiveModel::Model
6
+
7
+ attr_reader :field
8
+ attr_accessor :conditions
9
+
10
+ def initialize(field)
11
+ @field = field
12
+ self.conditions = []
13
+ end
14
+
15
+ def add_conditions(condition, options)
16
+ self.conditions << ValidateCondition.new(condition, options)
17
+ end
18
+
19
+ def has_presence?
20
+ conditions.find { |c| c.condition == :presence }
21
+ end
22
+
23
+ class ValidateCondition
24
+ include ActiveModel::Model
25
+
26
+ attr_accessor :options
27
+
28
+ def initialize(condition, options)
29
+ @condition = condition
30
+ @options = options&.with_indifferent_access
31
+ end
32
+
33
+ def condition
34
+ @condition.to_sym
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,4 @@
1
+ module Infold
2
+ class Railtie < ::Rails::Railtie
3
+ end
4
+ end
@@ -0,0 +1,32 @@
1
+ require 'forwardable'
2
+
3
+ module Infold
4
+ class Resource
5
+ extend Forwardable
6
+
7
+ attr_reader :name
8
+
9
+ attr_accessor :app_title,
10
+ :field_group,
11
+ :default_order
12
+
13
+ def initialize(name)
14
+ @name = name
15
+ end
16
+
17
+ delegate association_fields: :@field_group
18
+ delegate associations: :@field_group
19
+ delegate active_storage_fields: :@field_group
20
+ delegate validation_fields: :@field_group
21
+ delegate datetime_fields: :@field_group
22
+ delegate enum_fields: :@field_group
23
+ delegate decorator_fields: :@field_group
24
+ delegate condition_fields: :@field_group
25
+ delegate conditions: :@field_group
26
+ delegate form_fields: :@field_group
27
+ delegate index_list_fields: :@field_group
28
+ delegate csv_fields: :@field_group
29
+ delegate show_fields: :@field_group
30
+ delegate association_search_list_fields: :@field_group
31
+ end
32
+ end
@@ -0,0 +1,25 @@
1
+ class Table
2
+
3
+ attr_accessor :name,
4
+ :columns
5
+
6
+ Column = Struct.new(:name, :type)
7
+
8
+ def initialize(name)
9
+ self.name = name
10
+ self.columns = []
11
+ end
12
+
13
+ def model_name
14
+ name.singularize.camelize
15
+ end
16
+
17
+ def add_columns(name, type)
18
+ self.columns << Column.new(name, type)
19
+ end
20
+
21
+ def datetime_columns
22
+ _columns = columns.select{ |c| c.type == 'datetime' && !%w(created_at updated_at).include?(c.name) }
23
+ _columns.map(&:name)
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module Infold
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -0,0 +1,45 @@
1
+ module Infold
2
+ class BaseWriter
3
+
4
+ attr_reader :resource
5
+
6
+ def initialize(resource)
7
+ @resource = resource
8
+ end
9
+
10
+ def indent(code, size, first_row: false)
11
+ return unless code
12
+ indent = ' ' * size
13
+ code = code.each_line.map { |line| line.blank? ? line : "#{indent}#{line}" }.join
14
+ code.sub!(indent, '') unless first_row
15
+ code
16
+ end
17
+
18
+ def index_path
19
+ "admin_#{resource_name(:snake, :multi)}_path"
20
+ end
21
+
22
+ def new_path
23
+ "new_admin_#{resource_name(:snake)}_path"
24
+ end
25
+
26
+ def show_path(object)
27
+ "admin_#{resource_name(:snake)}_path(#{object})"
28
+ end
29
+
30
+ def edit_path(object)
31
+ "edit_admin_#{resource_name(:snake)}_path(#{object})"
32
+ end
33
+
34
+ def resource_name(*attr)
35
+ name = @resource.name.singularize.camelize
36
+ return name if attr.include?(:model)
37
+ return name.pluralize.underscore if attr.include?(:table)
38
+ name = name.underscore if attr.include?(:snake)
39
+ name = name.camelize if attr.include?(:camel)
40
+ name = name.singularize if attr.include?(:single)
41
+ name = name.pluralize if attr.include?(:multi)
42
+ name
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,69 @@
1
+ require 'infold/writers/base_writer'
2
+
3
+ module Infold
4
+ class ControllerWriter < BaseWriter
5
+
6
+ attr_reader :app_title
7
+
8
+ def initialize(resource)
9
+ @resource = resource
10
+ end
11
+
12
+ def association_build_code(if_blank: false)
13
+ codes = []
14
+ @resource.association_fields&.select { |af| !af.association.belongs_to? && af.form_element.present? } &.each do |association_field|
15
+ codes <<
16
+ if association_field.association.has_one?
17
+ "@#{resource_name(:snake)}.build_#{association_field.association.name}"
18
+ else
19
+ "@#{resource_name(:snake)}.#{association_field.association.name}.build"
20
+ end
21
+ end
22
+ indent(codes.join("\n"), 3) if codes.present?
23
+ end
24
+
25
+ def search_params_code
26
+ fields = []
27
+ any_fields = []
28
+ @resource.conditions.each do |condition|
29
+ if condition.sign == :any
30
+ any_fields << "[TAB]#{condition.scope}: []"
31
+ else
32
+ fields << "[TAB]:#{condition.scope}"
33
+ end
34
+ end
35
+ fields += %w([TAB]:sort_field [TAB]:sort_kind)
36
+ code = "params[:search]&.permit(\n" + (fields + any_fields).uniq.join(",\n") + "\n)"
37
+ indent(code, 3) if fields.present?
38
+ end
39
+
40
+ def post_params_code
41
+ fields = post_params_fields(@resource.form_fields)
42
+ fields = fields.join(",\n") if fields.present?
43
+ code = "params.require(:admin_#{resource_name(:snake)}).permit(\n" + fields.to_s + "\n)"
44
+ indent(code, 3) if fields.present?
45
+ end
46
+
47
+ private
48
+
49
+ def post_params_fields(form_fields)
50
+ fields = []
51
+ form_fields&.sort_by{ |field| field.form_element.kind_has_association? ? 9 : 0 }&.each do |form_field|
52
+ form_element = form_field.form_element
53
+ if form_element.kind_file?
54
+ fields += %W(:#{form_field.name} :remove_#{form_field.name})
55
+ elsif form_element.kind_has_association?
56
+ association_fields = post_params_fields(form_element.association_fields)
57
+ fields << "#{form_field.name}_attributes: [\n[TAB][TAB]:id,\n[TAB][TAB]:_destroy,\n[TAB]" +
58
+ association_fields.join(",\n[TAB]") + "\n[TAB]]"
59
+ elsif form_element.kind_datetime?
60
+ # datetimeはdateとtimeに分ける
61
+ fields += %W(:#{form_field.name}_date :#{form_field.name}_time)
62
+ else
63
+ fields << ":#{form_field.name}"
64
+ end
65
+ end
66
+ fields.map{ |f| "[TAB]#{f}"}
67
+ end
68
+ end
69
+ end