rails-ext 0.2.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/.git/COMMIT_EDITMSG +1 -0
- data/.git/HEAD +1 -0
- data/.git/config +12 -0
- data/.git/description +1 -0
- data/.git/hooks/applypatch-msg.sample +15 -0
- data/.git/hooks/commit-msg.sample +24 -0
- data/.git/hooks/post-commit.sample +8 -0
- data/.git/hooks/post-receive.sample +15 -0
- data/.git/hooks/post-update.sample +8 -0
- data/.git/hooks/pre-applypatch.sample +14 -0
- data/.git/hooks/pre-commit.sample +46 -0
- data/.git/hooks/pre-rebase.sample +169 -0
- data/.git/hooks/prepare-commit-msg.sample +36 -0
- data/.git/hooks/update.sample +128 -0
- data/.git/index +0 -0
- data/.git/info/exclude +6 -0
- data/.git/logs/HEAD +6 -0
- data/.git/logs/refs/heads/master +6 -0
- data/.git/logs/refs/remotes/origin/master +5 -0
- data/.git/objects/02/469b717b4bd61ad27a3fe664ce0646a8325399 +2 -0
- data/.git/objects/06/c3225bad9d5b80e7b3bde79ff3c2da591722bf +5 -0
- data/.git/objects/07/f7d26527e58caa2fa99e33b29a7791b9eb8b3e +0 -0
- data/.git/objects/09/20505d42c0044b31ff7b1f86cec6e282e13414 +0 -0
- data/.git/objects/0b/e101a0586410212b4ee5905881ad726b7b4907 +0 -0
- data/.git/objects/10/bfe1230b9d96e23600091cc8b4b9d378068101 +0 -0
- data/.git/objects/13/882df4f2ef911454bf3b69a85742b372723366 +2 -0
- data/.git/objects/15/3f845625a0f605a2a35487a32038d0349bc386 +0 -0
- data/.git/objects/18/77033b90ed3dd55a3034b7e3ca1c5c9f66868d +0 -0
- data/.git/objects/19/1f68644a3646d774f2546c4cd49ac7d66f4cc2 +0 -0
- data/.git/objects/1d/d49713de2942dc974e55adc3684f55b2b817e2 +0 -0
- data/.git/objects/1e/6374b23c71a07b0e414e80912fd45503bd3daf +0 -0
- data/.git/objects/29/7a2c413b11f78b69dd8caa4f334c9536088f8a +3 -0
- data/.git/objects/29/b1f8abaed4aea1da8f8bd5f1bd81c26058c41a +3 -0
- data/.git/objects/2a/04524c8458b2d0cd9bcec579f9d54368a9d35f +0 -0
- data/.git/objects/2d/043376f1bc26b2dad3e79fc72ea14341ea437d +0 -0
- data/.git/objects/2e/3e3fc8e46949a9b944da3c36207c444aa2c9b7 +0 -0
- data/.git/objects/30/69d4978bbdfacf4402c4339438b29657275f2c +0 -0
- data/.git/objects/36/9902ca51d5820a02ccccbf1cac6ed09051941d +0 -0
- data/.git/objects/3a/03b9d44de43472689300120ffb2a0a9a74f27f +0 -0
- data/.git/objects/3a/797683953be7e6d0ffa0e34514f3e8e9c3ceb0 +3 -0
- data/.git/objects/3f/3db6bb5a5204ae58e303959c4c0da3a70d8b35 +1 -0
- data/.git/objects/40/215c0554202fc46dc2fca94ed21e2920ce1e84 +0 -0
- data/.git/objects/4b/2bdb2dc6330ba9bafd9058ec8eaa925ef53f91 +0 -0
- data/.git/objects/4d/991a018b0c697fa119efe7aaf55df0a1c7af8e +0 -0
- data/.git/objects/4f/fa8f1c9b7e3fdbb23ab600722d1011dcb48cec +2 -0
- data/.git/objects/55/d1f1efc344266d472094b1fd2f247b97de1c8b +0 -0
- data/.git/objects/57/8a722fd66124331e07123e3a0de2b6b50a581b +3 -0
- data/.git/objects/59/0ef6ba9931d75fbddc7a940044dbaaa50efc76 +0 -0
- data/.git/objects/5a/35fa85474278f3c817aa59d07b725428c41a28 +0 -0
- data/.git/objects/60/a681e873ca0ae0b7da3f37dbc5701f6e42b970 +1 -0
- data/.git/objects/61/32f3f8005ce5b88165162ac5542e54d0472a82 +3 -0
- data/.git/objects/65/51094fa3b996ff25b88d7ddb21d21a811d53fc +2 -0
- data/.git/objects/67/850cf1ede94d80c9b07ceace074a4d62f15249 +0 -0
- data/.git/objects/68/8ce506ac4f7c160bd6880d8507820761a3b3b7 +0 -0
- data/.git/objects/6d/f725e3519872a75bc763045f00d8844eb890cf +0 -0
- data/.git/objects/71/e6b43e9d41f9903992fd86d483b7d3e4dd28cd +0 -0
- data/.git/objects/75/d0b250bcdf241d981313b1d6eb153b96e4b05f +2 -0
- data/.git/objects/7d/978ee312ca2119dc84e40431182b8f68e42f53 +1 -0
- data/.git/objects/87/fc827fd223cac6b4e55d823a9ea86bb0726a3b +0 -0
- data/.git/objects/8d/4dcde8df4da8f53f5f5313757b907e9aa1af66 +0 -0
- data/.git/objects/8e/69b6cf3ec8b49270091b4a206ccf326679dc20 +0 -0
- data/.git/objects/92/e1c250edfca72ed0932934257ef3cfc7122ec5 +0 -0
- data/.git/objects/92/e1f3936e7c33007d0a466b836804450992a1eb +1 -0
- data/.git/objects/93/f9a6b596879347290cde161b03052bb22021de +5 -0
- data/.git/objects/94/72f3ac9e890231482aadd774bdc1c9ba742497 +0 -0
- data/.git/objects/a7/6c4944dc009628cb65b4962464a8eb484d6a71 +0 -0
- data/.git/objects/ac/92bcf6c74d23824c3c7ce341f667507592c7f9 +0 -0
- data/.git/objects/b0/2c48116db702256abf27fab4236c84bd2d2dbc +2 -0
- data/.git/objects/b0/39fcd38009980eb74d6bcef22d11e02639a530 +0 -0
- data/.git/objects/b2/cd852090540d0b2450b901397edd924d8c0ba9 +0 -0
- data/.git/objects/b4/228251babf3a84ac181d462fdd383816bd23b8 +0 -0
- data/.git/objects/b5/edd343ceb8e87d1a73922612aec210b393f839 +0 -0
- data/.git/objects/bb/23236d2e8340087cc495c66310e6eb90d6fe0a +0 -0
- data/.git/objects/bc/90a06dd2f2257e8da49989738db5747e2b78d8 +4 -0
- data/.git/objects/bd/eab0ec8a914cdd8c9341340191c116a4bf2d3e +0 -0
- data/.git/objects/c0/724bc45e241d336d6376f14d9b258c2e4744d4 +0 -0
- data/.git/objects/c1/3cf3c2ea85ec40544fe31702b2cfe6091aed6e +0 -0
- data/.git/objects/c5/64ac68ebc8e0db7a6355a45f3299829ef2a825 +0 -0
- data/.git/objects/ca/c13b06411cdb70ac35d51ecf9efb0907645bd1 +0 -0
- data/.git/objects/d1/38a420782e818f3f87c6c8c0a0a135639a30d9 +0 -0
- data/.git/objects/d2/85be6e2891e063625d4904c9bcca42bf6f0b83 +0 -0
- data/.git/objects/d4/1e2336bcd3ce3d09a9fa6c3af3270c29bd8457 +1 -0
- data/.git/objects/d5/86dc7698c6ec37db86e9f36a16bd671e0005ab +0 -0
- data/.git/objects/d5/a2b441718a88aa08fa937352a6d80319bc91c0 +0 -0
- data/.git/objects/e0/d8e7ab5a565d95d44f2a9a6246be6003a3de7b +0 -0
- data/.git/objects/e2/bc2615d3aa154bba2897c562a15ed19136d518 +0 -0
- data/.git/objects/e3/a7cacb84225125a2bc91b42394e7de7de7b205 +0 -0
- data/.git/objects/e3/cde2715e3e3870a5d7312cac9bbf6e24259e0f +0 -0
- data/.git/objects/e4/d7cacac2d7e66df5a7c21eaae71c0a90f1439d +0 -0
- data/.git/objects/e7/f4b26a3258b7788ffe2665773387e19c01095a +3 -0
- data/.git/objects/ea/50407bf8daef694d22268540dd55eb3a739bad +4 -0
- data/.git/objects/eb/9701e2dbe8fb606315f9514d789188160bdd67 +2 -0
- data/.git/objects/ee/ccaf0d272346a1dcc672a4131ba692a0027049 +2 -0
- data/.git/objects/f2/196f15b2d432b2a2d641aed4ae5afe7190edb9 +1 -0
- data/.git/objects/f3/3573a82a9e7dbf9bc7f5b3feded4c223701d1f +0 -0
- data/.git/objects/f3/7784042bc99c16c02fd104dda82aafa42d4c9c +0 -0
- data/.git/objects/f5/91a5c39e03e2102c9101db957b48c8c76e194c +0 -0
- data/.git/objects/f9/8d0f95460a7a3f63ab4c08ad5508fd32d1b5c2 +0 -0
- data/.git/objects/pack/pack-c7edd4d292858ed6a37a55c1b6ceb35f65f4587e.idx +0 -0
- data/.git/objects/pack/pack-c7edd4d292858ed6a37a55c1b6ceb35f65f4587e.pack +0 -0
- data/.git/packed-refs +2 -0
- data/.git/refs/heads/master +1 -0
- data/.git/refs/remotes/origin/HEAD +1 -0
- data/.git/refs/remotes/origin/master +1 -0
- data/.gitignore +5 -0
- data/README.rdoc +14 -0
- data/Rakefile +63 -0
- data/lib/rails_ext/action_controller.rb +19 -0
- data/lib/rails_ext/action_controller_ext.rb +29 -0
- data/lib/rails_ext/action_view.rb +5 -0
- data/lib/rails_ext/active_record.rb +7 -0
- data/lib/rails_ext/active_record_ext.rb +15 -0
- data/lib/rails_ext/basic.rb +7 -0
- data/lib/rails_ext/common_helper.rb +83 -0
- data/lib/rails_ext/config_files/safe_hash.rb +96 -0
- data/lib/rails_ext/config_files.rb +18 -0
- data/lib/rails_ext/create_public_symlinks.rb +9 -0
- data/lib/rails_ext/defer_javascript.rb +51 -0
- data/lib/rails_ext/email_config.rb +8 -0
- data/lib/rails_ext/global_path_prefix.rb +56 -0
- data/lib/rails_ext/hacks/ajax_flash.rb +9 -0
- data/lib/rails_ext/hacks/ajax_redirect_to.rb +19 -0
- data/lib/rails_ext/hacks/defer_javascript.rb +17 -0
- data/lib/rails_ext/hacks/global_path_prefix.rb +33 -0
- data/lib/rails_ext/hacks/link_to.rb +106 -0
- data/lib/rails_ext/hacks/merge_default_scope.rb +20 -0
- data/lib/rails_ext/hacks/persistent_params.rb +16 -0
- data/lib/rails_ext/hacks/rjs_layout.rb +2 -0
- data/lib/rails_ext/handy_environment.rb +45 -0
- data/lib/rails_ext/i18n_helper.rb +125 -0
- data/lib/rails_ext/merge_default_scope/hash_poser.rb +40 -0
- data/lib/rails_ext/merge_default_scope.rb +16 -0
- data/lib/rails_ext/model.rb +1 -0
- data/lib/rails_ext/persistent_params.rb +88 -0
- data/lib/rails_ext/redirect_helper.rb +14 -0
- data/lib/rails_ext/reload_page.rb +7 -0
- data/lib/rails_ext/user_error.rb +12 -0
- data/lib/rails_ext.rb +21 -0
- data/spec/safe_hash_spec.rb +71 -0
- data/spec/spec.opts +3 -0
- metadata +203 -0
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
x}�AK�@�=�+�E��B�� 1�x�B�T[���.��M+*��N6��������o0�����[��V�܁�l�`/ρ�Z��\F��t��u����o˗œ^�Ϗ��l]�S�U+��=�����z5�@�W�;�l����B�l��w�-����r�-�(��A!��!yg�Y�_�O��C�-y� 2�c�Z�{�����Q2[�i�OR��� �H��=Wm�
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
xm�A� DѮs��X�B�1ӂB�I��W�{=o~j=�����]kP���[��,��2�RH���>;�Pƛ�6ɤ��Vht��\X���՞���N�
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
xu�1�0��t)���h�&� <�Q��v�nn�e��xP<���e�FxבC��R(kՒ3t��S���7�A�Pt:O��\(J����ؒk�E}ق�+�lAe��z�����ý}�����K�t^)!o��R�}b
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
xm���0C���n{���ɹ�B�)v(|>�1�q^-�Is��p� �t�B�2�P�*%g�ǫ����2����B��}߄8�v�9��G��^)�'���`[�ނM���V� �T59��U{�k!qkU������i� y��7�v�
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/.git/packed-refs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
29b1f8abaed4aea1da8f8bd5f1bd81c26058c41a
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ref: refs/remotes/origin/master
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
29b1f8abaed4aea1da8f8bd5f1bd81c26058c41a
|
data/README.rdoc
ADDED
data/Rakefile
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require 'rake'
|
|
2
|
+
require 'spec/rake/spectask'
|
|
3
|
+
|
|
4
|
+
Dir.chdir File.dirname(__FILE__)
|
|
5
|
+
|
|
6
|
+
# Specs
|
|
7
|
+
task :default => :spec
|
|
8
|
+
|
|
9
|
+
Spec::Rake::SpecTask.new('spec') do |t|
|
|
10
|
+
t.spec_files = FileList["spec/**/*_spec.rb"]
|
|
11
|
+
t.libs = ["lib", "spec"]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Gem
|
|
15
|
+
require 'rake/clean'
|
|
16
|
+
require 'rake/gempackagetask'
|
|
17
|
+
require 'fileutils'
|
|
18
|
+
|
|
19
|
+
spec = Gem::Specification.new do |s|
|
|
20
|
+
s.name = "rails-ext"
|
|
21
|
+
s.version = "0.2.0"
|
|
22
|
+
s.summary = "Set of common Ruby on Rails extensions"
|
|
23
|
+
s.description = "Set of common Ruby on Rails extensions"
|
|
24
|
+
s.author = "Alexey Petrushin"
|
|
25
|
+
# s.email = ""
|
|
26
|
+
s.homepage = "http://www.bos-tec.com"
|
|
27
|
+
|
|
28
|
+
s.platform = Gem::Platform::RUBY
|
|
29
|
+
s.has_rdoc = true
|
|
30
|
+
s.extra_rdoc_files = ["README.rdoc"]
|
|
31
|
+
|
|
32
|
+
s.files = (%w{Rakefile README.rdoc .gitignore} + Dir.glob("{lib,spec,.git}/**/*"))
|
|
33
|
+
# s.executables = ['restclient']
|
|
34
|
+
# s.add_dependency("BlueCloth", ">= 0.0.4")
|
|
35
|
+
s.add_dependency "ruby-ext"
|
|
36
|
+
|
|
37
|
+
s.require_path = "lib"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
PACKAGE_DIR = "#{File.expand_path File.dirname(__FILE__)}/build"
|
|
41
|
+
|
|
42
|
+
Rake::GemPackageTask.new(spec) do |p|
|
|
43
|
+
package_dir = PACKAGE_DIR
|
|
44
|
+
# FileUtils.mkdir package_dir unless File.exist? package_dir
|
|
45
|
+
p.need_tar = true if RUBY_PLATFORM !~ /mswin/
|
|
46
|
+
p.need_zip = true
|
|
47
|
+
p.package_dir = package_dir
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# CLEAN.include [ 'pkg', '*.gem']
|
|
51
|
+
|
|
52
|
+
task :push do
|
|
53
|
+
dir = Dir.chdir PACKAGE_DIR do
|
|
54
|
+
gem_file = Dir.glob("rails-ext*.gem").first
|
|
55
|
+
system "gem push #{gem_file}"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
task :clean do
|
|
60
|
+
system "rm -r #{PACKAGE_DIR}"
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
task :release => [:gem, :push, :clean]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'rails_ext/basic'
|
|
2
|
+
|
|
3
|
+
require 'rails_ext/action_controller_ext'
|
|
4
|
+
|
|
5
|
+
require 'rails_ext/global_path_prefix'
|
|
6
|
+
require 'rails_ext/hacks/global_path_prefix'
|
|
7
|
+
|
|
8
|
+
require 'rails_ext/hacks/link_to'
|
|
9
|
+
|
|
10
|
+
require 'rails_ext/hacks/ajax_flash'
|
|
11
|
+
|
|
12
|
+
require 'rails_ext/hacks/ajax_redirect_to'
|
|
13
|
+
|
|
14
|
+
require 'rails_ext/persistent_params'
|
|
15
|
+
require 'rails_ext/hacks/persistent_params'
|
|
16
|
+
|
|
17
|
+
require 'rails_ext/redirect_helper'
|
|
18
|
+
|
|
19
|
+
require 'rails_ext/reload_page'
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#
|
|
2
|
+
# url_for, used to generate url_for for string path with options and with default_url_options
|
|
3
|
+
#
|
|
4
|
+
ActionController::Base.class_eval do
|
|
5
|
+
protected
|
|
6
|
+
def url_for_path path, options = {}
|
|
7
|
+
unless options.delete :no_prefix
|
|
8
|
+
url = ActionController::Base.relative_url_root + path
|
|
9
|
+
else
|
|
10
|
+
url = path
|
|
11
|
+
end
|
|
12
|
+
options = options.merge default_url_options
|
|
13
|
+
url << "?#{options.to_query}" unless options.empty?
|
|
14
|
+
url._url_format = options[:format] if options[:format] # for links with ajax support
|
|
15
|
+
url
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def catch_user_error
|
|
19
|
+
begin
|
|
20
|
+
yield
|
|
21
|
+
rescue UserError => e
|
|
22
|
+
flash[:error] = e.message
|
|
23
|
+
do_not_persist_params do
|
|
24
|
+
redirect_to default_path
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
around_filter :catch_user_error
|
|
29
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
if defined?(ActiveRecord)
|
|
2
|
+
ActiveRecord::Base.send :class_eval do
|
|
3
|
+
# STRONG_NAME = /\A[a-zA-Z_][a-zA-Z_0-9]*\Z/
|
|
4
|
+
|
|
5
|
+
def dom_id
|
|
6
|
+
new_record? ? "new_#{self.class.name.underscore}" : "#{self.class.name.underscore}_#{id}"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
#
|
|
11
|
+
# handy accessor for @attributes_cache
|
|
12
|
+
#
|
|
13
|
+
attr_reader :attributes_cache
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
module CommonHelper
|
|
2
|
+
# Initialize JavaScripts variables, needed to rails_ext.js works properly.
|
|
3
|
+
def initialize_js_commons
|
|
4
|
+
javascript_tag %{\
|
|
5
|
+
$.authenticity_token = "#{form_authenticity_token}";}
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# Prepends content to 'content_for'
|
|
9
|
+
def prepend_to name, content = nil, &block
|
|
10
|
+
ivar = "@content_for_#{name}"
|
|
11
|
+
content = capture(&block) if block_given?
|
|
12
|
+
content ||= ""
|
|
13
|
+
stored_content = instance_variable_get(ivar) || ""
|
|
14
|
+
instance_variable_set(ivar, content + stored_content)
|
|
15
|
+
nil
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Wraps content for 'content_for'
|
|
19
|
+
def wrap_content_for name, &block
|
|
20
|
+
block.should_not! :be_nil
|
|
21
|
+
|
|
22
|
+
ivar = "@content_for_#{name}"
|
|
23
|
+
content = capture(instance_variable_get(ivar) || "", &block)
|
|
24
|
+
instance_variable_set(ivar, content || "")
|
|
25
|
+
nil
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Has content for 'content_for'
|
|
29
|
+
def has_content_for? name
|
|
30
|
+
ivar = "@content_for_#{name}"
|
|
31
|
+
!instance_variable_get(ivar).blank?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Escape JS
|
|
35
|
+
def js *args, &block
|
|
36
|
+
escape_javascript *args, &block
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# def autohide
|
|
40
|
+
# # request.format == Mime::JS ? 'hidden' : ''
|
|
41
|
+
# Thread.current[:autohide] ? 'hidden' : ''
|
|
42
|
+
# end
|
|
43
|
+
#
|
|
44
|
+
# def render_hidden *args, &block
|
|
45
|
+
# begin
|
|
46
|
+
# Thread.current[:autohide] = true
|
|
47
|
+
# render *args, &block
|
|
48
|
+
# ensure
|
|
49
|
+
# Thread.current[:autohide] = false
|
|
50
|
+
# end
|
|
51
|
+
# end
|
|
52
|
+
|
|
53
|
+
def tidy_html html
|
|
54
|
+
require 'tidy'
|
|
55
|
+
|
|
56
|
+
Tidy.path = '/usr/lib/libtidy.dylib' # depends on platform!
|
|
57
|
+
options = {
|
|
58
|
+
:indent => true,
|
|
59
|
+
:char_encoding => 'utf8',
|
|
60
|
+
:wrap => 0,
|
|
61
|
+
:output_xhtml => true,
|
|
62
|
+
:show_errors => 6,
|
|
63
|
+
:show_warnings => true,
|
|
64
|
+
:tab_size => 2,
|
|
65
|
+
:vertical_space => true,
|
|
66
|
+
:new_inline_tags => "script"
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
Tidy.open options do |tidy|
|
|
70
|
+
xml = tidy.clean(html)
|
|
71
|
+
|
|
72
|
+
# puts " Tidy Messages:"
|
|
73
|
+
# puts tidy.errors
|
|
74
|
+
# puts tidy.diagnostics
|
|
75
|
+
# puts
|
|
76
|
+
|
|
77
|
+
# xml.gsub(">\n</script>", "></script>") # tidy makes it newline
|
|
78
|
+
xml
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
ActionController::Base.send :helper, CommonHelper
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
require 'singleton'
|
|
2
|
+
|
|
3
|
+
class SafeHash < BlankSlate
|
|
4
|
+
attr_reader :hash
|
|
5
|
+
|
|
6
|
+
def initialize hash = {}
|
|
7
|
+
reinitialize hash
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def []= key, value
|
|
11
|
+
value = SafeHash.new value if value.is_a? Hash
|
|
12
|
+
@hash[key.to_s] = value
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def include? key
|
|
16
|
+
@hash.include? key.to_s
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def [] key, *args
|
|
20
|
+
key = key.to_s
|
|
21
|
+
if key.last == '!'
|
|
22
|
+
key = key[0..key.size-2]
|
|
23
|
+
if (result = @hash[key]).eql? nil
|
|
24
|
+
raise "No key #{key}"
|
|
25
|
+
else
|
|
26
|
+
result
|
|
27
|
+
end
|
|
28
|
+
elsif key.last == '?'
|
|
29
|
+
key = key[0..key.size-2]
|
|
30
|
+
@hash.include? key
|
|
31
|
+
elsif (result = @hash[key]).eql? nil
|
|
32
|
+
if args.empty?
|
|
33
|
+
SafeNil.instance
|
|
34
|
+
else
|
|
35
|
+
return *args
|
|
36
|
+
end
|
|
37
|
+
else
|
|
38
|
+
result
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def reinitialize hash
|
|
43
|
+
@hash = {}
|
|
44
|
+
hash.each do |k, v|
|
|
45
|
+
v = SafeHash.new v if v.is_a? Hash
|
|
46
|
+
@hash[k.to_s] = v
|
|
47
|
+
end
|
|
48
|
+
# @hash.freeze
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def method_missing m, *args
|
|
52
|
+
self[m, *args]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def to_yaml *args
|
|
56
|
+
@hash.to_yaml *args
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def inspect
|
|
60
|
+
@hash.inspect
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
class SafeNil < BlankSlate
|
|
64
|
+
include Singleton
|
|
65
|
+
|
|
66
|
+
def [] key, *args
|
|
67
|
+
if key.to_s.last == '!'
|
|
68
|
+
raise "No key #{key}"
|
|
69
|
+
elsif args.empty?
|
|
70
|
+
SafeNil.instance
|
|
71
|
+
else
|
|
72
|
+
return *args
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def method_missing m, *args
|
|
77
|
+
self[m, *args]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def include? key
|
|
81
|
+
false
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def to_b
|
|
85
|
+
false
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def to_yaml *args
|
|
89
|
+
nil
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def inspect
|
|
93
|
+
nil
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Converts any non standart fname.yml file in /config folder into FNAME constant with loaded YAML content wrapped into SafeHash.
|
|
2
|
+
config_dir = "#{RAILS_ROOT}/config/"
|
|
3
|
+
files = Dir.glob("#{config_dir}*.yml")
|
|
4
|
+
ignore = ["asset_packages\\.yml", "database\\.yml", "\\..+\\."].collect{|expr| Regexp.new expr}
|
|
5
|
+
files.delete_if{|fname| ignore.any?{|template| template =~ fname}}
|
|
6
|
+
files.delete_if{|fname| /^[a-zA-Z0-9_]+\.yml$/ !~ fname.sub(config_dir, '')}
|
|
7
|
+
|
|
8
|
+
files.each do |fname|
|
|
9
|
+
const = fname.sub(config_dir, '').sub('.yml', '').upcase
|
|
10
|
+
|
|
11
|
+
setting = if (data = YAML.load_file(fname)).is_a? Hash
|
|
12
|
+
SafeHash.new data
|
|
13
|
+
else
|
|
14
|
+
data
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
Object.const_set const, setting
|
|
18
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
ActionController::Base.class_eval do
|
|
2
|
+
def self.defer_scripts
|
|
3
|
+
before_filter :defer_scripts
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def defer_scripts
|
|
7
|
+
Thread.current[:deferred_scripts_called] = false
|
|
8
|
+
Thread.current[:defer_scripts] = request.xhr? ? false : true
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.defer_scripts?
|
|
12
|
+
!!Thread.current[:defer_scripts]
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
ActionView::Base.class_eval do
|
|
17
|
+
def defer_scripts?
|
|
18
|
+
ActionController::Base.defer_scripts?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def initialize_deferred_scripts
|
|
22
|
+
return "" unless defer_scripts?
|
|
23
|
+
not_deferred_script do
|
|
24
|
+
javascript_tag "var deferred = [];"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def not_deferred_script &block
|
|
29
|
+
before = Thread.current[:defer_scripts]
|
|
30
|
+
begin
|
|
31
|
+
Thread.current[:defer_scripts] = false
|
|
32
|
+
block.call
|
|
33
|
+
ensure
|
|
34
|
+
Thread.current[:defer_scripts] = before
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def call_deferred_scripts
|
|
39
|
+
return "" unless defer_scripts?
|
|
40
|
+
Thread.current[:deferred_scripts_called] = true
|
|
41
|
+
content = <<END
|
|
42
|
+
$.each(deferred, function(){this()});
|
|
43
|
+
$('._deferred').show();
|
|
44
|
+
deferred = [];
|
|
45
|
+
END
|
|
46
|
+
not_deferred_script do
|
|
47
|
+
javascript_tag content
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Load mail configuration if not in test environment
|
|
2
|
+
if RAILS_ENV != 'test'
|
|
3
|
+
filename = "#{RAILS_ROOT}/config/email.yml"
|
|
4
|
+
if File.exist? filename
|
|
5
|
+
email_settings = YAML::load(File.open(filename))
|
|
6
|
+
ActionMailer::Base.smtp_settings = email_settings[RAILS_ENV] unless email_settings[RAILS_ENV].nil?
|
|
7
|
+
end
|
|
8
|
+
end
|