strikeroff-helpful_utils 0.0.1 → 0.0.3
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/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
|
|