Commit 51c1d1bb9a91055f9298d88ec59833e94f8c23e6
Exists in
master
and in
1 other branch
Merge branch 'master' into refactor/problem_controller
Showing
13 changed files
with
133 additions
and
25 deletions
Show diff stats
CHANGELOG.md
@@ -16,6 +16,9 @@ | @@ -16,6 +16,9 @@ | ||
16 | - [#343][] Fix the ical generation. ([@shingara][]) | 16 | - [#343][] Fix the ical generation. ([@shingara][]) |
17 | - [#503][] Fix issue on where the service_url choose never use. ([@nfedyashev][]) | 17 | - [#503][] Fix issue on where the service_url choose never use. ([@nfedyashev][]) |
18 | - [#506][] Fix issue on bitbucket issue tracker creation failed. ([@Gonzih][]) | 18 | - [#506][] Fix issue on bitbucket issue tracker creation failed. ([@Gonzih][]) |
19 | +- [#514][] Add CDATA in xml return by Javascript. ([@mildavw][]) | ||
20 | +- [#517][] Javascript escape path from javascript Notifier. ([@roryf][]) | ||
21 | +- [#518][] Fix issue when you try launch task errbit:db:update_update_problem_attrs. ([@shingara][]) | ||
19 | 22 | ||
20 | ## 0.1.0 - 2013-05-29 | 23 | ## 0.1.0 - 2013-05-29 |
21 | 24 | ||
@@ -72,6 +75,8 @@ | @@ -72,6 +75,8 @@ | ||
72 | [#503]: https://github.com/errbit/errbit/issues/503 | 75 | [#503]: https://github.com/errbit/errbit/issues/503 |
73 | [#506]: https://github.com/errbit/errbit/issues/506 | 76 | [#506]: https://github.com/errbit/errbit/issues/506 |
74 | [#508]: https://github.com/errbit/errbit/issues/508 | 77 | [#508]: https://github.com/errbit/errbit/issues/508 |
78 | +[#514]: https://github.com/errbit/errbit/issues/514 | ||
79 | +[#517]: https://github.com/errbit/errbit/issues/517 | ||
75 | 80 | ||
76 | <!-- Contributor on Errbit Thanks to all of them --> | 81 | <!-- Contributor on Errbit Thanks to all of them --> |
77 | 82 | ||
@@ -90,3 +95,5 @@ | @@ -90,3 +95,5 @@ | ||
90 | [@parallel588]: https://github.com/parallel588 | 95 | [@parallel588]: https://github.com/parallel588 |
91 | [@Gonzih]: https://github.com/Gonzih | 96 | [@Gonzih]: https://github.com/Gonzih |
92 | [@boblail]: https://github.com/boblail | 97 | [@boblail]: https://github.com/boblail |
98 | +[@roryf]: https://github.com/roryf | ||
99 | +[@mildavw]: https://github.com/mildavw |
Gemfile
@@ -17,7 +17,7 @@ gem 'strong_parameters' | @@ -17,7 +17,7 @@ gem 'strong_parameters' | ||
17 | gem 'SystemTimer', :platform => :ruby_18 | 17 | gem 'SystemTimer', :platform => :ruby_18 |
18 | gem 'actionmailer_inline_css' | 18 | gem 'actionmailer_inline_css' |
19 | gem 'kaminari', '>= 0.14.1' | 19 | gem 'kaminari', '>= 0.14.1' |
20 | -gem 'rack-ssl-enforcer' | 20 | +gem 'rack-ssl-enforcer', :require => false |
21 | # fabrication 1.3.0 is last supporting ruby 1.8. Update when stop supporting this version too | 21 | # fabrication 1.3.0 is last supporting ruby 1.8. Update when stop supporting this version too |
22 | gem 'fabrication', "~> 1.3.0" # Used for both tests and demo data | 22 | gem 'fabrication', "~> 1.3.0" # Used for both tests and demo data |
23 | gem 'rails_autolink' | 23 | gem 'rails_autolink' |
README.md
@@ -150,6 +150,8 @@ git clone http://github.com/errbit/errbit.git | @@ -150,6 +150,8 @@ git clone http://github.com/errbit/errbit.git | ||
150 | ``` | 150 | ``` |
151 | * Update `db/seeds.rb` with admin credentials for your initial login. | 151 | * Update `db/seeds.rb` with admin credentials for your initial login. |
152 | 152 | ||
153 | + * Run `bundle` | ||
154 | + | ||
153 | * Create & configure for Heroku | 155 | * Create & configure for Heroku |
154 | 156 | ||
155 | ```bash | 157 | ```bash |
@@ -467,7 +469,11 @@ Solutions known to work are listed below: | @@ -467,7 +469,11 @@ Solutions known to work are listed below: | ||
467 | Develop on Errbit | 469 | Develop on Errbit |
468 | ----------------- | 470 | ----------------- |
469 | 471 | ||
470 | -A guide can help on this way on [**Errbit Advanced Developer Guide**](https://github.com/errbit/errbit/blob/master/docs/DEVELOPER-ADVANCED.md) | 472 | +A guide can help on this way on [**Errbit Advanced Developer Guide**](docs/DEVELOPER-ADVANCED.md) |
473 | + | ||
474 | +## Other documentation | ||
475 | + | ||
476 | +* [All ENV variables availables to configure Errbit](docs/ENV-VARIABLES.md) | ||
471 | 477 | ||
472 | TODO | 478 | TODO |
473 | ---- | 479 | ---- |
app/assets/stylesheets/errbit.css
@@ -304,7 +304,7 @@ form label.inline { display: inline; } | @@ -304,7 +304,7 @@ form label.inline { display: inline; } | ||
304 | form .checkbox label { display: inline; } | 304 | form .checkbox label { display: inline; } |
305 | form .required label { padding-right: 20px; background: transparent url(images/icons/required.png) right 50% no-repeat; } | 305 | form .required label { padding-right: 20px; background: transparent url(images/icons/required.png) right 50% no-repeat; } |
306 | form .field_with_errors label { color: #900; } | 306 | form .field_with_errors label { color: #900; } |
307 | -form input[type=text], form input[type=password] { | 307 | +form input[type=text], form input[type=password], form input[type=email] { |
308 | width: 96%; padding: 0.8em; | 308 | width: 96%; padding: 0.8em; |
309 | font-size: 1em; | 309 | font-size: 1em; |
310 | color: #787878; border: 1px solid #C6C6C6; | 310 | color: #787878; border: 1px solid #C6C6C6; |
@@ -316,7 +316,7 @@ form textarea { | @@ -316,7 +316,7 @@ form textarea { | ||
316 | } | 316 | } |
317 | form textarea.short { height: 8em; } | 317 | form textarea.short { height: 8em; } |
318 | form textarea.supershort { height: 4em; } | 318 | form textarea.supershort { height: 4em; } |
319 | -form input[type=text]:focus, form input[type=password]:focus, form textarea:focus { | 319 | +form input[type=text]:focus, form input[type=password]:focus, form input[type=email]:focus, form textarea:focus { |
320 | box-shadow: 0px 0px 4px #69C; | 320 | box-shadow: 0px 0px 4px #69C; |
321 | -moz-box-shadow: 0px 0px 4px #69C; | 321 | -moz-box-shadow: 0px 0px 4px #69C; |
322 | -webkit-box-shadow: 0px 0px 4px #69C | 322 | -webkit-box-shadow: 0px 0px 4px #69C |
app/views/devise/sessions/new.html.haml
@@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
9 | = form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| | 9 | = form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| |
10 | .required | 10 | .required |
11 | = f.label auth_key | 11 | = f.label auth_key |
12 | - = f.text_field auth_key, :tabindex => 1 | 12 | + = f.text_field auth_key, :type => (Errbit::Config.user_has_username ? 'text' : 'email'), :tabindex => 1 |
13 | 13 | ||
14 | .required | 14 | .required |
15 | = link_to 'forget it?', new_password_path(resource_name), :class => 'float-right', :id => "forgot_password" | 15 | = link_to 'forget it?', new_password_path(resource_name), :class => 'float-right', :id => "forgot_password" |
config/initializers/_load_config.rb
@@ -4,15 +4,17 @@ default_config_file = Rails.root.join("config", "config.example.yml") | @@ -4,15 +4,17 @@ default_config_file = Rails.root.join("config", "config.example.yml") | ||
4 | # Allow a Rails Engine to override config by defining it earlier | 4 | # Allow a Rails Engine to override config by defining it earlier |
5 | unless defined?(Errbit::Config) | 5 | unless defined?(Errbit::Config) |
6 | Errbit::Config = OpenStruct.new | 6 | Errbit::Config = OpenStruct.new |
7 | + use_env = ENV['HEROKU'] || ENV['USE_ENV'] | ||
7 | 8 | ||
8 | # If Errbit is running on Heroku, config can be set from environment variables. | 9 | # If Errbit is running on Heroku, config can be set from environment variables. |
9 | - if ENV['HEROKU'] | 10 | + if use_env |
10 | Errbit::Config.host = ENV['ERRBIT_HOST'] | 11 | Errbit::Config.host = ENV['ERRBIT_HOST'] |
11 | Errbit::Config.email_from = ENV['ERRBIT_EMAIL_FROM'] | 12 | Errbit::Config.email_from = ENV['ERRBIT_EMAIL_FROM'] |
12 | - Errbit::Config.email_at_notices = ENV['ERRBIT_EMAIL_AT_NOTICES'] | ||
13 | - Errbit::Config.confirm_resolve_err = ENV['ERRBIT_CONFIRM_RESOLVE_ERR'] | ||
14 | - Errbit::Config.user_has_username = ENV['ERRBIT_USER_HAS_USERNAME'] | ||
15 | - Errbit::Config.allow_comments_with_issue_tracker = ENV['ERRBIT_ALLOW_COMMENTS_WITH_ISSUE_TRACKER'] | 13 | + # Not really easy to use like an env because need an array and ENV return a string :( |
14 | + # Errbit::Config.email_at_notices = ENV['ERRBIT_EMAIL_AT_NOTICES'] | ||
15 | + Errbit::Config.confirm_resolve_err = ENV['ERRBIT_CONFIRM_RESOLVE_ERR'].to_i == 0 | ||
16 | + Errbit::Config.user_has_username = ENV['ERRBIT_USER_HAS_USERNAME'].to_i == 1 | ||
17 | + Errbit::Config.allow_comments_with_issue_tracker = ENV['ERRBIT_ALLOW_COMMENTS_WITH_ISSUE_TRACKER'].to_i == 0 | ||
16 | Errbit::Config.enforce_ssl = ENV['ERRBIT_ENFORCE_SSL'] | 18 | Errbit::Config.enforce_ssl = ENV['ERRBIT_ENFORCE_SSL'] |
17 | 19 | ||
18 | Errbit::Config.use_gravatar = ENV['ERRBIT_USE_GRAVATAR'] | 20 | Errbit::Config.use_gravatar = ENV['ERRBIT_USE_GRAVATAR'] |
@@ -29,7 +31,7 @@ unless defined?(Errbit::Config) | @@ -29,7 +31,7 @@ unless defined?(Errbit::Config) | ||
29 | :authentication => :plain, | 31 | :authentication => :plain, |
30 | :user_name => ENV['SMTP_USERNAME'] || ENV['SENDGRID_USERNAME'], | 32 | :user_name => ENV['SMTP_USERNAME'] || ENV['SENDGRID_USERNAME'], |
31 | :password => ENV['SMTP_PASSWORD'] || ENV['SENDGRID_PASSWORD'], | 33 | :password => ENV['SMTP_PASSWORD'] || ENV['SENDGRID_PASSWORD'], |
32 | - :domain => ENV['SENDGRID_DOMAIN'] || ENV['ERRBIT_EMAIL_FROM'].split('@').last | 34 | + :domain => ENV['SMTP_DOMAIN'] || ENV['SENDGRID_DOMAIN'] || ENV['ERRBIT_EMAIL_FROM'].split('@').last |
33 | } | 35 | } |
34 | end | 36 | end |
35 | 37 | ||
@@ -44,7 +46,7 @@ unless defined?(Errbit::Config) | @@ -44,7 +46,7 @@ unless defined?(Errbit::Config) | ||
44 | Errbit::Config.send("#{k}=", v) | 46 | Errbit::Config.send("#{k}=", v) |
45 | end | 47 | end |
46 | # Show message if we are not running tests, not running on Heroku, and config.yml doesn't exist. | 48 | # Show message if we are not running tests, not running on Heroku, and config.yml doesn't exist. |
47 | - elsif not ENV['HEROKU'] | 49 | + elsif not use_env |
48 | puts "Please copy 'config/config.example.yml' to 'config/config.yml' and configure your settings. Using default settings." | 50 | puts "Please copy 'config/config.example.yml' to 'config/config.yml' and configure your settings. Using default settings." |
49 | end | 51 | end |
50 | 52 | ||
@@ -76,4 +78,4 @@ end | @@ -76,4 +78,4 @@ end | ||
76 | 78 | ||
77 | if Rails.env.production? | 79 | if Rails.env.production? |
78 | Rails.application.config.consider_all_requests_local = Errbit::Config.display_internal_errors | 80 | Rails.application.config.consider_all_requests_local = Errbit::Config.display_internal_errors |
79 | -end | ||
80 | \ No newline at end of file | 81 | \ No newline at end of file |
82 | +end |
config/initializers/mongo.rb
1 | -if mongo = ENV['MONGOLAB_URI'] || ENV['MONGOHQ_URL'] | ||
2 | - settings = URI.parse(mongo) | ||
3 | - database_name = settings.path.gsub(/^\//, '') | 1 | +# Some code extract from Mongoid gem |
2 | +config_file = Rails.root.join("config", "mongoid.yml") | ||
3 | +if config_file.file? && | ||
4 | + YAML.load(ERB.new(File.read(config_file)).result)[Rails.env].values.flatten.any? | ||
5 | + ::Mongoid.load!(config_file) | ||
6 | +else | ||
7 | + # No mongoid.yml file. Use ENV variable to define your MongoDB | ||
8 | + # configuration | ||
9 | + if mongo = ENV['MONGOLAB_URI'] || ENV['MONGOHQ_URL'] | ||
10 | + settings = URI.parse(mongo) | ||
11 | + database_name = settings.path.gsub(/^\//, '') | ||
12 | + else | ||
13 | + settings = OpenStruct.new({ | ||
14 | + :host => ENV['MONGOID_HOST'], | ||
15 | + :port => ENV['MONGOID_PORT'], | ||
16 | + :user => ENV['MONGOID_USERNAME'], | ||
17 | + :password => ENV['MONGOID_PASSWORD'] | ||
18 | + }) | ||
19 | + database_name = ENV['MONGOID_DATABASE'] | ||
20 | + end | ||
4 | 21 | ||
5 | Mongoid.configure do |config| | 22 | Mongoid.configure do |config| |
6 | - config.master = Mongo::Connection.new(settings.host, settings.port).db(database_name) | 23 | + config.master = Mongo::Connection.new( |
24 | + settings.host, | ||
25 | + settings.port | ||
26 | + ).db(database_name) | ||
7 | config.master.authenticate(settings.user, settings.password) if settings.user | 27 | config.master.authenticate(settings.user, settings.password) if settings.user |
8 | - config.allow_dynamic_fields = false | ||
9 | - config.use_activesupport_time_zone = true | ||
10 | end | 28 | end |
11 | end | 29 | end |
12 | 30 | ||
31 | +Mongoid.allow_dynamic_fields = false | ||
32 | +Mongoid.use_activesupport_time_zone = true | ||
33 | +Mongoid.identity_map_enabled = true |
config/initializers/ssl_enforcer.rb
1 | # Enforce SSL connections, if configured | 1 | # Enforce SSL connections, if configured |
2 | if Errbit::Config.enforce_ssl | 2 | if Errbit::Config.enforce_ssl |
3 | + require 'rack/ssl-enforcer' | ||
3 | ActionMailer::Base.default_url_options.merge!(:protocol => 'https://') | 4 | ActionMailer::Base.default_url_options.merge!(:protocol => 'https://') |
4 | Errbit::Application.configure do | 5 | Errbit::Application.configure do |
5 | config.middleware.use Rack::SslEnforcer, :except => /^\/deploys/ | 6 | config.middleware.use Rack::SslEnforcer, :except => /^\/deploys/ |
@@ -0,0 +1,71 @@ | @@ -0,0 +1,71 @@ | ||
1 | +# Which env variable you can use ? | ||
2 | + | ||
3 | +Errbit can be almost configured by some ENVIRONMENT variables. If you | ||
4 | +use this variable, you don't need copy all of you configuration file | ||
5 | + | ||
6 | +To activate this env variable you need activate it by a Variable env. | ||
7 | +You can do that with HEROKU or USE_ENV variable | ||
8 | + | ||
9 | +If you activate it you can use all of this env variable : | ||
10 | + | ||
11 | +## Errbit base configuration | ||
12 | + | ||
13 | +* ERRBIT_HOST : the host of your errbit instance (not define by default) | ||
14 | +* ERRBIT_EMAIL_FROM : the email sending all of your notification (not | ||
15 | + define by default ) | ||
16 | +* ERRBIT_CONFIRM_RESOLVE_ERR : define if you need confirm when you mark | ||
17 | + a problem resolve. ( true by default, fill it and you not need | ||
18 | +confirm ) | ||
19 | +* ERRBIT_USER_HAS_USERNAME : allow identify your user by username | ||
20 | + instead of email. ( false by default, set to '1' to activate it) | ||
21 | +* ERRBIT_ALLOW_COMMENTS_WITH_ISSUE_TRACKER : define if you activate the | ||
22 | + comment or not. By default comment are | ||
23 | +* ERRBIT_ENFORCE_SSL : allow force the ssl on all the application. By | ||
24 | + default is false | ||
25 | +* ERRBIT_USE_GRAVATAR : allow use gravatar to see user gravatar in user | ||
26 | + comment and page | ||
27 | + | ||
28 | +## Authentification configuration | ||
29 | + | ||
30 | +Environement variable allow define how you can auth on your errbit | ||
31 | + | ||
32 | +### Github authentification | ||
33 | + | ||
34 | +You can allow the GITHUB auth | ||
35 | + | ||
36 | +* GITHUB_AUTHENTIFICATION : define if you allow the github auth. By | ||
37 | + default false | ||
38 | +* GITHUB_CLIENT_ID : you github app client id to use in your github auth | ||
39 | +* GITHUB_SECRET : your github app secret to use in your github auth | ||
40 | +* GITHUB_ACCESS_SCOPE : The scope to ask to access on github account | ||
41 | + | ||
42 | +## Email sending configuration | ||
43 | + | ||
44 | +You can define how you connect your email sending system By all of this | ||
45 | +information. All mail can be send only by SMTP if you use variable | ||
46 | +system | ||
47 | + | ||
48 | +* SMTP_SERVER | ||
49 | +* SMTP_PORT | ||
50 | +* SMTP_USERNAME | ||
51 | +* SMTP_PASSWORD | ||
52 | +* SMTP_DOMAIN | ||
53 | + | ||
54 | +## MongoDB | ||
55 | + | ||
56 | +You can define your MongoDB connection by 2 ways. If you have an URL, | ||
57 | +you can define one of this ENV variables. All independently can works | ||
58 | + | ||
59 | +* MONGOLAB_URI | ||
60 | +* MONGOHQ_URL | ||
61 | + | ||
62 | +If you have a complete MongoDB connection you can define it by all | ||
63 | +information associate to your MongoDB connection. You need define all | ||
64 | +variable. | ||
65 | + | ||
66 | +* MONGOID_HOST | ||
67 | +* MONGOID_PORT | ||
68 | +* MONGOID_USERNAME | ||
69 | +* MONGOID_PASSWORD | ||
70 | +* MONGOID_DATABASE | ||
71 | + |
lib/tasks/errbit/database.rake
@@ -7,7 +7,7 @@ namespace :errbit do | @@ -7,7 +7,7 @@ namespace :errbit do | ||
7 | task :update_problem_attrs => :environment do | 7 | task :update_problem_attrs => :environment do |
8 | puts "Updating problems" | 8 | puts "Updating problems" |
9 | Problem.all.each{|problem| | 9 | Problem.all.each{|problem| |
10 | - ProblemUpdaterCache.new(self).update | 10 | + ProblemUpdaterCache.new(problem).update |
11 | } | 11 | } |
12 | end | 12 | end |
13 | 13 |
public/javascripts/notifier.js
@@ -366,7 +366,7 @@ printStackTrace.implementation.prototype = { | @@ -366,7 +366,7 @@ printStackTrace.implementation.prototype = { | ||
366 | '</notifier>' + | 366 | '</notifier>' + |
367 | '<error>' + | 367 | '<error>' + |
368 | '<class>{exception_class}</class>' + | 368 | '<class>{exception_class}</class>' + |
369 | - '<message>{exception_message}</message>' + | 369 | + '<message><![CDATA[{exception_message}]]></message>' + |
370 | '<backtrace>{backtrace_lines}</backtrace>' + | 370 | '<backtrace>{backtrace_lines}</backtrace>' + |
371 | '</error>' + | 371 | '</error>' + |
372 | '<request>' + | 372 | '<request>' + |
@@ -972,8 +972,8 @@ printStackTrace.implementation.prototype = { | @@ -972,8 +972,8 @@ printStackTrace.implementation.prototype = { | ||
972 | // '" number="' + matches[3] + '" />'); | 972 | // '" number="' + matches[3] + '" />'); |
973 | 973 | ||
974 | backtrace.push({ | 974 | backtrace.push({ |
975 | - 'function': matches[1], | ||
976 | - file: file, | 975 | + 'function': Util.escape(matches[1]), |
976 | + file: Util.escape(file), | ||
977 | line: matches[3] | 977 | line: matches[3] |
978 | }); | 978 | }); |
979 | } | 979 | } |
spec/fixtures/hoptoad_test_notice.xml
@@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
9 | <framework>Rails: 3.2.11</framework> | 9 | <framework>Rails: 3.2.11</framework> |
10 | <error> | 10 | <error> |
11 | <class>HoptoadTestingException</class> | 11 | <class>HoptoadTestingException</class> |
12 | - <message>HoptoadTestingException: Testing hoptoad via "rake hoptoad:test". If you can see this, it works.</message> | 12 | + <message><![CDATA[HoptoadTestingException: Testing hoptoad via "rake hoptoad:test". If you can see this, it works & works well.]]></message> |
13 | <backtrace> | 13 | <backtrace> |
14 | <line number="425" file="[GEM_ROOT]/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb" method="_run__2115867319__process_action__262109504__callbacks"/> | 14 | <line number="425" file="[GEM_ROOT]/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb" method="_run__2115867319__process_action__262109504__callbacks"/> |
15 | <line number="404" file="[GEM_ROOT]/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb" method="send"/> | 15 | <line number="404" file="[GEM_ROOT]/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb" method="send"/> |
spec/models/problem_spec.rb
@@ -104,7 +104,7 @@ describe Problem do | @@ -104,7 +104,7 @@ describe Problem do | ||
104 | 104 | ||
105 | it "should record the time when it was resolved" do | 105 | it "should record the time when it was resolved" do |
106 | problem = Fabricate(:problem) | 106 | problem = Fabricate(:problem) |
107 | - expected_resolved_at = Time.now | 107 | + expected_resolved_at = Time.zone.now |
108 | Timecop.freeze(expected_resolved_at) do | 108 | Timecop.freeze(expected_resolved_at) do |
109 | problem.resolve! | 109 | problem.resolve! |
110 | end | 110 | end |