rails_tracker 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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