Случайны выбор дневника Раскрыть/свернуть полный список возможностей









Когда работы над плагином были завершены, в поле intouch_settings стала храниться подобная структура:

intouch_settings
{"settings_template_id"=>"2",
"telegram_settings"=>
{"author"=>{"1"=>["2", "5"], "2"=>["2", "5"], "3"=>["5"], "5"=>["1", "2", "3", "4", "5"]},
"assigned_to"=>
{"1"=>["1", "2", "3", "4", "5"],
"2"=>["1", "2", "3", "4", "5"],
"3"=>["1", "2", "3", "4", "5"],
"4"=>["1", "2", "3", "4", "5"],
"5"=>["1", "2", "3", "4", "5"],
"6"=>["1", "2", "3", "4", "5"]},
"watchers"=>{"1"=>["5"], "2"=>["5"], "3"=>["5"], "5"=>["1", "2", "3", "4", "5"]},
"groups"=>
{"1"=>{"1"=>["2", "5"], "2"=>["2", "5"], "3"=>["5"], "5"=>["1", "2", "3", "4", "5"]},
"2"=>
{"1"=>["1", "2", "3", "4", "5"],
"2"=>["1", "2", "3", "4", "5"],
"3"=>["1", "2", "3", "4", "5"],
"4"=>["1", "2", "3", "4", "5"],
"5"=>["1", "2", "3", "4", "5"],
"6"=>["1", "2", "3", "4", "5"]}},
"working"=>{"author"=>"1", "assigned_to"=>"1", "watchers"=>"1", "groups"=>["1"]},
"feedback"=>{"author"=>"1", "assigned_to"=>"1", "watchers"=>"1", "groups"=>["1"]},
"unassigned"=>{"author"=>"1", "watchers"=>"1", "groups"=>["1"]},
"overdue"=>{"author"=>"1", "assigned_to"=>"1", "watchers"=>"1", "groups"=>["1", "2"]}},
"reminder_settings"=>
{"1"=>{"active"=>"1", "interval"=>"1"},
"2"=>{"active"=>"1", "interval"=>"1"},
"3"=>{"active"=>"1", "interval"=>"1"},
"4"=>{"active"=>"1", "interval"=>"1"},
"5"=>{"active"=>"1", "interval"=>"1"}},
"email_settings"=>
{"unassigned"=>{"user_groups"=>["5", "9"]},
"overdue"=>{"assigned_to"=>"1", "watchers"=>"1", "user_groups"=>["5", "9"]}},
"assigner_groups"=>["5", "9"]}


И в завершение



По реализации системы настроек можно было б ещё что-то написать, но, думаю, сказанного в публикации достаточно. Особо пытливым рекомендую в исходный код заглянуть. С кодом плагина можно ознакомиться в репозитории на GitHub.



Original source: habrahabr.ru (comments, light).

http://habrahabr.ru/post/270615/



Найдено 91 сообщений
Cообщения с меткой

settings - Самое интересное в блогах

Следующие 30  »
SoftLabirint

Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS » SoftLabirint.Ru: Скачать бесплатно и без регистрации - Самые Популярные Новости Интернета

Суббота, 02 Апреля 2016 г. 15:11 (ссылка)
softlabirint.ru/soft/system...6-rus.html


Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS

Представляю 64-разрядную версию дистрибутива Ubuntu 14.04.4 XFCE 4.10 с ядром версии 4.2, переодетую в Win7 и немножко Win8. Дистрибутив предназначен для домашнего или офисного использования по принципу "загрузился с флэшки и все работает". Установлено очень много полезных программ для любых нужд. Более подробнее читайте ниже.



Особенности:



• ОС собрана на основе Ubuntu Studio 14.04.4 x64 LTS.

• В состав ПО включены средства для воспроизведения аудио и видео файлов, текстовый процессор WPS Kingsoft Office и MS Office 2003 SP3 compatibility pack 2007 для docx, подсистема печати.

• Для работы с Интернет предустановлены браузер Firefox, Google Chrome, торрент-клиент qBittorrent, коммуникатор Skype.

• Установлено очень много полезных программ для любых нужд.

