sunrise-core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +46 -0
- data/Rakefile +44 -0
- data/app/controllers/manage/assets_controller.rb +70 -0
- data/app/controllers/manage/base_controller.rb +24 -0
- data/app/controllers/manage/pages_controller.rb +37 -0
- data/app/controllers/manage/settings_controller.rb +24 -0
- data/app/controllers/manage/structures_controller.rb +45 -0
- data/app/controllers/manage/users_controller.rb +78 -0
- data/app/controllers/pages_controller.rb +22 -0
- data/app/views/layouts/manage.html.erb +40 -0
- data/app/views/manage/assets/_collection.html.erb +32 -0
- data/app/views/manage/assets/_picture.html.erb +10 -0
- data/app/views/manage/assets/_swfscript.html.erb +51 -0
- data/app/views/manage/headers/_form.html.erb +14 -0
- data/app/views/manage/pages/_form.html.erb +11 -0
- data/app/views/manage/pages/edit.html.erb +6 -0
- data/app/views/manage/pages/new.html.erb +6 -0
- data/app/views/manage/settings/_form.html.erb +22 -0
- data/app/views/manage/settings/index.html.erb +14 -0
- data/app/views/manage/shared/_head.html.erb +41 -0
- data/app/views/manage/shared/_locale.html.erb +8 -0
- data/app/views/manage/shared/_notice.html.erb +7 -0
- data/app/views/manage/shared/_panel.html.erb +34 -0
- data/app/views/manage/structures/_form.html.erb +28 -0
- data/app/views/manage/structures/_structure.html.erb +34 -0
- data/app/views/manage/structures/edit.html.erb +6 -0
- data/app/views/manage/structures/index.html.erb +51 -0
- data/app/views/manage/structures/new.html.erb +6 -0
- data/app/views/manage/users/_form.html.erb +15 -0
- data/app/views/manage/users/_model_filter.html.erb +33 -0
- data/app/views/manage/users/_user.html.erb +55 -0
- data/app/views/manage/users/edit.html.erb +6 -0
- data/app/views/manage/users/index.html.erb +36 -0
- data/app/views/manage/users/new.html.erb +6 -0
- data/app/views/manage/users/show.html.erb +19 -0
- data/config/locales/defaults/en.yml +149 -0
- data/config/locales/defaults/pluralize.rb +6 -0
- data/config/locales/defaults/ru.yml +170 -0
- data/config/locales/defaults/uk.yml +238 -0
- data/config/locales/devise.en.yml +39 -0
- data/config/locales/devise.ru.yml +41 -0
- data/config/locales/devise.uk.yml +41 -0
- data/config/locales/manage/en.yml +248 -0
- data/config/locales/manage/ru.yml +248 -0
- data/config/locales/manage/uk.yml +248 -0
- data/config/routes.rb +24 -0
- data/lib/generators/sunrise/USAGE +7 -0
- data/lib/generators/sunrise/install_generator.rb +120 -0
- data/lib/generators/sunrise/templates/config/application.yml +4 -0
- data/lib/generators/sunrise/templates/config/database.yml +34 -0
- data/lib/generators/sunrise/templates/config/logrotate-config +9 -0
- data/lib/generators/sunrise/templates/config/nginx-config-passenger +51 -0
- data/lib/generators/sunrise/templates/config/seeds.rb +25 -0
- data/lib/generators/sunrise/templates/config/sunrise.rb +7 -0
- data/lib/generators/sunrise/templates/helpers/manage/assets_helper.rb +16 -0
- data/lib/generators/sunrise/templates/helpers/manage/base_helper.rb +81 -0
- data/lib/generators/sunrise/templates/helpers/manage/pages_helper.rb +2 -0
- data/lib/generators/sunrise/templates/helpers/manage/settings_helper.rb +2 -0
- data/lib/generators/sunrise/templates/helpers/manage/structures_helper.rb +12 -0
- data/lib/generators/sunrise/templates/helpers/manage/users_helper.rb +6 -0
- data/lib/generators/sunrise/templates/images/manage/add_post_bot.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/add_post_top.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/add_white_bot.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/add_white_top.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/arrow.png +0 -0
- data/lib/generators/sunrise/templates/images/manage/back_but_lc.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/back_but_rc.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/bot_corn.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/bot_duo_corn.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/but_bg.png +0 -0
- data/lib/generators/sunrise/templates/images/manage/but_block_lc.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/but_block_rc.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/but_freze_lc.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/but_freze_rc.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/but_gr.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/but_gr_l.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/but_gr_r.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/but_search.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/but_unfreze_lc.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/but_unfreze_rc.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/button_add_foto.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/button_add_foto_ru.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/button_add_foto_ua.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/button_add_foto_uk.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/cancelbutton.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/dark_arr.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/dark_arr_left.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/dark_cross_ico.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/dot.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/duo_bg.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/duo_bg_small.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/duo_bg_small_blocked.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/duo_bg_small_frozed.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/duo_bg_small_notact.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/duo_bot_small.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/duo_bot_small_blocked.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/duo_bot_small_frozed.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/duo_bot_small_notact.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/duo_top_small.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/duo_top_small_blocked.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/duo_top_small_frozed.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/duo_top_small_notact.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/edit_white_top.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/empty.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/filter_bot_bg.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/filter_top_bg.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/flag_en.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/flag_en_nonact.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/flag_ru.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/flag_ru_nonact.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/flag_ua.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/flag_ua_nonact.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/foto.jpg +0 -0
- data/lib/generators/sunrise/templates/images/manage/ico_add.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/ico_del.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/ico_down.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/ico_edit.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/ico_settings.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/ico_up.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/input_bg.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/l_but_corn.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/minimise_but.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/mp3.png +0 -0
- data/lib/generators/sunrise/templates/images/manage/page_arr_hover.png +0 -0
- data/lib/generators/sunrise/templates/images/manage/page_next_arr.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/page_num_hover.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/page_prev_arr.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/panel/l_but_corn.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/panel/maximise_but.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/panel/r_but_corn.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/panel/top_menu_arr.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/panel/user_pic.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/preloader.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/r_but_corn.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/select_bg.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/select_corn.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/struct_corn_lg.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/struct_corn_llg.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/struct_corn_lw.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/struct_corn_rg.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/struct_corn_rlg.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/struct_corn_rw.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/tab_gl.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/tab_gr.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/tab_wl.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/tab_wr.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/top_corn.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/top_duo_corn.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/top_menu_arr.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/transp_cross.png +0 -0
- data/lib/generators/sunrise/templates/images/manage/upload_progress.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/user_act_lc.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/user_act_rc.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/user_ico.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/user_pic.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/user_pic_small.gif +0 -0
- data/lib/generators/sunrise/templates/images/manage/user_pic_thumb.gif +0 -0
- data/lib/generators/sunrise/templates/javascripts/datepicker/jquery-ui-i18n.js +1176 -0
- data/lib/generators/sunrise/templates/javascripts/datepicker/jquery.ui.datepicker-ru.js +37 -0
- data/lib/generators/sunrise/templates/javascripts/datepicker/jquery.ui.datepicker-uk.js +37 -0
- data/lib/generators/sunrise/templates/javascripts/jquery-ui-timepicker-addon.js +911 -0
- data/lib/generators/sunrise/templates/javascripts/jquery.cookie.js +97 -0
- data/lib/generators/sunrise/templates/javascripts/jquery.fancybox-1.3.4.pack.js +46 -0
- data/lib/generators/sunrise/templates/javascripts/jquery.tmpl.min.js +10 -0
- data/lib/generators/sunrise/templates/javascripts/manage.js +290 -0
- data/lib/generators/sunrise/templates/javascripts/preloader.js +47 -0
- data/lib/generators/sunrise/templates/javascripts/swfupload/fileprogress.js +114 -0
- data/lib/generators/sunrise/templates/javascripts/swfupload/handlers.js +164 -0
- data/lib/generators/sunrise/templates/javascripts/swfupload/swfupload.js +1134 -0
- data/lib/generators/sunrise/templates/javascripts/swfupload/swfupload.queue.js +98 -0
- data/lib/generators/sunrise/templates/javascripts/swfupload/swfupload.swf +0 -0
- data/lib/generators/sunrise/templates/migrate/create_assets.rb +28 -0
- data/lib/generators/sunrise/templates/migrate/create_headers.rb +20 -0
- data/lib/generators/sunrise/templates/migrate/create_pages.rb +17 -0
- data/lib/generators/sunrise/templates/migrate/create_roles.rb +16 -0
- data/lib/generators/sunrise/templates/migrate/create_structures.rb +27 -0
- data/lib/generators/sunrise/templates/migrate/create_users.rb +29 -0
- data/lib/generators/sunrise/templates/models/defaults/ability.rb +38 -0
- data/lib/generators/sunrise/templates/models/defaults/asset.rb +7 -0
- data/lib/generators/sunrise/templates/models/defaults/attachment_file.rb +33 -0
- data/lib/generators/sunrise/templates/models/defaults/avatar.rb +36 -0
- data/lib/generators/sunrise/templates/models/defaults/header.rb +5 -0
- data/lib/generators/sunrise/templates/models/defaults/page.rb +5 -0
- data/lib/generators/sunrise/templates/models/defaults/picture.rb +34 -0
- data/lib/generators/sunrise/templates/models/defaults/position_type.rb +7 -0
- data/lib/generators/sunrise/templates/models/defaults/role.rb +20 -0
- data/lib/generators/sunrise/templates/models/defaults/role_type.rb +8 -0
- data/lib/generators/sunrise/templates/models/defaults/structure.rb +11 -0
- data/lib/generators/sunrise/templates/models/defaults/structure_type.rb +9 -0
- data/lib/generators/sunrise/templates/models/defaults/user.rb +51 -0
- data/lib/generators/sunrise/templates/stylesheets/application.css +1 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/blank.gif +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_close.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_loading.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_nav_left.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_nav_right.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_e.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_n.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_ne.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_nw.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_s.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_se.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_sw.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_shadow_w.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_title_left.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_title_main.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_title_over.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancy_title_right.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancybox-x.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancybox-y.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/images/fancybox.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/fancybox/jquery.fancybox-1.3.4.css +359 -0
- data/lib/generators/sunrise/templates/stylesheets/manage/ie.css +16 -0
- data/lib/generators/sunrise/templates/stylesheets/manage/main.css +1074 -0
- data/lib/generators/sunrise/templates/stylesheets/manage/panel.css +126 -0
- data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/lib/generators/sunrise/templates/stylesheets/smoothness/jquery-ui-1.8.6.custom.css +572 -0
- data/lib/generators/sunrise/templates/sweepers/page_sweeper.rb +22 -0
- data/lib/generators/sunrise/templates/sweepers/structure_sweeper.rb +29 -0
- data/lib/generators/sunrise/templates/sweepers/user_sweeper.rb +17 -0
- data/lib/generators/sunrise/templates/views/layouts/application.html.erb +37 -0
- data/lib/generators/sunrise/templates/views/pages/show.html.erb +2 -0
- data/lib/generators/sunrise/templates/views/shared/_notice.html.erb +17 -0
- data/lib/sunrise/controllers/head_options.rb +40 -0
- data/lib/sunrise/core.rb +80 -0
- data/lib/sunrise/core_ext/array.rb +22 -0
- data/lib/sunrise/core_ext/i18n.rb +21 -0
- data/lib/sunrise/core_ext/string.rb +28 -0
- data/lib/sunrise/core_ext.rb +3 -0
- data/lib/sunrise/core_plugins.rb +32 -0
- data/lib/sunrise/engine.rb +45 -0
- data/lib/sunrise/model_filter.rb +158 -0
- data/lib/sunrise/models/asset.rb +102 -0
- data/lib/sunrise/models/header.rb +34 -0
- data/lib/sunrise/models/page.rb +27 -0
- data/lib/sunrise/models/position_type.rb +15 -0
- data/lib/sunrise/models/role.rb +28 -0
- data/lib/sunrise/models/role_type.rb +15 -0
- data/lib/sunrise/models/structure.rb +43 -0
- data/lib/sunrise/models/structure_type.rb +15 -0
- data/lib/sunrise/models/user.rb +124 -0
- data/lib/sunrise/plugin.rb +46 -0
- data/lib/sunrise/plugins.rb +56 -0
- data/lib/sunrise/system_settings.rb +65 -0
- data/lib/sunrise/utils/accessible_attributes.rb +32 -0
- data/lib/sunrise/utils/header.rb +29 -0
- data/lib/sunrise/utils/i18n_backend.rb +87 -0
- data/lib/sunrise/utils/mysql.rb +105 -0
- data/lib/sunrise/utils/settingslogic.rb +164 -0
- data/lib/sunrise/utils/transliteration.rb +72 -0
- data/lib/sunrise/version.rb +3 -0
- data/lib/sunrise/views/form_builder.rb +44 -0
- data/lib/sunrise/views/helpers.rb +190 -0
- data/lib/sunrise/views/inputs/date_time_input.rb +46 -0
- data/lib/sunrise-core.rb +2 -0
- metadata +492 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Sunrise
|
|
3
|
+
module Models
|
|
4
|
+
module Role
|
|
5
|
+
def self.included(base)
|
|
6
|
+
base.send :include, InstanceMethods
|
|
7
|
+
base.send :extend, ClassMethods
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
module ClassMethods
|
|
11
|
+
def self.extended(base)
|
|
12
|
+
base.class_eval do
|
|
13
|
+
belongs_to :user
|
|
14
|
+
|
|
15
|
+
enumerated_attribute :role_type, :id_attribute => :role_type
|
|
16
|
+
attr_accessible :role_type
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
module InstanceMethods
|
|
22
|
+
def to_sym
|
|
23
|
+
role_type.code
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Sunrise
|
|
3
|
+
module Models
|
|
4
|
+
module Structure
|
|
5
|
+
def self.included(base)
|
|
6
|
+
base.send :include, InstanceMethods
|
|
7
|
+
base.send :extend, ClassMethods
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
module ClassMethods
|
|
11
|
+
def self.extended(base)
|
|
12
|
+
base.send(:include, Utils::Header)
|
|
13
|
+
base.class_eval do
|
|
14
|
+
enumerated_attribute :structure_type, :id_attribute => :kind
|
|
15
|
+
enumerated_attribute :position_type, :id_attribute => :position
|
|
16
|
+
|
|
17
|
+
validates_presence_of :title
|
|
18
|
+
validates_numericality_of :position, :only_integer => true
|
|
19
|
+
|
|
20
|
+
has_one :page, :dependent => :destroy
|
|
21
|
+
has_many :posts, :dependent => :destroy
|
|
22
|
+
|
|
23
|
+
scope :visible, where(:is_visible => true)
|
|
24
|
+
scope :with_kind, proc {|structure_type| where(:kind => structure_type.id) }
|
|
25
|
+
scope :with_depth, proc {|level| where(:depth => level.to_i) }
|
|
26
|
+
scope :with_position, proc {|position_type| where(:position => position_type.id) }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def find_by_permalink(value)
|
|
31
|
+
value.to_s.is_int? ? find(value) : where(:slug => value.to_s).first
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
module InstanceMethods
|
|
36
|
+
def moveable?
|
|
37
|
+
return true if new_record?
|
|
38
|
+
!root?
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Sunrise
|
|
3
|
+
module Models
|
|
4
|
+
module User
|
|
5
|
+
def self.included(base)
|
|
6
|
+
base.send :include, InstanceMethods
|
|
7
|
+
base.send :extend, ClassMethods
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
module ClassMethods
|
|
11
|
+
def self.extended(base)
|
|
12
|
+
base.class_eval do
|
|
13
|
+
has_many :roles, :dependent => :delete_all
|
|
14
|
+
has_one :avatar, :as => :assetable, :dependent => :destroy, :autosave => true
|
|
15
|
+
|
|
16
|
+
scope :with_role, lambda {|role| joins(:roles).where(["`roles`.role_type = ?", role.id]) }
|
|
17
|
+
scope :defaults, with_role(::RoleType.default)
|
|
18
|
+
scope :moderators, with_role(::RoleType.moderator)
|
|
19
|
+
scope :admins, with_role(::RoleType.admin)
|
|
20
|
+
|
|
21
|
+
before_validation :generate_login, :if => :has_login?
|
|
22
|
+
before_create :set_default_role, :if => :roles_empty?
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
module InstanceMethods
|
|
28
|
+
def default?
|
|
29
|
+
has_role?(:default)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def moderator?
|
|
33
|
+
has_role?(:moderator)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def admin?
|
|
37
|
+
has_role?(:admin)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def has_role?(role_name)
|
|
41
|
+
role_symbols.include?(role_name.to_sym)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def roles_empty?
|
|
45
|
+
self.roles.empty?
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def has_login?
|
|
49
|
+
respond_to?(:login)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def roles_attributes=(value)
|
|
53
|
+
options = value || {}
|
|
54
|
+
options.each do |k, v|
|
|
55
|
+
create_or_destroy_role(k.to_i, v.to_i == 1)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def role_symbols
|
|
60
|
+
(roles || []).map {|r| r.to_sym}
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def current_role
|
|
64
|
+
self.roles.first
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def role_type_id
|
|
68
|
+
if current_role
|
|
69
|
+
current_role.role_type.id
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def role_type_id=(value)
|
|
74
|
+
role_id = value.blank? ? nil : value.to_i
|
|
75
|
+
|
|
76
|
+
if ::RoleType.all.map(&:id).include?(role_id)
|
|
77
|
+
::RoleType.all.each do |role_type|
|
|
78
|
+
create_or_destroy_role(role_type.id, role_type.id == role_id)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def state
|
|
84
|
+
return 'active' if active_for_authentication?
|
|
85
|
+
return 'register' unless confirmed?
|
|
86
|
+
return 'suspend' if access_locked?
|
|
87
|
+
'pending'
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def events_for_current_state
|
|
91
|
+
events = []
|
|
92
|
+
events << 'activate' if state == 'register'
|
|
93
|
+
events
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
protected
|
|
97
|
+
|
|
98
|
+
def set_default_role
|
|
99
|
+
unless has_role?(:default)
|
|
100
|
+
self.roles.build(:role_type => ::RoleType.default)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def create_or_destroy_role(role_id, need_create = true)
|
|
105
|
+
role = self.roles.detect { |r| r.role_type.id == role_id }
|
|
106
|
+
if need_create
|
|
107
|
+
role ||= self.roles.build(:role_type => ::RoleType.find(role_id))
|
|
108
|
+
elsif !role.nil?
|
|
109
|
+
self.roles.delete(role)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def generate_login
|
|
114
|
+
self.login ||= begin
|
|
115
|
+
unless email.blank?
|
|
116
|
+
tmp_login = email.split('@').first
|
|
117
|
+
tmp_login.parameterize.downcase.gsub(/[^A-Za-z0-9-]+/, '-').gsub(/-+/, '-')
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module Sunrise
|
|
2
|
+
class Plugin
|
|
3
|
+
attr_accessor :name, :model, :menu, :version, :klass, :klass_name
|
|
4
|
+
|
|
5
|
+
def initialize(name)
|
|
6
|
+
@name = name.to_s.downcase
|
|
7
|
+
@menu = false
|
|
8
|
+
@klass = nil
|
|
9
|
+
@klass_name = nil
|
|
10
|
+
|
|
11
|
+
Sunrise::Plugins.registered << self
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def module_name
|
|
15
|
+
@module_name ||= @name.singularize.camelize.to_sym
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def klass
|
|
19
|
+
@klass ||= klass_name.constantize
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def klass_name
|
|
23
|
+
@klass_name ||= @name.singularize.camelize
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def title
|
|
27
|
+
I18n.t(@name, :scope => [:manage, :plugins])
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.register(name, &block)
|
|
31
|
+
plugin = self.new(name)
|
|
32
|
+
|
|
33
|
+
yield plugin
|
|
34
|
+
|
|
35
|
+
raise "A plugin MUST have a name!: #{plugin.inspect}" if plugin.name.blank?
|
|
36
|
+
|
|
37
|
+
plugin.version ||= Sunrise::VERSION.dup
|
|
38
|
+
|
|
39
|
+
if plugin.model
|
|
40
|
+
model_path = (plugin.model == true ? "sunrise/models/#{plugin.name}" : plugin.model)
|
|
41
|
+
Sunrise::Models.send(:autoload, plugin.module_name, model_path)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
module Sunrise
|
|
2
|
+
class Plugins < Array
|
|
3
|
+
|
|
4
|
+
def initialize
|
|
5
|
+
@plugins = []
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def find_by_name(name)
|
|
9
|
+
self.detect { |plugin| plugin.name == name.to_s.downcase }
|
|
10
|
+
end
|
|
11
|
+
alias :[] :find_by_name
|
|
12
|
+
|
|
13
|
+
def find_by_title(title)
|
|
14
|
+
self.detect { |plugin| plugin.title == title }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def menu(value)
|
|
18
|
+
self.select { |p| p.menu == value.to_s.downcase }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def names
|
|
22
|
+
self.map(&:name)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def titles
|
|
26
|
+
self.map(&:title)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class << self
|
|
30
|
+
def active
|
|
31
|
+
@active_plugins ||= self.new
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def registered
|
|
35
|
+
@registered_plugins ||= self.new
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def activate(name)
|
|
39
|
+
active << registered[name] if registered[name] && !active[name]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def deactivate(name)
|
|
43
|
+
active.delete_if {|p| p.name == name}
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def set_active(names)
|
|
47
|
+
@active_plugins = self.new
|
|
48
|
+
|
|
49
|
+
names.each do |name|
|
|
50
|
+
activate(name)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'ostruct'
|
|
3
|
+
|
|
4
|
+
module Sunrise
|
|
5
|
+
class SystemSettings < Utils::Settingslogic
|
|
6
|
+
source Rails.root.join("config", "application.yml")
|
|
7
|
+
#namespace (Rails.env.to_s || 'development')
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
def ostruct
|
|
11
|
+
instance.serialize
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def update_settings(attributes)
|
|
15
|
+
instance.update attributes
|
|
16
|
+
instance.save
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def write(hash)
|
|
20
|
+
begin
|
|
21
|
+
File.open(source, 'w') do |file|
|
|
22
|
+
file.write hash.to_yaml
|
|
23
|
+
end
|
|
24
|
+
rescue Exception => e
|
|
25
|
+
return false
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def hashes_to_openstructs(obj, memo={})
|
|
30
|
+
return obj unless Hash === obj
|
|
31
|
+
|
|
32
|
+
memo[obj.object_id] ||= OpenStruct.new( Hash[
|
|
33
|
+
*obj.inject( [] ) { |a, (k, v)|
|
|
34
|
+
a.push k, hashes_to_openstructs( v, memo )
|
|
35
|
+
}
|
|
36
|
+
])
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def save
|
|
41
|
+
if self.class.namespace
|
|
42
|
+
hash = YAML.load(ERB.new(File.read(self.class.source)).result).to_hash
|
|
43
|
+
hash[self.class.namespace] ||= {}
|
|
44
|
+
hash[self.class.namespace].update self
|
|
45
|
+
else
|
|
46
|
+
hash = self
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
self.class.write(hash)
|
|
50
|
+
reload
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def reload
|
|
54
|
+
@instance = nil
|
|
55
|
+
@struct = nil
|
|
56
|
+
|
|
57
|
+
return true
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def serialize
|
|
61
|
+
@struct ||= self.class.hashes_to_openstructs(self)
|
|
62
|
+
@struct
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Sunrise
|
|
3
|
+
module Utils
|
|
4
|
+
module AccessibleAttributes
|
|
5
|
+
def self.included(base)
|
|
6
|
+
base.send(:extend, ClassMethods)
|
|
7
|
+
base.send(:include, InstanceMethods)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
module ClassMethods
|
|
11
|
+
def self.extended(base)
|
|
12
|
+
base.class_eval do
|
|
13
|
+
attr_accessible
|
|
14
|
+
attr_accessor :accessible
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
module InstanceMethods
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
def mass_assignment_authorizer
|
|
23
|
+
if accessible == :all
|
|
24
|
+
self.class.protected_attributes
|
|
25
|
+
else
|
|
26
|
+
super + (accessible || [])
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Sunrise
|
|
3
|
+
module Utils
|
|
4
|
+
module Header
|
|
5
|
+
def self.included(base)
|
|
6
|
+
base.send(:extend, ClassMethods)
|
|
7
|
+
base.send(:include, InstanceMethods)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
module ClassMethods
|
|
11
|
+
def self.extended(base)
|
|
12
|
+
base.class_eval do
|
|
13
|
+
has_one :header, :as => :headerable, :dependent => :delete
|
|
14
|
+
|
|
15
|
+
attr_accessible :header_attributes
|
|
16
|
+
|
|
17
|
+
accepts_nested_attributes_for :header, :reject_if => :all_blank
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
module InstanceMethods
|
|
23
|
+
def default_header
|
|
24
|
+
header || build_header
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Sunrise
|
|
3
|
+
module Utils
|
|
4
|
+
|
|
5
|
+
# "Продвинутый" бекэнд для I18n.
|
|
6
|
+
#
|
|
7
|
+
# Наследует Simple бекэнд и полностью с ним совместим. Добаляет поддержку
|
|
8
|
+
# для отдельностоящих/контекстных названий дней недели и месяцев.
|
|
9
|
+
# Также позволяет каждому языку использовать собственные правила плюрализации,
|
|
10
|
+
# объявленные как Proc (<tt>lambda</tt>).
|
|
11
|
+
#
|
|
12
|
+
#
|
|
13
|
+
# Advanced I18n backend.
|
|
14
|
+
#
|
|
15
|
+
# Extends Simple backend. Allows usage of "standalone" keys
|
|
16
|
+
# for DateTime localization and usage of user-defined Proc (lambda) pluralization
|
|
17
|
+
# methods in translation tables.
|
|
18
|
+
class I18nBackend < ::I18n::Backend::Simple
|
|
19
|
+
include ::I18n::Backend::Pluralization
|
|
20
|
+
|
|
21
|
+
LOCALIZE_ABBR_MONTH_NAMES_MATCH = /(%d|%e)(.*)(%b)/
|
|
22
|
+
LOCALIZE_MONTH_NAMES_MATCH = /(%d|%e)(.*)(%B)/
|
|
23
|
+
LOCALIZE_STANDALONE_ABBR_DAY_NAMES_MATCH = /^%a/
|
|
24
|
+
LOCALIZE_STANDALONE_DAY_NAMES_MATCH = /^%A/
|
|
25
|
+
|
|
26
|
+
# Acts the same as +strftime+, but returns a localized version of the
|
|
27
|
+
# formatted date string. Takes a key from the date/time formats
|
|
28
|
+
# translations as a format argument (<em>e.g.</em>, <tt>:short</tt> in <tt>:'date.formats'</tt>).
|
|
29
|
+
#
|
|
30
|
+
#
|
|
31
|
+
# Метод отличается от <tt>localize</tt> в Simple бекэнде поддержкой
|
|
32
|
+
# отдельностоящих/контекстных названий дней недели и месяцев.
|
|
33
|
+
#
|
|
34
|
+
#
|
|
35
|
+
# Note that it differs from <tt>localize</tt> in Simple< backend by checking for
|
|
36
|
+
# "standalone" month name/day name keys in translation and using them if available.
|
|
37
|
+
#
|
|
38
|
+
# <tt>options</tt> parameter added for i18n-0.3 compliance.
|
|
39
|
+
def localize(locale, object, format = :default, options = nil)
|
|
40
|
+
raise ArgumentError, "Object must be a Date, DateTime or Time object. #{object.inspect} given." unless object.respond_to?(:strftime)
|
|
41
|
+
|
|
42
|
+
type = object.respond_to?(:sec) ? 'time' : 'date'
|
|
43
|
+
# TODO only translate these if format is a String?
|
|
44
|
+
formats = translate(locale, :"#{type}.formats")
|
|
45
|
+
format = formats[format.to_sym] if formats && formats[format.to_sym]
|
|
46
|
+
# TODO raise exception unless format found?
|
|
47
|
+
format = format.to_s.dup
|
|
48
|
+
|
|
49
|
+
# TODO only translate these if the format string is actually present
|
|
50
|
+
# TODO check which format strings are present, then bulk translate then, then replace them
|
|
51
|
+
|
|
52
|
+
if lookup(locale, :"date.standalone_abbr_day_names")
|
|
53
|
+
format.gsub!(LOCALIZE_STANDALONE_ABBR_DAY_NAMES_MATCH,
|
|
54
|
+
translate(locale, :"date.standalone_abbr_day_names")[object.wday])
|
|
55
|
+
end
|
|
56
|
+
format.gsub!(/%a/, translate(locale, :"date.abbr_day_names")[object.wday])
|
|
57
|
+
|
|
58
|
+
if lookup(locale, :"date.standalone_day_names")
|
|
59
|
+
format.gsub!(LOCALIZE_STANDALONE_DAY_NAMES_MATCH,
|
|
60
|
+
translate(locale, :"date.standalone_day_names")[object.wday])
|
|
61
|
+
end
|
|
62
|
+
format.gsub!(/%A/, translate(locale, :"date.day_names")[object.wday])
|
|
63
|
+
|
|
64
|
+
if lookup(locale, :"date.standalone_abbr_month_names")
|
|
65
|
+
format.gsub!(LOCALIZE_ABBR_MONTH_NAMES_MATCH) do
|
|
66
|
+
$1 + $2 + translate(locale, :"date.abbr_month_names")[object.mon]
|
|
67
|
+
end
|
|
68
|
+
format.gsub!(/%b/, translate(locale, :"date.standalone_abbr_month_names")[object.mon])
|
|
69
|
+
else
|
|
70
|
+
format.gsub!(/%b/, translate(locale, :"date.abbr_month_names")[object.mon])
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
if lookup(locale, :"date.standalone_month_names")
|
|
74
|
+
format.gsub!(LOCALIZE_MONTH_NAMES_MATCH) do
|
|
75
|
+
$1 + $2 + translate(locale, :"date.month_names")[object.mon]
|
|
76
|
+
end
|
|
77
|
+
format.gsub!(/%B/, translate(locale, :"date.standalone_month_names")[object.mon])
|
|
78
|
+
else
|
|
79
|
+
format.gsub!(/%B/, translate(locale, :"date.month_names")[object.mon])
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
format.gsub!(/%p/, translate(locale, :"time.#{object.hour < 12 ? :am : :pm}")) if object.respond_to? :hour
|
|
83
|
+
object.strftime(format)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Sunrise
|
|
3
|
+
module Utils
|
|
4
|
+
module Mysql
|
|
5
|
+
def self.included(base)
|
|
6
|
+
base.extend(ClassMethods)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
module ClassMethods
|
|
10
|
+
|
|
11
|
+
def values(column = 'id')
|
|
12
|
+
query = scoped.select(column)
|
|
13
|
+
connection.select_values(query.to_sql).map(&:to_i).uniq
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Check if database exists
|
|
17
|
+
def database_exists?
|
|
18
|
+
_options = configurations[Rails.env].dup
|
|
19
|
+
_options.symbolize_keys!
|
|
20
|
+
|
|
21
|
+
begin
|
|
22
|
+
connection
|
|
23
|
+
return true
|
|
24
|
+
rescue Exception => e
|
|
25
|
+
return false
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Deletes all rows in table very fast, but without calling +destroy+ method
|
|
30
|
+
# nor any hooks.
|
|
31
|
+
def truncate_table
|
|
32
|
+
transaction { connection.execute("TRUNCATE TABLE #{quoted_table_name};") }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Disables key updates for model table
|
|
36
|
+
def disable_keys
|
|
37
|
+
connection.execute("ALTER TABLE #{quoted_table_name} DISABLE KEYS")
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Enables key updates for model table
|
|
41
|
+
def enable_keys
|
|
42
|
+
connection.execute("ALTER TABLE #{quoted_table_name} ENABLE KEYS")
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Disables keys, yields block, enables keys.
|
|
46
|
+
def with_keys_disabled
|
|
47
|
+
disable_keys
|
|
48
|
+
yield
|
|
49
|
+
enable_keys
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Loads data from file(s) using MySQL native LOAD DATA INFILE query, disabling
|
|
53
|
+
# key updates for even faster import speed
|
|
54
|
+
#
|
|
55
|
+
# ==== Parameters
|
|
56
|
+
# * +files+ file(s) to import
|
|
57
|
+
# * +options+ (see <tt>load_data_infile</tt>)
|
|
58
|
+
def fast_import(files, options = {})
|
|
59
|
+
files = [files] unless files.is_a? Array
|
|
60
|
+
with_keys_disabled do
|
|
61
|
+
load_data_infile_multiple(files, options)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Loads data from multiple files using MySQL native LOAD DATA INFILE query
|
|
66
|
+
def load_data_infile_multiple(files, options = {})
|
|
67
|
+
files.each do |file|
|
|
68
|
+
load_data_infile(file, options)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Loads data from file using MySQL native LOAD DATA INFILE query
|
|
73
|
+
#
|
|
74
|
+
# ==== Parameters
|
|
75
|
+
# * +file+ the file to import
|
|
76
|
+
# * +options+
|
|
77
|
+
def load_data_infile(file, options = {})
|
|
78
|
+
sql = "LOAD DATA LOCAL INFILE '#{file}' "
|
|
79
|
+
sql << "#{options[:insert_method]} " if options[:insert_method]
|
|
80
|
+
sql << "INTO TABLE #{quoted_table_name} "
|
|
81
|
+
sql << "CHARACTER SET #{options[:charset_name]} " if options[:charset_name]
|
|
82
|
+
|
|
83
|
+
fields = ""
|
|
84
|
+
fields << "TERMINATED BY '#{options[:fields_terminated_by]}' " if options[:fields_terminated_by]
|
|
85
|
+
fields << "OPTIONALLY ENCLOSED BY '#{options[:fields_optionally_enclosed_by]}' " if options[:fields_optionally_enclosed_by]
|
|
86
|
+
fields << "ESCAPED BY '#{options[:fields_escaped_by]}' " if options[:fields_escaped_by]
|
|
87
|
+
|
|
88
|
+
sql << "FIELDS #{fields} " unless fields.empty?
|
|
89
|
+
sql << "LINES TERMINATED BY '#{options[:lines_terminated_by]}' " if options[:lines_terminated_by]
|
|
90
|
+
sql << "IGNORE #{options[:ignore_lines]} LINES " if options[:ignore_lines]
|
|
91
|
+
sql << "(" + options[:columns].join(', ') + ") " if options[:columns]
|
|
92
|
+
if options[:mapping]
|
|
93
|
+
mappings = []
|
|
94
|
+
options[:mapping].each_pair do |column, mapping|
|
|
95
|
+
mappings << "#{column} = #{mapping}"
|
|
96
|
+
end
|
|
97
|
+
sql << "SET #{mappings.join(', ')} " if mappings.size > 0
|
|
98
|
+
end
|
|
99
|
+
sql << ";"
|
|
100
|
+
connection.execute(sql)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|