brain_damage 0.1.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 (215) hide show
  1. checksums.yaml +7 -0
  2. data/.byebug_history +32 -0
  3. data/.gitignore +9 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +4 -0
  6. data/CODE_OF_CONDUCT.md +13 -0
  7. data/Gemfile +7 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +41 -0
  10. data/Rakefile +6 -0
  11. data/app/assets/javascripts/ajax_delete.js.coffee +14 -0
  12. data/app/assets/javascripts/ajax_form.js.coffee +94 -0
  13. data/app/assets/javascripts/autocomplete-input.js.coffee +43 -0
  14. data/app/assets/javascripts/autocomplete-list.js.coffee +41 -0
  15. data/app/assets/javascripts/autocomplete-simple-select.js.coffee +39 -0
  16. data/app/assets/javascripts/autocomplete.js.coffee +17 -0
  17. data/app/assets/javascripts/brain_damage.js +3 -0
  18. data/app/assets/javascripts/datepicker.js.coffee +49 -0
  19. data/app/assets/javascripts/document_validity_input.js.coffee +16 -0
  20. data/app/assets/javascripts/expandable-list.js.coffee +16 -0
  21. data/app/assets/javascripts/form_initializer.js.coffee +8 -0
  22. data/app/assets/javascripts/helpers/conditionally-visible-field.js.coffee +13 -0
  23. data/app/assets/javascripts/hideable_content.js.coffee +25 -0
  24. data/app/assets/javascripts/inline_edit.js.coffee +58 -0
  25. data/app/assets/javascripts/label_file_field.js.coffee +22 -0
  26. data/app/assets/javascripts/label_file_field_ui_initializer.js.coffee +10 -0
  27. data/app/assets/javascripts/list_item.js.coffee +10 -0
  28. data/app/assets/javascripts/nested_form_controls.js.coffee +84 -0
  29. data/app/assets/javascripts/polymorphic_hibrid_input.js.coffee +14 -0
  30. data/app/assets/javascripts/polymorphic_select_input.js.coffee +28 -0
  31. data/app/assets/javascripts/rails.validations.actionView.js.coffee +18 -0
  32. data/app/assets/javascripts/scroll_loader.js.coffee +28 -0
  33. data/app/assets/javascripts/searchable_contents.js.coffee +62 -0
  34. data/app/assets/javascripts/selectable-list.js.coffee +92 -0
  35. data/app/assets/javascripts/sensible_to_ajax_view.js.coffee +60 -0
  36. data/app/assets/javascripts/single_page_manager.js.coffee +60 -0
  37. data/app/assets/javascripts/stylesheets/_custom-best-in-place.css.sass +12 -0
  38. data/app/assets/javascripts/stylesheets/_top-search.css.sass +0 -0
  39. data/app/assets/javascripts/stylesheets/application.css +0 -0
  40. data/app/assets/javascripts/trailing_form.js.coffee +16 -0
  41. data/app/assets/javascripts/ui_initializer.js.coffee +23 -0
  42. data/app/assets/javascripts/underscore.min.js +6 -0
  43. data/app/assets/stylesheets/brain_damage.css.sass +214 -0
  44. data/app/views/brain_damage/_empty.html.haml +1 -0
  45. data/app/views/brain_damage/empty.html.haml +1 -0
  46. data/bin/console +14 -0
  47. data/bin/setup +7 -0
  48. data/brain_damage.gemspec +36 -0
  49. data/lib/brain_damage.rb +16 -0
  50. data/lib/brain_damage/brain_damage_helper.rb +75 -0
  51. data/lib/brain_damage/version.rb +3 -0
  52. data/lib/generators/brain_damage/full/full_generator.rb +37 -0
  53. data/lib/generators/brain_damage/lib/controller/controller_generator.rb +45 -0
  54. data/lib/generators/brain_damage/lib/controller/templates/controller.rb +9 -0
  55. data/lib/generators/brain_damage/lib/controller/templates/private_methods/get_partial_locals.rb +3 -0
  56. data/lib/generators/brain_damage/lib/controller/templates/private_methods/set_singular_table_name.rb +3 -0
  57. data/lib/generators/brain_damage/lib/controller/templates/private_methods/singular_table_name_params.rb +3 -0
  58. data/lib/generators/brain_damage/lib/controller/templates/public_methods/create.rb +21 -0
  59. data/lib/generators/brain_damage/lib/controller/templates/public_methods/destroy.rb +14 -0
  60. data/lib/generators/brain_damage/lib/controller/templates/public_methods/edit.rb +2 -0
  61. data/lib/generators/brain_damage/lib/controller/templates/public_methods/index.rb +3 -0
  62. data/lib/generators/brain_damage/lib/controller/templates/public_methods/new.rb +3 -0
  63. data/lib/generators/brain_damage/lib/controller/templates/public_methods/show.rb +2 -0
  64. data/lib/generators/brain_damage/lib/controller/templates/public_methods/update.rb +25 -0
  65. data/lib/generators/brain_damage/lib/field.rb +163 -0
  66. data/lib/generators/brain_damage/lib/field_white_list.rb +21 -0
  67. data/lib/generators/brain_damage/lib/includes.rb +12 -0
  68. data/lib/generators/brain_damage/lib/migration.rb +76 -0
  69. data/lib/generators/brain_damage/lib/model/model_generator.rb +115 -0
  70. data/lib/generators/brain_damage/lib/model/templates/model.rb +12 -0
  71. data/lib/generators/brain_damage/lib/parametizer.rb +19 -0
  72. data/lib/generators/brain_damage/lib/relation/base.rb +50 -0
  73. data/lib/generators/brain_damage/lib/relation/belongs_to.rb +29 -0
  74. data/lib/generators/brain_damage/lib/relation/has_and_belongs_to_many.rb +22 -0
  75. data/lib/generators/brain_damage/lib/relation/has_many.rb +35 -0
  76. data/lib/generators/brain_damage/lib/relation/has_one.rb +18 -0
  77. data/lib/generators/brain_damage/lib/resource.rb +150 -0
  78. data/lib/generators/brain_damage/lib/ruby_simple_parser/block.rb +33 -0
  79. data/lib/generators/brain_damage/lib/ruby_simple_parser/class_definition.rb +19 -0
  80. data/lib/generators/brain_damage/lib/ruby_simple_parser/code_line.rb +16 -0
  81. data/lib/generators/brain_damage/lib/ruby_simple_parser/global_context.rb +8 -0
  82. data/lib/generators/brain_damage/lib/ruby_simple_parser/line_classifier.rb +107 -0
  83. data/lib/generators/brain_damage/lib/ruby_simple_parser/method.rb +23 -0
  84. data/lib/generators/brain_damage/lib/ruby_simple_parser/parser.rb +114 -0
  85. data/lib/generators/brain_damage/lib/ruby_simple_parser/ruby_simple_parser.rb +11 -0
  86. data/lib/generators/brain_damage/lib/templateable/base.rb +53 -0
  87. data/lib/generators/brain_damage/lib/templateable/class_templateable.rb +88 -0
  88. data/lib/generators/brain_damage/lib/templateable/field_templateable.rb +42 -0
  89. data/lib/generators/brain_damage/lib/templateable/view_templateable.rb +23 -0
  90. data/lib/generators/brain_damage/lib/views/displays/base.rb +14 -0
  91. data/lib/generators/brain_damage/lib/views/displays/bright_text.rb +14 -0
  92. data/lib/generators/brain_damage/lib/views/displays/collection_list.rb +22 -0
  93. data/lib/generators/brain_damage/lib/views/displays/default.rb +11 -0
  94. data/lib/generators/brain_damage/lib/views/displays/foreign_single_page_manager.rb +46 -0
  95. data/lib/generators/brain_damage/lib/views/displays/hidden.rb +26 -0
  96. data/lib/generators/brain_damage/lib/views/displays/inline_editable.rb +27 -0
  97. data/lib/generators/brain_damage/lib/views/displays/link_to.rb +42 -0
  98. data/lib/generators/brain_damage/lib/views/displays/linked_collection_list.rb +26 -0
  99. data/lib/generators/brain_damage/lib/views/displays/templates/bright_text.html.haml +7 -0
  100. data/lib/generators/brain_damage/lib/views/displays/templates/collection_list.html.haml +31 -0
  101. data/lib/generators/brain_damage/lib/views/displays/templates/custom.html.haml +5 -0
  102. data/lib/generators/brain_damage/lib/views/displays/templates/default.html.haml +4 -0
  103. data/lib/generators/brain_damage/lib/views/displays/templates/foreign_single_page_manager.html.haml +1 -0
  104. data/lib/generators/brain_damage/lib/views/displays/templates/inline_editable.html.haml +8 -0
  105. data/lib/generators/brain_damage/lib/views/displays/templates/link_to.html.haml +9 -0
  106. data/lib/generators/brain_damage/lib/views/displays/templates/linked_collection_list.html.haml +31 -0
  107. data/lib/generators/brain_damage/lib/views/displays/templates/text.html.haml +4 -0
  108. data/lib/generators/brain_damage/lib/views/displays/templates/yes_or_no.html.haml +4 -0
  109. data/lib/generators/brain_damage/lib/views/displays/text.rb +43 -0
  110. data/lib/generators/brain_damage/lib/views/factory.rb +29 -0
  111. data/lib/generators/brain_damage/lib/views/inputs/autocompletable.rb +26 -0
  112. data/lib/generators/brain_damage/lib/views/inputs/autocompletable_multiple_selection.rb +25 -0
  113. data/lib/generators/brain_damage/lib/views/inputs/autocompletable_simple_selection.rb +21 -0
  114. data/lib/generators/brain_damage/lib/views/inputs/base.rb +23 -0
  115. data/lib/generators/brain_damage/lib/views/inputs/checkbox.rb +14 -0
  116. data/lib/generators/brain_damage/lib/views/inputs/collection_checkboxes.rb +10 -0
  117. data/lib/generators/brain_damage/lib/views/inputs/collection_select.rb +11 -0
  118. data/lib/generators/brain_damage/lib/views/inputs/default.rb +11 -0
  119. data/lib/generators/brain_damage/lib/views/inputs/hierarchy_picker.rb +11 -0
  120. data/lib/generators/brain_damage/lib/views/inputs/nested_form.rb +34 -0
  121. data/lib/generators/brain_damage/lib/views/inputs/nested_on_hideable.rb +22 -0
  122. data/lib/generators/brain_damage/lib/views/inputs/polymorphic_hybrid.rb +44 -0
  123. data/lib/generators/brain_damage/lib/views/inputs/polymorphic_select.rb +33 -0
  124. data/lib/generators/brain_damage/lib/views/inputs/templates/autocompletable_multiple_selection.html.haml +20 -0
  125. data/lib/generators/brain_damage/lib/views/inputs/templates/autocompletable_simple_selection.html.haml +25 -0
  126. data/lib/generators/brain_damage/lib/views/inputs/templates/checkbox.html.haml +3 -0
  127. data/lib/generators/brain_damage/lib/views/inputs/templates/collection_checkboxes.html.haml +6 -0
  128. data/lib/generators/brain_damage/lib/views/inputs/templates/collection_select.html.haml +9 -0
  129. data/lib/generators/brain_damage/lib/views/inputs/templates/custom.html.haml +5 -0
  130. data/lib/generators/brain_damage/lib/views/inputs/templates/default.html.haml +1 -0
  131. data/lib/generators/brain_damage/lib/views/inputs/templates/file.html.haml +5 -0
  132. data/lib/generators/brain_damage/lib/views/inputs/templates/hierarchy_picker.html.haml +19 -0
  133. data/lib/generators/brain_damage/lib/views/inputs/templates/nested_form.html.haml +2 -0
  134. data/lib/generators/brain_damage/lib/views/inputs/templates/polymorphic_hybrid.html.haml +20 -0
  135. data/lib/generators/brain_damage/lib/views/inputs/templates/polymorphic_select.html.haml +22 -0
  136. data/lib/generators/brain_damage/lib/views/inputs/templates/simple_select.html.haml +1 -0
  137. data/lib/generators/brain_damage/lib/views/inputs/templates/text.html.haml +1 -0
  138. data/lib/generators/brain_damage/lib/views/labels/base.rb +26 -0
  139. data/lib/generators/brain_damage/lib/views/labels/default.rb +15 -0
  140. data/lib/generators/brain_damage/lib/views/labels/templates/default.html.haml +6 -0
  141. data/lib/generators/brain_damage/lib/views/modules/inline_editable.rb +16 -0
  142. data/lib/generators/brain_damage/lib/views/schemas/autocompletable.rb +36 -0
  143. data/lib/generators/brain_damage/lib/views/schemas/autocompletable/base.rb +26 -0
  144. data/lib/generators/brain_damage/lib/views/schemas/autocompletable/templates/_links.html.haml +8 -0
  145. data/lib/generators/brain_damage/lib/views/schemas/autocompletable/templates/_multiple_selection.html.haml +6 -0
  146. data/lib/generators/brain_damage/lib/views/schemas/autocompletable/templates/_simple_selection.html.haml +6 -0
  147. data/lib/generators/brain_damage/lib/views/schemas/base.rb +97 -0
  148. data/lib/generators/brain_damage/lib/views/schemas/base/base.rb +86 -0
  149. data/lib/generators/brain_damage/lib/views/schemas/base/form.rb +24 -0
  150. data/lib/generators/brain_damage/lib/views/schemas/base/templates/_fields.html.haml +10 -0
  151. data/lib/generators/brain_damage/lib/views/schemas/base/templates/_form.html.haml +15 -0
  152. data/lib/generators/brain_damage/lib/views/schemas/base/templates/index.html.haml +16 -0
  153. data/lib/generators/brain_damage/lib/views/schemas/base/templates/list/_index.html.haml +4 -0
  154. data/lib/generators/brain_damage/lib/views/schemas/base/templates/list/_item.html.haml +5 -0
  155. data/lib/generators/brain_damage/lib/views/schemas/base/templates/new.html.haml +3 -0
  156. data/lib/generators/brain_damage/lib/views/schemas/base/templates/show.html.haml +9 -0
  157. data/lib/generators/brain_damage/lib/views/schemas/base/templates/table/_header.html.haml +5 -0
  158. data/lib/generators/brain_damage/lib/views/schemas/base/templates/table/_index.html.haml +8 -0
  159. data/lib/generators/brain_damage/lib/views/schemas/base/templates/table/_item.html.haml +5 -0
  160. data/lib/generators/brain_damage/lib/views/schemas/custom.rb +36 -0
  161. data/lib/generators/brain_damage/lib/views/schemas/factory.rb +13 -0
  162. data/lib/generators/brain_damage/lib/views/schemas/inline_editable.rb +27 -0
  163. data/lib/generators/brain_damage/lib/views/schemas/inline_editable/base.rb +20 -0
  164. data/lib/generators/brain_damage/lib/views/schemas/inline_editable/field.rb +47 -0
  165. data/lib/generators/brain_damage/lib/views/schemas/inline_editable/inline_edit.rb +10 -0
  166. data/lib/generators/brain_damage/lib/views/schemas/inline_editable/templates/inline_edit/_field.html.haml +33 -0
  167. data/lib/generators/brain_damage/lib/views/schemas/inline_editable/templates/inline_edit/_inline_edit.html.haml +0 -0
  168. data/lib/generators/brain_damage/lib/views/schemas/nested_fields.rb +14 -0
  169. data/lib/generators/brain_damage/lib/views/schemas/nested_fields/base.rb +20 -0
  170. data/lib/generators/brain_damage/lib/views/schemas/nested_fields/templates/_nested.fields.html.haml +33 -0
  171. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager.rb +22 -0
  172. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/base.rb +40 -0
  173. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/list_item.rb +16 -0
  174. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/_single_page_manager.html.haml +20 -0
  175. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/index.html.haml +1 -0
  176. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_index.form.html.haml +20 -0
  177. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_index.html.haml +27 -0
  178. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_item.display.html.haml +5 -0
  179. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_item.form.html.haml +21 -0
  180. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_item.html.haml +33 -0
  181. data/lib/generators/brain_damage/lib/views/schemas/single_page_manager/templates/list/_simple.html.haml +4 -0
  182. data/lib/generators/brain_damage/lib/views/views_generator.rb +37 -0
  183. data/lib/generators/brain_damage/resource/USAGE +8 -0
  184. data/lib/generators/brain_damage/resource/helpers.rb +117 -0
  185. data/lib/generators/brain_damage/resource/monkeys/string.rb +17 -0
  186. data/lib/generators/brain_damage/resource/resource_generator.rb +139 -0
  187. data/lib/generators/brain_damage/resource/templates/controller.rb +40 -0
  188. data/lib/generators/brain_damage/resource/templates/inputs/_simple_select.html.haml +1 -0
  189. data/lib/generators/brain_damage/resource/templates/views/common/_fields.html.haml +11 -0
  190. data/lib/generators/brain_damage/resource/templates/views/common/show.html.haml +11 -0
  191. data/lib/generators/brain_damage/resource/templates/views/full_entity/_form.html.haml +13 -0
  192. data/lib/generators/brain_damage/resource/templates/views/full_entity/_index.body.html.haml +4 -0
  193. data/lib/generators/brain_damage/resource/templates/views/full_entity/_index.html.haml +5 -0
  194. data/lib/generators/brain_damage/resource/templates/views/full_entity/_table.header.html.haml +7 -0
  195. data/lib/generators/brain_damage/resource/templates/views/full_entity/_table.item.html.haml +8 -0
  196. data/lib/generators/brain_damage/resource/templates/views/full_entity/index.html.haml +16 -0
  197. data/lib/generators/brain_damage/resource/templates/views/full_entity/new.html.haml +3 -0
  198. data/lib/generators/brain_damage/resource/templates/views/scaffold/_menu.entry.html.haml +1 -0
  199. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_form.html.haml +15 -0
  200. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_index.body.html.haml +4 -0
  201. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_single_page_manager.html.haml +17 -0
  202. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.form.html.haml +21 -0
  203. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.header.html.haml +12 -0
  204. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.html.haml +27 -0
  205. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.item.form.html.haml +21 -0
  206. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.item.html.haml +32 -0
  207. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/_table.item.show.html.haml +13 -0
  208. data/lib/generators/brain_damage/resource/templates/views/single_page_manager/index.html.haml +4 -0
  209. data/lib/generators/brain_damage/resource/templates/views/special/_fields.show.inline.html.haml +10 -0
  210. data/lib/generators/brain_damage/resource/templates/views/special/_inline_edit.html.haml +2 -0
  211. data/lib/generators/brain_damage/resource/templates/views/special/_inner.show.inline.html.haml +20 -0
  212. data/lib/generators/brain_damage/resource/templates/views/special/_nested.fields.html.haml +33 -0
  213. data/lib/generators/brain_damage/resource/templates/views/special/_show.inline.html.haml +10 -0
  214. data/lib/generators/brain_damage/resource/templates/views/special/_trailing_form.show.inline.html.haml +12 -0
  215. metadata +328 -0
