rails_tracker 0.3.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.
- checksums.yaml +7 -0
- data/.yardoc/checksums +13 -0
- data/.yardoc/object_types +0 -0
- data/.yardoc/objects/root.dat +0 -0
- data/.yardoc/proxy_types +0 -0
- data/Gemfile +31 -0
- data/Gemfile.lock +207 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +88 -0
- data/Rakefile +113 -0
- data/app/assets/javascripts/rails_tracker/application.js +15 -0
- data/app/assets/javascripts/rails_tracker/issues.js +2 -0
- data/app/assets/stylesheets/rails_tracker/application.css +14 -0
- data/app/assets/stylesheets/rails_tracker/bootstrap.css +6805 -0
- data/app/assets/stylesheets/rails_tracker/issues.css +4 -0
- data/app/controllers/rails_tracker/application_controller.rb +12 -0
- data/app/controllers/rails_tracker/issues_controller.rb +81 -0
- data/app/helpers/rails_tracker/application_helper.rb +4 -0
- data/app/helpers/rails_tracker/issues_helper.rb +4 -0
- data/app/mailers/rails_tracker/issue_mailer.rb +12 -0
- data/app/models/rails_tracker/issue.rb +7 -0
- data/app/models/rails_tracker/users_issues.rb +12 -0
- data/app/views/layouts/rails_tracker/_header.html.slim +28 -0
- data/app/views/layouts/rails_tracker/application.html.slim +10 -0
- data/app/views/rails_tracker/issue_mailer/resolved_alert.html.slim +6 -0
- data/app/views/rails_tracker/issues/currently_tracking.html.slim +19 -0
- data/app/views/rails_tracker/issues/index.html.slim +18 -0
- data/app/views/rails_tracker/issues/listen.html.slim +1 -0
- data/app/views/rails_tracker/issues/resolved.html.slim +14 -0
- data/config/config.ru +0 -0
- data/config/routes.rb +16 -0
- data/db/migrate/20130924202020_create_tracker_issues.rb +10 -0
- data/db/migrate/20130924233027_create_tracker_users_issues.rb +13 -0
- data/db/migrate/20130924233149_add_relation_users_issues.rb +5 -0
- data/db/migrate/20130928221922_add_issue_id_issues.rb +5 -0
- data/db/migrate/20130930233849_add_default_active_column.rb +6 -0
- data/db/seeds.rb +1 -0
- data/issues} +4 -0
- data/lib/generators/rails_tracker/install_generator.rb +16 -0
- data/lib/generators/rails_tracker/templates/install.rb +15 -0
- data/lib/generators/rails_tracker/templates/rails_tracker.en.yml +5 -0
- data/lib/rails_tracker/engine.rb +17 -0
- data/lib/rails_tracker/version.rb +3 -0
- data/lib/rails_tracker.rb +16 -0
- data/lib/tasks/rails_tracker_tasks.rake +4 -0
- data/lib/tasks/test_seed.rb +7 -0
- data/rails_tracker.gemspec +40 -0
- data/screenshot1.png +0 -0
- data/spec/controllers/issues_controller_spec.rb +56 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config/application.rb +65 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +34 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +4388 -0
- data/spec/dummy/log/test.log +750 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/dummy/tmp/cache/assets/BF2/BA0/sprockets%2Fc465f617006f371a570048816c344586 +0 -0
- data/spec/dummy/tmp/cache/assets/BF4/290/sprockets%2Fb4800880231a9ee7462085473e967133 +0 -0
- data/spec/dummy/tmp/cache/assets/BF4/F70/sprockets%2F7675401393a98310b35195d82832ef15 +0 -0
- data/spec/dummy/tmp/cache/assets/C7A/FD0/sprockets%2Fc32979f5e0331ec91531338d8ca43024 +0 -0
- data/spec/dummy/tmp/cache/assets/C82/940/sprockets%2F71fd0d5860b491074a85f02db6849227 +0 -0
- data/spec/dummy/tmp/cache/assets/C99/CE0/sprockets%2Fa9e3bce034e4511d161e1944200455d3 +0 -0
- data/spec/dummy/tmp/cache/assets/CB0/0F0/sprockets%2Fb94cb7750c4a13028836a17f82c5946b +0 -0
- data/spec/dummy/tmp/cache/assets/CB5/BF0/sprockets%2F34b1fb9a3b2f3e930436f5856e727129 +0 -0
- data/spec/dummy/tmp/cache/assets/CBA/DA0/sprockets%2F37124a7a569a43b3739b926cc9da6397 +0 -0
- data/spec/dummy/tmp/cache/assets/CBB/350/sprockets%2F63b5d7323752f0afb24ff82484e68592 +0 -0
- data/spec/dummy/tmp/cache/assets/CBF/450/sprockets%2Fd906fd2492c5676acdb0f31766975842 +0 -0
- data/spec/dummy/tmp/cache/assets/CC7/9D0/sprockets%2F04258d58abf44498e2be2088df594399 +0 -0
- data/spec/dummy/tmp/cache/assets/CCE/A50/sprockets%2F95f552879446108bb23884b9fc8de47f +0 -0
- data/spec/dummy/tmp/cache/assets/CD1/C90/sprockets%2F8ac4011e2f834d38565fb0295af0034b +0 -0
- data/spec/dummy/tmp/cache/assets/CD7/0A0/sprockets%2F5150feb2b84a78567c7185c5231a1b2e +0 -0
- data/spec/dummy/tmp/cache/assets/CDF/C70/sprockets%2F944209069b3190d36ab1a6c687c4c8be +0 -0
- data/spec/dummy/tmp/cache/assets/CE3/EE0/sprockets%2F2ce7c81c2bd8280698c3787300b2c29e +0 -0
- data/spec/dummy/tmp/cache/assets/CE6/C40/sprockets%2Fc818bee730438348a68efd92bf139220 +0 -0
- data/spec/dummy/tmp/cache/assets/CF6/460/sprockets%2Fd6d44319821067fc932ded86d5e9d837 +0 -0
- data/spec/dummy/tmp/cache/assets/CFD/4E0/sprockets%2Fc40691e60cdd254c0fc47867a0a018a1 +0 -0
- data/spec/dummy/tmp/cache/assets/D1E/700/sprockets%2F992faf3337c4ef8711e5522ff6706cf3 +0 -0
- data/spec/dummy/tmp/cache/assets/D34/D60/sprockets%2Ff95ce452cd15cfe3c62a22505520f1b9 +0 -0
- data/spec/dummy/tmp/cache/assets/D36/0C0/sprockets%2Fab4634b46625f2a59f2c81fca25b29b2 +0 -0
- data/spec/dummy/tmp/cache/assets/D36/580/sprockets%2Fd4cac000971b2a139e658ee1d57cc177 +0 -0
- data/spec/dummy/tmp/cache/assets/D38/370/sprockets%2F3f2e6c3a2fdaae7eac19245860891151 +0 -0
- data/spec/dummy/tmp/cache/assets/D38/BC0/sprockets%2F50f7a7f0253d401d08bac8f46537e6cb +0 -0
- data/spec/dummy/tmp/cache/assets/D39/1E0/sprockets%2Fb461de82da868310001d0886fc0fd5ef +0 -0
- data/spec/dummy/tmp/cache/assets/D39/C00/sprockets%2F422361ebe4a842fa89dc3b99a43ce114 +0 -0
- data/spec/dummy/tmp/cache/assets/D40/5F0/sprockets%2F06b15a4371a6f969ff7d0b7ef237ca06 +0 -0
- data/spec/dummy/tmp/cache/assets/D42/440/sprockets%2F20d8433a8526ab798ef3cc9c0d608d5b +0 -0
- data/spec/dummy/tmp/cache/assets/D42/900/sprockets%2Fa82f43357557dbec4918e295c1b6fa1a +0 -0
- data/spec/dummy/tmp/cache/assets/D46/7A0/sprockets%2Ff58dbdfbe51f1e65b669f4531676c111 +0 -0
- data/spec/dummy/tmp/cache/assets/D4A/B40/sprockets%2Ff40ad1859c7f01f99f019b46b9a4aa89 +0 -0
- data/spec/dummy/tmp/cache/assets/D4A/FC0/sprockets%2F8239c23794e8598c2fbc0dbdf7214a6d +0 -0
- data/spec/dummy/tmp/cache/assets/D53/6B0/sprockets%2Fd8ec39b3b5a1510cefa113328e030ab7 +0 -0
- data/spec/dummy/tmp/cache/assets/D5E/B40/sprockets%2F08c7b37c12104347d6f0dd3a2ac96dbd +0 -0
- data/spec/dummy/tmp/cache/assets/D6D/5F0/sprockets%2F6aaa47a79107eeac3b80345b95eed528 +0 -0
- data/spec/dummy/tmp/cache/assets/D70/330/sprockets%2F5f9f172aec541c9e4265aea3d2a416f9 +0 -0
- data/spec/dummy/tmp/cache/assets/D8F/DA0/sprockets%2F9e434efa471e31eea1da933f0ac3e322 +0 -0
- data/spec/dummy/tmp/cache/assets/D90/C80/sprockets%2Fd04fc70f145ec63ad43007a5e2cea9b7 +0 -0
- data/spec/dummy/tmp/cache/assets/DA2/9D0/sprockets%2F17df2df8c3aae2af98a9d325815325ed +0 -0
- data/spec/dummy/tmp/cache/assets/DA3/A50/sprockets%2F8c32df8c2b685b1b2d5f88bb15f9bc70 +0 -0
- data/spec/dummy/tmp/cache/assets/DB9/790/sprockets%2F6c968e2895d7a81cfe44addf3d57c7d5 +0 -0
- data/spec/dummy/tmp/cache/assets/DCE/930/sprockets%2Fea724572bf99bab5f2019c2fdfba92c5 +0 -0
- data/spec/dummy/tmp/cache/assets/DD1/F90/sprockets%2Fd924f5c7b0cf8d008dd8fea4e00d438f +0 -0
- data/spec/dummy/tmp/cache/assets/DD9/510/sprockets%2F544220563a5adf97ea8b5ff7ebe8ff3b +0 -0
- data/spec/dummy/tmp/cache/assets/DEF/B20/sprockets%2F3e8a1eac029ed92bee842e2abfea2232 +0 -0
- data/spec/dummy/tmp/cache/assets/DF4/6A0/sprockets%2F4af9b5050ffa96b2e2d3bebad85a06c5 +0 -0
- data/spec/dummy/tmp/cache/assets/DF6/DF0/sprockets%2Fed28cfcc773b333e5eea0aae655115cf +0 -0
- data/spec/dummy/tmp/cache/assets/E61/210/sprockets%2F57168c3ab6088aaf76cee4deaebeac7d +0 -0
- data/spec/dummy/tmp/cache/assets/EB7/D90/sprockets%2F5179abd7ac7cdbcea3e43fbbeb1fed64 +0 -0
- data/spec/dummy/tmp/cache/sass/1497ad7d973056507928cc72b57246640fe98320/bootstrap.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_accordion.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_alerts.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_breadcrumbs.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_button-groups.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_buttons.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_carousel.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_close.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_code.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_component-animations.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_dropdowns.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_forms.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_grid.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_hero-unit.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_labels-badges.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_layouts.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_media.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_mixins.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_modals.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_navbar.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_navs.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_pager.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_pagination.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_popovers.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_progress-bars.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_reset.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_scaffolding.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_sprites.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_tables.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_thumbnails.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_tooltip.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_type.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_utilities.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_variables.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_wells.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/bootstrap.scssc +0 -0
- data/spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_config.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_icon-font-24.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_icon-font.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_mixins.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_spaces.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/803365d1c8cc163df0ae50688e30dcee22f1632b/flat-ui.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_btn.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_checkbox-and-radio.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_demo.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_footer.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_input.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_login.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_navbar.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_pager.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_pagination.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_palette.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_progress.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_select.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_share.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_tagsinput.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_tile.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_todo.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_toggle.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_tooltip.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_type.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_ui-slider.sassc +0 -0
- data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_video.sassc +0 -0
- data/spec/factories/user.rb +8 -0
- data/spec/spec_helper.rb +51 -0
- data/test/fixtures/tracker/issues.yml +9 -0
- data/test/fixtures/tracker/users_issues.yml +15 -0
- data/test/functional/tracker/issue_mailer_test.rb +9 -0
- data/test/functional/tracker/issues_controller_test.rb +9 -0
- data/test/unit/helpers/tracker/issues_helper_test.rb +6 -0
- data/test/unit/tracker/issue_test.rb +9 -0
- data/test/unit/tracker/users_issues_test.rb +9 -0
- metadata +305 -0
@@ -0,0 +1,81 @@
|
|
1
|
+
require_dependency "rails_tracker/application_controller"
|
2
|
+
require 'faraday-http-cache'
|
3
|
+
require 'delayed_job_active_record'
|
4
|
+
|
5
|
+
module RailsTracker
|
6
|
+
class IssuesController < ApplicationController
|
7
|
+
before_filter :authenticate_user!, :only => [:track_issue, :currently_tracking]
|
8
|
+
|
9
|
+
def index
|
10
|
+
# Instantiate/setup the main applications Github config settings
|
11
|
+
# Cache response headers for rate limiting / conditional check
|
12
|
+
@store = ActiveSupport::Cache::MemoryStore.new
|
13
|
+
|
14
|
+
@github = Github::Issues.new do |config|
|
15
|
+
config.stack.insert_before Github::Response::Jsonize, Faraday::HttpCache, @store
|
16
|
+
end
|
17
|
+
|
18
|
+
@issues = @github.all(:user => RailsTracker.config.user,
|
19
|
+
:repo => RailsTracker.config.repo,
|
20
|
+
:state => "open",
|
21
|
+
:labels => RailsTracker.config.labels)
|
22
|
+
end
|
23
|
+
|
24
|
+
def track_issue
|
25
|
+
issue_id = params[:id]
|
26
|
+
issue_title = params[:title]
|
27
|
+
issue_body = params[:body]
|
28
|
+
# Find or create a record for a user who indicates they want to track an issue
|
29
|
+
UsersIssues.find_or_create_by_user_id_and_issue_id(:user_id => current_user.id,
|
30
|
+
:issue_id => issue_id,
|
31
|
+
:title => issue_title,
|
32
|
+
:body => issue_body)
|
33
|
+
redirect_to_back_if_valid
|
34
|
+
end
|
35
|
+
|
36
|
+
def un_track
|
37
|
+
# Update corresponding record and change status for the particular issue
|
38
|
+
@issue = UsersIssues.where(:user_id => current_user.id, :issue_id => params[:id])
|
39
|
+
@issue[0].delete if @issue[0].present?
|
40
|
+
redirect_to_back_if_valid
|
41
|
+
end
|
42
|
+
|
43
|
+
def currently_tracking
|
44
|
+
@currently_tracked = UsersIssues.where(:user_id => current_user.id)
|
45
|
+
end
|
46
|
+
|
47
|
+
def resolved
|
48
|
+
# Instantiate/setup the main applications Github config settings
|
49
|
+
# Cache response headers for rate limiting / conditional check
|
50
|
+
@store = ActiveSupport::Cache::MemoryStore.new
|
51
|
+
|
52
|
+
@github = Github::Issues.new do |config|
|
53
|
+
config.stack.insert_before Github::Response::Jsonize, Faraday::HttpCache, @store
|
54
|
+
end
|
55
|
+
|
56
|
+
@issues = @github.all(:user => RailsTracker.config.user,
|
57
|
+
:repo => RailsTracker.config.repo,
|
58
|
+
:state => "closed",
|
59
|
+
:labels => RailsTracker.config.labels)
|
60
|
+
end
|
61
|
+
|
62
|
+
def listen
|
63
|
+
# responder for post updates from github. Logic below is to handle callbacks from Github.
|
64
|
+
if params["issue"].present? && params["issue"]["state"] == "closed"
|
65
|
+
issue_id = params["issue"]["id"]
|
66
|
+
# Local all users tracking the issue
|
67
|
+
issues = UsersIssues.where(:issue_id => issue_id)
|
68
|
+
issues.each do |issue|
|
69
|
+
usr = User.find(issue.user_id)
|
70
|
+
# Handle the mailer async & delay the job
|
71
|
+
IssueMailer.delay.resolved_alert(usr,issue)
|
72
|
+
# Mark the issue as closed
|
73
|
+
issue.active = false
|
74
|
+
issue.save
|
75
|
+
end
|
76
|
+
end
|
77
|
+
render :nothing => true
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module RailsTracker
|
2
|
+
class IssueMailer < ActionMailer::Base
|
3
|
+
default from: "from@example.com"
|
4
|
+
|
5
|
+
def resolved_alert(user,issue)
|
6
|
+
@user = user
|
7
|
+
@issue = issue
|
8
|
+
mail(:to => @user.email, :subject => "An issue you've been tracking has been resolved")
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module RailsTracker
|
2
|
+
class UsersIssues < ActiveRecord::Base
|
3
|
+
attr_accessible :active, :assignee, :body, :id, :title, :user_id, :issue_id
|
4
|
+
|
5
|
+
validates_presence_of :user_id, :title
|
6
|
+
|
7
|
+
def resolved_alert
|
8
|
+
IssueMailer.resolved_alert(user).deliver
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
.container-fluid
|
2
|
+
.container
|
3
|
+
.masthead
|
4
|
+
h3.muted=RailsTracker.config.title
|
5
|
+
.navbar
|
6
|
+
.navbar-inner
|
7
|
+
.container
|
8
|
+
ul.nav
|
9
|
+
- if current_page?(root_path)
|
10
|
+
li.active
|
11
|
+
= link_to "Open Issues", root_path
|
12
|
+
- else
|
13
|
+
li
|
14
|
+
= link_to "Open Issues", root_path
|
15
|
+
- if current_page?(resolved_path)
|
16
|
+
li.active
|
17
|
+
= link_to "Resolved Issues", resolved_path
|
18
|
+
- else
|
19
|
+
li
|
20
|
+
= link_to "Resolved Issues", resolved_path
|
21
|
+
ul.nav.pull-right
|
22
|
+
- if current_page?(saved_path)
|
23
|
+
li.active
|
24
|
+
= link_to "Saved Issues", saved_path
|
25
|
+
- else
|
26
|
+
li
|
27
|
+
= link_to "Saved Issues", saved_path
|
28
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
.container
|
2
|
+
- if @currently_tracked.blank?
|
3
|
+
h3 You are presently tracking no issues.
|
4
|
+
- else
|
5
|
+
h3 You are tracking these open/closed issues:
|
6
|
+
- @currently_tracked.each do |i|
|
7
|
+
.row
|
8
|
+
.span1 style="width: 90px;"
|
9
|
+
br
|
10
|
+
- if i.active == false
|
11
|
+
a.btn.btn-danger disabled="disabled" Resolved
|
12
|
+
- else
|
13
|
+
= link_to "Untrack", "#", class: "btn btn-large btn-error", method: :post
|
14
|
+
.span6
|
15
|
+
h3=i.title
|
16
|
+
p=i.body
|
17
|
+
hr
|
18
|
+
.footer
|
19
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
.container
|
2
|
+
- if @issues.blank?
|
3
|
+
h3 Currently there is no open issues.
|
4
|
+
- else
|
5
|
+
h3 Open Issues:
|
6
|
+
- @issues.each do |i|
|
7
|
+
.row
|
8
|
+
.span1
|
9
|
+
br
|
10
|
+
- if current_user.present? && current_user.tracking?(current_user.id,i.id)
|
11
|
+
= link_to "Untrack", un_track_path(i.id), class: "btn btn-large btn-warning", method: :post
|
12
|
+
- else
|
13
|
+
= link_to "Track", track_issue_path(i), class: "btn btn-large btn-success", method: :post
|
14
|
+
.span6
|
15
|
+
h3=i.title
|
16
|
+
p.lead=i.body
|
17
|
+
hr
|
18
|
+
.footer
|
@@ -0,0 +1 @@
|
|
1
|
+
p listener
|
@@ -0,0 +1,14 @@
|
|
1
|
+
.container
|
2
|
+
- if @issues.blank?
|
3
|
+
h3 Currently there is no resolved issues.
|
4
|
+
- else
|
5
|
+
h3 Resolved issues:
|
6
|
+
- @issues.each do |i|
|
7
|
+
.row
|
8
|
+
.span1 style="width: 90px;"
|
9
|
+
br
|
10
|
+
a.btn.btn-danger disabled="disabled" Resolved
|
11
|
+
.span6
|
12
|
+
h3=i.title
|
13
|
+
p=i.body
|
14
|
+
hr
|
data/config/config.ru
ADDED
File without changes
|
data/config/routes.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
RailsTracker::Engine.routes.draw do
|
2
|
+
|
3
|
+
root :to => "issues#index"
|
4
|
+
|
5
|
+
post "track_issue/:id" => "issues#track_issue", :as => :track_issue
|
6
|
+
post "un_track/:id" => "issues#un_track", :as => :un_track
|
7
|
+
get "saved" => "issues#currently_tracking", :as => :saved
|
8
|
+
get "resolved" => "issues#resolved", :as => :resolved
|
9
|
+
|
10
|
+
# Payload from Github web hook
|
11
|
+
get "status/change/:payload" => "issues#status_change"
|
12
|
+
|
13
|
+
# Listener for payload from Github
|
14
|
+
post "listen" => 'issues#listen'
|
15
|
+
|
16
|
+
end
|
data/db/seeds.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ActiveProgressUsersIssues.create(:title => "demo issue", :active => true, :user_id => 1, :issue_id => 12345)
|
data/issues}
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/named_base'
|
3
|
+
|
4
|
+
module RailsTracker
|
5
|
+
module Generators
|
6
|
+
class InstallGenerator < Rails::Generators::Base
|
7
|
+
source_root File.expand_path('../templates', __FILE__)
|
8
|
+
|
9
|
+
def copy_initializer_file
|
10
|
+
copy_file "install.rb", "config/initializers/active_progress.rb"
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Use this setup block to configure your GitHub account
|
2
|
+
RailsTracker.config do |c|
|
3
|
+
# If the repo is public facing the password is not required. It is recommended to store confidential
|
4
|
+
# information like your password in ENV settings.
|
5
|
+
c.user = 'mcifani'
|
6
|
+
c.pass = 'github_password'
|
7
|
+
c.repo = 'rails_tracker'
|
8
|
+
|
9
|
+
# Only issues that include the following tag will be shown to your users
|
10
|
+
c.labels = 'public'
|
11
|
+
|
12
|
+
# Change the default title on the web UI
|
13
|
+
c.title = 'Rails Tracker'
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module RailsTracker
|
2
|
+
class Engine < ::Rails::Engine
|
3
|
+
require "github_api"
|
4
|
+
|
5
|
+
isolate_namespace RailsTracker
|
6
|
+
|
7
|
+
config.generators do |g|
|
8
|
+
g.test_framework :rspec
|
9
|
+
g.fixture_replacement :factory_girl, :dir => 'spec/factories'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.config(&block)
|
14
|
+
yield Engine.config if block
|
15
|
+
Engine.config
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "rails_tracker/engine"
|
2
|
+
|
3
|
+
module RailsTracker
|
4
|
+
|
5
|
+
def tracking?(user,issue)
|
6
|
+
# Lookup to see if user is tracking the particular issue
|
7
|
+
user = User.find(user)
|
8
|
+
results = UsersIssues.where(:user_id => user.id, :issue_id => issue)
|
9
|
+
if results[0].present?
|
10
|
+
true
|
11
|
+
else
|
12
|
+
false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = "rails_tracker"
|
5
|
+
s.version = "0.3.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Mike Cifani"]
|
9
|
+
s.date = "2013-10-21"
|
10
|
+
s.description = "An elegant Rails solution for issue tracking"
|
11
|
+
s.email = "mike@railstracker.com"
|
12
|
+
s.extra_rdoc_files = ["README.rdoc"]
|
13
|
+
s.files = ["rails_tracker.gemspec", "Gemfile", "Gemfile.lock", "issues}", "MIT-LICENSE", "Rakefile", "README.rdoc", "screenshot1.png", "test/fixtures/tracker/issues.yml", "test/fixtures/tracker/users_issues.yml", "test/functional/tracker/issue_mailer_test.rb", "test/functional/tracker/issues_controller_test.rb", "test/unit/helpers/tracker/issues_helper_test.rb", "test/unit/tracker/issue_test.rb", "test/unit/tracker/users_issues_test.rb", "spec/controllers/issues_controller_spec.rb", "spec/dummy/app/assets/javascripts/application.js", "spec/dummy/app/assets/stylesheets/application.css", "spec/dummy/app/controllers/application_controller.rb", "spec/dummy/app/helpers/application_helper.rb", "spec/dummy/app/views/layouts/application.html.erb", "spec/dummy/config/application.rb", "spec/dummy/config/boot.rb", "spec/dummy/config/database.yml", "spec/dummy/config/environment.rb", "spec/dummy/config/environments/development.rb", "spec/dummy/config/environments/production.rb", "spec/dummy/config/environments/test.rb", "spec/dummy/config/initializers/backtrace_silencers.rb", "spec/dummy/config/initializers/inflections.rb", "spec/dummy/config/initializers/mime_types.rb", "spec/dummy/config/initializers/secret_token.rb", "spec/dummy/config/initializers/session_store.rb", "spec/dummy/config/initializers/wrap_parameters.rb", "spec/dummy/config/locales/en.yml", "spec/dummy/config/routes.rb", "spec/dummy/config.ru", "spec/dummy/db/development.sqlite3", "spec/dummy/db/schema.rb", "spec/dummy/db/test.sqlite3", "spec/dummy/log/development.log", "spec/dummy/log/test.log", "spec/dummy/public/404.html", "spec/dummy/public/422.html", "spec/dummy/public/500.html", "spec/dummy/public/favicon.ico", "spec/dummy/Rakefile", "spec/dummy/README.rdoc", "spec/dummy/script/rails", "spec/dummy/tmp/cache/assets/BF2/BA0/sprockets%2Fc465f617006f371a570048816c344586", "spec/dummy/tmp/cache/assets/BF4/290/sprockets%2Fb4800880231a9ee7462085473e967133", "spec/dummy/tmp/cache/assets/BF4/F70/sprockets%2F7675401393a98310b35195d82832ef15", "spec/dummy/tmp/cache/assets/C7A/FD0/sprockets%2Fc32979f5e0331ec91531338d8ca43024", "spec/dummy/tmp/cache/assets/C82/940/sprockets%2F71fd0d5860b491074a85f02db6849227", "spec/dummy/tmp/cache/assets/C99/CE0/sprockets%2Fa9e3bce034e4511d161e1944200455d3", "spec/dummy/tmp/cache/assets/CB0/0F0/sprockets%2Fb94cb7750c4a13028836a17f82c5946b", "spec/dummy/tmp/cache/assets/CB5/BF0/sprockets%2F34b1fb9a3b2f3e930436f5856e727129", "spec/dummy/tmp/cache/assets/CBA/DA0/sprockets%2F37124a7a569a43b3739b926cc9da6397", "spec/dummy/tmp/cache/assets/CBB/350/sprockets%2F63b5d7323752f0afb24ff82484e68592", "spec/dummy/tmp/cache/assets/CBF/450/sprockets%2Fd906fd2492c5676acdb0f31766975842", "spec/dummy/tmp/cache/assets/CC7/9D0/sprockets%2F04258d58abf44498e2be2088df594399", "spec/dummy/tmp/cache/assets/CCE/A50/sprockets%2F95f552879446108bb23884b9fc8de47f", "spec/dummy/tmp/cache/assets/CD1/C90/sprockets%2F8ac4011e2f834d38565fb0295af0034b", "spec/dummy/tmp/cache/assets/CD7/0A0/sprockets%2F5150feb2b84a78567c7185c5231a1b2e", "spec/dummy/tmp/cache/assets/CDF/C70/sprockets%2F944209069b3190d36ab1a6c687c4c8be", "spec/dummy/tmp/cache/assets/CE3/EE0/sprockets%2F2ce7c81c2bd8280698c3787300b2c29e", "spec/dummy/tmp/cache/assets/CE6/C40/sprockets%2Fc818bee730438348a68efd92bf139220", "spec/dummy/tmp/cache/assets/CF6/460/sprockets%2Fd6d44319821067fc932ded86d5e9d837", "spec/dummy/tmp/cache/assets/CFD/4E0/sprockets%2Fc40691e60cdd254c0fc47867a0a018a1", "spec/dummy/tmp/cache/assets/D1E/700/sprockets%2F992faf3337c4ef8711e5522ff6706cf3", "spec/dummy/tmp/cache/assets/D34/D60/sprockets%2Ff95ce452cd15cfe3c62a22505520f1b9", "spec/dummy/tmp/cache/assets/D36/0C0/sprockets%2Fab4634b46625f2a59f2c81fca25b29b2", "spec/dummy/tmp/cache/assets/D36/580/sprockets%2Fd4cac000971b2a139e658ee1d57cc177", "spec/dummy/tmp/cache/assets/D38/370/sprockets%2F3f2e6c3a2fdaae7eac19245860891151", "spec/dummy/tmp/cache/assets/D38/BC0/sprockets%2F50f7a7f0253d401d08bac8f46537e6cb", "spec/dummy/tmp/cache/assets/D39/1E0/sprockets%2Fb461de82da868310001d0886fc0fd5ef", "spec/dummy/tmp/cache/assets/D39/C00/sprockets%2F422361ebe4a842fa89dc3b99a43ce114", "spec/dummy/tmp/cache/assets/D40/5F0/sprockets%2F06b15a4371a6f969ff7d0b7ef237ca06", "spec/dummy/tmp/cache/assets/D42/440/sprockets%2F20d8433a8526ab798ef3cc9c0d608d5b", "spec/dummy/tmp/cache/assets/D42/900/sprockets%2Fa82f43357557dbec4918e295c1b6fa1a", "spec/dummy/tmp/cache/assets/D46/7A0/sprockets%2Ff58dbdfbe51f1e65b669f4531676c111", "spec/dummy/tmp/cache/assets/D4A/B40/sprockets%2Ff40ad1859c7f01f99f019b46b9a4aa89", "spec/dummy/tmp/cache/assets/D4A/FC0/sprockets%2F8239c23794e8598c2fbc0dbdf7214a6d", "spec/dummy/tmp/cache/assets/D53/6B0/sprockets%2Fd8ec39b3b5a1510cefa113328e030ab7", "spec/dummy/tmp/cache/assets/D5E/B40/sprockets%2F08c7b37c12104347d6f0dd3a2ac96dbd", "spec/dummy/tmp/cache/assets/D6D/5F0/sprockets%2F6aaa47a79107eeac3b80345b95eed528", "spec/dummy/tmp/cache/assets/D70/330/sprockets%2F5f9f172aec541c9e4265aea3d2a416f9", "spec/dummy/tmp/cache/assets/D8F/DA0/sprockets%2F9e434efa471e31eea1da933f0ac3e322", "spec/dummy/tmp/cache/assets/D90/C80/sprockets%2Fd04fc70f145ec63ad43007a5e2cea9b7", "spec/dummy/tmp/cache/assets/DA2/9D0/sprockets%2F17df2df8c3aae2af98a9d325815325ed", "spec/dummy/tmp/cache/assets/DA3/A50/sprockets%2F8c32df8c2b685b1b2d5f88bb15f9bc70", "spec/dummy/tmp/cache/assets/DB9/790/sprockets%2F6c968e2895d7a81cfe44addf3d57c7d5", "spec/dummy/tmp/cache/assets/DCE/930/sprockets%2Fea724572bf99bab5f2019c2fdfba92c5", "spec/dummy/tmp/cache/assets/DD1/F90/sprockets%2Fd924f5c7b0cf8d008dd8fea4e00d438f", "spec/dummy/tmp/cache/assets/DD9/510/sprockets%2F544220563a5adf97ea8b5ff7ebe8ff3b", "spec/dummy/tmp/cache/assets/DEF/B20/sprockets%2F3e8a1eac029ed92bee842e2abfea2232", "spec/dummy/tmp/cache/assets/DF4/6A0/sprockets%2F4af9b5050ffa96b2e2d3bebad85a06c5", "spec/dummy/tmp/cache/assets/DF6/DF0/sprockets%2Fed28cfcc773b333e5eea0aae655115cf", "spec/dummy/tmp/cache/assets/E61/210/sprockets%2F57168c3ab6088aaf76cee4deaebeac7d", "spec/dummy/tmp/cache/assets/EB7/D90/sprockets%2F5179abd7ac7cdbcea3e43fbbeb1fed64", "spec/dummy/tmp/cache/sass/1497ad7d973056507928cc72b57246640fe98320/bootstrap.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_accordion.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_alerts.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_breadcrumbs.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_button-groups.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_buttons.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_carousel.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_close.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_code.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_component-animations.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_dropdowns.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_forms.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_grid.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_hero-unit.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_labels-badges.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_layouts.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_media.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_mixins.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_modals.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_navbar.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_navs.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_pager.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_pagination.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_popovers.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_progress-bars.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_reset.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_scaffolding.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_sprites.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_tables.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_thumbnails.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_tooltip.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_type.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_utilities.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_variables.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_wells.scssc", "spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/bootstrap.scssc", "spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_config.sassc", "spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_icon-font-24.sassc", "spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_icon-font.sassc", "spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_mixins.sassc", "spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_spaces.sassc", "spec/dummy/tmp/cache/sass/803365d1c8cc163df0ae50688e30dcee22f1632b/flat-ui.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_btn.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_checkbox-and-radio.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_demo.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_footer.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_input.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_login.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_navbar.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_pager.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_pagination.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_palette.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_progress.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_select.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_share.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_tagsinput.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_tile.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_todo.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_toggle.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_tooltip.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_type.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_ui-slider.sassc", "spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_video.sassc", "spec/factories/user.rb", "spec/spec_helper.rb", "lib/generators/rails_tracker/install_generator.rb", "lib/generators/rails_tracker/templates/install.rb", "lib/generators/rails_tracker/templates/rails_tracker.en.yml", "lib/rails_tracker/engine.rb", "lib/rails_tracker/version.rb", "lib/rails_tracker.rb", "lib/tasks/rails_tracker_tasks.rake", "lib/tasks/test_seed.rb", "app/assets/javascripts/rails_tracker/application.js", "app/assets/javascripts/rails_tracker/issues.js", "app/assets/stylesheets/rails_tracker/application.css", "app/assets/stylesheets/rails_tracker/bootstrap.css", "app/assets/stylesheets/rails_tracker/issues.css", "app/controllers/rails_tracker/application_controller.rb", "app/controllers/rails_tracker/issues_controller.rb", "app/helpers/rails_tracker/application_helper.rb", "app/helpers/rails_tracker/issues_helper.rb", "app/mailers/rails_tracker/issue_mailer.rb", "app/models/rails_tracker/issue.rb", "app/models/rails_tracker/users_issues.rb", "app/views/layouts/rails_tracker/_header.html.slim", "app/views/layouts/rails_tracker/application.html.slim", "app/views/rails_tracker/issue_mailer/resolved_alert.html.slim", "app/views/rails_tracker/issues/currently_tracking.html.slim", "app/views/rails_tracker/issues/index.html.slim", "app/views/rails_tracker/issues/listen.html.slim", "app/views/rails_tracker/issues/resolved.html.slim", "db/migrate/20130924202020_create_tracker_issues.rb", "db/migrate/20130924233027_create_tracker_users_issues.rb", "db/migrate/20130924233149_add_relation_users_issues.rb", "db/migrate/20130928221922_add_issue_id_issues.rb", "db/migrate/20130930233849_add_default_active_column.rb", "db/seeds.rb", "config/config.ru", "config/routes.rb", ".yardoc/checksums", ".yardoc/object_types", ".yardoc/objects/root.dat", ".yardoc/proxy_types"]
|
14
|
+
s.homepage = "http://www.railstracker.com"
|
15
|
+
s.rdoc_options = ["--main", "README.rdoc"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubygems_version = "2.0.2"
|
18
|
+
s.summary = "An elegant Rails solution for issue tracking"
|
19
|
+
|
20
|
+
if s.respond_to? :specification_version then
|
21
|
+
s.specification_version = 4
|
22
|
+
|
23
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
24
|
+
s.add_runtime_dependency(%q<github_api>, [">= 0"])
|
25
|
+
s.add_runtime_dependency(%q<faraday-http-cache>, [">= 0"])
|
26
|
+
s.add_runtime_dependency(%q<delayed_job_active_record>, [">= 0"])
|
27
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
28
|
+
else
|
29
|
+
s.add_dependency(%q<github_api>, [">= 0"])
|
30
|
+
s.add_dependency(%q<faraday-http-cache>, [">= 0"])
|
31
|
+
s.add_dependency(%q<delayed_job_active_record>, [">= 0"])
|
32
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
33
|
+
end
|
34
|
+
else
|
35
|
+
s.add_dependency(%q<github_api>, [">= 0"])
|
36
|
+
s.add_dependency(%q<faraday-http-cache>, [">= 0"])
|
37
|
+
s.add_dependency(%q<delayed_job_active_record>, [">= 0"])
|
38
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
39
|
+
end
|
40
|
+
end
|
data/screenshot1.png
ADDED
Binary file
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'debugger'
|
3
|
+
|
4
|
+
describe RailsTracker::IssuesController do
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
RailsTracker.config.user = "mcifani"
|
8
|
+
RailsTracker.config.repo = "active_progress"
|
9
|
+
RailsTracker.config.labels = "public"
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "GET 'index'" do
|
13
|
+
|
14
|
+
it "should be successful" do
|
15
|
+
RailsTracker.config.state = "open"
|
16
|
+
get 'index', use_route: :root
|
17
|
+
response.should be_success
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "GET 'resolved'" do
|
22
|
+
|
23
|
+
it "should be success on current issues marked with closed state" do
|
24
|
+
RailsTracker.config.state = "closed"
|
25
|
+
get 'resolved', use_route: :resolved
|
26
|
+
response.should be_success
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "GET 'un_track'" do
|
31
|
+
|
32
|
+
it "should not locate a user issue if none exist" do
|
33
|
+
controller.stub_chain(:current_user,:id)
|
34
|
+
get 'un_track', use_route: :un_track
|
35
|
+
assigns(:issue).should be_empty
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "GET 'current_tracking'" do
|
40
|
+
|
41
|
+
it "should be success" do
|
42
|
+
controller.stub(:authenticate_user!)
|
43
|
+
controller.stub_chain(:current_user,:id)
|
44
|
+
get 'currently_tracking', use_route: :saved
|
45
|
+
response.should be_success
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should not locate any currently tracked issues without existing user" do
|
49
|
+
controller.stub(:authenticate_user!)
|
50
|
+
controller.stub_chain(:current_user,:id)
|
51
|
+
get 'currently_tracking', use_route: :saved
|
52
|
+
assigns(:currently_tracked).should be_empty
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|