mini-max-mod 0.0.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 (213) hide show
  1. checksums.yaml +7 -0
  2. data/administrate-1.0.0/Rakefile +30 -0
  3. data/administrate-1.0.0/app/assets/builds/administrate/application.css +2614 -0
  4. data/administrate-1.0.0/app/assets/builds/administrate/application.css.map +1 -0
  5. data/administrate-1.0.0/app/assets/builds/administrate/application.js +31661 -0
  6. data/administrate-1.0.0/app/assets/builds/administrate/application.js.map +7 -0
  7. data/administrate-1.0.0/app/assets/builds/administrate-internal/docs.css +102 -0
  8. data/administrate-1.0.0/app/assets/builds/administrate-internal/docs.css.map +1 -0
  9. data/administrate-1.0.0/app/assets/config/administrate_manifest.js +2 -0
  10. data/administrate-1.0.0/app/assets/javascripts/administrate/add_jquery.js +4 -0
  11. data/administrate-1.0.0/app/assets/javascripts/administrate/application.js +9 -0
  12. data/administrate-1.0.0/app/assets/javascripts/administrate/controllers/application.js +9 -0
  13. data/administrate-1.0.0/app/assets/javascripts/administrate/controllers/index.js +9 -0
  14. data/administrate-1.0.0/app/assets/javascripts/administrate/controllers/select_controller.js +25 -0
  15. data/administrate-1.0.0/app/assets/javascripts/administrate/controllers/table_controller.js +23 -0
  16. data/administrate-1.0.0/app/assets/javascripts/administrate/controllers/tooltip_controller.js +24 -0
  17. data/administrate-1.0.0/app/assets/javascripts/administrate/vendor/css-anchor-positioning.js +9310 -0
  18. data/administrate-1.0.0/app/assets/stylesheets/administrate/application.scss +29 -0
  19. data/administrate-1.0.0/app/assets/stylesheets/administrate/base/_forms.scss +107 -0
  20. data/administrate-1.0.0/app/assets/stylesheets/administrate/base/_layout.scss +25 -0
  21. data/administrate-1.0.0/app/assets/stylesheets/administrate/base/_lists.scss +19 -0
  22. data/administrate-1.0.0/app/assets/stylesheets/administrate/base/_tables.scss +58 -0
  23. data/administrate-1.0.0/app/assets/stylesheets/administrate/base/_typography.scss +59 -0
  24. data/administrate-1.0.0/app/assets/stylesheets/administrate/components/_app-container.scss +9 -0
  25. data/administrate-1.0.0/app/assets/stylesheets/administrate/components/_attributes.scss +28 -0
  26. data/administrate-1.0.0/app/assets/stylesheets/administrate/components/_buttons.scss +88 -0
  27. data/administrate-1.0.0/app/assets/stylesheets/administrate/components/_cells.scss +54 -0
  28. data/administrate-1.0.0/app/assets/stylesheets/administrate/components/_field-unit.scss +56 -0
  29. data/administrate-1.0.0/app/assets/stylesheets/administrate/components/_flashes.scss +20 -0
  30. data/administrate-1.0.0/app/assets/stylesheets/administrate/components/_form-actions.scss +3 -0
  31. data/administrate-1.0.0/app/assets/stylesheets/administrate/components/_main-content.scss +30 -0
  32. data/administrate-1.0.0/app/assets/stylesheets/administrate/components/_navigation.scss +32 -0
  33. data/administrate-1.0.0/app/assets/stylesheets/administrate/components/_pagination.scss +18 -0
  34. data/administrate-1.0.0/app/assets/stylesheets/administrate/components/_search.scss +87 -0
  35. data/administrate-1.0.0/app/assets/stylesheets/administrate/library/_clearfix.scss +7 -0
  36. data/administrate-1.0.0/app/assets/stylesheets/administrate/library/_data-label.scss +8 -0
  37. data/administrate-1.0.0/app/assets/stylesheets/administrate/library/_variables.scss +69 -0
  38. data/administrate-1.0.0/app/assets/stylesheets/administrate/reset/_normalize.scss +453 -0
  39. data/administrate-1.0.0/app/assets/stylesheets/administrate-internal/docs.scss +95 -0
  40. data/administrate-1.0.0/app/controllers/administrate/application_controller.rb +279 -0
  41. data/administrate-1.0.0/app/controllers/concerns/administrate/punditize.rb +52 -0
  42. data/administrate-1.0.0/app/helpers/administrate/application_helper.rb +101 -0
  43. data/administrate-1.0.0/app/views/administrate/application/_collection.html.erb +102 -0
  44. data/administrate-1.0.0/app/views/administrate/application/_collection_header_actions.html.erb +4 -0
  45. data/administrate-1.0.0/app/views/administrate/application/_collection_item_actions.html.erb +17 -0
  46. data/administrate-1.0.0/app/views/administrate/application/_flashes.html.erb +21 -0
  47. data/administrate-1.0.0/app/views/administrate/application/_form.html.erb +60 -0
  48. data/administrate-1.0.0/app/views/administrate/application/_icons.html.erb +21 -0
  49. data/administrate-1.0.0/app/views/administrate/application/_index_header.html.erb +51 -0
  50. data/administrate-1.0.0/app/views/administrate/application/_javascript.html.erb +21 -0
  51. data/administrate-1.0.0/app/views/administrate/application/_navigation.html.erb +20 -0
  52. data/administrate-1.0.0/app/views/administrate/application/_pagination.html.erb +1 -0
  53. data/administrate-1.0.0/app/views/administrate/application/_search.html.erb +25 -0
  54. data/administrate-1.0.0/app/views/administrate/application/_stylesheet.html.erb +14 -0
  55. data/administrate-1.0.0/app/views/administrate/application/edit.html.erb +48 -0
  56. data/administrate-1.0.0/app/views/administrate/application/index.html.erb +55 -0
  57. data/administrate-1.0.0/app/views/administrate/application/new.html.erb +49 -0
  58. data/administrate-1.0.0/app/views/administrate/application/show.html.erb +77 -0
  59. data/administrate-1.0.0/app/views/fields/belongs_to/_form.html.erb +27 -0
  60. data/administrate-1.0.0/app/views/fields/belongs_to/_index.html.erb +27 -0
  61. data/administrate-1.0.0/app/views/fields/belongs_to/_show.html.erb +27 -0
  62. data/administrate-1.0.0/app/views/fields/boolean/_form.html.erb +23 -0
  63. data/administrate-1.0.0/app/views/fields/boolean/_index.html.erb +19 -0
  64. data/administrate-1.0.0/app/views/fields/boolean/_show.html.erb +19 -0
  65. data/administrate-1.0.0/app/views/fields/date/_form.html.erb +22 -0
  66. data/administrate-1.0.0/app/views/fields/date/_index.html.erb +21 -0
  67. data/administrate-1.0.0/app/views/fields/date/_show.html.erb +21 -0
  68. data/administrate-1.0.0/app/views/fields/date_time/_form.html.erb +22 -0
  69. data/administrate-1.0.0/app/views/fields/date_time/_index.html.erb +21 -0
  70. data/administrate-1.0.0/app/views/fields/date_time/_show.html.erb +21 -0
  71. data/administrate-1.0.0/app/views/fields/email/_form.html.erb +23 -0
  72. data/administrate-1.0.0/app/views/fields/email/_index.html.erb +18 -0
  73. data/administrate-1.0.0/app/views/fields/email/_show.html.erb +18 -0
  74. data/administrate-1.0.0/app/views/fields/has_many/_form.html.erb +29 -0
  75. data/administrate-1.0.0/app/views/fields/has_many/_index.html.erb +19 -0
  76. data/administrate-1.0.0/app/views/fields/has_many/_show.html.erb +39 -0
  77. data/administrate-1.0.0/app/views/fields/has_one/_form.html.erb +44 -0
  78. data/administrate-1.0.0/app/views/fields/has_one/_index.html.erb +24 -0
  79. data/administrate-1.0.0/app/views/fields/has_one/_show.html.erb +47 -0
  80. data/administrate-1.0.0/app/views/fields/number/_form.html.erb +23 -0
  81. data/administrate-1.0.0/app/views/fields/number/_index.html.erb +19 -0
  82. data/administrate-1.0.0/app/views/fields/number/_show.html.erb +19 -0
  83. data/administrate-1.0.0/app/views/fields/password/_form.html.erb +23 -0
  84. data/administrate-1.0.0/app/views/fields/password/_index.html.erb +18 -0
  85. data/administrate-1.0.0/app/views/fields/password/_show.html.erb +18 -0
  86. data/administrate-1.0.0/app/views/fields/polymorphic/_form.html.erb +29 -0
  87. data/administrate-1.0.0/app/views/fields/polymorphic/_index.html.erb +25 -0
  88. data/administrate-1.0.0/app/views/fields/polymorphic/_show.html.erb +28 -0
  89. data/administrate-1.0.0/app/views/fields/rich_text/_form.html.erb +22 -0
  90. data/administrate-1.0.0/app/views/fields/rich_text/_index.html.erb +18 -0
  91. data/administrate-1.0.0/app/views/fields/rich_text/_show.html.erb +18 -0
  92. data/administrate-1.0.0/app/views/fields/select/_form.html.erb +33 -0
  93. data/administrate-1.0.0/app/views/fields/select/_index.html.erb +16 -0
  94. data/administrate-1.0.0/app/views/fields/select/_show.html.erb +16 -0
  95. data/administrate-1.0.0/app/views/fields/string/_form.html.erb +23 -0
  96. data/administrate-1.0.0/app/views/fields/string/_index.html.erb +18 -0
  97. data/administrate-1.0.0/app/views/fields/string/_show.html.erb +18 -0
  98. data/administrate-1.0.0/app/views/fields/text/_form.html.erb +22 -0
  99. data/administrate-1.0.0/app/views/fields/text/_index.html.erb +18 -0
  100. data/administrate-1.0.0/app/views/fields/text/_show.html.erb +18 -0
  101. data/administrate-1.0.0/app/views/fields/time/_form.html.erb +22 -0
  102. data/administrate-1.0.0/app/views/fields/time/_index.html.erb +19 -0
  103. data/administrate-1.0.0/app/views/fields/time/_show.html.erb +19 -0
  104. data/administrate-1.0.0/app/views/fields/url/_form.html.erb +23 -0
  105. data/administrate-1.0.0/app/views/fields/url/_index.html.erb +20 -0
  106. data/administrate-1.0.0/app/views/fields/url/_show.html.erb +20 -0
  107. data/administrate-1.0.0/app/views/layouts/administrate/application.html.erb +41 -0
  108. data/administrate-1.0.0/config/locales/administrate.ar.yml +30 -0
  109. data/administrate-1.0.0/config/locales/administrate.bs.yml +29 -0
  110. data/administrate-1.0.0/config/locales/administrate.ca.yml +30 -0
  111. data/administrate-1.0.0/config/locales/administrate.da.yml +30 -0
  112. data/administrate-1.0.0/config/locales/administrate.de.yml +30 -0
  113. data/administrate-1.0.0/config/locales/administrate.en.yml +30 -0
  114. data/administrate-1.0.0/config/locales/administrate.es.yml +30 -0
  115. data/administrate-1.0.0/config/locales/administrate.fi.yml +30 -0
  116. data/administrate-1.0.0/config/locales/administrate.fr.yml +30 -0
  117. data/administrate-1.0.0/config/locales/administrate.id.yml +30 -0
  118. data/administrate-1.0.0/config/locales/administrate.it.yml +30 -0
  119. data/administrate-1.0.0/config/locales/administrate.ja.yml +30 -0
  120. data/administrate-1.0.0/config/locales/administrate.ko.yml +30 -0
  121. data/administrate-1.0.0/config/locales/administrate.nl.yml +30 -0
  122. data/administrate-1.0.0/config/locales/administrate.pl.yml +30 -0
  123. data/administrate-1.0.0/config/locales/administrate.pt-BR.yml +31 -0
  124. data/administrate-1.0.0/config/locales/administrate.pt.yml +31 -0
  125. data/administrate-1.0.0/config/locales/administrate.ru.yml +30 -0
  126. data/administrate-1.0.0/config/locales/administrate.sl.yml +30 -0
  127. data/administrate-1.0.0/config/locales/administrate.sq.yml +30 -0
  128. data/administrate-1.0.0/config/locales/administrate.sv.yml +30 -0
  129. data/administrate-1.0.0/config/locales/administrate.tr.yml +30 -0
  130. data/administrate-1.0.0/config/locales/administrate.uk.yml +30 -0
  131. data/administrate-1.0.0/config/locales/administrate.vi.yml +30 -0
  132. data/administrate-1.0.0/config/locales/administrate.zh-CN.yml +30 -0
  133. data/administrate-1.0.0/config/locales/administrate.zh-TW.yml +30 -0
  134. data/administrate-1.0.0/docs/adding_controllers_without_related_model.md +52 -0
  135. data/administrate-1.0.0/docs/adding_custom_field_types.md +81 -0
  136. data/administrate-1.0.0/docs/authentication.md +63 -0
  137. data/administrate-1.0.0/docs/authorization.md +94 -0
  138. data/administrate-1.0.0/docs/customizing_attribute_partials.md +56 -0
  139. data/administrate-1.0.0/docs/customizing_controller_actions.md +109 -0
  140. data/administrate-1.0.0/docs/customizing_dashboards.md +641 -0
  141. data/administrate-1.0.0/docs/customizing_page_views.md +143 -0
  142. data/administrate-1.0.0/docs/extending_administrate.md +27 -0
  143. data/administrate-1.0.0/docs/getting_started.md +150 -0
  144. data/administrate-1.0.0/docs/guides/customising_search.md +149 -0
  145. data/administrate-1.0.0/docs/guides/hiding_dashboards_from_sidebar.md +21 -0
  146. data/administrate-1.0.0/docs/guides/scoping_has_many_relations.md +27 -0
  147. data/administrate-1.0.0/docs/guides/switching_templates_with_view_variants.md +45 -0
  148. data/administrate-1.0.0/docs/guides.md +8 -0
  149. data/administrate-1.0.0/docs/migrating-to-v1.md +34 -0
  150. data/administrate-1.0.0/docs/rails_api.md +45 -0
  151. data/administrate-1.0.0/lib/administrate/base_dashboard.rb +145 -0
  152. data/administrate-1.0.0/lib/administrate/custom_dashboard.rb +15 -0
  153. data/administrate-1.0.0/lib/administrate/engine.rb +52 -0
  154. data/administrate-1.0.0/lib/administrate/field/associative.rb +72 -0
  155. data/administrate-1.0.0/lib/administrate/field/base.rb +119 -0
  156. data/administrate-1.0.0/lib/administrate/field/belongs_to.rb +55 -0
  157. data/administrate-1.0.0/lib/administrate/field/boolean.rb +15 -0
  158. data/administrate-1.0.0/lib/administrate/field/date.rb +24 -0
  159. data/administrate-1.0.0/lib/administrate/field/date_time.rb +31 -0
  160. data/administrate-1.0.0/lib/administrate/field/deferred.rb +59 -0
  161. data/administrate-1.0.0/lib/administrate/field/email.rb +11 -0
  162. data/administrate-1.0.0/lib/administrate/field/has_many.rb +140 -0
  163. data/administrate-1.0.0/lib/administrate/field/has_one.rb +55 -0
  164. data/administrate-1.0.0/lib/administrate/field/number.rb +46 -0
  165. data/administrate-1.0.0/lib/administrate/field/password.rb +29 -0
  166. data/administrate-1.0.0/lib/administrate/field/polymorphic.rb +52 -0
  167. data/administrate-1.0.0/lib/administrate/field/rich_text.rb +21 -0
  168. data/administrate-1.0.0/lib/administrate/field/select.rb +44 -0
  169. data/administrate-1.0.0/lib/administrate/field/string.rb +21 -0
  170. data/administrate-1.0.0/lib/administrate/field/text.rb +21 -0
  171. data/administrate-1.0.0/lib/administrate/field/time.rb +20 -0
  172. data/administrate-1.0.0/lib/administrate/field/url.rb +25 -0
  173. data/administrate-1.0.0/lib/administrate/generator_helpers.rb +13 -0
  174. data/administrate-1.0.0/lib/administrate/namespace/resource.rb +28 -0
  175. data/administrate-1.0.0/lib/administrate/namespace.rb +35 -0
  176. data/administrate-1.0.0/lib/administrate/not_authorized_error.rb +20 -0
  177. data/administrate-1.0.0/lib/administrate/order.rb +150 -0
  178. data/administrate-1.0.0/lib/administrate/page/base.rb +40 -0
  179. data/administrate-1.0.0/lib/administrate/page/collection.rb +38 -0
  180. data/administrate-1.0.0/lib/administrate/page/form.rb +36 -0
  181. data/administrate-1.0.0/lib/administrate/page/show.rb +32 -0
  182. data/administrate-1.0.0/lib/administrate/page.rb +4 -0
  183. data/administrate-1.0.0/lib/administrate/resource_resolver.rb +44 -0
  184. data/administrate-1.0.0/lib/administrate/search.rb +167 -0
  185. data/administrate-1.0.0/lib/administrate/version.rb +3 -0
  186. data/administrate-1.0.0/lib/administrate/view_generator.rb +48 -0
  187. data/administrate-1.0.0/lib/administrate.rb +8 -0
  188. data/administrate-1.0.0/lib/generators/administrate/dashboard/USAGE +9 -0
  189. data/administrate-1.0.0/lib/generators/administrate/dashboard/dashboard_generator.rb +168 -0
  190. data/administrate-1.0.0/lib/generators/administrate/dashboard/templates/controller.rb.erb +46 -0
  191. data/administrate-1.0.0/lib/generators/administrate/dashboard/templates/dashboard.rb.erb +68 -0
  192. data/administrate-1.0.0/lib/generators/administrate/field/field_generator.rb +31 -0
  193. data/administrate-1.0.0/lib/generators/administrate/field/templates/_form.html.erb +6 -0
  194. data/administrate-1.0.0/lib/generators/administrate/field/templates/_index.html.erb +1 -0
  195. data/administrate-1.0.0/lib/generators/administrate/field/templates/_show.html.erb +1 -0
  196. data/administrate-1.0.0/lib/generators/administrate/field/templates/field_object.rb.erb +7 -0
  197. data/administrate-1.0.0/lib/generators/administrate/install/install_generator.rb +91 -0
  198. data/administrate-1.0.0/lib/generators/administrate/install/templates/application_controller.rb.erb +21 -0
  199. data/administrate-1.0.0/lib/generators/administrate/routes/routes_generator.rb +96 -0
  200. data/administrate-1.0.0/lib/generators/administrate/routes/templates/routes.rb.erb +5 -0
  201. data/administrate-1.0.0/lib/generators/administrate/test_record.rb +21 -0
  202. data/administrate-1.0.0/lib/generators/administrate/views/edit_generator.rb +16 -0
  203. data/administrate-1.0.0/lib/generators/administrate/views/field_generator.rb +50 -0
  204. data/administrate-1.0.0/lib/generators/administrate/views/form_generator.rb +15 -0
  205. data/administrate-1.0.0/lib/generators/administrate/views/index_generator.rb +21 -0
  206. data/administrate-1.0.0/lib/generators/administrate/views/layout_generator.rb +24 -0
  207. data/administrate-1.0.0/lib/generators/administrate/views/navigation_generator.rb +15 -0
  208. data/administrate-1.0.0/lib/generators/administrate/views/new_generator.rb +16 -0
  209. data/administrate-1.0.0/lib/generators/administrate/views/show_generator.rb +15 -0
  210. data/administrate-1.0.0/lib/generators/administrate/views/views_generator.rb +15 -0
  211. data/administrate-1.0.0/lib/tasks/administrate_tasks.rake +4 -0
  212. data/mini-max-mod.gemspec +12 -0
  213. metadata +252 -0
