strikeroff-helpful_utils 0.0.1 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +3 -2
- data/Manifest +16 -16
- data/README +38 -38
- data/Rakefile +21 -21
- data/heplful_utils.gemspec +33 -34
- data/lib/helpful_utils.rb +28 -25
- data/lib/helpful_utils/activerecord_ext/humanized_attributes.rb +9 -9
- data/lib/helpful_utils/common/configuration.rb +50 -50
- data/lib/helpful_utils/core_ext/array.rb +21 -21
- data/lib/helpful_utils/core_ext/hash.rb +26 -26
- data/lib/helpful_utils/core_ext/kernel.rb +27 -27
- data/lib/helpful_utils/core_ext/string.rb +57 -57
- data/lib/helpful_utils/patching_utils/event_machine.rb +37 -37
- data/lib/helpful_utils/patching_utils/inheritance_tree.rb +14 -14
- metadata +14 -12
data/CHANGELOG
CHANGED
@@ -1,2 +1,3 @@
|
|
1
|
-
v0.0.
|
2
|
-
v0.0.2
|
1
|
+
v0.0.3 "Fix humanized_attributes_names for rais 2.3.*"
|
2
|
+
v0.0.2 "Change README"
|
3
|
+
v0.0.1 "Add String extensions, event machine, deep clone for Hash and Array, humanized attributes and project configuration support"
|
data/Manifest
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
CHANGELOG
|
2
|
-
gem-build.sh
|
3
|
-
heplful_utils.gemspec
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
lib/helpful_utils.rb
|
8
|
-
lib/helpful_utils/
|
9
|
-
lib/helpful_utils/
|
10
|
-
lib/helpful_utils/
|
11
|
-
lib/helpful_utils/
|
12
|
-
lib/helpful_utils
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
test/core_tests.rb
|
1
|
+
CHANGELOG
|
2
|
+
gem-build.sh
|
3
|
+
heplful_utils.gemspec
|
4
|
+
lib/helpful_utils/activerecord_ext/humanized_attributes.rb
|
5
|
+
lib/helpful_utils/common/configuration.rb
|
6
|
+
lib/helpful_utils/core_ext/array.rb
|
7
|
+
lib/helpful_utils/core_ext/hash.rb
|
8
|
+
lib/helpful_utils/core_ext/kernel.rb
|
9
|
+
lib/helpful_utils/core_ext/string.rb
|
10
|
+
lib/helpful_utils/patching_utils/event_machine.rb
|
11
|
+
lib/helpful_utils/patching_utils/inheritance_tree.rb
|
12
|
+
lib/helpful_utils.rb
|
13
|
+
Manifest
|
14
|
+
Rakefile
|
15
|
+
README
|
16
|
+
test/core_tests.rb
|
data/README
CHANGED
@@ -1,38 +1,38 @@
|
|
1
|
-
Гем представляет собой набор полезных инструменов для повседневной работы (пока только на русском)
|
2
|
-
|
3
|
-
1.Configuration
|
4
|
-
Загрузка конфигурационных файлов в окружение Configuration из папки RAILS_ROOT/config/project(по умолчанию).
|
5
|
-
Для каждого найденного yaml файла в папке project мы производим загрузку в окружение. Все это делается
|
6
|
-
в целях удобства обращения к конфигурации. Доступ к конфигам из проекта - Configuration.НАЗВАНИЕ_ФАЙЛА.КЛЮЧ.
|
7
|
-
2. Расширение классов стандартной библиотеки
|
8
|
-
|
9
|
-
а) Расширение классов Array и Hash
|
10
|
-
метод deep_clone - выполняется рекурсивное клонирование всех элементов.
|
11
|
-
б) Расширение модуля Kernel
|
12
|
-
метод with - Переключение области видимости на объект.Использовать осторожно. Рекомендуется применять,
|
13
|
-
когда в коде идет несколько операций над одним объектом. Таким образом следующий код:
|
14
|
-
|
15
|
-
contexts.set_context(:region, :volga)
|
16
|
-
contexts.set_context(:site, "gionet.ru")
|
17
|
-
contexts.set_context(:special, special_object)
|
18
|
-
contexts.run
|
19
|
-
|
20
|
-
можно преобразовать в следующий:
|
21
|
-
|
22
|
-
with contexts do
|
23
|
-
set_context(:region, :volga)
|
24
|
-
set_context(:site, "gionet.ru")
|
25
|
-
set_context(:special, special_object)
|
26
|
-
run
|
27
|
-
end
|
28
|
-
в) расширения класса String
|
29
|
-
1) метод to_json_with_russian_support - Если вызывать у строки с русским текстом стандартный метод to_json, а потом попробовать отобразить ее
|
30
|
-
то получится что то невразумительное.Данный метод исправляет проблему. Пример
|
31
|
-
"тут русский текст".to_json(:russian=>true). По умолчанию russian == false
|
32
|
-
2) json? - Проверка,является ли строка JSON'ом
|
33
|
-
3. Класс EventMachine
|
34
|
-
Класс служит для подписывания на события и выполнения кода по выполнении этих событий.
|
35
|
-
Пример с подписыванием на событие after_initialize можно посмотреть helpful_utils.rb
|
36
|
-
4. Другие утилиты для падчинга можно посмотреть в helpful_utils\patching_utils
|
37
|
-
5. Кастомные названия для полей моделей(по мотивам
|
38
|
-
http://rubybrothers.ru/2008/9/9/custom-attributes-names-for-rails-validations)
|
1
|
+
Гем представляет собой набор полезных инструменов для повседневной работы (пока только на русском)
|
2
|
+
|
3
|
+
1.Configuration
|
4
|
+
Загрузка конфигурационных файлов в окружение Configuration из папки RAILS_ROOT/config/project(по умолчанию).
|
5
|
+
Для каждого найденного yaml файла в папке project мы производим загрузку в окружение. Все это делается
|
6
|
+
в целях удобства обращения к конфигурации. Доступ к конфигам из проекта - Configuration.НАЗВАНИЕ_ФАЙЛА.КЛЮЧ.
|
7
|
+
2. Расширение классов стандартной библиотеки
|
8
|
+
|
9
|
+
а) Расширение классов Array и Hash
|
10
|
+
метод deep_clone - выполняется рекурсивное клонирование всех элементов.
|
11
|
+
б) Расширение модуля Kernel
|
12
|
+
метод with - Переключение области видимости на объект.Использовать осторожно. Рекомендуется применять,
|
13
|
+
когда в коде идет несколько операций над одним объектом. Таким образом следующий код:
|
14
|
+
|
15
|
+
contexts.set_context(:region, :volga)
|
16
|
+
contexts.set_context(:site, "gionet.ru")
|
17
|
+
contexts.set_context(:special, special_object)
|
18
|
+
contexts.run
|
19
|
+
|
20
|
+
можно преобразовать в следующий:
|
21
|
+
|
22
|
+
with contexts do
|
23
|
+
set_context(:region, :volga)
|
24
|
+
set_context(:site, "gionet.ru")
|
25
|
+
set_context(:special, special_object)
|
26
|
+
run
|
27
|
+
end
|
28
|
+
в) расширения класса String
|
29
|
+
1) метод to_json_with_russian_support - Если вызывать у строки с русским текстом стандартный метод to_json, а потом попробовать отобразить ее
|
30
|
+
то получится что то невразумительное.Данный метод исправляет проблему. Пример
|
31
|
+
"тут русский текст".to_json(:russian=>true). По умолчанию russian == false
|
32
|
+
2) json? - Проверка,является ли строка JSON'ом
|
33
|
+
3. Класс EventMachine
|
34
|
+
Класс служит для подписывания на события и выполнения кода по выполнении этих событий.
|
35
|
+
Пример с подписыванием на событие after_initialize можно посмотреть helpful_utils.rb
|
36
|
+
4. Другие утилиты для падчинга можно посмотреть в helpful_utils\patching_utils
|
37
|
+
5. Кастомные названия для полей моделей(по мотивам
|
38
|
+
http://rubybrothers.ru/2008/9/9/custom-attributes-names-for-rails-validations) - это для тех кто ниже Rails 2.3.* ветки сидит
|
data/Rakefile
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
-
require "echoe"
|
2
|
-
|
3
|
-
Echoe.new( "helpful_utils" ) do |p|
|
4
|
-
p.author = [ "Ilya Vesov","Anatoly Lapshin"]
|
5
|
-
p.summary = "collection of helpful utils,hacks , etc"
|
6
|
-
p.email = "strikeroff@gmail.com"
|
7
|
-
p.url = "http://github.com/strikeroff/helpful_utils"
|
8
|
-
|
9
|
-
p.runtime_dependencies = ['activesupport']
|
10
|
-
p.development_dependencies = []
|
11
|
-
|
12
|
-
p.need_tar_gz = false
|
13
|
-
p.retain_gemspec = true
|
14
|
-
p.gemspec_name = 'heplful_utils.gemspec'
|
15
|
-
p.test_pattern = ["test/**/*_test.rb"]
|
16
|
-
|
17
|
-
p.clean_pattern.push 'lib/*-*'
|
18
|
-
p.has_rdoc = true
|
19
|
-
p.rdoc_pattern = ["README", "CHANGELOG", "lib/**/*.rb"]
|
20
|
-
p.rdoc_options << "-c utf-8"
|
21
|
-
p.ignore_pattern = [".gitignore", "doc", "examples", ".idea", "coverage.data", "*.bat"]
|
1
|
+
require "echoe"
|
2
|
+
|
3
|
+
Echoe.new( "strikeroff-helpful_utils" ) do |p|
|
4
|
+
p.author = [ "Ilya Vesov","Anatoly Lapshin"]
|
5
|
+
p.summary = "collection of helpful utils,hacks , etc"
|
6
|
+
p.email = "strikeroff@gmail.com"
|
7
|
+
p.url = "http://github.com/strikeroff/helpful_utils"
|
8
|
+
|
9
|
+
p.runtime_dependencies = ['activesupport']
|
10
|
+
p.development_dependencies = []
|
11
|
+
|
12
|
+
p.need_tar_gz = false
|
13
|
+
p.retain_gemspec = true
|
14
|
+
p.gemspec_name = 'heplful_utils.gemspec'
|
15
|
+
p.test_pattern = ["test/**/*_test.rb"]
|
16
|
+
|
17
|
+
p.clean_pattern.push 'lib/*-*'
|
18
|
+
p.has_rdoc = true
|
19
|
+
p.rdoc_pattern = ["README", "CHANGELOG", "lib/**/*.rb"]
|
20
|
+
p.rdoc_options << "-c utf-8"
|
21
|
+
p.ignore_pattern = [".gitignore", "doc", "examples", ".idea", "coverage.data", "*.bat"]
|
22
22
|
end
|
data/heplful_utils.gemspec
CHANGED
@@ -1,34 +1,33 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
Gem::Specification.new do |s|
|
4
|
-
s.name = %q{helpful_utils}
|
5
|
-
s.version = "0.0.
|
6
|
-
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.authors = ["Ilya Vesov, Anatoly Lapshin"]
|
9
|
-
s.date = %q{2009-
|
10
|
-
s.description = %q{collection of helpful utils,hacks , etc}
|
11
|
-
s.email = %q{strikeroff@gmail.com}
|
12
|
-
s.extra_rdoc_files = ["CHANGELOG", "
|
13
|
-
s.files = ["CHANGELOG", "gem-build.sh", "heplful_utils.gemspec", "
|
14
|
-
s.
|
15
|
-
s.
|
16
|
-
s.
|
17
|
-
s.
|
18
|
-
s.
|
19
|
-
s.
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{strikeroff-helpful_utils}
|
5
|
+
s.version = "0.0.3"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Ilya Vesov, Anatoly Lapshin"]
|
9
|
+
s.date = %q{2009-10-27}
|
10
|
+
s.description = %q{collection of helpful utils,hacks , etc}
|
11
|
+
s.email = %q{strikeroff@gmail.com}
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG", "lib/helpful_utils/activerecord_ext/humanized_attributes.rb", "lib/helpful_utils/common/configuration.rb", "lib/helpful_utils/core_ext/array.rb", "lib/helpful_utils/core_ext/hash.rb", "lib/helpful_utils/core_ext/kernel.rb", "lib/helpful_utils/core_ext/string.rb", "lib/helpful_utils/patching_utils/event_machine.rb", "lib/helpful_utils/patching_utils/inheritance_tree.rb", "lib/helpful_utils.rb", "README"]
|
13
|
+
s.files = ["CHANGELOG", "gem-build.sh", "heplful_utils.gemspec", "lib/helpful_utils/activerecord_ext/humanized_attributes.rb", "lib/helpful_utils/common/configuration.rb", "lib/helpful_utils/core_ext/array.rb", "lib/helpful_utils/core_ext/hash.rb", "lib/helpful_utils/core_ext/kernel.rb", "lib/helpful_utils/core_ext/string.rb", "lib/helpful_utils/patching_utils/event_machine.rb", "lib/helpful_utils/patching_utils/inheritance_tree.rb", "lib/helpful_utils.rb", "Manifest", "Rakefile", "README", "test/core_tests.rb"]
|
14
|
+
s.homepage = %q{http://github.com/strikeroff/helpful_utils}
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Strikeroff-helpful_utils", "--main", "README", "-c utf-8"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubyforge_project = %q{strikeroff-helpful_utils}
|
18
|
+
s.rubygems_version = %q{1.3.5}
|
19
|
+
s.summary = %q{collection of helpful utils,hacks , etc}
|
20
|
+
|
21
|
+
if s.respond_to? :specification_version then
|
22
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
23
|
+
s.specification_version = 3
|
24
|
+
|
25
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
26
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
27
|
+
else
|
28
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
29
|
+
end
|
30
|
+
else
|
31
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
32
|
+
end
|
33
|
+
end
|
data/lib/helpful_utils.rb
CHANGED
@@ -1,26 +1,29 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "helpful_utils", "common", "configuration")
|
2
|
-
|
3
|
-
|
4
|
-
Dir[File.join(File.dirname(__FILE__), "helpful_utils", "patching_utils")<<"/*.rb"].each do |file|
|
5
|
-
require file
|
6
|
-
end
|
7
|
-
|
8
|
-
# Some files need to be required after iitialize
|
9
|
-
Rails::Initializer.class_eval do
|
10
|
-
def after_initialize_with_helpful_utils
|
11
|
-
HelpfulUtils::EventMachine.after_initialize_with_helpful_utils
|
12
|
-
after_initialize_without_helpful_utils
|
13
|
-
end
|
14
|
-
alias_method_chain :after_initialize, :helpful_utils
|
15
|
-
end
|
16
|
-
|
17
|
-
HelpfulUtils::EventMachine.subscribe :after_initialize_with_helpful_utils do
|
18
|
-
|
19
|
-
Dir[File.join(File.dirname(__FILE__), "helpful_utils", "core_ext")<<"/*.rb"].each do |file|
|
20
|
-
require file
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
1
|
+
require File.join(File.dirname(__FILE__), "helpful_utils", "common", "configuration")
|
2
|
+
|
3
|
+
|
4
|
+
Dir[File.join(File.dirname(__FILE__), "helpful_utils", "patching_utils")<<"/*.rb"].each do |file|
|
5
|
+
require file
|
6
|
+
end
|
7
|
+
|
8
|
+
# Some files need to be required after iitialize
|
9
|
+
Rails::Initializer.class_eval do
|
10
|
+
def after_initialize_with_helpful_utils
|
11
|
+
HelpfulUtils::EventMachine.after_initialize_with_helpful_utils
|
12
|
+
after_initialize_without_helpful_utils
|
13
|
+
end
|
14
|
+
alias_method_chain :after_initialize, :helpful_utils
|
15
|
+
end
|
16
|
+
|
17
|
+
HelpfulUtils::EventMachine.subscribe :after_initialize_with_helpful_utils do
|
18
|
+
|
19
|
+
Dir[File.join(File.dirname(__FILE__), "helpful_utils", "core_ext")<<"/*.rb"].each do |file|
|
20
|
+
require file
|
21
|
+
end
|
22
|
+
ma, mi, ti = ActiveRecord::VERSION::MAJOR, ActiveRecord::VERSION::MINOR, ActiveRecord::VERSION::TINY
|
23
|
+
|
24
|
+
unless (ma >= 2 || mi >= 3 )
|
25
|
+
require File.join(File.dirname(__FILE__), "helpful_utils", "activerecord_ext", "humanized_attributes.rb")
|
26
|
+
end
|
27
|
+
|
28
|
+
|
26
29
|
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
class ActiveRecord::Base
|
2
|
-
def self.human_attribute_name(attribute_key_name)
|
3
|
-
default = attribute_key_name.humanize
|
4
|
-
if self.const_defined?('HUMANIZED_ATTRIBUTES')
|
5
|
-
self.const_get('HUMANIZED_ATTRIBUTES')[attribute_key_name.to_sym] || default
|
6
|
-
else
|
7
|
-
default
|
8
|
-
end
|
9
|
-
end
|
1
|
+
class ActiveRecord::Base
|
2
|
+
def self.human_attribute_name(attribute_key_name)
|
3
|
+
default = attribute_key_name.humanize
|
4
|
+
if self.const_defined?('HUMANIZED_ATTRIBUTES')
|
5
|
+
self.const_get('HUMANIZED_ATTRIBUTES')[attribute_key_name.to_sym] || default
|
6
|
+
else
|
7
|
+
default
|
8
|
+
end
|
9
|
+
end
|
10
10
|
end
|
@@ -1,50 +1,50 @@
|
|
1
|
-
class Configuration
|
2
|
-
# Загрузка конфигурационных файлов в окружение Configuration из папки RAILS_ROOT/config/project(по умолчанию).
|
3
|
-
# Для каждого найденного yaml файла в папке project мы производим загрузку в окружение.
|
4
|
-
# Все это делается в целях удобства обращения к конфигурации.
|
5
|
-
# Доступ к конфигам из проекта - Configuration.НАЗВАНИЕ_ФАЙЛА.КЛЮЧ
|
6
|
-
|
7
|
-
cattr_accessor :path_to_config_dir
|
8
|
-
@@path_to_config_dir = "#{::RAILS_ROOT}/config/project"
|
9
|
-
|
10
|
-
def self.load_configurations
|
11
|
-
if defined? ::RAILS_ROOT
|
12
|
-
Dir["#{path_to_config_dir}/*.yaml"].each do |config_file|
|
13
|
-
load_configuration_from_file(config_file)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.has?(config_name)
|
20
|
-
self.method_defined? config_name
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
def self.load_configuration_from_file ( config_file )
|
25
|
-
config = YAML.load_file( config_file )
|
26
|
-
if config.instance_of? Hash
|
27
|
-
attrs = []
|
28
|
-
config.each_key { |key| attrs << key.to_sym } # извлекаем имена полей
|
29
|
-
config_struct = Struct.new *attrs # создаем структуру с этими полями
|
30
|
-
new_config = config_struct.new # создаем объект этой структуры
|
31
|
-
config_struct.members.each do |attr_name| # инициализируем значения полей объекта
|
32
|
-
new_config.send( "#{attr_name}=", config[attr_name] )
|
33
|
-
end
|
34
|
-
config = new_config # отображаем трансформацию в конфиг
|
35
|
-
end
|
36
|
-
attr_name = File.basename( config_file, ".yaml" )
|
37
|
-
|
38
|
-
self.class_eval do
|
39
|
-
cattr_accessor attr_name.to_sym # создаем в модуле аттрибут
|
40
|
-
end
|
41
|
-
|
42
|
-
self.send("#{attr_name}=", config)
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
|
49
|
-
Configuration.load_configurations
|
50
|
-
|
1
|
+
class Configuration
|
2
|
+
# Загрузка конфигурационных файлов в окружение Configuration из папки RAILS_ROOT/config/project(по умолчанию).
|
3
|
+
# Для каждого найденного yaml файла в папке project мы производим загрузку в окружение.
|
4
|
+
# Все это делается в целях удобства обращения к конфигурации.
|
5
|
+
# Доступ к конфигам из проекта - Configuration.НАЗВАНИЕ_ФАЙЛА.КЛЮЧ
|
6
|
+
|
7
|
+
cattr_accessor :path_to_config_dir
|
8
|
+
@@path_to_config_dir = "#{::RAILS_ROOT}/config/project"
|
9
|
+
|
10
|
+
def self.load_configurations
|
11
|
+
if defined? ::RAILS_ROOT
|
12
|
+
Dir["#{path_to_config_dir}/*.yaml"].each do |config_file|
|
13
|
+
load_configuration_from_file(config_file)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.has?(config_name)
|
20
|
+
self.method_defined? config_name
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
def self.load_configuration_from_file ( config_file )
|
25
|
+
config = YAML.load_file( config_file )
|
26
|
+
if config.instance_of? Hash
|
27
|
+
attrs = []
|
28
|
+
config.each_key { |key| attrs << key.to_sym } # извлекаем имена полей
|
29
|
+
config_struct = Struct.new *attrs # создаем структуру с этими полями
|
30
|
+
new_config = config_struct.new # создаем объект этой структуры
|
31
|
+
config_struct.members.each do |attr_name| # инициализируем значения полей объекта
|
32
|
+
new_config.send( "#{attr_name}=", config[attr_name] )
|
33
|
+
end
|
34
|
+
config = new_config # отображаем трансформацию в конфиг
|
35
|
+
end
|
36
|
+
attr_name = File.basename( config_file, ".yaml" )
|
37
|
+
|
38
|
+
self.class_eval do
|
39
|
+
cattr_accessor attr_name.to_sym # создаем в модуле аттрибут
|
40
|
+
end
|
41
|
+
|
42
|
+
self.send("#{attr_name}=", config)
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
Configuration.load_configurations
|
50
|
+
|
@@ -1,22 +1,22 @@
|
|
1
|
-
module HelpfulUtils
|
2
|
-
module CoreExt
|
3
|
-
module Array
|
4
|
-
def clone_by_someway(value)
|
5
|
-
return value if value.is_a?(Symbol)
|
6
|
-
if value.respond_to?(:deep_clone)
|
7
|
-
value.deep_clone
|
8
|
-
else
|
9
|
-
value.clone
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def deep_clone
|
14
|
-
self.collect{|v| clone_by_someway(v)}
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
class Array
|
21
|
-
include HelpfulUtils::CoreExt::Array
|
1
|
+
module HelpfulUtils
|
2
|
+
module CoreExt
|
3
|
+
module Array
|
4
|
+
def clone_by_someway(value)
|
5
|
+
return value if value.is_a?(Symbol)
|
6
|
+
if value.respond_to?(:deep_clone)
|
7
|
+
value.deep_clone
|
8
|
+
else
|
9
|
+
value.clone
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def deep_clone
|
14
|
+
self.collect{|v| clone_by_someway(v)}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Array
|
21
|
+
include HelpfulUtils::CoreExt::Array
|
22
22
|
end
|
@@ -1,27 +1,27 @@
|
|
1
|
-
module HelpfulUtils
|
2
|
-
module CoreExt
|
3
|
-
module Hash
|
4
|
-
def deep_clone
|
5
|
-
hash = {}
|
6
|
-
self.each_pair do |key, value|
|
7
|
-
hash.merge!({clone_by_someway(key)=>clone_by_someway(value)})
|
8
|
-
end
|
9
|
-
hash
|
10
|
-
end
|
11
|
-
|
12
|
-
def clone_by_someway(value)
|
13
|
-
return value if value.is_a?(Symbol)
|
14
|
-
if value.respond_to?(:deep_clone)
|
15
|
-
value.deep_clone
|
16
|
-
else
|
17
|
-
value.clone
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class Hash
|
26
|
-
include HelpfulUtils::CoreExt::Hash
|
1
|
+
module HelpfulUtils
|
2
|
+
module CoreExt
|
3
|
+
module Hash
|
4
|
+
def deep_clone
|
5
|
+
hash = {}
|
6
|
+
self.each_pair do |key, value|
|
7
|
+
hash.merge!({clone_by_someway(key)=>clone_by_someway(value)})
|
8
|
+
end
|
9
|
+
hash
|
10
|
+
end
|
11
|
+
|
12
|
+
def clone_by_someway(value)
|
13
|
+
return value if value.is_a?(Symbol)
|
14
|
+
if value.respond_to?(:deep_clone)
|
15
|
+
value.deep_clone
|
16
|
+
else
|
17
|
+
value.clone
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class Hash
|
26
|
+
include HelpfulUtils::CoreExt::Hash
|
27
27
|
end
|
@@ -1,27 +1,27 @@
|
|
1
|
-
module Kernel # :nodoc:
|
2
|
-
# Переключение области видимости на объект.
|
3
|
-
# Использовать осторожно. Рекоммендуется применять, когда в коде идет несколько операций
|
4
|
-
# над одним объектом. Таким образом следующий код:
|
5
|
-
#
|
6
|
-
# Gionet.contexts.set_context(:region, :volga)
|
7
|
-
# Gionet.contexts.set_context(:site, "gionet.ru")
|
8
|
-
# Gionet.contexts.set_context(:special, special_object)
|
9
|
-
# p Gionet.contexts.slice
|
10
|
-
# Gionet.contexts.run
|
11
|
-
#
|
12
|
-
# можно преобразовать в следующий:
|
13
|
-
#
|
14
|
-
# with Gionet.contexts do
|
15
|
-
# set_context(:region, :volga)
|
16
|
-
# set_context(:site, "gionet.ru")
|
17
|
-
# set_context(:special, special_object)
|
18
|
-
# p slice
|
19
|
-
# run
|
20
|
-
# end
|
21
|
-
#
|
22
|
-
# Внимание при использовании необходимо по причине того, что внутри блока происходит
|
23
|
-
# смешивание областей видимости самого объекта и окружения из которого он вызывается.
|
24
|
-
def with(object, &block)
|
25
|
-
object.instance_eval &block
|
26
|
-
end
|
27
|
-
end
|
1
|
+
module Kernel # :nodoc:
|
2
|
+
# Переключение области видимости на объект.
|
3
|
+
# Использовать осторожно. Рекоммендуется применять, когда в коде идет несколько операций
|
4
|
+
# над одним объектом. Таким образом следующий код:
|
5
|
+
#
|
6
|
+
# Gionet.contexts.set_context(:region, :volga)
|
7
|
+
# Gionet.contexts.set_context(:site, "gionet.ru")
|
8
|
+
# Gionet.contexts.set_context(:special, special_object)
|
9
|
+
# p Gionet.contexts.slice
|
10
|
+
# Gionet.contexts.run
|
11
|
+
#
|
12
|
+
# можно преобразовать в следующий:
|
13
|
+
#
|
14
|
+
# with Gionet.contexts do
|
15
|
+
# set_context(:region, :volga)
|
16
|
+
# set_context(:site, "gionet.ru")
|
17
|
+
# set_context(:special, special_object)
|
18
|
+
# p slice
|
19
|
+
# run
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# Внимание при использовании необходимо по причине того, что внутри блока происходит
|
23
|
+
# смешивание областей видимости самого объекта и окружения из которого он вызывается.
|
24
|
+
def with(object, &block)
|
25
|
+
object.instance_eval &block
|
26
|
+
end
|
27
|
+
end
|
@@ -1,57 +1,57 @@
|
|
1
|
-
module HelpfulUtils
|
2
|
-
module CoreExt
|
3
|
-
module String
|
4
|
-
|
5
|
-
module JSON
|
6
|
-
# Если вызывать у строки с русским текстом стандартный метод to_json, а потом попробовать отобразить ее
|
7
|
-
# то получится что то невразумительное.Данный метод исправляет проблему. Пример
|
8
|
-
# "тут русский текст".to_json(:russian=>true)
|
9
|
-
# по умолчанию russian == false
|
10
|
-
def to_json_with_russian_support(options = nil) #:nodoc:
|
11
|
-
result = nil
|
12
|
-
unless options.blank?
|
13
|
-
if options[:russian]== true
|
14
|
-
json = '"' + gsub(ActiveSupport::JSON::Encoding.escape_regex) { |s|
|
15
|
-
ActiveSupport::JSON::Encoding::ESCAPED_CHARS[s]
|
16
|
-
}
|
17
|
-
json.force_encoding('ascii-8bit') if respond_to?(:force_encoding)
|
18
|
-
result = json + '"'
|
19
|
-
end
|
20
|
-
end
|
21
|
-
if result.blank?
|
22
|
-
result = to_json_without_russian_support options
|
23
|
-
end
|
24
|
-
result
|
25
|
-
end
|
26
|
-
|
27
|
-
alias_method_chain :to_json, :russian_support
|
28
|
-
|
29
|
-
|
30
|
-
# Проверка,является ли строка JSON'ом
|
31
|
-
def json?
|
32
|
-
return true if !self.blank? && ActiveSupport::JSON.decode(self).is_a?(Hash)
|
33
|
-
rescue ActiveSupport::JSON::ParseError
|
34
|
-
false
|
35
|
-
end
|
36
|
-
end
|
37
|
-
module UrlHelpers
|
38
|
-
# can raise URI::InvalidURIError
|
39
|
-
# приводит строку к полноценному URL
|
40
|
-
def to_url(prefix="http://")
|
41
|
-
return nil if self.blank?
|
42
|
-
if URI.parse(self).class != URI::HTTP
|
43
|
-
"#{prefix}#{self.strip}"
|
44
|
-
else
|
45
|
-
self.dup
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
|
54
|
-
class String
|
55
|
-
include HelpfulUtils::CoreExt::String::JSON
|
56
|
-
include HelpfulUtils::CoreExt::String::UrlHelpers
|
57
|
-
end
|
1
|
+
module HelpfulUtils
|
2
|
+
module CoreExt
|
3
|
+
module String
|
4
|
+
|
5
|
+
module JSON
|
6
|
+
# Если вызывать у строки с русским текстом стандартный метод to_json, а потом попробовать отобразить ее
|
7
|
+
# то получится что то невразумительное.Данный метод исправляет проблему. Пример
|
8
|
+
# "тут русский текст".to_json(:russian=>true)
|
9
|
+
# по умолчанию russian == false
|
10
|
+
def to_json_with_russian_support(options = nil) #:nodoc:
|
11
|
+
result = nil
|
12
|
+
unless options.blank?
|
13
|
+
if options[:russian]== true
|
14
|
+
json = '"' + gsub(ActiveSupport::JSON::Encoding.escape_regex) { |s|
|
15
|
+
ActiveSupport::JSON::Encoding::ESCAPED_CHARS[s]
|
16
|
+
}
|
17
|
+
json.force_encoding('ascii-8bit') if respond_to?(:force_encoding)
|
18
|
+
result = json + '"'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
if result.blank?
|
22
|
+
result = to_json_without_russian_support options
|
23
|
+
end
|
24
|
+
result
|
25
|
+
end
|
26
|
+
|
27
|
+
alias_method_chain :to_json, :russian_support
|
28
|
+
|
29
|
+
|
30
|
+
# Проверка,является ли строка JSON'ом
|
31
|
+
def json?
|
32
|
+
return true if !self.blank? && ActiveSupport::JSON.decode(self).is_a?(Hash)
|
33
|
+
rescue ActiveSupport::JSON::ParseError
|
34
|
+
false
|
35
|
+
end
|
36
|
+
end
|
37
|
+
module UrlHelpers
|
38
|
+
# can raise URI::InvalidURIError
|
39
|
+
# приводит строку к полноценному URL
|
40
|
+
def to_url(prefix="http://")
|
41
|
+
return nil if self.blank?
|
42
|
+
if URI.parse(self).class != URI::HTTP
|
43
|
+
"#{prefix}#{self.strip}"
|
44
|
+
else
|
45
|
+
self.dup
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
class String
|
55
|
+
include HelpfulUtils::CoreExt::String::JSON
|
56
|
+
include HelpfulUtils::CoreExt::String::UrlHelpers
|
57
|
+
end
|
@@ -1,38 +1,38 @@
|
|
1
|
-
module HelpfulUtils
|
2
|
-
# Класс служит для подписывания на события и выполнения кода по выполнении этих событий.
|
3
|
-
# Пример с подписыванием на событие after_initialize htkmcjd
|
4
|
-
# Rails::Initializer.class_eval do
|
5
|
-
# def after_initialize_with_helpful_utils
|
6
|
-
# HelpfulUtils::EventMachine.after_initialize_with_helpful_utils
|
7
|
-
# after_initialize_without_helpful_utils
|
8
|
-
# end
|
9
|
-
#
|
10
|
-
# alias_method_chain :after_initialize, :helpful_utils
|
11
|
-
# end
|
12
|
-
#
|
13
|
-
# HelpfulUtils::EventMachine.subscribe :after_initialize_with_helpful_utils do
|
14
|
-
# require File.join(File.dirname(__FILE__), "helpful_utils", "activerecord_ext", "humanized_attributes.rb")
|
15
|
-
# end
|
16
|
-
# Feel free in use this tool,it's powerfull =)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
class EventMachine
|
21
|
-
@@actions_and_blocks = {}
|
22
|
-
# cattr_accessor :actions_and_blocks
|
23
|
-
class << self
|
24
|
-
def method_missing(method_symbol, *parameters)#:nodoc:
|
25
|
-
if @@actions_and_blocks.has_key? method_symbol
|
26
|
-
@@actions_and_blocks[method_symbol].each do |action|
|
27
|
-
action.call *parameters
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def subscribe(event_symbol, &block)
|
33
|
-
@@actions_and_blocks[event_symbol] ||= []
|
34
|
-
@@actions_and_blocks[event_symbol] << block
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
1
|
+
module HelpfulUtils
|
2
|
+
# Класс служит для подписывания на события и выполнения кода по выполнении этих событий.
|
3
|
+
# Пример с подписыванием на событие after_initialize htkmcjd
|
4
|
+
# Rails::Initializer.class_eval do
|
5
|
+
# def after_initialize_with_helpful_utils
|
6
|
+
# HelpfulUtils::EventMachine.after_initialize_with_helpful_utils
|
7
|
+
# after_initialize_without_helpful_utils
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# alias_method_chain :after_initialize, :helpful_utils
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# HelpfulUtils::EventMachine.subscribe :after_initialize_with_helpful_utils do
|
14
|
+
# require File.join(File.dirname(__FILE__), "helpful_utils", "activerecord_ext", "humanized_attributes.rb")
|
15
|
+
# end
|
16
|
+
# Feel free in use this tool,it's powerfull =)
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
class EventMachine
|
21
|
+
@@actions_and_blocks = {}
|
22
|
+
# cattr_accessor :actions_and_blocks
|
23
|
+
class << self
|
24
|
+
def method_missing(method_symbol, *parameters)#:nodoc:
|
25
|
+
if @@actions_and_blocks.has_key? method_symbol
|
26
|
+
@@actions_and_blocks[method_symbol].each do |action|
|
27
|
+
action.call *parameters
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def subscribe(event_symbol, &block)
|
33
|
+
@@actions_and_blocks[event_symbol] ||= []
|
34
|
+
@@actions_and_blocks[event_symbol] << block
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
38
|
end
|
@@ -1,14 +1,14 @@
|
|
1
|
-
module HelpfulUtils
|
2
|
-
module InheritanceTree
|
3
|
-
def objects
|
4
|
-
class_objects = []
|
5
|
-
ObjectSpace.each_object(self) {|e| class_objects << e }
|
6
|
-
class_objects
|
7
|
-
end
|
8
|
-
|
9
|
-
def class_children
|
10
|
-
(@class_objects ||= Class.objects).select {|e| e.superclass == self }
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
Module.send :include, HelpfulUtils::InheritanceTree
|
1
|
+
module HelpfulUtils
|
2
|
+
module InheritanceTree
|
3
|
+
def objects
|
4
|
+
class_objects = []
|
5
|
+
ObjectSpace.each_object(self) {|e| class_objects << e }
|
6
|
+
class_objects
|
7
|
+
end
|
8
|
+
|
9
|
+
def class_children
|
10
|
+
(@class_objects ||= Class.objects).select {|e| e.superclass == self }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
Module.send :include, HelpfulUtils::InheritanceTree
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: strikeroff-helpful_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya Vesov, Anatoly Lapshin
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-10-27 00:00:00 +04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -30,8 +30,6 @@ extensions: []
|
|
30
30
|
|
31
31
|
extra_rdoc_files:
|
32
32
|
- CHANGELOG
|
33
|
-
- README
|
34
|
-
- lib/helpful_utils.rb
|
35
33
|
- lib/helpful_utils/activerecord_ext/humanized_attributes.rb
|
36
34
|
- lib/helpful_utils/common/configuration.rb
|
37
35
|
- lib/helpful_utils/core_ext/array.rb
|
@@ -40,14 +38,12 @@ extra_rdoc_files:
|
|
40
38
|
- lib/helpful_utils/core_ext/string.rb
|
41
39
|
- lib/helpful_utils/patching_utils/event_machine.rb
|
42
40
|
- lib/helpful_utils/patching_utils/inheritance_tree.rb
|
41
|
+
- lib/helpful_utils.rb
|
42
|
+
- README
|
43
43
|
files:
|
44
44
|
- CHANGELOG
|
45
45
|
- gem-build.sh
|
46
46
|
- heplful_utils.gemspec
|
47
|
-
- Manifest
|
48
|
-
- Rakefile
|
49
|
-
- README
|
50
|
-
- lib/helpful_utils.rb
|
51
47
|
- lib/helpful_utils/activerecord_ext/humanized_attributes.rb
|
52
48
|
- lib/helpful_utils/common/configuration.rb
|
53
49
|
- lib/helpful_utils/core_ext/array.rb
|
@@ -56,15 +52,21 @@ files:
|
|
56
52
|
- lib/helpful_utils/core_ext/string.rb
|
57
53
|
- lib/helpful_utils/patching_utils/event_machine.rb
|
58
54
|
- lib/helpful_utils/patching_utils/inheritance_tree.rb
|
55
|
+
- lib/helpful_utils.rb
|
56
|
+
- Manifest
|
57
|
+
- Rakefile
|
58
|
+
- README
|
59
59
|
- test/core_tests.rb
|
60
60
|
has_rdoc: true
|
61
61
|
homepage: http://github.com/strikeroff/helpful_utils
|
62
|
+
licenses: []
|
63
|
+
|
62
64
|
post_install_message:
|
63
65
|
rdoc_options:
|
64
66
|
- --line-numbers
|
65
67
|
- --inline-source
|
66
68
|
- --title
|
67
|
-
-
|
69
|
+
- Strikeroff-helpful_utils
|
68
70
|
- --main
|
69
71
|
- README
|
70
72
|
- -c utf-8
|
@@ -84,10 +86,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
86
|
version:
|
85
87
|
requirements: []
|
86
88
|
|
87
|
-
rubyforge_project: helpful_utils
|
88
|
-
rubygems_version: 1.
|
89
|
+
rubyforge_project: strikeroff-helpful_utils
|
90
|
+
rubygems_version: 1.3.5
|
89
91
|
signing_key:
|
90
|
-
specification_version:
|
92
|
+
specification_version: 3
|
91
93
|
summary: collection of helpful utils,hacks , etc
|
92
94
|
test_files: []
|
93
95
|
|