abstracted 0.0.6 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (224) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Gemfile.lock +11 -8
  4. data/app/assets/javascripts/abstract_resources.js +29 -25
  5. data/app/assets/javascripts/crud.js.coffee +174 -29
  6. data/app/assets/javascripts/initializers.js.coffee +403 -58
  7. data/app/assets/javascripts/pagescrolling.js.coffee +92 -0
  8. data/app/assets/stylesheets/abstract_resources.css +5 -0
  9. data/app/assets/stylesheets/scaffold.css +4 -2
  10. data/app/assets/stylesheets/selectize.css.scss +0 -0
  11. data/app/controllers/abstract_resources_controller.rb +473 -134
  12. data/app/controllers/application_controller.rb +22 -7
  13. data/app/helpers/abstract_resources_helper.rb +515 -9
  14. data/app/helpers/fab_button_helper.rb +82 -0
  15. data/app/models/abstract_resource.rb +141 -89
  16. data/app/models/ancestry_abstract_resource.rb +27 -0
  17. data/app/models/concerns/roleable.rb +1 -1
  18. data/app/policies/abstract_resource_policy.rb +25 -0
  19. data/app/views/abstract_resources/_title.html.haml +2 -0
  20. data/app/views/abstract_resources/activate.html.haml +5 -0
  21. data/app/views/abstract_resources/attach.html.haml +6 -0
  22. data/app/views/abstract_resources/deactivate.html.haml +5 -0
  23. data/app/views/abstract_resources/defer.html.haml +5 -0
  24. data/app/views/abstract_resources/destroy.js.haml +2 -1
  25. data/app/views/abstract_resources/detach.html.haml +5 -0
  26. data/app/views/abstract_resources/edit.html.haml +4 -9
  27. data/app/views/abstract_resources/error.html.haml +2 -0
  28. data/app/views/abstract_resources/error.js.haml +2 -0
  29. data/app/views/abstract_resources/index.html.haml +27 -0
  30. data/app/views/abstract_resources/index.js.haml +2 -0
  31. data/app/views/abstract_resources/new.html.haml +4 -10
  32. data/app/views/abstract_resources/prefer.html.haml +5 -0
  33. data/app/views/abstract_resources/print.html.haml +2 -0
  34. data/app/views/abstract_resources/print.js.haml +2 -0
  35. data/app/views/abstract_resources/show.html.haml +5 -11
  36. data/app/views/layouts/_messages.html.haml +1 -0
  37. data/app/views/layouts/_navigation.html.haml +13 -0
  38. data/bower.json +34 -0
  39. data/config/initializers/exception.rb +19 -0
  40. data/config/initializers/pundit.rb +22 -0
  41. data/config/routes.rb +24 -0
  42. data/lib/abstracted.rb +3 -0
  43. data/lib/abstracted/version.rb +1 -1
  44. data/lib/abstracted_responder.rb +1 -0
  45. data/lib/exceptions.rb +61 -0
  46. data/vendor/assets/components/jquery/.bower.json +38 -0
  47. data/vendor/assets/components/jquery/MIT-LICENSE.txt +21 -0
  48. data/vendor/assets/components/jquery/bower.json +28 -0
  49. data/vendor/assets/components/jquery/dist/jquery.js +9210 -0
  50. data/vendor/assets/components/jquery/dist/jquery.min.js +5 -0
  51. data/vendor/assets/components/jquery/dist/jquery.min.map +1 -0
  52. data/vendor/assets/components/jquery/src/ajax.js +786 -0
  53. data/vendor/assets/components/jquery/src/ajax/jsonp.js +89 -0
  54. data/vendor/assets/components/jquery/src/ajax/load.js +75 -0
  55. data/vendor/assets/components/jquery/src/ajax/parseJSON.js +13 -0
  56. data/vendor/assets/components/jquery/src/ajax/parseXML.js +28 -0
  57. data/vendor/assets/components/jquery/src/ajax/script.js +64 -0
  58. data/vendor/assets/components/jquery/src/ajax/var/nonce.js +5 -0
  59. data/vendor/assets/components/jquery/src/ajax/var/rquery.js +3 -0
  60. data/vendor/assets/components/jquery/src/ajax/xhr.js +136 -0
  61. data/vendor/assets/components/jquery/src/attributes.js +11 -0
  62. data/vendor/assets/components/jquery/src/attributes/attr.js +141 -0
  63. data/vendor/assets/components/jquery/src/attributes/classes.js +158 -0
  64. data/vendor/assets/components/jquery/src/attributes/prop.js +94 -0
  65. data/vendor/assets/components/jquery/src/attributes/support.js +35 -0
  66. data/vendor/assets/components/jquery/src/attributes/val.js +161 -0
  67. data/vendor/assets/components/jquery/src/callbacks.js +205 -0
  68. data/vendor/assets/components/jquery/src/core.js +502 -0
  69. data/vendor/assets/components/jquery/src/core/access.js +60 -0
  70. data/vendor/assets/components/jquery/src/core/init.js +123 -0
  71. data/vendor/assets/components/jquery/src/core/parseHTML.js +39 -0
  72. data/vendor/assets/components/jquery/src/core/ready.js +97 -0
  73. data/vendor/assets/components/jquery/src/core/var/rsingleTag.js +4 -0
  74. data/vendor/assets/components/jquery/src/css.js +450 -0
  75. data/vendor/assets/components/jquery/src/css/addGetHookIf.js +22 -0
  76. data/vendor/assets/components/jquery/src/css/curCSS.js +57 -0
  77. data/vendor/assets/components/jquery/src/css/defaultDisplay.js +70 -0
  78. data/vendor/assets/components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  79. data/vendor/assets/components/jquery/src/css/support.js +96 -0
  80. data/vendor/assets/components/jquery/src/css/swap.js +28 -0
  81. data/vendor/assets/components/jquery/src/css/var/cssExpand.js +3 -0
  82. data/vendor/assets/components/jquery/src/css/var/getStyles.js +12 -0
  83. data/vendor/assets/components/jquery/src/css/var/isHidden.js +13 -0
  84. data/vendor/assets/components/jquery/src/css/var/rmargin.js +3 -0
  85. data/vendor/assets/components/jquery/src/css/var/rnumnonpx.js +5 -0
  86. data/vendor/assets/components/jquery/src/data.js +178 -0
  87. data/vendor/assets/components/jquery/src/data/Data.js +181 -0
  88. data/vendor/assets/components/jquery/src/data/accepts.js +20 -0
  89. data/vendor/assets/components/jquery/src/data/var/data_priv.js +5 -0
  90. data/vendor/assets/components/jquery/src/data/var/data_user.js +5 -0
  91. data/vendor/assets/components/jquery/src/deferred.js +149 -0
  92. data/vendor/assets/components/jquery/src/deprecated.js +13 -0
  93. data/vendor/assets/components/jquery/src/dimensions.js +50 -0
  94. data/vendor/assets/components/jquery/src/effects.js +648 -0
  95. data/vendor/assets/components/jquery/src/effects/Tween.js +114 -0
  96. data/vendor/assets/components/jquery/src/effects/animatedSelector.js +13 -0
  97. data/vendor/assets/components/jquery/src/event.js +868 -0
  98. data/vendor/assets/components/jquery/src/event/ajax.js +13 -0
  99. data/vendor/assets/components/jquery/src/event/alias.js +39 -0
  100. data/vendor/assets/components/jquery/src/event/support.js +9 -0
  101. data/vendor/assets/components/jquery/src/exports/amd.js +24 -0
  102. data/vendor/assets/components/jquery/src/exports/global.js +32 -0
  103. data/vendor/assets/components/jquery/src/intro.js +44 -0
  104. data/vendor/assets/components/jquery/src/jquery.js +37 -0
  105. data/vendor/assets/components/jquery/src/manipulation.js +580 -0
  106. data/vendor/assets/components/jquery/src/manipulation/_evalUrl.js +18 -0
  107. data/vendor/assets/components/jquery/src/manipulation/support.js +32 -0
  108. data/vendor/assets/components/jquery/src/manipulation/var/rcheckableType.js +3 -0
  109. data/vendor/assets/components/jquery/src/offset.js +207 -0
  110. data/vendor/assets/components/jquery/src/outro.js +1 -0
  111. data/vendor/assets/components/jquery/src/queue.js +142 -0
  112. data/vendor/assets/components/jquery/src/queue/delay.js +22 -0
  113. data/vendor/assets/components/jquery/src/selector-native.js +172 -0
  114. data/vendor/assets/components/jquery/src/selector-sizzle.js +14 -0
  115. data/vendor/assets/components/jquery/src/selector.js +1 -0
  116. data/vendor/assets/components/jquery/src/serialize.js +111 -0
  117. data/vendor/assets/components/jquery/src/sizzle/dist/sizzle.js +2067 -0
  118. data/vendor/assets/components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  119. data/vendor/assets/components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  120. data/vendor/assets/components/jquery/src/traversing.js +199 -0
  121. data/vendor/assets/components/jquery/src/traversing/findFilter.js +100 -0
  122. data/vendor/assets/components/jquery/src/traversing/var/rneedsContext.js +6 -0
  123. data/vendor/assets/components/jquery/src/var/arr.js +3 -0
  124. data/vendor/assets/components/jquery/src/var/class2type.js +4 -0
  125. data/vendor/assets/components/jquery/src/var/concat.js +5 -0
  126. data/vendor/assets/components/jquery/src/var/hasOwn.js +5 -0
  127. data/vendor/assets/components/jquery/src/var/indexOf.js +5 -0
  128. data/vendor/assets/components/jquery/src/var/pnum.js +3 -0
  129. data/vendor/assets/components/jquery/src/var/push.js +5 -0
  130. data/vendor/assets/components/jquery/src/var/rnotwhite.js +3 -0
  131. data/vendor/assets/components/jquery/src/var/slice.js +5 -0
  132. data/vendor/assets/components/jquery/src/var/strundefined.js +3 -0
  133. data/vendor/assets/components/jquery/src/var/support.js +4 -0
  134. data/vendor/assets/components/jquery/src/var/toString.js +5 -0
  135. data/vendor/assets/components/jquery/src/wrap.js +79 -0
  136. data/vendor/assets/components/microplugin/.bower.json +38 -0
  137. data/vendor/assets/components/microplugin/.gitignore +2 -0
  138. data/vendor/assets/components/microplugin/.npmignore +3 -0
  139. data/vendor/assets/components/microplugin/README.md +115 -0
  140. data/vendor/assets/components/microplugin/bower.json +22 -0
  141. data/vendor/assets/components/microplugin/package.json +15 -0
  142. data/vendor/assets/components/microplugin/src/microplugin.js +135 -0
  143. data/vendor/assets/components/selectize/.bower.json +60 -0
  144. data/vendor/assets/components/selectize/.gitignore +5 -0
  145. data/vendor/assets/components/selectize/LICENSE +202 -0
  146. data/vendor/assets/components/selectize/README.md +105 -0
  147. data/vendor/assets/components/selectize/bower.json +40 -0
  148. data/vendor/assets/components/selectize/dist/css/selectize.bootstrap2.css +487 -0
  149. data/vendor/assets/components/selectize/dist/css/selectize.bootstrap3.css +401 -0
  150. data/vendor/assets/components/selectize/dist/css/selectize.css +317 -0
  151. data/vendor/assets/components/selectize/dist/css/selectize.default.css +387 -0
  152. data/vendor/assets/components/selectize/dist/css/selectize.legacy.css +364 -0
  153. data/vendor/assets/components/selectize/dist/js/selectize.js +3058 -0
  154. data/vendor/assets/components/selectize/dist/js/selectize.min.js +3 -0
  155. data/vendor/assets/components/selectize/dist/js/standalone/selectize.js +3667 -0
  156. data/vendor/assets/components/selectize/dist/js/standalone/selectize.min.js +3 -0
  157. data/vendor/assets/components/selectize/dist/less/plugins/drag_drop.less +16 -0
  158. data/vendor/assets/components/selectize/dist/less/plugins/dropdown_header.less +20 -0
  159. data/vendor/assets/components/selectize/dist/less/plugins/optgroup_columns.less +17 -0
  160. data/vendor/assets/components/selectize/dist/less/plugins/remove_button.less +37 -0
  161. data/vendor/assets/components/selectize/dist/less/selectize.bootstrap2.less +161 -0
  162. data/vendor/assets/components/selectize/dist/less/selectize.bootstrap3.less +150 -0
  163. data/vendor/assets/components/selectize/dist/less/selectize.default.less +84 -0
  164. data/vendor/assets/components/selectize/dist/less/selectize.legacy.less +75 -0
  165. data/vendor/assets/components/selectize/dist/less/selectize.less +295 -0
  166. data/vendor/assets/components/selectize/karma.conf.js +107 -0
  167. data/vendor/assets/components/sifter/.bower.json +44 -0
  168. data/vendor/assets/components/sifter/.gitignore +3 -0
  169. data/vendor/assets/components/sifter/.npmignore +4 -0
  170. data/vendor/assets/components/sifter/README.md +149 -0
  171. data/vendor/assets/components/sifter/bower.json +23 -0
  172. data/vendor/assets/components/sifter/package.json +48 -0
  173. data/vendor/assets/components/sifter/sifter.js +471 -0
  174. data/vendor/assets/components/sifter/sifter.min.js +2 -0
  175. data/vendor/assets/components/sweetalert/.bower.json +36 -0
  176. data/vendor/assets/components/sweetalert/.editorconfig +11 -0
  177. data/vendor/assets/components/sweetalert/.gitignore +5 -0
  178. data/vendor/assets/components/sweetalert/.jshintrc +11 -0
  179. data/vendor/assets/components/sweetalert/.travis.yml +6 -0
  180. data/vendor/assets/components/sweetalert/LICENSE +22 -0
  181. data/vendor/assets/components/sweetalert/README.md +157 -0
  182. data/vendor/assets/components/sweetalert/bower.json +25 -0
  183. data/vendor/assets/components/sweetalert/dev/gulpfile-wrap-template.js +18 -0
  184. data/vendor/assets/components/sweetalert/dev/ie9.css +23 -0
  185. data/vendor/assets/components/sweetalert/dev/loader-animation.css +209 -0
  186. data/vendor/assets/components/sweetalert/dev/modules/default-params.js +26 -0
  187. data/vendor/assets/components/sweetalert/dev/modules/handle-click.js +128 -0
  188. data/vendor/assets/components/sweetalert/dev/modules/handle-dom.js +161 -0
  189. data/vendor/assets/components/sweetalert/dev/modules/handle-key.js +73 -0
  190. data/vendor/assets/components/sweetalert/dev/modules/handle-swal-dom.js +148 -0
  191. data/vendor/assets/components/sweetalert/dev/modules/injected-html.js +69 -0
  192. data/vendor/assets/components/sweetalert/dev/modules/set-params.js +221 -0
  193. data/vendor/assets/components/sweetalert/dev/modules/utils.js +71 -0
  194. data/vendor/assets/components/sweetalert/dev/sweetalert.es6.js +311 -0
  195. data/vendor/assets/components/sweetalert/dev/sweetalert.scss +648 -0
  196. data/vendor/assets/components/sweetalert/dist/sweetalert-dev.js +1281 -0
  197. data/vendor/assets/components/sweetalert/dist/sweetalert.css +932 -0
  198. data/vendor/assets/components/sweetalert/dist/sweetalert.min.js +1 -0
  199. data/vendor/assets/components/sweetalert/example/example.css +442 -0
  200. data/vendor/assets/components/sweetalert/example/example.scss +580 -0
  201. data/vendor/assets/components/sweetalert/example/images/logo_big.png +0 -0
  202. data/vendor/assets/components/sweetalert/example/images/logo_big@2x.png +0 -0
  203. data/vendor/assets/components/sweetalert/example/images/logo_small.png +0 -0
  204. data/vendor/assets/components/sweetalert/example/images/logo_small@2x.png +0 -0
  205. data/vendor/assets/components/sweetalert/example/images/te-logo-small.svg +12 -0
  206. data/vendor/assets/components/sweetalert/example/images/thumbs-up.jpg +0 -0
  207. data/vendor/assets/components/sweetalert/example/images/vs_icon.png +0 -0
  208. data/vendor/assets/components/sweetalert/example/images/vs_icon@2x.png +0 -0
  209. data/vendor/assets/components/sweetalert/gulpfile.js +97 -0
  210. data/vendor/assets/components/sweetalert/index.html +584 -0
  211. data/vendor/assets/components/sweetalert/package.json +45 -0
  212. data/vendor/assets/components/sweetalert/sweetalert.gif +0 -0
  213. data/vendor/assets/components/sweetalert/test/index.html +20 -0
  214. data/vendor/assets/components/sweetalert/test/tests.js +143 -0
  215. data/vendor/assets/components/sweetalert/themes/facebook/facebook.css +111 -0
  216. data/vendor/assets/components/sweetalert/themes/facebook/facebook.scss +146 -0
  217. data/vendor/assets/components/sweetalert/themes/google/google.css +115 -0
  218. data/vendor/assets/components/sweetalert/themes/google/google.scss +148 -0
  219. data/vendor/assets/components/sweetalert/themes/twitter/twitter.css +140 -0
  220. data/vendor/assets/components/sweetalert/themes/twitter/twitter.scss +177 -0
  221. metadata +214 -5
  222. data/abstracted-0.0.4.gem +0 -0
  223. data/abstracted.gemspec +0 -51
  224. data/app/views/abstract_resources/index.html.erb +0 -1
