aboutsummaryrefslogtreecommitdiffstats
path: root/config/environment.rb
blob: d79f5253986e62b9db1fbd9e35e8ee52b79d1b28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# Be sure to restart your web server when you modify this file.


# Uncomment below to force Rails into production mode when 
# you don't control web/app server and can't set it the proper way
# ENV['RAILS_ENV'] ||= 'production'

# Specifies gem version of Rails to use when vendor/rails is not present
RAILS_GEM_VERSION = '2.0.2' unless defined? RAILS_GEM_VERSION

# Bootstrap the Rails environment, frameworks, and default configuration
require File.join(File.dirname(__FILE__), 'boot')

# MySociety specific helper functions
$:.push(File.join(File.dirname(__FILE__), '../../rblib'))

load "validate.rb"
load "config.rb"
load "format.rb"

Rails::Initializer.run do |config|
  # Settings in config/environments/* take precedence over those specified here
  
  # Skip frameworks you're not going to use (only works if using vendor/rails)
  # config.frameworks -= [ :action_web_service, :action_mailer ]

  # Only load the plugins named here, by default all plugins in vendor/plugins are loaded
  # config.plugins = %W( exception_notification ssl_requirement )

  # Add additional load paths for your own custom dirs
  # config.load_paths += %W( #{RAILS_ROOT}/extras )

  # Force all environments to use the same logger level 
  # (by default production uses :info, the others :debug)
  # config.log_level = :debug

  # Use the database for sessions instead of the file system
  # (create the session table with 'rake db:sessions:create')
  config.action_controller.session_store = :active_record_store

  # Use SQL instead of Active Record's schema dumper when creating the test database.
  # This is necessary if your schema can't be completely dumped by the schema dumper, 
  # like if you have constraints or database-specific column types
  # config.active_record.schema_format = :sql

  # Activate observers that should always be running
  # config.active_record.observers = :cacher, :garbage_collector

  # Make Active Record use UTC-base instead of local time
  config.active_record.default_timezone = :utc
  
  # See Rails::Configuration for more options
  
  # Load intial mySociety config
  MySociety::Config.set_file(File.join(config.root_path, 'config', 'general'), true)
  MySociety::Config.load_default
end

# Add new inflection rules using the following format 
# (all these examples are active by default):
# Inflector.inflections do |inflect|
#   inflect.plural /^(ox)$/i, '\1en'
#   inflect.singular /^(ox)en/i, '\1'
#   inflect.irregular 'person', 'people'
#   inflect.uncountable %w( fish sheep )
# end

# Add new mime types for use in respond_to blocks:
# Mime::Type.register "text/richtext", :rtf
# Mime::Type.register "application/x-mobile", :mobile

# Validation error messages
ActiveRecord::Errors.default_error_messages[:blank] = "must be filled in"
# Monkeypatch! Use SPAN instead of DIV. See http://dev.rubyonrails.org/ticket/2210
ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance|  %(<span class="fieldWithErrors">#{html_tag}</span>)}

# Include your application configuration below

# Monkeypatch! Output HTML 4.0 compliant code, using method described in this
# ticket: http://dev.rubyonrails.org/ticket/6009
ActionView::Helpers::TagHelper.module_eval do
  def tag(name, options = nil, open = false, escape = true)
    "<#{name}#{tag_options(options, escape) if options}" + (open ? ">" : ">")
  end
end

# Domain for URLs (so can work for scripts, not just web pages)
ActionController::UrlWriter.default_url_options[:host] = MySociety::Config.get("DOMAIN", 'localhost:3000')

# Monkeypatch! Set envelope from in ActionMailer. Code mostly taken from this
# Rails patch, with addition of using mail.from for sendmail if sender not set
# (the patch does that only for SMTP, when it clearly should consistently do it
# for both)
#   http://dev.rubyonrails.org/attachment/ticket/7697/action_mailer_base_sender.diff
# Which is part of this ticket:
#   http://dev.rubyonrails.org/ticket/7697
module ActionMailer
    class Base
        def perform_delivery_smtp(mail)
            destinations = mail.destinations
            sender = mail.sender(nil) || mail.from 
            mail.ready_to_send

            Net::SMTP.start(smtp_settings[:address], smtp_settings[:port], smtp_settings[:domain],
                smtp_settings[:user_name], smtp_settings[:password], smtp_settings[:authentication]) do |smtp|
                smtp.sendmail(mail.encoded, sender, destinations)
            end
        end

        def perform_delivery_sendmail(mail)
            sender = mail.sender(nil) || mail.from 

            arguments = sendmail_settings[:arguments].dup 
            arguments += " -f \"#{sender}\""
            IO.popen("#{sendmail_settings[:location]} #{arguments}","w+") do |sm| 
                sm.print(mail.encoded.gsub(/\r/, ''))
                sm.flush
            end
        end
    end
end

# Monkeypatch! Method to remove individual error messages from an ActiveRecord.
module ActiveRecord
    class Errors
        def delete(key)
            @errors.delete(key)
        end
    end
end

# Monkeypatch! Make it so :if really turns off all access to solr on saving.
module ActsAsSolr
    module InstanceMethods
       # saves to the Solr index
        def solr_save
          return true unless configuration[:if]
          if evaluate_condition(configuration[:if], self)
            logger.debug "solr_save: #{self.class.name} : #{record_id(self)}"
            solr_add to_solr_doc
            solr_commit if configuration[:auto_commit]
            true
          else
            # XXX commented out - so when new requests arrive no connection is
            # made to solr, in case it is broken.
            # solr_destroy
          end
        end
    end
end