• Помимо этого установлен Kodi 14.2 Helix c настроенными видео дополнениями для просмотра 200 каналов.

• Для просмотра ТВ можно выбирать в KODI пункт "ТВ" или Видео->"Видеодополнения".

• Установил стабильную версию Acestream 3.0.3, на которой Торрент TV можно смотреть как внутри браузера Firefox, так и через Медиаплеер ACE Stream HD.

• В браузеры установлены ссылки боллее чем на 700 видео курсов английского языка для детей и школькиков.

• Кроме этого используя YouTube DL GUI можно быстро скачать любой youtube плейлист на комп и записать на флешку или в телефон ПОНРАВИВШИЕСЯ курсы по английскому языку.



Программы:



Графика:

• DjView4 {djview4}

• Easel Painter {mypaint}

• Font Editor {fontforge}

• Font Previewer {gnome-specimen}

• GEM {pd-gem}

• GraphicsMagick {gm display logo:}

• HotShots {hotshots}

• Image Viewer {eog}

• ImageMagick {display.im6 logo:}

• Nomacs {nomacs}

• Photo Batch Processor {phatch}

• Photo Manager {shotwell}

• Ristretto Image Viewer {ristretto}

• Xditview {xditview}



Мультимедия:

• ACE Player HD {acestreamplayer}

• ACE Player HD [VLC] {qacestreamplayer}

• ALSA mixer {xterm -e alsamixer}

• Audio Mixer {pavucontrol}

• Audio Mixer ALSA {xfce4-mixer}

• Audio Player {clementine}

• bomi {bomi}

• Curlew {curlew}

• DeaDBeeF {deadbeef}

• Desktop Recorder {gtk-recordmydesktop}

• EasyTag {easytag}

• gmusicbrowser {gmusicbrowser}

• Images Mount {furiusisomount}

• Kodi media center {kodi}

• Lyrics Show {osdlyrics}

• Media Player {smplayer}

• MediaInfo {mediainfo-gui}

• Meterbridge {meterbridge -t vu alsa_pcm:playback_1 alsa_pcm:playback_2}

• MIDI Sampler {drumkv1_jack}

• Polyphonic Sampler {samplv1_jack}

• Polyphonic Synthtesizer {synthv1_jack}

• PureData {puredata}

• Qmmp Audio Player {qmmp}

• SimpleScreenRecorder {simplescreenrecorder --logfile}

• Sound Server {qjackctl}

• STKDemo {STKDemo}

• Subtitle Editor {subtitleeditor}

• Synthesizer Qsynth {qsynth}

• TiMidity++ {timidity -ia}

• Video Converter {transmageddon}

• VLC media player {vlc}

• VLC media player {qvlc}

• Xfburn {xfburn}



Интернет:

• 2X Client {/opt/2X/Client/bin/2XClient}

• BitTorrent client {qbittorrent}

• FireFox {firefox}

• FTP {xterm -e ftp}

• Games Library {steam}

• Google Chrome {google-chrome}

• Oracle Java 8 Web Start {javaws}

• Parom.TV Player {paromplayer}

• Remote Desktop Client {remmina}

• Remote Filesystems {gigolo}

• SopCast Player {sopcast-player}

• Telnet {xterm -e telnet}

• VNC Address Book {vncaddrbook}

• VNC Viewer {vncviewer}

• Web Browser {exo-open --launch WebBrowser}

• Web Browser {google-chrome-stable}

• X-Chat {xchat}

• YouTube Browser {smtube}

• YouTube DL GUI {python2 /usr/share/pyshared/youtube_dl_gui/__main__.py}



Офис:

• MS Office Word 2003 SP3

• MS Office Excel 2003 SP3

• WPS Presentation {wpp}

• WPS Spreadsheets {et}

• WPS Writer {wps}

• Adobe Reader 9 {acroread}

• Calculator {gnome-calculator}

• Calendar {orage}

• CoolReader3 {cr3}

• Dictionary {xfce4-dict}

• Document Viewer {evince}

• E-book reader {FBReader}

• Globaltime {globaltime}

• Notes {xfce4-notes}

• Simple Scan {simple-scan}

• Xbiff {xbiff}

• XDvi {xdvi}

