spiderfw 0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README +4 -0
- data/Rakefile +74 -0
- data/apps/cas_server/_init.rb +23 -0
- data/apps/cas_server/config/options.rb +9 -0
- data/apps/cas_server/controllers/mixins/cas_login_mixin.rb +353 -0
- data/apps/cas_server/lib/cas.rb +329 -0
- data/apps/cas_server/lib/utils.rb +30 -0
- data/apps/cas_server/models/login_ticket.rb +11 -0
- data/apps/cas_server/models/mixins/consumable.rb +10 -0
- data/apps/cas_server/models/proxy_granting_ticket.rb +12 -0
- data/apps/cas_server/models/proxy_ticket.rb +12 -0
- data/apps/cas_server/models/service_ticket.rb +22 -0
- data/apps/cas_server/models/ticket.rb +20 -0
- data/apps/cas_server/models/ticket_granting_ticket.rb +15 -0
- data/apps/cas_server/views/logout.shtml +3 -0
- data/apps/core/admin/_init.rb +23 -0
- data/apps/core/admin/admin.rb +17 -0
- data/apps/core/admin/controllers/admin_controller.rb +15 -0
- data/apps/core/admin/views/index.shtml +1 -0
- data/apps/core/admin/views/spider_admin.layout.shtml +23 -0
- data/apps/core/admin/widgets/admin_menu/admin_menu.rb +17 -0
- data/apps/core/auth/_init.rb +42 -0
- data/apps/core/auth/controllers/login_controller.rb +94 -0
- data/apps/core/auth/controllers/mixins/auth_helper.rb +114 -0
- data/apps/core/auth/controllers/mixins/http_basic_auth.rb +24 -0
- data/apps/core/auth/controllers/mixins/http_digest_auth.rb +26 -0
- data/apps/core/auth/lib/authenticable.rb +86 -0
- data/apps/core/auth/lib/authenticator.rb +11 -0
- data/apps/core/auth/lib/digest_authenticator.rb +44 -0
- data/apps/core/auth/lib/login_authenticator.rb +27 -0
- data/apps/core/auth/models/digest_user.rb +34 -0
- data/apps/core/auth/models/group.rb +22 -0
- data/apps/core/auth/models/login_user.rb +15 -0
- data/apps/core/auth/models/mixins/access_control.rb +71 -0
- data/apps/core/auth/models/mixins/authentication_tracking.rb +19 -0
- data/apps/core/auth/models/super_user.rb +8 -0
- data/apps/core/auth/models/user.rb +15 -0
- data/apps/core/auth/po/it/spider_auth.po +33 -0
- data/apps/core/auth/po/spider_auth.pot +31 -0
- data/apps/core/auth/views/login.shtml +25 -0
- data/apps/core/components/_init.rb +21 -0
- data/apps/core/components/po/it/spider_components.po +52 -0
- data/apps/core/components/po/spider_components.pot +53 -0
- data/apps/core/components/public/css/admin.css +73 -0
- data/apps/core/components/public/css/crud.css +58 -0
- data/apps/core/components/public/css/img/add.gif +0 -0
- data/apps/core/components/public/css/img/ajax-loader.gif +0 -0
- data/apps/core/components/public/css/img/back.gif +0 -0
- data/apps/core/components/public/css/img/bg_header.png +0 -0
- data/apps/core/components/public/css/img/body_bg.jpg +0 -0
- data/apps/core/components/public/css/img/gray_gradient.gif +0 -0
- data/apps/core/components/public/css/img/li_bg.png +0 -0
- data/apps/core/components/public/css/img/li_bg_active.png +0 -0
- data/apps/core/components/public/css/img/li_bg_hover.png +0 -0
- data/apps/core/components/public/css/img/logo.png +0 -0
- data/apps/core/components/public/css/img/menu_bg.png +0 -0
- data/apps/core/components/public/css/img/menu_bottom.png +0 -0
- data/apps/core/components/public/css/img/menu_top.png +0 -0
- data/apps/core/components/public/css/img/section-bottom.jpg +0 -0
- data/apps/core/components/public/css/list.css +7 -0
- data/apps/core/components/public/css/menu.css +47 -0
- data/apps/core/components/public/css/spider.css +9 -0
- data/apps/core/components/public/css/switcher.css +13 -0
- data/apps/core/components/public/css/table.css +99 -0
- data/apps/core/components/public/js/inheritance.js +71 -0
- data/apps/core/components/public/js/jquery/jquery-1.3.2.js +4376 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/smoothness/jquery-ui-1.7.2.custom.css +406 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/css/ui-lightness/jquery-ui-1.7.2.custom.css +406 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/AUTHORS.txt +30 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/GPL-LICENSE.txt +278 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/MIT-LICENSE.txt +25 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/external/bgiframe/ChangeLog.txt +20 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/external/bgiframe/META.json +32 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/external/bgiframe/jquery.bgiframe.js +100 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/external/bgiframe/jquery.bgiframe.min.js +10 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/external/bgiframe/jquery.bgiframe.pack.js +10 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/external/bgiframe/test/index.html +197 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/external/cookie/jquery.cookie.js +97 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/external/cookie/jquery.cookie.min.js +10 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/external/cookie/jquery.cookie.pack.js +10 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/external/cookie/jquery.cookie.zip +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/external/jsdiff/jsdiff.js +159 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/external/qunit/testrunner.js +780 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/external/qunit/testsuite.css +120 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/external/simulate/jquery.simulate.js +152 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/jquery-1.3.2.js +4376 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/images/ui-icons_222222_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/images/ui-icons_2e83ff_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/images/ui-icons_454545_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/images/ui-icons_888888_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/ui.accordion.css +9 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/ui.all.css +2 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/ui.base.css +8 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/ui.core.css +37 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/ui.datepicker.css +62 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/ui.dialog.css +13 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/ui.progressbar.css +4 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/ui.resizable.css +13 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/ui.slider.css +17 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/ui.tabs.css +11 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/base/ui.theme.css +245 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/jquery-ui-1.7.2.custom.css +406 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/ui.accordion.css +9 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/ui.all.css +2 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/ui.base.css +8 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/ui.core.css +37 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/ui.datepicker.css +62 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/ui.dialog.css +13 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/ui.progressbar.css +4 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/ui.resizable.css +13 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/ui.slider.css +17 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/ui.tabs.css +11 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/themes/ui-lightness/ui.theme.css +247 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/effects.blind.js +49 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/effects.bounce.js +78 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/effects.clip.js +54 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/effects.core.js +545 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/effects.drop.js +50 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/effects.explode.js +79 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/effects.fold.js +56 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/effects.highlight.js +48 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/effects.pulsate.js +56 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/effects.scale.js +180 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/effects.shake.js +57 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/effects.slide.js +50 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/effects.transfer.js +45 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/jquery-ui-i18n.js +771 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-ar.js +20 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-bg.js +20 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-ca.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-cs.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-da.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-de.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-el.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-eo.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-es.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-fa.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-fi.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-fr.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-he.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-hr.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-hu.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-hy.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-id.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-is.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-it.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-ja.js +20 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-ko.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-lt.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-lv.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-ms.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-nl.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-no.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-pl.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-pt-BR.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-ro.js +22 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-ru.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-sk.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-sl.js +20 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-sq.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-sr-SR.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-sr.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-sv.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-th.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-tr.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-uk.js +25 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-zh-CN.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/i18n/ui.datepicker-zh-TW.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/jquery-ui-1.7.2.custom.js +9133 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/ui.accordion.js +477 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/ui.core.js +519 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/ui.datepicker.js +1636 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/ui.dialog.js +671 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/ui.draggable.js +766 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/ui.droppable.js +282 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/ui.progressbar.js +116 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/ui.resizable.js +800 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/ui.selectable.js +257 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/ui.slider.js +558 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/ui.sortable.js +1019 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/ui/ui.tabs.js +685 -0
- data/apps/core/components/public/js/jquery/jquery-ui/development-bundle/version.txt +1 -0
- data/apps/core/components/public/js/jquery/jquery-ui/index.html +367 -0
- data/apps/core/components/public/js/jquery/jquery-ui/js/jquery-1.3.2.min.js +19 -0
- data/apps/core/components/public/js/jquery/jquery-ui/js/jquery-ui-1.7.2.custom.min.js +298 -0
- data/apps/core/components/public/js/jquery/plugins/jquery-autocomplete/changelog.txt +27 -0
- data/apps/core/components/public/js/jquery/plugins/jquery-autocomplete/jquery.autocomplete.css +48 -0
- data/apps/core/components/public/js/jquery/plugins/jquery-autocomplete/jquery.autocomplete.js +808 -0
- data/apps/core/components/public/js/jquery/plugins/jquery-autocomplete/jquery.autocomplete.min.js +13 -0
- data/apps/core/components/public/js/jquery/plugins/jquery-autocomplete/jquery.autocomplete.pack.js +12 -0
- data/apps/core/components/public/js/jquery/plugins/jquery-autocomplete/lib/jquery.ajaxQueue.js +116 -0
- data/apps/core/components/public/js/jquery/plugins/jquery-autocomplete/lib/jquery.bgiframe.min.js +10 -0
- data/apps/core/components/public/js/jquery/plugins/jquery-autocomplete/lib/jquery.js +3558 -0
- data/apps/core/components/public/js/jquery/plugins/jquery-autocomplete/lib/thickbox-compressed.js +10 -0
- data/apps/core/components/public/js/jquery/plugins/jquery-autocomplete/lib/thickbox.css +163 -0
- data/apps/core/components/public/js/jquery/plugins/jquery-autocomplete/todo +166 -0
- data/apps/core/components/public/js/jquery/plugins/jquery.form.js +653 -0
- data/apps/core/components/public/js/jquery/plugins/jquery.query-2.1.6.js +224 -0
- data/apps/core/components/public/js/jquery/plugins/jquery.url.js +214 -0
- data/apps/core/components/public/js/jquery/plugins/jtree/jquery.jtree.1.0.js +187 -0
- data/apps/core/components/public/js/jquery/plugins/jtree/jquery.jtree.1.0.min.js +1 -0
- data/apps/core/components/public/js/jquery/plugins/jtree/jquery.jtree.spider.1.0.js +193 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/changelog.txt +35 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/ajax-loader.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/file.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/folder-closed.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/folder.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/minus.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/plus.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/treeview-black-line.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/treeview-black.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/treeview-default-line.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/treeview-default.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/treeview-famfamfam-line.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/treeview-famfamfam.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/treeview-gray-line.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/treeview-gray.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/treeview-red-line.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/images/treeview-red.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/jquery.treeview.async.js +110 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/jquery.treeview.css +74 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/jquery.treeview.edit.js +37 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/jquery.treeview.js +256 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/jquery.treeview.min.js +15 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/jquery.treeview.pack.js +16 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/jquery.treeview.sortable.js +386 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/lib/jquery.cookie.js +92 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/lib/jquery.js +3534 -0
- data/apps/core/components/public/js/jquery/plugins/treeview/todo +8 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/LICENSE +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/README +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/jquery.timepickr.css +34 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/jquery.timepickr.js +1413 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/jquery.timepickr.min.js +10 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/images/222222_256x240_icons_icons.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/images/2e83ff_256x240_icons_icons.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/images/454545_256x240_icons_icons.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/images/888888_256x240_icons_icons.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/images/aaaaaa_40x100_textures_01_flat_0.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/images/cccccc_40x100_textures_03_highlight_soft_75.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/images/cd0a0a_256x240_icons_icons.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/images/dadada_40x100_textures_02_glass_75.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/images/e6e6e6_40x100_textures_02_glass_75.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/images/fbf9ee_40x100_textures_02_glass_55.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/images/fef1ec_40x100_textures_05_inset_soft_95.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/images/ffffff_40x100_textures_02_glass_65.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/images/ffffff_40x100_textures_02_glass_75.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/ui.accordion.css +9 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/ui.all.css +4 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/ui.allplugins.css +7 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/ui.core.css +37 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/ui.datepicker.css +60 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/ui.dialog.css +13 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/ui.progressbar.css +4 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/ui.resizable.css +13 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/ui.slider.css +13 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/ui.tabs.css +9 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/ui.theme.css +238 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/themes/default/ui.timepickr.css +44 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/ui.timepickr.js +2307 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/dist/ui.timepickr.min.js +10 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/body-bg.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/btn-hover.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/btn.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/buttons.psd +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/index.html +326 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/jquery.anchorHandler.js +44 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/jquery.strings.js +290 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/jquery.ui.all.js +518 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/jquery.utils.js +255 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/jquery.utils.ui.min.js +26 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/logo-ff.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/logo-ie.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/logo.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/logo.psd +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/package.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/reset.css +48 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/script_code.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/styles.css +308 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/themeroller_ready_black_200px.gif +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/page/weather_sun.png +0 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/src/css/ui.dropslide.css +26 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/src/css/ui.timepickr.css +18 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/src/ui.dropslide.js +132 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/src/ui.timepickr.js +217 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/test/data/testrunner.js +1 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/test/index.html +34 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/test/otherlibs/jquery/1.2.1/jquery.js +11 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/test/otherlibs/jquery/1.2.3/jquery.js +11 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/test/qunit/testrunner.js +780 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/test/qunit/testsuite.css +120 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/test/styles.css +201 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/test/test.js +41 -0
- data/apps/core/components/public/js/jquery/plugins/ui-timepickr/test/unit/ui.timepickr.js +154 -0
- data/apps/core/components/public/js/list.js +234 -0
- data/apps/core/components/public/js/spider.js +484 -0
- data/apps/core/components/public/widgets/search_table.js +10 -0
- data/apps/core/components/public/widgets/table.js +9 -0
- data/apps/core/components/widgets/admin/admin.rb +75 -0
- data/apps/core/components/widgets/admin/admin.shtml +16 -0
- data/apps/core/components/widgets/confirm/confirm.rb +37 -0
- data/apps/core/components/widgets/confirm/confirm.shtml +9 -0
- data/apps/core/components/widgets/crud/crud.rb +119 -0
- data/apps/core/components/widgets/crud/crud.shtml +59 -0
- data/apps/core/components/widgets/crud/form_table/form_table.rb +13 -0
- data/apps/core/components/widgets/crud/form_table/form_table.shtml +3 -0
- data/apps/core/components/widgets/list/list.rb +294 -0
- data/apps/core/components/widgets/list/list.shtml +38 -0
- data/apps/core/components/widgets/list/plugins/exportable/exportable_list.rb +19 -0
- data/apps/core/components/widgets/list/plugins/exportable/exportable_list.shtml +5 -0
- data/apps/core/components/widgets/menu/menu.rb +20 -0
- data/apps/core/components/widgets/menu/menu.shtml +13 -0
- data/apps/core/components/widgets/search_table/search_table.rb +22 -0
- data/apps/core/components/widgets/search_table/search_table.shtml +11 -0
- data/apps/core/components/widgets/switcher/switcher.rb +68 -0
- data/apps/core/components/widgets/switcher/switcher.shtml +17 -0
- data/apps/core/components/widgets/table/table.rb +153 -0
- data/apps/core/components/widgets/table/table.shtml +41 -0
- data/apps/core/components/widgets/tabs/tabs.rb +38 -0
- data/apps/core/components/widgets/tabs/tabs.shtml +2 -0
- data/apps/core/forms/_init.rb +22 -0
- data/apps/core/forms/po/it/spider_forms.po +36 -0
- data/apps/core/forms/po/spider_forms.pot +37 -0
- data/apps/core/forms/public/date_time.js +23 -0
- data/apps/core/forms/public/form.css +81 -0
- data/apps/core/forms/public/form.js +19 -0
- data/apps/core/forms/public/input.js +30 -0
- data/apps/core/forms/public/search_select.js +123 -0
- data/apps/core/forms/public/select.js +11 -0
- data/apps/core/forms/tags/element_label.erb +1 -0
- data/apps/core/forms/tags/element_row.erb +4 -0
- data/apps/core/forms/tags/row.erb +4 -0
- data/apps/core/forms/widgets/form/form.rb +430 -0
- data/apps/core/forms/widgets/form/form.shtml +47 -0
- data/apps/core/forms/widgets/inputs/checkbox/checkbox.rb +13 -0
- data/apps/core/forms/widgets/inputs/checkbox/checkbox.shtml +3 -0
- data/apps/core/forms/widgets/inputs/date_time/date_time.rb +48 -0
- data/apps/core/forms/widgets/inputs/date_time/date_time.shtml +4 -0
- data/apps/core/forms/widgets/inputs/hidden/hidden.rb +8 -0
- data/apps/core/forms/widgets/inputs/hidden/hidden.shtml +3 -0
- data/apps/core/forms/widgets/inputs/input/input.rb +105 -0
- data/apps/core/forms/widgets/inputs/input/input.shtml +3 -0
- data/apps/core/forms/widgets/inputs/input/readonly.shtml +6 -0
- data/apps/core/forms/widgets/inputs/password/password.rb +24 -0
- data/apps/core/forms/widgets/inputs/password/password.shtml +5 -0
- data/apps/core/forms/widgets/inputs/search_select/search_select.rb +168 -0
- data/apps/core/forms/widgets/inputs/search_select/search_select.shtml +42 -0
- data/apps/core/forms/widgets/inputs/select/select.rb +126 -0
- data/apps/core/forms/widgets/inputs/select/select.shtml +8 -0
- data/apps/core/forms/widgets/inputs/subform/subform.rb +10 -0
- data/apps/core/forms/widgets/inputs/subform/subform.shtml +5 -0
- data/apps/core/forms/widgets/inputs/text/text.rb +9 -0
- data/apps/core/forms/widgets/inputs/text/text.shtml +3 -0
- data/apps/core/forms/widgets/inputs/text_area/text_area.rb +10 -0
- data/apps/core/forms/widgets/inputs/text_area/text_area.shtml +1 -0
- data/apps/drb_server/_init.rb +8 -0
- data/apps/drb_server/lib/model_server.rb +41 -0
- data/apps/drb_server/script/start_server.rb +19 -0
- data/apps/hippo/_init.rb +10 -0
- data/apps/hippo/models/mixins/hippo_struct.rb +210 -0
- data/apps/hippo/models/security_group.rb +21 -0
- data/apps/hippo/models/security_user.rb +29 -0
- data/apps/messenger/_init.rb +24 -0
- data/apps/messenger/config/options.rb +15 -0
- data/apps/messenger/config/worker.rb +3 -0
- data/apps/messenger/controllers/messenger_controller.rb +80 -0
- data/apps/messenger/controllers/mixins/messenger_controller_mixin.rb +54 -0
- data/apps/messenger/lib/backends/email/smtp.rb +0 -0
- data/apps/messenger/messenger.rb +94 -0
- data/apps/messenger/models/email.rb +22 -0
- data/apps/messenger/models/message.rb +44 -0
- data/apps/messenger/po/it/spider_messenger.po +77 -0
- data/apps/messenger/po/spider_messenger.pot +77 -0
- data/apps/messenger/views/index.shtml +13 -0
- data/apps/messenger/views/list.shtml +5 -0
- data/apps/messenger/views/messenger.layout.shtml +4 -0
- data/apps/messenger/views/queue.shtml +8 -0
- data/apps/messenger/views/tags/sent_messages.shtml +1 -0
- data/apps/soap/_init.rb +16 -0
- data/apps/soap/controllers/soap_controller.rb +334 -0
- data/apps/soap/doc/examples/example.rb +28 -0
- data/apps/soap/lib/soap.rb +217 -0
- data/apps/sso/_init.rb +16 -0
- data/apps/sso/config/options.rb +13 -0
- data/apps/sso/controllers/mixins/saml2_mixin.rb +149 -0
- data/apps/sso/lib/saml2/backend.rb +16 -0
- data/apps/sso/lib/saml2/lasso_backend.rb +88 -0
- data/apps/sso/lib/saml2.rb +112 -0
- data/apps/sso/views/saml2_post.shtml +19 -0
- data/apps/webdav/_init.rb +15 -0
- data/apps/webdav/controllers/webdav_controller.rb +862 -0
- data/apps/webdav/lib/locking.rb +193 -0
- data/apps/webdav/lib/vfs/abstract.rb +78 -0
- data/apps/webdav/lib/vfs/local.rb +126 -0
- data/apps/webdav/lib/vfs/mapped.rb +235 -0
- data/apps/webdav/lib/vfs/properties.rb +41 -0
- data/apps/worker/_init.rb +13 -0
- data/apps/worker/cmd.rb +65 -0
- data/apps/worker/config/options.rb +9 -0
- data/apps/worker/lib/runner.rb +43 -0
- data/apps/worker/lib/task.rb +9 -0
- data/apps/worker/models/job.rb +20 -0
- data/apps/worker/worker.rb +168 -0
- data/bin/spider +9 -0
- data/blueprints/app/_init.rb +10 -0
- data/blueprints/app/controllers/__APP___controller.rb +14 -0
- data/blueprints/app/views/__APP__.layout.shtml +8 -0
- data/blueprints/app/views/index.shtml +3 -0
- data/blueprints/install/config/config.yml +14 -0
- data/blueprints/install/init.rb +3 -0
- data/data/locale/it/LC_MESSAGES/spider.mo +0 -0
- data/data/locale/it/LC_MESSAGES/spider_auth.mo +0 -0
- data/data/locale/it/LC_MESSAGES/spider_components.mo +0 -0
- data/data/locale/it/LC_MESSAGES/spider_forms.mo +0 -0
- data/data/locale/it/LC_MESSAGES/spider_messenger.mo +0 -0
- data/lib/spiderfw/app.rb +186 -0
- data/lib/spiderfw/autoload.rb +12 -0
- data/lib/spiderfw/cache/template_cache.rb +136 -0
- data/lib/spiderfw/cmd/cmd.rb +72 -0
- data/lib/spiderfw/cmd/commands/cert.rb +427 -0
- data/lib/spiderfw/cmd/commands/console.rb +27 -0
- data/lib/spiderfw/cmd/commands/init.rb +52 -0
- data/lib/spiderfw/cmd/commands/model.rb +131 -0
- data/lib/spiderfw/cmd/commands/setup.rb +54 -0
- data/lib/spiderfw/cmd/commands/test.rb +61 -0
- data/lib/spiderfw/cmd/commands/webserver.rb +93 -0
- data/lib/spiderfw/config/configurable.rb +38 -0
- data/lib/spiderfw/config/configuration.rb +281 -0
- data/lib/spiderfw/config/options/spider.rb +122 -0
- data/lib/spiderfw/controller/app_controller.rb +14 -0
- data/lib/spiderfw/controller/controller.rb +321 -0
- data/lib/spiderfw/controller/controller_exceptions.rb +27 -0
- data/lib/spiderfw/controller/controller_io.rb +26 -0
- data/lib/spiderfw/controller/controller_mixin.rb +12 -0
- data/lib/spiderfw/controller/cookie.rb +20 -0
- data/lib/spiderfw/controller/cookies.rb +17 -0
- data/lib/spiderfw/controller/dispatcher.rb +269 -0
- data/lib/spiderfw/controller/first_responder.rb +59 -0
- data/lib/spiderfw/controller/formats/html.rb +90 -0
- data/lib/spiderfw/controller/helpers/widget_helper.rb +73 -0
- data/lib/spiderfw/controller/home_controller.rb +26 -0
- data/lib/spiderfw/controller/http_controller.rb +112 -0
- data/lib/spiderfw/controller/mixins/http_mixin.rb +228 -0
- data/lib/spiderfw/controller/mixins/static_content.rb +90 -0
- data/lib/spiderfw/controller/mixins/visual.rb +489 -0
- data/lib/spiderfw/controller/page_controller.rb +39 -0
- data/lib/spiderfw/controller/request.rb +48 -0
- data/lib/spiderfw/controller/response.rb +50 -0
- data/lib/spiderfw/controller/router.rb +9 -0
- data/lib/spiderfw/controller/scene.rb +27 -0
- data/lib/spiderfw/controller/session/file_session.rb +83 -0
- data/lib/spiderfw/controller/session/flash_hash.rb +56 -0
- data/lib/spiderfw/controller/session/memory_session.rb +62 -0
- data/lib/spiderfw/controller/session/transient_hash.rb +18 -0
- data/lib/spiderfw/controller/session.rb +106 -0
- data/lib/spiderfw/controller/spider_controller.rb +20 -0
- data/lib/spiderfw/create.rb +64 -0
- data/lib/spiderfw/env.rb +17 -0
- data/lib/spiderfw/exceptions.rb +2 -0
- data/lib/spiderfw/home.rb +26 -0
- data/lib/spiderfw/http/adapters/cgi.rb +62 -0
- data/lib/spiderfw/http/adapters/cgi_io.rb +27 -0
- data/lib/spiderfw/http/adapters/fcgi.rb +62 -0
- data/lib/spiderfw/http/adapters/mongrel.rb +207 -0
- data/lib/spiderfw/http/adapters/rack.rb +152 -0
- data/lib/spiderfw/http/adapters/thin.rb +38 -0
- data/lib/spiderfw/http/adapters/webrick.rb +176 -0
- data/lib/spiderfw/http/http.rb +297 -0
- data/lib/spiderfw/http/server.rb +40 -0
- data/lib/spiderfw/i18n/cldr.rb +114 -0
- data/lib/spiderfw/i18n/gettext.rb +8 -0
- data/lib/spiderfw/i18n/i18n.rb +120 -0
- data/lib/spiderfw/i18n/provider.rb +12 -0
- data/lib/spiderfw/i18n/rails.rb +89 -0
- data/lib/spiderfw/i18n/shtml_parser.rb +41 -0
- data/lib/spiderfw/model/active_record.rb +335 -0
- data/lib/spiderfw/model/base_model.rb +2068 -0
- data/lib/spiderfw/model/condition.rb +416 -0
- data/lib/spiderfw/model/data_type.rb +75 -0
- data/lib/spiderfw/model/datatypes/binary.rb +10 -0
- data/lib/spiderfw/model/datatypes/bool.rb +10 -0
- data/lib/spiderfw/model/datatypes/decimal.rb +22 -0
- data/lib/spiderfw/model/datatypes/email.rb +13 -0
- data/lib/spiderfw/model/datatypes/password.rb +63 -0
- data/lib/spiderfw/model/datatypes/serialized_object.rb +32 -0
- data/lib/spiderfw/model/datatypes/text.rb +10 -0
- data/lib/spiderfw/model/datatypes/uuid.rb +29 -0
- data/lib/spiderfw/model/datatypes.rb +19 -0
- data/lib/spiderfw/model/element.rb +250 -0
- data/lib/spiderfw/model/extended_models/managed.rb +43 -0
- data/lib/spiderfw/model/identity_mapper.rb +89 -0
- data/lib/spiderfw/model/inline_model.rb +37 -0
- data/lib/spiderfw/model/mappers/db_mapper.rb +1126 -0
- data/lib/spiderfw/model/mappers/hash_mapper.rb +114 -0
- data/lib/spiderfw/model/mappers/mapper.rb +926 -0
- data/lib/spiderfw/model/mappers/mappers.rb +7 -0
- data/lib/spiderfw/model/mappers/proxy_mapper.rb +25 -0
- data/lib/spiderfw/model/mappers/vfs/flat_file.rb +31 -0
- data/lib/spiderfw/model/mixins/converted.rb +110 -0
- data/lib/spiderfw/model/mixins/list.rb +135 -0
- data/lib/spiderfw/model/mixins/mixins.rb +7 -0
- data/lib/spiderfw/model/mixins/state_machine.rb +81 -0
- data/lib/spiderfw/model/mixins/synchronized.rb +88 -0
- data/lib/spiderfw/model/mixins/tree.rb +296 -0
- data/lib/spiderfw/model/mixins/versioned.rb +147 -0
- data/lib/spiderfw/model/model.rb +226 -0
- data/lib/spiderfw/model/model_hash.rb +50 -0
- data/lib/spiderfw/model/proxy_model.rb +37 -0
- data/lib/spiderfw/model/query.rb +147 -0
- data/lib/spiderfw/model/query_funcs.rb +99 -0
- data/lib/spiderfw/model/query_set.rb +700 -0
- data/lib/spiderfw/model/request.rb +80 -0
- data/lib/spiderfw/model/storage/base_storage.rb +110 -0
- data/lib/spiderfw/model/storage/db/adapters/mssql.rb +129 -0
- data/lib/spiderfw/model/storage/db/adapters/mysql.rb +436 -0
- data/lib/spiderfw/model/storage/db/adapters/oci8.rb +533 -0
- data/lib/spiderfw/model/storage/db/adapters/sqlite.rb +163 -0
- data/lib/spiderfw/model/storage/db/connectors/odbc.rb +213 -0
- data/lib/spiderfw/model/storage/db/db.rb +13 -0
- data/lib/spiderfw/model/storage/db/db_connection_pool.rb +126 -0
- data/lib/spiderfw/model/storage/db/db_connector.rb +9 -0
- data/lib/spiderfw/model/storage/db/db_schema.rb +233 -0
- data/lib/spiderfw/model/storage/db/db_storage.rb +872 -0
- data/lib/spiderfw/model/storage/db/dialects/no_total_rows.rb +18 -0
- data/lib/spiderfw/model/storage/db/reflector.rb +36 -0
- data/lib/spiderfw/model/storage/null_storage.rb +18 -0
- data/lib/spiderfw/model/storage/schema.rb +19 -0
- data/lib/spiderfw/model/storage.rb +72 -0
- data/lib/spiderfw/model/sync.rb +94 -0
- data/lib/spiderfw/model/type.rb +13 -0
- data/lib/spiderfw/model/unit_of_work.rb +75 -0
- data/lib/spiderfw/requires.rb +21 -0
- data/lib/spiderfw/resource.rb +18 -0
- data/lib/spiderfw/setup/setup_task.rb +44 -0
- data/lib/spiderfw/tag/tag.rb +28 -0
- data/lib/spiderfw/templates/blocks/attr_if.rb +32 -0
- data/lib/spiderfw/templates/blocks/comment.rb +38 -0
- data/lib/spiderfw/templates/blocks/debugger.rb +16 -0
- data/lib/spiderfw/templates/blocks/each.rb +51 -0
- data/lib/spiderfw/templates/blocks/html.rb +70 -0
- data/lib/spiderfw/templates/blocks/if.rb +35 -0
- data/lib/spiderfw/templates/blocks/pass.rb +16 -0
- data/lib/spiderfw/templates/blocks/render.rb +23 -0
- data/lib/spiderfw/templates/blocks/run.rb +30 -0
- data/lib/spiderfw/templates/blocks/tag.rb +21 -0
- data/lib/spiderfw/templates/blocks/tag_if.rb +29 -0
- data/lib/spiderfw/templates/blocks/text.rb +43 -0
- data/lib/spiderfw/templates/blocks/widget.rb +58 -0
- data/lib/spiderfw/templates/blocks/yield.rb +18 -0
- data/lib/spiderfw/templates/layout.rb +44 -0
- data/lib/spiderfw/templates/resources/less.rb +14 -0
- data/lib/spiderfw/templates/template.rb +625 -0
- data/lib/spiderfw/templates/template_blocks.rb +185 -0
- data/lib/spiderfw/utils/annotations.rb +201 -0
- data/lib/spiderfw/utils/fork.rb +75 -0
- data/lib/spiderfw/utils/hash_comparison.rb +8 -0
- data/lib/spiderfw/utils/inflector.rb +42 -0
- data/lib/spiderfw/utils/logger.rb +92 -0
- data/lib/spiderfw/utils/monkey/class.rb +59 -0
- data/lib/spiderfw/utils/monkey/date_time.rb +34 -0
- data/lib/spiderfw/utils/monkey/debugger.rb +25 -0
- data/lib/spiderfw/utils/monkey/exception.rb +23 -0
- data/lib/spiderfw/utils/monkey/kernel.rb +12 -0
- data/lib/spiderfw/utils/monkey/module.rb +12 -0
- data/lib/spiderfw/utils/monkey/symbol.rb +7 -0
- data/lib/spiderfw/utils/monkey/time.rb +17 -0
- data/lib/spiderfw/utils/multi_level_hash.rb +33 -0
- data/lib/spiderfw/utils/periodic_runner.rb +50 -0
- data/lib/spiderfw/utils/rails.rb +78 -0
- data/lib/spiderfw/utils/rails_app.rb +53 -0
- data/lib/spiderfw/utils/sanitizer.rb +178 -0
- data/lib/spiderfw/utils/setup_task.rb +35 -0
- data/lib/spiderfw/utils/shared_store/file_shared_store.rb +73 -0
- data/lib/spiderfw/utils/shared_store/memory_shared_store.rb +46 -0
- data/lib/spiderfw/utils/shared_store.rb +47 -0
- data/lib/spiderfw/utils/test_case.rb +24 -0
- data/lib/spiderfw/utils/thread_out.rb +24 -0
- data/lib/spiderfw/version.rb +3 -0
- data/lib/spiderfw/widget/rest_model.rb +20 -0
- data/lib/spiderfw/widget/widget.rb +671 -0
- data/lib/spiderfw/widget/widget_attributes.rb +54 -0
- data/lib/spiderfw/widget/widget_plugin.rb +37 -0
- data/lib/spiderfw.rb +509 -0
- data/spider.gemspec +43 -0
- data/views/errors/404.shtml +6 -0
- data/views/errors/error.layout.shtml +70 -0
- data/views/errors/error_generic.shtml +6 -0
- metadata +800 -0
@@ -0,0 +1,533 @@
|
|
1
|
+
require 'spiderfw/model/storage/db/db_storage'
|
2
|
+
require 'oci8'
|
3
|
+
|
4
|
+
module Spider; module Model; module Storage; module Db
|
5
|
+
|
6
|
+
class OCI8 < DbStorage
|
7
|
+
@capabilities = {
|
8
|
+
:autoincrement => false,
|
9
|
+
:sequences => true,
|
10
|
+
:transactions => true
|
11
|
+
}
|
12
|
+
@reserved_keywords = superclass.reserved_keywords + ['oci8_row_num', 'file', 'uid']
|
13
|
+
@safe_conversions = {
|
14
|
+
'CHAR' => ['VARCHAR', 'CLOB'],
|
15
|
+
'VARCHAR' => ['CLOB'],
|
16
|
+
'NUMBER' => ['VARCHAR']
|
17
|
+
}
|
18
|
+
class << self; attr_reader :reserved_kewords, :safe_conversions end
|
19
|
+
|
20
|
+
def self.base_types
|
21
|
+
super << Spider::DataTypes::Binary
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.new_connection(user, pass, dbname, role)
|
25
|
+
conn ||= ::OCI8.new(user, pass, dbname, role)
|
26
|
+
conn.autocommit = true
|
27
|
+
return conn
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.disconnect(conn)
|
31
|
+
conn.logoff
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.connection_alive?(conn)
|
35
|
+
# TODO: move to ping method when ruby-oci8 2.x is stable
|
36
|
+
begin
|
37
|
+
conn.autocommit?
|
38
|
+
return true
|
39
|
+
rescue
|
40
|
+
return false
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def release
|
45
|
+
begin
|
46
|
+
curr[:conn].autocommit = true if curr[:conn]
|
47
|
+
super
|
48
|
+
rescue
|
49
|
+
self.class.remove_connection(curr[:conn], @connection_params)
|
50
|
+
curr[:conn] = nil
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def parse_url(url)
|
55
|
+
# db:oracle://<username:password>:connect_role@<database>
|
56
|
+
# where database is
|
57
|
+
# the net8 connect string or
|
58
|
+
# for Oracle client 10g or later, //hostname_or_ip:port_no/oracle_sid
|
59
|
+
if (url =~ /.+:\/\/(?:(.+):(.+)(?::(.+))?@)?(.+)/)
|
60
|
+
@user = $1
|
61
|
+
@pass = $2
|
62
|
+
@role = $3
|
63
|
+
@dbname = $4
|
64
|
+
else
|
65
|
+
raise ArgumentError, "OCI8 url '#{url}' is invalid"
|
66
|
+
end
|
67
|
+
@connection_params = [@user, @pass, @dbname, @role]
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
def do_start_transaction
|
72
|
+
connection.autocommit = false
|
73
|
+
end
|
74
|
+
|
75
|
+
def in_transaction?
|
76
|
+
return curr[:conn] && !curr[:conn].autocommit?
|
77
|
+
end
|
78
|
+
|
79
|
+
def do_commit
|
80
|
+
curr[:conn].commit if curr[:conn]
|
81
|
+
release
|
82
|
+
end
|
83
|
+
|
84
|
+
def do_rollback
|
85
|
+
curr[:conn].rollback
|
86
|
+
release
|
87
|
+
end
|
88
|
+
|
89
|
+
def prepare_value(type, value)
|
90
|
+
value = super
|
91
|
+
if (type < Spider::Model::BaseModel)
|
92
|
+
type = type.primary_keys[0].type
|
93
|
+
end
|
94
|
+
return OCI8NilValue.new(Spider::Model.ruby_type(type)) if (value == nil)
|
95
|
+
case type.name
|
96
|
+
when 'Spider::DataTypes::Binary'
|
97
|
+
return OCI8::BLOB.new(curr[:conn], value)
|
98
|
+
end
|
99
|
+
return value
|
100
|
+
end
|
101
|
+
|
102
|
+
def value_for_condition(type, value)
|
103
|
+
return value if value.nil?
|
104
|
+
super
|
105
|
+
end
|
106
|
+
|
107
|
+
def value_to_mapper(type, value)
|
108
|
+
case type.name
|
109
|
+
when 'Date', 'DateTime'
|
110
|
+
return nil unless value
|
111
|
+
return value.to_datetime if type == DateTime
|
112
|
+
return value.to_date # FIXME: check what is returned, here we espect an OCI8::Date
|
113
|
+
when 'Spider::DataTypes::Text'
|
114
|
+
value = value ? value.read : ''
|
115
|
+
end
|
116
|
+
return super(type, value)
|
117
|
+
end
|
118
|
+
|
119
|
+
def execute(sql, *bind_vars)
|
120
|
+
begin
|
121
|
+
if (bind_vars && bind_vars.length > 0)
|
122
|
+
debug_vars = bind_vars.map{|var| var = var.to_s; var && var.length > 50 ? var[0..50]+"...(#{var.length-50} chars more)" : var}
|
123
|
+
end
|
124
|
+
curr[:last_executed] = [sql, bind_vars]
|
125
|
+
if (Spider.conf.get('storage.db.replace_debug_vars'))
|
126
|
+
cnt = -1
|
127
|
+
debug("oci8 executing: "+sql.gsub(/:\d+/){
|
128
|
+
v = bind_vars[cnt]
|
129
|
+
dv = debug_vars[cnt+=1]
|
130
|
+
v.is_a?(String) ? "'#{dv}'" : dv
|
131
|
+
})
|
132
|
+
else
|
133
|
+
debug_vars_str = debug_vars ? debug_vars.join(', ') : ''
|
134
|
+
debug("oci8 executing:\n#{sql}\n[#{debug_vars_str}]")
|
135
|
+
end
|
136
|
+
cursor = connection.parse(sql)
|
137
|
+
return cursor if (!cursor || cursor.is_a?(Fixnum))
|
138
|
+
bind_vars.each_index do |i|
|
139
|
+
var = bind_vars[i]
|
140
|
+
if (var.is_a?(OCI8NilValue))
|
141
|
+
cursor.bind_param(i+1, nil, var.type, 0)
|
142
|
+
else
|
143
|
+
cursor.bind_param(i+1, var)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
res = cursor.exec
|
147
|
+
have_result = (cursor.type == ::OCI8::STMT_SELECT)
|
148
|
+
# @cursor = connection.exec(sql, *bind_vars)
|
149
|
+
if (have_result)
|
150
|
+
result = []
|
151
|
+
while (h = cursor.fetch_hash)
|
152
|
+
if block_given?
|
153
|
+
yield h
|
154
|
+
else
|
155
|
+
result << h
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
if (have_result)
|
160
|
+
unless block_given?
|
161
|
+
result.extend(StorageResult)
|
162
|
+
curr[:last_result] = result
|
163
|
+
return result
|
164
|
+
end
|
165
|
+
else
|
166
|
+
return res
|
167
|
+
end
|
168
|
+
rescue => exc
|
169
|
+
release
|
170
|
+
raise exc
|
171
|
+
ensure
|
172
|
+
cursor.close if cursor
|
173
|
+
release if curr[:conn] && !in_transaction?
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
|
178
|
+
def prepare(sql)
|
179
|
+
debug("oci8 preparing: #{sql}")
|
180
|
+
return connection.parse(sql)
|
181
|
+
end
|
182
|
+
|
183
|
+
def execute_statement(stmt, *bind_vars)
|
184
|
+
stmt.exec(bind_vars)
|
185
|
+
end
|
186
|
+
|
187
|
+
def total_rows
|
188
|
+
return nil unless curr[:last_executed]
|
189
|
+
q = curr[:last_query].clone
|
190
|
+
unless (q[:offset] || q[:limit])
|
191
|
+
return curr[:last_result] ? curr[:last_result].length : nil
|
192
|
+
end
|
193
|
+
q.delete(:offset); q.delete(:limit)
|
194
|
+
sql, vars = sql_select(q)
|
195
|
+
res = execute("SELECT COUNT(*) AS N FROM (#{sql})", *vars)
|
196
|
+
return nil unless res && res[0]
|
197
|
+
return res[0]['N'].to_i
|
198
|
+
end
|
199
|
+
|
200
|
+
def sequence_next(sequence_name)
|
201
|
+
res = execute("SELECT #{sequence_name}.NEXTVAL AS NEXT FROM DUAL")
|
202
|
+
return res[0]['NEXT'].to_i
|
203
|
+
end
|
204
|
+
|
205
|
+
|
206
|
+
##############################################################
|
207
|
+
# SQL methods #
|
208
|
+
##############################################################
|
209
|
+
|
210
|
+
def sql_drop_primary_key(table_name)
|
211
|
+
constraint_name = nil
|
212
|
+
connection do |conn|
|
213
|
+
res = conn.exec("SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS cons, user_cons_columns cols
|
214
|
+
WHERE cons.constraint_type = 'P'
|
215
|
+
AND cons.constraint_name = cols.constraint_name
|
216
|
+
AND cols.table_name = '#{table_name}'")
|
217
|
+
if h = res.fetch_hash
|
218
|
+
constraint_name = h['CONSTRAINT_NAME']
|
219
|
+
end
|
220
|
+
end
|
221
|
+
"ALTER TABLE #{table_name} DROP CONSTRAINT #{constraint_name}"
|
222
|
+
end
|
223
|
+
|
224
|
+
def sql_drop_foreign_key(table_name, key_name)
|
225
|
+
"ALTER TABLE #{table_name} DROP CONSTRAINT #{key_name}"
|
226
|
+
end
|
227
|
+
|
228
|
+
|
229
|
+
def sql_select(query)
|
230
|
+
curr[:bind_cnt] = 0
|
231
|
+
# Spider::Logger.debug("SQL SELECT:")
|
232
|
+
# Spider::Logger.debug(query)
|
233
|
+
bind_vars = query[:bind_vars] || []
|
234
|
+
if query[:limit] # Oracle is so braindead
|
235
|
+
replaced_fields = {}
|
236
|
+
replace_cnt = 0
|
237
|
+
# add first field to order if none is found; order is needed for limit
|
238
|
+
query[:order] << [query[:keys][0], 'desc'] if query[:order].length < 1
|
239
|
+
query[:order].each do |o|
|
240
|
+
field, direction = o
|
241
|
+
# i = query[:keys].index(field)
|
242
|
+
# unless i
|
243
|
+
# query[:keys].push(field)
|
244
|
+
# i = query[:keys].length < 1
|
245
|
+
# end
|
246
|
+
transformed = "O#{replace_cnt += 1}"
|
247
|
+
replaced_fields[field.to_s] = transformed
|
248
|
+
if (field.type == 'CLOB')
|
249
|
+
field = "CAST(#{field} as varchar2(100))"
|
250
|
+
end
|
251
|
+
query[:keys] << "#{field} AS #{transformed}"
|
252
|
+
end
|
253
|
+
end
|
254
|
+
keys = sql_keys(query)
|
255
|
+
order = sql_order(query)
|
256
|
+
tables_sql, tables_values = sql_tables(query)
|
257
|
+
sql = "SELECT #{keys} FROM #{tables_sql} "
|
258
|
+
bind_vars += tables_values
|
259
|
+
where, vals = sql_condition(query)
|
260
|
+
bind_vars += vals
|
261
|
+
sql += "WHERE #{where} " if where && !where.empty?
|
262
|
+
order = sql_order(query)
|
263
|
+
if (query[:limit])
|
264
|
+
if (query[:offset])
|
265
|
+
limit = "oci8_row_num between :#{curr[:bind_cnt]+=1} and :#{curr[:bind_cnt]+=1}"
|
266
|
+
bind_vars << query[:offset] + 1
|
267
|
+
bind_vars << query[:offset] + query[:limit]
|
268
|
+
else
|
269
|
+
limit = "oci8_row_num < :#{curr[:bind_cnt]+=1}"
|
270
|
+
bind_vars << query[:limit] + 1
|
271
|
+
end
|
272
|
+
replaced_fields.each do |f, repl|
|
273
|
+
order = order.gsub(f, repl)
|
274
|
+
end
|
275
|
+
if (!query[:joins].empty?)
|
276
|
+
pk_sql = query[:primary_keys].join(', ')
|
277
|
+
distinct_sql = "SELECT DISTINCT #{pk_sql} FROM #{tables_sql}"
|
278
|
+
distinct_sql += " WHERE #{where}" if where && !where.empty?
|
279
|
+
data_sql = "SELECT #{keys} FROM #{query[:tables].join(',')} WHERE #{pk_sql} IN (#{distinct_sql}) order by #{order}"
|
280
|
+
else
|
281
|
+
data_sql = "#{sql} order by #{order}"
|
282
|
+
end
|
283
|
+
count_sql = "SELECT /*+ FIRST_ROWS(n) */ a.*, ROWNUM oci8_row_num FROM (#{data_sql}) a"
|
284
|
+
sql = "SELECT * FROM (#{count_sql}) WHERE #{limit}"
|
285
|
+
else
|
286
|
+
sql += "ORDER BY #{order} " if order && !order.empty?
|
287
|
+
end
|
288
|
+
return sql, bind_vars
|
289
|
+
end
|
290
|
+
|
291
|
+
def sql_limit(query)
|
292
|
+
# already done in sql_condition
|
293
|
+
end
|
294
|
+
|
295
|
+
def sql_condition_value(key, comp, value, bound_vars=true)
|
296
|
+
if (comp.to_s.downcase == 'ilike')
|
297
|
+
comp = 'like'
|
298
|
+
key = "UPPER(#{key})"
|
299
|
+
end
|
300
|
+
if (value.nil?)
|
301
|
+
comp = comp == '=' ? "IS" : "IS NOT"
|
302
|
+
sql = "#{key} #{comp} NULL"
|
303
|
+
else
|
304
|
+
if comp.to_s.downcase == 'between'
|
305
|
+
if (bound_vars)
|
306
|
+
val0, val1 = value
|
307
|
+
else
|
308
|
+
val0 = ":#{(curr[:bind_cnt] += 1)}"; val1 = ":#{(curr[:bind_cnt] += 1)}"
|
309
|
+
end
|
310
|
+
sql = "#{key} #{comp} #{val0} AND #{val1}"
|
311
|
+
else
|
312
|
+
val = bound_vars ? ":#{(curr[:bind_cnt] += 1)}" : value
|
313
|
+
sql = "#{key} #{comp} #{val}"
|
314
|
+
end
|
315
|
+
|
316
|
+
|
317
|
+
end
|
318
|
+
return sql
|
319
|
+
end
|
320
|
+
|
321
|
+
def sql_insert(insert)
|
322
|
+
curr[:bind_cnt] = 0
|
323
|
+
keys = insert[:values].keys.join(', ')
|
324
|
+
vals = insert[:values].values.map{":#{(curr[:bind_cnt] += 1)}"}
|
325
|
+
vals = vals.join(', ')
|
326
|
+
sql = "INSERT INTO #{insert[:table]} (#{keys}) " +
|
327
|
+
"VALUES (#{vals})"
|
328
|
+
return [sql, insert[:values].values]
|
329
|
+
end
|
330
|
+
|
331
|
+
def sql_insert_values(insert)
|
332
|
+
insert[:values].values.map{":#{(curr[:bind_cnt] += 1)}"}.join(', ')
|
333
|
+
end
|
334
|
+
|
335
|
+
def sql_update(query)
|
336
|
+
curr[:bind_cnt] = 0
|
337
|
+
super
|
338
|
+
end
|
339
|
+
|
340
|
+
def sql_update_values(update)
|
341
|
+
update[:values].map{ |k, v|
|
342
|
+
val = v.is_a?(Spider::QueryFuncs::Expression) ? v : ":#{(curr[:bind_cnt] += 1)}"
|
343
|
+
"#{k} = #{val}"
|
344
|
+
}.join(', ')
|
345
|
+
end
|
346
|
+
|
347
|
+
def sql_delete(del, force=false)
|
348
|
+
curr[:bind_cnt] = 0
|
349
|
+
super
|
350
|
+
end
|
351
|
+
|
352
|
+
def sql_alter_field(table_name, name, type, attributes)
|
353
|
+
["ALTER TABLE #{table_name} MODIFY #{sql_table_field(name, type, attributes)}"]
|
354
|
+
end
|
355
|
+
|
356
|
+
def sequence_exists?(sequence_name)
|
357
|
+
check = "select SEQUENCE_NAME from user_sequences where sequence_name = :1"
|
358
|
+
res = execute(check, sequence_name)
|
359
|
+
return res[0] ? true : false
|
360
|
+
end
|
361
|
+
|
362
|
+
def create_sequence(sequence_name, start=1, increment=1)
|
363
|
+
execute("create sequence #{sequence_name} start with #{start} increment by #{increment}")
|
364
|
+
end
|
365
|
+
|
366
|
+
def update_sequence(name, val)
|
367
|
+
execute("drop sequence #{name}")
|
368
|
+
create_sequence(name, val)
|
369
|
+
end
|
370
|
+
|
371
|
+
##############################################################
|
372
|
+
# Methods to get information from the db #
|
373
|
+
##############################################################
|
374
|
+
|
375
|
+
def list_tables
|
376
|
+
return execute("SELECT TABLE_NAME FROM user_tables ORDER BY table_name").map{ |r| r['TABLE_NAME'] }
|
377
|
+
end
|
378
|
+
|
379
|
+
def describe_table(table)
|
380
|
+
columns = {}
|
381
|
+
primary_keys = []
|
382
|
+
o_foreign_keys = {}
|
383
|
+
connection do |conn|
|
384
|
+
t = conn.describe_table(table)
|
385
|
+
t.columns.each do |c|
|
386
|
+
col = {
|
387
|
+
:type => c.data_type.to_s.upcase,
|
388
|
+
:length => c.data_size,
|
389
|
+
:precision => c.precision,
|
390
|
+
:scale => c.scale,
|
391
|
+
:null => c.nullable?
|
392
|
+
}
|
393
|
+
col.delete(:length) if (col[:precision])
|
394
|
+
columns[c.name] = col
|
395
|
+
end
|
396
|
+
res = conn.exec("SELECT cols.table_name, cols.COLUMN_NAME, cols.position, cons.status, cons.owner
|
397
|
+
FROM user_constraints cons, user_cons_columns cols
|
398
|
+
WHERE cons.constraint_type = 'P'
|
399
|
+
AND cons.constraint_name = cols.constraint_name
|
400
|
+
AND cols.table_name = '#{table}'")
|
401
|
+
while h = res.fetch_hash
|
402
|
+
primary_keys << h['COLUMN_NAME']
|
403
|
+
end
|
404
|
+
res = conn.exec("SELECT cons.constraint_name as CONSTRAINT_NAME, cols.column_name as REFERENCED_COLUMN,
|
405
|
+
cols.table_name as REFERENCED_TABLE, cons.column_name as COLUMN_NAME
|
406
|
+
FROM user_tab_columns col
|
407
|
+
join user_cons_columns cons
|
408
|
+
on col.table_name = cons.table_name
|
409
|
+
and col.column_name = cons.column_name
|
410
|
+
join user_constraints cc
|
411
|
+
on cons.constraint_name = cc.constraint_name
|
412
|
+
join user_cons_columns cols
|
413
|
+
on cc.r_constraint_name = cols.constraint_name
|
414
|
+
and cons.position = cols.position
|
415
|
+
WHERE cc.constraint_type = 'R'
|
416
|
+
AND cons.table_name = '#{table}'")
|
417
|
+
while h = res.fetch_hash
|
418
|
+
fk_name = h['CONSTRAINT_NAME']
|
419
|
+
o_foreign_keys[fk_name] ||= {:table => h['REFERENCED_TABLE'], :columns => {}}
|
420
|
+
o_foreign_keys[fk_name][:columns][h['COLUMN_NAME']] = h['REFERENCED_COLUMN']
|
421
|
+
end
|
422
|
+
end
|
423
|
+
foreign_keys = []
|
424
|
+
o_foreign_keys.each do |fk_name, fk_hash|
|
425
|
+
foreign_keys << ForeignKeyConstraint.new(fk_name, fk_hash[:table], fk_hash[:columns])
|
426
|
+
end
|
427
|
+
return {:columns => columns, :primary_keys => primary_keys, :foreign_key_constraints => foreign_keys}
|
428
|
+
|
429
|
+
end
|
430
|
+
|
431
|
+
def table_exists?(table)
|
432
|
+
begin
|
433
|
+
connection do |c|
|
434
|
+
c.describe_table(table)
|
435
|
+
end
|
436
|
+
Spider.logger.debug("TABLE EXISTS #{table}")
|
437
|
+
return true
|
438
|
+
rescue OCIError
|
439
|
+
return false
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
443
|
+
# Schema methods
|
444
|
+
|
445
|
+
def column_type(type, attributes)
|
446
|
+
case type.name
|
447
|
+
when 'String'
|
448
|
+
'VARCHAR2'
|
449
|
+
when 'Spider::DataTypes::Text'
|
450
|
+
'CLOB'
|
451
|
+
when 'Fixnum'
|
452
|
+
'NUMBER'
|
453
|
+
when 'Float'
|
454
|
+
'FLOAT'
|
455
|
+
when 'Date', 'DateTime'
|
456
|
+
'DATE'
|
457
|
+
when 'Spider::DataTypes::Binary'
|
458
|
+
'BLOB'
|
459
|
+
when 'Spider::DataTypes::Bool'
|
460
|
+
'NUMBER'
|
461
|
+
end
|
462
|
+
end
|
463
|
+
|
464
|
+
def column_attributes(type, attributes)
|
465
|
+
db_attributes = super(type, attributes)
|
466
|
+
case type.name
|
467
|
+
when 'String'
|
468
|
+
db_attributes[:length] = attributes[:length] || 255
|
469
|
+
when 'Fixnum'
|
470
|
+
db_attributes[:precision] = attributes[:precision] || 38
|
471
|
+
db_attributes[:length] = nil
|
472
|
+
when 'Float'
|
473
|
+
# FIXME
|
474
|
+
db_attributes[:precision] = attributes[:precision] if (attributes[:precision])
|
475
|
+
when 'Spider::DataTypes::Bool'
|
476
|
+
db_attributes[:precision] = 1
|
477
|
+
db_attributes[:length] = nil
|
478
|
+
end
|
479
|
+
return db_attributes
|
480
|
+
end
|
481
|
+
|
482
|
+
def table_name(name)
|
483
|
+
table_name = name.to_s.gsub('::', '_')
|
484
|
+
return shorten_identifier(table_name, 30).upcase
|
485
|
+
end
|
486
|
+
|
487
|
+
def column_name(name)
|
488
|
+
super.upcase
|
489
|
+
end
|
490
|
+
|
491
|
+
def sequence_name(name)
|
492
|
+
shorten_identifier(name, 30).upcase
|
493
|
+
end
|
494
|
+
|
495
|
+
def foreign_key_name(name)
|
496
|
+
shorten_identifier(super, 30)
|
497
|
+
end
|
498
|
+
|
499
|
+
def schema_field_varchar2_equal?(current, field)
|
500
|
+
# FIXME: can't find the length
|
501
|
+
return true
|
502
|
+
end
|
503
|
+
|
504
|
+
def schema_field_number_equal?(current, field)
|
505
|
+
# FIXME: where is the precision?
|
506
|
+
return true
|
507
|
+
end
|
508
|
+
|
509
|
+
|
510
|
+
end
|
511
|
+
|
512
|
+
class OCI8NilValue
|
513
|
+
attr_accessor :type
|
514
|
+
|
515
|
+
def initialize(type)
|
516
|
+
@type = type
|
517
|
+
@type = Fixnum if @type == TrueClass || @type == FalseClass
|
518
|
+
end
|
519
|
+
|
520
|
+
def to_s
|
521
|
+
'NULL'
|
522
|
+
end
|
523
|
+
|
524
|
+
end
|
525
|
+
|
526
|
+
###############################
|
527
|
+
# Exceptions #
|
528
|
+
###############################
|
529
|
+
|
530
|
+
class OCI8Exception < RuntimeError
|
531
|
+
end
|
532
|
+
|
533
|
+
end; end; end; end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
require 'spiderfw/model/storage/db/db_storage'
|
2
|
+
require 'sqlite3'
|
3
|
+
|
4
|
+
module Spider; module Model; module Storage; module Db
|
5
|
+
|
6
|
+
class SQLite < DbStorage
|
7
|
+
@reserved_keywords = superclass.reserved_keywords + []
|
8
|
+
@capabilities = {
|
9
|
+
:autoincrement => false,
|
10
|
+
:sequences => true,
|
11
|
+
:transactions => true
|
12
|
+
}
|
13
|
+
|
14
|
+
class << self; attr_reader :reserved_kewords; end
|
15
|
+
|
16
|
+
def self.base_types
|
17
|
+
super << Spider::DataTypes::Binary
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.new_connection(file)
|
21
|
+
@db = SQLite3::Database.new(file)
|
22
|
+
@db.results_as_hash = true
|
23
|
+
return @db
|
24
|
+
end
|
25
|
+
|
26
|
+
def connect
|
27
|
+
@conn = self.class.new_connection(*@connection_params) unless @conn
|
28
|
+
end
|
29
|
+
|
30
|
+
def release
|
31
|
+
@conn.close if @conn
|
32
|
+
@conn = nil
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
def parse_url(url)
|
37
|
+
if (url =~ /(.+?):\/\/(.+)/)
|
38
|
+
@file = $2
|
39
|
+
@file = Spider.paths[:root] + '/' + @file[2..-1] if (@file[0..1] == './')
|
40
|
+
else
|
41
|
+
raise ArgumentError, "SQLite url '#{url}' is invalid"
|
42
|
+
end
|
43
|
+
@connection_params = [@file]
|
44
|
+
end
|
45
|
+
|
46
|
+
def start_transaction
|
47
|
+
connection.transaction
|
48
|
+
end
|
49
|
+
|
50
|
+
def in_transaction?
|
51
|
+
@conn && @conn.transaction_active?
|
52
|
+
end
|
53
|
+
|
54
|
+
def commit
|
55
|
+
@conn.commit
|
56
|
+
release
|
57
|
+
end
|
58
|
+
|
59
|
+
def rollback
|
60
|
+
@conn.rollback
|
61
|
+
release
|
62
|
+
end
|
63
|
+
|
64
|
+
def assigned_key(key)
|
65
|
+
@last_insert_row_id
|
66
|
+
end
|
67
|
+
|
68
|
+
def value_for_save(type, value, save_mode)
|
69
|
+
case type.name
|
70
|
+
when 'Spider::DataTypes::Binary'
|
71
|
+
return SQLite3::Blob.new(value)
|
72
|
+
end
|
73
|
+
return value
|
74
|
+
end
|
75
|
+
|
76
|
+
def execute(sql, *bind_vars)
|
77
|
+
begin
|
78
|
+
if (bind_vars && bind_vars.length > 0)
|
79
|
+
debug_vars = bind_vars.map{|var| var = var.to_s; var && var.length > 50 ? var[0..50]+"...(#{var.length-50} chars more)" : var}.join(', ')
|
80
|
+
end
|
81
|
+
debug("sqlite executing:\n#{sql}\n[#{debug_vars}]")
|
82
|
+
|
83
|
+
result = connection.execute(sql, *bind_vars)
|
84
|
+
@last_insert_row_id = connection.last_insert_row_id
|
85
|
+
result.extend(StorageResult)
|
86
|
+
@last_result = result
|
87
|
+
if block_given?
|
88
|
+
result.each{ |row| yield row }
|
89
|
+
else
|
90
|
+
return result
|
91
|
+
end
|
92
|
+
ensure
|
93
|
+
release unless in_transaction?
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
def prepare(sql)
|
99
|
+
debug("sqlite preparing: #{sql}")
|
100
|
+
connect unless connected?
|
101
|
+
return @conn.prepare(sql)
|
102
|
+
end
|
103
|
+
|
104
|
+
def execute_statement(stmt, *bind_vars)
|
105
|
+
stmt.execute(bind_vars)
|
106
|
+
end
|
107
|
+
|
108
|
+
def total_rows
|
109
|
+
return nil unless @last_query
|
110
|
+
q = @last_query
|
111
|
+
unless (q[:offset] || q[:limit])
|
112
|
+
return @last_result ? @last_result.length : nil
|
113
|
+
end
|
114
|
+
q[:offset] = q[:limit] = nil
|
115
|
+
q[:keys] = ["COUNT(*) AS N"]
|
116
|
+
res = execute(sql_select(q), q[:bind_vars])
|
117
|
+
return res[0]['N']
|
118
|
+
end
|
119
|
+
|
120
|
+
##############################################################
|
121
|
+
# Methods to get information from the db #
|
122
|
+
##############################################################
|
123
|
+
|
124
|
+
def list_tables
|
125
|
+
return execute("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name").flatten
|
126
|
+
end
|
127
|
+
|
128
|
+
def describe_table(table)
|
129
|
+
columns = {}
|
130
|
+
stmt = prepare("select * from #{table}")
|
131
|
+
stmt.columns.each_index do |index|
|
132
|
+
field = stmt.columns[index]
|
133
|
+
columns[field] ||= {}
|
134
|
+
if (stmt.types[index] =~ /([^\(]+)(?:\((\d+)\))?/)
|
135
|
+
columns[field][:type] = $1
|
136
|
+
columns[field][:length] = $2.to_i if $2
|
137
|
+
end
|
138
|
+
end
|
139
|
+
stmt.close
|
140
|
+
return {:columns => columns}
|
141
|
+
end
|
142
|
+
|
143
|
+
def table_exists?(table)
|
144
|
+
begin
|
145
|
+
stmt = prepare("select * from #{table}")
|
146
|
+
stmt.close
|
147
|
+
return true
|
148
|
+
rescue SQLite3::SQLException
|
149
|
+
return false
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
###############################
|
157
|
+
# Exceptions #
|
158
|
+
###############################
|
159
|
+
|
160
|
+
class SQLiteException < RuntimeError
|
161
|
+
end
|
162
|
+
|
163
|
+
end; end; end; end
|