infold 0.1.1 → 0.2.1

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 +418 -20
  3. data/Rakefile +0 -5
  4. data/lib/generators/infold/controller_generator.rb +52 -0
  5. data/lib/generators/infold/decorator_generator.rb +32 -0
  6. data/lib/generators/infold/install_generator.rb +98 -0
  7. data/lib/generators/infold/model_generator.rb +33 -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 +24 -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 +4 -3
  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 +1 -0
  79. data/lib/generators/infold/templates/model.rb.tt +34 -0
  80. data/lib/generators/infold/templates/resource.yml.tt +94 -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 +52 -0
  95. data/lib/generators/infold/views/index_generator.rb +38 -0
  96. data/lib/generators/infold/views/show_generator.rb +34 -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 +29 -0
  100. data/lib/infold/field.rb +104 -0
  101. data/lib/infold/field_group.rb +118 -0
  102. data/lib/infold/property/active_storage.rb +38 -0
  103. data/lib/infold/property/association.rb +85 -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 +62 -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 +253 -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,29 @@
1
+ require 'infold/table'
2
+
3
+ module Infold
4
+ class DbSchema
5
+
6
+ def initialize(content=nil)
7
+ @tables = []
8
+ return unless content
9
+ content.split("\n").each.each do |row|
10
+ row = row.strip
11
+ if row.start_with?('create_table')
12
+ table_name = row.split('"').second.strip
13
+ table = Table.new(table_name)
14
+ @tables << table
15
+ table.add_columns('id', 'bigint') unless row.include?('id: false')
16
+ elsif @tables.present? && row.start_with?('t.')
17
+ table = @tables.last
18
+ name = row.split('"').second.strip
19
+ type = row.match(/^t\..*? /).to_s.gsub('t.', '').strip
20
+ table.add_columns(name, type)
21
+ end
22
+ end
23
+ end
24
+
25
+ def table(name)
26
+ @tables.find { |t| t.name.underscore.singularize == name.underscore.singularize }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,104 @@
1
+ require 'infold/property/validation'
2
+ require 'infold/property/active_storage'
3
+ require 'infold/property/condition'
4
+ require 'infold/property/association'
5
+ require 'infold/property/enum'
6
+ require 'infold/property/show_element'
7
+ require 'infold/property/form_element'
8
+ require 'infold/property/decorator'
9
+
10
+ module Infold
11
+ class Field
12
+ attr_reader :type,
13
+ :validation,
14
+ :enum,
15
+ :active_storage,
16
+ :form_element,
17
+ :show_element,
18
+ :decorator,
19
+ :search_conditions,
20
+ :association
21
+
22
+ attr_accessor :index_list_seq,
23
+ :csv_seq,
24
+ :association_search_list_seq
25
+
26
+ def initialize(name, type=nil)
27
+ @name = name
28
+ @type = type&.to_sym
29
+ @search_conditions = []
30
+ end
31
+
32
+ def name(*attr)
33
+ name = @name
34
+ name = name.underscore if attr.include?(:snake)
35
+ name = name.camelize if attr.include?(:camel)
36
+ name = name.singularize if attr.include?(:single)
37
+ name = name.pluralize if attr.include?(:multi)
38
+ name
39
+ end
40
+
41
+ def build_active_storage(**attrs)
42
+ @active_storage = ActiveStorage.new(self, **attrs)
43
+ end
44
+
45
+ def build_association(**attrs)
46
+ @association = Association.new(self, **attrs)
47
+ end
48
+
49
+ def build_enum
50
+ @enum = Enum.new(self)
51
+ end
52
+
53
+ def build_show_element(**attrs)
54
+ @show_element = ShowElement.new(self, **attrs)
55
+ end
56
+
57
+ def build_form_element(**attrs)
58
+ @form_element = FormElement.new(self, **attrs)
59
+ end
60
+
61
+ def build_decorator(**attrs)
62
+ @decorator = Decorator.new(self, **attrs)
63
+ end
64
+
65
+ def enum?; @enum.present? end
66
+ def decorator?; @decorator.present? end
67
+ def association?; @association.present? end
68
+ def validation?; @validation.present? end
69
+ def active_storage?; @active_storage.present? end
70
+ def form_element?; @form_element.present? end
71
+
72
+ def add_validation(condition, options = {})
73
+ @validation ||= Validation.new(self)
74
+ @validation.add_conditions(condition, options)
75
+ end
76
+
77
+ def add_search_condition(view_kind, sign:, form_kind:, seq: 0, association_name: nil)
78
+ form_kind = 'text' if form_kind.blank?
79
+ condition = @search_conditions.find{ |sc| sc.sign == sign.to_sym }
80
+ condition ||= (@search_conditions << Condition.new(self, sign: sign)).last
81
+ if view_kind == :index
82
+ condition.index_form_kind = form_kind
83
+ condition.index_seq = seq
84
+ else
85
+ condition.association_search_form_kind = form_kind
86
+ condition.association_seq = seq
87
+ end
88
+ condition.index_association_name = association_name
89
+ condition
90
+ end
91
+
92
+ def datepicker?
93
+ %w(date datetime).include?(type.to_s)
94
+ end
95
+
96
+ def number?
97
+ %w(integer float decimal).include?(type.to_s)
98
+ end
99
+
100
+ def in_index_list?; index_list_seq.present? end
101
+ def in_csv?; csv_seq.present? end
102
+ def in_association_search_list?; association_search_list_seq.present? end
103
+ end
104
+ end
@@ -0,0 +1,118 @@
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.association&.name == field_name || field.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
+ fields =
60
+ case kind.to_s
61
+ when 'index'
62
+ select { |f| f.search_conditions.find(&:in_index?).present? }
63
+ when 'association_search'
64
+ select { |f| f.search_conditions.find(&:in_association_search?).present? }
65
+ else
66
+ select { |f| f.search_conditions.present? }
67
+ end
68
+ if fields.blank?
69
+ # 条件が未設定の場合、idを対象とする
70
+ id_field = find_or_initialize_field(:id)
71
+ id_field.add_search_condition(kind || :index,
72
+ sign: 'eq',
73
+ form_kind: :text)
74
+ fields = [id_field]
75
+ end
76
+ fields
77
+ end
78
+
79
+ def conditions(kind=nil)
80
+ conditions = condition_fields(kind).map(&:search_conditions).flatten
81
+ if kind.to_s == 'index'
82
+ conditions.sort_by(&:index_seq)
83
+ elsif kind.to_s == 'association_search'
84
+ conditions.sort_by(&:association_seq)
85
+ else
86
+ conditions
87
+ end
88
+ end
89
+
90
+ def form_fields
91
+ select { |f| f.form_element.present? }.sort_by { |f| f.form_element.seq }
92
+ end
93
+
94
+ def index_list_fields
95
+ select { |f| f.in_index_list? }.sort_by { |f| f.index_list_seq }
96
+ end
97
+
98
+ def csv_fields
99
+ select { |f| f.in_csv? }.sort_by { |f| f.csv_seq }
100
+ end
101
+
102
+ def show_fields
103
+ select { |f| f.show_element.present? }.sort_by { |f| f.show_element.seq }
104
+ end
105
+
106
+ def association_search_list_fields
107
+ select { |f| f.in_association_search_list? }.sort_by { |f| f.association_search_list_seq }
108
+ end
109
+
110
+ def has_association_model?; @has_association_model end
111
+
112
+ private
113
+
114
+ def init_fields(table)
115
+ @fields = Array(table&.columns&.map { |column| Field.new(column.name, column.type&.to_sym) })
116
+ end
117
+ end
118
+ 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,85 @@
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 has_child?
57
+ !belongs_to?
58
+ end
59
+
60
+ def model_name(*attr)
61
+ name = class_name.presence || self.name.singularize.camelize
62
+ name = name.underscore if attr.include?(:snake)
63
+ name = name.camelize if attr.include?(:camel)
64
+ name = name.singularize if attr.include?(:single)
65
+ name = name.pluralize if attr.include?(:multi)
66
+ name
67
+ end
68
+
69
+ def find_or_initialize_field(field_name)
70
+ field_group.find_or_initialize_field(field_name)
71
+ end
72
+
73
+ def search_path
74
+ "admin_#{model_name(:multi, :snake)}_path"
75
+ end
76
+
77
+ def belongs_to_show_path(object)
78
+ "admin_#{model_name( :snake)}_path(#{object})"
79
+ end
80
+
81
+ def name_field
82
+ @name_field.presence || 'id'
83
+ end
84
+ end
85
+ 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,62 @@
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.to_s == 'association_search'
40
+ if field.association&.belongs_to?
41
+ :association_search
42
+ else
43
+ :text
44
+ end
45
+ elsif @form_kind.to_s == 'select'
46
+ if field.association&.belongs_to? || field.enum.present?
47
+ :select
48
+ else
49
+ :text
50
+ end
51
+ elsif kind_datetime?
52
+ :datetime
53
+ elsif kind_file?
54
+ :file
55
+ elsif field.type == :boolean
56
+ :switch
57
+ else
58
+ (@form_kind.presence || :text).to_sym
59
+ end
60
+ end
61
+ end
62
+ 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