• CrossOver {/opt/cxoffice/bin/crossover}



Редакторы:

• Mousepad {mousepad}

• Nano {xterm -e nano}

• Pico {xterm -e pico}

• Text Editor {gedit}

• Vi {xterm -e vi}

• Xedit {xedit}



Игрушки:

• Board

• Chess {pychess}

• Lines {5ball}

• Mahjongg {gnome-mahjongg}

• Card

• Poker {pokerth}

• Solitaires {sol}

• Puzzle

• Gems {gweled}

• Sapper {gnome-mines}

• Sudoku {gnome-sudoku}

• Tetravex {gnome-tetravex}

• Tetris 3D {blockout2}



Разработка:

• Development Environment {anjuta}

• GDB {xterm -e gdb}

• Geany {geany}

• Oracle Java 8 Mission Control {jmc}

• Python [v2.7] {xterm -e python2.7}

• Python [v3.4] {xterm -e python3.4}

• Qt4 Assistant {assistant-qt4}

• Qt4 Designer {designer-qt4}

• Qt4 Linguist {linguist-qt4}

• Ruby [irb1.9.1] {xterm -e irb1.9.1}

• Sublime Text 2 {subl}

• Tclsh 8.5 {xterm -e tclsh8.5}

• Tclsh 8.6 {xterm -e tclsh8.6}

• TkWish 8.5 {x-terminal-emulator -e /usr/bin/wish8.5}

• TkWish 8.6 {x-terminal-emulator -e /usr/bin/wish8.6}

• Translations Editor {gtranslator}

• Wiki Editor {zim}



Система:

• Double Commander {doublecmd}

• Doublepanel File Manager {sunflower}

• GIT {xterm -e git}

• MC {xterm -e mc}

• Sakura {sakura}

• Terminal {gnome-terminal}

• Thunar File Manager {thunar}

• Xfce Terminal {xfce4-terminal}

• Xterm {xterm}

• About Me {mugshot}

• Bluetooth Manager {blueman-manager}

• Light Locker Settings {light-locker-settings}

• Menu Editor {menulibre}

• Passwords and Keys {seahorse}

• Theme Configuration {gtk-theme-config}

• Settings Manager {xfce4-settings-manager}

• Xfce-Theme-Manager {xfce-theme-manager}

• Accessibility {xfce4-accessibility-settings}

• Appearance {xfce4-appearance-settings}

• Applications Menu Editor {alacarte}

• BleachBit {bleachbit}

• BleachBit as Administrator {su-to-root -X -c bleachbit}

• Boot Repair {boot-repair}

• Bootloader Settings {gksu grub-customizer}

• Calendar {orage -p}

• Config Input Method {im-config}

• Data Storages {gnome-disks}

• DConf Editor {dconf-editor}

• Desktop {xfdesktop-settings}

• Desktop Sharing {vino-preferences}

• Display {xfce4-display-settings}

• File Manager {thunar-settings}

• Fonts {font-manager}

• GConf Editor {gconf-editor}

• Keyboard {xfce4-keyboard-settings}

• Language Support {gnome-language-selector}

• MIME Type Editor {xfce4-mime-settings}

• Mouse and Touchpad {xfce4-mouse-settings}

• Network Connections {nm-connection-editor}

• Network Settings {network-admin}

• Notifications {xfce4-notifyd-config}

• Onscreen Keyboard {onboard-settings}

• Panel {xfce4-panel --preferences}

• Power Manager {xfce4-power-manager-settings}

• Preferred Applications {exo-preferred-applications}

• Printers {system-config-printer}

• PulseAudio Preferences {paprefs}

• Removable Drives and Media {thunar-volman-settings}

• Screen Layout Editor {arandr}

• Screenlets {screenlets-manager > /dev/null}

• Session and Startup {xfce4-session-settings}

• Sharing Settings {gksu system-config-samba}

• Software Updater {update-manager}

• Sources and Drivers {software-properties-gtk}

• Startup Disk Creator {usb-creator-gtk}

• System Information {hardinfo}

• System Login Settings {lightdmcfg}

• Time and Date {time-admin}

• Users and Groups {users-admin}

• Window Manager {xfwm4-settings}

