muck-shares 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +5 -0
- data/MIT-LICENSE +19 -0
- data/README.rdoc +30 -0
- data/Rakefile +91 -0
- data/VERSION +1 -0
- data/app/controllers/muck/shares_controller.rb +107 -0
- data/app/helpers/muck_shares_helper.rb +23 -0
- data/app/views/activity_templates/_share.html.erb +3 -0
- data/app/views/shares/_form.html.erb +22 -0
- data/app/views/shares/_share.html.erb +9 -0
- data/app/views/shares/index.html.erb +2 -0
- data/app/views/shares/new.html.erb +5 -0
- data/config/muck_shares_routes.rb +8 -0
- data/db/migrate/20090803185323_create_shares.rb +16 -0
- data/db/migrate/20090804184247_add_comment_count_to_shares.rb +9 -0
- data/install.rb +1 -0
- data/lib/active_record/acts/muck_share.rb +58 -0
- data/lib/active_record/acts/muck_sharer.rb +28 -0
- data/lib/muck_shares.rb +6 -0
- data/lib/muck_shares/initialize_routes.rb +8 -0
- data/lib/muck_shares/tasks.rb +28 -0
- data/locales/en.yml +19 -0
- data/muck-shares.gemspec +378 -0
- data/rails/init.rb +4 -0
- data/tasks/muck_shares_tasks.rake +1 -0
- data/test/rails_root/.gitignore +8 -0
- data/test/rails_root/.rake_tasks +103 -0
- data/test/rails_root/Capfile +3 -0
- data/test/rails_root/Rakefile +16 -0
- data/test/rails_root/app/controllers/application_controller.rb +21 -0
- data/test/rails_root/app/controllers/default_controller.rb +7 -0
- data/test/rails_root/app/helpers/application_helper.rb +3 -0
- data/test/rails_root/app/models/.keep +0 -0
- data/test/rails_root/app/models/activity.rb +3 -0
- data/test/rails_root/app/models/comment.rb +4 -0
- data/test/rails_root/app/models/share.rb +4 -0
- data/test/rails_root/app/models/user.rb +14 -0
- data/test/rails_root/app/models/user_session.rb +2 -0
- data/test/rails_root/app/views/default/index.html.erb +0 -0
- data/test/rails_root/app/views/layouts/default.html.erb +26 -0
- data/test/rails_root/config/amazon_s3.yml +14 -0
- data/test/rails_root/config/boot.rb +109 -0
- data/test/rails_root/config/database.yml +23 -0
- data/test/rails_root/config/environment.rb +31 -0
- data/test/rails_root/config/environments/cucumber.rb +38 -0
- data/test/rails_root/config/environments/development.rb +19 -0
- data/test/rails_root/config/environments/production.rb +1 -0
- data/test/rails_root/config/environments/test.rb +42 -0
- data/test/rails_root/config/global_config.yml +77 -0
- data/test/rails_root/config/initializers/inflections.rb +10 -0
- data/test/rails_root/config/initializers/mime_types.rb +5 -0
- data/test/rails_root/config/initializers/requires.rb +13 -0
- data/test/rails_root/config/initializers/session_store.rb +8 -0
- data/test/rails_root/config/routes.rb +3 -0
- data/test/rails_root/db/.keep +0 -0
- data/test/rails_root/db/migrate/20090320174818_create_muck_permissions_and_roles.rb +16 -0
- data/test/rails_root/db/migrate/20090402033319_add_muck_activities.rb +36 -0
- data/test/rails_root/db/migrate/20090402234137_create_languages.rb +18 -0
- data/test/rails_root/db/migrate/20090426041056_create_countries.rb +15 -0
- data/test/rails_root/db/migrate/20090426041103_create_states.rb +18 -0
- data/test/rails_root/db/migrate/20090602041838_create_users.rb +39 -0
- data/test/rails_root/db/migrate/20090608073052_create_friends.rb +16 -0
- data/test/rails_root/db/migrate/20090613173314_create_comments.rb +24 -0
- data/test/rails_root/db/migrate/20090704220055_create_slugs.rb +18 -0
- data/test/rails_root/db/migrate/20090704220120_acts_as_taggable_on_migration.rb +29 -0
- data/test/rails_root/db/migrate/20090730154102_allow_null_user.rb +9 -0
- data/test/rails_root/db/migrate/20090803185323_create_shares.rb +16 -0
- data/test/rails_root/db/migrate/20090804184247_add_comment_count_to_shares.rb +9 -0
- data/test/rails_root/features/shares.feature +21 -0
- data/test/rails_root/features/step_definitions/common_steps.rb +93 -0
- data/test/rails_root/features/step_definitions/share_steps.rb +11 -0
- data/test/rails_root/features/step_definitions/webrat_steps.rb +128 -0
- data/test/rails_root/features/support/env.rb +49 -0
- data/test/rails_root/features/support/paths.rb +33 -0
- data/test/rails_root/lib/tasks/cucumber.rake +20 -0
- data/test/rails_root/public/.htaccess +40 -0
- data/test/rails_root/public/404.html +30 -0
- data/test/rails_root/public/422.html +30 -0
- data/test/rails_root/public/500.html +30 -0
- data/test/rails_root/public/dispatch.rb +10 -0
- data/test/rails_root/public/favicon.ico +0 -0
- data/test/rails_root/public/images/arrow_left.gif +0 -0
- data/test/rails_root/public/images/arrow_right.gif +0 -0
- data/test/rails_root/public/images/fancybox/fancy_closebox.png +0 -0
- data/test/rails_root/public/images/fancybox/fancy_left.png +0 -0
- data/test/rails_root/public/images/fancybox/fancy_progress.png +0 -0
- data/test/rails_root/public/images/fancybox/fancy_right.png +0 -0
- data/test/rails_root/public/images/fancybox/fancy_shadow_e.png +0 -0
- data/test/rails_root/public/images/fancybox/fancy_shadow_n.png +0 -0
- data/test/rails_root/public/images/fancybox/fancy_shadow_ne.png +0 -0
- data/test/rails_root/public/images/fancybox/fancy_shadow_nw.png +0 -0
- data/test/rails_root/public/images/fancybox/fancy_shadow_s.png +0 -0
- data/test/rails_root/public/images/fancybox/fancy_shadow_se.png +0 -0
- data/test/rails_root/public/images/fancybox/fancy_shadow_sw.png +0 -0
- data/test/rails_root/public/images/fancybox/fancy_shadow_w.png +0 -0
- data/test/rails_root/public/images/fancybox/fancy_title_left.png +0 -0
- data/test/rails_root/public/images/fancybox/fancy_title_main.png +0 -0
- data/test/rails_root/public/images/fancybox/fancy_title_right.png +0 -0
- data/test/rails_root/public/images/icons/accept.png +0 -0
- data/test/rails_root/public/images/icons/add.png +0 -0
- data/test/rails_root/public/images/icons/delete.png +0 -0
- data/test/rails_root/public/images/icons/vote.png +0 -0
- data/test/rails_root/public/images/loading.gif +0 -0
- data/test/rails_root/public/images/nothing.png +0 -0
- data/test/rails_root/public/images/profile_default.jpg +0 -0
- data/test/rails_root/public/images/rails.png +0 -0
- data/test/rails_root/public/images/spinner.gif +0 -0
- data/test/rails_root/public/images/sprites.png +0 -0
- data/test/rails_root/public/javascripts/application.js +2 -0
- data/test/rails_root/public/javascripts/builder.js +136 -0
- data/test/rails_root/public/javascripts/controls.js +963 -0
- data/test/rails_root/public/javascripts/dragdrop.js +972 -0
- data/test/rails_root/public/javascripts/effects.js +1120 -0
- data/test/rails_root/public/javascripts/fancyzoom.min.js +1 -0
- data/test/rails_root/public/javascripts/jquery/jquery-ui.js +273 -0
- data/test/rails_root/public/javascripts/jquery/jquery.easing.js +1 -0
- data/test/rails_root/public/javascripts/jquery/jquery.fancybox.js +9 -0
- data/test/rails_root/public/javascripts/jquery/jquery.form.js +637 -0
- data/test/rails_root/public/javascripts/jquery/jquery.jgrowl.js +2 -0
- data/test/rails_root/public/javascripts/jquery/jquery.js +19 -0
- data/test/rails_root/public/javascripts/jquery/jquery.tips.js +69 -0
- data/test/rails_root/public/javascripts/muck.js +80 -0
- data/test/rails_root/public/javascripts/muck_activities.js +108 -0
- data/test/rails_root/public/javascripts/prototype.js +4225 -0
- data/test/rails_root/public/javascripts/scriptaculous.js +58 -0
- data/test/rails_root/public/javascripts/slider.js +277 -0
- data/test/rails_root/public/javascripts/sound.js +60 -0
- data/test/rails_root/public/robots.txt +1 -0
- data/test/rails_root/public/stylesheets/.keep +0 -0
- data/test/rails_root/public/stylesheets/admin.css +12 -0
- data/test/rails_root/public/stylesheets/blueprint/ie.css +26 -0
- data/test/rails_root/public/stylesheets/blueprint/liquid_screen.css +203 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/cross.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/key.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/tick.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/readme.txt +32 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/screen.css +97 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/fancy-type/readme.txt +14 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/fancy-type/screen.css +71 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/doc.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/email.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/external.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/feed.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/im.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/pdf.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/visited.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/xls.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/readme.txt +18 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/screen.css +40 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/liquid/liquid.css +134 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/liquid/src/liquid.css +197 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/rtl/readme.txt +10 -0
- data/test/rails_root/public/stylesheets/blueprint/plugins/rtl/screen.css +109 -0
- data/test/rails_root/public/stylesheets/blueprint/print.css +30 -0
- data/test/rails_root/public/stylesheets/blueprint/screen.css +251 -0
- data/test/rails_root/public/stylesheets/blueprint/sprite.css +1 -0
- data/test/rails_root/public/stylesheets/blueprint/src/forms.css +49 -0
- data/test/rails_root/public/stylesheets/blueprint/src/grid.css +213 -0
- data/test/rails_root/public/stylesheets/blueprint/src/grid.png +0 -0
- data/test/rails_root/public/stylesheets/blueprint/src/ie.css +59 -0
- data/test/rails_root/public/stylesheets/blueprint/src/print.css +85 -0
- data/test/rails_root/public/stylesheets/blueprint/src/reset.css +38 -0
- data/test/rails_root/public/stylesheets/blueprint/src/typography.css +105 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_diagonals-thick_15_444444_40x40.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_100_f0f0f0_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_50_99c2ff_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_55_fbf5d0_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_80_e6e6e6_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_highlight-soft_100_e7eef3_1x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_222222_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_2694e8_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_2e83ff_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_72a7cf_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_888888_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_ffffff_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/cupertino/jquery-ui-1.7.1.custom.css +404 -0
- data/test/rails_root/public/stylesheets/jquery/jquery.fancybox.css +44 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_217bc0_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_2e83ff_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_469bdd_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_6da8d5_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_d8e7f3_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_f9bd01_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/redmond/jquery-ui-1.7.1.custom.css +404 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/smoothness/jquery-ui-1.7.1.custom.css +404 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
- data/test/rails_root/public/stylesheets/jquery/ui-lightness/jquery-ui-1.7.1.custom.css +404 -0
- data/test/rails_root/public/stylesheets/reset.css +0 -0
- data/test/rails_root/public/stylesheets/styles.css +89 -0
- data/test/rails_root/public/stylesheets/themes/blue/styles.css +1 -0
- data/test/rails_root/public/stylesheets/themes/red/styles.css +1 -0
- data/test/rails_root/script/about +3 -0
- data/test/rails_root/script/breakpointer +3 -0
- data/test/rails_root/script/console +3 -0
- data/test/rails_root/script/create_project.rb +52 -0
- data/test/rails_root/script/cucumber +8 -0
- data/test/rails_root/script/dbconsole +3 -0
- data/test/rails_root/script/destroy +3 -0
- data/test/rails_root/script/generate +3 -0
- data/test/rails_root/script/performance/benchmarker +3 -0
- data/test/rails_root/script/performance/profiler +3 -0
- data/test/rails_root/script/performance/request +3 -0
- data/test/rails_root/script/plugin +3 -0
- data/test/rails_root/script/process/inspector +3 -0
- data/test/rails_root/script/process/reaper +3 -0
- data/test/rails_root/script/process/spawner +3 -0
- data/test/rails_root/script/runner +3 -0
- data/test/rails_root/script/server +3 -0
- data/test/rails_root/test/factories.rb +75 -0
- data/test/rails_root/test/functional/.keep +0 -0
- data/test/rails_root/test/functional/shares_controller_test.rb +119 -0
- data/test/rails_root/test/mocks/development/.keep +0 -0
- data/test/rails_root/test/mocks/test/.keep +0 -0
- data/test/rails_root/test/shoulda_macros/controller.rb +49 -0
- data/test/rails_root/test/shoulda_macros/forms.rb +32 -0
- data/test/rails_root/test/shoulda_macros/models.rb +50 -0
- data/test/rails_root/test/shoulda_macros/pagination.rb +53 -0
- data/test/rails_root/test/shoulda_macros/plugins.rb +34 -0
- data/test/rails_root/test/test_helper.rb +48 -0
- data/test/rails_root/test/unit/.keep +0 -0
- data/test/rails_root/test/unit/share_test.rb +57 -0
- data/test/rails_root/test/unit/user_test.rb +26 -0
- data/test/rails_root/vendor/plugins/ssl_requirement/README +43 -0
- data/test/rails_root/vendor/plugins/ssl_requirement/lib/ssl_requirement.rb +62 -0
- data/test/rails_root/vendor/plugins/ssl_requirement/test/ssl_requirement_test.rb +132 -0
- data/test/rails_root/vendor/plugins/validation_reflection/CHANGELOG +24 -0
- data/test/rails_root/vendor/plugins/validation_reflection/LICENSE +20 -0
- data/test/rails_root/vendor/plugins/validation_reflection/README +64 -0
- data/test/rails_root/vendor/plugins/validation_reflection/Rakefile +22 -0
- data/test/rails_root/vendor/plugins/validation_reflection/about.yml +7 -0
- data/test/rails_root/vendor/plugins/validation_reflection/init.rb +8 -0
- data/test/rails_root/vendor/plugins/validation_reflection/lib/boiler_plate/validation_reflection.rb +129 -0
- data/test/rails_root/vendor/plugins/validation_reflection/test/test_helper.rb +36 -0
- data/test/rails_root/vendor/plugins/validation_reflection/test/validation_reflection_test.rb +126 -0
- data/uninstall.rb +1 -0
- metadata +420 -0
data/MIT-LICENSE
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
3
|
+
a copy of this software and associated documentation files (the
|
|
4
|
+
"Software"), to deal in the Software without restriction, including
|
|
5
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
6
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
7
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
8
|
+
the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be
|
|
11
|
+
included in all copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
14
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
15
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
16
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
17
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
18
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
19
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
= MuckShares
|
|
2
|
+
|
|
3
|
+
Add sharing functionality to your muck application.
|
|
4
|
+
|
|
5
|
+
== Setup
|
|
6
|
+
Install the gem:
|
|
7
|
+
sudo gem install muck-shares
|
|
8
|
+
This should also install other required muck gems. Items are shared into the user's activity feed as well as the
|
|
9
|
+
dashboard activity feed of any users that following or friends with the current user.
|
|
10
|
+
|
|
11
|
+
== Usage
|
|
12
|
+
|
|
13
|
+
=== Share model
|
|
14
|
+
Create a model called share in your project and add the following:
|
|
15
|
+
|
|
16
|
+
class Share < ActiveRecord::Base
|
|
17
|
+
acts_as_muck_share
|
|
18
|
+
end
|
|
19
|
+
This let's you add any other methods to the share model that you see fit.
|
|
20
|
+
|
|
21
|
+
=== User model
|
|
22
|
+
You will need a user model that will do the sharing:
|
|
23
|
+
class User < ActiveRecord::Base
|
|
24
|
+
acts_as_muck_sharer
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
MuckShares will look for 'current_user' when adding new shares.
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
Copyright (c) 2009 Muck your app, released under the MIT license
|
data/Rakefile
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
require 'rake'
|
|
2
|
+
require 'rake/testtask'
|
|
3
|
+
require 'rake/rdoctask'
|
|
4
|
+
|
|
5
|
+
desc 'Default: run unit tests.'
|
|
6
|
+
task :default => :test
|
|
7
|
+
|
|
8
|
+
desc 'Test muck-shares.'
|
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
|
10
|
+
t.libs << 'lib'
|
|
11
|
+
t.libs << 'test/rails_root/test'
|
|
12
|
+
t.pattern = 'test/rails_root/test/**/*_test.rb'
|
|
13
|
+
t.verbose = true
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
begin
|
|
17
|
+
require 'rcov/rcovtask'
|
|
18
|
+
Rcov::RcovTask.new do |t|
|
|
19
|
+
#t.libs << 'lib'
|
|
20
|
+
t.libs << 'test/rails_root/lib'
|
|
21
|
+
t.pattern = 'test/rails_root/test/**/*_test.rb'
|
|
22
|
+
t.verbose = true
|
|
23
|
+
t.output_dir = 'coverage'
|
|
24
|
+
t.rcov_opts << '--exclude "gems/*"'
|
|
25
|
+
end
|
|
26
|
+
rescue LoadError
|
|
27
|
+
task :rcov do
|
|
28
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
desc 'Generate documentation for the muck-shares gem.'
|
|
33
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
34
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
35
|
+
rdoc.title = 'MuckShares'
|
|
36
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
|
37
|
+
rdoc.rdoc_files.include('README*')
|
|
38
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
desc 'Translate this gem'
|
|
42
|
+
task :translate do
|
|
43
|
+
file = File.join(File.dirname(__FILE__), 'locales', 'en.yml')
|
|
44
|
+
system("babelphish -o -y #{file}")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
begin
|
|
48
|
+
require 'jeweler'
|
|
49
|
+
Jeweler::Tasks.new do |gemspec|
|
|
50
|
+
gemspec.name = "muck-shares"
|
|
51
|
+
gemspec.summary = "The share engine for the muck system"
|
|
52
|
+
gemspec.email = "justinball@gmail.com"
|
|
53
|
+
gemspec.homepage = "http://github.com/jbasdf/muck_shares"
|
|
54
|
+
gemspec.description = "The share engine for the muck system."
|
|
55
|
+
gemspec.authors = ["Justin Ball"]
|
|
56
|
+
gemspec.rubyforge_project = 'muck-shares'
|
|
57
|
+
gemspec.add_dependency "muck-engine"
|
|
58
|
+
gemspec.add_dependency "muck-users"
|
|
59
|
+
gemspec.add_dependency "muck-activities"
|
|
60
|
+
gemspec.add_dependency "muck-comments"
|
|
61
|
+
end
|
|
62
|
+
rescue LoadError
|
|
63
|
+
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# rubyforge tasks
|
|
67
|
+
begin
|
|
68
|
+
require 'rake/contrib/sshpublisher'
|
|
69
|
+
namespace :rubyforge do
|
|
70
|
+
|
|
71
|
+
desc "Release gem and RDoc documentation to RubyForge"
|
|
72
|
+
task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
|
|
73
|
+
|
|
74
|
+
namespace :release do
|
|
75
|
+
desc "Publish RDoc to RubyForge."
|
|
76
|
+
task :docs => [:rdoc] do
|
|
77
|
+
config = YAML.load(
|
|
78
|
+
File.read(File.expand_path('~/.rubyforge/user-config.yml'))
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
host = "#{config['username']}@rubyforge.org"
|
|
82
|
+
remote_dir = "/var/www/gforge-projects/muck-shares/"
|
|
83
|
+
local_dir = 'rdoc'
|
|
84
|
+
|
|
85
|
+
Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
rescue LoadError
|
|
90
|
+
puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
|
|
91
|
+
end
|
data/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.1.0
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
class Muck::SharesController < ApplicationController
|
|
2
|
+
unloadable
|
|
3
|
+
|
|
4
|
+
before_filter :login_required, :except => [:index]
|
|
5
|
+
before_filter :setup_user
|
|
6
|
+
before_filter :get_share, :only => [:destroy]
|
|
7
|
+
|
|
8
|
+
def index
|
|
9
|
+
@shares = @user.shares.by_newest
|
|
10
|
+
respond_to do |format|
|
|
11
|
+
format.html { render :template => 'shares/index' }
|
|
12
|
+
format.pjs { render :template => 'shares/index', :layout => false }
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def new
|
|
17
|
+
@page_title = t('muck.shares.new_share')
|
|
18
|
+
@share = Share.new(:uri => params[:uri] || params[:u], :title => params[:title] || params[:t], :message => params[:message] || params[:m])
|
|
19
|
+
respond_to do |format|
|
|
20
|
+
format.html { render :template => 'shares/new', :layout => 'popup' }
|
|
21
|
+
format.pjs { render :template => 'shares/new', :layout => false }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def create
|
|
26
|
+
@share = current_user.shares.build(params[:share])
|
|
27
|
+
@share.save!
|
|
28
|
+
# TODO add UI that will let the user share with specific users
|
|
29
|
+
share_to = nil
|
|
30
|
+
@share.add_share_activities(share_to)
|
|
31
|
+
message = t('muck.shares.create_success')
|
|
32
|
+
handle_after_create(true, message)
|
|
33
|
+
rescue ActiveRecord::RecordInvalid => ex
|
|
34
|
+
if @share
|
|
35
|
+
errors = @share.errors.full_messages.to_sentence
|
|
36
|
+
else
|
|
37
|
+
errors = ex
|
|
38
|
+
end
|
|
39
|
+
message = t('muck.shares.create_error', :errors => errors)
|
|
40
|
+
handle_after_create(false, message)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def destroy
|
|
44
|
+
@share.destroy
|
|
45
|
+
respond_to do |format|
|
|
46
|
+
format.html do
|
|
47
|
+
flash[:notice] = t('muck.shares.share_removed')
|
|
48
|
+
redirect_back_or_default(current_user)
|
|
49
|
+
end
|
|
50
|
+
format.js do
|
|
51
|
+
render(:update) do |page|
|
|
52
|
+
page << "jQuery('##{@share.dom_id}').fadeOut();"
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
format.json { render :json => { :success => true, :message => t("muck.shares.share_removed"), :share_id => @share.id } }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
protected
|
|
60
|
+
|
|
61
|
+
def handle_after_create(success, message = '')
|
|
62
|
+
if success
|
|
63
|
+
respond_to do |format|
|
|
64
|
+
format.html { do_after_create_action(success, message) }
|
|
65
|
+
format.json { render :json => { :success => true, :share => @share, :message => message, :html => get_share_html(@share) } }
|
|
66
|
+
end
|
|
67
|
+
else
|
|
68
|
+
respond_to do |format|
|
|
69
|
+
format.html { do_after_create_action(success, message) }
|
|
70
|
+
format.json { render :json => { :success => false, :message => message, :errors => @errors } }
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def do_after_create_action(success, message)
|
|
76
|
+
flash[:error] = message if !success
|
|
77
|
+
if "true" == params[:render_new]
|
|
78
|
+
flash[:notice] = message if success
|
|
79
|
+
render :template => 'shares/new'
|
|
80
|
+
else
|
|
81
|
+
redirect_back_or_default(user_shares_path(@user))
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def get_share
|
|
86
|
+
@share = Share.find(params[:id])
|
|
87
|
+
unless @share.can_edit?(current_user)
|
|
88
|
+
respond_to do |format|
|
|
89
|
+
format.html do
|
|
90
|
+
flash[:notice] = I18n.t('muck.shares.cant_delete_share')
|
|
91
|
+
redirect_back_or_default(user_shares_path(@user))
|
|
92
|
+
end
|
|
93
|
+
format.js { render(:update){|page| page.alert I18n.t('muck.shares.cant_delete_share')}}
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def get_share_html(share)
|
|
99
|
+
render_as_html do
|
|
100
|
+
render_to_string(:partial => "shares/share", :object => share)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def setup_user
|
|
105
|
+
@user = User.find(params[:user_id]) rescue current_user
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module MuckSharesHelper
|
|
2
|
+
|
|
3
|
+
def show_shares(shares)
|
|
4
|
+
render :partial => 'shares/share', :collection => shares
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
# parent is the object to which the shares will be attached
|
|
8
|
+
# share is the optional parent share for the new share.
|
|
9
|
+
def share_form(share = nil, render_new = false)
|
|
10
|
+
share ||= Share.new
|
|
11
|
+
render :partial => 'shares/form', :locals => { :share => share, :render_new => render_new }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Renders a delete button for a share item
|
|
15
|
+
def delete_share(share, button_type = :button, button_text = t("muck.general.delete"))
|
|
16
|
+
render :partial => 'shared/delete', :locals => { :delete_object => share,
|
|
17
|
+
:button_type => button_type,
|
|
18
|
+
:button_text => button_text,
|
|
19
|
+
:form_class => 'comment-delete',
|
|
20
|
+
:delete_path => share_path(share, :format => 'js') }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<div id="<%= share.dom_id %>_new_share" class="share-form-wrapper">
|
|
2
|
+
<% custom_form_for(share, :url => user_shares_path(current_user), :html => { :id => "#{share.dom_id}_share_form", :class => "share-form"} ) do |f| -%>
|
|
3
|
+
<% if defined?(include_share_to) -%>
|
|
4
|
+
<div id="share_to">
|
|
5
|
+
<%= f.text_field :to %>
|
|
6
|
+
</div>
|
|
7
|
+
<% end -%>
|
|
8
|
+
<div id="share_information">
|
|
9
|
+
<%= f.text_field :title, { :label => t('muck.shares.title') } -%>
|
|
10
|
+
<%= f.text_field :uri, { :label => t('muck.shares.uri') } -%>
|
|
11
|
+
</div>
|
|
12
|
+
<div id="share_message">
|
|
13
|
+
<%= f.text_area :message, { :label => t('muck.shares.message'),
|
|
14
|
+
:class => 'min' } %>
|
|
15
|
+
</div>
|
|
16
|
+
<%= hidden_field_tag :render_new, render_new ? true : false -%>
|
|
17
|
+
<div class="button form-row">
|
|
18
|
+
<%= f.submit t('muck.shares.add_share_button'), :class => "button share-submit", :id => "share_submit_#{share.dom_id}" %>
|
|
19
|
+
<%= f.submit t('muck.shares.cancel_share_button'), :class => "button share-submit", :id => "cancel_submit_#{share.dom_id}" %>
|
|
20
|
+
</div>
|
|
21
|
+
<% end -%>
|
|
22
|
+
</div>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<div id="<%= share.dom_id %>" class="share_holder delete-container">
|
|
2
|
+
<div class="shareor-icon"><%= icon share.shared_by %></div>
|
|
3
|
+
<p><span class="sharer"><%= link_to share.shared_by.try(:display_name), share.shared_by %></span>
|
|
4
|
+
<div class="share-uri"><%= link_to h(share.title), share.uri %></div>
|
|
5
|
+
<div class="share-message"><%= h share.message %></div>
|
|
6
|
+
</p>
|
|
7
|
+
<%= delete_share(share, :image) if share.can_edit?(current_user) %>
|
|
8
|
+
<span class="share-time"><%= t("muck.general.time_ago", :time_in_words => time_ago_in_words(share.created_at)) %></span></p>
|
|
9
|
+
</div>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
ActionController::Routing::Routes.draw do |map|
|
|
2
|
+
map.resources :shares, :controller => 'muck/shares'
|
|
3
|
+
map.resources :users, :controller => 'muck/users' do |users|
|
|
4
|
+
# have to map into the muck/shares controller or rails can't find the shares
|
|
5
|
+
users.resources :shares, :controller => 'muck/shares'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class CreateShares < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
create_table :shares, :force => true do |t|
|
|
4
|
+
t.string :uri, :limit => 2083, :default => "", :null => false
|
|
5
|
+
t.string :title
|
|
6
|
+
t.text :message
|
|
7
|
+
t.integer :shared_by_id, :null => false
|
|
8
|
+
t.timestamps
|
|
9
|
+
end
|
|
10
|
+
add_index :shares, :shared_by_id
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.down
|
|
14
|
+
drop_table :shares
|
|
15
|
+
end
|
|
16
|
+
end
|
data/install.rb
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Install hook code here
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module ActiveRecord
|
|
2
|
+
module Acts #:nodoc:
|
|
3
|
+
module MuckShare #:nodoc:
|
|
4
|
+
def self.included(base)
|
|
5
|
+
base.extend(ClassMethods)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
module ClassMethods
|
|
9
|
+
|
|
10
|
+
def acts_as_muck_share(options = {})
|
|
11
|
+
|
|
12
|
+
belongs_to :shared_by, :class_name => "User" , :foreign_key => :shared_by_id
|
|
13
|
+
validates_presence_of :uri
|
|
14
|
+
validates_presence_of :title
|
|
15
|
+
|
|
16
|
+
acts_as_activity_item
|
|
17
|
+
acts_as_commentable
|
|
18
|
+
|
|
19
|
+
named_scope :by_newest, :order => "created_at DESC"
|
|
20
|
+
named_scope :by_oldest, :order => "created_at ASC"
|
|
21
|
+
named_scope :recent, lambda { { :conditions => ['created_at > ?', 1.week.ago] } }
|
|
22
|
+
|
|
23
|
+
class_eval <<-EOV
|
|
24
|
+
# prevents a user from submitting a crafted form that bypasses activation
|
|
25
|
+
attr_protected :created_at, :updated_at
|
|
26
|
+
EOV
|
|
27
|
+
|
|
28
|
+
include ActiveRecord::Acts::MuckShare::InstanceMethods
|
|
29
|
+
extend ActiveRecord::Acts::MuckShare::SingletonMethods
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# class methods
|
|
35
|
+
module SingletonMethods
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# All the methods available to a record that has had <tt>acts_as_muck_share</tt> specified.
|
|
40
|
+
module InstanceMethods
|
|
41
|
+
|
|
42
|
+
def add_share_activities(share_to = nil)
|
|
43
|
+
share_to ||= self.shared_by.feed_to
|
|
44
|
+
share_to = [share_to] unless share_to.is_a?(Array)
|
|
45
|
+
share_to << self.shared_by unless share_to.include?(self.shared_by) # make sure the person doing the sharing is included
|
|
46
|
+
add_activity(share_to, self.shared_by, self, 'share', '', '')
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# override this method to change the way permissions are handled on shares
|
|
50
|
+
def can_edit?(user)
|
|
51
|
+
return true if check_sharer(user)
|
|
52
|
+
false
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module ActiveRecord
|
|
2
|
+
module Acts #:nodoc:
|
|
3
|
+
module MuckSharer #:nodoc:
|
|
4
|
+
def self.included(base)
|
|
5
|
+
base.extend(ClassMethods)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
module ClassMethods
|
|
9
|
+
|
|
10
|
+
def acts_as_muck_sharer(options = {})
|
|
11
|
+
has_many :shares, :dependent => :destroy, :order => 'created_at ASC', :foreign_key => :shared_by_id
|
|
12
|
+
include ActiveRecord::Acts::MuckSharer::InstanceMethods
|
|
13
|
+
extend ActiveRecord::Acts::MuckSharer::SingletonMethods
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# class methods
|
|
18
|
+
module SingletonMethods
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# All the methods available to a record that has had <tt>acts_as_muck_share</tt> specified.
|
|
23
|
+
module InstanceMethods
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|