Compare commits

..

392 Commits

Author SHA1 Message Date
pozorvlak
e95566ed48 Merge pull request #1052 from Growstuff/dev
Release 15
2016-11-24 18:30:36 +00:00
Daniel O'Connor
916fd73071 Merge pull request #1065 from Br3nda/bw/removed-some-duplication
Reduced code duplication in growstuff.rake
2016-11-23 18:11:34 +10:30
Brenda Wallace
18a8d6c5bf Re-instate usage info when args not as expected 2016-11-23 20:38:46 +13:00
Brenda Wallace
37d01e831f Reduced code duplication in growstuff.rake 2016-11-23 20:27:20 +13:00
Mackenzie
6a8b604554 Merge pull request #1063 from Br3nda/use_phantomjs_211_in_travis
Use phantomjs 211 in travis
2016-11-19 23:57:25 -05:00
Miles Gould
2fa282e131 Install PhantomJS 2.1.1 on Travis-CI
I've found it to be much more stable locally - hopefully it will help
with our flaky CI issues (#901).

Code mostly cargo-culted from
9d3afe3d04
2016-11-20 17:22:05 +13:00
pozorvlak
7355061762 Merge pull request #1060 from Br3nda/bw/covert-tabs-to-spaces
Covert all tabs to spaces
2016-11-18 13:39:35 +00:00
Brenda Wallace
5e0cff5b8e Merge remote-tracking branch 'upstream/dev' into bw/covert-tabs-to-spaces
Conflicts:
	app/helpers/seeds_helper.rb
	spec/support/controller_macros.rb
2016-11-17 19:04:44 +13:00
Daniel O'Connor
b3ae03ab7e Merge pull request #1059 from Br3nda/bw/trailing-whitespace-begone
Removed all trailing white space
2016-11-16 14:34:49 +10:30
Brenda Wallace
5ec2877577 Covert all tabs to spaces 2016-11-16 13:18:26 +13:00
Brenda Wallace
e182247774 Removed the ignores for trailing whitespace 2016-11-16 13:09:04 +13:00
Brenda Wallace
6bd9bd98d9 Removed extra blank lines, & added a end of file 2016-11-16 12:52:48 +13:00
Brenda Wallace
0475954acf Removed extra blank lines 2016-11-16 12:50:14 +13:00
Brenda Wallace
0d371593fb Merge remote-tracking branch 'upstream/dev' into bw/trailing-whitespace-begone 2016-11-15 03:25:14 +00:00
Daniel O'Connor
a6ef100e02 Merge pull request #1058 from Br3nda/bw/wiki-link-text-dupe
Removed duplicate wiki_linktext
2016-11-14 18:20:17 +10:30
Mackenzie
adc34b76da Merge pull request #1055 from Br3nda/bw/rubocop-ci
Add rubocop to travis ci
2016-11-13 23:10:00 -05:00
Brenda Wallace
a91c785543 Moved metrics placeholders to main rubocop.yml file 2016-11-14 16:51:17 +13:00
Brenda Wallace
1cac58dadc Allow both " and ' quote styles 2016-11-14 16:49:26 +13:00
Brenda Wallace
510c31f669 Removed 3 blank lines that codeclimate didn't like 2016-11-14 15:10:13 +13:00
Brenda Wallace
bdb057ca0f Removed all trailing white space 2016-11-14 15:05:32 +13:00
Brenda Wallace
dc5d7a8677 Removed duplicate wiki_linktext 2016-11-14 14:30:45 +13:00
Brenda Wallace
1fc1c64f62 Ignore rubocop_todo filename in code climate 2016-11-13 17:42:35 +13:00
Brenda Wallace
d49f33476d Merge remote-tracking branch 'upstream/dev' into bw/rubocop-ci 2016-11-13 16:45:10 +13:00
Mackenzie
2260f56713 Merge pull request #1056 from Br3nda/bw/contributors-case
Contributors check case-insentive
2016-11-12 18:39:18 -05:00
Brenda Wallace
eecd54c5ea Use single quotes, as code climate suggests 2016-11-13 11:12:24 +13:00
Brenda Wallace
e1f0b649f5 if! -> unless, as code climate suggests 2016-11-13 11:10:45 +13:00
Brenda Wallace
9605ec6109 Pass args to system() to be escaped 2016-11-13 11:07:57 +13:00
Brenda Wallace
b2977d6806 Search contributors file, case insensitive. 2016-11-13 11:05:43 +13:00
Brenda Wallace
d091aecaf1 Use https for contributor link
Hoping this will fix the failing contributor error
2016-11-13 10:46:46 +13:00
Brenda Wallace
97f0d5fc5d Add vendor to rubocop exclude path 2016-11-13 10:34:57 +13:00
Brenda Wallace
2bc9b8c8bb Added rubocop check to travisci 2016-11-13 10:20:13 +13:00
Brenda Wallace
e312ee2773 All existing rubocop offfenses in a todo file 2016-11-13 10:20:00 +13:00
Brenda Wallace
c685b970d3 Add rubocop to bundle
So we can manage which version of rubocop to use.
2016-11-13 10:07:41 +13:00
Cesy
621b7e5d29 Merge pull request #1048 from pozorvlak/es_factorygirl_weirdness
Prevent FactoryGirl from trying to connect to ElasticSearch in tests
2016-10-11 08:58:32 +02:00
Cesy
b59ebb7d52 Merge pull request #984 from maco/rubocop_config
Rubocop config (ignore the red x)
2016-10-09 17:28:47 +01:00
Miles Gould
ce2141ddb7 Only initialise Crop.__elasticsearch__ if needed
The mere presence of this field was causing any test that ran
`FactoryGirl.create :alternate_name` to try to connect to an
ElasticSearch server, even if GROWSTUFF_ELASTICSEARCH was false.

Fixes #1047
2016-10-07 14:49:09 +01:00
Miles Gould
36c88c3762 Delete trailing whitespace 2016-10-07 14:48:38 +01:00
Mackenzie Morgan
099b399b24 bundle 2016-10-06 22:00:01 -04:00
Mackenzie Morgan
5092c78fba merge 2016-10-06 21:48:18 -04:00
Cesy
199cdf20a7 Merge pull request #1045 from Br3nda/bw/harvest-link
harvest thumbnail title linking to the harvest itself
2016-09-25 10:21:59 +01:00
Brenda Wallace
7c1040e7aa Corrected contributor name 2016-09-19 21:51:13 +12:00
Brenda Wallace
faf117b002 test for link to member's harvest 2016-09-19 18:02:44 +12:00
Brenda Wallace
13e491cda7 harvest thumbnail title linking to the harvest itself 2016-09-18 18:33:28 +12:00
Cesy
286b7118be Merge pull request #1041 from CloCkWeRX/openfarm-links
Add links to OpenFarm
2016-09-15 11:31:13 +01:00
Cesy
b2dfe31b5c Merge pull request #1043 from CloCkWeRX/fix_1042
Fix map token in prod configuration
2016-09-15 09:09:02 +01:00
Daniel O'Connor
1f005a3d42 Fixes #1042 2016-09-14 21:41:18 +09:30
Daniel O'Connor
36c64bd8dc #1038 Add links to OpenFarm 2016-09-14 14:57:08 +09:30
Daniel O'Connor
277325d58c Merge pull request #1036 from Br3nda/bw/json-sessions
allow registration and signin/out on the API
2016-09-14 14:50:04 +09:30
Brenda Wallace
370f407ad6 Adding Brenda Wallace to contributors 2016-09-13 19:25:22 +12:00
Daniel O'Connor
3ea8e2294e Update README.md
Fixes #1037
2016-09-12 21:57:27 +09:30
Brenda Wallace
c6413afa67 allow registration and signin/out on the API 2016-09-11 14:23:50 +12:00
Cesy
fe137a11bb Merge pull request #1031 from CloCkWeRX/queue_mail
Queue mail in sidekiq
2016-08-24 10:38:13 +01:00
Cesy
0fa15161d4 Merge pull request #811 from CloCkWeRX/add_facebook_signup
Add facebook signup
2016-08-24 10:37:47 +01:00
Daniel O'Connor
aeb8792165 Merge remote-tracking branch 'upstream/dev' into queue_mail 2016-08-24 06:35:51 +09:30
Daniel O'Connor
c60609d507 Merge remote-tracking branch 'upstream/dev' into add_facebook_signup 2016-08-23 16:34:03 +09:30
Daniel O'Connor
ad04c07017 Merge pull request #1034 from cesy/railsupdate
Rails update
2016-08-23 01:03:46 +09:30
Daniel O'Connor
f3f8326360 Merge pull request #1033 from cesy/gemupdate
Updating a few gems
2016-08-23 01:00:36 +09:30
Cesy Avon
3798e386ae Upgrading rails to 4.2.1 2016-08-22 14:14:58 +00:00
Cesy Avon
7d3afa005c Updating a few gems 2016-08-22 14:00:03 +00:00
Daniel O'Connor
3bfe2329f1 Merge pull request #1032 from Growstuff/dev
Release 14
2016-08-22 19:19:04 +09:30
Daniel O'Connor
29765ebc19 rubocop --only HashSyntax --auto-correct 2016-08-22 19:02:27 +09:30
Daniel O'Connor
b91f0e7f63 Whitelist providers to avoid session data being tampered with 2016-08-22 18:59:28 +09:30
Daniel O'Connor
87352b04f1 Refactor to a method to DRY, even if its not 100% the best spot for it to live long term 2016-08-22 18:52:12 +09:30
Daniel O'Connor
0f034523e1 Only maximize if the driver supports such a thing 2016-08-22 18:26:08 +09:30
Daniel O'Connor
20b87e596a Modern syntax 2016-08-22 18:25:57 +09:30
Daniel O'Connor
4b7cffad04 DEPRECATION WARNING: [Devise] bypass option is deprecated and it will be removed in future version of Devise. 2016-08-22 16:42:08 +09:30
Daniel O'Connor
bcb0a19dea Merge remote-tracking branch 'upstream/dev' into add_facebook_signup 2016-08-22 16:37:50 +09:30
Daniel O'Connor
4e2311e8d7 Indent 2016-08-22 16:36:30 +09:30
Daniel O'Connor
c7be0f3b0e Fix redirects and sign the user in if they weren't yet created 2016-08-22 16:35:58 +09:30
Daniel O'Connor
9ab79209ef Adjust TOS url 2016-08-22 16:35:41 +09:30
Daniel O'Connor
1c3016a31e Adjust for when running with selenium-webdriver to avoid clicks being placed in the wrong location; and for drivers that don't support blacklisting 2016-08-22 16:17:36 +09:30
Cesy
941001c743 Merge pull request #1029 from CloCkWeRX/add_seed_purchase_links
Add links to ebay, which seems to have a variety of seeds to purchase…
2016-08-16 08:53:09 +01:00
Cesy
40cf5ba63a Merge pull request #1030 from CloCkWeRX/fix_998
Ensure we look at the current control, not the entire collection when marking planting finished
2016-08-16 08:50:30 +01:00
Cesy
9a40449f08 Merge pull request #1024 from CloCkWeRX/mapboxv4
#981 Add mapbox v4
2016-08-16 08:49:44 +01:00
Daniel O'Connor
049d792053 Fix Gemfile.lock 2016-08-16 12:05:14 +09:30
Daniel O'Connor
e399085a57 Update bootstrap-sass coveralls friendly_id js-routes sass-rails simplecov 2016-08-16 11:58:12 +09:30
Daniel O'Connor
18b4a90690 Upgrade excon ffi autoprefixer-rails multi_json mimemagic pry active_utils activemerchant 2016-08-16 11:56:50 +09:30
Daniel O'Connor
a68ffda7eb Upgrade minor gems: kramdown, notifany, httparty, codemirror-rails, bootstrap_form, globalid 2016-08-16 11:56:25 +09:30
Daniel O'Connor
0a722edc88 Fix regression from bad merge 2016-08-16 11:45:58 +09:30
Daniel O'Connor
de407608f2 Merge remote-tracking branch 'upstream/dev' into queue_mail 2016-08-16 11:11:40 +09:30
Daniel O'Connor
ece0fdfe6c Drop sidekiq web for the moment 2016-08-16 11:08:59 +09:30
Daniel O'Connor
5008d35614 Add sidekiq configuration 2016-08-16 11:02:35 +09:30
Daniel O'Connor
6b470f180c #951 Add sidekiq as our activejob backend 2016-08-16 11:01:19 +09:30
Daniel O'Connor
4deb895b4c #951 Add sidekiq 2016-08-16 10:59:30 +09:30
Daniel O'Connor
5d70d822eb #951 Swap to deliver_later implementation 2016-08-16 10:55:40 +09:30
Daniel O'Connor
90a88cf69d Fixes #998 Ensure we look at the current control, not the entire collection 2016-08-16 10:33:23 +09:30
Daniel O'Connor
044a992d25 Merge pull request #1025 from polveenomials/nav-header
Enhancement of the navigation bar (header)
2016-08-15 23:30:11 +09:30
Daniel O'Connor
4b066ec37f Merge pull request #1028 from CloCkWeRX/minor_gem_upgrades_august_2016
Minor gem upgrades for August 2016
2016-08-15 23:28:30 +09:30
Daniel O'Connor
0dad02343e Merge remote-tracking branch 'upstream/dev' into add_facebook_signup 2016-08-15 23:14:49 +09:30
Daniel O'Connor
7f6a1a424d Merge remote-tracking branch 'upstream/dev' into add_facebook_signup 2016-08-15 23:13:55 +09:30
Daniel O'Connor
c2dc2c5836 Merge pull request #1027 from CloCkWeRX/cve-2016-6317
Fix CVE-2016-6316 CVE-2016-6317
2016-08-15 23:10:27 +09:30
Daniel O'Connor
58452204aa Add links to ebay, which seems to have a variety of seeds to purchase with our affiliate id 2016-08-15 22:42:32 +09:30
Daniel O'Connor
711ba73d6b Upgrade devise to 4.2 2016-08-15 22:12:34 +09:30
Daniel O'Connor
5354f2732f Update bootstrap-sass coveralls friendly_id js-routes sass-rails simplecov 2016-08-15 22:07:39 +09:30
Daniel O'Connor
9bbaaa2211 Upgrade excon ffi autoprefixer-rails multi_json mimemagic pry active_utils activemerchant 2016-08-15 22:04:43 +09:30
Daniel O'Connor
93c47d774e Upgrade minor gems: kramdown, notifany, httparty, codemirror-rails, bootstrap_form, globalid 2016-08-15 22:01:56 +09:30
Daniel O'Connor
d8ad697d09 Swap tokens 2016-08-15 21:53:17 +09:30
Daniel O'Connor
7308a7cf9a Name: actionview
Version: 4.2.6
Advisory: CVE-2016-6316
Criticality: Unknown
URL: https://groups.google.com/forum/#!topic/rubyonrails-security/I-VWr034ouk
Title: Possible XSS Vulnerability in Action View
Solution: upgrade to ~> 3.2.22.3, ~> 4.2.7.1, >= 5.0.0.1

Name: activerecord
Version: 4.2.6
Advisory: CVE-2016-6317
Criticality: Unknown
URL: https://groups.google.com/forum/#!topic/rubyonrails-security/rgO20zYW33s
Title: Unsafe Query Generation Risk in Active Record
Solution: upgrade to ~> 4.2.7.1
2016-08-15 21:45:26 +09:30
Cesy
c9c49a7e5e Merge pull request #1026 from CloCkWeRX/gardenate_attempt_2
Gardenate attempt 2
2016-08-15 13:15:21 +01:00
Daniel O'Connor
dba6b2a291 Mitigate security concerns with target=_blank via https://www.jitbit.com/alexblog/256-targetblank---the-most-underestimated-vulnerability-ever/ 2016-08-15 21:31:45 +09:30
Daniel O'Connor
7d3991b295 #967 Mitigate security concerns with target=_blank via https://www.jitbit.com/alexblog/256-targetblank---the-most-underestimated-vulnerability-ever/ 2016-08-15 21:30:51 +09:30
Daniel O'Connor
e4c0ecfb5a Add basic test 2016-08-15 21:30:40 +09:30
Daniel O'Connor
fdb0e842de #864 Add links to google, gardenate 2016-08-15 21:30:33 +09:30
polveenomials
85ff36198b Added name to the CONTRIBUTORS.md 2016-08-04 14:27:49 +08:00
Daniel O'Connor
e38321aa33 #981 Add mapbox access token (on my free 50k views account) and update to v4 2016-07-28 14:27:49 +09:30
Kristine Nicole Polvoriza
d1438d1b2e Fixed the nav header in mobile view 2016-07-28 12:31:50 +08:00
pozorvlak
b6f848ef66 Merge pull request #1021 from CloCkWeRX/picture_improvements
If a harvest doesn't have any photos, try to look at the crop's default photo
2016-07-21 18:24:58 +01:00
Daniel O'Connor
ff47784aee Add explicit test coverage 2016-07-21 12:21:56 +09:30
Daniel O'Connor
1dba711057 Add more explicit test coverage 2016-07-21 12:13:37 +09:30
Daniel O'Connor
6911f7b24b Typo 2016-07-21 12:05:37 +09:30
pozorvlak
1e94abd063 Merge pull request #1019 from CloCkWeRX/mobile_searchbar
Use navbar-right, and reposition search box to fix mobile layout
2016-07-20 12:44:03 +01:00
Cesy
3325e1e388 Merge pull request #1020 from Growstuff/dev
Release 13
2016-07-19 10:45:28 +01:00
Daniel O'Connor
4b87977e24 It helps to type properly 2016-07-08 18:12:16 +09:30
Daniel O'Connor
dfa28264c6 #1017 When a crop has no photos, look for harvests of the crop with photos. 2016-07-08 18:09:53 +09:30
Daniel O'Connor
f0c1d6d4c2 #997 Use the harvest photo lookup, not the harvest.crop one 2016-07-08 18:01:53 +09:30
Daniel O'Connor
427b98a157 #997 If a harvest doesn't have any photos, try to look at the crop's default photo 2016-07-08 17:59:32 +09:30
Daniel O'Connor
8f5000443f Use navbar-right, and reposition search box to fix mobile layout 2016-07-08 17:45:00 +09:30
Daniel O'Connor
7947fd6e91 Clean up link_to as per #1013 2016-07-08 17:08:17 +09:30
Daniel O'Connor
70bf5499b2 Clean up logic a bit as per #1013 2016-07-08 17:07:14 +09:30
Daniel O'Connor
6b059cb4f4 Clean up a bit as per #1013 with TODO comments 2016-07-08 17:06:05 +09:30
Daniel O'Connor
efd112c4b8 And vs && - revised version of b50127c166 2016-07-08 17:01:59 +09:30
Mackenzie Morgan
5c7b760f34 Use array literal [] instead of Array.new 2016-07-08 16:58:34 +09:30
Mackenzie Morgan
81ae473972 space between comma-separated arguments 2016-07-08 16:58:29 +09:30
Mackenzie Morgan
a8171bb739 has_key? -> key? 2016-07-08 16:58:22 +09:30
Daniel O'Connor
c803ed4ee6 Merge pull request #976 from pozorvlak/remove_default_shows
Remove "show" methods that just do the default
2016-07-08 16:56:25 +09:30
Daniel O'Connor
9e41a65749 Tweak readme wiki links
Supercedes #1016
2016-07-08 15:33:16 +09:30
Daniel O'Connor
43e7d6f7c2 Merge remote-tracking branch 'upstream/dev' into add_facebook_signup 2016-07-05 03:09:36 +09:30
Cesy
a7539df5b5 Merge pull request #1018 from CloCkWeRX/minor_rails_bump
Minor gem upgrades for the month
2016-07-01 10:14:22 +01:00
Daniel O'Connor
3950619877 Update various minor gems even more 2016-07-01 17:42:58 +09:30
Daniel O'Connor
7373fd4aa9 Update various minor gems 2016-07-01 17:34:25 +09:30
Daniel O'Connor
c3d9885525 Merge pull request #987 from CloCkWeRX/upgradazzle_rails
Upgrade to rails 4.2.0+ (round 2)
2016-06-29 14:47:05 +09:30
Daniel O'Connor
4b5dee7bdb Merge pull request #1007 from ctlewitt/dev
issue #1006: change "Freenode" to "irc.freenode.net" in README.md
2016-06-29 12:51:05 +09:30
Charley Lewittes
55d846b9e0 Merge remote-tracking branch 'them/dev' into dev 2016-06-22 10:56:56 -04:00
Daniel O'Connor
f2d8349a88 #1012 Tweak script to avoid errors after merge 2016-06-22 10:46:26 +09:30
Daniel O'Connor
7c7dd7c609 Merge pull request #1012 from pozorvlak/check_contributors_md
Check PR author is in CONTRIBUTORS.md under Travis
2016-06-22 10:25:06 +09:30
Charley Lewittes
d8f2c580ee added myself to contributors list 2016-06-21 13:14:26 -04:00
Charley Lewittes
2a0602468d Added link and wording to access Freenode IRC growstuff channel easily
fixes #1006
2016-06-21 13:03:06 -04:00
Charley Lewittes
89a9c18188 fixes #1006: change "Freenode" to "irc.freenode.net" in README.md 2016-06-21 12:49:33 -04:00
Miles Gould
8b426da149 Check PR author is in CONTRIBUTORS.md under Travis
Results of testing this locally (the exit value of the last command is
in my prompt):

```
0 $ TRAVIS=true TRAVIS_REPO_SLUG=growstuff/growstuff
TRAVIS_PULL_REQUEST=1007 script/check_contributors_md
Checking to see if you're in CONTRIBUTORS.md...

Thanks for your contribution, ctlewitt!
Please add your name and GitHub handle to the file CONTRIBUTORS.md,
commit it, and update your PR.

1 $ TRAVIS=true TRAVIS_REPO_SLUG=growstuff/growstuff
TRAVIS_PULL_REQUEST=1008 script/check_contributors_md
Checking to see if you're in CONTRIBUTORS.md...
- Miles Gould / [pozorvlak](https://github.com/pozorvlak)
0 $ script/check_contributors_md
Checking to see if you're in CONTRIBUTORS.md...
- Miles Gould / [pozorvlak](https://github.com/pozorvlak)
0 $
```
2016-06-21 16:37:26 +01:00
pozorvlak
cab98f9750 Merge pull request #1011 from Growstuff/revert-1002-letsencrypt-pt2-1
Revert "challenge code"
2016-06-21 15:28:15 +01:00
pozorvlak
27b7a26fee Merge pull request #1010 from Growstuff/revert-999-letsencrypt
Revert "lets encrypt challenge page"
2016-06-21 15:27:38 +01:00
Cesy
7261fae9f2 Revert "challenge code" 2016-06-21 15:06:02 +01:00
Cesy
628ebd6841 Revert "lets encrypt challenge page" 2016-06-21 15:05:45 +01:00
Cesy
61bbf7c30d Merge pull request #1008 from pozorvlak/test_gemfile_commits
Check for "forgot to commit Gemfile.lock" in CI
2016-06-21 14:57:54 +01:00
Miles Gould
e33803343a Check for "forgot to commit Gemfile.lock" in CI
Quick-and-dirty script to catch an error we've missed a couple of times
in code review, but which is not (AFAICT) covered by any of our existing
checkers. Inspired by the following posts:

 - https://zachholman.com/posts/how-github-writes-blog-posts/
 - https://zachholman.com/talk/move-fast-break-nothing/
2016-06-21 13:32:11 +01:00
Mackenzie
b08a448fdc hotfix commit: letsencrypt try #2 2016-06-20 13:40:49 -04:00
Cesy
7210ebfb22 Merge pull request #1004 from maco/letsencrypt
Letsencrypt, will be backed out once SSL is up and running.
2016-06-20 16:57:24 +01:00
Mackenzie Morgan
039978357b letsencrypt verification for staging 2016-06-20 11:48:19 -04:00
Cesy
7ce2481cbc Merge pull request #1002 from Growstuff/letsencrypt-pt2-1
challenge code - will also get reverted once SSL is up.
2016-06-20 15:49:33 +01:00
Mackenzie
5bc6af87c5 challenge code 2016-06-20 10:46:40 -04:00
Cesy
a5eaf3566e Merge pull request #999 from Growstuff/letsencrypt
lets encrypt challenge page - temporary change for SSL tool, will be backed out after
2016-06-20 15:42:22 +01:00
Mackenzie Morgan
58d40e912d Tweak rubocop config
* turn off line length limit
* turn off class documentation requirement
* 30 line methods
2016-06-20 10:35:38 -04:00
Mackenzie
63d89be698 lets encrypt challenge page 2016-06-20 10:34:11 -04:00
pozorvlak
1b7be9f9b0 Merge pull request #936 from maco/add_bootstrap_flashes
Add support for Bootstrap alert types
2016-06-20 10:19:36 +01:00
Mackenzie Morgan
7a53e96d52 test the default case 2016-06-19 22:52:51 -04:00
Mackenzie Morgan
b28d146de7 use default of info
add tests
2016-06-19 22:42:20 -04:00
Mackenzie Morgan
55c8be8dc5 merge 2016-06-19 22:27:27 -04:00
Daniel O'Connor
38a273459a Merge pull request #996 from pozorvlak/block_unknown_urls_in_features
Block external URLs in feature tests
2016-06-18 20:21:32 +09:30
Miles Gould
1b07632c69 Block external URLs in features
https://github.com/teampoltergeist/poltergeist/issues/375#issuecomment-42620085
suggested that this might help with our intermittent "Request to
http://localhost:8081 failed to reach server, check DNS and/or server
status" errors in CI - the theory being that the error message is
misleading, and it's actually a daughter request to an external service
timing out. Seems worth a shot. It also ought to speed up testing, but
the effect is slight (20s out of 3.5 minutes) on my machine.

I've blacklisted only URLs I could find in app/views or by tcpdumping a
test run, because I couldn't get whitelisting to work.
2016-06-17 21:12:25 +01:00
pozorvlak
4a12523793 Merge pull request #991 from Growstuff/dev
Release 12
2016-06-17 11:37:29 +01:00
pozorvlak
6aa601b8ab Merge pull request #993 from Growstuff/revert-988-dev
Revert "Handled Issue #950 (Branded Error Pages)"
2016-06-16 13:30:50 +01:00
pozorvlak
a66a040207 Revert "Handled Issue #950 (Branded Error Pages)" 2016-06-16 12:58:22 +01:00
pozorvlak
547a408a99 Merge pull request #988 from Prashanth261993/dev
Add branding to error pages (#950)
2016-06-16 11:12:23 +01:00
pozorvlak
8cd224b7fa Merge pull request #990 from maco/sparkpost_#917
don't override our environment email settings with plain old sendmail
2016-06-15 20:03:35 +01:00
Mackenzie Morgan
8428e93b47 don't override our environment email settings with plain old sendmail 2016-06-15 13:27:51 -04:00
Prashanth
483143f2fe Merge branch 'growstuff-dev' into dev
Conflicts:
	CONTRIBUTORS.md
2016-06-14 17:09:06 +05:30
pozorvlak
1b3d106b6d Merge pull request #989 from maco/sparkpost_#917
update to SparkPost's mailserver
2016-06-13 18:04:43 +01:00
Mackenzie Morgan
e7be006fa7 update to SparkPost's mailserver 2016-06-13 12:12:00 -04:00
Prashanth
b9f40151d8 Handled Issue #950 (Branded Error Pages)
Moved error related views from public to errors (asset pipeline can be used).
Header and footer were included along with the error message.
2016-06-10 18:35:48 +05:30
Daniel O'Connor
fd467acc29 Clean up whitespace 2016-06-10 20:51:02 +09:30
pozorvlak
e1ad0c31c8 Merge pull request #986 from CloCkWeRX/update_various_gems_nokogiri
Update various gems - nokogiri, mime-types, parser, guard-rspec
2016-06-10 11:09:12 +01:00
Daniel O'Connor
ee604dc2b0 Upgrade activemerchant, fixing rails 5 deprecation warnings 2016-06-10 16:04:00 +09:30
Daniel O'Connor
0620646c6d Fix failing specs
- Updated assert_select behaviour given this is now based on nokogiri
 - Adjust some specs not to look for a specific asset name, but a behaviour
 - Adjust some specs for HTML5 style attributes instead of xhtml style
 - Fix tests that did not render before
2016-06-10 16:01:30 +09:30
Daniel O'Connor
df9cf3f5c4 Fix various rails deprecations 2016-06-10 15:58:39 +09:30
Daniel O'Connor
944349760a Fix DEPRECATION WARNING: #timestamps was called without specifying an option for null.
In Rails 5, this behavior will change to `null: false`. You should manually specify `null: true` to prevent the behavior of your existing migrations from changing
2016-06-10 15:57:48 +09:30
Daniel O'Connor
7fe75ee52a Fix DEPRECATION WARNING: #deliver is deprecated. 2016-06-10 15:45:01 +09:30
Daniel O'Connor
e3d7bf9a62 Upgrade to rails 4.2.* 2016-06-10 15:43:04 +09:30
Daniel O'Connor
deaf49c18f Update selenium-webdriver 2016-06-10 15:40:56 +09:30
Daniel O'Connor
53543fff4c Update terminal-table 2016-06-10 15:40:29 +09:30
Daniel O'Connor
ea5e710a70 Update codeclimate-test-reporter 2016-06-10 15:38:43 +09:30
Daniel O'Connor
ad5a52ae74 Update tilt 2016-06-10 15:36:07 +09:30
Daniel O'Connor
c0cc5ab085 Update geocoder 2016-06-10 15:35:29 +09:30
Daniel O'Connor
cf784cbedd Update parser to current 2016-06-10 15:20:31 +09:30
Daniel O'Connor
5c68830919 Update guard-rspec 2016-06-10 15:19:57 +09:30
Daniel O'Connor
370aab41c3 Update mime-types 2016-06-10 15:19:28 +09:30
Daniel O'Connor
081f4021bc Upgrade nokogiri 2016-06-10 15:19:03 +09:30
Daniel O'Connor
36f846fabf Merge pull request #982 from CloCkWeRX/update_gibbon
Upgrade gibbon
2016-06-10 15:13:18 +09:30
pozorvlak
f6d094f57c Merge pull request #985 from lucasnogueira/fix_simplecov_deprecation
Fix SimpleCov Deprecation Warning
2016-06-09 22:37:40 +01:00
Lucas Nogueira
9ce097b7d6 Fix SimpleCov Deprecation Warning 2016-06-09 17:42:11 -03:00
Mackenzie Morgan
91991f0c67 update Gemfile.lock 2016-06-09 14:25:04 -04:00
Mackenzie Morgan
306cd13723 add rubocop config with all the things turned on 2016-06-09 14:13:31 -04:00
Mackenzie Morgan
8c624cfacd merge 2016-06-09 14:13:02 -04:00
pozorvlak
b03ccce575 Merge pull request #980 from lucasnogueira/replace_pluralize
Replace pluralize calls
2016-06-09 16:39:34 +01:00
Lucas Nogueira
63b8788c80 Change hash syntax 2016-06-09 11:57:56 -03:00
Daniel O'Connor
faa3beddbc Upgrade gibbon 2016-06-10 00:17:28 +09:30
Lucas Nogueira
5dbd5bc1d2 Correct minor typos 2016-06-09 08:21:28 -03:00
Lucas Nogueira
b8b0d98e07 Update the contributors list 2016-06-08 22:06:26 -03:00
Lucas Nogueira
b911ebfd07 Replace pluralize calls 2016-06-08 22:03:40 -03:00
Lucas Nogueira
1ca515bd4e Add missing activerecord model to locales 2016-06-08 21:56:29 -03:00
Lucas Nogueira
905710b6e9 Helper for plural localization 2016-06-08 21:55:33 -03:00
Mackenzie
12e0f674bc Merge pull request #977 from pozorvlak/fix_devise_warnings
Replace deprecated Devise `for` method with `permit`
2016-06-08 13:14:05 -04:00
Mackenzie
18739c2a24 Merge pull request #974 from pozorvlak/remove_vendor_dir
Remove vendor directory
2016-06-08 11:12:14 -04:00
pozorvlak
f3dc2ff7e5 Replace deprecated Devise for method with permit
This should eliminate the screens-ful of deprecation warnings when
running the test suite.
2016-06-08 15:00:05 +00:00
pozorvlak
e6209a5906 Remove "show" methods that just do the default
We can just fall back to the default implementation for these.
2016-06-08 15:58:45 +01:00
Mackenzie
dbf64a4e90 Merge pull request #975 from Growstuff/revert-972-show_concern
Revert "Show concern"
2016-06-08 09:26:58 -04:00
pozorvlak
a8961c3466 Revert "Show concern" 2016-06-08 12:58:32 +01:00
pozorvlak
6931952688 Whitespace fixes 2016-06-07 17:43:36 +00:00
pozorvlak
936aa17ecc Remove references to vendor directory
This consisted of instructions to various code-quality tools to
ignore it.
2016-06-07 17:43:36 +00:00
pozorvlak
f3d7420b8a Remove vendor directory
We no longer need it, since we're now getting the functionality we
needed from upstream gems.
2016-06-07 17:43:35 +00:00
pozorvlak
e419acea6e Install BogusPayPalGateway gem
We were maintaining a vendor fork of active_merchant because they
refused to merge this feature in; it's now been released as a
separate gem.
2016-06-07 17:43:35 +00:00
pozorvlak
95ae15b780 Merge pull request #972 from maco/show_concern
Show concern
2016-06-07 16:22:17 +01:00
Mackenzie Morgan
ed468e79fc Merge branch 'dev' of gitmaco:Growstuff/growstuff into show_concern 2016-06-07 09:57:47 -04:00
Daniel O'Connor
130565af75 Merge pull request #969 from maco/code_climate_token
add Code Climate token to Travis config
2016-06-07 09:01:27 +09:30
Daniel O'Connor
ad8f360336 Merge pull request #970 from maco/codeclimate_exclude_vendor
exclude vendor gems from code climate
2016-06-07 09:01:05 +09:30
Daniel O'Connor
15775403fd Merge pull request #971 from maco/readme_email
info@ email exists again
2016-06-07 09:00:38 +09:30
Mackenzie Morgan
e1b83c32af info@ email exists again 2016-06-06 13:27:13 -04:00
Mackenzie Morgan
3fc7c65247 exclude vendor gems from code climate 2016-06-06 13:14:01 -04:00
Mackenzie Morgan
c8d1239b79 add Code Climate token to Travis config 2016-06-06 09:40:30 -04:00
Cesy
7885257fae Merge pull request #943 from CloCkWeRX/adjust_helper
Deal with .nil quantity of a seed in rendering helper
2016-06-04 12:41:03 +01:00
Daniel O'Connor
a8d22709e6 Add explict test coverage of the helper with nil seeds (page level tests already cover this rendering on crop detail in general) 2016-06-04 20:51:20 +09:30
pozorvlak
31b7b45ae3 Merge pull request #966 from cesy/readme
Updating readme with current wiki status and Gitter link
2016-06-03 14:34:35 +01:00
Cesy Avon
681798b582 Updating readme with current wiki status and Gitter link 2016-06-03 13:12:19 +00:00
Cesy
f05ea56179 Merge pull request #965 from dv2/dev
Add test coverage for GardensHelper
2016-06-03 14:03:07 +01:00
DV Dasari
ed4269ea4c fixing grammar in test descriptions 2016-06-03 07:54:24 -05:00
DV Dasari
085fcc958e Add test coverage for GardensHelper 2016-06-02 22:22:14 -05:00
pozorvlak
8f33fe3595 Merge pull request #960 from CloCkWeRX/update_various_gems
Update various gems
2016-06-02 18:18:12 +01:00
pozorvlak
980a7d79d3 Merge pull request #963 from CloCkWeRX/add_better_opengraph_squashed
Various bugfixes for facebook/opengraph
2016-06-02 17:58:05 +01:00
pozorvlak
9c5c07e087 Merge pull request #948 from cesy/issue875
Fix #875 edited date on comments on homepage
2016-06-02 17:41:59 +01:00
Daniel O'Connor
faaf07cad8 Render the full size image, as facebook doesn't like smaller thumbnails 2016-06-03 01:58:34 +09:30
Daniel O'Connor
0e83a230b9 Helps not to render excess info 2016-06-03 01:54:26 +09:30
Daniel O'Connor
c278b36858 Up the various opengraph images to 200x200 2016-06-03 01:45:43 +09:30
pozorvlak
0805f86b86 Merge pull request #961 from cesy/issue476
Issue 476 edited by date on comments and posts
2016-06-02 16:53:44 +01:00
pozorvlak
aad88f1da6 Merge pull request #962 from CloCkWeRX/add_better_opengraph_squashed
Add better opengraph behaviour, fix facebook share thumbnail size
2016-06-02 16:52:13 +01:00
Daniel O'Connor
7550bc860f #816 Add better opengraph behaviour, fix facebook share thumbnail size 2016-06-03 01:01:03 +09:30
Cesy Avon
fc38e1edea Issue #476 test update 2016-06-02 14:58:10 +00:00
Daniel O'Connor
88a66a705b Update devise to 4.1.X and unpin 2016-06-03 00:23:58 +09:30
Daniel O'Connor
f77fd00931 Remove version pin for rspec-rails 2016-06-03 00:19:49 +09:30
Daniel O'Connor
b5c030905a Upgrade to geocoder current (we shouldn't be affected by the deprecations in 1.2.X or 1.3.X) 2016-06-03 00:16:00 +09:30
Daniel O'Connor
2844e13298 Upgrade factory_girl_rails, factory_girl 2016-06-03 00:10:25 +09:30
Cesy Avon
3e4dc1f9e3 Issue #875 typo causing test error 2016-06-02 14:39:56 +00:00
Cesy Avon
259c1e1731 Fix #476 show edited and posted date on posts and comments 2016-06-02 14:37:33 +00:00
Daniel O'Connor
870aa674b0 Upgrade autoprefixer-rails to current 2016-06-03 00:07:28 +09:30
Daniel O'Connor
b1ab319bf7 Update mime-types-data to current 2016-06-03 00:05:46 +09:30
Daniel O'Connor
857422719a Upgrade byebug to current 2016-06-03 00:04:09 +09:30
Daniel O'Connor
235314bc13 Upgrade js-routes to current 2016-06-03 00:03:48 +09:30
Daniel O'Connor
ac1cd88ae1 Upgrade kaminari to current 2016-06-03 00:01:38 +09:30
Daniel O'Connor
f93ea3c0a1 Upgrade httparty to current 2016-06-03 00:00:08 +09:30
Cesy Avon
0075040aab Fix #875 edited date on comments on homepage 2016-06-02 13:56:03 +00:00
Cesy
f9d51e623c Merge pull request #959 from pozorvlak/remove_capfile
Remove the Capistrano configuration file
2016-06-02 14:13:46 +01:00
Miles Gould
dcd36dcd67 Remove the Capistrano configuration file
Finishes work started in 93e468876d.
2016-06-02 13:45:53 +01:00
Cesy
608a921fce Merge pull request #956 from CloCkWeRX/upgrade_devise4
Upgrade to devise 4.0.*
2016-06-02 10:18:29 +01:00
pozorvlak
4bedf1e6ac Merge pull request #955 from CloCkWeRX/upgrade_geocoder
Swap to geocoder 1.1.9
2016-06-02 09:49:04 +01:00
pozorvlak
ac14c310f6 Merge pull request #954 from CloCkWeRX/ruby_231
Bump to Ruby 2.3.1
2016-06-02 09:48:20 +01:00
Daniel O'Connor
f979da315a Explicitly swap from config.email_regexp = /\A[^@\s]+@([^@\s]+\.)+[^@\W]+\z/
to the new default
2016-06-02 13:50:25 +09:30
Daniel O'Connor
a74ef7de6b Upgrade to devise 4.0.3 2016-06-02 13:49:13 +09:30
Daniel O'Connor
10064121a6 #953 Swap to geocoder 1.1.9; which is the release just after what we had previously pinned 2016-06-02 13:30:42 +09:30
Daniel O'Connor
f8a1ef6066 #952 Try ruby 2.3.1 2016-06-02 13:14:10 +09:30
Daniel O'Connor
40d7b11d90 #952 Try ruby 2.3.1 2016-06-02 13:13:52 +09:30
Mackenzie Morgan
1600dd9e0b Merge branch 'dev' of gitmaco:Growstuff/growstuff into add_bootstrap_flashes 2016-06-01 23:37:25 -04:00
pozorvlak
fbf5164eca Merge pull request #937 from dv2/dev
Add test coverage for Seeds Helper
2016-06-01 16:33:38 +01:00
DV Dasari
21d86a8c2d improve the test descriptions to be more readable 2016-06-01 09:46:22 -05:00
DV Dasari
848c7e117b Add test coverage for Seeds Helper 2016-06-01 09:46:22 -05:00
Cesy
369868672b Merge pull request #942 from pozorvlak/fix_coverage_calculations
Fix coverage calculations
2016-06-01 15:41:42 +01:00
Daniel O'Connor
321f3517a7 #920 Deal with .nil quantity of a seed in rendering helper 2016-06-01 23:26:43 +09:30
Miles Gould
6dd7ec9f95 Fix coverage calculations
SimpleCov was reporting 0% coverage for any files loaded before
`SimpleCov.start` was called, even if they were fully tested. This patch
loads the application *after* starting SimpleCov, leading to more
accurate coverage figures.
2016-06-01 14:54:13 +01:00
Cesy
dc00878ff9 Merge pull request #938 from Growstuff/dev
Release 11
2016-06-01 14:13:42 +01:00
Mackenzie Morgan
90f444dc1a Merge branch 'dev' of gitmaco:Growstuff/growstuff into add_bootstrap_flashes 2016-05-31 10:50:56 -04:00
Miles Gould
4fa2e273aa Merge remote-tracking branch 'origin/pr/933' into dev 2016-05-31 15:48:17 +01:00
pozorvlak
df92e0574a Merge pull request #934 from dv2/dev
Align links properly on "Forgot password page", "Resend confirmation" and "Resend unlock" pages
2016-05-31 15:46:27 +01:00
DV Dasari
e2053e2f8b adding me to CONTRIBUTORS.md 2016-05-31 07:33:40 -05:00
Eric Tillberg
31f0052b9d added to contributors list 2016-05-31 06:49:17 -04:00
pozorvlak
b6169778fd Merge pull request #932 from CloCkWeRX/location-not-set
Add a location not set layout (lets try this again!)
2016-05-31 11:41:11 +01:00
Mackenzie Morgan
32b98a7e40 Add support for Bootstrap alert types
* All alerts are currently shoved into either red (error) or green (success)
* Add support for yellow (warning) and blue (info) alert types

Solution from this Stack Overflow: http://stackoverflow.com/questions/31094771/rails-bootstrap-haml-how-to-convert-this-code-to-display-flash-messages-to
2016-05-30 21:48:11 -04:00
Daniel O'Connor
5111c2a96b Add sr-only text 2016-05-31 09:43:53 +09:30
Eric Tillberg
2ac901c891 feature test for issue 910 2016-05-30 09:06:09 -04:00
Mackenzie
ff4466951c Merge pull request #935 from CloCkWeRX/remove_crowdfunding
Remove crowdfunding code
2016-05-29 23:27:22 -04:00
Daniel O'Connor
8f05e254a2 Remove crowdfunding code 2016-05-30 10:06:51 +09:30
DV Dasari
5122903139 align links on "Resend unlock instructions" page 2016-05-29 18:25:01 -05:00
DV Dasari
1344f776e4 align devise shared links properly on "Resend confirmation instructions" page 2016-05-29 18:23:57 -05:00
DV Dasari
f33367ebac align devise shared links properly on "Forgot your password" page 2016-05-29 18:19:15 -05:00
Eric Tillberg
3ac42deae5 crop approval flash alert for wranglers upon sign in 2016-05-29 16:13:21 -04:00
Daniel O'Connor
3d04e7c125 Add list-inline to ensure the sidebar never conflicts with other content 2016-05-28 09:30:54 +09:30
Daniel O'Connor
fa77f11177 Based on MIT licenced icon-globe (http://fontawesome.io/3.2.1/icon/globe/) 2016-05-28 09:26:00 +09:30
pozorvlak
45c8767234 Merge pull request #922 from maco/bug-#848
Swap over to having "(Optional)" (or translation) after optional form…
2016-05-27 17:41:42 +01:00
Mackenzie Morgan
13dc87f368 Optional field improvements
* Added custom matcher `have_optional(field id name goes here)`
* Fix partial
* Add tests
2016-05-27 11:26:36 -04:00
Mackenzie Morgan
fc0116182f Merge branch 'dev' of gitmaco:Growstuff/growstuff into bug-#848 2016-05-27 11:24:37 -04:00
Mackenzie
bbe9f3f1db Merge pull request #927 from pozorvlak/delete_puts_in_spec
Remove warnings and debugging puts from rspec output
2016-05-27 11:21:52 -04:00
Miles Gould
1009570102 Check href attribute of links in planting reminder
To check the target of a link, you need to pass it to `has_link` as an
`href` keyword argument. We were passing it as a positional argument,
which meant that

 - it was ignored, weakening the tests
 - the output of rspec filled up with annoying warnings.

Fixes #928.
2016-05-27 15:46:21 +01:00
Mackenzie Morgan
47f42d0ffa Merge branch 'dev' of gitmaco:Growstuff/growstuff into bug-#848 2016-05-27 10:22:35 -04:00
Miles Gould
23d21be73f Delete debugging puts statement from spec
Fixes the "rspec output includes an HTML page dump" issue noted at
2089866756 (diff-6464240396bc745d7e89a408c200fd3aR15)
2016-05-27 14:04:30 +01:00
pozorvlak
25f8d2ca44 Merge pull request #924 from maco/capybara-tools
Add capybara-screenshot to assist with feature testing
2016-05-27 13:18:26 +01:00
pozorvlak
58d91ec0b0 Merge pull request #923 from maco/bug-#854
Display one line of description in harvest card, then go to ellipsis …
2016-05-27 12:17:10 +01:00
pozorvlak
85cc9868cb Merge pull request #925 from maco/bug-#906
Capture originalText from the button that's been clicked, not from…
2016-05-27 11:24:08 +01:00
Mackenzie Morgan
75631da398 Set filename of screenshot to test name 2016-05-27 00:21:02 -04:00
Mackenzie Morgan
03c74dae03 Capture originalText from the button that's been clicked, not from the array of all possible date-picker buttons.
Fixes #906
2016-05-26 23:55:49 -04:00
Mackenzie Morgan
2089866756 Display one line of description in harvest card, then go to ellipsis and put read more on next line
Fixes #854
2016-05-26 23:08:23 -04:00
Mackenzie Morgan
8d982c7e3e Add capybara-screenshot to assist with feature testing 2016-05-26 22:39:58 -04:00
Mackenzie Morgan
079cecc529 Swap over to having "(Optional)" (or translation) after optional form elements rather than using placeholder text
Fixes #848
2016-05-26 16:53:46 -04:00
pozorvlak
b0d90f6fd5 Merge pull request #921 from maco/bug-#876
Use standardized & translateable strings for the photo show page
2016-05-26 17:50:12 +01:00
Mackenzie Morgan
58f4ae32d0 test update 2016-05-26 12:28:58 -04:00
Mackenzie Morgan
dd0373a3ee Use standardized & translateable strings for the photo show page
Fixes #876
2016-05-26 11:51:46 -04:00
pozorvlak
170dca7086 Merge pull request #918 from maco/bug-#855
Stop hard-coding strings for pagination
2016-05-26 13:00:33 +01:00
pozorvlak
c930f04b5a Merge pull request #905 from maco/photos
refactor photo controller create for readability
2016-05-26 12:57:29 +01:00
Cesy
f41d919ca8 Merge pull request #916 from maco/bug_873
make seed card heading link to seed page and add owner link. Fixes #873
2016-05-26 09:58:37 +01:00
Cesy
8c4583b0d3 Merge pull request #915 from maco/autocomplete_dropdown
set background color on autocomplete dropdown. Fixes #914
2016-05-26 09:57:02 +01:00
Mackenzie Morgan
972518e9fc Stop hard-coding strings for pagination
Use translation template to set singular/other strings
for .model_name

Fixes #855
2016-05-25 23:15:36 -04:00
pozorvlak
5b38fad85e Merge pull request #912 from maco/small_fixes
Fix two small things (including: make tests stop failing)
2016-05-25 23:25:47 +01:00
Mackenzie Morgan
d227601627 Add config/factory_girl.rb so that rspec doesn't fail with a confusing
'Could not find mapping for #<Member...' error
http://blog.thefrontiergroup.com.au/2011/03/reloading-factory-girl-factories-in-the-rails-3-console/
2016-05-25 17:35:57 -04:00
Mackenzie Morgan
736e45aec9 update Gemfile.lock for code climate 2016-05-25 17:35:23 -04:00
Mackenzie Morgan
11e2e86b06 make seed card heading link to seed page and add owner link. Fixes #873 2016-05-25 16:21:17 -04:00
Mackenzie Morgan
58617b5685 set background color on autocomplete dropdown. Fixes #914 2016-05-25 16:07:49 -04:00
Mackenzie Morgan
8c2aa4844f use CW's case statement idea 2016-05-25 15:15:09 -04:00
Mackenzie Morgan
8648db5518 create SimpleShow concern for models where show's json call is simple 2016-05-25 13:37:01 -04:00
Mackenzie Morgan
b5b201b6df bundle 2016-05-25 10:38:06 -04:00
Mackenzie Morgan
b601fe40b3 refactor photo controller create for readability 2016-05-24 16:59:52 -04:00
pozorvlak
d6999b2a8a Merge pull request #879 from Growstuff/code_climate
Add code climate to README
2016-05-23 19:00:26 +01:00
Mackenzie Morgan
76f152aa35 add Code Climate config file 2016-05-23 13:07:18 -04:00
pozorvlak
63f8a2c5c0 Merge pull request #897 from maco/menu_fix
darken navbar item text when it opens (and the background turns light)
2016-05-23 12:25:22 +01:00
pozorvlak
ae482ecab6 Merge pull request #802 from cesy/issue690
Issue 690 Switch on CMS and remove old files
2016-05-23 12:24:49 +01:00
pozorvlak
a8e63ab397 Merge pull request #898 from CloCkWeRX/adjust_plantings_card_ui
Improve the styling of a planting to be more like the other card-layouts
2016-05-23 12:17:47 +01:00
pozorvlak
a2717ad058 Merge pull request #900 from CloCkWeRX/clip_long_text
Clip long text in definition lists within panels
2016-05-23 12:07:32 +01:00
Daniel O'Connor
083035c924 Merge branch 'dev' of github.com:Growstuff/growstuff into add_facebook_signup 2016-05-23 16:58:22 +09:30
Daniel O'Connor
92cce5910e Improve planting card UI on mobile 2016-05-23 16:35:58 +09:30
Daniel O'Connor
ab897f05f9 Use panel-body and panel-heading more effectively 2016-05-23 16:21:13 +09:30
Daniel O'Connor
cd8ca02322 Merge remote-tracking branch 'upstream/dev' into adjust_plantings_card_ui 2016-05-23 16:17:39 +09:30
Daniel O'Connor
5104225d11 #856 Clip long text in definition lists within panels 2016-05-23 16:13:53 +09:30
Mackenzie
24d6087ea7 Merge pull request #899 from CloCkWeRX/improve_nearby_places_links
Improve nearby places links
2016-05-22 23:39:53 -04:00
Daniel O'Connor
dc9ee18e96 Update stale test expectation 2016-05-23 12:56:37 +09:30
Daniel O'Connor
b4060b7903 Update stale test expectation 2016-05-23 12:55:50 +09:30
Daniel O'Connor
884a3aad2c Check we have a location before linking to it 2016-05-23 11:51:14 +09:30
Daniel O'Connor
80f826421b Add page anchors to put you to the area you are most interested in 2016-05-23 11:41:42 +09:30
Daniel O'Connor
7872bb48e2 Fixes #872 Add more links and explain them better 2016-05-23 11:35:49 +09:30
Daniel O'Connor
7d10101c57 For a place, talk about the community as a vaguer way of explaining 'members, seeds, plantings, etc' 2016-05-23 11:31:29 +09:30
Daniel O'Connor
d9ed21ba53 Styling the show view of a planting more like the card view (though 100% card view looks funny with the crop thumbnail floating to the right) 2016-05-23 11:24:32 +09:30
Daniel O'Connor
5e8211172b Only show a heading for Notes if there are notes 2016-05-23 11:12:42 +09:30
Daniel O'Connor
24956255d7 Fix layout of view all plantings link 2016-05-23 11:03:23 +09:30
Daniel O'Connor
55380dab04 Fix style regression by moving garden content properly into the container 2016-05-23 10:58:09 +09:30
Daniel O'Connor
e7926b6f22 Improve the styling of a planting to be more like the other card-layouts 2016-05-23 10:48:49 +09:30
Mackenzie Morgan
fe7d8f73f3 darken navbar item text when it opens (and the background turns light)
Fixes #896
2016-05-22 20:49:51 -04:00
Mackenzie
47d7f001fe Merge pull request #895 from cesy/precompile
Precompile css and js with sass
2016-05-22 15:10:43 -04:00
Cesy Avon
23a6722ddb Precompile css and js with sass 2016-05-22 16:34:36 +00:00
Cesy
23e2b756fd Merge pull request #886 from pozorvlak/fix_duplicated_class_warning
Fix "duplicated key: :class" warning in HAML code
2016-05-22 17:21:47 +01:00
pozorvlak
8bea05a77b Merge pull request #803 from cesy/issue734bootstrapaccessibility
Bootstrap accessibility
2016-05-22 17:19:55 +01:00
Cesy
d5ac4bac48 Merge pull request #894 from pozorvlak/upgradegibbon
Fix mailchimp newsletter subscriptions
2016-05-22 17:13:59 +01:00
pozorvlak
1af9b2e6db Merge pull request #892 from cesy/databaseconfig
Moving database.yml and adding gitignore
2016-05-22 17:09:35 +01:00
Cesy
daa3c08706 Fixing broken links to pages that are now in CMS 2016-05-22 16:05:07 +00:00
Cesy
29102e3b52 Cleaning up more tests 2016-05-22 16:05:07 +00:00
Cesy
8c0fc54344 Sorting tests related to moving to CMS 2016-05-22 16:04:39 +00:00
Cesy
f5b20c2f32 About is empty, policy won't work without the routes 2016-05-22 16:01:40 +00:00
Cesy
79734ff603 Fix #690 Removing old static files that are now in CMS 2016-05-22 16:01:40 +00:00
twconquest
397bfd8bca Start removing static page references. 2016-05-22 16:01:40 +00:00
Miles Gould
52dc111210 Merge branch 'dev' into upgradegibbon 2016-05-22 16:57:38 +01:00
Cesy Avon
da1375e34d Making database.yml locally editable 2016-05-22 15:50:22 +00:00
Miles Gould
79db3c4c1d Fix "duplicated key: :class" warning in HAML code
The warning was

    app/views/harvests/_form.html.haml:32: warning: duplicated key at line 32 ignored: :class

We were specifying two `:class` attributes on an HTML tag; I've combined
them into one.
2016-05-19 14:40:24 +01:00
Mackenzie
925027f7f0 add code climate test reporter 2016-05-17 14:02:42 -04:00
Mackenzie
1442a9106c add code climate / travis gem 2016-05-17 13:58:55 -04:00
Mackenzie
fafb421a51 Add code climate to README
Our code climate score is *abysmal*, but now that I've been using it in my job for a few months, I have some ideas how to improve it. It's all about clean code (check out the book of that name from your local library) and readability. So let's add the grade to the README, and I'll figure out how to set it up so that Code Climate is run on pull requests automatically (telling us whether things are going to get better or worse with every PR).
2016-05-17 13:47:33 -04:00
Daniel O'Connor
f81666da5e And cleanup authentications 2015-09-15 12:58:35 +09:30
Daniel O'Connor
4a1bc9f6c0 Avoid test data conflicts and update expectations 2015-09-15 12:44:12 +09:30
Daniel O'Connor
0652c40c52 Avoid test data conflicts causing signup to act as signin-for-existing 2015-09-15 12:34:20 +09:30
Daniel O'Connor
a99145b705 Implement pending spec 2015-09-15 12:27:17 +09:30
Daniel O'Connor
222f875c42 Add more coverage of various scenarios and expected behaviours 2015-09-15 12:26:32 +09:30
Daniel O'Connor
dc983d4863 Add more coverage of various scenarios and expected behaviours 2015-09-15 12:24:37 +09:30
Daniel O'Connor
7256c28038 Refactor to a separate class, containing domain logic 2015-09-15 12:13:47 +09:30
Daniel O'Connor
021cb4f93b Use #{ENV['GROWSTUFF_SITE_NAME']} 2015-09-15 11:38:20 +09:30
Daniel O'Connor
00ca01dc33 Add coverage of the most basic scenarios around sign up and login 2015-09-15 11:20:33 +09:30
twconquest
b2f3755196 Additional config fix to point to correct list id 2015-09-09 19:48:35 +00:00
Daniel O'Connor
c09b0a0341 Merge branch 'dev' into add_facebook_signup 2015-08-27 12:19:48 +09:30
Daniel O'Connor
8a739b31a1 Minor style 2015-08-27 12:18:09 +09:30
Daniel O'Connor
afec210219 #645 #556 Add facebook links 2015-08-27 12:02:48 +09:30
Daniel O'Connor
dafee90b24 #645 #556 Add facebook auth management 2015-08-27 11:56:37 +09:30
Daniel O'Connor
f6790a5f9b #556 When an avatar is set from an oauth provider, don't encourage the user to update gravatar. 2015-08-27 11:52:49 +09:30
Daniel O'Connor
4983a6dfb3 #556 Improve user avatar sizing 2015-08-27 11:42:36 +09:30
Daniel O'Connor
c4c477fdd8 Merge branch 'add_facebook_signup' into dev 2015-08-27 11:31:07 +09:30
Daniel O'Connor
20b89f0d2f #556 Default to the oauth provided image on account creation 2015-08-27 11:27:15 +09:30
Daniel O'Connor
9564866f6d #645 Avoid collisions by using a 20 character random string as a fallback 2015-08-24 17:33:28 +09:30
Daniel O'Connor
994296640b #645 Implement all of finish signup, fix an edge case of an authentication without a member, fix error messages on failed oauth. 2015-08-24 16:20:39 +09:30
Daniel O'Connor
9a68c7e1c3 #645 Add a 'finish signup' flow 2015-08-24 11:41:36 +09:30
Daniel O'Connor
ec597d4e6e #645 Fix minor logic error 2015-08-24 11:23:41 +09:30
twconquest
2882e3d1a5 Correct Gibbon list id to point to correct list 2015-08-21 19:29:03 +00:00
Daniel O'Connor
86e9cd0ec6 #645 Improve error handling and login_name generation. Annoyingly still a change of collisions. 2015-08-21 13:43:58 +09:30
Daniel O'Connor
3a05f75ab0 #645 Add notes around permissions/scopes of later interest 2015-08-21 13:43:24 +09:30
Daniel O'Connor
34b4d30014 #645 Enable account creation or authorisation from a facebook signin (and should work for others with minimal extra work) 2015-08-21 13:22:49 +09:30
Daniel O'Connor
89b6c47bfb #645 Configure devise / omniauth in only one spot, to avoid CSRF errors 2015-08-21 12:21:55 +09:30
Daniel O'Connor
70f48108b4 #645 Add handling for facebook 2015-08-21 12:21:23 +09:30
Daniel O'Connor
df5689ec18 #645 Rename 2015-08-21 11:36:26 +09:30
Daniel O'Connor
22d72b13d5 #645 Add example keys 2015-08-21 11:36:17 +09:30
Daniel O'Connor
dee7ff34c9 #645 Indicate that a member is omniauthable, so devise knows to render sign-in-with-facebook 2015-08-21 11:36:04 +09:30
Daniel O'Connor
07eb305992 #645 Ask for name, email address only 2015-08-21 11:25:57 +09:30
Daniel O'Connor
c7f0076ee6 #645 Add facebook omniauth middleware 2015-08-21 11:21:44 +09:30
Daniel O'Connor
93bc5255e7 #645 Add facebook omniauth provider 2015-08-21 11:21:30 +09:30
Cesy
e8266480e5 Adding bootstrap-accessibility plugin 2015-08-12 14:17:41 +00:00
685 changed files with 6014 additions and 55073 deletions

40
.codeclimate.yml Normal file
View File

@@ -0,0 +1,40 @@
engines:
rubocop:
enabled: true
scss-lint:
enabled: true
shellcheck:
enabled: true
eslint:
enabled: true
coffeelint:
enabled: true
brakeman:
enabled: true
bundler-audit:
enabled: true
duplication:
enabled: true
config:
languages:
- ruby
- javascript
fixme:
enabled: true
exclude_fingerprints: # rubocop_todo filename
- 63b8552079d106832fbe281566b6d028
- d38afbaaea3ecaa9a4cf046b07a01cec
- 57ff3968fd371d3e1f75c237d6c78acf
ratings:
paths:
- "**.rb"
- "**.js"
- "**.coffee"
- "**.sass"
- "**.haml"
- Gemfile.lock
exclude_paths:
- config/
- db/
- spec/
- public/

2
.gitignore vendored
View File

@@ -8,10 +8,10 @@ coverage
*~
*.DS_Store
config/application.yml
config/database.yml
credentials*.sh
Pathogen:
custom_plan.rb
zeus.json
.bundle
config/application.yml
.idea/**

48
.rubocop.yml Normal file
View File

@@ -0,0 +1,48 @@
inherit_from: .rubocop_todo.yml
AllCops:
Include:
- 'Rakefile'
- 'config.ru'
- 'lib/**/*.rake'
Exclude:
- 'db/schema.rb'
- 'vendor/**/*'
Style/StringLiterals:
Enabled: false
Metrics/MethodLength:
Description: 'Avoid methods longer than 30 lines of code.'
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#short-methods'
# Set to 30 once all methods are fixed.
# Max: 30
Max: 104
# Remove the following once the code style matches
# Offense count: 59
Metrics/AbcSize:
Max: 115
# Offense count: 5
# Configuration parameters: CountComments.
Metrics/BlockLength:
Max: 62
# Offense count: 6
# Configuration parameters: CountComments.
Metrics/ClassLength:
Max: 275
# Offense count: 6
Metrics/CyclomaticComplexity:
Max: 11
# Offense count: 1108
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives.
# URISchemes: http, https
Metrics/LineLength:
Max: 223
# Offense count: 8
Metrics/PerceivedComplexity:
Max: 12

2504
.rubocop_todo.yml Normal file
View File

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1 @@
2.2.4
2.3.1

View File

@@ -1,6 +1,9 @@
sudo: false
language: ruby
cache: bundler
cache:
bundler: true
directories:
- travis_phantomjs
env:
matrix:
- GROWSTUFF_SITE_NAME="Growstuff (travis)" RAILS_SECRET_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' GROWSTUFF_ELASTICSEARCH='true'
@@ -8,10 +11,19 @@ env:
global:
secure: "Z5TpM2jEX4UCvNePnk/LwltQX48U2u9BRc+Iypr1x9QW2o228QJhPIOH39a8RMUrepGnkQIq9q3ZRUn98RfrJz1yThtlNFL3NmzdQ57gKgjGwfpa0e4Dwj/ZJqV2D84tDGjvdVYLP7zzaYZxQcwk/cgNpzKf/jq97HLNP7CYuf4="
rvm:
- 2.2.4
- 2.3.1
before_install:
- export PATH=$PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64/bin:$PATH
- if [ $(phantomjs --version) != '2.1.1' ]; then rm -rf $PWD/travis_phantomjs; mkdir -p $PWD/travis_phantomjs; fi
- if [ $(phantomjs --version) != '2.1.1' ]; then wget https://assets.membergetmember.co/software/phantomjs-2.1.1-linux-x86_64.tar.bz2 -O $PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2; fi
- if [ $(phantomjs --version) != '2.1.1' ]; then tar -xvf $PWD/travis_phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C $PWD/travis_phantomjs; fi
- phantomjs --version
before_script:
- psql -c 'create database growstuff_test;' -U postgres
script:
- bundle exec rubocop --display-cop-names --rails
- script/gemfile_check
- bundle exec script/check_contributors_md
- bundle exec rake db:migrate --trace
- bundle exec rspec spec/
services:
@@ -34,4 +46,6 @@ deploy:
- restart
after_deploy:
- bundle exec script/heroku_maintenance.rb off
addons:
code_climate:
repo_token: 462e015bbdaabfb20910fc07f2fea253410ecb131444e00f97dbf32dc6789ca6

View File

@@ -66,3 +66,9 @@ submit the change with your pull request.
- Anthony Atkinson / [sha1sum](https://github.com/sha1sum)
- Terence Conquest / [twconquest](https://github.com/twconquest)
- Daniel O'Connor / [CloCkWeRX](https://github.com/CloCkWeRX)
- DV Dasari / [dv2](https://github.com/dv2)
- Eric Tillberg / [Thrillberg](https://github.com/Thrillberg)
- Lucas Nogueira / [lucasnogueira](https://github.com/lucasnogueira)
- Charley Lewittes / [ctlewitt](https://github.com/ctlewitt)
- Kristine Nicole Polvoriza / [polveenomials](https://github.com/polveenomials)
- Brenda Wallace / [br3nda](https://github.com/br3nda)

View File

@@ -1,4 +0,0 @@
load 'deploy'
# Uncomment if you are using Rails' asset pipeline
# load 'deploy/assets'
load 'config/deploy' # remove this line to skip loading any of the default tasks

39
Gemfile
View File

@@ -1,8 +1,9 @@
# frozen_string_literal: true
source 'https://rubygems.org'
ruby '2.2.4'
ruby '2.3.1'
gem 'rails', '~> 4.1.11'
gem 'rails', '~> 4.2.1'
gem 'bundler', '>=1.1.5'
@@ -14,11 +15,11 @@ gem 'haml'
gem 'bootstrap-sass', '~> 3.3.6'
gem 'font-awesome-sass'
gem 'uglifier', '~> 2.7.2' # JavaScript compressor
gem 'uglifier', '~> 2.7.2' # JavaScript compressor
gem 'jquery-rails'
gem 'jquery-ui-rails', '~> 5.0.2'
gem 'js-routes' # provides access to Rails routes in Javascript
gem 'js-routes' # provides access to Rails routes in Javascript
gem 'flickraw'
gem 'leaflet-rails'
@@ -36,13 +37,9 @@ gem 'comfortable_mexican_sofa', '~> 1.12.0' # content management system
gem 'kaminari' # pagination
gem 'bootstrap-kaminari-views' # bootstrap views for kaminari
# vendored activemerchant for testing- needed for bogus paypal
# gateway monkeypatch
gem 'activemerchant', '1.33.0',
:path => 'vendor/gems/activemerchant-1.33.0',
:require => 'active_merchant'
gem 'active_utils', '1.0.5',
:path => 'vendor/gems/active_utils-1.0.5'
gem 'activemerchant'
gem 'active_utils'
gem 'sidekiq'
# Markdown formatting for updates etc
gem 'bluecloth'
@@ -51,7 +48,7 @@ gem 'bluecloth'
gem 'will_paginate', '~> 3.0'
# user signup/login/etc
gem 'devise', '~> 3.5.0'
gem 'devise', '>= 4.0.0'
# nicely formatted URLs
gem 'friendly_id', '~> 5.0.4'
@@ -60,9 +57,7 @@ gem 'friendly_id', '~> 5.0.4'
gem 'gravatar-ultimate'
# For geolocation
gem 'geocoder',
:git => 'https://github.com/alexreisner/geocoder.git',
:ref => '104d46'
gem 'geocoder'
# For easy calendar selection
gem 'bootstrap-datepicker-rails'
@@ -71,9 +66,10 @@ gem 'bootstrap-datepicker-rails'
gem 'omniauth'
gem 'omniauth-twitter'
gem 'omniauth-flickr', '>= 0.0.15'
gem 'omniauth-facebook'
# client for Elasticsearch. Elasticsearch is a flexible
# and powerful, distributed, real-time search and analytics engine.
# and powerful, distributed, real-time search and analytics engine.
# An example of the use in the project is fuzzy crop search.
gem "elasticsearch-model"
gem "elasticsearch-rails"
@@ -85,7 +81,8 @@ group :production, :staging do
gem 'dalli'
gem 'memcachier'
gem 'rails_12factor' # supresses heroku plugin injection
gem 'bonsai-elasticsearch-rails' # Integration with Bonsa-Elasticsearch on heroku
gem 'bonsai-elasticsearch-rails' # Integration with Bonsa-Elasticsearch on heroku
gem 'sparkpost_rails'
end
group :development do
@@ -103,18 +100,22 @@ end
group :development, :test do
gem 'haml-rails' # HTML templating language
gem 'rspec-rails', '~> 3.4.0' # unit testing framework
gem 'rspec-rails' # unit testing framework
gem 'rspec-activemodel-mocks'
gem 'byebug' # debugging
gem 'database_cleaner', '~> 1.5.0'
gem 'webrat' # provides HTML matchers for view tests
gem 'factory_girl_rails', '~> 4.5.0' # for creating test data
gem 'factory_girl_rails' # for creating test data
gem 'coveralls', require: false # coverage analysis
gem 'capybara' # integration tests
gem 'capybara-email' # integration tests for email
gem 'capybara-screenshot' # for test debugging
gem 'poltergeist', '~> 1.6' # for headless JS testing
gem 'i18n-tasks' # adds tests for finding missing and unused translations
gem 'selenium-webdriver'
gem "codeclimate-test-reporter", group: :test, require: nil
gem "active_merchant-paypal-bogus-gateway"
gem 'rubocop', require: false
end
group :travis do

View File

@@ -1,57 +1,57 @@
GIT
remote: https://github.com/alexreisner/geocoder.git
revision: 104d466ba7097b7dce5ba19f8e4091b7f69ccdf6
ref: 104d46
specs:
geocoder (1.1.8)
PATH
remote: vendor/gems/active_utils-1.0.5
specs:
active_utils (1.0.5)
activesupport (>= 2.3.11)
i18n
PATH
remote: vendor/gems/activemerchant-1.33.0
specs:
activemerchant (1.33.0)
GEM
remote: https://rubygems.org/
specs:
actionmailer (4.1.15)
actionpack (= 4.1.15)
actionview (= 4.1.15)
actionmailer (4.2.7.1)
actionpack (= 4.2.7.1)
actionview (= 4.2.7.1)
activejob (= 4.2.7.1)
mail (~> 2.5, >= 2.5.4)
actionpack (4.1.15)
actionview (= 4.1.15)
activesupport (= 4.1.15)
rack (~> 1.5.2)
rails-dom-testing (~> 1.0, >= 1.0.5)
actionpack (4.2.7.1)
actionview (= 4.2.7.1)
activesupport (= 4.2.7.1)
rack (~> 1.6)
rack-test (~> 0.6.2)
actionview (4.1.15)
activesupport (= 4.1.15)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (4.2.7.1)
activesupport (= 4.2.7.1)
builder (~> 3.1)
erubis (~> 2.7.0)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
active_link_to (1.0.3)
actionpack
activemodel (4.1.15)
activesupport (= 4.1.15)
active_merchant-paypal-bogus-gateway (0.1.0)
activemerchant
active_utils (3.2.2)
activesupport (>= 3.2, < 5.1.0)
i18n
activejob (4.2.7.1)
activesupport (= 4.2.7.1)
globalid (>= 0.3.0)
activemerchant (1.60.0)
activesupport (>= 3.2.14, < 5.1)
builder (>= 2.1.2, < 4.0.0)
i18n (>= 0.6.9)
nokogiri (~> 1.4)
activemodel (4.2.7.1)
activesupport (= 4.2.7.1)
builder (~> 3.1)
activerecord (4.1.15)
activemodel (= 4.1.15)
activesupport (= 4.1.15)
arel (~> 5.0.0)
activesupport (4.1.15)
i18n (~> 0.6, >= 0.6.9)
activerecord (4.2.7.1)
activemodel (= 4.2.7.1)
activesupport (= 4.2.7.1)
arel (~> 6.0)
activesupport (4.2.7.1)
i18n (~> 0.7)
json (~> 1.7, >= 1.7.7)
minitest (~> 5.1)
thread_safe (~> 0.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
addressable (2.4.0)
arel (5.0.1.20140414130214)
ast (2.2.0)
autoprefixer-rails (6.3.6.1)
arel (6.0.3)
ast (2.3.0)
autoprefixer-rails (6.4.0.2)
execjs
bcrypt (3.1.11)
better_errors (2.1.1)
@@ -62,19 +62,19 @@ GEM
debug_inspector (>= 0.0.1)
bluecloth (2.2.0)
bonsai-elasticsearch-rails (0.0.4)
bootstrap-datepicker-rails (1.6.1.1)
bootstrap-datepicker-rails (1.6.4.1)
railties (>= 3.0)
bootstrap-kaminari-views (0.0.5)
kaminari (>= 0.13)
rails (>= 3.1)
bootstrap-sass (3.3.6)
bootstrap-sass (3.3.7)
autoprefixer-rails (>= 5.2.1)
sass (>= 3.3.4)
bootstrap_form (2.3.0)
bootstrap_form (2.5.0)
builder (3.2.2)
byebug (9.0.4)
cancancan (1.14.0)
capybara (2.7.1)
byebug (9.0.5)
cancancan (1.15.0)
capybara (2.8.0)
addressable
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
@@ -84,6 +84,9 @@ GEM
capybara-email (2.5.0)
capybara (~> 2.4)
mail
capybara-screenshot (1.0.13)
capybara (>= 1.0, < 3)
launchy
childprocess (0.5.9)
ffi (~> 1.0, >= 1.0.11)
climate_control (0.0.3)
@@ -91,8 +94,10 @@ GEM
cliver (0.3.2)
cocaine (0.5.8)
climate_control (>= 0.0.3, < 1.0)
codemirror-rails (5.11)
railties (>= 3.0, < 5)
codeclimate-test-reporter (0.6.0)
simplecov (>= 0.7.1, < 1.0.0)
codemirror-rails (5.16.0)
railties (>= 3.0, < 6.0)
coderay (1.1.1)
coffee-rails (4.1.1)
coffee-script (>= 2.2.0)
@@ -117,23 +122,23 @@ GEM
rails-i18n (>= 4.0.0)
sass-rails (>= 4.0.3)
concurrent-ruby (1.0.2)
coveralls (0.8.13)
json (~> 1.8)
simplecov (~> 0.11.0)
connection_pool (2.2.0)
coveralls (0.8.15)
json (>= 1.8, < 3)
simplecov (~> 0.12.0)
term-ansicolor (~> 1.3)
thor (~> 0.19.1)
tins (~> 1.6.0)
csv_shaper (1.2.0)
tins (>= 1.6.0, < 2)
csv_shaper (1.3.0)
activesupport (>= 3.0.0)
dalli (2.7.6)
database_cleaner (1.5.3)
debug_inspector (0.0.2)
devise (3.5.10)
devise (4.2.0)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 3.2.6, < 5)
railties (>= 4.1.0, < 5.1)
responders
thread_safe (~> 0.1)
warden (~> 1.2.3)
diff-lcs (1.2.5)
docile (1.1.5)
@@ -141,41 +146,44 @@ GEM
json
thread
thread_safe
elasticsearch (1.0.17)
elasticsearch-api (= 1.0.17)
elasticsearch-transport (= 1.0.17)
elasticsearch-api (1.0.17)
elasticsearch (2.0.0)
elasticsearch-api (= 2.0.0)
elasticsearch-transport (= 2.0.0)
elasticsearch-api (2.0.0)
multi_json
elasticsearch-model (0.1.9)
activesupport (> 3)
elasticsearch (> 0.4)
hashie
elasticsearch-rails (0.1.9)
elasticsearch-transport (1.0.17)
elasticsearch-transport (2.0.0)
faraday
multi_json
erubis (2.7.0)
excon (0.49.0)
excon (0.51.0)
execjs (2.7.0)
factory_girl (4.5.0)
factory_girl (4.7.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.5.0)
factory_girl (~> 4.5.0)
factory_girl_rails (4.7.0)
factory_girl (~> 4.7.0)
railties (>= 3.0.0)
faraday (0.9.2)
multipart-post (>= 1.2, < 3)
ffi (1.9.10)
ffi (1.9.14)
figaro (1.1.1)
thor (~> 0.14)
flickraw (0.9.8)
flickraw (0.9.9)
font-awesome-sass (4.6.2)
sass (>= 3.2)
formatador (0.2.5)
friendly_id (5.0.5)
activerecord (>= 4.0.0)
gibbon (1.2.0)
geocoder (1.3.7)
gibbon (1.2.1)
httparty
multi_json (>= 1.9.0)
globalid (0.3.7)
activesupport (>= 4.1.0)
gravatar-ultimate (2.0.0)
activesupport (>= 2.3.14)
rack
@@ -189,7 +197,7 @@ GEM
shellany (~> 0.0)
thor (>= 0.18.1)
guard-compat (1.2.1)
guard-rspec (4.6.5)
guard-rspec (4.7.3)
guard (~> 2.1)
guard-compat (~> 1.1)
rspec (>= 2.99.0, < 4.0)
@@ -211,8 +219,7 @@ GEM
haml (~> 4.0.0)
nokogiri (~> 1.6.0)
ruby_parser (~> 3.5)
httparty (0.13.3)
json (~> 1.8)
httparty (0.14.0)
multi_xml (>= 0.5.2)
i18n (0.7.0)
i18n-tasks (0.9.5)
@@ -225,20 +232,22 @@ GEM
parser (>= 2.2.3.0)
term-ansicolor (>= 1.3.2)
terminal-table (>= 1.5.1)
jquery-rails (3.1.4)
railties (>= 3.0, < 5.0)
jquery-rails (4.2.1)
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
jquery-ui-rails (5.0.5)
railties (>= 3.2.16)
js-routes (1.2.5)
js-routes (1.3.0)
railties (>= 3.2)
sprockets-rails
json (1.8.3)
kaminari (0.16.3)
jwt (1.5.4)
kaminari (0.17.0)
actionpack (>= 3.0.0)
activesupport (>= 3.0.0)
kgio (2.10.0)
kramdown (1.11.1)
kramdown (1.12.0)
launchy (2.4.3)
addressable (~> 2.3)
leaflet-markercluster-rails (0.7.0)
@@ -250,77 +259,103 @@ GEM
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
ruby_dep (~> 1.2)
loofah (2.0.3)
nokogiri (>= 1.5.9)
lumberjack (1.0.10)
mail (2.6.4)
mime-types (>= 1.16, < 4)
memcachier (0.0.2)
method_source (0.8.2)
mime-types (3.0)
mime-types (3.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2016.0221)
mimemagic (0.3.0)
mini_portile2 (2.0.0)
mime-types-data (3.2016.0521)
mimemagic (0.3.2)
mini_portile2 (2.1.0)
minitest (5.9.0)
multi_json (1.11.3)
multi_xml (0.5.5)
multipart-post (2.0.0)
nenv (0.3.0)
newrelic_rpm (3.15.2.317)
nokogiri (1.6.7.2)
mini_portile2 (~> 2.0.0.rc2)
notiffany (0.1.0)
newrelic_rpm (3.16.1.320)
nokogiri (1.6.8)
mini_portile2 (~> 2.1.0)
pkg-config (~> 1.1.7)
notiffany (0.1.1)
nenv (~> 0.1)
shellany (~> 0.0)
oauth (0.5.1)
oauth2 (1.2.0)
faraday (>= 0.8, < 0.10)
jwt (~> 1.0)
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
omniauth (1.3.1)
hashie (>= 1.2, < 4)
rack (>= 1.0, < 3)
omniauth-facebook (3.0.0)
omniauth-oauth2 (~> 1.2)
omniauth-flickr (0.0.19)
multi_json (~> 1.11.0)
omniauth-oauth (~> 1.0)
omniauth-oauth (1.1.0)
oauth
omniauth (~> 1.0)
omniauth-oauth2 (1.4.0)
oauth2 (~> 1.0)
omniauth (~> 1.2)
omniauth-twitter (1.2.1)
json (~> 1.3)
omniauth-oauth (~> 1.1)
orm_adapter (0.5.0)
paperclip (4.3.6)
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
paperclip (5.1.0)
activemodel (>= 4.2.0)
activesupport (>= 4.2.0)
cocaine (~> 0.5.5)
mime-types
mimemagic (= 0.3.0)
parser (2.3.1.0)
mimemagic (~> 0.3.0)
parser (2.3.1.2)
ast (~> 2.2)
pg (0.18.4)
pkg-config (1.1.7)
plupload-rails (1.2.1)
rails (>= 3.1)
poltergeist (1.9.0)
poltergeist (1.10.0)
capybara (~> 2.1)
cliver (~> 0.3.1)
multi_json (~> 1.0)
websocket-driver (>= 0.2.0)
pry (0.10.3)
powerpack (0.1.1)
pry (0.10.4)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
quiet_assets (1.1.0)
railties (>= 3.1, < 5.0)
rack (1.5.5)
rack (1.6.4)
rack-protection (1.5.3)
rack
rack-test (0.6.3)
rack (>= 1.0)
rails (4.1.15)
actionmailer (= 4.1.15)
actionpack (= 4.1.15)
actionview (= 4.1.15)
activemodel (= 4.1.15)
activerecord (= 4.1.15)
activesupport (= 4.1.15)
rails (4.2.7.1)
actionmailer (= 4.2.7.1)
actionpack (= 4.2.7.1)
actionview (= 4.2.7.1)
activejob (= 4.2.7.1)
activemodel (= 4.2.7.1)
activerecord (= 4.2.7.1)
activesupport (= 4.2.7.1)
bundler (>= 1.3.0, < 2.0)
railties (= 4.1.15)
sprockets-rails (~> 2.0)
rails-i18n (4.0.8)
railties (= 4.2.7.1)
sprockets-rails
rails-deprecated_sanitizer (1.0.3)
activesupport (>= 4.2.0.alpha)
rails-dom-testing (1.0.7)
activesupport (>= 4.2.0.beta, < 5.0)
nokogiri (~> 1.6.0)
rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.3)
loofah (~> 2.0)
rails-i18n (4.0.9)
i18n (~> 0.7)
railties (~> 4.0)
rails_12factor (0.0.3)
@@ -328,87 +363,108 @@ GEM
rails_stdout_logging
rails_serve_static_assets (0.0.5)
rails_stdout_logging (0.0.5)
railties (4.1.15)
actionpack (= 4.1.15)
activesupport (= 4.1.15)
railties (4.2.7.1)
actionpack (= 4.2.7.1)
activesupport (= 4.2.7.1)
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
raindrops (0.16.0)
rake (11.1.2)
rainbow (2.1.0)
raindrops (0.17.0)
rake (11.2.2)
rb-fsevent (0.9.7)
rb-inotify (0.9.7)
ffi (>= 0.5.0)
responders (1.1.2)
railties (>= 3.2, < 4.2)
rspec (3.4.0)
rspec-core (~> 3.4.0)
rspec-expectations (~> 3.4.0)
rspec-mocks (~> 3.4.0)
redis (3.3.1)
responders (2.3.0)
railties (>= 4.2.0, < 5.1)
rspec (3.5.0)
rspec-core (~> 3.5.0)
rspec-expectations (~> 3.5.0)
rspec-mocks (~> 3.5.0)
rspec-activemodel-mocks (1.0.3)
activemodel (>= 3.0)
activesupport (>= 3.0)
rspec-mocks (>= 2.99, < 4.0)
rspec-core (3.4.4)
rspec-support (~> 3.4.0)
rspec-expectations (3.4.0)
rspec-core (3.5.2)
rspec-support (~> 3.5.0)
rspec-expectations (3.5.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.4.0)
rspec-mocks (3.4.1)
rspec-support (~> 3.5.0)
rspec-mocks (3.5.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.4.0)
rspec-rails (3.4.2)
actionpack (>= 3.0, < 4.3)
activesupport (>= 3.0, < 4.3)
railties (>= 3.0, < 4.3)
rspec-core (~> 3.4.0)
rspec-expectations (~> 3.4.0)
rspec-mocks (~> 3.4.0)
rspec-support (~> 3.4.0)
rspec-support (3.4.1)
ruby-units (2.0.0)
ruby_dep (1.3.1)
rspec-support (~> 3.5.0)
rspec-rails (3.5.1)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 3.5.0)
rspec-expectations (~> 3.5.0)
rspec-mocks (~> 3.5.0)
rspec-support (~> 3.5.0)
rspec-support (3.5.0)
rubocop (0.45.0)
parser (>= 2.3.1.1, < 3.0)
powerpack (~> 0.1)
rainbow (>= 1.99.1, < 3.0)
ruby-progressbar (~> 1.7)
unicode-display_width (~> 1.0, >= 1.0.1)
ruby-progressbar (1.8.1)
ruby-units (2.0.1)
ruby_dep (1.4.0)
ruby_parser (3.8.2)
sexp_processor (~> 4.1)
rubyzip (1.2.0)
sass (3.4.22)
sass-rails (5.0.4)
railties (>= 4.0.0, < 5.0)
sass-rails (5.0.6)
railties (>= 4.0.0, < 6)
sass (~> 3.1)
sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3)
selenium-webdriver (2.53.0)
selenium-webdriver (2.53.4)
childprocess (~> 0.5)
rubyzip (~> 1.0)
websocket (~> 1.0)
sexp_processor (4.7.0)
shellany (0.0.1)
simplecov (0.11.2)
sidekiq (4.1.4)
concurrent-ruby (~> 1.0)
connection_pool (~> 2.2, >= 2.2.0)
redis (~> 3.2, >= 3.2.1)
sinatra (>= 1.4.7)
simplecov (0.12.0)
docile (~> 1.1.0)
json (~> 1.8)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.0)
sinatra (1.4.7)
rack (~> 1.5)
rack-protection (~> 1.4)
tilt (>= 1.3, < 3)
slop (3.6.0)
sprockets (3.6.0)
sparkpost_rails (1.4.0)
rails (>= 4.0, < 5.1)
sprockets (3.7.0)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
sprockets-rails (2.3.3)
actionpack (>= 3.0)
activesupport (>= 3.0)
sprockets (>= 2.8, < 4.0)
sprockets-rails (3.1.1)
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
term-ansicolor (1.3.2)
tins (~> 1.0)
terminal-table (1.5.2)
terminal-table (1.6.0)
thor (0.19.1)
thread (0.2.2)
thread_safe (0.3.5)
tilt (2.0.4)
tins (1.6.0)
tilt (2.0.5)
tins (1.12.0)
tzinfo (1.2.2)
thread_safe (~> 0.1)
uglifier (2.7.2)
execjs (>= 0.3.0)
json (>= 1.8.0)
unicode-display_width (1.1.1)
unicorn (5.1.0)
kgio (~> 2.6)
raindrops (~> 0.7)
@@ -430,8 +486,9 @@ PLATFORMS
ruby
DEPENDENCIES
active_utils (= 1.0.5)!
activemerchant (= 1.33.0)!
active_merchant-paypal-bogus-gateway
active_utils
activemerchant
better_errors
binding_of_caller
bluecloth
@@ -444,21 +501,23 @@ DEPENDENCIES
cancancan (~> 1.9)
capybara
capybara-email
capybara-screenshot
codeclimate-test-reporter
coffee-rails (~> 4.1.0)
comfortable_mexican_sofa (~> 1.12.0)
coveralls
csv_shaper
dalli
database_cleaner (~> 1.5.0)
devise (~> 3.5.0)
devise (>= 4.0.0)
elasticsearch-model
elasticsearch-rails
factory_girl_rails (~> 4.5.0)
factory_girl_rails
figaro
flickraw
font-awesome-sass
friendly_id (~> 5.0.4)
geocoder!
geocoder
gibbon (~> 1.2.0)
gravatar-ultimate
guard
@@ -477,27 +536,31 @@ DEPENDENCIES
memcachier
newrelic_rpm
omniauth
omniauth-facebook
omniauth-flickr (>= 0.0.15)
omniauth-twitter
pg
poltergeist (~> 1.6)
pry
quiet_assets
rails (~> 4.1.11)
rails (~> 4.2.1)
rails_12factor
rake (>= 10.0.0)
rspec-activemodel-mocks
rspec-rails (~> 3.4.0)
rspec-rails
rubocop
ruby-units
sass-rails (~> 5.0.4)
selenium-webdriver
sidekiq
sparkpost_rails
uglifier (~> 2.7.2)
unicorn
webrat
will_paginate (~> 3.0)
RUBY VERSION
ruby 2.1.8p440
ruby 2.3.1p112
BUNDLED WITH
1.12.4
1.13.6

View File

@@ -2,6 +2,7 @@
[![Build Status](https://travis-ci.org/Growstuff/growstuff.png)](https://travis-ci.org/Growstuff/growstuff)
[![Coverage Status](https://coveralls.io/repos/Growstuff/growstuff/badge.png)](https://coveralls.io/r/Growstuff/growstuff)
[![Code Climate](https://codeclimate.com/github/Growstuff/growstuff/badges/gpa.svg)](https://codeclimate.com/github/Growstuff/growstuff)
Welcome to the Growstuff project.
@@ -18,8 +19,9 @@ encourage participation from people of all backgrounds and skill levels.
* [Issues](http://github.com/Growstuff/growstuff/issues) (features we're
working on, known bugs, etc)
* [Discussion forums](http://wiki.growstuff.org/index.php/Discussion_forums) (mailing lists, IRC, etc)
* [Wiki](http://wiki.growstuff.org/) (general documentation)
* [Discussion forums](http://talk.growstuff.org/) (design ideas, planning releases)
* [IRC](https://webchat.freenode.net/) growstuff channel (general chat, brainstorming and troubleshooting) or [Gitter](https://gitter.im/Growstuff/growstuff)
* [Wiki](https://github.com/Growstuff/growstuff/wiki) (general documentation, etc. Help by migrating from the [old wiki](https://web.archive.org/web/*/wiki.growstuff.org))
## For coders
@@ -27,18 +29,10 @@ Growstuff is built in Ruby on Rails and also uses JavaScript for
frontend features. We welcome contributions -- see
[CONTRIBUTING](CONTRIBUTING.md) for details.
* To set up your development environment, see [Getting started](http://wiki.growstuff.org/index.php/Development/Getting_Started).
* To set up your development environment, see [Getting started](https://github.com/Growstuff/growstuff/wiki/New-contributor-guide).
* We encourage [pair programming](http://wiki.growstuff.org/index.php/Pairing), especially for newer developers. [Find a pair programming partner.](http://talk.growstuff.org/t/find-a-pair-programming-partner/13)
* Drop in to one of our [discussion forums](http://wiki.growstuff.org/index.php/Discussion_forums) to chat to other developers, get help, etc.
* You may also be interested in our [API](http://wiki.growstuff.org/index.php/API).
The wiki is down right now, so here's what you need to do on Mac OS X to get set up.
```
gem install bundle
gem install pg -v '0.18.4' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/latest/bin/pg_config
bundle install
```
* Drop in to our [discussion forums](http://talk.growstuff.org/), IRC or Gitter to chat to other developers, get help, etc.
* You may also be interested in our [API](https://github.com/Growstuff/growstuff/wiki/API).
## For designers, writers, researchers, data wranglers, and other contributors
@@ -57,6 +51,7 @@ Here on Github, you might find these useful:
* [needs: visual design](https://github.com/Growstuff/growstuff/labels/needs:%20visual design) - tasks requiring visual/graphical design
* [needs: documentation](https://github.com/Growstuff/growstuff/labels/needs:%20documentation)
* [needs: data](https://github.com/Growstuff/growstuff/labels/needs:%20data) - tasks requiring data entry, data design, data import, or similar
* [curated:beginner](https://github.com/Growstuff/growstuff/labels/curated:%20beginner) - tasks that are ideal for beginner programmers or people new to the project
Feel free to comment on any of the issues you find there, or open up a broader conversation on [Growstuff Talk](http://talk.growstuff.org).

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -5,17 +5,15 @@
jQuery ->
el = $('.append-date')
el.datepicker({'format': 'yyyy-mm-dd'})
href = el.attr('href')
originalText = el.text()
el.click (e) ->
e.stopPropagation()
e.preventDefault()
originalText = $(this).text()
href = $(this).attr('href')
$(this).text('Confirm without date')
$(this).bind('click.confirm', (e) ->
@@ -31,6 +29,8 @@ jQuery ->
el.one 'changeDate', ->
date = $(this).datepicker('getDate')
href = $(this).attr('href')
url = "#{href}&planting[finished_at]=#{date}"
link = $("<a href='#{url}' data-method='put'></a>")

View File

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,7 @@
if (document.getElementById("cropmap") !== null) {
mapbox_map_id = "<%= Rails.env == 'test' ? 0 : Growstuff::Application.config.mapbox_map_id %>";
mapbox_base_url = "https://c.tiles.mapbox.com/v3/" + mapbox_map_id + "/{z}/{x}/{y}.png";
mapbox_access_token = "<%= Rails.env == 'test' ? 0 : Growstuff::Application.config.mapbox_access_token %>";
mapbox_base_url = "http://a.tiles.mapbox.com/v4/" + mapbox_map_id + "/{z}/{x}/{y}.png?access_token=" + mapbox_access_token;
L.Icon.Default.imagePath = '/assets'

View File

@@ -1,6 +1,7 @@
if (document.getElementById("membermap") !== null) {
mapbox_map_id = "<%= Rails.env == 'test' ? 0 : Growstuff::Application.config.mapbox_map_id %>";
mapbox_base_url = "https://c.tiles.mapbox.com/v3/" + mapbox_map_id + "/{z}/{x}/{y}.png";
mapbox_access_token = "<%= Rails.env == 'test' ? 0 : Growstuff::Application.config.mapbox_access_token %>";
mapbox_base_url = "http://a.tiles.mapbox.com/v4/" + mapbox_map_id + "/{z}/{x}/{y}.png?access_token=" + mapbox_access_token;
L.Icon.Default.imagePath = '/assets'

View File

@@ -1,7 +1,8 @@
if (document.getElementById("placesmap") !== null) {
places_base_path = "/places";
mapbox_map_id = "<%= Rails.env == 'test' ? 0 : Growstuff::Application.config.mapbox_map_id %>";
mapbox_base_url = "https://c.tiles.mapbox.com/v3/" + mapbox_map_id + "/{z}/{x}/{y}.png";
mapbox_access_token = "<%= Rails.env == 'test' ? 0 : Growstuff::Application.config.mapbox_access_token %>";
mapbox_base_url = "http://a.tiles.mapbox.com/v4/" + mapbox_map_id + "/{z}/{x}/{y}.png?access_token=" + mapbox_access_token;
nominatim_base_url = 'http://nominatim.openstreetmap.org/search/';
nominatim_user_agent_email = "<%= Rails.env == 'test' ? 0 : Growstuff::Application.config.user_agent_email %>";

View File

@@ -42,4 +42,3 @@ $ ->
element = document.getElementById(tmp)
console.log("%s",tmp)
element.remove()

View File

@@ -0,0 +1 @@
.btn:focus{outline:dotted 2px #000}div.active:focus{outline:dotted 1px #000}a:focus{outline:dotted 1px #000}.close:hover,.close:focus{outline:dotted 1px #000}.nav>li>a:hover,.nav>li>a:focus{outline:dotted 1px #000}.carousel-inner>.item{position:absolute;top:-999999em;display:block;-moz-transition:ease-in-out 0.6s left;-o-transition:ease-in-out 0.6s left;-webkit-transition:ease-in-out 0.6s left;transition:ease-in-out 0.6s left}.carousel-inner>.active{top:0}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{position:relative}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.alert-success{color:#2d4821}.alert-info{color:#214c62}.alert-warning{color:#6c4a00;background-color:#f9f1c6}.alert-danger{color:#d2322d}.alert-danger:hover{color:#a82824}

View File

@@ -42,7 +42,7 @@ $navbar-default-bg-highlight: $brown
$navbar-default-color: $beige
$navbar-default-link-color: darken($beige, 20%)
$navbar-default-link-hover-color: $beige
$navbar-default-link-active-color: $beige
$navbar-default-link-active-color: darken($beige,80%)
$navbar-default-brand-color: lighten($green, 20%)
// Top nav collapse threshold

View File

@@ -2,7 +2,7 @@
@import "bootstrap"
@import "custom_bootstrap/variables"
// this padding needs to be done before the responsive stuff is imported
body
body
// modifying this for our promotional banner. can be replaced after if
// needed.
// padding-top: $navbar-height + 15px
@@ -19,14 +19,14 @@ body
//@import "bootstrap/glyphicons"
.list-inline > li.first
.list-inline > li.first
padding-left: 0px
h2
h2
font-size: 150%
//#subtitle
//#subtitle
// color: lighten($brown, 30%)
// font-style: italic
// font-weight: normal
@@ -34,36 +34,49 @@ h2
// padding-left: 1em
// padding-top: 0px
h3
h3
font-size: 120%
.main
.main
padding-right: 1em
.navbar .navbar-form
padding-top: 0
padding-bottom: 0
margin-right: 0
margin-left: 15px
border: 0
-webkit-box-shadow: none
box-shadow: none
.img-responsive
max-width: 100%
height: auto
.sidebar
border-left: 1px solid darken($beige, 10%)
margin-left: -1px
padding-left: 1em
// this is used for eg. crops and members index pages
.six-across:nth-child(6n+1)
.six-across:nth-child(6n+1)
margin-left: 0px
.three-across:nth-child(3n+1)
.three-across:nth-child(3n+1)
margin-left: 0px
clear: both
// let's condense the hero unit a little
.jumbotron
.jumbotron
padding-top: 30px
padding-bottom: 30px
// info under the main heading on homepage
.jumbotron .info
.jumbotron .info
padding-top: 15px
// signup widget on homepage
.jumbotron .signup
.jumbotron .signup
background-color: lighten($green, 40%)
border: 1px solid lighten($green, 20%)
border-radius: 6px
@@ -72,19 +85,19 @@ h3
text-align: center
// stats shown on homepage. eg. "999 members..."
p.stats
p.stats
font-weight: bold
.member-cards
.member-cards
display: flex
flex: none
flex-wrap: wrap
justify-content: space-between
.member-thumbnail
.member-thumbnail
padding: .25em
div
div
width: 5em
display: inline-block
vertical-align: top
@@ -93,29 +106,62 @@ p.stats
padding-left: 1em
width: 15em
#placesmap, #cropmap
.planting
dl.planting-attributes
font-size: 85%
dt
text-align: left
dd
margin-left: auto
@media (min-width: $screen-md-min)
.planting-thumbnail
dl.planting-attributes
font-size: 85%
width: 100%
dt
text-align: left
width: 80px
dd
padding-left: 80px
margin-left: auto
.navbar .navbar-form
width: 250px
#placesmap, #cropmap
height: 500px
#membermap
#membermap
height: 250px
.member-location
.location-not-set
height: 250px
width: 100%
background-image: image-url('location-not-set.en.png')
background-repeat: no-repeat
background-position: center
.member-location
font-size: small
font-style: italic
.member-location a
.member-location a
color: $brown
.photo-thumbnail
.photo-thumbnail
padding: 0
position: relative
img
width: 100%
.text
.text
display: none
color: #000
position: absolute
@@ -123,140 +169,132 @@ p.stats
background: rgba(0, 0, 0, 0.8)
width: 100%
margin: 0
p
p
padding: 5px
margin: 0
color: #fff
&:hover
.text
&:hover
.text
display: block
.thumbnail
.thumbnail
border: none
text-align: center
margin-bottom: 1.5em
.member-thumbnail
.member-thumbnail
text-align: left
img
img
height: 85px
width: 85px
max-width: 85px
.crop-thumbnail
.crop-thumbnail
height: 220px
.cropinfo
.cropinfo
display: inline-block
max-width: 100%
white-space: nowrap
line-height: 1em
padding-bottom: 2px
.cropname
.cropname
overflow: hidden
text-overflow: ellipsis
.scientificname
.scientificname
font-size: small
font-style: italic
overflow: hidden
text-overflow: ellipsis
.plantingcount
.plantingcount
font-size: small
.crop-name a
.crop-name a
padding-top: 2px
.scientific-name small
.scientific-name small
margin-bottom: -2px
li.crop-hierarchy
li.crop-hierarchy
list-style-type: disc
.navbar-brand
.navbar-brand
margin: 0px
padding: 0px
.navbar-bottom
.navbar-bottom
margin: 40px 0px 0px 0px !important
// footer
footer
#footer1, #footer2, #footer3
footer
#footer1, #footer2, #footer3
text-align: left
padding-top: 1em
padding-bottom: 2em
ul
ul
list-style-type: none
list-style-position: outside
padding-left: 0px
margin-left: 0px
a
a
color: $navbar-default-link-color
text-decoration: none
a:hover
a:hover
color: $navbar-default-link-hover-color
a:active
a:active
color: $navbar-default-link-active-color
.navbar-bottom.navbar
.navbar-bottom.navbar
border-radius: 0
// ensure footer is pushed to bottom of browser window
#maincontainer
#maincontainer
min-height: 80%
html, body
html, body
height: 100%
.crop-image, .member-image
.crop-image, .member-image
width: 100%
height: 100%
// Autosuggest
.ui-autocomplete
.ui-autocomplete
background: white
z-index: $zindex-tooltip
// Crowdfunding campaign, Sep-Oct 2014
.crowdfunding-banner
text-align: center
font-weight: bold
background-color: lighten($green, 30%)
margin-top: 0px
margin-bottom: 5px
padding: 15px
.crowdfunding-banner a
color: $brown
text-decoration: underline
.alert
a
.alert
a
font-weight: 800
// Overrides applying only to mobile view. This must be at the end of the overrides file.
@media only screen and (max-width: 767px)
.sidebar
@media only screen and (max-width: 767px)
.sidebar
margin-left: 0
border-left: none
padding-left: 0
#map
#map
height: 300px
.navbar .nav > li
.navbar .nav > li
display: block
.navbar .navbar-form
width: 185px
padding-left: 0
padding-right: 0
/* override "info" alert boxes to be green, not blue, on Growstuff */
$state-info-text: darken($green, 10%)
$state-info-bg: lighten($green, 50%)
@@ -267,7 +305,7 @@ $state-info-bg: lighten($green, 50%)
$state-success-text: darken($green, 10%)
$state-success-bg: lighten($green, 50%)
.hide
.hide
display: none
#add-sci_name-row, #remove-sci_name-row, #add-alt_name-row, #remove-alt_name-row
@@ -276,15 +314,25 @@ $state-success-bg: lighten($green, 50%)
.panel-footer
height: 6em
.panel
.dl-horizontal
text-overflow: ellipsis
overflow: hidden
#gardens_panel_body
height: 20em
.form-group.required .control-label:before
.form-group.required .control-label:before
content: "* "
color: red
.margin-bottom
.margin-bottom
margin-bottom: 1em
.red
.red
color: red
.truncate
overflow: hidden
text-overflow: ellipsis
white-space: nowrap

View File

@@ -1,2 +0,0 @@
class AboutController < ApplicationController
end

View File

@@ -1,7 +1,7 @@
class AccountTypesController < ApplicationController
before_filter :authenticate_member!
load_and_authorize_resource
# GET /account_types
def index
@account_types = AccountType.all
@@ -70,7 +70,7 @@ class AccountTypesController < ApplicationController
end
end
private
private
def account_type_params
params.require(:account_type).permit(:is_paid, :is_permanent_paid, :name)

View File

@@ -1,7 +1,7 @@
class AccountsController < ApplicationController
before_filter :authenticate_member!
load_and_authorize_resource
# GET /accounts
def index
@accounts = Account.all

View File

@@ -13,17 +13,6 @@ class AlternateNamesController < ApplicationController
end
end
# GET /alternate_names/1
# GET /alternate_names/1.json
def show
@alternate_name = AlternateName.find(params[:id])
respond_to do |format|
format.html # show.html.haml
format.json { render json: @alternate_name }
end
end
# GET /alternate_names/new
# GET /alternate_names/new.json
def new

View File

@@ -52,7 +52,7 @@ class ApplicationController < ActionController::Base
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) do |member|
devise_parameter_sanitizer.permit(:sign_up) do |member|
member.permit(:login_name, :email, :password, :password_confirmation,
:remember_me, :login,
# terms of service
@@ -64,7 +64,7 @@ class ApplicationController < ActionController::Base
)
end
devise_parameter_sanitizer.for(:account_update) do |member|
devise_parameter_sanitizer.permit(:account_update) do |member|
member.permit(:login_name, :email, :password, :password_confirmation,
:remember_me, :login,
# terms of service

View File

@@ -7,16 +7,7 @@ class AuthenticationsController < ApplicationController
auth = request.env['omniauth.auth']
@authentication = nil
if auth
name = ''
case auth['provider']
when 'twitter'
name = auth['info']['nickname']
when 'flickr'
name = auth['info']['name']
else
name = auth['info']['name']
end
name = Growstuff::OauthSignupAction.new.determine_name(auth)
@authentication = current_member.authentications
.create_with(

View File

@@ -14,17 +14,6 @@ class CommentsController < ApplicationController
end
end
# GET /comments/1
# GET /comments/1.json
def show
@comment = Comment.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @comment }
end
end
# GET /comments/new
# GET /comments/new.json
def new
@@ -100,7 +89,7 @@ class CommentsController < ApplicationController
end
end
private
private
def comment_params
params.require(:comment).permit(:author_id, :body, :post_id)

View File

@@ -83,8 +83,16 @@ class CropsController < ApplicationController
respond_to do |format|
format.html # show.html.haml
format.json do
# TODO RABL or similar one day to avoid presentation logic here
owner_structure = {
owner: {
only: [:id, :login_name, :location, :latitude, :longitude]
}
}
render json: @crop.to_json(include: {
plantings: { include: { owner: { only: [:id, :login_name, :location, :latitude, :longitude] }}}
plantings: {
include: owner_structure
}
})
end
end
@@ -136,7 +144,7 @@ class CropsController < ApplicationController
end
unless current_member.has_role? :crop_wrangler
Role.crop_wranglers.each do |w|
Notifier.new_crop_request(w, @crop).deliver!
Notifier.new_crop_request(w, @crop).deliver_later!
end
end
@@ -176,12 +184,12 @@ class CropsController < ApplicationController
sci_name = @crop.scientific_names.create(scientific_name: value, creator_id: current_member.id)
end
end
if previous_status == "pending"
requester = @crop.requester
new_status = @crop.approval_status
Notifier.crop_request_approved(requester, @crop).deliver! if new_status == "approved"
Notifier.crop_request_rejected(requester, @crop).deliver! if new_status == "rejected"
Notifier.crop_request_approved(requester, @crop).deliver_later! if new_status == "approved"
Notifier.crop_request_rejected(requester, @crop).deliver_later! if new_status == "rejected"
end
format.html { redirect_to @crop, notice: 'Crop was successfully updated.' }
format.json { head :no_content }

View File

@@ -1,7 +1,6 @@
class HarvestsController < ApplicationController
before_filter :authenticate_member!, except: [:index, :show]
load_and_authorize_resource
# GET /harvests
# GET /harvests.json
@@ -27,17 +26,6 @@ class HarvestsController < ApplicationController
end
end
# GET /harvests/1
# GET /harvests/1.json
def show
@harvest = Harvest.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @harvest }
end
end
# GET /harvests/new
# GET /harvests/new.json
def new

View File

@@ -1,7 +1,7 @@
class MembersController < ApplicationController
load_and_authorize_resource
skip_authorize_resource only: [:nearby, :unsubscribe]
skip_authorize_resource only: [:nearby, :unsubscribe, :finish_signup]
after_action :expire_cache_fragments, only: :create
@@ -20,15 +20,16 @@ class MembersController < ApplicationController
end
def show
@member = Member.confirmed.find(params[:id])
@twitter_auth = @member.auth('twitter')
@flickr_auth = @member.auth('flickr')
@posts = @member.posts
@member = Member.confirmed.find(params[:id])
@twitter_auth = @member.auth('twitter')
@flickr_auth = @member.auth('flickr')
@facebook_auth = @member.auth('facebook')
@posts = @member.posts
# The garden form partial is called from the "New Garden" tab;
# it requires a garden to be passed in @garden.
# The new garden is not persisted unless Garden#save is called.
@garden = Garden.new
respond_to do |format|
format.html # show.html.haml
format.json { render json: @member.to_json(only: [:id, :login_name, :bio, :created_at, :slug, :location, :latitude, :longitude]) }
@@ -70,10 +71,27 @@ class MembersController < ApplicationController
end
end
def finish_signup
@member = current_member
if request.patch? && params[:member]
if @member.update(member_params)
@member.skip_reconfirmation!
bypass_sign_in(@member)
redirect_to root_path, notice: 'Welcome.'
else
flash[:alert] = 'Failed to complete signup'
@show_errors = true
end
end
end
private
def expire_cache_fragments
expire_fragment("homepage_stats")
end
def member_params
params.require(:member).permit(:login_name, :tos_agreement, :email, :newsletter)
end
end

View File

@@ -46,7 +46,6 @@ class NotificationsController < ApplicationController
@subject = @sender_notification.subject =~ /^Re: / ?
@sender_notification.subject :
"Re: " + @sender_notification.subject
respond_to do |format|
format.html # reply.html.haml

View File

@@ -0,0 +1,51 @@
require './lib/actions/oauth_signup_action'
#
# Handle signup or signin
# from various oauth providers
#
# Heavily overlaps with Authentications controller
#
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
create
end
def failure
flash[:alert] = "Authentication failed."
redirect_to request.env['omniauth.origin'] || "/"
end
private
def create
auth = request.env['omniauth.auth']
action = Growstuff::OauthSignupAction.new
@authentication = nil
if auth
member = action.find_or_create_from_authorization(auth)
@authentication = action.establish_authentication(auth, member)
unless action.member_created?
sign_in_and_redirect member, event: :authentication #this will throw if @user is not activated
set_flash_message(:notice, :success, kind: auth['provider']) if is_navigational_format?
else
raise "Invalid provider" unless ['facebook', 'twitter', 'flickr'].index(auth['provider'].to_s)
session["devise.#{auth['provider']}_data"] = request.env["omniauth.auth"]
sign_in member
redirect_to finish_signup_url(member)
end
else
redirect_to request.env['omniauth.origin'] || edit_member_registration_path
end
end
def after_sign_in_path_for(resource)
if resource.tos_agreement
super resource
else
finish_signup_path(resource)
end
end
end

View File

@@ -0,0 +1,6 @@
class PagesController < ApplicationController
def letsencrypt
# use your code here, not mine
render text: "y9KNck8wqkoQLnlr2RgA2TVwWtyYb4PeY_hzGNx0Tfs.dlIPqFhMDCLyQEccczY3roHZ1UWu6UqVeyb9mkRxheU"
end
end

View File

@@ -4,4 +4,4 @@ protected
def after_resetting_password_path_for(resource)
root_path
end
end
end

View File

@@ -13,17 +13,6 @@ class PhotosController < ApplicationController
end
end
# GET /photos/1
# GET /photos/1.json
def show
@photo = Photo.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @photo }
end
end
# GET /photos/new
# GET /photos/new.json
def new
@@ -63,35 +52,29 @@ class PhotosController < ApplicationController
@photo.owner_id = current_member.id
@photo.set_flickr_metadata
# several models can have photos. we need to know what model and the id
# for the entry to attach the photo to
valid_models = ["planting", "harvest", "garden"]
if params[:type]
if valid_models.include?(params[:type])
if params[:id]
item = params[:type].camelcase.constantize.find_by_id(params[:id])
if item
if item.owner.id == current_member.id
# This syntax is weird, so just know that it means this:
# @photo.harvests << item unless @photo.harvests.include?(item)
# but with the correct many-to-many relationship automatically referenced
(@photo.send "#{params[:type]}s") << item unless (@photo.send "#{params[:type]}s").include?(item)
else
flash[:alert] = "You must own both the #{params[:type]} and the photo."
end
else
flash[:alert] = "Couldn't find #{params[:type]} to connect to photo."
end
else
flash[:alert] = "Missing id parameter"
end
collection = case params[:type]
when 'garden'
@photo.gardens
when 'planting'
@photo.plantings
when 'harvest'
@photo.harvests
else
nil
end
if collection && has_item_id
item = params[:type].camelcase.constantize.find_by_id(params[:id])
if item && member_owns_item(item)
collection << item unless collection.include?(item)
else
flash[:alert] = "Cannot attach photos to #{params[:type]}"
flash[:alert] = "Could not find this item owned by you"
end
else
flash[:alert] = "Missing type parameter"
else
flash[:alert] = "Missing or invalid type or id parameter"
end
respond_to do |format|
if @photo.save
format.html { redirect_to @photo, notice: 'Photo was successfully added.' }
@@ -125,7 +108,7 @@ class PhotosController < ApplicationController
@photo = Photo.find(params[:id])
@photo.destroy
flash[:alert] = "Photo successfully deleted."
respond_to do |format|
format.html { redirect_to photos_url }
format.json { head :no_content }
@@ -134,6 +117,14 @@ class PhotosController < ApplicationController
private
def has_item_id
params.key? :id
end
def member_owns_item(item)
item.owner.id == current_member.id
end
def photo_params
params.require(:photo).permit(:flickr_photo_id, :owner_id, :title, :license_name,
:license_url, :thumbnail_url, :fullsize_url, :link_url)

View File

@@ -1,2 +0,0 @@
class PolicyController < ApplicationController
end

View File

@@ -1,8 +1,10 @@
class RegistrationsController < Devise::RegistrationsController
respond_to :json
def edit
@twitter_auth = current_member.auth('twitter')
@flickr_auth = current_member.auth('flickr')
@twitter_auth = current_member.auth('twitter')
@flickr_auth = current_member.auth('flickr')
@facebook_auth = current_member.auth('facebook')
render "edit"
end

View File

@@ -1,7 +1,7 @@
class RolesController < ApplicationController
before_filter :authenticate_member!
load_and_authorize_resource
# GET /roles
def index
@roles = Role.all

View File

@@ -0,0 +1,11 @@
class SessionsController < Devise::SessionsController
respond_to :json
def create
super do |resource|
if Crop.pending_approval.present? && current_member.has_role?(:crop_wrangler)
flash[:alert] = "There are crops waiting to be wrangled."
end
end
end
end

View File

@@ -1,2 +0,0 @@
class SupportController < ApplicationController
end

View File

@@ -19,10 +19,24 @@ module ApplicationHelper
pid = price_in_dollars(price)
currency = Growstuff::Application.config.currency
link = "http://www.wolframalpha.com/input/?i=#{pid}+#{currency}"
return link_to "(convert)",
link,
target: "_blank"
end
link_to "(convert)", link, target: "_blank", rel: "noopener noreferrer"
end
def build_alert_classes(alert_type = :info)
classes = 'alert alert-dismissable '
case alert_type.to_sym
when :alert, :danger, :error, :validation_errors
classes += 'alert-danger'
when :warning, :todo
classes += 'alert-warning'
when :notice, :success
classes += 'alert-success'
when :info
classes += 'alert-info'
end
classes
end
# Produces a cache key for uniquely identifying cached fragments.
def cache_key_for(klass, identifier="all")
@@ -43,12 +57,32 @@ module ApplicationHelper
# Falls back to Gravatar
#
def avatar_uri(member, size = 150)
return member.preferred_avatar_uri if member.preferred_avatar_uri.present?
if member.preferred_avatar_uri.present?
# Some avatars support different sizes
# http://graph.facebook.com/12345678/picture?width=150&height=150
uri = URI.parse(member.preferred_avatar_uri)
if uri.host == 'graph.facebook.com'
uri.query = "&width=#{size}&height=#{size}"
end
# TODO: Assess twitter - https://dev.twitter.com/overview/general/user-profile-images-and-banners
# TODO: Assess flickr - https://www.flickr.com/services/api/misc.buddyicons.html
return uri.to_s
end
Gravatar.new(member.email).image_url({
size: size,
default: :identicon
})
end
end
# Returns a string with the quantity and the right pluralization for a
# given collection and model.
def localize_plural(collection, model)
size = collection.size
model_name = model.model_name.human(count: size)
"#{size} #{model_name}"
end
end

View File

@@ -1,17 +1,21 @@
module CropsHelper
def display_seed_availability(member, crop)
total_quantity = 0
member.seeds.each do |seed|
if seed.crop.name == crop.name
total_quantity = total_quantity + seed.quantity
end
seeds = member.seeds.select {|seed| seed.crop.name == crop.name }
seeds.each do |seed|
total_quantity = total_quantity + seed.quantity if seed.quantity
end
if !seeds.any?
return "You don't have any seeds of this crop."
end
if (total_quantity != 0)
"You have #{pluralize(total_quantity, "seed")} of this crop."
"You have #{total_quantity} #{Seed.model_name.human(count: total_quantity)} of this crop."
else
"You don't have any seeds of this crop."
"You have an unknown quantity of seeds of this crop."
end
end
end
end

View File

@@ -41,7 +41,7 @@ module HarvestsHelper
if harvest.description.empty?
"No description provided."
else
truncate(harvest.description, length: 130, separator: ' ', omission: '... ') { link_to "Read more", harvest_path(harvest) }
harvest.description
end
end

View File

@@ -1,11 +1,9 @@
module SeedsHelper
def display_seed_description(seed)
if seed.description.nil?
"no description provided."
if seed.description.nil?
"no description provided."
else
truncate(seed.description, length: 130, separator: ' ', omission: '... ') { link_to "Read more", seed_path(seed) }
truncate(seed.description, length: 130, separator: ' ', omission: '... ') { link_to "Read more", seed_path(seed) }
end
end
end
end

View File

@@ -2,19 +2,17 @@ class Notifier < ActionMailer::Base
include NotificationsHelper
default from: "Growstuff <noreply@growstuff.org>"
def verifier()
if ENV['RAILS_SECRET_TOKEN']
return ActiveSupport::MessageVerifier.new(ENV['RAILS_SECRET_TOKEN'])
else
raise "RAILS_SECRET_TOKEN environment variable not set - have you created config/application.yml?"
end
def verifier
raise "RAILS_SECRET_TOKEN environment variable not set - have you created config/application.yml?" unless ENV['RAILS_SECRET_TOKEN']
return ActiveSupport::MessageVerifier.new(ENV['RAILS_SECRET_TOKEN'])
end
def notify(notification)
@notification = notification
@reply_link = reply_link(@notification)
# Encrypting
# Encrypting
@signed_message = verifier.generate ({ member_id: @notification.recipient.id, type: :send_notification_email })
mail(to: @notification.recipient.email,
@@ -27,7 +25,7 @@ class Notifier < ActionMailer::Base
@plantings = @member.plantings.first(5)
@harvests = @member.harvests.first(5)
# Encrypting
# Encrypting
@signed_message = verifier.generate ({ member_id: @member.id, type: :send_planting_reminder })
if @member.send_planting_reminder
@@ -38,7 +36,7 @@ class Notifier < ActionMailer::Base
def new_crop_request(member, request)
@member, @request = member, request
mail(to: @member.email, subject: "#{@request.requester.login_name} has requested #{@request.name} as a new crop")
mail(to: @member.email, subject: "#{@request.requester.login_name} has requested #{@request.name} as a new crop")
end
def crop_request_approved(member, crop)

View File

@@ -22,7 +22,7 @@ class Ability
cannot :read, AccountType
# nobody should be able to view unapproved crops unless they
# are wranglers or admins
# are wranglers or admins
cannot :read, Crop
can :read, Crop, approval_status: "approved"
# scientific names should only be viewable if associated crop is approved

View File

@@ -8,7 +8,7 @@ class Account < ActiveRecord::Base
before_create do |account|
unless account.account_type
account.account_type = AccountType.find_or_create_by(name:
account.account_type = AccountType.find_or_create_by(name:
Growstuff::Application.config.default_account_type
)
end

View File

@@ -50,44 +50,46 @@ class Crop < ActiveRecord::Base
####################################
# Elastic search configuration
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks
# In order to avoid clashing between different environments,
# use Rails.env as a part of index name (eg. development_growstuff)
index_name [Rails.env, "growstuff"].join('_')
settings index: { number_of_shards: 1 },
analysis: {
tokenizer: {
gs_edgeNGram_tokenizer: {
type: "edgeNGram", # edgeNGram: NGram match from the start of a token
min_gram: 3,
max_gram: 10,
# token_chars: Elasticsearch will split on characters
# that dont belong to any of these classes
token_chars: [ "letter", "digit" ]
}
},
analyzer: {
gs_edgeNGram_analyzer: {
tokenizer: "gs_edgeNGram_tokenizer",
filter: ["lowercase"]
}
},
} do
mappings dynamic: 'false' do
indexes :id, type: 'long'
indexes :name, type: 'string', analyzer: 'gs_edgeNGram_analyzer'
indexes :approval_status, type: 'string'
indexes :scientific_names do
indexes :scientific_name,
type: 'string',
analyzer: 'gs_edgeNGram_analyzer',
# Disabling field-length norm (norm). If the norm option is turned on(by default),
# higher weigh would be given for shorter fields, which in our case is irrelevant.
norms: { enabled: false }
end
indexes :alternate_names do
if ENV["GROWSTUFF_ELASTICSEARCH"] == "true"
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks
# In order to avoid clashing between different environments,
# use Rails.env as a part of index name (eg. development_growstuff)
index_name [Rails.env, "growstuff"].join('_')
settings index: { number_of_shards: 1 },
analysis: {
tokenizer: {
gs_edgeNGram_tokenizer: {
type: "edgeNGram", # edgeNGram: NGram match from the start of a token
min_gram: 3,
max_gram: 10,
# token_chars: Elasticsearch will split on characters
# that dont belong to any of these classes
token_chars: [ "letter", "digit" ]
}
},
analyzer: {
gs_edgeNGram_analyzer: {
tokenizer: "gs_edgeNGram_tokenizer",
filter: ["lowercase"]
}
},
} do
mappings dynamic: 'false' do
indexes :id, type: 'long'
indexes :name, type: 'string', analyzer: 'gs_edgeNGram_analyzer'
indexes :approval_status, type: 'string'
indexes :scientific_names do
indexes :scientific_name,
type: 'string',
analyzer: 'gs_edgeNGram_analyzer',
# Disabling field-length norm (norm). If the norm option is turned on(by default),
# higher weigh would be given for shorter fields, which in our case is irrelevant.
norms: { enabled: false }
end
indexes :alternate_names do
indexes :name, type: 'string', analyzer: 'gs_edgeNGram_analyzer'
end
end
end
end
@@ -128,7 +130,11 @@ class Crop < ActiveRecord::Base
# later we can choose a default photo based on different criteria,
# eg. popularity
def default_photo
return photos.first
return photos.first if photos.any?
# Crop has no photos? Look for the most recent harvest with a photo.
harvest_with_photo = Harvest.where(crop_id: id).joins(:photos).order('harvests.id DESC').limit(1).first
return harvest_with_photo.photos.first if harvest_with_photo
end
# crop.sunniness
@@ -206,7 +212,7 @@ class Crop < ActiveRecord::Base
# returns a list of interesting crops, for use on the homepage etc
def Crop.interesting
howmany = 12 # max number to find
interesting_crops = Array.new
interesting_crops = []
Crop.includes(:photos).randomized.each do |c|
break if interesting_crops.size == howmany
next unless c.interesting?
@@ -312,7 +318,7 @@ class Crop < ActiveRecord::Base
if ENV['GROWSTUFF_ELASTICSEARCH'] == "true"
search_str = query.nil? ? "" : query.downcase
response = __elasticsearch__.search( {
# Finds documents which match any field, but uses the _score from
# Finds documents which match any field, but uses the _score from
# the best field insead of adding up _score from each field.
query: {
multi_match: {

View File

@@ -67,7 +67,7 @@ class Harvest < ActiveRecord::Base
before_save :set_si_weight
# we're storing the harvest weight in kilograms in the db too
# we're storing the harvest weight in kilograms in the db too
# to make data manipulation easier
def set_si_weight
if self.weight_unit != nil
@@ -132,7 +132,7 @@ class Harvest < ActiveRecord::Base
end
def default_photo
return photos.first
return photos.first || crop.default_photo
end
end

View File

@@ -46,7 +46,7 @@ class Member < ActiveRecord::Base
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:confirmable, :lockable, :timeoutable
:confirmable, :lockable, :timeoutable, :omniauthable
# set up geocoding
geocoded_by :location
@@ -58,7 +58,7 @@ class Member < ActiveRecord::Base
attr_accessor :login
# Requires acceptance of the Terms of Service
validates_acceptance_of :tos_agreement, allow_nil: false,
validates_acceptance_of :tos_agreement, allow_nil: true,
accept: true
validates :login_name,
@@ -130,7 +130,7 @@ class Member < ActiveRecord::Base
def is_paid?
if account.account_type.is_permanent_paid
return true
elsif account.account_type.is_paid and account.paid_until >= Time.zone.now
elsif account.account_type.is_paid && account.paid_until >= Time.zone.now
return true
else
return false
@@ -183,7 +183,7 @@ class Member < ActiveRecord::Base
# Returns a hash of Flickr photosets' ids and titles
def flickr_sets
sets = Hash.new
sets = Hash.new
flickr.photosets.getList.each do |p|
sets[p.title] = p.id
end
@@ -200,7 +200,7 @@ class Member < ActiveRecord::Base
def Member.interesting
howmany = 12 # max number to find
interesting_members = Array.new
interesting_members = []
Member.confirmed.located.recently_signed_in.each do |m|
break if interesting_members.size == howmany
if m.interesting?
@@ -222,7 +222,7 @@ class Member < ActiveRecord::Base
end
def update_newsletter_subscription
if confirmed_at_changed? and newsletter # just signed up
if confirmed_at_changed? && newsletter # just signed up
newsletter_subscribe
elsif confirmed_at # i.e. after member's confirmed their account
if newsletter_changed? # edited member settings
@@ -239,7 +239,7 @@ class Member < ActiveRecord::Base
return true if (Rails.env.test? && !testing)
gb = Gibbon::API.new
res = gb.lists.subscribe({
id: Gibbon::API.api_key,
id: Growstuff::Application.config.newsletter_list_id,
email: { email: email },
merge_vars: { login_name: login_name },
double_optin: false # they already confirmed their email with us
@@ -250,7 +250,7 @@ class Member < ActiveRecord::Base
return true if (Rails.env.test? && !testing)
gb = Gibbon::API.new
res = gb.lists.unsubscribe({
id: ENV['GROWSTUFF_MAILCHIMP_NEWSLETTER_ID'],
id: Growstuff::Application.config.newsletter_list_id,
email: { email: email }
})
end
@@ -262,5 +262,4 @@ class Member < ActiveRecord::Base
def get_follow(member)
self.follows.where(followed_id: member.id).first if already_following?(member)
end
end

View File

@@ -23,7 +23,7 @@ class Notification < ActiveRecord::Base
def send_email
if self.recipient.send_notification_email
Notifier.notify(self).deliver
Notifier.notify(self).deliver_later
end
end

View File

@@ -17,7 +17,7 @@ class Order < ActiveRecord::Base
sum = 0
for i in order_items do
subtotal = i.price * i.quantity
sum += subtotal
sum += subtotal
end
return sum
end

View File

@@ -68,7 +68,7 @@ class Planting < ActiveRecord::Base
# check that any finished_at date occurs after planted_at
def finished_must_be_after_planted
return unless planted_at and finished_at # only check if we have both
return unless planted_at && finished_at # only check if we have both
errors.add(:finished_at, "must be after the planting date") unless planted_at < finished_at
end
@@ -97,14 +97,14 @@ class Planting < ActiveRecord::Base
def calculate_days_before_maturity(planting, crop)
p_crop = Planting.where(crop_id: crop).where.not(id: planting)
differences = p_crop.collect do |p|
if p.finished and !p.finished_at.nil?
if p.finished && !p.finished_at.nil?
(p.finished_at - p.planted_at).to_i
end
end
if differences.compact.empty?
nil
else
else
differences.compact.sum/differences.compact.size
end
end
@@ -133,7 +133,7 @@ class Planting < ActiveRecord::Base
# we can't do this via a scope (as far as we know) so sadly we have to
# do it this way.
def Planting.interesting(howmany=12, require_photo=true)
interesting_plantings = Array.new
interesting_plantings = []
seen_owners = Hash.new(false) # keep track of which owners we've seen already
Planting.includes(:photos).each do |p|

View File

@@ -11,17 +11,17 @@ class Post < ActiveRecord::Base
# from this direction, so we won't set up an association for now.
after_create do
recipients = Array.new
recipients = []
sender = self.author.id
self.body.scan(Haml::Filters::GrowstuffMarkdown::MEMBER_REGEX) do |m|
# find member case-insensitively and add to list of recipients
member = Member.where('lower(login_name) = ?', $1.downcase).first
recipients << member if member and not recipients.include?(member)
recipients << member if member && !recipients.include?(member)
end
self.body.scan(Haml::Filters::GrowstuffMarkdown::MEMBER_AT_REGEX) do |m|
# find member case-insensitively and add to list of recipients
member = Member.where('lower(login_name) = ?', $1[1..-1].downcase).first
recipients << member if member and not recipients.include?(member)
recipients << member if member && !recipients.include?(member)
end
# don't send notifications to yourself
recipients.map{ |r| r.id }.each do |recipient|
@@ -64,7 +64,7 @@ class Post < ActiveRecord::Base
# return posts sorted by recent activity
def Post.recently_active
Post.all.sort do |a,b|
Post.all.sort do |a, b|
b.recent_activity <=> a.recent_activity
end
end
@@ -77,7 +77,7 @@ class Post < ActiveRecord::Base
# find crop case-insensitively
crop = Crop.where('lower(name) = ?', $1.downcase).first
# create association
self.crops << crop if crop and not self.crops.include?(crop)
self.crops << crop if crop && !self.crops.include?(crop)
end
end
end

View File

@@ -79,7 +79,7 @@ class Seed < ActiveRecord::Base
# returns a list of interesting seeds, for use on the homepage etc
def Seed.interesting
howmany = 12 # max number to find
interesting_seeds = Array.new
interesting_seeds = []
Seed.tradable.each do |s|
break if interesting_seeds.size == howmany

View File

@@ -1,17 +0,0 @@
-content_for :title, 'Contact'
%dl
%dt General contact email
%dd= link_to 'info@growstuff.org', 'mailto:info@growstuff.org'
%dl
%dt
Support and accounts enquiries (not covered by the
=succeed ")" do
=link_to 'FAQ', url_for(:controller => '/support')
%dd= link_to 'support@growstuff.org', 'mailto:support@growstuff.org'
%dl
%dt Media/Press enquiries
%dd= link_to 'media@growstuff.org', 'mailto:media@growstuff.org'
%dl
%dt Twitter
%dd= link_to '@growstufforg', 'http://twitter.com/growstufforg'

View File

@@ -21,7 +21,7 @@
= f.label :name, :class => 'control-label col-md-2'
.col-md-8
= f.text_field :name, :class => 'form-control'
.form-group
.form-actions.col-md-offset-2.col-md-8
= f.submit 'Save', :class => 'btn btn-primary'

View File

@@ -1,3 +1,10 @@
= content_for :title, @alternate_name.name
- content_for :opengraph do
= tag("meta", property: "og:title", content: @alternate_name.name)
= tag("meta", property: "og:type", content: "website")
= tag("meta", property: "og:url", content: request.original_url)
= tag("meta", property: "og:site_name", content: ENV['GROWSTUFF_SITE_NAME'])
%p#notice= notice
= render :partial => 'crops/approval_status_message', :locals => { :crop => @alternate_name.crop }

View File

@@ -5,10 +5,13 @@
= render :partial => "members/avatar", :locals => { :member => comment.author }
.col-md-11
.comment-meta
= (comment.created_at == comment.updated_at) ? 'Posted by' : 'Edited by'
Posted by
= link_to comment.author.login_name, member_path(comment.author)
on
= (comment.created_at == comment.updated_at) ? comment.created_at : comment.updated_at
= comment.created_at
- if comment.updated_at > comment.created_at
and edited at
= comment.updated_at
.comment-body
:growstuff_markdown

View File

@@ -1,7 +1,7 @@
= content_for :title, "Recent comments"
%div.pagination
= page_entries_info @comments, :model => "comments"
= page_entries_info @comments
= will_paginate @comments
- @comments.each do |comment|
@@ -11,7 +11,7 @@
= render :partial => "single", :locals => { :comment => comment }
%div.pagination
= page_entries_info @comments, :model => "comments"
= page_entries_info @comments
= will_paginate @comments
%p

View File

@@ -1,4 +1,12 @@
= content_for :title, @comment.post.subject
- content_for :opengraph do
= tag("meta", property: "og:image", content: avatar_uri(@comment.post.author, 200))
= tag("meta", property: "og:image:user_generated", content: "true")
= tag("meta", property: "og:title", content: @comment.post.subject)
= tag("meta", property: "og:description", content: strip_tags(@comment.post.body).split(' ')[0..20].join(' '))
= tag("meta", property: "og:type", content: "website")
= tag("meta", property: "og:url", content: request.original_url)
= tag("meta", property: "og:site_name", content: ENV['GROWSTUFF_SITE_NAME'])
= render :partial => "posts/single", :locals => { :post => @comment.post }

View File

@@ -1,7 +1,7 @@
%h4 Find #{ crop.name } seeds
- if crop.seeds.empty?
%p
There are no seeds available to trade.
There are no seeds available to trade on Growstuff right now.
- else
%ul
- crop.seeds.tradable.each do |seed|
@@ -10,6 +10,8 @@
= render :partial => 'members/location', :locals => { :member => seed.owner }
%p
= link_to "View all #{crop.name} seeds", seeds_by_crop_path(crop)
%p
= link_to "Purchase seeds via Ebay", "http://rover.ebay.com/rover/1/705-53470-19255-0/1?icep_ff3=9&pub=5575213277&toolid=10001&campid=5337940151&customid=&icep_uq=#{URI.escape crop.name}&icep_sellerId=&icep_ex_kw=&icep_sortBy=12&icep_catId=181003&icep_minPrice=&icep_maxPrice=&ipn=psmain&icep_vectorid=229515&kwid=902099&mtid=824&kw=lg", target: "_blank", rel: "noopener noreferrer"
- if crop.approved?
- if current_member
%p= link_to "List #{crop.name} seeds to trade", new_seed_path(:crop_id => crop.id)

View File

@@ -48,7 +48,7 @@
Scientific names
= button_tag "+", :id => "add-sci_name-row", :type => "button"
= button_tag "-", :id => "remove-sci_name-row", :type => "button"
.form-group#scientific_names
- @crop.scientific_names.each.with_index do |sci, index|
.template.col-md-12{ :id => "sci_template[#{index+1}]" }
@@ -64,7 +64,7 @@
= button_tag "+", :id => "add-alt_name-row", :type => "button"
= button_tag "-", :id => "remove-alt_name-row", :type => "button"
.form-group#alternate_names
.form-group#alternate_names
- @crop.alternate_names.each.with_index do |alt, index|
.template.col-md-12{ :id => "alt_template[#{index+1}]" }
.col-md-2

View File

@@ -1,7 +1,7 @@
- content_for :title, (can?(:wrangle, @crop) ? "New crop" : "Suggest a crop")
- content_for :title, (can?(:wrangle, @crop) ? "New crop" : "Suggest a crop")
- unless can? :wrangler, @crop
%p Thanks for taking the time to suggest a crop! Our crop database is managed by volunteers, and we appreciate your help. Here are some things to consider when suggesting a new crop:
%ul

View File

@@ -1,5 +1,12 @@
- content_for :title, @crop.name
- content_for :subtitle, @crop.default_scientific_name
- content_for :opengraph do
- @crop.photos.each do |photo|
= tag("meta", property: "og:image", content: photo.fullsize_url)
= tag("meta", property: "og:title", content: @crop.name)
= tag("meta", property: "og:type", content: "website")
= tag("meta", property: "og:url", content: request.original_url)
= tag("meta", property: "og:site_name", content: ENV['GROWSTUFF_SITE_NAME'])
= render :partial => 'approval_status_message', :locals => { :crop => @crop }
@@ -54,13 +61,13 @@
= render :partial => "shared/signin_signup", :locals => { :to => "post your tips and experiences growing #{ @crop.name.pluralize }" }
- else
%div.pagination
= page_entries_info @posts, :model => "posts"
= page_entries_info @posts
= will_paginate @posts, :params => {:anchor => "posts"}
- @posts.each do |post|
= render :partial => "posts/single", :locals => { :post => post, :subject => true }
%div.pagination
= page_entries_info @posts, :model => "posts"
= page_entries_info @posts
= will_paginate @posts, :params => {:anchor => "posts"}
.col-md-3
@@ -84,4 +91,11 @@
%h4 Learn more about #{ @crop.name.pluralize }
%ul
%li= link_to 'Wikipedia (English)', @crop.en_wikipedia_url
%li= link_to 'Wikipedia (English)', @crop.en_wikipedia_url, target: "_blank", rel: "noopener noreferrer"
%li
= link_to "OpenFarm - Growing guide", "https://openfarm.cc/en/crops/#{URI.escape @crop.name}", target: "_blank", rel: "noopener noreferrer"
%li
= link_to "Gardenate - Planting reminders", "http://www.gardenate.com/plant/#{URI.escape @crop.name}", target: "_blank", rel: "noopener noreferrer"
- if current_member && current_member.location
%li
= link_to "Google", "http://www.google.com/search?q=#{URI.escape ["Growing", @crop.name, current_member.location].join(" ")}", target: "_blank", rel: "noopener noreferrer"

View File

@@ -24,7 +24,7 @@
%li{:class => @approval_status == "rejected" ? 'active' : ''}
= link_to "Rejected", wrangle_crops_path(:approval_status => "rejected")
%h2
%h2
- if @approval_status == "pending"
Requested Crops
- elsif @approval_status == "rejected"
@@ -34,7 +34,7 @@
%div.pagination
= page_entries_info @crops, :model => "crops"
= page_entries_info @crops
= will_paginate @crops
%table{:class => "table table-striped", :id => @approval_status.blank? ? 'recently-added-crops' : "#{@approval_status}-crops"}
@@ -64,7 +64,7 @@
ago.
%div.pagination
= page_entries_info @crops, :model => "crops"
= page_entries_info @crops
= will_paginate @crops

View File

@@ -13,4 +13,6 @@
.form-actions.col-md-offset-2.col-md-8
= f.submit "Resend confirmation instructions", :class => 'btn btn-primary'
= render "devise/shared/links"
.form-group
.col-md-offset-2.col-md-8
= render "devise/shared/links"

View File

@@ -25,7 +25,7 @@
%p
We'd also appreciate it if you'd read our
= succeed "," do
= link_to 'Community Guidelines', url_for(:controller => '/policy', :action => 'community', :only_path => false)
= link_to 'Community Guidelines', "#{root_url}/policy/community"
and make sure you follow them. We want #{site_name} to be a
friendly, welcoming environment for everyone, and we hope you'll
help us keep it that way.

View File

@@ -11,4 +11,6 @@
.form-actions.col-md-offset-2.col-md-8
= f.submit "Send me reset password instructions", :class => 'btn btn-primary'
= render "devise/shared/links"
.form-group
.col-md-offset-2.col-md-8
= render "devise/shared/links"

View File

@@ -25,3 +25,15 @@
= link_to "Disconnect", @flickr_auth, :confirm => "Are you sure you want to remove this connection?", :method => :delete, :class => "remove"
- else
=link_to 'Connect to Flickr', '/auth/flickr'
.row
.col-md-12
%p
= image_tag "facebook_32.png", :size => "32x32", :alt => 'Facebook logo'
- if @facebook_auth
You are connected to Facebook as
= succeed "." do
=link_to @facebook_auth.name, "http://facebook.com/profile/#{@facebook_auth.uid}"
= link_to "Disconnect", @facebook_auth, :confirm => "Are you sure you want to remove this connection?", :method => :delete, :class => "remove"
- else
=link_to 'Connect to Facebook', '/auth/facebook'

View File

@@ -18,11 +18,12 @@
Profile picture
.col-md-8
= render :partial => "members/avatar", :locals => { :member => @member }
%p
%br/
To change your profile picture, visit
= succeed "." do
= link_to 'gravatar.com', "http://gravatar.com/"
- unless @member.preferred_avatar_uri.present?
%p
%br/
To change your profile picture, visit
= succeed "." do
= link_to 'gravatar.com', "http://gravatar.com/"
.form-group
.form-actions.col-md-offset-2.col-md-8

View File

@@ -31,7 +31,7 @@
= f.check_box :tos_agreement
I agree to the
= succeed "." do
= link_to 'Terms of Service', url_for(:action => 'tos', :controller => '/policy')
= link_to 'Terms of Service', "#{root_url}/policy/tos"
.form-group
.col-md-offset-2.col-md-8.checkbox
%label

View File

@@ -11,4 +11,6 @@
.form-actions.col-md-offset-2.col-md-8
= f.submit "Resend unlock instructions", :class => 'btn btn-primary'
= render "devise/shared/links"
.form-group
.col-md-offset-2.col-md-8
= render "devise/shared/links"

View File

@@ -1,4 +1,4 @@
- content_for :title, t('.title')
- content_for :title, t('.title')
- if can? :create, Forum
%p
@@ -7,7 +7,7 @@
- @forums.each do |forum|
%h2= forum
%p
= pluralize(forum.posts.size, "post")
= localize_plural(forum.posts, Post)
|
=link_to "Visit forum", forum
|

View File

@@ -1,4 +1,11 @@
- content_for :title, @forum.name
- content_for :opengraph do
- if @forum.description
= tag("meta", property: "og:description", content: strip_tags(@forum.description).split(' ')[0..20].join(' '))
= tag("meta", property: "og:title", content: @forum.name)
= tag("meta", property: "og:type", content: "website")
= tag("meta", property: "og:url", content: request.original_url)
= tag("meta", property: "og:site_name", content: ENV['GROWSTUFF_SITE_NAME'])
%p#notice= notice

View File

@@ -16,15 +16,16 @@
.form-group
= f.label :description, :class => 'control-label col-md-2'
.col-md-8
= f.text_area :description, :rows => 6, :class => 'form-control', :placeholder => 'optional'
= f.text_area :description, :rows => 6, :class => 'form-control'
= render :partial => 'shared/form_optional'
.form-group
= f.label :location, :class => 'control-label col-md-2'
.col-md-8
= f.text_field :location, :value => @garden.location || current_member.location, :class => 'form-control', :placeholder => 'optional', :maxlength => 255
= f.text_field :location, :value => @garden.location || current_member.location, :class => 'form-control', :maxlength => 255
= render :partial => 'shared/form_optional'
%span.help-block
If you have a location set in your profile, it will be used when
you create a new garden.
= t('.location_helper')
- if current_member.location.blank?
=link_to "Set your location now.", edit_member_registration_path
- else
@@ -33,7 +34,8 @@
.form-group
= f.label :area, :class => 'control-label col-md-2'
.col-md-2
= f.number_field :area, :class => 'input-small form-control', :placeholder => 'optional'
= f.number_field :area, :class => 'input-small form-control'
= render :partial => 'shared/form_optional'
.col-md-2
= f.select(:area_unit, Garden::AREA_UNITS_VALUES, {:include_blank => false}, :class => 'form-control')

View File

@@ -11,21 +11,21 @@
= link_to image_tag((garden.default_photo ? garden.default_photo.thumbnail_url : 'placeholder_150.png'), :alt => garden.name, :class => 'img'), garden
.col-md-8
%dl.dl-horizontal
%dt Name :
%dt Name :
%dd= link_to garden.name, garden
%dt Location :
%dt Location :
%dd
- if garden.location.blank?
not specified
- else
= link_to garden.location, place_path(garden.location)
%dt Area :
= link_to garden.location, place_path(garden.location, anchor: "gardens")
%dt Area :
%dd= garden.area.nil? ? "not specified" : pluralize(garden.area, garden.area_unit)
%dt Active? :
%dt Active? :
%dd= garden.active ? "Yes" : "No"
.col-md-12
%b
= "#{pluralize(garden.plantings.size, "Planting")} : "
= "#{localize_plural(garden.plantings, Planting)} : "
= display_garden_plantings(garden.plantings.current)
- if garden.plantings.size > 2
%br

View File

@@ -15,7 +15,7 @@
= render :partial => 'shared/signin_signup', :locals => { :to => 'add a new garden' }
%div.pagination
= page_entries_info @gardens, :model => "gardens"
= page_entries_info @gardens
= will_paginate @gardens
.row
@@ -27,6 +27,6 @@
%p There are no gardens to display.
%div.pagination
= page_entries_info @gardens, :model => "gardens"
= page_entries_info @gardens
= will_paginate @gardens

View File

@@ -1,5 +1,13 @@
=content_for :title, "#{@garden.owner}'s #{@garden}"
- content_for :opengraph do
- @garden.photos.each do |photo|
= tag("meta", property: "og:image", content: photo.fullsize_url)
- if @garden.description
= tag("meta", property: "og:description", content: @garden.description)
= tag("meta", property: "og:title", content: "#{@garden.owner}'s #{@garden}")
= tag("meta", property: "og:type", content: "website")
= tag("meta", property: "og:url", content: request.original_url)
= tag("meta", property: "og:site_name", content: ENV['GROWSTUFF_SITE_NAME'])
.row
.col-md-9
- if can? :edit, @garden or can? :delete, @garden
@@ -32,14 +40,14 @@
%p No description available yet.
- if can? :edit, @garden
%p
Why not
%p
Why not
= link_to 'tell us more.', edit_garden_path(@garden)
- if @garden.photos.size > 0 or (can? :edit, @garden and can? :create, Photo)
.row-fluid
%h3 Photos
%p= pluralize(@garden.photos.length, "photo")
%p= localize_plural(@garden.photos, Photo)
.row-fluid
%ul.thumbnails
- @garden.photos.each do |p|

View File

@@ -19,9 +19,10 @@
= link_to "Request new crops.", new_crop_path
.form-group
= f.label :harvested_at, 'When?', :class => 'control-label col-md-2', :placeholder => 'optional'
= f.label :harvested_at, 'When?', :class => 'control-label col-md-2'
.col-md-2
= f.text_field :harvested_at, :value => @harvest.harvested_at ? @harvest.harvested_at.to_s(:ymd) : '', :class => 'add-datepicker form-control'
= render :partial => 'shared/form_optional'
.form-group
= f.label :quantity, 'How many?', :class => 'control-label col-md-2'
@@ -29,20 +30,23 @@
-# Some browsers (eg Firefox for Android) assume "number" means
-# "integer" unless you specify step="any":
-# http://blog.isotoma.com/2012/03/html5-input-typenumber-and-decimalsfloats-in-chrome/
= f.number_field :quantity, :class => 'input-small', :step => 'any', :class => 'form-control', :placeholder => 'optional'
= f.number_field :quantity, :class => 'input-small form-control', :step => 'any'
= render :partial => 'shared/form_optional'
.col-md-2
= f.select(:unit, Harvest::UNITS_VALUES, {:include_blank => false}, :class => 'input-medium form-control')
.form-group
= f.label :weight_quantity, 'Weighing (in total):', :class => 'control-label col-md-2'
.col-md-2
= f.number_field :weight_quantity, :class => 'input-small form-control', :step => 'any', :placeholder => 'optional'
= f.number_field :weight_quantity, :class => 'input-small form-control', :step => 'any'
= render :partial => 'shared/form_optional'
.col-md-2
= f.select(:weight_unit, Harvest::WEIGHT_UNITS_VALUES, {:include_blank => false}, :class => 'form-control')
.form-group
= f.label :description, 'Notes', :class => 'control-label col-md-2'
.col-md-8
= f.text_area :description, :rows => 6, :class => 'form-control', :placeholder => 'optional'
= f.text_area :description, :rows => 6, :class => 'form-control'
= render :partial => 'shared/form_optional'
.form-group
.form-actions.col-md-offset-2.col-md-8

View File

@@ -1,25 +1,27 @@
.panel.panel-success
.panel-heading
%h3.panel-title
= link_to "#{harvest.owner.login_name}'s harvest", harvest.owner
= link_to "#{harvest.owner.login_name}'s #{harvest.crop.name} harvest", harvest
- if can? :edit, harvest
%a.pull-right{:href => edit_harvest_path(harvest), :role => "button", :id => "edit_harvest_glyphicon"}
%span.glyphicon.glyphicon-pencil{:title => "Edit"}
.panel-body
.row
.col-md-4
= link_to image_tag((harvest.crop.default_photo ? harvest.crop.default_photo.thumbnail_url : 'placeholder_150.png'), :alt => harvest.crop.name, :class => 'img'), harvest.crop
= link_to image_tag((harvest.default_photo ? harvest.default_photo.thumbnail_url : 'placeholder_150.png'), :alt => harvest.crop.name, :class => 'img'), harvest.crop
.col-md-8
%dl.dl-horizontal
%dt Crop :
%dt Crop :
%dd= link_to harvest.crop.name, harvest.crop
%dt Plant part :
%dt Plant part :
%dd= link_to harvest.plant_part, harvest.plant_part
%dt Quantity :
%dt Quantity :
%dd= display_quantity(harvest)
%dt Harvest date :
%dt Harvest date :
%dd= harvest.harvested_at
.panel-footer
%dt Description
%dd
%dd.truncate
= display_harvest_description(harvest)
= if not harvest.description.empty?
- link_to "Read more", harvest_path(harvest)

View File

@@ -21,7 +21,7 @@
= render :partial => 'shared/signin_signup', :locals => { :to => 'track your harvests' }
%div.pagination
= page_entries_info @harvests, :model => "harvests"
= page_entries_info @harvests
= will_paginate @harvests
.row
- if @harvests.size > 0
@@ -30,7 +30,7 @@
=render :partial => 'harvests/thumbnail', :locals => {:harvest => harvest}
%div.pagination
= page_entries_info @harvests, :model => "harvests"
= page_entries_info @harvests
= will_paginate @harvests
%ul.list-inline

View File

@@ -1,4 +1,12 @@
=content_for :title, "#{@harvest.crop} harvested by #{@harvest.owner}"
- content_for :opengraph do
- @harvest.photos.each do |photo|
= tag("meta", property: "og:image", content: photo.fullsize_url)
= tag("meta", property: "og:image:user_generated", content: "true")
= tag("meta", property: "og:title", content: "#{@harvest.crop} harvested by #{@harvest.owner}")
= tag("meta", property: "og:type", content: "website")
= tag("meta", property: "og:url", content: request.original_url)
= tag("meta", property: "og:site_name", content: ENV['GROWSTUFF_SITE_NAME'])
.row
.col-md-6
@@ -9,8 +17,8 @@
= link_to "view all #{@harvest.owner}'s harvests", harvests_by_owner_path(:owner => @harvest.owner.slug)
%p
%b Plant part:
- if @harvest.plant_part
= link_to @harvest.plant_part, @harvest.plant_part
- if @harvest.plant_part
= link_to @harvest.plant_part, @harvest.plant_part
- else
not specified
%p

View File

@@ -2,7 +2,7 @@
%p.stats
= t('.message_html', { member: link_to(t('.member_linktext', count: Member.confirmed.size.to_i), members_path),
number_crops: link_to(t('.number_crops_linktext', count: Crop.count.to_i), crops_path),
number_plantings: link_to(t('.number_plantings_linktext', count: Planting.count.to_i), plantings_path),
number_plantings: link_to(t('.number_plantings_linktext', count: Planting.count.to_i), plantings_path),
number_gardens: link_to(t('.number_gardens_linktext', count: Garden.count.to_i), gardens_path) })

View File

@@ -1,7 +0,0 @@
- daysleft = Date.new(2014, 10, 22) - Date.today # end of campaign is the 21st, this gives a number that matches what IGG uses
- if daysleft > 0
.crowdfunding-banner
Help us share free growing information with the world.
= link_to "Support our crowdfunding campaign.", "https://www.indiegogo.com/projects/growstuff/x/6079859"
There are only #{daysleft.to_i} days left.

View File

@@ -8,16 +8,24 @@
%span.icon-bar
%span.icon-bar
%span.icon-bar
%a.navbar-brand(href=root_path)
%a.navbar-brand.hidden-xs(href=root_path)
= image_tag("growstuff-brand.png", :size => "200x50", :alt => ENV['GROWSTUFF_SITE_NAME'])
= form_tag crops_search_path, :method => :get, :id => 'navbar-search', :class => 'navbar-form pull-right' do
.input
%a.navbar-brand.visible-xs(href=root_path)
= image_tag("growstuff-apple-touch-icon-precomposed.png", :size => "50x50", :class=>"img-responsive", :alt => ENV['GROWSTUFF_SITE_NAME'])
.form.navbar-form.pull-left
= form_tag crops_search_path, :method => :get, :id => 'navbar-search' do
= label_tag :term, "Search crop database:", :class => 'sr-only'
= text_field_tag 'term', nil, :class => 'search-query input-medium form-control', :placeholder => 'Search crops'
= submit_tag "Search", :class => 'btn sr-only'
.input
.input-group
= text_field_tag 'term', nil, :class => 'search-query input-medium form-control', :placeholder => 'Search crops'
.input-group-btn
%button.btn.btn-default{:style => "height: 34px;"}
= submit_tag "Search", :class => 'btn sr-only'
%span.glyphicon.glyphicon-search
.navbar-collapse.collapse#navbar-collapse
%ul.nav.navbar-nav.pull-right
%ul.nav.navbar-nav.navbar-right
%li.dropdown<
%a.dropdown-toggle{'data-toggle' => 'dropdown', :href => crops_path}
Crops

View File

@@ -1,11 +1,14 @@
%head
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta property="og:image" content="#{image_url 'growstuff-apple-touch-icon-precomposed.png'}"/>
<meta property="og:title" content="#{content_for?(:title) ? yield(:title) + " - #{ ENV['GROWSTUFF_SITE_NAME']} " : ENV['GROWSTUFF_SITE_NAME']}" />
<meta property="og:type" content="website" />
<meta property="og:url" content="#{root_url}" />
<meta property="og:site_name" content="#{ENV['GROWSTUFF_SITE_NAME']}" />
- if content_for?(:opengraph)
= yield(:opengraph)
- else
= tag("meta", property: "og:image", content: image_url('facebook-thumbnail.png'))
= tag("meta", property: "og:title", content: "#{content_for?(:title) ? yield(:title) + " - #{ ENV['GROWSTUFF_SITE_NAME']} " : ENV['GROWSTUFF_SITE_NAME']}")
= tag("meta", property: "og:type", content: "website")
= tag("meta", property: "og:url", content: root_url)
= tag("meta", property: "og:site_name", content: ENV['GROWSTUFF_SITE_NAME'])
- if (content_for?(:member_rss_login_name) && content_for(:member_rss_slug))
= auto_discovery_link_tag(:rss, { :controller => "/members", :action => 'show', :format => "rss", :id => yield(:member_rss_slug) }, { :title => "#{ ENV['GROWSTUFF_SITE_NAME'] }- #{yield(:member_rss_login_name)}'s posts" })

View File

@@ -3,7 +3,6 @@
= render :partial => "layouts/meta"
%body
= render :partial => "layouts/header"
= render :partial => "layouts/crowdfunding"
#maincontainer.container
.row
@@ -18,12 +17,7 @@
%p
.btn-group
= yield(:buttonbar)
- if notice
.alert.alert-success
= notice
- if alert
.alert.alert-warning
= alert
= render :partial => "shared/flash_messages", flash: flash
= yield
%footer

View File

@@ -1,4 +1,4 @@
- if twitter_auth || flickr_auth || member.show_email
- if twitter_auth || flickr_auth || facebook_auth || member.show_email
%h4 Contact
- if twitter_auth
@@ -11,6 +11,11 @@
= image_tag "flickr_32.png", :size => "32x32", :alt => 'Flickr logo'
=link_to flickr_auth.name, "http://flickr.com/photos/#{flickr_auth.uid}"
- if facebook_auth
%p
= image_tag "facebook_32.png", :size => "32x32", :alt => 'Facebook logo'
=link_to facebook_auth.name, "http://facebook.com/profile/#{facebook_auth.uid}"
- if member.show_email
%p
Email:

View File

@@ -7,7 +7,7 @@
- first_garden = false
= link_to g.name, "#garden#{g.id}", 'data-toggle' => 'tab'
- if current_member == member
%li.navbar-right
%li.navbar-right
= link_to new_garden_path, class: 'btn' do
Add New Garden
.tab-content{style: "padding-top: 1em"}
@@ -25,15 +25,15 @@
%p No description available yet.
- if can? :edit, g
%p
Why not
%p
Why not
= link_to 'tell us more.', edit_garden_path(g)
- if g.photos.size > 0 or (can? :edit, g and can? :create, Photo)
.row
%h3 Photos
%p= pluralize(g.photos.length, "photo")
%p= localize_plural(g.photos, Photo)
.row
%ul.thumbnails
- g.photos.each do |p|
@@ -44,12 +44,12 @@
%p
= link_to "Add photo", new_photo_path(:type => "garden", :id => g.id), :class => 'btn btn-primary'
%h3 What's planted here?
.row
- if g.featured_plantings.size > 0
- g.featured_plantings.each.with_index do |planting|
.col-xs-12.col-lg-6
= render partial: "plantings/thumbnail", locals: {:planting => planting}
%h3 What's planted here?
.row
- if g.featured_plantings.size > 0
- g.featured_plantings.each.with_index do |planting|
.col-xs-12.col-lg-6
= render partial: "plantings/thumbnail", locals: {:planting => planting}
%p
= link_to "More about this garden...", url_for(g)
%p
= link_to "More about this garden...", url_for(g)

View File

@@ -2,4 +2,4 @@
- if member.location.blank?
unknown location
- else
= link_to member.location, place_path(:place => member.location)
= link_to member.location, place_path(:place => member.location, anchor: "members")

View File

@@ -1,5 +1,9 @@
- if member.latitude and member.longitude
%div#membermap
%p
See other members near
= link_to member.location, place_path(member.location)
See other members, plantings, seeds and more near
= link_to member.location, place_path(member.location, anchor: "members")
- else
%div.location-not-set
%div.sr-only Location not known
%div.sr-only We can't show you what's nearby

View File

@@ -1,30 +1,30 @@
%h3 Activity
%ul
%ul.list-inline
%li
- if member.plantings.size > 0
= link_to pluralize(member.plantings.size, "planting"), plantings_by_owner_path(:owner => member)
= link_to localize_plural(member.plantings, Planting), plantings_by_owner_path(owner: member)
- else
0 plantings
%li
- if member.harvests.size > 0
= link_to pluralize(member.harvests.size, "harvest"), harvests_by_owner_path(:owner => member)
= link_to localize_plural(member.harvests, Harvest), harvests_by_owner_path(owner: member)
- else
0 harvests
%li
- if member.seeds.size > 0
= link_to pluralize(member.seeds.size, "seeds"), seeds_by_owner_path(:owner => member)
= link_to localize_plural(member.seeds, Seed), seeds_by_owner_path(owner: member)
- else
0 seeds
%li
- if member.posts.size > 0
= link_to pluralize(member.posts.size, "post"), posts_by_author_path(:author => member)
= link_to localize_plural(member.posts, Post), posts_by_author_path(author: member)
- else
0 posts
%li
- if member.followed.size > 0
= link_to pluralize(member.followed.size, "follow"), member_follows_path(member)
= link_to localize_plural(member.followed, Follow), member_follows_path(member)
- else
0 following

View File

@@ -21,4 +21,4 @@
ago.
%p
%small
= [pluralize(member.gardens.size, "garden"), pluralize(member.plantings.size, "planting"), pluralize(member.seeds.size, "seed")].join(", ")
= [localize_plural(member.gardens, Garden), localize_plural(member.plantings, Planting), localize_plural(member.seeds, Seed)].join(", ")

View File

@@ -0,0 +1,40 @@
- content_for :title, "Join Growstuff"
%p Sign up for a Growstuff account to track your veggie garden and connect with other local growers.
= form_for(current_member, :as => 'member', :url => finish_signup_path(current_member), :html => { role: 'form'}) do |f|
- if @show_errors && current_member.errors.any?
%div.alert.alert-danger
- current_member.errors.full_messages.each do |msg|
= msg
%br
.form-group
= f.label :login_name
.controls
= f.text_field :login_name, :autofocus => true, class: 'form-control input-lg'
%p.help-block Choose a login name
.form-group
= f.label :email
.controls
= f.text_field :email, class: 'form-control input-lg', placeholder: 'Example: email@me.com'
%p.help-block Please confirm your email address.
.form-group
.col-md-offset-2.col-md-8.checkbox
%label
= f.check_box :tos_agreement
I agree to the
= succeed "." do
= link_to 'Terms of Service', "#{root_url}/policy/tos"
.form-group
.col-md-offset-2.col-md-8.checkbox
%label
= f.check_box :newsletter, :checked => true
Subscribe to the #{ENV['GROWSTUFF_SITE_NAME']} newsletter
.help-inline
= render :partial => 'devise/registrations/newsletter_blurb'
%div.actions
= f.submit 'Continue', :class => 'btn btn-primary'

View File

@@ -7,7 +7,7 @@
= submit_tag "Show", :class => 'btn btn-primary'
%div.pagination
= page_entries_info @members, :model => "members"
= page_entries_info @members
= will_paginate @members
.member-cards
@@ -15,5 +15,5 @@
= render :partial => "members/thumbnail", :locals => { :member => m }
%div.pagination
= page_entries_info @members, :model => "members"
= page_entries_info @members
= will_paginate @members

View File

@@ -1,5 +1,12 @@
- content_for :title, @member.login_name
- content_for :subtitle, @member.location
- content_for :opengraph do
= tag("meta", property: "og:image", content: avatar_uri(@member, 200))
= tag("meta", property: "og:image:user_generated", content: "true")
= tag("meta", property: "og:title", content: @member.login_name)
= tag("meta", property: "og:type", content: "profile")
= tag("meta", property: "og:url", content: request.original_url)
= tag("meta", property: "og:site_name", content: ENV['GROWSTUFF_SITE_NAME'])
- content_for :buttonbar do
- if can? :update, @member
= link_to 'Edit profile', edit_member_registration_path, :class => 'btn btn-default'
@@ -30,4 +37,4 @@
= render :partial => "avatar", :locals => { :member => @member }
= render :partial => "account", :locals => { :member => @member }
= render :partial => "stats", :locals => { :member => @member }
= render :partial => "contact", :locals => { :member => @member, :twitter_auth => @twitter_auth, :flickr_auth => @flickr_auth }
= render :partial => "contact", :locals => { :member => @member, :twitter_auth => @twitter_auth, :flickr_auth => @flickr_auth, :facebook_auth => @facebook_auth }

View File

@@ -1,16 +1,16 @@
- content_for :title, "#{@member.login_name}'s followers"
%div.pagination
= page_entries_info @followers, :model => "members"
= page_entries_info @followers
= will_paginate @followers
.row
.col-md-12
- @followers.each do |f|
.col-md-4.three-across
.thumbnail
.col-md-4.three-across
.thumbnail
= render :partial => "members/thumbnail", :locals => { :member => f }
%div.pagination
= page_entries_info @followers, :model => "members"
= will_paginate @followers
= page_entries_info @followers
= will_paginate @followers

Some files were not shown because too many files have changed in this diff Show More