• Window Manager Tweaks {xfwm4-tweaks-settings}

• Workspaces {xfwm4-workspace-settings}

• Xfconf Editor {xfce4-settings-editor}

• Xfontsel {xfontsel}

• Xvidtune {xvidtune}



• Aptitude Package Manager [text] {xterm -e aptitude-curses}

• Disk Usage Analyzer {baobab}

• DSL/PPPoE configuration tool {xterm -e pppoeconf}

• Editres {editres}

• GDebi Package Installer {gdebi-kde}

• GNOME partition editor {su-to-root -X -c /usr/sbin/gparted}

• GNOME System Monitor {gnome-system-monitor}

• Log Out {xfce4-session-logout}

• Nepomuk Cleaner {nepomukcleaner}

• Oracle Java 8 Console {jconsole}

• Oracle Java 8 VisualVM {jvisualvm}

• Package Manager {synaptic-pkexec}

• Partition Editor {gparted-pkexec}

• Plymouth Manager {plymouth-manager}

• pppconfig {xterm -e su-to-root -p root -c /usr/sbin/pppconfig}

• Pstree {xterm -e pstree.x11}

• Sensor Viewer {xfce4-sensors}

• Shares Admin {shares-admin}

• Software Center {software-center}

• Sublime Text 2 {subl F}

• Synaptic Package Manager {synaptic}

• Synaptic Package Manager {x-terminal-emulator -e synaptic-pkexec}

• System Log Monitor {gnome-system-log}

• TeXconfig {xterm -e texconfig}

• Top {xterm -e top}

• Ubiquity Installer {ubiquity}

• Xclipboard {xclipboard}

• Xev {x-terminal-emulator -e xev}

• Xkill {xkill}

• Xload {xload}

• Xrefresh {xrefresh}



Утилиты:

• About Xfce {xfce4-about}

• Activate ScreenSaver [Next] {xscreensaver-command -next}

• Application Finder {xfce4-appfinder}

• Archive Manager {file-roller}

• Bc {xterm -e bc}

• Catfish File Search {catfish}

• Clipboard Manager {xfce4-clipman}

• Dc {xterm -e dc}

• Demo Screen Hacks {xscreensaver-command -demo}

• Disable XScreenSaver {xscreensaver-command -exit}

• Enable XScreenSaver {xscreensaver}

• Info {xterm -e info}

• Lock Screen [XScreenSaver] {xscreensaver-command -lock}

• Man2html {hman -P sensible-browser}

• Onscreen Keyboard {onboard}

• Reinitialize XScreenSaver {xscreensaver-command -restart}

• Run Program... {xfce4-appfinder --collapsed}

• ScreenSaver Preferences {xscreensaver-command -prefs}

• Search for Files... {gnome-search-tool}

• Search for Text in Files... {sagasu}

• TeXdoctk {texdoctk}

• TrueCrypt {truecrypt}

• Wallch {wallch}

• Xcalc {xcalc}

• Xman {xman}

• Calculations System {gnome-genius}



Разное:

• Alsa Modular Synth {ams}

• ANS Synthesizer {/opt/virtual_ans/START_LINUX_X86_64}

• Applications menu localization {gksu /usr/share/ubuntustudio/scripts/appsmenu_restore}

• Arkanoid {lbreakout2}

• CD/DVD Tester {dvdisaster}

• Character Map {gucharmap}

• Checkers {kcheckers}

• Circuit {/usr/lib/xscreensaver/circuit -root}

• Color Picker {gcolor2}

• Color Profiles {gcm-viewer}

• Color Schemes {agave}

• Color Sensor {gcm-picker}

• CompanionCube {/usr/lib/xscreensaver/companioncube -root}

• Compare Files and Folders {meld}

• Crackberg {/usr/lib/xscreensaver/crackberg -root}

• Create Live USB drives {unetbootin}

• Cube21 {/usr/lib/xscreensaver/cube21 -root}

• DockbarX Preference {dbx_preference}

• DockX {dockx}

• Effects Rack {jack-rack}

• File Checksums {gtkhash}

• File Manager {exo-open --launch FileManager}

• Functions Explorer {accerciser}

