mirror of
https://github.com/ENSL/ensl.org.git
synced 2024-12-26 04:21:36 +00:00
Removed dynamic_form and country_code_select gems to fold them in as a gem dependencies.
This commit is contained in:
parent
24eabf89e6
commit
e1a42da0dc
33 changed files with 15 additions and 1195 deletions
|
@ -15,3 +15,5 @@ MYSQL_CONNECTION_POOL=8
|
||||||
|
|
||||||
NEW_RELIC_APP_NAME=ENSL
|
NEW_RELIC_APP_NAME=ENSL
|
||||||
NEW_RELIC_LICENSE_KEY=
|
NEW_RELIC_LICENSE_KEY=
|
||||||
|
|
||||||
|
GOOGLE_CALENDAR_ID=
|
||||||
|
|
10
Gemfile
10
Gemfile
|
@ -5,9 +5,9 @@ ruby '2.1.1'
|
||||||
gem 'dotenv-rails', '~> 0.10.0'
|
gem 'dotenv-rails', '~> 0.10.0'
|
||||||
gem 'rails', '~> 3.2.17'
|
gem 'rails', '~> 3.2.17'
|
||||||
gem 'mysql2', '~> 0.3.15'
|
gem 'mysql2', '~> 0.3.15'
|
||||||
gem 'oj', '~> 2.5.5'
|
gem 'dalli', '~> 2.7.0'
|
||||||
|
|
||||||
# Libraries
|
gem 'oj', '~> 2.5.5'
|
||||||
gem 'jquery-rails', '~> 2.0.2'
|
gem 'jquery-rails', '~> 2.0.2'
|
||||||
gem 'sass-rails', '~> 3.2.5'
|
gem 'sass-rails', '~> 3.2.5'
|
||||||
gem 'coffee-rails', '~> 3.2.2'
|
gem 'coffee-rails', '~> 3.2.2'
|
||||||
|
@ -20,8 +20,10 @@ gem 'carrierwave', '~> 0.10.0'
|
||||||
gem 'bluecloth', '~> 2.2.0'
|
gem 'bluecloth', '~> 2.2.0'
|
||||||
gem 'therubyracer', '~> 0.12.1'
|
gem 'therubyracer', '~> 0.12.1'
|
||||||
gem 'newrelic_rpm', '~> 3.7.2.195'
|
gem 'newrelic_rpm', '~> 3.7.2.195'
|
||||||
|
gem 'will_paginate', '~> 3.0.5'
|
||||||
|
gem 'dynamic_form', '~> 1.1.4'
|
||||||
|
gem 'country_code_select', '~> 1.0.1'
|
||||||
gem 'rmagick', '~> 2.13.2', require: false
|
gem 'rmagick', '~> 2.13.2', require: false
|
||||||
gem 'will_paginate', git: 'https://github.com/p7r/will_paginate.git', branch: 'rails3'
|
|
||||||
|
|
||||||
group :assets do
|
group :assets do
|
||||||
gem 'uglifier', '~> 2.5.0'
|
gem 'uglifier', '~> 2.5.0'
|
||||||
|
@ -41,7 +43,6 @@ group :test do
|
||||||
gem 'codeclimate-test-reporter', '~> 0.3.0', require: nil
|
gem 'codeclimate-test-reporter', '~> 0.3.0', require: nil
|
||||||
gem 'database_cleaner', '~> 1.2.0'
|
gem 'database_cleaner', '~> 1.2.0'
|
||||||
gem 'rspec-rails', '~> 2.14.1'
|
gem 'rspec-rails', '~> 2.14.1'
|
||||||
gem 'rspec-given', '~> 3.5.4'
|
|
||||||
gem 'capybara', '~> 2.2.1'
|
gem 'capybara', '~> 2.2.1'
|
||||||
gem 'poltergeist', '~> 1.5.0'
|
gem 'poltergeist', '~> 1.5.0'
|
||||||
gem 'selenium-webdriver', '~> 2.41.0'
|
gem 'selenium-webdriver', '~> 2.41.0'
|
||||||
|
@ -54,6 +55,5 @@ end
|
||||||
|
|
||||||
group :staging, :production do
|
group :staging, :production do
|
||||||
gem 'kgio', '~> 2.9.2'
|
gem 'kgio', '~> 2.9.2'
|
||||||
gem 'dalli', '~> 2.7.0'
|
|
||||||
gem 'unicorn', '~> 4.8.2'
|
gem 'unicorn', '~> 4.8.2'
|
||||||
end
|
end
|
||||||
|
|
26
Gemfile.lock
26
Gemfile.lock
|
@ -1,10 +1,3 @@
|
||||||
GIT
|
|
||||||
remote: https://github.com/p7r/will_paginate.git
|
|
||||||
revision: 53d1da6da003dc172ee054e4cc416d0723f00b88
|
|
||||||
branch: rails3
|
|
||||||
specs:
|
|
||||||
will_paginate (3.0.pre3)
|
|
||||||
|
|
||||||
GEM
|
GEM
|
||||||
remote: http://rubygems.org/
|
remote: http://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
|
@ -82,6 +75,8 @@ GEM
|
||||||
execjs
|
execjs
|
||||||
coffee-script-source (1.3.3)
|
coffee-script-source (1.3.3)
|
||||||
columnize (0.3.6)
|
columnize (0.3.6)
|
||||||
|
country_code_select (1.0.1)
|
||||||
|
activesupport (>= 3.0)
|
||||||
dalli (2.7.0)
|
dalli (2.7.0)
|
||||||
database_cleaner (1.2.0)
|
database_cleaner (1.2.0)
|
||||||
debugger (1.6.6)
|
debugger (1.6.6)
|
||||||
|
@ -94,6 +89,7 @@ GEM
|
||||||
dotenv (0.10.0)
|
dotenv (0.10.0)
|
||||||
dotenv-rails (0.10.0)
|
dotenv-rails (0.10.0)
|
||||||
dotenv (= 0.10.0)
|
dotenv (= 0.10.0)
|
||||||
|
dynamic_form (1.1.4)
|
||||||
erubis (2.7.0)
|
erubis (2.7.0)
|
||||||
execjs (1.4.0)
|
execjs (1.4.0)
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
|
@ -104,8 +100,6 @@ GEM
|
||||||
railties (>= 3.0.0)
|
railties (>= 3.0.0)
|
||||||
ffi (1.9.3)
|
ffi (1.9.3)
|
||||||
ffi (1.9.3-x86-mingw32)
|
ffi (1.9.3-x86-mingw32)
|
||||||
given_core (3.5.4)
|
|
||||||
sorcerer (>= 0.3.7)
|
|
||||||
gruff (0.3.6)
|
gruff (0.3.6)
|
||||||
hike (1.2.3)
|
hike (1.2.3)
|
||||||
i18n (0.6.9)
|
i18n (0.6.9)
|
||||||
|
@ -179,16 +173,9 @@ GEM
|
||||||
json (~> 1.4)
|
json (~> 1.4)
|
||||||
ref (1.0.5)
|
ref (1.0.5)
|
||||||
rmagick (2.13.2)
|
rmagick (2.13.2)
|
||||||
rspec (2.14.1)
|
|
||||||
rspec-core (~> 2.14.0)
|
|
||||||
rspec-expectations (~> 2.14.0)
|
|
||||||
rspec-mocks (~> 2.14.0)
|
|
||||||
rspec-core (2.14.8)
|
rspec-core (2.14.8)
|
||||||
rspec-expectations (2.14.5)
|
rspec-expectations (2.14.5)
|
||||||
diff-lcs (>= 1.1.3, < 2.0)
|
diff-lcs (>= 1.1.3, < 2.0)
|
||||||
rspec-given (3.5.4)
|
|
||||||
given_core (= 3.5.4)
|
|
||||||
rspec (>= 2.12)
|
|
||||||
rspec-mocks (2.14.6)
|
rspec-mocks (2.14.6)
|
||||||
rspec-rails (2.14.1)
|
rspec-rails (2.14.1)
|
||||||
actionpack (>= 3.0)
|
actionpack (>= 3.0)
|
||||||
|
@ -216,7 +203,6 @@ GEM
|
||||||
simplecov-html (~> 0.7.1)
|
simplecov-html (~> 0.7.1)
|
||||||
simplecov-html (0.7.1)
|
simplecov-html (0.7.1)
|
||||||
slop (3.4.7)
|
slop (3.4.7)
|
||||||
sorcerer (1.0.2)
|
|
||||||
sprockets (2.2.2)
|
sprockets (2.2.2)
|
||||||
hike (~> 1.2)
|
hike (~> 1.2)
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
|
@ -249,6 +235,7 @@ GEM
|
||||||
raindrops (~> 0.7)
|
raindrops (~> 0.7)
|
||||||
websocket (1.0.7)
|
websocket (1.0.7)
|
||||||
websocket-driver (0.3.2)
|
websocket-driver (0.3.2)
|
||||||
|
will_paginate (3.0.5)
|
||||||
win32console (1.3.2-x86-mingw32)
|
win32console (1.3.2-x86-mingw32)
|
||||||
xpath (2.0.0)
|
xpath (2.0.0)
|
||||||
nokogiri (~> 1.3)
|
nokogiri (~> 1.3)
|
||||||
|
@ -270,9 +257,11 @@ DEPENDENCIES
|
||||||
carrierwave (~> 0.10.0)
|
carrierwave (~> 0.10.0)
|
||||||
codeclimate-test-reporter (~> 0.3.0)
|
codeclimate-test-reporter (~> 0.3.0)
|
||||||
coffee-rails (~> 3.2.2)
|
coffee-rails (~> 3.2.2)
|
||||||
|
country_code_select (~> 1.0.1)
|
||||||
dalli (~> 2.7.0)
|
dalli (~> 2.7.0)
|
||||||
database_cleaner (~> 1.2.0)
|
database_cleaner (~> 1.2.0)
|
||||||
dotenv-rails (~> 0.10.0)
|
dotenv-rails (~> 0.10.0)
|
||||||
|
dynamic_form (~> 1.1.4)
|
||||||
factory_girl_rails (~> 4.4.1)
|
factory_girl_rails (~> 4.4.1)
|
||||||
gruff (~> 0.3.6)
|
gruff (~> 0.3.6)
|
||||||
jquery-rails (~> 2.0.2)
|
jquery-rails (~> 2.0.2)
|
||||||
|
@ -285,7 +274,6 @@ DEPENDENCIES
|
||||||
pry-debugger (~> 0.2.2)
|
pry-debugger (~> 0.2.2)
|
||||||
rails (~> 3.2.17)
|
rails (~> 3.2.17)
|
||||||
rmagick (~> 2.13.2)
|
rmagick (~> 2.13.2)
|
||||||
rspec-given (~> 3.5.4)
|
|
||||||
rspec-rails (~> 2.14.1)
|
rspec-rails (~> 2.14.1)
|
||||||
sanitize (~> 2.1.0)
|
sanitize (~> 2.1.0)
|
||||||
sass-rails (~> 3.2.5)
|
sass-rails (~> 3.2.5)
|
||||||
|
@ -295,4 +283,4 @@ DEPENDENCIES
|
||||||
tinymce-rails (~> 3.5.4.1)
|
tinymce-rails (~> 3.5.4.1)
|
||||||
uglifier (~> 2.5.0)
|
uglifier (~> 2.5.0)
|
||||||
unicorn (~> 4.8.2)
|
unicorn (~> 4.8.2)
|
||||||
will_paginate!
|
will_paginate (~> 3.0.5)
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<%= render :partial => "response" %>
|
<%= render :partial => "response" %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<% form_remote_tag :update => 'serverLog',
|
<% form_tag remote: true, update: 'serverLog',
|
||||||
:before => "Element.show('spinner')",
|
:before => "Element.show('spinner')",
|
||||||
:success => "Element.hide('spinner'); $('serverLog').scrollTop = $('serverLog').scrollHeight;" do %>
|
:success => "Element.hide('spinner'); $('serverLog').scrollTop = $('serverLog').scrollHeight;" do %>
|
||||||
<%= label_tag :query, "Rcon Command:" %>
|
<%= label_tag :query, "Rcon Command:" %>
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
coverage
|
|
||||||
rdoc
|
|
20
vendor/plugins/country_code_select/MIT-LICENSE
vendored
20
vendor/plugins/country_code_select/MIT-LICENSE
vendored
|
@ -1,20 +0,0 @@
|
||||||
Copyright (c) 2008 Adam Meehan
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
9
vendor/plugins/country_code_select/README
vendored
9
vendor/plugins/country_code_select/README
vendored
|
@ -1,9 +0,0 @@
|
||||||
== Country Code Select
|
|
||||||
|
|
||||||
A simple country code select helper. Works exactly the same as country_select but uses country codes instead.
|
|
||||||
|
|
||||||
country_code_select(:user, :country, [[ 'US', 'United States' ], [ 'CA', 'Canada' ]])
|
|
||||||
|
|
||||||
== Copyright/License
|
|
||||||
|
|
||||||
Copyright (c) 2008 Russ Smith, released under the MIT license.
|
|
|
@ -1,9 +0,0 @@
|
||||||
== Country Code Select
|
|
||||||
|
|
||||||
A simple country code select helper. Works exactly the same as country_select but uses country codes instead.
|
|
||||||
|
|
||||||
country_code_select(:user, :country, [[ 'US', 'United States' ], [ 'CA', 'Canada' ]])
|
|
||||||
|
|
||||||
== Copyright/License
|
|
||||||
|
|
||||||
Copyright (c) 2008 Russ Smith, released under the MIT license.
|
|
31
vendor/plugins/country_code_select/Rakefile
vendored
31
vendor/plugins/country_code_select/Rakefile
vendored
|
@ -1,31 +0,0 @@
|
||||||
require 'rake'
|
|
||||||
require 'rake/testtask'
|
|
||||||
require 'rake/rdoctask'
|
|
||||||
require 'spec/rake/spectask'
|
|
||||||
|
|
||||||
desc 'Default: run specs'
|
|
||||||
task :default => :spec
|
|
||||||
|
|
||||||
spec_files = Rake::FileList["spec/**/*_spec.rb"]
|
|
||||||
|
|
||||||
desc "Run specs"
|
|
||||||
Spec::Rake::SpecTask.new do |t|
|
|
||||||
t.spec_files = spec_files
|
|
||||||
t.spec_opts = ["-c"]
|
|
||||||
end
|
|
||||||
|
|
||||||
desc "Generate code coverage"
|
|
||||||
Spec::Rake::SpecTask.new(:coverage) do |t|
|
|
||||||
t.spec_files = spec_files
|
|
||||||
t.rcov = true
|
|
||||||
t.rcov_opts = ['--exclude', 'spec,/var/lib/gems']
|
|
||||||
end
|
|
||||||
|
|
||||||
desc 'Generate documentation for the country_code_select plugin.'
|
|
||||||
Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
||||||
rdoc.rdoc_dir = 'rdoc'
|
|
||||||
rdoc.title = 'CountryCodeSelect'
|
|
||||||
rdoc.options << '--line-numbers' << '--inline-source'
|
|
||||||
rdoc.rdoc_files.include('README')
|
|
||||||
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
||||||
end
|
|
1
vendor/plugins/country_code_select/init.rb
vendored
1
vendor/plugins/country_code_select/init.rb
vendored
|
@ -1 +0,0 @@
|
||||||
require 'country_code_select'
|
|
|
@ -1,8 +0,0 @@
|
||||||
require 'country_code_select/countries'
|
|
||||||
require 'country_code_select/form_builder'
|
|
||||||
require 'country_code_select/form_helpers'
|
|
||||||
require 'country_code_select/instance_tag'
|
|
||||||
|
|
||||||
ActionView::Base.send(:include, CountryCodeSelect::FormHelpers)
|
|
||||||
ActionView::Helpers::InstanceTag.send(:include, CountryCodeSelect::InstanceTag)
|
|
||||||
ActionView::Helpers::FormBuilder.send(:include, CountryCodeSelect::FormBuilder)
|
|
|
@ -1,42 +0,0 @@
|
||||||
module CountryCodeSelect
|
|
||||||
module Countries
|
|
||||||
COUNTRIES = [["Afghanistan", "AF"], ["Albania", "AL"], ["Algeria", "DZ"], ["American Samoa", "AS"], ["Andorra", "AD"], ["Angola", "AO"],
|
|
||||||
["Anguilla", "AI"], ["Antarctica", "AQ"], ["Antigua and Barbuda", "AG"], ["Argentina", "AR"], ["Armenia", "AM"], ["Aruba", "AW"],
|
|
||||||
["Australia", "AU"], ["Austria", "AT"], ["Azerbaidjan", "AZ"], ["Bahamas", "BS"], ["Bahrain", "BH"], ["Banglades", "BD"], ["Barbados", "BB"],
|
|
||||||
["Belarus", "BY"], ["Belgium", "BE"], ["Belize", "BZ"], ["Benin", "BJ"], ["Bermuda", "BM"], ["Bolivia", "BO"], ["Bosnia-Herzegovina", "BA"],
|
|
||||||
["Botswana", "BW"], ["Bouvet Island", "BV"], ["Brazil", "BR"], ["British Indian O. Terr.", "IO"], ["Brunei Darussalam", "BN"], ["Bulgaria", "BG"],
|
|
||||||
["Burkina Faso", "BF"], ["Burundi", "BI"], ["Buthan", "BT"], ["Cambodia", "KH"], ["Cameroon", "CM"], ["Canada", "CA"], ["Cape Verde", "CV"],
|
|
||||||
["Cayman Islands", "KY"], ["Central African Rep.", "CF"], ["Chad", "TD"], ["Chile", "CL"], ["China", "CN"], ["Christmas Island", "CX"],
|
|
||||||
["Cocos (Keeling) Isl.", "CC"], ["Colombia", "CO"], ["Comoros", "KM"], ["Congo", "CG"], ["Cook Islands", "CK"], ["Costa Rica", "CR"],
|
|
||||||
["Croatia", "HR"], ["Cuba", "CU"], ["Cyprus", "CY"], ["Czech Republic", "CZ"], ["Czechoslovakia", "CS"], ["Denmark", "DK"], ["Djibouti", "DJ"],
|
|
||||||
["Dominica", "DM"], ["Dominican Republic", "DO"], ["East Timor", "TP"], ["Ecuador", "EC"], ["Egypt", "EG"], ["El Salvador", "SV"],
|
|
||||||
["Equatorial Guinea", "GQ"], ["Estonia", "EE"], ["Ethiopia", "ET"], ["European Union", "EU"], ["Falkland Isl.(UK)", "FK"], ["Faroe Islands", "FO"], ["Fiji", "FJ"],
|
|
||||||
["Finland", "FI"], ["France", "FR"], ["France (European Ter.)", "FX"], ["French Southern Terr.", "TF"], ["Gabon", "GA"], ["Gambia", "GM"],
|
|
||||||
["Georgia", "GE"], ["Germany", "DE"], ["Ghana", "GH"], ["Gibraltar", "GI"], ["Great Britain (UK)", "GB"], ["Greece", "GR"], ["Greenland", "GL"],
|
|
||||||
["Grenada", "GD"], ["Guadeloupe (Fr.)", "GP"], ["Guam (US)", "GU"], ["Guatemala", "GT"], ["Guinea", "GN"], ["Guinea Bissau", "GW"],
|
|
||||||
["Guyana", "GY"], ["Guyana (Fr.)", "GF"], ["Haiti", "HT"], ["Heard & McDonald Isl.", "HM"], ["Honduras", "HN"], ["Hong Kong", "HK"],
|
|
||||||
["Hungary", "HU"], ["Iceland", "IS"], ["India", "IN"], ["Indonesia", "ID"], ["Iran", "IR"], ["Iraq", "IQ"], ["Ireland", "IE"], ["Israel", "IL"],
|
|
||||||
["Italy", "IT"], ["Ivory Coast", "CI"], ["Jamaica", "JM"], ["Japan", "JP"], ["Jordan", "JO"], ["Kazachstan", "KZ"], ["Kenya", "KE"],
|
|
||||||
["Kirgistan", "KG"], ["Kiribati", "KI"], ["Korea (North)", "KP"], ["Korea (South)", "KR"], ["Kuwait", "KW"], ["Laos", "LA"], ["Latvia", "LV"],
|
|
||||||
["Lebanon", "LB"], ["Lesotho", "LS"], ["Liberia", "LR"], ["Libya", "LY"], ["Liechtenstein", "LI"], ["Lithuania", "LT"], ["Luxembourg", "LU"],
|
|
||||||
["Macau", "MO"], ["Madagascar", "MG"], ["Malawi", "MW"], ["Malaysia", "MY"], ["Maldives", "MV"], ["Mali", "ML"], ["Malta", "MT"],
|
|
||||||
["Marshall Islands", "MH"], ["Martinique (Fr.)", "MQ"], ["Mauritania", "MR"], ["Mauritius", "MU"], ["Mexico", "MX"], ["Micronesia", "FM"],
|
|
||||||
["Moldavia", "MD"], ["Monaco", "MC"], ["Mongolia", "MN"], ["Montserrat", "MS"], ["Morocco", "MA"], ["Mozambique", "MZ"], ["Myanmar", "MM"],
|
|
||||||
["Namibia", "NA"], ["Nauru", "NR"], ["Nepal", "NP"], ["Netherland Antilles", "AN"], ["Netherlands", "NL"], ["Neutral Zone", "NT"],
|
|
||||||
["New Caledonia (Fr.)", "NC"], ["New Zealand", "NZ"], ["Nicaragua", "NI"], ["Niger", "NE"], ["Nigeria", "NG"], ["Niue", "NU"],
|
|
||||||
["Norfolk Island", "NF"], ["Northern Mariana Isl.", "MP"], ["Norway", "NO"], ["Oman", "OM"], ["Pakistan", "PK"], ["Palau", "PW"],
|
|
||||||
["Panama", "PA"], ["Papua New", "PG"], ["Paraguay", "PY"], ["Peru", "PE"], ["Philippines", "PH"], ["Pitcairn", "PN"], ["Poland", "PL"],
|
|
||||||
["Polynesia (Fr.)", "PF"], ["Portugal", "PT"], ["Puerto Rico (US)", "PR"], ["Qatar", "QA"], ["Reunion (Fr.)", "RE"], ["Romania", "RO"],
|
|
||||||
["Russian Federation", "RU"], ["Rwanda", "RW"], ["Saint Lucia", "LC"], ["Samoa", "WS"], ["San Marino", "SM"], ["Saudi Arabia", "SA"],
|
|
||||||
["Senegal", "SN"], ["Seychelles", "SC"], ["Sierra Leone", "SL"], ["Singapore", "SG"], ["Slovak Republic", "SK"], ["Slovenia", "SI"],
|
|
||||||
["Solomon Islands", "SB"], ["Somalia", "SO"], ["South Africa", "ZA"], ["Soviet Union", "SU"], ["Spain", "ES"], ["Sri Lanka", "LK"],
|
|
||||||
["St. Helena", "SH"], ["St. Pierre & Miquelon", "PM"], ["St. Tome and Principe", "ST"], ["St.Kitts Nevis Anguilla", "KN"],
|
|
||||||
["St.Vincent & Grenadines", "VC"], ["Sudan", "SD"], ["Suriname", "SR"], ["Svalbard & Jan Mayen Is", "SJ"], ["Swaziland", "SZ"], ["Sweden", "SE"],
|
|
||||||
["Switzerland", "CH"], ["Syria", "SY"], ["Tadjikistan", "TJ"], ["Taiwan", "TW"], ["Tanzania", "TZ"], ["Thailand", "TH"], ["Togo", "TG"],
|
|
||||||
["Tokelau", "TK"], ["Tonga", "TO"], ["Trinidad & Tobago", "TT"], ["Tunisia", "TN"], ["Turkey", "TR"], ["Turkmenistan", "TM"],
|
|
||||||
["Turks & Caicos Islands", "TC"], ["Tuvalu", "TV"], ["Uganda", "UG"], ["Ukraine", "UA"], ["United Arab Emirates", "AE"], ["United Kingdom", "GB"],
|
|
||||||
["United States", "US"], ["Uruguay", "UY"], ["US Minor outlying Isl.", "UM"], ["Uzbekistan", "UZ"], ["Vanuatu", "VU"], ["Vatican City State", "VA"],
|
|
||||||
["Venezuela", "VE"], ["Vietnam", "VN"], ["Virgin Islands (British)", "VG"], ["Virgin Islands (US)", "VI"], ["Wallis & Futuna Islands", "WF"],
|
|
||||||
["Western Sahara", "EH"], ["Yemen", "YE"], ["Yugoslavia", "YU"], ["Zaire", "ZR"], ["Zambia", "ZM"], ["Zimbabwe", "ZW"]]
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,7 +0,0 @@
|
||||||
module CountryCodeSelect
|
|
||||||
module FormBuilder
|
|
||||||
def country_code_select(method, priority_countries = nil, options= {})
|
|
||||||
@template.country_code_select(@object_name, method, priority_countries, options.merge(:object => @object))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,7 +0,0 @@
|
||||||
module CountryCodeSelect
|
|
||||||
module FormHelpers
|
|
||||||
def country_code_select(object_name, method, priority_countries = nil, options = {})
|
|
||||||
ActionView::Helpers::InstanceTag.new(object_name, method, self, options.delete(:object)).to_country_code_select_tag(priority_countries, options)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,27 +0,0 @@
|
||||||
module CountryCodeSelect
|
|
||||||
module InstanceTag
|
|
||||||
include Countries
|
|
||||||
|
|
||||||
def to_country_code_select_tag(priority_countries, options = {})
|
|
||||||
country_code_select(priority_countries, options)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Adapted from Rails country_select. Just uses country codes instead of full names.
|
|
||||||
def country_code_select(priority_countries, options)
|
|
||||||
selected = object.send(@method_name)
|
|
||||||
|
|
||||||
countries = ''
|
|
||||||
if priority_countries
|
|
||||||
countries += options_for_select(priority_countries, selected)
|
|
||||||
countries += "<option value=\"\" disabled=\"disabled\">-------------</option>\n"
|
|
||||||
end
|
|
||||||
|
|
||||||
countries = countries + options_for_select(COUNTRIES, selected)
|
|
||||||
if Rails::VERSION::STRING.to_f < 3
|
|
||||||
content_tag(:select, countries, options.merge(:id => "#{@object_name}_#{@method_name}", :name => "#{@object_name}[#{@method_name}]"))
|
|
||||||
else
|
|
||||||
content_tag(:select, countries, options.merge(:id => "#{@object_name}_#{@method_name}", :name => "#{@object_name}[#{@method_name}]"), false)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,7 +0,0 @@
|
||||||
require File.dirname(__FILE__) + '/spec_helper'
|
|
||||||
|
|
||||||
describe CountryCodeSelect::FormHelpers do
|
|
||||||
it "should include country_code_select method" do
|
|
||||||
ActionView::Helpers::FormBuilder.instance_methods.should include('country_code_select')
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,26 +0,0 @@
|
||||||
require File.dirname(__FILE__) + '/spec_helper'
|
|
||||||
|
|
||||||
describe CountryCodeSelect::FormHelpers do
|
|
||||||
describe "country_code_select" do
|
|
||||||
include CountryCodeSelect::FormHelpers
|
|
||||||
|
|
||||||
before(:each) do
|
|
||||||
@user = mock('User', :country => nil)
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should output a select field with countries" do
|
|
||||||
output = country_code_select(:user, :country)
|
|
||||||
output.should have_tag('select[id=user_country]')
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should output a select field with priority countries" do
|
|
||||||
output = country_code_select(:user, :country, [ 'US', 'United States' ])
|
|
||||||
output.should have_tag('option[value=US]')
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should output a select field with passed attributes" do
|
|
||||||
output = country_code_select(:user, :country, [ 'US', 'United States' ], :class => 'custom_class')
|
|
||||||
output.should have_tag('select[class=custom_class]')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,31 +0,0 @@
|
||||||
====================================================================
|
|
||||||
== RSpec
|
|
||||||
Copyright (c) 2005-2007 The RSpec Development Team
|
|
||||||
====================================================================
|
|
||||||
== ARTS
|
|
||||||
Copyright (c) 2006 Kevin Clark, Jake Howerton
|
|
||||||
====================================================================
|
|
||||||
== ZenTest
|
|
||||||
Copyright (c) 2001-2006 Ryan Davis, Eric Hodel, Zen Spider Software
|
|
||||||
====================================================================
|
|
||||||
== AssertSelect
|
|
||||||
Copyright (c) 2006 Assaf Arkin
|
|
||||||
====================================================================
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
||||||
of the Software, and to permit persons to whom the Software is furnished to do
|
|
||||||
so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
|
@ -1,130 +0,0 @@
|
||||||
# This is a wrapper of assert_select for rspec.
|
|
||||||
|
|
||||||
module Spec # :nodoc:
|
|
||||||
module Rails
|
|
||||||
module Matchers
|
|
||||||
|
|
||||||
class AssertSelect #:nodoc:
|
|
||||||
|
|
||||||
def initialize(assertion, spec_scope, *args, &block)
|
|
||||||
@assertion = assertion
|
|
||||||
@spec_scope = spec_scope
|
|
||||||
@args = args
|
|
||||||
@block = block
|
|
||||||
end
|
|
||||||
|
|
||||||
def matches?(response_or_text, &block)
|
|
||||||
if ActionController::TestResponse === response_or_text and
|
|
||||||
response_or_text.headers.key?('Content-Type') and
|
|
||||||
response_or_text.headers['Content-Type'].to_sym == :xml
|
|
||||||
@args.unshift(HTML::Document.new(response_or_text.body, false, true).root)
|
|
||||||
elsif String === response_or_text
|
|
||||||
@args.unshift(HTML::Document.new(response_or_text).root)
|
|
||||||
end
|
|
||||||
@block = block if block
|
|
||||||
begin
|
|
||||||
@spec_scope.send(@assertion, *@args, &@block)
|
|
||||||
rescue ::Test::Unit::AssertionFailedError => @error
|
|
||||||
end
|
|
||||||
|
|
||||||
@error.nil?
|
|
||||||
end
|
|
||||||
|
|
||||||
def failure_message; @error.message; end
|
|
||||||
def negative_failure_message; "should not #{description}, but did"; end
|
|
||||||
|
|
||||||
def description
|
|
||||||
{
|
|
||||||
:assert_select => "have tag#{format_args(*@args)}",
|
|
||||||
:assert_select_email => "send email#{format_args(*@args)}",
|
|
||||||
}[@assertion]
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def format_args(*args)
|
|
||||||
return "" if args.empty?
|
|
||||||
return "(#{arg_list(*args)})"
|
|
||||||
end
|
|
||||||
|
|
||||||
def arg_list(*args)
|
|
||||||
args.collect do |arg|
|
|
||||||
arg.respond_to?(:description) ? arg.description : arg.inspect
|
|
||||||
end.join(", ")
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
# :call-seq:
|
|
||||||
# response.should have_tag(*args, &block)
|
|
||||||
# string.should have_tag(*args, &block)
|
|
||||||
#
|
|
||||||
# wrapper for assert_select with additional support for using
|
|
||||||
# css selectors to set expectation on Strings. Use this in
|
|
||||||
# helper specs, for example, to set expectations on the results
|
|
||||||
# of helper methods.
|
|
||||||
#
|
|
||||||
# == Examples
|
|
||||||
#
|
|
||||||
# # in a controller spec
|
|
||||||
# response.should have_tag("div", "some text")
|
|
||||||
#
|
|
||||||
# # in a helper spec (person_address_tag is a method in the helper)
|
|
||||||
# person_address_tag.should have_tag("input#person_address")
|
|
||||||
#
|
|
||||||
# see documentation for assert_select at http://api.rubyonrails.org/
|
|
||||||
def have_tag(*args, &block)
|
|
||||||
AssertSelect.new(:assert_select, self, *args, &block)
|
|
||||||
end
|
|
||||||
|
|
||||||
# wrapper for a nested assert_select
|
|
||||||
#
|
|
||||||
# response.should have_tag("div#form") do
|
|
||||||
# with_tag("input#person_name[name=?]", "person[name]")
|
|
||||||
# end
|
|
||||||
#
|
|
||||||
# see documentation for assert_select at http://api.rubyonrails.org/
|
|
||||||
def with_tag(*args, &block)
|
|
||||||
should have_tag(*args, &block)
|
|
||||||
end
|
|
||||||
|
|
||||||
# wrapper for a nested assert_select with false
|
|
||||||
#
|
|
||||||
# response.should have_tag("div#1") do
|
|
||||||
# without_tag("span", "some text that shouldn't be there")
|
|
||||||
# end
|
|
||||||
#
|
|
||||||
# see documentation for assert_select at http://api.rubyonrails.org/
|
|
||||||
def without_tag(*args, &block)
|
|
||||||
should_not have_tag(*args, &block)
|
|
||||||
end
|
|
||||||
|
|
||||||
# :call-seq:
|
|
||||||
# response.should have_rjs(*args, &block)
|
|
||||||
#
|
|
||||||
# wrapper for assert_select_rjs
|
|
||||||
#
|
|
||||||
# see documentation for assert_select_rjs at http://api.rubyonrails.org/
|
|
||||||
def have_rjs(*args, &block)
|
|
||||||
AssertSelect.new(:assert_select_rjs, self, *args, &block)
|
|
||||||
end
|
|
||||||
|
|
||||||
# :call-seq:
|
|
||||||
# response.should send_email(*args, &block)
|
|
||||||
#
|
|
||||||
# wrapper for assert_select_email
|
|
||||||
#
|
|
||||||
# see documentation for assert_select_email at http://api.rubyonrails.org/
|
|
||||||
def send_email(*args, &block)
|
|
||||||
AssertSelect.new(:assert_select_email, self, *args, &block)
|
|
||||||
end
|
|
||||||
|
|
||||||
# wrapper for assert_select_encoded
|
|
||||||
#
|
|
||||||
# see documentation for assert_select_encoded at http://api.rubyonrails.org/
|
|
||||||
def with_encoded(*args, &block)
|
|
||||||
should AssertSelect.new(:assert_select_encoded, self, *args, &block)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1 +0,0 @@
|
||||||
require 'rspec-rails/assert_select'
|
|
|
@ -1,6 +0,0 @@
|
||||||
--colour
|
|
||||||
--format
|
|
||||||
progress
|
|
||||||
--loadby
|
|
||||||
mtime
|
|
||||||
--reverse
|
|
|
@ -1,16 +0,0 @@
|
||||||
$: << File.dirname(__FILE__) + '/../lib' << File.dirname(__FILE__)
|
|
||||||
require 'rubygems'
|
|
||||||
require 'spec'
|
|
||||||
require 'spec/interop/test'
|
|
||||||
|
|
||||||
require 'active_support'
|
|
||||||
require 'action_controller'
|
|
||||||
require 'action_controller/test_process'
|
|
||||||
require 'action_view'
|
|
||||||
|
|
||||||
require 'rspec-rails/rspec-rails'
|
|
||||||
require 'country_code_select'
|
|
||||||
|
|
||||||
Spec::Runner.configure do |config|
|
|
||||||
config.include Spec::Rails::Matchers
|
|
||||||
end
|
|
20
vendor/plugins/dynamic_form/MIT-LICENSE
vendored
20
vendor/plugins/dynamic_form/MIT-LICENSE
vendored
|
@ -1,20 +0,0 @@
|
||||||
Copyright (c) 2010 David Heinemeier Hansson
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of this software and associated documentation files (the
|
|
||||||
"Software"), to deal in the Software without restriction, including
|
|
||||||
without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be
|
|
||||||
included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
||||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
||||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
||||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
13
vendor/plugins/dynamic_form/README
vendored
13
vendor/plugins/dynamic_form/README
vendored
|
@ -1,13 +0,0 @@
|
||||||
DynamicForm
|
|
||||||
===========
|
|
||||||
|
|
||||||
DynamicForm holds a few helpers method to help you deal with your models, they are:
|
|
||||||
|
|
||||||
* input(record, method, options = {})
|
|
||||||
* form(record, options = {})
|
|
||||||
* error_message_on(object, method, options={})
|
|
||||||
* error_messages_for(record, options={})
|
|
||||||
|
|
||||||
It also adds f.error_messages and f.error_messages_on to your form builders.
|
|
||||||
|
|
||||||
Copyright (c) 2010 David Heinemeier Hansson, released under the MIT license
|
|
10
vendor/plugins/dynamic_form/Rakefile
vendored
10
vendor/plugins/dynamic_form/Rakefile
vendored
|
@ -1,10 +0,0 @@
|
||||||
require 'rake/testtask'
|
|
||||||
|
|
||||||
desc 'Default: run unit tests.'
|
|
||||||
task :default => :test
|
|
||||||
|
|
||||||
desc 'Test the active_model_helper plugin.'
|
|
||||||
Rake::TestTask.new(:test) do |t|
|
|
||||||
t.libs << 'test'
|
|
||||||
t.pattern = 'test/**/*_test.rb'
|
|
||||||
end
|
|
12
vendor/plugins/dynamic_form/dynamic_form.gemspec
vendored
12
vendor/plugins/dynamic_form/dynamic_form.gemspec
vendored
|
@ -1,12 +0,0 @@
|
||||||
Gem::Specification.new do |s|
|
|
||||||
s.name = 'dynamic_form'
|
|
||||||
s.version = '1.0.0'
|
|
||||||
s.author = 'David Heinemeier Hansson'
|
|
||||||
s.email = 'david@loudthinking.com'
|
|
||||||
s.summary = 'Deprecated dynamic form helpers: input, form, error_messages_for, error_messages_on'
|
|
||||||
|
|
||||||
s.add_dependency('rails', '>= 3.0.0')
|
|
||||||
|
|
||||||
s.files = Dir['lib/**/*']
|
|
||||||
s.require_path = 'lib'
|
|
||||||
end
|
|
1
vendor/plugins/dynamic_form/init.rb
vendored
1
vendor/plugins/dynamic_form/init.rb
vendored
|
@ -1 +0,0 @@
|
||||||
require 'dynamic_form'
|
|
|
@ -1,300 +0,0 @@
|
||||||
require 'action_view/helpers'
|
|
||||||
require 'active_support/i18n'
|
|
||||||
require 'active_support/core_ext/enumerable'
|
|
||||||
require 'active_support/core_ext/object/blank'
|
|
||||||
|
|
||||||
module ActionView
|
|
||||||
module Helpers
|
|
||||||
# The Active Record Helper makes it easier to create forms for records kept in instance variables. The most far-reaching is the +form+
|
|
||||||
# method that creates a complete form for all the basic content types of the record (not associations or aggregations, though). This
|
|
||||||
# is a great way of making the record quickly available for editing, but likely to prove lackluster for a complicated real-world form.
|
|
||||||
# In that case, it's better to use the +input+ method and the specialized +form+ methods in link:classes/ActionView/Helpers/FormHelper.html
|
|
||||||
module DynamicForm
|
|
||||||
# Returns a default input tag for the type of object returned by the method. For example, if <tt>@post</tt>
|
|
||||||
# has an attribute +title+ mapped to a +VARCHAR+ column that holds "Hello World":
|
|
||||||
#
|
|
||||||
# input("post", "title")
|
|
||||||
# # => <input id="post_title" name="post[title]" size="30" type="text" value="Hello World" />
|
|
||||||
def input(record_name, method, options = {})
|
|
||||||
InstanceTag.new(record_name, method, self).to_tag(options)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Returns an entire form with all needed input tags for a specified Active Record object. For example, if <tt>@post</tt>
|
|
||||||
# has attributes named +title+ of type +VARCHAR+ and +body+ of type +TEXT+ then
|
|
||||||
#
|
|
||||||
# form("post")
|
|
||||||
#
|
|
||||||
# would yield a form like the following (modulus formatting):
|
|
||||||
#
|
|
||||||
# <form action='/posts/create' method='post'>
|
|
||||||
# <p>
|
|
||||||
# <label for="post_title">Title</label><br />
|
|
||||||
# <input id="post_title" name="post[title]" size="30" type="text" value="Hello World" />
|
|
||||||
# </p>
|
|
||||||
# <p>
|
|
||||||
# <label for="post_body">Body</label><br />
|
|
||||||
# <textarea cols="40" id="post_body" name="post[body]" rows="20"></textarea>
|
|
||||||
# </p>
|
|
||||||
# <input name="commit" type="submit" value="Create" />
|
|
||||||
# </form>
|
|
||||||
#
|
|
||||||
# It's possible to specialize the form builder by using a different action name and by supplying another
|
|
||||||
# block renderer. For example, if <tt>@entry</tt> has an attribute +message+ of type +VARCHAR+ then
|
|
||||||
#
|
|
||||||
# form("entry",
|
|
||||||
# :action => "sign",
|
|
||||||
# :input_block => Proc.new { |record, column|
|
|
||||||
# "#{column.human_name}: #{input(record, column.name)}<br />"
|
|
||||||
# })
|
|
||||||
#
|
|
||||||
# would yield a form like the following (modulus formatting):
|
|
||||||
#
|
|
||||||
# <form action="/entries/sign" method="post">
|
|
||||||
# Message:
|
|
||||||
# <input id="entry_message" name="entry[message]" size="30" type="text" /><br />
|
|
||||||
# <input name="commit" type="submit" value="Sign" />
|
|
||||||
# </form>
|
|
||||||
#
|
|
||||||
# It's also possible to add additional content to the form by giving it a block, such as:
|
|
||||||
#
|
|
||||||
# form("entry", :action => "sign") do |form|
|
|
||||||
# form << content_tag("b", "Department")
|
|
||||||
# form << collection_select("department", "id", @departments, "id", "name")
|
|
||||||
# end
|
|
||||||
#
|
|
||||||
# The following options are available:
|
|
||||||
#
|
|
||||||
# * <tt>:action</tt> - The action used when submitting the form (default: +create+ if a new record, otherwise +update+).
|
|
||||||
# * <tt>:input_block</tt> - Specialize the output using a different block, see above.
|
|
||||||
# * <tt>:method</tt> - The method used when submitting the form (default: +post+).
|
|
||||||
# * <tt>:multipart</tt> - Whether to change the enctype of the form to "multipart/form-data", used when uploading a file (default: +false+).
|
|
||||||
# * <tt>:submit_value</tt> - The text of the submit button (default: "Create" if a new record, otherwise "Update").
|
|
||||||
def form(record_name, options = {})
|
|
||||||
record = instance_variable_get("@#{record_name}")
|
|
||||||
record = convert_to_model(record)
|
|
||||||
|
|
||||||
options = options.symbolize_keys
|
|
||||||
options[:action] ||= record.persisted? ? "update" : "create"
|
|
||||||
action = url_for(:action => options[:action], :id => record)
|
|
||||||
|
|
||||||
submit_value = options[:submit_value] || options[:action].gsub(/[^\w]/, '').capitalize
|
|
||||||
|
|
||||||
contents = form_tag({:action => action}, :method =>(options[:method] || 'post'), :enctype => options[:multipart] ? 'multipart/form-data': nil)
|
|
||||||
contents.safe_concat hidden_field(record_name, :id) if record.persisted?
|
|
||||||
contents.safe_concat all_input_tags(record, record_name, options)
|
|
||||||
yield contents if block_given?
|
|
||||||
contents.safe_concat submit_tag(submit_value)
|
|
||||||
contents.safe_concat('</form>')
|
|
||||||
end
|
|
||||||
|
|
||||||
# Returns a string containing the error message attached to the +method+ on the +object+ if one exists.
|
|
||||||
# This error message is wrapped in a <tt>DIV</tt> tag by default or with <tt>:html_tag</tt> if specified,
|
|
||||||
# which can be extended to include a <tt>:prepend_text</tt> and/or <tt>:append_text</tt> (to properly explain
|
|
||||||
# the error), and a <tt>:css_class</tt> to style it accordingly. +object+ should either be the name of an
|
|
||||||
# instance variable or the actual object. The method can be passed in either as a string or a symbol.
|
|
||||||
# As an example, let's say you have a model <tt>@post</tt> that has an error message on the +title+ attribute:
|
|
||||||
#
|
|
||||||
# <%= error_message_on "post", "title" %>
|
|
||||||
# # => <div class="formError">can't be empty</div>
|
|
||||||
#
|
|
||||||
# <%= error_message_on @post, :title %>
|
|
||||||
# # => <div class="formError">can't be empty</div>
|
|
||||||
#
|
|
||||||
# <%= error_message_on "post", "title",
|
|
||||||
# :prepend_text => "Title simply ",
|
|
||||||
# :append_text => " (or it won't work).",
|
|
||||||
# :html_tag => "span",
|
|
||||||
# :css_class => "inputError" %>
|
|
||||||
# # => <span class="inputError">Title simply can't be empty (or it won't work).</span>
|
|
||||||
def error_message_on(object, method, *args)
|
|
||||||
options = args.extract_options!
|
|
||||||
unless args.empty?
|
|
||||||
ActiveSupport::Deprecation.warn('error_message_on takes an option hash instead of separate ' +
|
|
||||||
'prepend_text, append_text, html_tag, and css_class arguments', caller)
|
|
||||||
|
|
||||||
options[:prepend_text] = args[0] || ''
|
|
||||||
options[:append_text] = args[1] || ''
|
|
||||||
options[:html_tag] = args[2] || 'div'
|
|
||||||
options[:css_class] = args[3] || 'formError'
|
|
||||||
end
|
|
||||||
options.reverse_merge!(:prepend_text => '', :append_text => '', :html_tag => 'div', :css_class => 'formError')
|
|
||||||
|
|
||||||
object = convert_to_model(object)
|
|
||||||
|
|
||||||
if (obj = (object.respond_to?(:errors) ? object : instance_variable_get("@#{object}"))) &&
|
|
||||||
(errors = obj.errors[method]).presence
|
|
||||||
content_tag(options[:html_tag],
|
|
||||||
(options[:prepend_text].html_safe << errors.first).safe_concat(options[:append_text]),
|
|
||||||
:class => options[:css_class]
|
|
||||||
)
|
|
||||||
else
|
|
||||||
''
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Returns a string with a <tt>DIV</tt> containing all of the error messages for the objects located as instance variables by the names
|
|
||||||
# given. If more than one object is specified, the errors for the objects are displayed in the order that the object names are
|
|
||||||
# provided.
|
|
||||||
#
|
|
||||||
# This <tt>DIV</tt> can be tailored by the following options:
|
|
||||||
#
|
|
||||||
# * <tt>:header_tag</tt> - Used for the header of the error div (default: "h2").
|
|
||||||
# * <tt>:id</tt> - The id of the error div (default: "errorExplanation").
|
|
||||||
# * <tt>:class</tt> - The class of the error div (default: "errorExplanation").
|
|
||||||
# * <tt>:object</tt> - The object (or array of objects) for which to display errors,
|
|
||||||
# if you need to escape the instance variable convention.
|
|
||||||
# * <tt>:object_name</tt> - The object name to use in the header, or any text that you prefer.
|
|
||||||
# If <tt>:object_name</tt> is not set, the name of the first object will be used.
|
|
||||||
# * <tt>:header_message</tt> - The message in the header of the error div. Pass +nil+
|
|
||||||
# or an empty string to avoid the header message altogether. (Default: "X errors
|
|
||||||
# prohibited this object from being saved").
|
|
||||||
# * <tt>:message</tt> - The explanation message after the header message and before
|
|
||||||
# the error list. Pass +nil+ or an empty string to avoid the explanation message
|
|
||||||
# altogether. (Default: "There were problems with the following fields:").
|
|
||||||
#
|
|
||||||
# To specify the display for one object, you simply provide its name as a parameter.
|
|
||||||
# For example, for the <tt>@user</tt> model:
|
|
||||||
#
|
|
||||||
# error_messages_for 'user'
|
|
||||||
#
|
|
||||||
# You can also supply an object:
|
|
||||||
#
|
|
||||||
# error_messages_for @user
|
|
||||||
#
|
|
||||||
# This will use the last part of the model name in the presentation. For instance, if
|
|
||||||
# this is a MyKlass::User object, this will use "user" as the name in the String. This
|
|
||||||
# is taken from MyKlass::User.model_name.human, which can be overridden.
|
|
||||||
#
|
|
||||||
# To specify more than one object, you simply list them; optionally, you can add an extra <tt>:object_name</tt> parameter, which
|
|
||||||
# will be the name used in the header message:
|
|
||||||
#
|
|
||||||
# error_messages_for 'user_common', 'user', :object_name => 'user'
|
|
||||||
#
|
|
||||||
# You can also use a number of objects, which will have the same naming semantics
|
|
||||||
# as a single object.
|
|
||||||
#
|
|
||||||
# error_messages_for @user, @post
|
|
||||||
#
|
|
||||||
# If the objects cannot be located as instance variables, you can add an extra <tt>:object</tt> parameter which gives the actual
|
|
||||||
# object (or array of objects to use):
|
|
||||||
#
|
|
||||||
# error_messages_for 'user', :object => @question.user
|
|
||||||
#
|
|
||||||
# NOTE: This is a pre-packaged presentation of the errors with embedded strings and a certain HTML structure. If what
|
|
||||||
# you need is significantly different from the default presentation, it makes plenty of sense to access the <tt>object.errors</tt>
|
|
||||||
# instance yourself and set it up. View the source of this method to see how easy it is.
|
|
||||||
def error_messages_for(*params)
|
|
||||||
options = params.extract_options!.symbolize_keys
|
|
||||||
|
|
||||||
objects = Array.wrap(options.delete(:object) || params).map do |object|
|
|
||||||
object = instance_variable_get("@#{object}") unless object.respond_to?(:to_model)
|
|
||||||
object = convert_to_model(object)
|
|
||||||
|
|
||||||
if object.class.respond_to?(:model_name)
|
|
||||||
options[:object_name] ||= object.class.model_name.human.downcase
|
|
||||||
end
|
|
||||||
|
|
||||||
object
|
|
||||||
end
|
|
||||||
|
|
||||||
objects.compact!
|
|
||||||
count = objects.inject(0) {|sum, object| sum + object.errors.count }
|
|
||||||
|
|
||||||
unless count.zero?
|
|
||||||
html = {}
|
|
||||||
[:id, :class].each do |key|
|
|
||||||
if options.include?(key)
|
|
||||||
value = options[key]
|
|
||||||
html[key] = value unless value.blank?
|
|
||||||
else
|
|
||||||
html[key] = 'errorExplanation'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
options[:object_name] ||= params.first
|
|
||||||
|
|
||||||
I18n.with_options :locale => options[:locale], :scope => [:errors, :template] do |locale|
|
|
||||||
header_message = if options.include?(:header_message)
|
|
||||||
options[:header_message]
|
|
||||||
else
|
|
||||||
locale.t :header, :count => count, :model => options[:object_name].to_s.gsub('_', ' ')
|
|
||||||
end
|
|
||||||
|
|
||||||
message = options.include?(:message) ? options[:message] : locale.t(:body)
|
|
||||||
|
|
||||||
error_messages = objects.sum do |object|
|
|
||||||
object.errors.full_messages.map do |msg|
|
|
||||||
content_tag(:li, msg)
|
|
||||||
end
|
|
||||||
end.join.html_safe
|
|
||||||
|
|
||||||
contents = ''
|
|
||||||
contents << content_tag(options[:header_tag] || :h2, header_message) unless header_message.blank?
|
|
||||||
contents << content_tag(:p, message) unless message.blank?
|
|
||||||
contents << content_tag(:ul, error_messages)
|
|
||||||
|
|
||||||
content_tag(:div, contents.html_safe, html)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
''
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def all_input_tags(record, record_name, options)
|
|
||||||
input_block = options[:input_block] || default_input_block
|
|
||||||
record.class.content_columns.collect{ |column| input_block.call(record_name, column) }.join("\n")
|
|
||||||
end
|
|
||||||
|
|
||||||
def default_input_block
|
|
||||||
Proc.new { |record, column| %(<p><label for="#{record}_#{column.name}">#{column.human_name}</label><br />#{input(record, column.name)}</p>) }
|
|
||||||
end
|
|
||||||
|
|
||||||
module InstanceTagMethods
|
|
||||||
def to_tag(options = {})
|
|
||||||
case column_type
|
|
||||||
when :string
|
|
||||||
field_type = @method_name.include?("password") ? "password" : "text"
|
|
||||||
to_input_field_tag(field_type, options)
|
|
||||||
when :text
|
|
||||||
to_text_area_tag(options)
|
|
||||||
when :integer, :float, :decimal
|
|
||||||
to_input_field_tag("text", options)
|
|
||||||
when :date
|
|
||||||
to_date_select_tag(options)
|
|
||||||
when :datetime, :timestamp
|
|
||||||
to_datetime_select_tag(options)
|
|
||||||
when :time
|
|
||||||
to_time_select_tag(options)
|
|
||||||
when :boolean
|
|
||||||
to_boolean_select_tag(options)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def column_type
|
|
||||||
object.send(:column_for_attribute, @method_name).type
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
module FormBuilderMethods
|
|
||||||
def error_message_on(method, *args)
|
|
||||||
@template.error_message_on(@object || @object_name, method, *args)
|
|
||||||
end
|
|
||||||
|
|
||||||
def error_messages(options = {})
|
|
||||||
@template.error_messages_for(@object_name, objectify_options(options))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class InstanceTag
|
|
||||||
include DynamicForm::InstanceTagMethods
|
|
||||||
end
|
|
||||||
|
|
||||||
class FormBuilder
|
|
||||||
include DynamicForm::FormBuilderMethods
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
I18n.load_path << File.expand_path("../../locale/en.yml", __FILE__)
|
|
|
@ -1,8 +0,0 @@
|
||||||
en:
|
|
||||||
errors:
|
|
||||||
template:
|
|
||||||
header:
|
|
||||||
one: "1 error prohibited this %{model} from being saved"
|
|
||||||
other: "%{count} errors prohibited this %{model} from being saved"
|
|
||||||
# The variable :count is also available
|
|
||||||
body: "There were problems with the following fields:"
|
|
|
@ -1,5 +0,0 @@
|
||||||
require 'action_view/helpers/dynamic_form'
|
|
||||||
|
|
||||||
class ActionView::Base
|
|
||||||
include DynamicForm
|
|
||||||
end
|
|
|
@ -1,42 +0,0 @@
|
||||||
require 'test_helper'
|
|
||||||
|
|
||||||
class DynamicFormI18nTest < Test::Unit::TestCase
|
|
||||||
include ActionView::Context
|
|
||||||
include ActionView::Helpers::DynamicForm
|
|
||||||
|
|
||||||
attr_reader :request
|
|
||||||
|
|
||||||
def setup
|
|
||||||
@object = stub :errors => stub(:count => 1, :full_messages => ['full_messages'])
|
|
||||||
@object.stubs :to_model => @object
|
|
||||||
@object.stubs :class => stub(:model_name => stub(:human => ""))
|
|
||||||
|
|
||||||
@object_name = 'book_seller'
|
|
||||||
@object_name_without_underscore = 'book seller'
|
|
||||||
|
|
||||||
stubs(:content_tag).returns 'content_tag'
|
|
||||||
|
|
||||||
I18n.stubs(:t).with(:'header', :locale => 'en', :scope => [:errors, :template], :count => 1, :model => '').returns "1 error prohibited this from being saved"
|
|
||||||
I18n.stubs(:t).with(:'body', :locale => 'en', :scope => [:errors, :template]).returns 'There were problems with the following fields:'
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_error_messages_for_given_a_header_option_it_does_not_translate_header_message
|
|
||||||
I18n.expects(:t).with(:'header', :locale => 'en', :scope => [:errors, :template], :count => 1, :model => '').never
|
|
||||||
error_messages_for(:object => @object, :header_message => 'header message', :locale => 'en')
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_error_messages_for_given_no_header_option_it_translates_header_message
|
|
||||||
I18n.expects(:t).with(:'header', :locale => 'en', :scope => [:errors, :template], :count => 1, :model => '').returns 'header message'
|
|
||||||
error_messages_for(:object => @object, :locale => 'en')
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_error_messages_for_given_a_message_option_it_does_not_translate_message
|
|
||||||
I18n.expects(:t).with(:'body', :locale => 'en', :scope => [:errors, :template]).never
|
|
||||||
error_messages_for(:object => @object, :message => 'message', :locale => 'en')
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_error_messages_for_given_no_message_option_it_translates_message
|
|
||||||
I18n.expects(:t).with(:'body', :locale => 'en', :scope => [:errors, :template]).returns 'There were problems with the following fields:'
|
|
||||||
error_messages_for(:object => @object, :locale => 'en')
|
|
||||||
end
|
|
||||||
end
|
|
File diff suppressed because one or more lines are too long
|
@ -1,9 +0,0 @@
|
||||||
require 'rubygems'
|
|
||||||
require 'test/unit'
|
|
||||||
require 'active_support'
|
|
||||||
require 'active_support/core_ext'
|
|
||||||
require 'action_view'
|
|
||||||
require 'action_controller'
|
|
||||||
require 'action_controller/test_case'
|
|
||||||
require 'active_model'
|
|
||||||
require 'action_view/helpers/dynamic_form'
|
|
Loading…
Reference in a new issue