From 679988b59cc57e25a21a7e02a637a407ed132992 Mon Sep 17 00:00:00 2001 From: Neil Lalonde Date: Sat, 9 Feb 2013 12:59:43 -0500 Subject: [PATCH 1/7] Add mailcatcher instructions to DEVELOPMENT.md --- DEVELOPMENT.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index a88dbaebbb6..3a1d82b6cdf 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -68,6 +68,20 @@ bundle exec guard -p Wait a minute while it runs all our unit tests. Once it has completed, live reloading should start working. Simply save a file locally, wait a couple of seconds and you'll see it change in your browser. No reloading of pages should be necessary for the most part, although if something doesn't update you should refresh to confirm. +### Sending Email + +Mailcatcher is used to avoid the whole issue of actually sending emails: https://github.com/sj26/mailcatcher5 + +To start mailcatcher, run the following command in the vagrant image: + +``` +mailcatcher --http-ip 0.0.0.0 +``` + +Then in a browser, go to http://localhost:4080 + +Sent emails will be received by mailcatcher and shown in its web ui. + ### Shutting down the VM When you're done working on Discourse, you can shut down Vagrant like so: From 7e3e9760423daaeebcaf47226cea646f8a0e52bb Mon Sep 17 00:00:00 2001 From: TJ Date: Sat, 9 Feb 2013 10:49:39 -0800 Subject: [PATCH 2/7] Correcting link to Mailcatcher --- DEVELOPMENT.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 3a1d82b6cdf..4e8e3c05a65 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -70,7 +70,7 @@ Wait a minute while it runs all our unit tests. Once it has completed, live relo ### Sending Email -Mailcatcher is used to avoid the whole issue of actually sending emails: https://github.com/sj26/mailcatcher5 +Mailcatcher is used to avoid the whole issue of actually sending emails: https://github.com/sj26/mailcatcher To start mailcatcher, run the following command in the vagrant image: From 247d5a205ace22f4bfeb44d14d272eb6cfe650d6 Mon Sep 17 00:00:00 2001 From: Jaime Iniesta Date: Sat, 9 Feb 2013 20:44:49 +0100 Subject: [PATCH 3/7] Instruct developers to prepare the test DB before launching guard --- DEVELOPMENT.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 3a1d82b6cdf..08282b12656 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -62,6 +62,7 @@ To use it, follow all the above steps. Once rails is running, open a new termina ``` vagrant ssh +bundle exec rake db:test:prepare bundle exec guard -p ``` From bfb28b3d5463309ccc608923a9f76b939efee414 Mon Sep 17 00:00:00 2001 From: Jeff Atwood Date: Sat, 9 Feb 2013 12:32:45 -0800 Subject: [PATCH 4/7] add local greyscale dev logos --- app/assets/images/logo-dev.png | Bin 0 -> 4557 bytes app/assets/images/logo-single-dev.png | Bin 0 -> 4023 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/assets/images/logo-dev.png create mode 100644 app/assets/images/logo-single-dev.png diff --git a/app/assets/images/logo-dev.png b/app/assets/images/logo-dev.png new file mode 100644 index 0000000000000000000000000000000000000000..1e1adeb724b4ec0e69ae2e5e34b200f8aaf80c01 GIT binary patch literal 4557 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 literal 0 HcmV?d00001 diff --git a/app/assets/images/logo-single-dev.png b/app/assets/images/logo-single-dev.png new file mode 100644 index 0000000000000000000000000000000000000000..b35c4d56ac0469b63649da0898ae503a05b0ab61 GIT binary patch literal 4023 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 Date: Sat, 9 Feb 2013 12:57:27 -0800 Subject: [PATCH 5/7] update /faq more after sleeping on it --- app/views/static/faq.html.erb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/views/static/faq.html.erb b/app/views/static/faq.html.erb index de337dbd44a..3f63318aac1 100644 --- a/app/views/static/faq.html.erb +++ b/app/views/static/faq.html.erb @@ -50,7 +50,7 @@

Your Participation Counts

- The conversations we have here set the tone for everyone. Help us influence the future of this community by choosing to engage in discussions that make this forum an interesting place to be. + The conversations we have here set the tone for everyone. Help us influence the future of this community by choosing to engage in discussions that make this forum an interesting place to be — and avoiding those that do not.

@@ -65,7 +65,7 @@

If You See a Problem, Flag It

- Moderators have special responsibility and authority; they are technically responsible for this forum. But so are you. With your help, moderators should be facilitators more than janitors or police. + Moderators have special responsibility and authority; they are technically responsible for this forum. But so are you. With your help, moderators should be community facilitators more than janitors or police.

@@ -84,13 +84,15 @@

  • Be civil. Don’t post anything that a reasonable person would consider offensive, abusive, or hate speech.
  • Keep it clean. Don’t post anything obscene or sexually explicit.
  • -
  • Respect each other. Don’t harass others, impersonate anyone, or expose their private information.
  • +
  • Respect each other. Don’t harass or grief anyone, + impersonate people, or expose their private information.
  • Respect our forum. Don’t post spam or otherwise vandalize the forum.

- These are not concrete terms with precise definitions — avoid even the appearance of any of these things. If you're unsure, ask yourself how you would feel if your post was featured on the front page of the New York Times. + These are not concrete terms with precise definitions — avoid + even the appearance of any of these things. If you're unsure, ask yourself how you would feel if your post was featured on the front page of the New York Times.

This is a public forum, and search engines index these discussions. Keep the language, links, and images safe for family and friends. From c5e1dba31fc9b370a695718a5bac52470b314e53 Mon Sep 17 00:00:00 2001 From: Jeff Atwood Date: Sat, 9 Feb 2013 13:33:38 -0800 Subject: [PATCH 6/7] copyedit on PM invite button --- config/locales/en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 75b1a2f7242..372c3ca2eb7 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -591,7 +591,7 @@ en: private_message_info: title: "Private Conversation" description: "Participants in this private conversation" - invite: "invite a participant" + invite: "Invite Others..." email: 'Email' username: 'Username' From f00853bee81877feae50f381e372ae9b46811d4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98rjan=20Blom?= Date: Sun, 10 Feb 2013 00:02:29 +0100 Subject: [PATCH 7/7] Use define_method instead of eval-ing a string It avoids the need for escaping the interpolations. --- lib/discourse_redis.rb | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/discourse_redis.rb b/lib/discourse_redis.rb index 4c8df3fe3f7..c6f824c0476 100644 --- a/lib/discourse_redis.rb +++ b/lib/discourse_redis.rb @@ -25,12 +25,10 @@ class DiscourseRedis pttl rename renamenx rpop rpoplpush rpush rpushx sadd scard sdiff set setbit setex setnx setrange sinter sismember smembers sort spop srandmember srem strlen sunion ttl type watch zadd zcard zcount zincrby zrange zrangebyscore zrank zrem zremrangebyrank zremrangebyscore zrevrange zrevrangebyscore zrevrank zrangebyscore).each do |m| - class_eval %{ - def #{m}(*args) - args[0] = "\#\{DiscourseRedis.namespace\}:\#\{args[0]\}" - @redis.#{m}(*args) - end - } + define_method m do |*args| + args[0] = "#{DiscourseRedis.namespace}:#{args[0]}" + @redis.send(__method__, *args) + end end def self.namespace