• GConf Database Cleaner {gconf-cleaner}

• Guitar Effects {rakarrack}

• Hide window in tray {alltray}

• Hilbert {/usr/lib/xscreensaver/hilbert -root}

• Internet Telephony {skype}

• IPython Console {xterm -e ipython}

• IPython Qt Console {ipython qtconsole}

• IPython3 Console {xterm -e ipython3}

• IPython3 Qt Console {ipython3 qtconsole}

• Jigsaw {/usr/lib/xscreensaver/jigsaw -root}

• Klein {/usr/lib/xscreensaver/klein -root}

• LADI Control Center {ladi-control-center}

• LADI Log File Viewer {ladi-system-log}

• LADI Player {ladi-player}

• LADI Session Handler {gladish}

• LADI tray icon {ladi-system-tray}

• Mail Reader {exo-open --launch MailReader}

• Manpages Editor {gmanedit}

• Manpages Explorer {gman}

• Network Tools {gnome-nettool}

• Noof {/usr/lib/xscreensaver/noof -root}

• Oracle Java 8 Plugin Control Panel {/usr/lib/jvm/java-8-oracle/bin/ControlPanel}

• Oracle Java 8 Policy Tool {/usr/lib/jvm/java-8-oracle/bin/policytool}

• Packages Installer {gdebi-gtk}

• Password Manager {pasaffe}

• Photovideobooth {cheese}

• Place Five Screenlets {/usr/share/ubuntustudio/scripts/place_screenlets}

• Programming EnviRonment {spyder}

• Sandbox {minetest}

• Screen Ruler {screenruler}

• Screenshot {xfce4-screenshooter}

• Screenshot Tool {shutter}

• Shared Access and Files {nautilus}

• Sound Converter {soundconverter}

• Synthesizer amSynth {amsynth}

• Synthesizer Phasex {phasex}

• Systemback {/usr/lib/systemback/sbsustart systemback}

• Systemback {/usr/lib/systemback/sbsustart systemback gtk+}

• Tangram {/usr/lib/xscreensaver/tangram -root}

• Task Manager {xfce4-taskmanager}

• Terminal Emulator {exo-open --launch TerminalEmulator}

• Tetris {ltris}

• The Batch Photo Print {photoprint}

• Timeshift {timeshift-launcher}

• Touch Typing Tutor {klavaro}

• Ubuntu Customization Kit {xterm -e uck-gui --wait-before-exit}

• Uninstall CrossOver Linux {/opt/cxoffice/bin/cxuninstall}

• Unit Converter {convertall}

• Volume Meter [Capture] {pavumeter --record}

• Volume Meter [Playback] {pavumeter}



Дополнительная информация:



Логин user пароль 123

Логин root пароль 123



• Автоматически монтируются все NTFS разделы на HDD и автоматом раздаются по сети в режиме только для чтения.

• Кому это не нужно остановите сервис самбы: sudo service samba stop



Для создания загрузочной флэшки из под Windows:

- Отформатируйте её утилитой HP USB Disk Storage Format Tool в Fat32

- Потом воспользуйтесь программой Universal USB Installer, или Unetbootin

и закатайте ею ubuntu-14.04.4-desktop-x64-xfce4-LikeWindows7.iso на USB Disk

Системные требования:

• RAM - 1 Гб минимум

• CPU - x64

• HDD - 12 Gb

 



Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS



Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS



Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS



Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS






Контрольные суммы:

Файл: ubuntu-14.04.4-desktop-x64-xfce4-LikeWindows7.iso

CRC32: 37A30930

MD4: E1E013895593140C2F6ADB2582417325

MD5: 9564DB003BFE6FA1C44CF96D7699FED3

SHA-1: 9EAF3624AC409DF61E115B430BC8437CDC628C76



Информация о софте:

Дата выпуска: 31 марта 2016 года

Название: Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7

Версия: v.14.04.4 Build 2016.03.30

Разработчик: Ubuntu / fomapoor

Архитектура: amd64 (x64)

Язык интерфейса: Русский

Таблэтка: Не требуется

Размер: 3.95 GB



Скачать: Ubuntu 14.04.4 LTS XFCE x64 Style Windows 7 (2016) RUS >>>



 