@@ -0,0 +1,145 @@
1
+ require "administrate/field/belongs_to"
2
+ require "administrate/field/boolean"
3
+ require "administrate/field/date_time"
4
+ require "administrate/field/date"
5
+ require "administrate/field/email"
6
+ require "administrate/field/has_many"
7
+ require "administrate/field/has_one"
8
+ require "administrate/field/number"
9
+ require "administrate/field/polymorphic"
10
+ require "administrate/field/rich_text"
11
+ require "administrate/field/select"
12
+ require "administrate/field/string"
13
+ require "administrate/field/text"
14
+ require "administrate/field/time"
15
+ require "administrate/field/url"
16
+ require "administrate/field/password"
17
+
18
+ module Administrate
19
+ class BaseDashboard
20
+ include Administrate
21
+
22
+ DASHBOARD_SUFFIX = "Dashboard".freeze
23
+
24
+ class << self
25
+ def model
26
+ to_s.chomp(DASHBOARD_SUFFIX).classify.constantize
27
+ end
28
+
29
+ def resource_name(opts)
30
+ model.model_name.human(opts)
31
+ end
32
+ end
33
+
34
+ def attribute_types
35
+ self.class::ATTRIBUTE_TYPES
36
+ end
37
+
38
+ def attribute_type_for(attribute_name)
39
+ attribute_types.fetch(attribute_name) do
40
+ fail attribute_not_found_message(attribute_name)
41
+ end
42
+ end
43
+
44
+ def attribute_types_for(attribute_names)
45
+ attribute_names.each_with_object({}) do |name, attributes|
46
+ attributes[name] = attribute_type_for(name)
47
+ end
48
+ end
49
+
50
+ def all_attributes
51
+ attribute_types.keys
52
+ end
53
+
54
+ def form_attributes(action = nil)
55
+ action =
56
+ case action
57
+ when "update" then "edit"
58
+ when "create" then "new"
59
+ else action
60
+ end
61
+ specific_form_attributes_for(action) || self.class::FORM_ATTRIBUTES
62
+ end
63
+
64
+ def specific_form_attributes_for(action)
65
+ return unless action
66
+
67
+ cname = "FORM_ATTRIBUTES_#{action.upcase}"
68
+
69
+ self.class.const_get(cname) if self.class.const_defined?(cname)
70
+ end
71
+
72
+ def permitted_attributes(action = nil)
73
+ attributes = form_attributes action
74
+
75
+ if attributes.is_a? Hash
76
+ attributes = attributes.values.flatten
77
+ end
78
+
79
+ attributes.map do |attr|
80
+ attribute_types[attr].permitted_attribute(
81
+ attr,
82
+ resource_class: self.class.model,
83
+ action: action
84
+ )
85
+ end.uniq
86
+ end
87
+
88
+ def show_page_attributes
89
+ self.class::SHOW_PAGE_ATTRIBUTES
90
+ end
91
+
92
+ def collection_attributes
93
+ if self.class::COLLECTION_ATTRIBUTES.is_a?(Hash)
94
+ self.class::COLLECTION_ATTRIBUTES.values.flatten
95
+ else
96
+ self.class::COLLECTION_ATTRIBUTES
97
+ end
98
+ end
99
+
100
+ def search_attributes
101
+ attribute_types.keys.select do |attribute|
102
+ attribute_types[attribute].searchable?
103
+ end
104
+ end
105
+
106
+ def display_resource(resource)
107
+ "#{resource.class} ##{resource.id}"
108
+ end
109
+
110
+ def collection_includes
111
+ attribute_includes(collection_attributes)
112
+ end
113
+
114
+ def item_associations
115
+ attributes = if show_page_attributes.is_a?(Hash)
116
+ show_page_attributes.values.flatten
117
+ else
118
+ show_page_attributes
119
+ end
120
+ attribute_associated attributes
121
+ end
122
+
123
+ private
124
+
125
+ def attribute_not_found_message(attr)
126
+ "Attribute #{attr} could not be found in #{self.class}::ATTRIBUTE_TYPES"
127
+ end
128
+
129
+ def attribute_includes(attributes)
130
+ attributes.map do |key|
131
+ field = attribute_type_for(key)
132
+
133
+ key if field.eager_load?
134
+ end.compact
135
+ end
136
+
137
+ def attribute_associated(attributes)
138
+ attributes.map do |key|
139
+ field = attribute_type_for(key)
140
+
141
+ key if field.associative?
142
+ end.compact
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,15 @@
1
+ module Administrate
2
+ class CustomDashboard
3
+ include Administrate
4
+
5
+ class << self
6
+ def resource_name(_opts)
7
+ named_resource.pluralize.titleize
8
+ end
9
+
10
+ def resource(resource_name)
11
+ define_singleton_method(:named_resource) { resource_name }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,52 @@
1
+ require "kaminari"
2
+
3
+ require "administrate/namespace/resource"
4
+ require "administrate/not_authorized_error"
5
+ require "administrate/page/form"
6
+ require "administrate/page/show"
7
+ require "administrate/page/collection"
8
+ require "administrate/order"
9
+ require "administrate/resource_resolver"
10
+ require "administrate/search"
11
+ require "administrate/namespace"
12
+
13
+ module Administrate
14
+ class Engine < ::Rails::Engine
15
+ isolate_namespace Administrate
16
+
17
+ @@javascripts = []
18
+ @@stylesheets = []
19
+
20
+ initializer "administrate.assets.precompile" do |app|
21
+ app.config.assets.precompile += [
22
+ "administrate/application.js",
23
+ "administrate/application.css"
24
+ ]
25
+ end
26
+
27
+ initializer "administrate.action_text" do
28
+ ActiveSupport.on_load :action_text_rich_text do
29
+ require "administrate/field/rich_text"
30
+ end
31
+ end
32
+
33
+ def self.add_javascript(script)
34
+ @@javascripts << script
35
+ end
36
+
37
+ def self.add_stylesheet(stylesheet)
38
+ @@stylesheets << stylesheet
39
+ end
40
+
41
+ def self.stylesheets
42
+ @@stylesheets
43
+ end
44
+
45
+ def self.javascripts
46
+ @@javascripts
47
+ end
48
+
49
+ add_javascript "administrate/application"
50
+ add_stylesheet "administrate/application"
51
+ end
52
+ end
@@ -0,0 +1,72 @@
1
+ require_relative "base"
2
+
3
+ module Administrate
4
+ module Field
5
+ class Associative < Base
6
+ def self.foreign_key_for(resource_class, attr)
7
+ reflection(resource_class, attr).foreign_key
8
+ end
9
+
10
+ def self.association_primary_key_for(resource_class, attr)
11
+ reflection(resource_class, attr).association_primary_key
12
+ end
13
+
14
+ def self.associated_class(resource_class, attr)
15
+ reflection(resource_class, attr).klass
16
+ end
17
+
18
+ def self.associated_class_name(resource_class, attr)
19
+ associated_class(resource_class, attr).name
20
+ end
21
+
22
+ def self.reflection(resource_class, attr)
23
+ resource_class.reflect_on_association(attr)
24
+ end
25
+
26
+ def display_associated_resource
27
+ associated_dashboard.display_resource(data)
28
+ end
29
+
30
+ def associated_class
31
+ if option_given?(:class_name)
32
+ associated_class_name.constantize
33
+ else
34
+ self.class.associated_class(resource.class, attribute)
35
+ end
36
+ end
37
+
38
+ def associated_class_name
39
+ if option_given?(:class_name)
40
+ options.fetch(:class_name)
41
+ else
42
+ self.class.associated_class_name(
43
+ resource.class,
44
+ attribute
45
+ )
46
+ end
47
+ end
48
+
49
+ def html_controller
50
+ "select"
51
+ end
52
+
53
+ private
54
+
55
+ def associated_dashboard
56
+ "#{associated_class_name}Dashboard".constantize.new
57
+ end
58
+
59
+ def association_primary_key
60
+ self.class.association_primary_key_for(resource.class, attribute)
61
+ end
62
+
63
+ def foreign_key
64
+ self.class.foreign_key_for(resource.class, attribute)
65
+ end
66
+
67
+ def option_given?(name)
68
+ options.key?(name)
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,119 @@
1
+ require_relative "deferred"
2
+ require "active_support/core_ext/string/inflections"
3
+
4
+ module Administrate
5
+ module Field
6
+ class Base
7
+ def self.with_options(options = {})
8
+ Deferred.new(self, options)
9
+ end
10
+
11
+ def self.html_class
12
+ field_type.dasherize
13
+ end
14
+
15
+ def self.associative?
16
+ self < Associative
17
+ end
18
+
19
+ def self.eager_load?
20
+ false
21
+ end
22
+
23
+ def self.searchable?
24
+ false
25
+ end
26
+
27
+ def self.sortable?
28
+ true
29
+ end
30
+
31
+ def self.field_type
32
+ to_s.split("::").last.underscore
33
+ end
34
+
35
+ def self.permitted_attribute(attr, _options = nil)
36
+ attr
37
+ end
38
+
39
+ def self.partial_prefixes
40
+ @partial_prefixes ||=
41
+ if superclass.respond_to?(:partial_prefixes)
42
+ local_partial_prefixes + superclass.partial_prefixes
43
+ else
44
+ local_partial_prefixes
45
+ end
46
+ end
47
+
48
+ def self.local_partial_prefixes
49
+ ["fields/#{field_type}"]
50
+ end
51
+
52
+ def initialize(attribute, data, page, options = {})
53
+ @attribute = attribute
54
+ @page = page
55
+ @resource = options.delete(:resource)
56
+ @options = options
57
+ @data = read_value(data)
58
+ end
59
+
60
+ def html_class
61
+ self.class.html_class
62
+ end
63
+
64
+ def html_controller
65
+ nil
66
+ end
67
+
68
+ def name
69
+ attribute.to_s
70
+ end
71
+
72
+ def read_value(data)
73
+ if options.key?(:getter)
74
+ if options[:getter].respond_to?(:call)
75
+ options[:getter].call(self)
76
+ else
77
+ resource.try(options[:getter])
78
+ end
79
+ elsif data.nil?
80
+ resource.try(attribute)
81
+ else
82
+ data
83
+ end
84
+ end
85
+
86
+ def partial_prefixes
87
+ self.class.partial_prefixes
88
+ end
89
+
90
+ def required?
91
+ return false unless resource.class.respond_to?(:validators_on)
92
+
93
+ resource.class.validators_on(attribute).any? do |v|
94
+ next false unless v.instance_of?(ActiveRecord::Validations::PresenceValidator)
95
+
96
+ options = v.options
97
+ next false if options.include?(:if)
98
+ next false if options.include?(:unless)
99
+
100
+ if (on_option = options[:on])
101
+ if on_option == :create && !resource.persisted?
102
+ next true
103
+ end
104
+
105
+ if on_option == :update && resource.persisted?
106
+ next true
107
+ end
108
+
109
+ next false
110
+ end
111
+
112
+ true
113
+ end
114
+ end
115
+
116
+ attr_reader :attribute, :data, :options, :page, :resource
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,55 @@
1
+ require_relative "associative"
2
+
3
+ module Administrate
4
+ module Field
5
+ class BelongsTo < Associative
6
+ def self.permitted_attribute(attr, options = {})
7
+ resource_class = options[:resource_class]
8
+ foreign_key_for(resource_class, attr)
9
+ end
10
+
11
+ def self.eager_load?
12
+ true
13
+ end
14
+
15
+ def permitted_attribute
16
+ foreign_key
17
+ end
18
+
19
+ def associated_resource_options
20
+ candidate_resources.map do |resource|
21
+ [
22
+ display_candidate_resource(resource),
23
+ resource.send(association_primary_key)
24
+ ]
25
+ end
26
+ end
27
+
28
+ def selected_option
29
+ data&.send(association_primary_key)
30
+ end
31
+
32
+ def include_blank_option
33
+ options.fetch(:include_blank, true)
34
+ end
35
+
36
+ private
37
+
38
+ def candidate_resources
39
+ scope =
40
+ if options[:scope]
41
+ options[:scope].arity.positive? ? options[:scope].call(self) : options[:scope].call
42
+ else
43
+ associated_class.all
44
+ end
45
+
46
+ order = options.delete(:order)
47
+ order ? scope.reorder(order) : scope
48
+ end
49
+
50
+ def display_candidate_resource(resource)
51
+ associated_dashboard.display_resource(resource)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,15 @@
1
+ require_relative "base"
2
+
3
+ module Administrate
4
+ module Field
5
+ class Boolean < Base
6
+ def to_s
7
+ if data.nil?
8
+ "-"
9
+ else
10
+ data.to_s
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ require_relative "base"
2
+
3
+ module Administrate
4
+ module Field
5
+ class Date < Base
6
+ def date
7
+ I18n.localize(
8
+ data.in_time_zone(timezone).to_date,
9
+ format: format
10
+ )
11
+ end
12
+
13
+ private
14
+
15
+ def format
16
+ options.fetch(:format, :default)
17
+ end
18
+
19
+ def timezone
20
+ options.fetch(:timezone, ::Time.zone)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,31 @@
1
+ require_relative "base"
2
+
3
+ module Administrate
4
+ module Field
5
+ class DateTime < Base
6
+ def date
7
+ I18n.localize(
8
+ data.in_time_zone(timezone).to_date,
9
+ format: format
10
+ )
11
+ end
12
+
13
+ def datetime
14
+ I18n.localize(
15
+ data.in_time_zone(timezone),
16
+ format: format
17
+ )
18
+ end
19
+
20
+ private
21
+
22
+ def format
23
+ options.fetch(:format, :default)
24
+ end
25
+
26
+ def timezone
27
+ options.fetch(:timezone, ::Time.zone)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,59 @@
1
+ require "active_support/core_ext/module/delegation"
2
+
3
+ module Administrate
4
+ module Field
5
+ class Deferred
6
+ def initialize(deferred_class, options = {})
7
+ @deferred_class = deferred_class
8
+ @options = options
9
+ end
10
+
11
+ attr_reader :deferred_class, :options
12
+
13
+ def new(*args)
14
+ new_options = args.last.respond_to?(:merge) ? args.pop : {}
15
+ deferred_class.new(*args, options.merge(new_options))
16
+ end
17
+
18
+ def ==(other)
19
+ other.respond_to?(:deferred_class) &&
20
+ deferred_class == other.deferred_class &&
21
+ options == other.options
22
+ end
23
+
24
+ def getter
25
+ options.fetch(:getter, nil)
26
+ end
27
+
28
+ def associative?
29
+ deferred_class.associative?
30
+ end
31
+
32
+ def eager_load?
33
+ deferred_class.eager_load?
34
+ end
35
+
36
+ def searchable?
37
+ if options.key?(:getter)
38
+ false
39
+ else
40
+ options.fetch(:searchable, deferred_class.searchable?)
41
+ end
42
+ end
43
+
44
+ def searchable_fields
45
+ options.fetch(:searchable_fields)
46
+ end
47
+
48
+ def sortable?
49
+ options.fetch(:sortable, deferred_class.sortable?)
50
+ end
51
+
52
+ def permitted_attribute(attr, opts = {})
53
+ deferred_class.permitted_attribute(attr, options.merge(opts))
54
+ end
55
+
56
+ delegate :html_class, to: :deferred_class
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,11 @@
1
+ require_relative "base"
2
+
3
+ module Administrate
4
+ module Field
5
+ class Email < Field::Base
6
+ def self.searchable?
7
+ true
8
+ end
9
+ end
10
+ end
11
+ end