@@ -0,0 +1,16 @@
1
+ require "brain_damage/version"
2
+ require "brain_damage/brain_damage_helper"
3
+
4
+ module BrainDamage
5
+ if defined?(Rails)
6
+ require 'rails'
7
+ class Engine < Rails::Engine
8
+ end
9
+
10
+ class Railtie < Rails::Railtie
11
+ initializer "brain_damage.brain_damage_helper" do
12
+ ActionView::Base.send :include, BrainDamageHelper
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,75 @@
1
+ # -*- coding: utf-8 -*-
2
+ module BrainDamage
3
+ module BrainDamageHelper
4
+ def r(partial, locals = {})
5
+ render :partial => partial, :locals => locals
6
+ end
7
+
8
+ def bd(partial, locals = {})
9
+ r "brain_damage/#{partial}", :locals => locals
10
+ end
11
+
12
+ def bd_id(prefix = nil)
13
+ prefix = "#{prefix}-" if prefix
14
+ "#{prefix}brain-damage-#{(0...16).map { (65 + rand(26)).chr }.join.downcase}"
15
+ end
16
+
17
+ def bd_actions(locals = {}, &block)
18
+ locals = {:show => false, :delete => true, :edit => true, :block => block}.merge(locals)
19
+ render :partial => 'brain_damage/shared/actions', :locals => locals
20
+ end
21
+
22
+ def ajax_sensible_field_wrapper(object, method, show = true, html = {})
23
+ html[:tag] ||= 'tr'
24
+ html[:class] ||= ''
25
+ html[:class] += ' sensible-to-ajax'
26
+
27
+ content_tag(html[:tag], { :class => html[:class], :data => { :ajax_sensibility_field => method }}) do
28
+ yield if block_given? and show
29
+ end
30
+ end
31
+
32
+ def name_for_input_tag(attribute_name, prefix = nil)
33
+ if prefix
34
+ return "#{prefix}[#{attribute_name}]"
35
+ end
36
+
37
+ attribute_name
38
+ end
39
+
40
+ def t_or_c(string)
41
+ return t string if I18n.exists? string
42
+
43
+ common = "common.#{string.split('.').last}"
44
+ return t common if I18n.exists? common
45
+
46
+ entities = "entities.#{string.split('.').last}"
47
+ return t entities if I18n.exists? entities
48
+
49
+ t string
50
+ end
51
+
52
+ def ct(string)
53
+ string = t_or_c(string)
54
+
55
+ if string == string.upcase
56
+ string
57
+ else
58
+ string.capitalize
59
+ end
60
+ end
61
+
62
+ def cet(string)
63
+ string = t_or_c(string)
64
+ if string == string.upcase
65
+ string
66
+ else
67
+ string.capitalize
68
+ end
69
+ end
70
+
71
+ def T(string)
72
+ t_or_c(string).upcase
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,3 @@
1
+ module BrainDamage
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,37 @@
1
+ module BrainDamage
2
+ class FullGenerator < Rails::Generators::Base
3
+ class_option :descriptions, desc: "The .rb files", :optional => true, :default => '*'
4
+ class_option :destroy, desc: "Destroy instead of creat", :optional => true, :default => false
5
+ class_option :force, desc: "Rewrite files", :optional => true, :default => false
6
+
7
+ def just_do_it
8
+ action = options[:destroy] ? 'd' : 'g'
9
+
10
+ descriptions = if options[:descriptions] == '*'
11
+ then
12
+ Dir["desc/*"].map { |description|
13
+ file_name = description.split('/').last
14
+ if file_name =~ /\d+\./ then
15
+ file_name
16
+ else
17
+ nil
18
+ end
19
+ }.reject(&:nil?)
20
+ else
21
+ options[:descriptions].split(',').map(&:strip)
22
+ end
23
+
24
+ descriptions.each do |description|
25
+ add = if options[:force]
26
+ '--force'
27
+ else
28
+ ''
29
+ end
30
+
31
+ cmd = "rails #{action} brain_damage:resource --description=#{description} #{add}"
32
+ puts cmd
33
+ spawn cmd
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,45 @@
1
+ require_relative '../templateable/class_templateable'
2
+
3
+ module BrainDamage
4
+ class ControllerGenerator < Templateable::ClassTemplateable
5
+ attr_accessor :set_member_before_action_list
6
+
7
+ def initialize(resource, options = {})
8
+ @template_file = 'controller.rb'
9
+ @set_member_before_action_list = [:show, :edit, :update, :destroy]
10
+ super
11
+ end
12
+
13
+ def generate
14
+ add_before_filters
15
+ render
16
+ end
17
+
18
+ def add_before_filters
19
+ @parser.class_method_calls[:after_class_definition] << RubySimpleParser::CodeLine.new(render_erb_string('before_action :set_<%= singular_table_name %>, only: <%= set_member_before_action_list.inspect %>').indent)
20
+ end
21
+
22
+ def attribute_white_list
23
+ @resource.fields.values.map(&:attr_white_list).reject(&:nil?).sort { |field_a, field_b|
24
+ is_hash_a = (field_a.index '=>') || 0
25
+ is_hash_b = (field_b.index '=>') || 0
26
+
27
+ if is_hash_a == is_hash_b
28
+ field_a <=> field_b
29
+ else
30
+ is_hash_a <=> is_hash_b
31
+ end
32
+
33
+ }.join(', ')
34
+ end
35
+
36
+ def always_overwrite_methods
37
+ [render_erb_string("<%= singular_table_name %>_params").to_sym]
38
+ end
39
+
40
+ private
41
+ def dir
42
+ __dir__
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,9 @@
1
+ class <%= controller_class_name %>Controller < ApplicationController
2
+ <%= leading_class_method_calls %>
3
+
4
+ <%= public_methods %>
5
+
6
+ private
7
+ <%= private_methods %>
8
+
9
+ end
@@ -0,0 +1,3 @@
1
+ def get_partial_locals
2
+ params['partial_locals'] || {}
3
+ end
@@ -0,0 +1,3 @@
1
+ def set_<%= singular_table_name %>
2
+ @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
3
+ end
@@ -0,0 +1,3 @@
1
+ def <%= "#{singular_table_name}_params" %>
2
+ params.require(:<%= singular_table_name %>).permit(<%= attribute_white_list %>)
3
+ end
@@ -0,0 +1,21 @@
1
+ def create
2
+ @<%= singular_table_name %> = <%= orm_class.build(class_name, "#{singular_table_name}_params") %>
3
+ <%= template_hook('after controller/create/save').indent 1 %>
4
+ @<%= orm_instance.save %>
5
+
6
+ respond_to do |format|
7
+ format.json {
8
+ partial = params[:partial_to_show] ? params[:partial_to_show] : '<%= plural_table_name %>/list/item'
9
+ render json: { html: render_to_string(partial: partial, formats: [:html], locals: get_partial_locals ),
10
+ errors: @<%= singular_table_name %>.errors }
11
+ }
12
+
13
+ format.html {
14
+ if @<%= singular_table_name %>.errors.empty?
15
+ redirect_to @<%= singular_table_name %>, notice: t('common.created').capitalize
16
+ else
17
+ render :new
18
+ end
19
+ }
20
+ end
21
+ end
@@ -0,0 +1,14 @@
1
+ def destroy
2
+ @<%= orm_instance.destroy %>
3
+
4
+ respond_to do |format|
5
+ format.json {
6
+ render nothing: true, status: 200
7
+ }
8
+
9
+ format.html {
10
+ redirect_to <%= index_helper %>_url, notice: t('common.destroyed').capitalize
11
+ }
12
+ end
13
+
14
+ end
@@ -0,0 +1,3 @@
1
+ def index
2
+ @<%= plural_table_name %> = <%= orm_class.all(class_name) %>
3
+ end
@@ -0,0 +1,3 @@
1
+ def new
2
+ @<%= singular_table_name %> = <%= orm_class.build(class_name) %>
3
+ end
@@ -0,0 +1,25 @@
1
+ def update
2
+ @<%= orm_instance.name %>.assign_attributes <%= singular_table_name %>_params
3
+ <%= template_hook('before controller/update/save').indent 1 %>
4
+ @<%= orm_instance.save %>
5
+
6
+ respond_to do |format|
7
+ format.json {
8
+ partial = params[:partial_to_show] ? params[:partial_to_show] : '<%= plural_table_name %>/list/item'
9
+ render json: { html: render_to_string( partial: partial, formats: [:html], locals: get_partial_locals ),
10
+ errors: @<%= singular_table_name %>.errors }
11
+ }
12
+
13
+ format.html {
14
+ if @<%= singular_table_name %>.errors.empty?
15
+ redirect_to @<%= singular_table_name %>, notice: t('common.updated').capitalize
16
+ else
17
+ if params[:request_source]
18
+ render params[:request_source]
19
+ else
20
+ render :edit
21
+ end
22
+ end
23
+ }
24
+ end
25
+ end
@@ -0,0 +1,163 @@
1
+ # coding: utf-8
2
+ require_relative 'field_white_list'
3
+ require_relative 'relation/base'
4
+ require_relative 'templateable/base'
5
+ require_relative 'views/factory'
6
+
7
+ module BrainDamage
8
+ class Field < Templateable::Base
9
+ attr_reader :name
10
+ attr_reader :relation
11
+ attr_reader :resource
12
+
13
+ attr_writer :attr_white_list
14
+ attr_accessor :generated_attribute
15
+
16
+ def initialize(args = {})
17
+ @displays = {}
18
+ @inputs = {}
19
+ @labels = {}
20
+
21
+ @name = args[:name]
22
+ @resource = args[:resource]
23
+ @invisible = false
24
+ end
25
+
26
+ def invisible
27
+ self.display = nil
28
+ self.input = nil
29
+ self.attr_white_list = ''
30
+ @invisible = true
31
+ end
32
+
33
+ def invisible?
34
+ @invisible
35
+ end
36
+
37
+ def relation= (options)
38
+ options = { type: options } if options.is_a? Symbol
39
+ options[:field] = self
40
+ @relation = Relation.create (@resource.column_relation_type(@name) || options[:type]), options
41
+ end
42
+
43
+ def foreign?
44
+ @relation.is_a? Relation
45
+ end
46
+
47
+ def model_lines
48
+ return @relation.model_lines if @relation
49
+ []
50
+ end
51
+
52
+ def attr_white_list
53
+ @field_white_list = FieldWhiteList.new(self, @attr_white_list) unless @field_white_list
54
+ @field_white_list.list
55
+ end
56
+
57
+ def inline_editable(options = {})
58
+ add_display :inline_editable, options
59
+ end
60
+
61
+ def display=(options)
62
+ add_display :default, options
63
+ end
64
+
65
+ def input=(options)
66
+ add_input :default, options
67
+ end
68
+
69
+ def label=(options)
70
+ add_label :default, options
71
+ end
72
+
73
+ def has_input?
74
+ @inputs.values.reject(&:nil?).any?
75
+ end
76
+
77
+ def has_display?
78
+ @displays.values.reject(&:nil?).any?
79
+ end
80
+
81
+ def inputable?(identifier = :default)
82
+ input = input identifier
83
+ input and input.show?
84
+ end
85
+
86
+ def displayable?(identifier = :default)
87
+ display = display identifier
88
+ display and display.show?
89
+ end
90
+
91
+ def add_display(identifier, options)
92
+ if options.nil?
93
+ @displays[identifier] = false
94
+ else
95
+ @displays[identifier] = View::Factory.create :display, self, options
96
+ end
97
+ end
98
+
99
+ def add_input(identifier, options)
100
+ if options.nil?
101
+ @inputs[identifier] = false
102
+ else
103
+ @inputs[identifier] = View::Factory.create :input, self, options
104
+ end
105
+ end
106
+
107
+ def add_label(identifier, options)
108
+ if options.nil?
109
+ @labels[identifier] = false
110
+ else
111
+ @labels[identifier] = View::Factory.create :label, self, options
112
+ end
113
+ end
114
+
115
+ def map_display(identifier, *targets)
116
+ targets.each do |target|
117
+ @displays[target] = @displays[identifier]
118
+ end
119
+ end
120
+
121
+ def map_input(identifier, *targets)
122
+ targets.each do |target|
123
+ @inputs[target] = @inputs[identifier]
124
+ end
125
+ end
126
+
127
+ def label(scope = :default)
128
+ if @labels[scope]
129
+ return @labels[scope]
130
+
131
+ elsif scope == :default
132
+ self.label = :default
133
+
134
+ end
135
+
136
+ label :default
137
+ end
138
+
139
+ def input(identifier = :default)
140
+ if @inputs.has_key? identifier
141
+ @inputs[identifier]
142
+ elsif identifier != :default
143
+ input :default
144
+ end
145
+ end
146
+
147
+ def display(identifier = :default)
148
+ if @displays.has_key? identifier
149
+ @displays[identifier]
150
+ elsif identifier != :default
151
+ display :default
152
+ end
153
+ end
154
+
155
+ def field_type
156
+ if generated_attribute
157
+ generated_attribute.field_type
158
+ else
159
+ :text_field
160
+ end
161
+ end
162
+ end
163
+ end