Подписка на новости сайта…

http://feeds.feedburner.com/Soft-Labirint

http://feeds.feedburner.com/Soft-Labirint?format=xml

https://feedburner.google.com/fb/a/mailverify?uri=Soft-Labirint



 

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Как хранить сложную иерархию настроек в проектах Redmine

Среда, 11 Ноября 2015 г. 14:00 (ссылка)

В течении последних двух месяцев работал над плагином redmine_intouch для компании Centos-admin.ru.



После завершения работ решил поделиться некоторыми нюансами, с которыми пришлось столкнуться в процессе разработки.



В этой публикации расскажу о пути, который пришлось пройти для того, чтобы реализовать гибкую систему разнообразных настроек.



Перво-наперво хочу оговориться. Эта статья о реализации логики хранения настроек проекта в плагине для Redmine.



Т.к. это плагин, то использовать сторонние гемы, в которых данный функционал реализован — крайне нежелательно, во избежание конфликтов с логикой самого Redmine.



Поэтому в этой публикации речь будет идти о реализации с нуля системы хранения настроек со сложной иерархией.



image



Как видно из скриншота, нужно как-то хранить данные с трёх спойлеров, в каждом из которых по несколько вкладок, а на каждой вкладке масса чекбоксов.



Как же это всё хранить?



Сперва я решил посмотреть, как подобный функционал реализован в других плагинах.



Просмотрев исходники плагинов используемых в компании, обнаружил похожий функционал в redmine_contacts. В нём есть модель ContactsSetting, которая позволяет сохранять специфические настройки с привязкой к проекту.



Как результат, в нашем плагине появилась такая моделька:



intouch_setting.rb
class IntouchSetting < ActiveRecord::Base
unloadable
belongs_to :project

attr_accessible :name, :value, :project_id

cattr_accessor :available_settings
self.available_settings ||= {}

def self.load_available_settings
%w(alarm new working feedback overdue).each do |notice|
%w(author assigned_to watchers).each do |receiver|
define_setting "telegram_#{notice}_#{receiver}"
end
define_setting "telegram_#{notice}_telegram_groups", serialized: true, default: {}
define_setting "telegram_#{notice}_user_groups", serialized: true, default: {}
end
define_setting 'email_cc', default: ''
end


def self.define_setting(name, options={})
available_settings[name.to_s] = options
end
# Hash used to cache setting values
@intouch_cached_settings = {}
@intouch_cached_cleared_on = Time.now

# Hash used to cache setting values
@cached_settings = {}
@cached_cleared_on = Time.now


validates_uniqueness_of :name, scope: [:project_id]

def value
v = read_attribute(:value)
# Unserialize serialized settings
if available_settings[name][:serialized] && v.is_a?(String)
v = YAML::load(v)
v = force_utf8_strings(v)
end
# v = v.to_sym if available_settings[name]['format'] == 'symbol' && !v.blank?
v
end

def value=(v)
v = v.to_yaml if v && available_settings[name] && available_settings[name][:serialized]
write_attribute(:value, v.to_s)
end

# Returns the value of the setting named name
def self.[](name, project_id)
project_id = project_id.id if project_id.is_a?(Project)
v = @intouch_cached_settings[hk(name, project_id)]
v ? v : (@intouch_cached_settings[hk(name, project_id)] = find_or_default(name, project_id).value)
end

def self.[]=(name, project_id, v)
project_id = project_id.id if project_id.is_a?(Project)
setting = find_or_default(name, project_id)
setting.value = (v ? v : "")
@intouch_cached_settings[hk(name, project_id)] = nil
setting.save
setting.value
end

# Checks if settings have changed since the values were read
# and clears the cache hash if it's the case
# Called once per request
def self.check_cache
settings_updated_on = IntouchSetting.maximum(:updated_on)
if settings_updated_on && @intouch_cached_cleared_on <= settings_updated_on
clear_cache
end
end

# Clears the settings cache
def self.clear_cache
@intouch_cached_settings.clear
@intouch_cached_cleared_on = Time.now
logger.info "Intouch settings cache cleared." if logger
end

load_available_settings


private

