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.
Files changed (206) hide show
  1. checksums.yaml +7 -0
  2. data/.yardoc/checksums +13 -0
  3. data/.yardoc/object_types +0 -0
  4. data/.yardoc/objects/root.dat +0 -0
  5. data/.yardoc/proxy_types +0 -0
  6. data/Gemfile +31 -0
  7. data/Gemfile.lock +207 -0
  8. data/MIT-LICENSE +20 -0
  9. data/README.rdoc +88 -0
  10. data/Rakefile +113 -0
  11. data/app/assets/javascripts/rails_tracker/application.js +15 -0
  12. data/app/assets/javascripts/rails_tracker/issues.js +2 -0
  13. data/app/assets/stylesheets/rails_tracker/application.css +14 -0
  14. data/app/assets/stylesheets/rails_tracker/bootstrap.css +6805 -0
  15. data/app/assets/stylesheets/rails_tracker/issues.css +4 -0
  16. data/app/controllers/rails_tracker/application_controller.rb +12 -0
  17. data/app/controllers/rails_tracker/issues_controller.rb +81 -0
  18. data/app/helpers/rails_tracker/application_helper.rb +4 -0
  19. data/app/helpers/rails_tracker/issues_helper.rb +4 -0
  20. data/app/mailers/rails_tracker/issue_mailer.rb +12 -0
  21. data/app/models/rails_tracker/issue.rb +7 -0
  22. data/app/models/rails_tracker/users_issues.rb +12 -0
  23. data/app/views/layouts/rails_tracker/_header.html.slim +28 -0
  24. data/app/views/layouts/rails_tracker/application.html.slim +10 -0
  25. data/app/views/rails_tracker/issue_mailer/resolved_alert.html.slim +6 -0
  26. data/app/views/rails_tracker/issues/currently_tracking.html.slim +19 -0
  27. data/app/views/rails_tracker/issues/index.html.slim +18 -0
  28. data/app/views/rails_tracker/issues/listen.html.slim +1 -0
  29. data/app/views/rails_tracker/issues/resolved.html.slim +14 -0
  30. data/config/config.ru +0 -0
  31. data/config/routes.rb +16 -0
  32. data/db/migrate/20130924202020_create_tracker_issues.rb +10 -0
  33. data/db/migrate/20130924233027_create_tracker_users_issues.rb +13 -0
  34. data/db/migrate/20130924233149_add_relation_users_issues.rb +5 -0
  35. data/db/migrate/20130928221922_add_issue_id_issues.rb +5 -0
  36. data/db/migrate/20130930233849_add_default_active_column.rb +6 -0
  37. data/db/seeds.rb +1 -0
  38. data/issues} +4 -0
  39. data/lib/generators/rails_tracker/install_generator.rb +16 -0
  40. data/lib/generators/rails_tracker/templates/install.rb +15 -0
  41. data/lib/generators/rails_tracker/templates/rails_tracker.en.yml +5 -0
  42. data/lib/rails_tracker/engine.rb +17 -0
  43. data/lib/rails_tracker/version.rb +3 -0
  44. data/lib/rails_tracker.rb +16 -0
  45. data/lib/tasks/rails_tracker_tasks.rake +4 -0
  46. data/lib/tasks/test_seed.rb +7 -0
  47. data/rails_tracker.gemspec +40 -0
  48. data/screenshot1.png +0 -0
  49. data/spec/controllers/issues_controller_spec.rb +56 -0
  50. data/spec/dummy/README.rdoc +261 -0
  51. data/spec/dummy/Rakefile +7 -0
  52. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  53. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  54. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  55. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  56. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  57. data/spec/dummy/config/application.rb +65 -0
  58. data/spec/dummy/config/boot.rb +10 -0
  59. data/spec/dummy/config/database.yml +25 -0
  60. data/spec/dummy/config/environment.rb +5 -0
  61. data/spec/dummy/config/environments/development.rb +37 -0
  62. data/spec/dummy/config/environments/production.rb +67 -0
  63. data/spec/dummy/config/environments/test.rb +37 -0
  64. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  65. data/spec/dummy/config/initializers/inflections.rb +15 -0
  66. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  67. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  68. data/spec/dummy/config/initializers/session_store.rb +8 -0
  69. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  70. data/spec/dummy/config/locales/en.yml +5 -0
  71. data/spec/dummy/config/routes.rb +4 -0
  72. data/spec/dummy/config.ru +4 -0
  73. data/spec/dummy/db/development.sqlite3 +0 -0
  74. data/spec/dummy/db/schema.rb +34 -0
  75. data/spec/dummy/db/test.sqlite3 +0 -0
  76. data/spec/dummy/log/development.log +4388 -0
  77. data/spec/dummy/log/test.log +750 -0
  78. data/spec/dummy/public/404.html +26 -0
  79. data/spec/dummy/public/422.html +26 -0
  80. data/spec/dummy/public/500.html +25 -0
  81. data/spec/dummy/public/favicon.ico +0 -0
  82. data/spec/dummy/script/rails +6 -0
  83. data/spec/dummy/tmp/cache/assets/BF2/BA0/sprockets%2Fc465f617006f371a570048816c344586 +0 -0
  84. data/spec/dummy/tmp/cache/assets/BF4/290/sprockets%2Fb4800880231a9ee7462085473e967133 +0 -0
  85. data/spec/dummy/tmp/cache/assets/BF4/F70/sprockets%2F7675401393a98310b35195d82832ef15 +0 -0
  86. data/spec/dummy/tmp/cache/assets/C7A/FD0/sprockets%2Fc32979f5e0331ec91531338d8ca43024 +0 -0
  87. data/spec/dummy/tmp/cache/assets/C82/940/sprockets%2F71fd0d5860b491074a85f02db6849227 +0 -0
  88. data/spec/dummy/tmp/cache/assets/C99/CE0/sprockets%2Fa9e3bce034e4511d161e1944200455d3 +0 -0
  89. data/spec/dummy/tmp/cache/assets/CB0/0F0/sprockets%2Fb94cb7750c4a13028836a17f82c5946b +0 -0
  90. data/spec/dummy/tmp/cache/assets/CB5/BF0/sprockets%2F34b1fb9a3b2f3e930436f5856e727129 +0 -0
  91. data/spec/dummy/tmp/cache/assets/CBA/DA0/sprockets%2F37124a7a569a43b3739b926cc9da6397 +0 -0
  92. data/spec/dummy/tmp/cache/assets/CBB/350/sprockets%2F63b5d7323752f0afb24ff82484e68592 +0 -0
  93. data/spec/dummy/tmp/cache/assets/CBF/450/sprockets%2Fd906fd2492c5676acdb0f31766975842 +0 -0
  94. data/spec/dummy/tmp/cache/assets/CC7/9D0/sprockets%2F04258d58abf44498e2be2088df594399 +0 -0
  95. data/spec/dummy/tmp/cache/assets/CCE/A50/sprockets%2F95f552879446108bb23884b9fc8de47f +0 -0
  96. data/spec/dummy/tmp/cache/assets/CD1/C90/sprockets%2F8ac4011e2f834d38565fb0295af0034b +0 -0
  97. data/spec/dummy/tmp/cache/assets/CD7/0A0/sprockets%2F5150feb2b84a78567c7185c5231a1b2e +0 -0
  98. data/spec/dummy/tmp/cache/assets/CDF/C70/sprockets%2F944209069b3190d36ab1a6c687c4c8be +0 -0
  99. data/spec/dummy/tmp/cache/assets/CE3/EE0/sprockets%2F2ce7c81c2bd8280698c3787300b2c29e +0 -0
  100. data/spec/dummy/tmp/cache/assets/CE6/C40/sprockets%2Fc818bee730438348a68efd92bf139220 +0 -0
  101. data/spec/dummy/tmp/cache/assets/CF6/460/sprockets%2Fd6d44319821067fc932ded86d5e9d837 +0 -0
  102. data/spec/dummy/tmp/cache/assets/CFD/4E0/sprockets%2Fc40691e60cdd254c0fc47867a0a018a1 +0 -0
  103. data/spec/dummy/tmp/cache/assets/D1E/700/sprockets%2F992faf3337c4ef8711e5522ff6706cf3 +0 -0
  104. data/spec/dummy/tmp/cache/assets/D34/D60/sprockets%2Ff95ce452cd15cfe3c62a22505520f1b9 +0 -0
  105. data/spec/dummy/tmp/cache/assets/D36/0C0/sprockets%2Fab4634b46625f2a59f2c81fca25b29b2 +0 -0
  106. data/spec/dummy/tmp/cache/assets/D36/580/sprockets%2Fd4cac000971b2a139e658ee1d57cc177 +0 -0
  107. data/spec/dummy/tmp/cache/assets/D38/370/sprockets%2F3f2e6c3a2fdaae7eac19245860891151 +0 -0
  108. data/spec/dummy/tmp/cache/assets/D38/BC0/sprockets%2F50f7a7f0253d401d08bac8f46537e6cb +0 -0
  109. data/spec/dummy/tmp/cache/assets/D39/1E0/sprockets%2Fb461de82da868310001d0886fc0fd5ef +0 -0
  110. data/spec/dummy/tmp/cache/assets/D39/C00/sprockets%2F422361ebe4a842fa89dc3b99a43ce114 +0 -0
  111. data/spec/dummy/tmp/cache/assets/D40/5F0/sprockets%2F06b15a4371a6f969ff7d0b7ef237ca06 +0 -0
  112. data/spec/dummy/tmp/cache/assets/D42/440/sprockets%2F20d8433a8526ab798ef3cc9c0d608d5b +0 -0
  113. data/spec/dummy/tmp/cache/assets/D42/900/sprockets%2Fa82f43357557dbec4918e295c1b6fa1a +0 -0
  114. data/spec/dummy/tmp/cache/assets/D46/7A0/sprockets%2Ff58dbdfbe51f1e65b669f4531676c111 +0 -0
  115. data/spec/dummy/tmp/cache/assets/D4A/B40/sprockets%2Ff40ad1859c7f01f99f019b46b9a4aa89 +0 -0
  116. data/spec/dummy/tmp/cache/assets/D4A/FC0/sprockets%2F8239c23794e8598c2fbc0dbdf7214a6d +0 -0
  117. data/spec/dummy/tmp/cache/assets/D53/6B0/sprockets%2Fd8ec39b3b5a1510cefa113328e030ab7 +0 -0
  118. data/spec/dummy/tmp/cache/assets/D5E/B40/sprockets%2F08c7b37c12104347d6f0dd3a2ac96dbd +0 -0
  119. data/spec/dummy/tmp/cache/assets/D6D/5F0/sprockets%2F6aaa47a79107eeac3b80345b95eed528 +0 -0
  120. data/spec/dummy/tmp/cache/assets/D70/330/sprockets%2F5f9f172aec541c9e4265aea3d2a416f9 +0 -0
  121. data/spec/dummy/tmp/cache/assets/D8F/DA0/sprockets%2F9e434efa471e31eea1da933f0ac3e322 +0 -0
  122. data/spec/dummy/tmp/cache/assets/D90/C80/sprockets%2Fd04fc70f145ec63ad43007a5e2cea9b7 +0 -0
  123. data/spec/dummy/tmp/cache/assets/DA2/9D0/sprockets%2F17df2df8c3aae2af98a9d325815325ed +0 -0
  124. data/spec/dummy/tmp/cache/assets/DA3/A50/sprockets%2F8c32df8c2b685b1b2d5f88bb15f9bc70 +0 -0
  125. data/spec/dummy/tmp/cache/assets/DB9/790/sprockets%2F6c968e2895d7a81cfe44addf3d57c7d5 +0 -0
  126. data/spec/dummy/tmp/cache/assets/DCE/930/sprockets%2Fea724572bf99bab5f2019c2fdfba92c5 +0 -0
  127. data/spec/dummy/tmp/cache/assets/DD1/F90/sprockets%2Fd924f5c7b0cf8d008dd8fea4e00d438f +0 -0
  128. data/spec/dummy/tmp/cache/assets/DD9/510/sprockets%2F544220563a5adf97ea8b5ff7ebe8ff3b +0 -0
  129. data/spec/dummy/tmp/cache/assets/DEF/B20/sprockets%2F3e8a1eac029ed92bee842e2abfea2232 +0 -0
  130. data/spec/dummy/tmp/cache/assets/DF4/6A0/sprockets%2F4af9b5050ffa96b2e2d3bebad85a06c5 +0 -0
  131. data/spec/dummy/tmp/cache/assets/DF6/DF0/sprockets%2Fed28cfcc773b333e5eea0aae655115cf +0 -0
  132. data/spec/dummy/tmp/cache/assets/E61/210/sprockets%2F57168c3ab6088aaf76cee4deaebeac7d +0 -0
  133. data/spec/dummy/tmp/cache/assets/EB7/D90/sprockets%2F5179abd7ac7cdbcea3e43fbbeb1fed64 +0 -0
  134. data/spec/dummy/tmp/cache/sass/1497ad7d973056507928cc72b57246640fe98320/bootstrap.scssc +0 -0
  135. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_accordion.scssc +0 -0
  136. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_alerts.scssc +0 -0
  137. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_breadcrumbs.scssc +0 -0
  138. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_button-groups.scssc +0 -0
  139. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_buttons.scssc +0 -0
  140. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_carousel.scssc +0 -0
  141. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_close.scssc +0 -0
  142. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_code.scssc +0 -0
  143. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_component-animations.scssc +0 -0
  144. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_dropdowns.scssc +0 -0
  145. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_forms.scssc +0 -0
  146. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_grid.scssc +0 -0
  147. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_hero-unit.scssc +0 -0
  148. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_labels-badges.scssc +0 -0
  149. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_layouts.scssc +0 -0
  150. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_media.scssc +0 -0
  151. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_mixins.scssc +0 -0
  152. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_modals.scssc +0 -0
  153. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_navbar.scssc +0 -0
  154. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_navs.scssc +0 -0
  155. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_pager.scssc +0 -0
  156. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_pagination.scssc +0 -0
  157. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_popovers.scssc +0 -0
  158. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_progress-bars.scssc +0 -0
  159. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_reset.scssc +0 -0
  160. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_scaffolding.scssc +0 -0
  161. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_sprites.scssc +0 -0
  162. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_tables.scssc +0 -0
  163. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_thumbnails.scssc +0 -0
  164. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_tooltip.scssc +0 -0
  165. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_type.scssc +0 -0
  166. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_utilities.scssc +0 -0
  167. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_variables.scssc +0 -0
  168. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/_wells.scssc +0 -0
  169. data/spec/dummy/tmp/cache/sass/400fd17e133835848700b2f4e2f02dbad9b80a92/bootstrap.scssc +0 -0
  170. data/spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_config.sassc +0 -0
  171. data/spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_icon-font-24.sassc +0 -0
  172. data/spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_icon-font.sassc +0 -0
  173. data/spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_mixins.sassc +0 -0
  174. data/spec/dummy/tmp/cache/sass/40d71a06abb9e71575f253dcb1f6b85c8b3156e2/_spaces.sassc +0 -0
  175. data/spec/dummy/tmp/cache/sass/803365d1c8cc163df0ae50688e30dcee22f1632b/flat-ui.sassc +0 -0
  176. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_btn.sassc +0 -0
  177. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_checkbox-and-radio.sassc +0 -0
  178. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_demo.sassc +0 -0
  179. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_footer.sassc +0 -0
  180. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_input.sassc +0 -0
  181. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_login.sassc +0 -0
  182. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_navbar.sassc +0 -0
  183. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_pager.sassc +0 -0
  184. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_pagination.sassc +0 -0
  185. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_palette.sassc +0 -0
  186. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_progress.sassc +0 -0
  187. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_select.sassc +0 -0
  188. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_share.sassc +0 -0
  189. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_tagsinput.sassc +0 -0
  190. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_tile.sassc +0 -0
  191. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_todo.sassc +0 -0
  192. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_toggle.sassc +0 -0
  193. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_tooltip.sassc +0 -0
  194. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_type.sassc +0 -0
  195. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_ui-slider.sassc +0 -0
  196. data/spec/dummy/tmp/cache/sass/bc846aea9bb0b60505398d8c47551cb8d064e9e7/_video.sassc +0 -0
  197. data/spec/factories/user.rb +8 -0
  198. data/spec/spec_helper.rb +51 -0
  199. data/test/fixtures/tracker/issues.yml +9 -0
  200. data/test/fixtures/tracker/users_issues.yml +15 -0
  201. data/test/functional/tracker/issue_mailer_test.rb +9 -0
  202. data/test/functional/tracker/issues_controller_test.rb +9 -0
  203. data/test/unit/helpers/tracker/issues_helper_test.rb +6 -0
  204. data/test/unit/tracker/issue_test.rb +9 -0
  205. data/test/unit/tracker/users_issues_test.rb +9 -0
  206. metadata +305 -0
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,12 @@
1
+ module RailsTracker
2
+ class ApplicationController < ActionController::Base
3
+
4
+ def redirect_to_back_if_valid
5
+ if request.env["HTTP_REFERER"].blank?
6
+ redirect_to :root
7
+ else
8
+ redirect_to :back
9
+ end
10
+ end
11
+ end
12
+ end
@@ -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,4 @@
1
+ module RailsTracker
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module RailsTracker
2
+ module IssuesHelper
3
+ end
4
+ 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,7 @@
1
+ module RailsTracker
2
+ class Issue < ActiveRecord::Base
3
+ attr_accessible :content, :title
4
+
5
+ validates_presence_of :title, :content
6
+ end
7
+ 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,10 @@
1
+ doctype
2
+ html
3
+ head
4
+ title Rails Tracker
5
+ = stylesheet_link_tag "rails_tracker/application", :media => "all"
6
+ = javascript_include_tag "rails_tracker/application"
7
+ = csrf_meta_tags
8
+ body
9
+ = render "layouts/rails_tracker/header"
10
+ = yield
@@ -0,0 +1,6 @@
1
+ p Hi!
2
+
3
+ p A Github issue you've been tracking has been resolved.
4
+
5
+ p Issue Title:
6
+ p =@issue.title
@@ -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
@@ -0,0 +1,10 @@
1
+ class CreateTrackerIssues < ActiveRecord::Migration
2
+ def change
3
+ create_table :rails_tracker_issues do |t|
4
+ t.text :title
5
+ t.text :content
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ class CreateTrackerUsersIssues < ActiveRecord::Migration
2
+ def change
3
+ create_table :rails_tracker_users_issues do |t|
4
+ t.integer :id
5
+ t.text :title
6
+ t.text :body
7
+ t.boolean :active
8
+ t.string :assignee
9
+
10
+ t.timestamps
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ class AddRelationUsersIssues < ActiveRecord::Migration
2
+ def change
3
+ add_column :rails_tracker_users_issues, :user_id, :integer
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddIssueIdIssues < ActiveRecord::Migration
2
+ def change
3
+ add_column :rails_tracker_users_issues, :issue_id, :integer
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class AddDefaultActiveColumn < ActiveRecord::Migration
2
+ def change
3
+ change_column :rails_tracker_users_issues, :active, :boolean, :default => true
4
+ end
5
+
6
+ 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,4 @@
1
+ {
2
+ "message": "Body should be a JSON Hash",
3
+ "documentation_url": "http://developer.github.com/v3"
4
+ }
@@ -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,5 @@
1
+ # Sample localization file for English
2
+
3
+ en:
4
+ issue_mailer:
5
+ from: hello@example.com
@@ -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,3 @@
1
+ module RailsTracker
2
+ VERSION = "0.0.1"
3
+ 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,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :tracker do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,7 @@
1
+ namespace :db do
2
+ namespace :test do
3
+ task :load => :environment do
4
+ Rake::Task["db:seed"].invoke
5
+ end
6
+ end
7
+ 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