abstracted 0.0.6 → 0.0.14

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 (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}");