def self.hk(name, project_id)
"#{name}-#{project_id.to_s}"
end

def self.find_or_default(name, project_id)
name = name.to_s
raise "There's no setting named #{name}" unless available_settings.has_key?(name)
setting = find_by_name_and_project_id(name, project_id)
unless setting
setting = new(name: name, project_id: project_id)
setting.value = available_settings[name][:default]
end
setting
end

def force_utf8_strings(arg)
if arg.is_a?(String)
arg.dup.force_encoding('UTF-8')
elsif arg.is_a?(Array)
arg.map do |a|
force_utf8_strings(a)
end
elsif arg.is_a?(Hash)
arg = arg.dup
arg.each do |k,v|
arg[k] = force_utf8_strings(v)
end
arg
else
arg
end
end
end


Хотя такой функционал работал, из-за него падала гибкость добавления новых настроек. Да и вообще такой код с первого взгляда не так уж просто понять.



Какие есть альтернативы?



По ходу реализации описанного выше функционала меня не покидала мысль, о том что такие настройки удобней всего хранить в хеше. Но до последнего я пытался не вносить изменений в таблицы Redmine. В этом случае нужно было добавить всего одно текстовое поле в таблицу projects.



Но всему есть предел. И желание удобней продолжать разработку плагина перевесило.



Я добавил поле intouch_settings в таблицу projects. Название с префиксом из имени плагина взял на случай, если в каком-то другом плагине добавляется поле settings к проекту.



И тут начались удобства. Понадобилось к патчу Project дописать



store :intouch_settings,  accessors: %w(telegram_settings email_settings)


Позже в accessors добавилось ещё 3 поля. Удобно и наглядно!



А когда понадобилось добавить шаблоны настроек к плагину, такой способ хранения оказался очень удачным!



Как же теперь выводить в форму всё это разнообразие?



На помощь приходит метод try, наличествующий в рельсах.



Для примера приведу фрагмент кода, генерирующий таблицу отображённую на скриншоте в начале статьи:












Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
promobilki

В смартфоне Microsoft Lumia 535 выявлен дефект, признанный производителем

Понедельник, 15 Декабря 2014 г. 13:25 (ссылка)
ixbt.com/news/hard/index.shtml?18/49/50


Как известно, месяц назад был представлен смартфон Microsoft Lumia 535 - первый смартфон Lumia с ОС Windows Phone под маркой Microsoft, а не Nokia. Новинка подтвердила пословицу про первый блин, поскольку в ней уже обнаружен дефект. Неисправность проявляется в плохой работе сенсорного экрана, особенно при распознавании нескольких прикосновений. Это хорошо видно в следующем видеоролике:

Читать далее...
Комментарии (0)КомментироватьВ цитатник или сообщество
я-пусечка

Google поможет быстро перейти на «торговые кампании»

Пятница, 16 Августа 2014 г. 00:45 (ссылка)
feedproxy.google.com/~r/sea...instr.html


Google поможет быстро перейти на «торговые кампании» Google представил инструмент быстрого обновления кампаний. После 31 августа кампании с товарными объявлениями уйдут в отставку и будут заменены «Торговыми кампаниями». О грядущих изменениях компания сообщала в апреле 2014. За прошедшее время большинство пользователей уже осуществили переход, помочь остальным должен новый инструмент.

Читать далее...
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
faiz2000

Онлайн игры. Каталог — Подарки Вам!

Четверг, 13 Марта 2014 г. 08:36 (ссылка)
vk-podari.ru/igry-prikoly-r...talog.html

Онлайн

Комментарии (0)КомментироватьВ цитатник или сообщество
ma_zaika

Куда пропал раздел 'Настройки'?

Пятница, 06 Декабря 2013 г. 04:40 (ссылка)









Читайте ma_zaika

art

ma-zaika

SettingS


 









SOS


 



Хотела зайти в фид и добавить в него картинку, уже минут 20 ищу настройки со схемами оформления и рубриками... и не найду никак... Как же теперь что-то изменить возможно?



Фото: © Copyright Valters Mednieks

Метки:   Комментарии (8)КомментироватьВ цитатник или сообщество

Следующие 30  »

<settings - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda