action_control 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +34 -0
  4. data/lib/action_control.rb +12 -0
  5. data/lib/action_control/action_controller/base.rb +8 -0
  6. data/lib/action_control/controller_methods.rb +69 -0
  7. data/lib/action_control/errors.rb +29 -0
  8. data/lib/action_control/version.rb +3 -0
  9. data/lib/tasks/action_control_tasks.rake +4 -0
  10. data/test/action_control_test.rb +43 -0
  11. data/test/dummy/README.rdoc +28 -0
  12. data/test/dummy/Rakefile +6 -0
  13. data/test/dummy/app/assets/javascripts/application.js +13 -0
  14. data/test/dummy/app/assets/javascripts/welcome.js +2 -0
  15. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  16. data/test/dummy/app/assets/stylesheets/welcome.css +4 -0
  17. data/test/dummy/app/controllers/application_controller.rb +7 -0
  18. data/test/dummy/app/controllers/welcome_controller.rb +12 -0
  19. data/test/dummy/app/helpers/application_helper.rb +2 -0
  20. data/test/dummy/app/helpers/welcome_helper.rb +2 -0
  21. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  22. data/test/dummy/app/views/welcome/index.html.erb +2 -0
  23. data/test/dummy/app/views/welcome/other.html.erb +1 -0
  24. data/test/dummy/bin/bundle +3 -0
  25. data/test/dummy/bin/rails +4 -0
  26. data/test/dummy/bin/rake +4 -0
  27. data/test/dummy/bin/setup +29 -0
  28. data/test/dummy/config.ru +4 -0
  29. data/test/dummy/config/application.rb +29 -0
  30. data/test/dummy/config/boot.rb +5 -0
  31. data/test/dummy/config/environment.rb +5 -0
  32. data/test/dummy/config/environments/development.rb +38 -0
  33. data/test/dummy/config/environments/production.rb +76 -0
  34. data/test/dummy/config/environments/test.rb +42 -0
  35. data/test/dummy/config/initializers/assets.rb +11 -0
  36. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  37. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  38. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  39. data/test/dummy/config/initializers/inflections.rb +16 -0
  40. data/test/dummy/config/initializers/mime_types.rb +4 -0
  41. data/test/dummy/config/initializers/session_store.rb +3 -0
  42. data/test/dummy/config/initializers/wrap_parameters.rb +9 -0
  43. data/test/dummy/config/locales/en.yml +23 -0
  44. data/test/dummy/config/routes.rb +4 -0
  45. data/test/dummy/config/secrets.yml +22 -0
  46. data/test/dummy/log/development.log +545 -0
  47. data/test/dummy/log/test.log +77 -0
  48. data/test/dummy/public/404.html +67 -0
  49. data/test/dummy/public/422.html +67 -0
  50. data/test/dummy/public/500.html +66 -0
  51. data/test/dummy/public/favicon.ico +0 -0
  52. data/test/dummy/test/controllers/welcome_controller_test.rb +9 -0
  53. data/test/dummy/tmp/cache/sprockets/v3.0/0l0dzRDrwh8jbgwNcdqbI0eReG4vwBstqHkgAwNKVMI.cache +0 -0
  54. data/test/dummy/tmp/cache/sprockets/v3.0/3JKkanNb216zALB8-924T4VDK6tJjkEFV-Bwgbj9B14.cache +1 -0
  55. data/test/dummy/tmp/cache/sprockets/v3.0/3ggZ0W-Ys5SQS26u_NFEJe14n9nBRhdtzY3kcBWtpu8.cache +1 -0
  56. data/test/dummy/tmp/cache/sprockets/v3.0/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +2 -0
  57. data/test/dummy/tmp/cache/sprockets/v3.0/9QE06Hoy-nitPf5xGEddC6zVi0kNWX_1DxmrNe0T2qM.cache +1 -0
  58. data/test/dummy/tmp/cache/sprockets/v3.0/CqS8f-adc43tZVUYwbeYNlaAp68VAND9gSz75EJ_qIk.cache +2 -0
  59. data/test/dummy/tmp/cache/sprockets/v3.0/CuqjeS-2eHHBlkxRvn8u1KzXJexpD4avFhe5otAxzKI.cache +0 -0
  60. data/test/dummy/tmp/cache/sprockets/v3.0/DSOLSc6A5RVSmvM415eEWAWG_AgOvZcLZOXQjsXyWQA.cache +2 -0
  61. data/test/dummy/tmp/cache/sprockets/v3.0/E1OA9yJbW6lMNqFjch4O_Nm972yonIiNtGF4nEgeMgI.cache +0 -0
  62. data/test/dummy/tmp/cache/sprockets/v3.0/EEplIoXGshtrgJgFxcH1B6LgetWrS_RuhCYsTuqiO6s.cache +2 -0
  63. data/test/dummy/tmp/cache/sprockets/v3.0/GFBoWLa7w-AyBQvckeZ0t9KOOannb3LF2nwW6y6YgF8.cache +0 -0
  64. data/test/dummy/tmp/cache/sprockets/v3.0/IaQzQGXFQfBjkrxhDnuTvASIp7dzp5kCcg8w-Csu_IY.cache +1 -0
  65. data/test/dummy/tmp/cache/sprockets/v3.0/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +2 -0
  66. data/test/dummy/tmp/cache/sprockets/v3.0/ROPBCmx5V50szmtJZQ1KcVsTqCQelEo0PTleLKnAFXs.cache +1 -0
  67. data/test/dummy/tmp/cache/sprockets/v3.0/UKGBReGXsgsCgfeO31yA5_k496KeznXmPBK5CVgIIqE.cache +0 -0
  68. data/test/dummy/tmp/cache/sprockets/v3.0/Vb2Y-hLNYLDStluCCCj5SSZiiOLy2PO8hcPoz6kT75A.cache +1 -0
  69. data/test/dummy/tmp/cache/sprockets/v3.0/XrVJilAWIg8PWr-zSv8YW0Y-V-myv-Iht2JKCan_ym0.cache +1 -0
  70. data/test/dummy/tmp/cache/sprockets/v3.0/YfxKw2MPxJHBrxMEABBUhvLuuEDSKGrN06FK5Sh3uB4.cache +1 -0
  71. data/test/dummy/tmp/cache/sprockets/v3.0/YzLwjdol-fillzMShjbe2GgKGueXAc1nHbFTKSBo7-Q.cache +1 -0
  72. data/test/dummy/tmp/cache/sprockets/v3.0/_D1t1IyVlDXU4ylfoagfIPFxF1mPsX8ak2RTaDQPUHg.cache +2 -0
  73. data/test/dummy/tmp/cache/sprockets/v3.0/_VRRH7j3ZMxMxKW0Sg9TTTD5jlZh7oqWpZDsuNWCKYM.cache +0 -0
  74. data/test/dummy/tmp/cache/sprockets/v3.0/cJMggEGypPzKwx81E8ea4CvAVxgpobH-q4uvErBv_kg.cache +1 -0
  75. data/test/dummy/tmp/cache/sprockets/v3.0/gZp3uXMHuYQC4hzCr7bQfetKNdJAtbQmg3so2KpW1Dw.cache +2 -0
  76. data/test/dummy/tmp/cache/sprockets/v3.0/hQTnMC8F5eeLeiYssSZYLCGx79KLgUj18fUlyt7-HXs.cache +0 -0
  77. data/test/dummy/tmp/cache/sprockets/v3.0/hZi1k6tpxxCGYxRe7zY74ItcOI8gZrREOpGuA8JSpGg.cache +2 -0
  78. data/test/dummy/tmp/cache/sprockets/v3.0/kRZh-Br9E6KK0oj2H8xkk_a4sOotGQ3V4x4i1dsN8l8.cache +1 -0
  79. data/test/dummy/tmp/cache/sprockets/v3.0/o6BRWItl0A8KUtdzj8CodRWOSdJBZEZoUwNZWkBIvKE.cache +0 -0
  80. data/test/dummy/tmp/cache/sprockets/v3.0/pEhaat2KBd5SrT7szC_8R1_6hK17FTpvoRFkmCRSD3M.cache +2 -0
  81. data/test/dummy/tmp/cache/sprockets/v3.0/pNLwute95D3t-czgrFvKNRpZACiCXca-o3A806hAIBU.cache +1 -0
  82. data/test/dummy/tmp/cache/sprockets/v3.0/szxi6adMfobVBR3v1xjK3BuVOBK7TW6EONLC0uBTtIs.cache +1 -0
  83. data/test/dummy/tmp/pids/server.pid +1 -0
  84. data/test/test_helper.rb +19 -0
  85. metadata +217 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8c589bc119365c05165bad55d5318de1e8765805
4
+ data.tar.gz: 3fd73176a397cafee1a883db779506877d652564
5
+ SHA512:
6
+ metadata.gz: 02621619e60135eaeaeff8f2dbd05c126c4bce890a73658c4e99ac463a12fde75e42b6390c39f59bb64e9cdea6f513ad6744acae11439d6bbffc1d86dabb773c
7
+ data.tar.gz: b9c5c2719ba6dffa33b4ca6700d98618c59898246fa7c8210b6deb0b3ffc5ac340dc0aff92659f63f20dd29f81109e4b2ab9232a7f465a311991fbcdc6f6bbdb
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2016 Tobias Feistmantl
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,34 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'ActionControl'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+
18
+
19
+
20
+
21
+
22
+ Bundler::GemHelper.install_tasks
23
+
24
+ require 'rake/testtask'
25
+
26
+ Rake::TestTask.new(:test) do |t|
27
+ t.libs << 'lib'
28
+ t.libs << 'test'
29
+ t.pattern = 'test/**/*_test.rb'
30
+ t.verbose = false
31
+ end
32
+
33
+
34
+ task default: :test
@@ -0,0 +1,12 @@
1
+ require 'action_control/controller_methods'
2
+ require 'action_control/errors'
3
+ require 'action_control/action_controller/base'
4
+
5
+ module ActionControl
6
+ # Authorizes the user.
7
+ def authorize!
8
+ raise ActionControl::AuthorizationNotPerformedError unless defined?(authorized?)
9
+
10
+ raise ActionControl::NotAuthorizedError unless send(:authorized?) == true
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ # @author Tobias Feistmantl
2
+ #
3
+ # Add Action Control to
4
+ # ActionController::Base
5
+ # automatically.
6
+ ActionController::Base.class_eval do
7
+ include ActionControl
8
+ end
@@ -0,0 +1,69 @@
1
+ # @author Tobias Feistmantl
2
+ #
3
+ # Helper methods for your controller
4
+ # to identify RESTful actions.
5
+ module ActionControl
6
+ # @return [Boolean]
7
+ # True if the called action
8
+ # is a only-read action.
9
+ def read_action?
10
+ action_name == "index" ||
11
+ action_name == "show"
12
+ end
13
+
14
+ # @return [Boolean]
15
+ # True if the called action
16
+ # is a write action.
17
+ def write_action?
18
+ action_name == "new" ||
19
+ action_name == "create" ||
20
+ action_name == "edit" ||
21
+ action_name == "update" ||
22
+ action_name == "destroy"
23
+ end
24
+
25
+ # @return [Boolean]
26
+ # True if the called action
27
+ # is a change action.
28
+ def change_action?
29
+ action_name == "edit" ||
30
+ action_name == "update" ||
31
+ action_name == "destroy"
32
+ end
33
+
34
+ # @note
35
+ # Also true for the pseudo
36
+ # update action `new`.
37
+ #
38
+ # @note
39
+ # Only true for create methods
40
+ # such as new and create.
41
+ #
42
+ # @return [Boolean]
43
+ # True if the called action
44
+ # is a create action.
45
+ def create_action?
46
+ action_name == "new" ||
47
+ action_name == "create"
48
+ end
49
+
50
+ # @note
51
+ # Also true for the pseudo
52
+ # update action `edit`.
53
+ #
54
+ # @return [Boolean]
55
+ # True if the called action
56
+ # is a update action.
57
+ def update_action?
58
+ action_name == "edit" ||
59
+ action_name == "update"
60
+ end
61
+
62
+ # @return [Boolean]
63
+ # True if it's a destroy action.
64
+ def destroy_action?
65
+ action_name == "destroy"
66
+ end
67
+
68
+ alias delete_action? destroy_action?
69
+ end
@@ -0,0 +1,29 @@
1
+ # @author Tobias Feistmantl
2
+ module ActionControl
3
+ # Generic authorization error.
4
+ # Other, more specific, errors inherit from this one.
5
+ #
6
+ # @raise [AuthorizationError]
7
+ # if something generic is happening.
8
+ class AuthorizationError < StandardError
9
+ end
10
+
11
+ # Error for controllers in which authorization isn't handled.
12
+ #
13
+ # @raise [AuthorizationNotPerformedError]
14
+ # if the #authorized? method isn't defined
15
+ # in the controller class.
16
+ class AuthorizationNotPerformedError < AuthorizationError
17
+ end
18
+
19
+ # Error if user unauthorized.
20
+ #
21
+ # @raise [NotAuthorizedError]
22
+ # if authorized? isn't returning true.
23
+ #
24
+ # @note
25
+ # Should always be called at the end
26
+ # of the #authorize! method.
27
+ class NotAuthorizedError < AuthorizationError
28
+ end
29
+ end
@@ -0,0 +1,3 @@
1
+ module ActionControl
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :action_control do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,43 @@
1
+ require 'test_helper'
2
+
3
+ class ActionControlTest < ActiveSupport::TestCase
4
+ def reinstatiate
5
+ @authorizable = Class.new do
6
+ include ActionControl
7
+ end
8
+ end
9
+
10
+ setup do
11
+ reinstatiate
12
+ end
13
+
14
+ test 'should raise `AuthorizationNotPerformedError` if #authorized? is not defined' do
15
+ assert_raise ActionControl::AuthorizationNotPerformedError do
16
+ @authorizable.new.authorize!
17
+ end
18
+ end
19
+
20
+ test 'should raise `NotAuthorizedError` if #authorized? not returns true' do
21
+ @authorizable.class_eval do
22
+ define_method :authorized? do
23
+ false
24
+ end
25
+ end
26
+
27
+ assert_raise ActionControl::NotAuthorizedError do
28
+ @authorizable.new.authorize!
29
+ end
30
+ end
31
+
32
+ test 'should raise no exception if #authorized? returns true' do
33
+ @authorizable.class_eval do
34
+ define_method :authorized? do
35
+ true
36
+ end
37
+ end
38
+
39
+ assert_nothing_raised do
40
+ @authorizable.new.authorize!
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,28 @@
1
+ == README
2
+
3
+ This README would normally document whatever steps are necessary to get the
4
+ application up and running.
5
+
6
+ Things you may want to cover:
7
+
8
+ * Ruby version
9
+
10
+ * System dependencies
11
+
12
+ * Configuration
13
+
14
+ * Database creation
15
+
16
+ * Database initialization
17
+
18
+ * How to run the test suite
19
+
20
+ * Services (job queues, cache servers, search engines, etc.)
21
+
22
+ * Deployment instructions
23
+
24
+ * ...
25
+
26
+
27
+ Please feel free to use a different markup language if you do not plan to run
28
+ <tt>rake doc:app</tt>.
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('../config/application', __FILE__)
5
+
6
+ Rails.application.load_tasks
@@ -0,0 +1,13 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require_tree .
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any styles
10
+ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11
+ * file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,7 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery with: :exception
3
+
4
+ before_action :authorize!
5
+
6
+ rescue_from ActionControl::NotAuthorizedError, with: -> { render html: 'You are not authorized!' }
7
+ end
@@ -0,0 +1,12 @@
1
+ class WelcomeController < ApplicationController
2
+ def index
3
+ end
4
+
5
+ def other
6
+ end
7
+
8
+ def authorized?
9
+ return true if action_name == 'index'
10
+ return false if action_name == 'other'
11
+ end
12
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module WelcomeHelper
2
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Dummy</title>
5
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
6
+ <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,2 @@
1
+ <h1>Welcome#index</h1>
2
+ <p>Find me in app/views/welcome/index.html.erb</p>
@@ -0,0 +1 @@
1
+ If you see this, something isn't working correctly
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
3
+ load Gem.bin_path('bundler', 'bundle')
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
3
+ require_relative '../config/boot'
4
+ require 'rails/commands'
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative '../config/boot'
3
+ require 'rake'
4
+ Rake.application.run
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+
4
+ # path to your application root.
5
+ APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
6
+
7
+ Dir.chdir APP_ROOT do
8
+ # This script is a starting point to setup your application.
9
+ # Add necessary setup steps to this file:
10
+
11
+ puts "== Installing dependencies =="
12
+ system "gem install bundler --conservative"
13
+ system "bundle check || bundle install"
14
+
15
+ # puts "\n== Copying sample files =="
16
+ # unless File.exist?("config/database.yml")
17
+ # system "cp config/database.yml.sample config/database.yml"
18
+ # end
19
+
20
+ puts "\n== Preparing database =="
21
+ system "bin/rake db:setup"
22
+
23
+ puts "\n== Removing old logs and tempfiles =="
24
+ system "rm -f log/*"
25
+ system "rm -rf tmp/cache"
26
+
27
+ puts "\n== Restarting application server =="
28
+ system "touch tmp/restart.txt"
29
+ end
@@ -0,0 +1,4 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require ::File.expand_path('../config/environment', __FILE__)
4
+ run Rails.application
@@ -0,0 +1,29 @@
1
+ require File.expand_path('../boot', __FILE__)
2
+
3
+ # Pick the frameworks you want:
4
+ # require "active_record/railtie"
5
+ require "action_controller/railtie"
6
+ require "action_mailer/railtie"
7
+ require "action_view/railtie"
8
+ require "sprockets/railtie"
9
+ require "rails/test_unit/railtie"
10
+
11
+ Bundler.require(*Rails.groups)
12
+ require "action_control"
13
+
14
+ module Dummy
15
+ class Application < Rails::Application
16
+ # Settings in config/environments/* take precedence over those specified here.
17
+ # Application configuration should go into files in config/initializers
18
+ # -- all .rb files in that directory are automatically loaded.
19
+
20
+ # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
21
+ # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
22
+ # config.time_zone = 'Central Time (US & Canada)'
23
+
24
+ # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
25
+ # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
26
+ # config.i18n.default_locale = :de
27
+ end
28
+ end
29
+