@@ -0,0 +1,82 @@
1
+ module FabButtonHelper
2
+
3
+ # FAB
4
+ # Fixed Action Button
5
+ def build_fab_button options={}
6
+ list = <<LISTEND
7
+ <li><a class="btn-floating red"><i class="material-icons">insert_chart</i></i></a></li>
8
+ <li><a class="btn-floating yellow darken-1"><i class="material-icons">format_quote</i></a></li>
9
+ <li><a class="btn-floating green"><i class="material-icons">publish</i></a></li>
10
+ <li><a class="btn-floating blue"><i class="material-icons">attach_file</i></a></li>
11
+ LISTEND
12
+
13
+ button = '<a class="btn-floating btn-large blue"> <i class="large material-icons">mode_edit</i> </a>'
14
+ menu = '<div class="fixed-action-btn" style="bottom: 45px; right: 24px;">%s <ul> %s </ul> </div>'
15
+
16
+ options[:button] ||= button
17
+ options[:list] ||= list
18
+ options[:menu] ||= menu
19
+ (options[:menu] % [ options[:button], options[:list]]).html_safe
20
+ end
21
+
22
+ def fab_button_options
23
+ @fab_button_options ||= {} #raise "fab_button_options nil - not what you intended, I guess?!"
24
+ end
25
+ # do a 'before_action :set_fab_button_options (that returns a Hash with
26
+ # list elements like:
27
+ # { items: { print: { ajax: 'get', icon: 'list', class: 'blue lighten-2', url: '/stock_items/print?print_list=true' } } })',
28
+ # add a special build_fab_options on your project - or use this default one
29
+ #
30
+ #
31
+ # AJAX: <a data-ajax="post" data-remote="false" data-url="%s" class="btn-floating green"><i class="material-icons">publish</i></a>
32
+ #
33
+ def build_fab_options resource, options={}
34
+ lst = []
35
+
36
+ # if items are empty - dream them up
37
+ options[:items] ||= {}
38
+
39
+ options[:items][:list] ||= { ajax: 'get', icon: 'list', class: 'blue', url: resources_url(resources, controller: params[:controller]), oxremote: 'false' }
40
+ case options[:action]
41
+ when 'new','create'
42
+ options[:items].merge! add: { ajax: 'get', icon: 'add', class: 'green lighten-1', url: new_resource_url, oxremote: 'false' }
43
+ options[:items].merge! publish: { ajax: 'post', icon: 'publish', class: 'green', url: resources_url(resources, controller: params[:controller]), oxremote: 'false' }
44
+
45
+ options[:button] ||= "<a class='btn-floating btn-large green'><i class='large material-icons'>publish</i> </a>"
46
+ when 'show'
47
+ options[:items].merge! add: { ajax: 'get', icon: 'add', class: 'green lighten-1', url: new_resource_url, oxremote: 'false' }
48
+ options[:items].merge! edit: { ajax: 'get', icon: 'edit', class: 'yellow darken-2', url: edit_resource_url, oxremote: 'false' }
49
+
50
+ options[:button] ||= "<a class='btn-floating btn-large blue'><i class='fab-button large material-icons'>mode_edit</i> </a>"
51
+ when 'edit', 'update'
52
+ options[:items].merge! add: { ajax: 'get', icon: 'add', class: 'green lighten-1', url: new_resource_url , oxremote: 'false'}
53
+ options[:items].merge! publish: { ajax: 'post', icon: 'publish', class: 'green', url: resource_url, oxremote: 'false' }
54
+ options[:button] ||= "<a class='btn-floating btn-large green'><i class='large material-icons'>publish</i> </a>"
55
+
56
+ when 'index'
57
+ options[:items].merge! add: { ajax: 'get', icon: 'add', class: 'green lighten-1', url: new_resource_url(controller: params[:controller]), oxremote: 'false' } unless options[:items].keys.include? :add
58
+
59
+ options[:button] ||= "<a class='btn-floating btn-large blue'><i class='fab-button large material-icons'>mode_edit</i> </a>"
60
+ end
61
+
62
+ if !options[:items].nil?
63
+ options[:items].each do |k,item|
64
+ item[:ajax] ||= 'get'
65
+ item[:oxremote] ||= 'false'
66
+ item[:class] ||= ''
67
+ item[:icon] ||= ''
68
+ item[:url] ||= ''
69
+ item[:browser] ||= ''
70
+ item[:remote] ||= 'false'
71
+ item[:method] ||= item[:ajax]
72
+ str = []
73
+ (item.keys - [:class,:icon]).each do |key|
74
+ str << " data-%s='%s' " % [ key,item[key] ]
75
+ end
76
+ lst << "<li><a class='fab-button btn-floating %s' %s><i class='material-icons'>%s</i></a></li>" % [ item[:class], str.join, item[:icon] ]
77
+ end
78
+ end
79
+ options[:list] ||= lst.join
80
+ options
81
+ end
82
+ end
@@ -1,36 +1,63 @@
1
1
  class AbstractResource < ActiveRecord::Base
