abstracted 0.0.6 → 0.0.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +11 -8
- data/app/assets/javascripts/abstract_resources.js +29 -25
- data/app/assets/javascripts/crud.js.coffee +174 -29
- data/app/assets/javascripts/initializers.js.coffee +403 -58
- data/app/assets/javascripts/pagescrolling.js.coffee +92 -0
- data/app/assets/stylesheets/abstract_resources.css +5 -0
- data/app/assets/stylesheets/scaffold.css +4 -2
- data/app/assets/stylesheets/selectize.css.scss +0 -0
- data/app/controllers/abstract_resources_controller.rb +473 -134
- data/app/controllers/application_controller.rb +22 -7
- data/app/helpers/abstract_resources_helper.rb +515 -9
- data/app/helpers/fab_button_helper.rb +82 -0
- data/app/models/abstract_resource.rb +141 -89
- data/app/models/ancestry_abstract_resource.rb +27 -0
- data/app/models/concerns/roleable.rb +1 -1
- data/app/policies/abstract_resource_policy.rb +25 -0
- data/app/views/abstract_resources/_title.html.haml +2 -0
- data/app/views/abstract_resources/activate.html.haml +5 -0
- data/app/views/abstract_resources/attach.html.haml +6 -0
- data/app/views/abstract_resources/deactivate.html.haml +5 -0
- data/app/views/abstract_resources/defer.html.haml +5 -0
- data/app/views/abstract_resources/destroy.js.haml +2 -1
- data/app/views/abstract_resources/detach.html.haml +5 -0
- data/app/views/abstract_resources/edit.html.haml +4 -9
- data/app/views/abstract_resources/error.html.haml +2 -0
- data/app/views/abstract_resources/error.js.haml +2 -0
- data/app/views/abstract_resources/index.html.haml +27 -0
- data/app/views/abstract_resources/index.js.haml +2 -0
- data/app/views/abstract_resources/new.html.haml +4 -10
- data/app/views/abstract_resources/prefer.html.haml +5 -0
- data/app/views/abstract_resources/print.html.haml +2 -0
- data/app/views/abstract_resources/print.js.haml +2 -0
- data/app/views/abstract_resources/show.html.haml +5 -11
- data/app/views/layouts/_messages.html.haml +1 -0
- data/app/views/layouts/_navigation.html.haml +13 -0
- data/bower.json +34 -0
- data/config/initializers/exception.rb +19 -0
- data/config/initializers/pundit.rb +22 -0
- data/config/routes.rb +24 -0
- data/lib/abstracted.rb +3 -0
- data/lib/abstracted/version.rb +1 -1
- data/lib/abstracted_responder.rb +1 -0
- data/lib/exceptions.rb +61 -0
- data/vendor/assets/components/jquery/.bower.json +38 -0
- data/vendor/assets/components/jquery/MIT-LICENSE.txt +21 -0
- data/vendor/assets/components/jquery/bower.json +28 -0
- data/vendor/assets/components/jquery/dist/jquery.js +9210 -0
- data/vendor/assets/components/jquery/dist/jquery.min.js +5 -0
- data/vendor/assets/components/jquery/dist/jquery.min.map +1 -0
- data/vendor/assets/components/jquery/src/ajax.js +786 -0
- data/vendor/assets/components/jquery/src/ajax/jsonp.js +89 -0
- data/vendor/assets/components/jquery/src/ajax/load.js +75 -0
- data/vendor/assets/components/jquery/src/ajax/parseJSON.js +13 -0
- data/vendor/assets/components/jquery/src/ajax/parseXML.js +28 -0
- data/vendor/assets/components/jquery/src/ajax/script.js +64 -0
- data/vendor/assets/components/jquery/src/ajax/var/nonce.js +5 -0
- data/vendor/assets/components/jquery/src/ajax/var/rquery.js +3 -0
- data/vendor/assets/components/jquery/src/ajax/xhr.js +136 -0
- data/vendor/assets/components/jquery/src/attributes.js +11 -0
- data/vendor/assets/components/jquery/src/attributes/attr.js +141 -0
- data/vendor/assets/components/jquery/src/attributes/classes.js +158 -0
- data/vendor/assets/components/jquery/src/attributes/prop.js +94 -0
- data/vendor/assets/components/jquery/src/attributes/support.js +35 -0
- data/vendor/assets/components/jquery/src/attributes/val.js +161 -0
- data/vendor/assets/components/jquery/src/callbacks.js +205 -0
- data/vendor/assets/components/jquery/src/core.js +502 -0
- data/vendor/assets/components/jquery/src/core/access.js +60 -0
- data/vendor/assets/components/jquery/src/core/init.js +123 -0
- data/vendor/assets/components/jquery/src/core/parseHTML.js +39 -0
- data/vendor/assets/components/jquery/src/core/ready.js +97 -0
- data/vendor/assets/components/jquery/src/core/var/rsingleTag.js +4 -0
- data/vendor/assets/components/jquery/src/css.js +450 -0
- data/vendor/assets/components/jquery/src/css/addGetHookIf.js +22 -0
- data/vendor/assets/components/jquery/src/css/curCSS.js +57 -0
- data/vendor/assets/components/jquery/src/css/defaultDisplay.js +70 -0
- data/vendor/assets/components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
- data/vendor/assets/components/jquery/src/css/support.js +96 -0
- data/vendor/assets/components/jquery/src/css/swap.js +28 -0
- data/vendor/assets/components/jquery/src/css/var/cssExpand.js +3 -0
- data/vendor/assets/components/jquery/src/css/var/getStyles.js +12 -0
- data/vendor/assets/components/jquery/src/css/var/isHidden.js +13 -0
- data/vendor/assets/components/jquery/src/css/var/rmargin.js +3 -0
- data/vendor/assets/components/jquery/src/css/var/rnumnonpx.js +5 -0
- data/vendor/assets/components/jquery/src/data.js +178 -0
- data/vendor/assets/components/jquery/src/data/Data.js +181 -0
- data/vendor/assets/components/jquery/src/data/accepts.js +20 -0
- data/vendor/assets/components/jquery/src/data/var/data_priv.js +5 -0
- data/vendor/assets/components/jquery/src/data/var/data_user.js +5 -0
- data/vendor/assets/components/jquery/src/deferred.js +149 -0
- data/vendor/assets/components/jquery/src/deprecated.js +13 -0
- data/vendor/assets/components/jquery/src/dimensions.js +50 -0
- data/vendor/assets/components/jquery/src/effects.js +648 -0
- data/vendor/assets/components/jquery/src/effects/Tween.js +114 -0
- data/vendor/assets/components/jquery/src/effects/animatedSelector.js +13 -0
- data/vendor/assets/components/jquery/src/event.js +868 -0
- data/vendor/assets/components/jquery/src/event/ajax.js +13 -0
- data/vendor/assets/components/jquery/src/event/alias.js +39 -0
- data/vendor/assets/components/jquery/src/event/support.js +9 -0
- data/vendor/assets/components/jquery/src/exports/amd.js +24 -0
- data/vendor/assets/components/jquery/src/exports/global.js +32 -0
- data/vendor/assets/components/jquery/src/intro.js +44 -0
- data/vendor/assets/components/jquery/src/jquery.js +37 -0
- data/vendor/assets/components/jquery/src/manipulation.js +580 -0
- data/vendor/assets/components/jquery/src/manipulation/_evalUrl.js +18 -0
- data/vendor/assets/components/jquery/src/manipulation/support.js +32 -0
- data/vendor/assets/components/jquery/src/manipulation/var/rcheckableType.js +3 -0
- data/vendor/assets/components/jquery/src/offset.js +207 -0
- data/vendor/assets/components/jquery/src/outro.js +1 -0
- data/vendor/assets/components/jquery/src/queue.js +142 -0
- data/vendor/assets/components/jquery/src/queue/delay.js +22 -0
- data/vendor/assets/components/jquery/src/selector-native.js +172 -0
- data/vendor/assets/components/jquery/src/selector-sizzle.js +14 -0
- data/vendor/assets/components/jquery/src/selector.js +1 -0
- data/vendor/assets/components/jquery/src/serialize.js +111 -0
- data/vendor/assets/components/jquery/src/sizzle/dist/sizzle.js +2067 -0
- data/vendor/assets/components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
- data/vendor/assets/components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
- data/vendor/assets/components/jquery/src/traversing.js +199 -0
- data/vendor/assets/components/jquery/src/traversing/findFilter.js +100 -0
- data/vendor/assets/components/jquery/src/traversing/var/rneedsContext.js +6 -0
- data/vendor/assets/components/jquery/src/var/arr.js +3 -0
- data/vendor/assets/components/jquery/src/var/class2type.js +4 -0
- data/vendor/assets/components/jquery/src/var/concat.js +5 -0
- data/vendor/assets/components/jquery/src/var/hasOwn.js +5 -0
- data/vendor/assets/components/jquery/src/var/indexOf.js +5 -0
- data/vendor/assets/components/jquery/src/var/pnum.js +3 -0
- data/vendor/assets/components/jquery/src/var/push.js +5 -0
- data/vendor/assets/components/jquery/src/var/rnotwhite.js +3 -0
- data/vendor/assets/components/jquery/src/var/slice.js +5 -0
- data/vendor/assets/components/jquery/src/var/strundefined.js +3 -0
- data/vendor/assets/components/jquery/src/var/support.js +4 -0
- data/vendor/assets/components/jquery/src/var/toString.js +5 -0
- data/vendor/assets/components/jquery/src/wrap.js +79 -0
- data/vendor/assets/components/microplugin/.bower.json +38 -0
- data/vendor/assets/components/microplugin/.gitignore +2 -0
- data/vendor/assets/components/microplugin/.npmignore +3 -0
- data/vendor/assets/components/microplugin/README.md +115 -0
- data/vendor/assets/components/microplugin/bower.json +22 -0
- data/vendor/assets/components/microplugin/package.json +15 -0
- data/vendor/assets/components/microplugin/src/microplugin.js +135 -0
- data/vendor/assets/components/selectize/.bower.json +60 -0
- data/vendor/assets/components/selectize/.gitignore +5 -0
- data/vendor/assets/components/selectize/LICENSE +202 -0
- data/vendor/assets/components/selectize/README.md +105 -0
- data/vendor/assets/components/selectize/bower.json +40 -0
- data/vendor/assets/components/selectize/dist/css/selectize.bootstrap2.css +487 -0
- data/vendor/assets/components/selectize/dist/css/selectize.bootstrap3.css +401 -0
- data/vendor/assets/components/selectize/dist/css/selectize.css +317 -0
- data/vendor/assets/components/selectize/dist/css/selectize.default.css +387 -0
- data/vendor/assets/components/selectize/dist/css/selectize.legacy.css +364 -0
- data/vendor/assets/components/selectize/dist/js/selectize.js +3058 -0
- data/vendor/assets/components/selectize/dist/js/selectize.min.js +3 -0
- data/vendor/assets/components/selectize/dist/js/standalone/selectize.js +3667 -0
- data/vendor/assets/components/selectize/dist/js/standalone/selectize.min.js +3 -0
- data/vendor/assets/components/selectize/dist/less/plugins/drag_drop.less +16 -0
- data/vendor/assets/components/selectize/dist/less/plugins/dropdown_header.less +20 -0
- data/vendor/assets/components/selectize/dist/less/plugins/optgroup_columns.less +17 -0
- data/vendor/assets/components/selectize/dist/less/plugins/remove_button.less +37 -0
- data/vendor/assets/components/selectize/dist/less/selectize.bootstrap2.less +161 -0
- data/vendor/assets/components/selectize/dist/less/selectize.bootstrap3.less +150 -0
- data/vendor/assets/components/selectize/dist/less/selectize.default.less +84 -0
- data/vendor/assets/components/selectize/dist/less/selectize.legacy.less +75 -0
- data/vendor/assets/components/selectize/dist/less/selectize.less +295 -0
- data/vendor/assets/components/selectize/karma.conf.js +107 -0
- data/vendor/assets/components/sifter/.bower.json +44 -0
- data/vendor/assets/components/sifter/.gitignore +3 -0
- data/vendor/assets/components/sifter/.npmignore +4 -0
- data/vendor/assets/components/sifter/README.md +149 -0
- data/vendor/assets/components/sifter/bower.json +23 -0
- data/vendor/assets/components/sifter/package.json +48 -0
- data/vendor/assets/components/sifter/sifter.js +471 -0
- data/vendor/assets/components/sifter/sifter.min.js +2 -0
- data/vendor/assets/components/sweetalert/.bower.json +36 -0
- data/vendor/assets/components/sweetalert/.editorconfig +11 -0
- data/vendor/assets/components/sweetalert/.gitignore +5 -0
- data/vendor/assets/components/sweetalert/.jshintrc +11 -0
- data/vendor/assets/components/sweetalert/.travis.yml +6 -0
- data/vendor/assets/components/sweetalert/LICENSE +22 -0
- data/vendor/assets/components/sweetalert/README.md +157 -0
- data/vendor/assets/components/sweetalert/bower.json +25 -0
- data/vendor/assets/components/sweetalert/dev/gulpfile-wrap-template.js +18 -0
- data/vendor/assets/components/sweetalert/dev/ie9.css +23 -0
- data/vendor/assets/components/sweetalert/dev/loader-animation.css +209 -0
- data/vendor/assets/components/sweetalert/dev/modules/default-params.js +26 -0
- data/vendor/assets/components/sweetalert/dev/modules/handle-click.js +128 -0
- data/vendor/assets/components/sweetalert/dev/modules/handle-dom.js +161 -0
- data/vendor/assets/components/sweetalert/dev/modules/handle-key.js +73 -0
- data/vendor/assets/components/sweetalert/dev/modules/handle-swal-dom.js +148 -0
- data/vendor/assets/components/sweetalert/dev/modules/injected-html.js +69 -0
- data/vendor/assets/components/sweetalert/dev/modules/set-params.js +221 -0
- data/vendor/assets/components/sweetalert/dev/modules/utils.js +71 -0
- data/vendor/assets/components/sweetalert/dev/sweetalert.es6.js +311 -0
- data/vendor/assets/components/sweetalert/dev/sweetalert.scss +648 -0
- data/vendor/assets/components/sweetalert/dist/sweetalert-dev.js +1281 -0
- data/vendor/assets/components/sweetalert/dist/sweetalert.css +932 -0
- data/vendor/assets/components/sweetalert/dist/sweetalert.min.js +1 -0
- data/vendor/assets/components/sweetalert/example/example.css +442 -0
- data/vendor/assets/components/sweetalert/example/example.scss +580 -0
- data/vendor/assets/components/sweetalert/example/images/logo_big.png +0 -0
- data/vendor/assets/components/sweetalert/example/images/logo_big@2x.png +0 -0
- data/vendor/assets/components/sweetalert/example/images/logo_small.png +0 -0
- data/vendor/assets/components/sweetalert/example/images/logo_small@2x.png +0 -0
- data/vendor/assets/components/sweetalert/example/images/te-logo-small.svg +12 -0
- data/vendor/assets/components/sweetalert/example/images/thumbs-up.jpg +0 -0
- data/vendor/assets/components/sweetalert/example/images/vs_icon.png +0 -0
- data/vendor/assets/components/sweetalert/example/images/vs_icon@2x.png +0 -0
- data/vendor/assets/components/sweetalert/gulpfile.js +97 -0
- data/vendor/assets/components/sweetalert/index.html +584 -0
- data/vendor/assets/components/sweetalert/package.json +45 -0
- data/vendor/assets/components/sweetalert/sweetalert.gif +0 -0
- data/vendor/assets/components/sweetalert/test/index.html +20 -0
- data/vendor/assets/components/sweetalert/test/tests.js +143 -0
- data/vendor/assets/components/sweetalert/themes/facebook/facebook.css +111 -0
- data/vendor/assets/components/sweetalert/themes/facebook/facebook.scss +146 -0
- data/vendor/assets/components/sweetalert/themes/google/google.css +115 -0
- data/vendor/assets/components/sweetalert/themes/google/google.scss +148 -0
- data/vendor/assets/components/sweetalert/themes/twitter/twitter.css +140 -0
- data/vendor/assets/components/sweetalert/themes/twitter/twitter.scss +177 -0
- metadata +214 -5
- data/abstracted-0.0.4.gem +0 -0
- data/abstracted.gemspec +0 -51
- 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
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
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
|
-
#
|
32
|
-
|
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
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
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
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
#
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
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
|
-
#
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
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
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
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, :
|
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
|
@@ -1 +1,2 @@
|
|
1
|
-
|
1
|
+
:javascript
|
2
|
+
eval("#{set_toasts}");
|