2
2
  self.abstract_class=true
3
+
4
+ attr_accessor :current_user
5
+
6
+ def self.logit( log_type, msg )
7
+ Rails.logger.send(log_type, "[OXEN] #{Time.now} [#{log_type.to_s}] #{msg}")
8
+ end
9
+
10
+ def logit( log_type, msg )
11
+ Rails.logger.send(log_type, "[OXEN] #{Time.now} [#{log_type.to_s}] #{msg}")
12
+ end
13
+
3
14
  #
4
- # include Exceptions
5
- # include PrintEngine
6
- #
7
- # belongs_to :ox
8
- # has_many :eventables, as: :eventable
9
- #
10
- # #
11
- # # translate the key
12
- # def self.oxt(key, *args)
13
- # I18n.t(key, args[0])
14
- # end
15
- #
16
- # def oxt(key, *args)
17
- # self.class.oxt(key, args[0])
18
- # end
19
- #
20
- # #
21
- # # when implementing searches on models (using params)
22
- # def self.find_with_params(params=nil)
23
- # all
24
- # end
25
- #
26
- #
27
- # def self.logit( log_type, msg )
28
- # Rails.logger.send(log_type, "[OXEN] #{Time.now} [#{log_type.to_s}] #{msg}")
29
- # end
15
+ # this generic search needs a bit more work
16
+ # but it is a ok first draft
17
+ #
18
+ def self.search(lot, query, fields="id")
19
+ fields = fields.join(",") if fields.is_a? Array
20
+ population = lot.pluck fields
21
+ elements = query.split(' ')
22
+ constraints = {and: [], or: [], not: []}
23
+ elements.each do |element|
24
+ case element.slice 0
25
+ when '+'; constraints[:and] += population.collect{ |k,v| k if v =~ /#{element[1..-1]}/i }.compact.flatten
26
+ when '-'; constraints[:not] += population.collect{ |k,v| k if v =~ /#{element[1..-1]}/i }.compact.flatten
27
+ when '*'; constraints[:or] += population.collect{ |k,v| k if b=="#{element[1..-1]}" }.compact.flatten
28
+ else; constraints[:or] += population.collect{ |k,v| k if v =~ /#{element}/i }.compact.flatten
29
+ end
30
+ end
31
+ population = constraints[:or].empty? ? population.collect{|r| r[0]} : constraints[:or]
32
+ population = population & constraints[:and] if constraints[:and].any?
33
+ population -= constraints[:not].uniq if constraints[:not].any?
34
+ population = [] if constraints[:or].empty? and constraints[:and].empty?
35
+ lot.where id: population
36
+ end
37
+
38
+ def self.arrange_array(options={}, hash=nil)
39
+ hash ||= arrange(options)
40
+
41
+ arr = []
42
+ hash.each do |node, children|
43
+ arr << node
44
+ arr += arrange_array(options, children) unless children.nil?
45
+ end
46
+ arr
47
+ end
48
+
49
+ def possible_parents
50
+ prtns = self.arrange_array(:order => 'name')
51
+ return new_record? ? prtns : prtns - subtree
52
+ end
53
+
54
+ def resource_name
55
+ self.class.to_s.underscore.pluralize
56
+ end
57
+
30
58
  #
31
- # def logit( log_type, msg )
32
- # Rails.logger.send(log_type, "[OXEN] #{Time.now} [#{log_type.to_s}] #{msg}")
33
- # end
59
+ # include Exceptions
60
+ include PrintEngine
34
61
  #
35
62
  #
36
63
  #
@@ -40,17 +67,17 @@ class AbstractResource < ActiveRecord::Base
40
67
  # end
41
68
  #
42
69
  # # implement on relevant models
43
- # def default_record_template
44
- # '/record.html.haml'
45
- # end
46
- #
47
- # def self.default_list_template
48
- # 'list.html.haml'
49
- # end
50
- #
51
- # def self.default_label_template
52
- # 'label.html.haml'
53
- # end
70
+ def default_record_template
71
+ 'accounts/record.html.haml'
72
+ end
73
+
74
+ def self.default_list_template
75
+ 'list.html.haml'
76
+ end
77
+
78
+ def self.default_label_template
79
+ 'label.html.haml'
80
+ end
54
81
  #
55
82
  # def print_label options={}
56
83
  # params = {}
@@ -64,59 +91,84 @@ class AbstractResource < ActiveRecord::Base
64
91
  # self.class.print [self], params
65
92
  # end
66
93
  #
67
- # def print_record(options={})
68
- # params = {}
69
- # params[:print_job] = {}
70
- # params[:print_job][:view_template_path] = options[:template] || default_record_template
71
- # params[:print_job][:print_driver] = options[:print_driver] || :pdf
72
- # params[:print_job][:print_format] = options[:print_format] || 'sheet'
73
- # params[:print_job][:paper] = options[:paper] || "A4"
74
- # params[:printer_name] = options[:printer_name]
75
- # params[:user] = options[:user]
76
- # self.class.print [self], params
77
- # end
78
- #
79
- # def self.print_list(options={})
80
- # params = {}
81
- # params[:print_job] = {}
82
- # params[:print_job][:view_template_path] = options[:template] || self.default_list_template
83
- # params[:print_job][:print_driver] = options[:print_driver] || :pdf
84
- # params[:print_job][:print_format] = options[:print_format] || 'list'
85
- # params[:print_job][:paper] = options[:paper] || "A4"
86
- # params[:printer_name] = options[:printer_name]
87
- # params[:user] = options[:user]
88
- # self.print options[:resources], params
89
- # end
94
+ def print_record(options={})
95
+ params = {}
96
+ params[:context] = options[:context]
97
+ options = options[:params]
98
+ params[:print_job] = {}
99
+ params[:print_job][:download] = options[:download] || false
100
+ params[:print_job][:print_driver] = options[:print_driver] || :pdf
101
+ params[:print_job][:print_format] = options[:print_format] || 'sheet'
102
+ params[:print_job][:paper] = options[:paper] || "A4"
103
+ params[:print_job][:view_template_path] = options[:template] || (options[:paper]!="A4" ? self.send("default_#{options[:paper]}_template") : default_record_template)
104
+ params[:printer_name] = options[:printer_name]
105
+ params[:user] = options[:user]
106
+ pj = self.class.print [self], params
107
+ end
108
+ #
109
+ def self.print_list(options={})
110
+ params = {}
111
+ params[:print_job] = {}
112
+ params[:print_job][:download] = options[:download] || false
113
+ params[:print_job][:print_driver] = options[:print_driver] || :pdf
114
+ params[:print_job][:print_format] = options[:print_format] || 'list'
115
+ params[:print_job][:paper] = options[:paper] || "A4"
116
+ params[:print_job][:view_template_path] = options[:template] || self.default_list_template
117
+ params[:printer_name] = options[:printer_name]
118
+ params[:user] = options[:user]
119
+ self.print options[:resources], params
120
+ end
90
121
  #
122
+
123
+
91
124
  # # add the child to an association of children
92
- # def attach child
93
- # case child.class.to_s
94
- # when "Event","WageEvent"
95
- # Eventable.create( event: child, eventable: self) unless child.eventables.include?( self)
96
- # when "Printer"
97
- # Printable.create( printer: child, printable: self) unless child.printables.include?( self)
98
- # else
99
- # children = eval child.class.to_s.underscore.pluralize
100
- # children << child
101
- # end
102
- # end
125
+ # !! remember to implement before_save action on *able tables to meet further foreign_key conditions like account_id, etc
126
+ def attach parent
127
+
128
+ # the ordinary *able table
129
+ parent.send( self.class.to_s.underscore.pluralize) << self
130
+
131
+ # case child.class.to_s
132
+ # when "Event","WageEvent"
133
+ # Eventable.create( event: child, eventable: self) unless child.eventables.include?( self)
134
+ # when "Printer"
135
+ # Printable.create( printer: child, printable: self) unless child.printables.include?( self)
136
+ # else
137
+ # children = eval child.class.to_s.underscore.pluralize
138
+ # children << child
139
+ # end
140
+ rescue
141
+ false
142
+ end
103
143
  #
104
144
  # # remove the child from an association of children
105
- # def detach child
106
- # case child.class.to_s
107
- # when "Event","WageEvent"
108
- # ev = Eventable.where( event: child, eventable: self)
109
- # ev.delete_all
110
- # when "Printer"
111
- # pr = Printable.where( printer: child, printable: self)
112
- # pr.delete_all
113
- # else
114
- # children = eval child.class.to_s.downcase.pluralize
115
- # children.delete child
116
- # end
117
- #
118
- #
119
- # end
145
+ def detach parent
146
+
147
+ # the ordinary *able table
148
+ parent.send( self.class.to_s.underscore.pluralize).delete self
149
+
150
+ # case child.class.to_s
151
+ # when "Event","WageEvent"
152
+ # ev = Eventable.where( event: child, eventable: self)
153
+ # ev.delete_all
154
+ # when "Printer"
155
+ # pr = Printable.where( printer: child, printable: self)
156
+ # pr.delete_all
157
+ # else
158
+ # children = eval child.class.to_s.downcase.pluralize
159
+ # children.delete child
160
+ # end
161
+ rescue
162
+ false
163
+ end
164
+
165
+ def activate
166
+ update_attributes active: true
167
+ end
168
+
169
+ def deactivate
170
+ update_attributes active: false
171
+ end
120
172
 
121
173
 
122
174
  end
@@ -0,0 +1,27 @@
1
+ class AncestryAbstractResource < AbstractResource
2
+ self.abstract_class=true
3
+
4
+ #
5
+ # provided for ancestry 'polluted' tables ;)
6
+ #
7
+ # children and subtree are special ancestry related methods
8
+ #
9
+ # # # #
10
+ def self.arraying(options={}, hash=nil)
11
+ hash ||= arrange(options)
12
+
13
+ arr = []
14
+ hash.each do |node, children|
15
+ arr << node
16
+ arr += arraying(options, children) unless children.nil?
17
+ end
18
+ arr
19
+ end
20
+
21
+ def possible_parents order='name'
22
+ parents = self.arraying( order: order)
23
+ return new_record? ? parents : parents - subtree
24
+ end
25
+ # # # #
26
+ #
27
+ end
@@ -7,7 +7,7 @@ module Roleable
7
7
 
8
8
  included do
9
9
  # has_many :somthing
10
- enum role: [:user, :vip, :account_admin, :admin]
10
+ enum role: [:no_access, :guest, :external_business_partner, :user, :super_user, :account_admin, :admin]
11
11
  attr_accessor :max_role
12
12
  after_initialize :set_default_role, :if => :new_record?
13
13
 
@@ -1,4 +1,5 @@
1
1
  class AbstractResourcePolicy
2
+
2
3
  class Scope
3
4
  attr_reader :current_user, :scope
4
5
 
@@ -55,4 +56,28 @@ class AbstractResourcePolicy
55
56
  true
56
57
  end
57
58
 
59
+ def attach?
60
+ true
61
+ end
62
+
63
+ def detach?
64
+ true
65
+ end
66
+
67
+ def prefer?
68
+ true
69
+ end
70
+
71
+ def defer?
72
+ true
73
+ end
74
+
75
+ def activate?
76
+ true
77
+ end
78
+
79
+ def deactivate?
80
+ true
81
+ end
82
+
58
83
  end
@@ -0,0 +1,2 @@
1
+ - content_for :title do
2
+ = show_page_title
@@ -0,0 +1,5 @@
1
+ = link_to deactivate_url( resource), class: 'activated green-text', title: t('deactivate_%s' % resource_name) do
2
+ %i.material-icons done
3
+
4
+ :javascript
5
+ eval("#{set_toasts}");
@@ -0,0 +1,6 @@
1
+ = link_to detach_url( parent,resource), class: 'attached green-text', title: t('detach_%s' % resource_name) do
2
+ %i.material-icons layers
3
+
4
+
5
+ :javascript
6
+ eval("#{set_toasts}");
@@ -0,0 +1,5 @@
1
+ = link_to activate_url(resource), class: 'deactivated red-text', title: t('activate_%s' % resource_name) do
2
+ %i.material-icons pause
3
+
4
+ :javascript
5
+ eval("#{set_toasts}");
@@ -0,0 +1,5 @@
1
+ = link_to prefer_url( parent,resource), class: 'deferred green-text', title: t('prefer_%s' % resource_name) do
2
+ %i.material-icons bookmark_border
3
+
4
+ :javascript
5
+ eval("#{set_toasts}");
@@ -1 +1,2 @@
1
- = render 'layouts/messages'
1
+ :javascript
2
+ eval("#{set_toasts}");