houston-core 0.6.3 → 0.7.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (232) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile.lock +53 -63
  4. data/app/adapters/houston/adapters/error_tracker/errbit_adapter.rb +2 -2
  5. data/app/adapters/houston/adapters/ticket_tracker/github_adapter.rb +1 -1
  6. data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter.rb +5 -5
  7. data/app/adapters/houston/adapters/version_control/git_adapter.rb +4 -4
  8. data/app/assets/javascripts/{app → houston/app}/boot.coffee +0 -0
  9. data/app/assets/javascripts/{app → houston/app}/emoji.coffee.erb +0 -0
  10. data/app/assets/javascripts/{app → houston/app}/infinite_scroll.coffee +0 -0
  11. data/app/assets/javascripts/{app → houston/app}/models/commit.coffee +0 -0
  12. data/app/assets/javascripts/{app → houston/app}/models/release.coffee +0 -0
  13. data/app/assets/javascripts/{app → houston/app}/models/task.coffee +0 -0
  14. data/app/assets/javascripts/{app → houston/app}/models/tester.coffee +0 -0
  15. data/app/assets/javascripts/{app → houston/app}/models/testing_note.coffee +0 -0
  16. data/app/assets/javascripts/{app → houston/app}/models/ticket.coffee +0 -0
  17. data/app/assets/javascripts/{app → houston/app}/models/user.coffee +0 -0
  18. data/app/assets/javascripts/{app → houston/app}/mousetrap-bind-scoped.js +0 -0
  19. data/app/assets/javascripts/{app → houston/app}/releases.coffee +0 -0
  20. data/app/assets/javascripts/{app → houston/app}/table_row_expander.coffee +0 -0
  21. data/app/assets/javascripts/{app → houston/app}/ticket_tracker_refresh.coffee +0 -0
  22. data/app/assets/javascripts/{app → houston/app}/views/_show_sprint_view.coffee +0 -0
  23. data/app/assets/javascripts/{app → houston/app}/views/_tickets_view.coffee +0 -0
  24. data/app/assets/javascripts/{app → houston/app}/views/all_tickets_view.coffee +0 -0
  25. data/app/assets/javascripts/{app → houston/app}/views/commit_view.coffee +0 -0
  26. data/app/assets/javascripts/{app → houston/app}/views/edit_sprint_view.coffee +0 -0
  27. data/app/assets/javascripts/{app → houston/app}/views/edit_ticket_view.coffee +0 -0
  28. data/app/assets/javascripts/{app → houston/app}/views/find_or_create_ticket_view.coffee +0 -0
  29. data/app/assets/javascripts/{app → houston/app}/views/keyboard_shortcuts_modal.coffee +0 -0
  30. data/app/assets/javascripts/{app → houston/app}/views/new_ticket_modal.coffee +0 -0
  31. data/app/assets/javascripts/{app → houston/app}/views/new_ticket_view.coffee +0 -0
  32. data/app/assets/javascripts/{app → houston/app}/views/problems_view.coffee +0 -0
  33. data/app/assets/javascripts/{app → houston/app}/views/testing_note_view.coffee +0 -0
  34. data/app/assets/javascripts/{app → houston/app}/views/testing_report_view.coffee +0 -0
  35. data/app/assets/javascripts/{app → houston/app}/views/testing_ticket_view.coffee +0 -0
  36. data/app/assets/javascripts/{app → houston/app}/views/ticket_modal_view.coffee +0 -0
  37. data/app/assets/javascripts/{application.js → houston/application.js} +1 -1
  38. data/app/assets/javascripts/{core → houston/core}/app.coffee +0 -0
  39. data/app/assets/javascripts/{core → houston/core}/burndown_chart.coffee +0 -0
  40. data/app/assets/javascripts/{core → houston/core}/core_ext/array.coffee +0 -0
  41. data/app/assets/javascripts/{core → houston/core}/core_ext/date.coffee +0 -0
  42. data/app/assets/javascripts/{core → houston/core}/core_ext/number.coffee +0 -0
  43. data/app/assets/javascripts/{core → houston/core}/errors.coffee +1 -1
  44. data/app/assets/javascripts/{core → houston/core}/handlebars_helpers.coffee +0 -0
  45. data/app/assets/javascripts/{core → houston/core}/helpers.coffee +0 -0
  46. data/app/assets/javascripts/{core → houston/core}/jquery_extensions.coffee +5 -3
  47. data/app/assets/javascripts/{core → houston/core}/stacked_area_graph.coffee +0 -0
  48. data/app/assets/javascripts/{core → houston/core}/stacked_bar_graph.coffee +0 -0
  49. data/app/assets/javascripts/{dashboard.js → houston/dashboard.js} +1 -1
  50. data/app/assets/javascripts/{dashboard → houston/dashboard}/refresher.coffee +0 -0
  51. data/app/assets/javascripts/{vendor.js → houston/vendor.js} +0 -0
  52. data/app/assets/stylesheets/{application.css → houston/application.css} +0 -0
  53. data/app/assets/stylesheets/{application → houston/application}/ansi.scss +0 -0
  54. data/app/assets/stylesheets/{application → houston/application}/commit.scss +0 -0
  55. data/app/assets/stylesheets/{application → houston/application}/emoji.scss +0 -0
  56. data/app/assets/stylesheets/{application → houston/application}/exceptions.scss +1 -1
  57. data/app/assets/stylesheets/{application → houston/application}/find_or_create_ticket.scss +0 -0
  58. data/app/assets/stylesheets/{application → houston/application}/follow_up.scss +0 -0
  59. data/app/assets/stylesheets/{application → houston/application}/forms.scss +0 -0
  60. data/app/assets/stylesheets/{application → houston/application}/freight_train.css.scss +0 -0
  61. data/app/assets/stylesheets/{application → houston/application}/full_screen.scss +0 -0
  62. data/app/assets/stylesheets/{application → houston/application}/github_repos.scss +0 -0
  63. data/app/assets/stylesheets/{application → houston/application}/infinite_scroll.scss +0 -0
  64. data/app/assets/stylesheets/houston/application/jobs.scss +5 -0
  65. data/app/assets/stylesheets/{application → houston/application}/keyboard_shortcuts.scss +0 -0
  66. data/app/assets/stylesheets/{application → houston/application}/markdown.scss +0 -0
  67. data/app/assets/stylesheets/{application → houston/application}/mobile.scss +0 -0
  68. data/app/assets/stylesheets/{application → houston/application}/modals.scss +0 -0
  69. data/app/assets/stylesheets/{application → houston/application}/navigation.scss +0 -0
  70. data/app/assets/stylesheets/{application → houston/application}/new_ticket_view.scss +0 -0
  71. data/app/assets/stylesheets/{application → houston/application}/omnibar.scss +0 -0
  72. data/app/assets/stylesheets/{application → houston/application}/project_banner_buttons.scss +0 -0
  73. data/app/assets/stylesheets/{application → houston/application}/project_tiles.scss +0 -0
  74. data/app/assets/stylesheets/{application → houston/application}/projects.css.scss +0 -0
  75. data/app/assets/stylesheets/{application → houston/application}/pull_requests.scss +0 -0
  76. data/app/assets/stylesheets/{application → houston/application}/queue.scss +0 -0
  77. data/app/assets/stylesheets/{application → houston/application}/release_form.scss +0 -0
  78. data/app/assets/stylesheets/{application → houston/application}/releases.scss +1 -1
  79. data/app/assets/stylesheets/{application → houston/application}/sortable_table.scss +0 -0
  80. data/app/assets/stylesheets/{application → houston/application}/sprint.scss +0 -0
  81. data/app/assets/stylesheets/{application → houston/application}/tables.scss +0 -0
  82. data/app/assets/stylesheets/{application → houston/application}/test.scss +0 -0
  83. data/app/assets/stylesheets/{application → houston/application}/test_run.scss +0 -0
  84. data/app/assets/stylesheets/{application → houston/application}/testing_report.scss +0 -0
  85. data/app/assets/stylesheets/{application → houston/application}/ticket.scss +0 -0
  86. data/app/assets/stylesheets/{application → houston/application}/ticket_modal.scss +0 -0
  87. data/app/assets/stylesheets/{application → houston/application}/tickets.scss +0 -0
  88. data/app/assets/stylesheets/{application → houston/application}/timeline.scss +0 -0
  89. data/app/assets/stylesheets/{application → houston/application}/tips.scss +0 -0
  90. data/app/assets/stylesheets/{application → houston/application}/typeahead.scss +0 -0
  91. data/app/assets/stylesheets/{application → houston/application}/uploading.scss +0 -0
  92. data/app/assets/stylesheets/{application → houston/application}/user_wall.scss +0 -0
  93. data/app/assets/stylesheets/{application → houston/application}/users.scss +0 -0
  94. data/app/assets/stylesheets/{application → houston/application}/welcome.scss +0 -0
  95. data/app/assets/stylesheets/{core → houston/core}/alerts.scss +0 -0
  96. data/app/assets/stylesheets/{core → houston/core}/avatars.scss +0 -0
  97. data/app/assets/stylesheets/{core → houston/core}/burndown_chart.scss +0 -0
  98. data/app/assets/stylesheets/{core → houston/core}/colors.scss.erb +0 -0
  99. data/app/assets/stylesheets/{core → houston/core}/misc.scss +3 -0
  100. data/app/assets/stylesheets/{core → houston/core}/octicons-icons.scss +0 -0
  101. data/app/assets/stylesheets/{core → houston/core}/octicons.scss.erb +0 -0
  102. data/app/assets/stylesheets/{core → houston/core}/overrides.scss +0 -0
  103. data/app/assets/stylesheets/{core → houston/core}/roboto.scss.erb +0 -0
  104. data/app/assets/stylesheets/{core → houston/core}/scores.scss +0 -0
  105. data/app/assets/stylesheets/{dashboard.css → houston/dashboard.css} +0 -0
  106. data/app/assets/stylesheets/{dashboard → houston/dashboard}/dashboard.scss +0 -0
  107. data/app/assets/stylesheets/{print.css.scss → houston/print.css.scss} +0 -0
  108. data/app/assets/stylesheets/{variables.scss → houston/variables.scss} +0 -0
  109. data/app/assets/stylesheets/{vendor.css → houston/vendor.css} +0 -0
  110. data/app/concerns/houston/props.rb +96 -0
  111. data/app/concerns/project_adapter.rb +1 -1
  112. data/app/controllers/api/v1/measurements_controller.rb +32 -0
  113. data/app/controllers/application_controller.rb +1 -1
  114. data/app/controllers/authorizations_controller.rb +61 -0
  115. data/app/controllers/github/pulls_controller.rb +1 -1
  116. data/app/controllers/jobs_controller.rb +30 -1
  117. data/app/controllers/oauth/providers_controller.rb +45 -0
  118. data/app/controllers/project_options_controller.rb +2 -2
  119. data/app/controllers/projects_controller.rb +3 -3
  120. data/app/controllers/releases_controller.rb +3 -3
  121. data/app/controllers/user_options_controller.rb +2 -2
  122. data/app/controllers/users_controller.rb +1 -2
  123. data/app/helpers/application_helper.rb +49 -3
  124. data/app/helpers/email_helper.rb +19 -1
  125. data/app/helpers/release_helper.rb +1 -1
  126. data/app/helpers/ticket_helper.rb +0 -32
  127. data/app/interactors/cache_key_dependencies.rb +3 -8
  128. data/app/mailers/view_mailer.rb +8 -8
  129. data/app/models/authorization.rb +54 -0
  130. data/app/models/commit.rb +1 -1
  131. data/app/models/error.rb +14 -0
  132. data/app/models/github/comment_event.rb +4 -4
  133. data/app/models/github/pull_request.rb +39 -17
  134. data/app/models/github/pull_request_event.rb +1 -7
  135. data/app/models/job.rb +81 -0
  136. data/app/models/measurement.rb +2 -1
  137. data/app/models/oauth/provider.rb +35 -0
  138. data/app/models/project.rb +12 -3
  139. data/app/models/slackdown.rb +1 -1
  140. data/app/models/user.rb +28 -35
  141. data/app/presenters/measurements_presenter.rb +26 -0
  142. data/app/presenters/project_presenter.rb +1 -1
  143. data/app/views/authorizations/_form.html.erb +33 -0
  144. data/app/views/authorizations/edit.html.erb +7 -0
  145. data/app/views/authorizations/granted.html.erb +7 -0
  146. data/app/views/authorizations/index.html.erb +47 -0
  147. data/app/views/authorizations/new.html.erb +7 -0
  148. data/app/views/configuration_error/_no_ticket_tracker.html.erb +1 -1
  149. data/app/views/github/pulls/index.html.erb +5 -1
  150. data/app/views/jobs/index.html.erb +72 -0
  151. data/app/views/jobs/show.html.erb +25 -32
  152. data/app/views/layouts/_navigation.html.erb +1 -1
  153. data/app/views/layouts/application.html.erb +14 -15
  154. data/app/views/layouts/dashboard.html.erb +9 -10
  155. data/app/views/layouts/minimal.html.erb +14 -15
  156. data/app/views/layouts/naked.html.erb +52 -0
  157. data/app/views/layouts/naked_dashboard.html.erb +9 -10
  158. data/app/views/oauth/providers/_form.html.erb +54 -0
  159. data/app/views/oauth/providers/edit.html.erb +7 -0
  160. data/app/views/oauth/providers/index.html.erb +41 -0
  161. data/app/views/oauth/providers/new.html.erb +7 -0
  162. data/app/views/projects/_form.html.erb +8 -9
  163. data/app/views/projects/index.html.erb +1 -1
  164. data/app/views/users/_form.html.erb +20 -19
  165. data/bin/rails +1 -1
  166. data/config/application.rb +11 -10
  167. data/config/boot.rb +1 -2
  168. data/config/environments/development.rb +8 -6
  169. data/config/environments/production.rb +11 -16
  170. data/config/environments/test.rb +5 -5
  171. data/config/initializers/assets.rb +17 -7
  172. data/config/initializers/cookies_serializer.rb +1 -1
  173. data/config/initializers/houston_async.rb +22 -4
  174. data/config/initializers/houston_report_exception.rb +16 -11
  175. data/config/initializers/houston_scheduler.rb +1 -1
  176. data/config/initializers/houston_try.rb +12 -0
  177. data/config/routes.rb +29 -19
  178. data/db/fixtures/projects.yml +2 -2
  179. data/db/migrate/20160317140151_remove_limit_from_users_invitation_token.rb +9 -0
  180. data/db/migrate/20160419230411_create_oauth_providers.rb +14 -0
  181. data/db/migrate/20160420000616_create_authorizations.rb +16 -0
  182. data/db/migrate/20160507135209_create_jobs.rb +14 -0
  183. data/db/migrate/20160507135846_create_errors_2.rb +12 -0
  184. data/db/migrate/20160510233329_add_closed_at_and_merged_at_to_pull_requests.rb +7 -0
  185. data/db/migrate/20160625203412_convert_user_view_options_to_props.rb +21 -0
  186. data/db/migrate/20160625221840_convert_project_extended_attributes_to_props.rb +32 -0
  187. data/db/migrate/20160625230420_move_users_unfuddle_id_to_props.rb +14 -0
  188. data/db/structure.sql +247 -4
  189. data/{houston.gemspec → houston-core.gemspec} +8 -9
  190. data/lib/configuration.rb +15 -43
  191. data/lib/houston/version.rb +1 -1
  192. data/lib/houston_observer.rb +2 -7
  193. data/lib/parallel_enumerable.rb +2 -8
  194. data/templates/new-instance/app/assets/javascripts/.keep +0 -0
  195. data/templates/new-instance/app/assets/javascripts/application.js +13 -0
  196. data/templates/new-instance/app/assets/stylesheets/.keep +0 -0
  197. data/templates/new-instance/app/assets/stylesheets/application.css +13 -0
  198. data/templates/new-instance/app/controllers/.keep +0 -0
  199. data/templates/new-instance/app/models/.keep +0 -0
  200. data/templates/new-instance/app/views/.keep +0 -0
  201. data/templates/new-instance/config/alerts/errs.rb +1 -1
  202. data/templates/new-instance/config/jobs/purge_jobs.rb +3 -0
  203. data/templates/new-instance/config/main.rb +1 -0
  204. data/templates/new-instance/config/routes.rb +5 -0
  205. data/templates/new-instance/config/triggers/github/publish_comments_on_slack.rb +3 -3
  206. data/templates/new-instance/lib/houston/engine.rb +25 -0
  207. data/test/acceptance/creating_a_release_test.rb +1 -1
  208. data/test/integration/ci_integration_test.rb +2 -2
  209. data/test/integration/commits_api_test.rb +1 -1
  210. data/test/unit/controllers/hooks_controller_test.rb +1 -6
  211. data/test/unit/controllers/project_options_controller_test.rb +11 -11
  212. data/test/unit/controllers/user_options_controller_test.rb +13 -13
  213. data/test/unit/models/code_climate_coverage_report_test.rb +1 -1
  214. data/test/unit/models/commit_test.rb +4 -2
  215. data/test/unit/models/project_test.rb +5 -5
  216. data/test/unit/models/props_test.rb +57 -0
  217. data/test/unit/models/pull_request_test.rb +2 -2
  218. data/test/unit/models/test_run_test.rb +1 -1
  219. metadata +166 -151
  220. data/app/assets/javascripts/app/views/reports_view.coffee +0 -51
  221. data/app/controllers/oauth_consumers_controller.rb +0 -68
  222. data/app/controllers/reports_controller.rb +0 -215
  223. data/app/models/consumer_token.rb +0 -13
  224. data/app/models/github_token.rb +0 -8
  225. data/app/views/oauth_consumers/error.html.erb +0 -5
  226. data/app/views/oauth_consumers/index.html.erb +0 -29
  227. data/app/views/oauth_consumers/show.html.erb +0 -7
  228. data/app/views/reports/index.html.erb +0 -9
  229. data/app/views/reports/sprint.html.erb +0 -21
  230. data/app/views/reports/velocity.html.erb +0 -104
  231. data/config/initializers/oauth_consumers.rb +0 -18
  232. data/lib/patches/sprockets_output_path_for_assets.rb +0 -29
@@ -12,7 +12,7 @@
12
12
  //
13
13
  //= require_tree ./core
14
14
  //= require md5
15
- //= require_tree ../templates
15
+ //= require_tree ../../templates
16
16
  //= require_tree ./app
17
17
 
18
18
  $.tablesorter.defaults.cssAsc = 'sort-asc';
@@ -23,4 +23,4 @@ class window.Errors
23
23
  sentences.push "#{attribute} #{messages[0]}"
24
24
  alertify.error sentences.join(".\n")
25
25
 
26
- Errors.fromResponse = (response)-> new Errors(response)
26
+ Errors.fromResponse = (response)-> new Errors(response)
@@ -106,7 +106,7 @@ $.fn.extend
106
106
 
107
107
  $el.append '''
108
108
  <div class="drag-and-drop">
109
- Attach images by dragging &amp; dropping them or <a class="dz-selector">selecting them</a>.
109
+ Attach files or images by dragging &amp; dropping them or <a class="dz-selector">selecting them</a>.
110
110
  </div>
111
111
  <div class="upload-progress"></div>
112
112
  <div class="upload-error"></div>
@@ -116,7 +116,7 @@ $.fn.extend
116
116
  $el.dropzone
117
117
  maxFilesize: 13 # MB
118
118
  clickable: '.dz-selector'
119
- acceptedFiles: 'image/jpeg,image/png,image/gif'
119
+ acceptedFiles: '.pdf,.zip,image/jpeg,image/png,image/gif'
120
120
  url: "//#{bucket}.s3.amazonaws.com"
121
121
  uploadprogress: (file, progress)->
122
122
  $el.find('.upload-progress').html "Uploading #{file.name} (#{progress.toFixed(0)}% complete)"
@@ -142,7 +142,9 @@ $.fn.extend
142
142
  async: false, # because we need this response before dropzone can continue
143
143
  success: (params)=>
144
144
  src = "https://s3.amazonaws.com/#{bucket}/#{params.key}"
145
- @.find('textarea').insertAtCursor "![#{file.name}](#{src})"
145
+ link_markdown = "[#{file.name}](#{src})"
146
+ link_markdown = "!#{link_markdown}" unless _.contains(["application/pdf", "application/zip"], file.type)
147
+ @.find('textarea').insertAtCursor link_markdown
146
148
  $.each params, (key, value)->
147
149
  formData.append(key, value)
148
150
 
@@ -20,5 +20,5 @@
20
20
  //
21
21
  // for Sprint Dashboard
22
22
  //
23
- //= require_tree ../templates/sprints
23
+ //= require_tree ../../templates/sprints
24
24
  //= require ./app/views/_show_sprint_view
@@ -1,4 +1,4 @@
1
- @import "variables.scss";
1
+ @import "houston/variables.scss";
2
2
 
3
3
  $completed-background: #E6F3E2;
4
4
  $completed-foreground: rgb(42, 133, 19);
@@ -0,0 +1,5 @@
1
+ .scheduler-job-success-rate {
2
+ font-size: 0.75em;
3
+ line-height: 20px;
4
+ float: right;
5
+ }
@@ -1,4 +1,4 @@
1
- @import "variables.scss";
1
+ @import "houston/variables.scss";
2
2
 
3
3
  .no-items { font-style: italic; }
4
4
 
@@ -163,3 +163,6 @@ iframe.upload-target {
163
163
  height: 1px;
164
164
  width: 1px;
165
165
  }
166
+
167
+ .fa.success { color: #5DB64C; } // grass
168
+ .fa.failure { color: #E24E32; } // tomato
@@ -0,0 +1,96 @@
1
+ module Houston
2
+ module Props
3
+ extend ActiveSupport::Concern
4
+
5
+ VALID_PROP_NAME = /\A[a-z0-9]+(?:\.[a-z0-9_\-]+)+\Z/i.freeze
6
+
7
+ def self.valid_prop_name!(prop_name)
8
+ return if prop_name =~ VALID_PROP_NAME
9
+ raise ArgumentError, "#{prop_name.inspect} can only contain word-characters, hyphens, and must contain at least one period"
10
+ end
11
+
12
+
13
+ module ClassMethods
14
+ def find_by_prop(prop_name, value)
15
+ Houston::Props.valid_prop_name!(prop_name)
16
+ result = where(["props->>'#{prop_name}' = ?", value]).limit(1).first
17
+
18
+ if !result && block_given?
19
+ result = yield value
20
+ if result
21
+ result.update_prop! prop_name, value
22
+ else
23
+ Rails.logger.info "\e[34mUnable to identify a #{name} where \e[1m#{prop_name}\e[0;34m=\e[1m#{value}\e[0m"
24
+ end
25
+ end
26
+
27
+ result
28
+ end
29
+ end
30
+
31
+
32
+ def get_prop(prop_name)
33
+ Houston::Props.valid_prop_name!(prop_name)
34
+ value = props[prop_name]
35
+
36
+ if !value && block_given?
37
+ value = yield self
38
+ if value
39
+ update_prop! prop_name, value
40
+ else
41
+ Rails.logger.info "\e[34mUnable to identify \e[1m#{prop_name}\e[0;34m for #{inspect}\e[0m"
42
+ end
43
+ end
44
+
45
+ value
46
+ end
47
+
48
+ def update_prop!(prop_name, value)
49
+ update_column :props, props.merge!(prop_name => value)
50
+ end
51
+
52
+ def props
53
+ PropsIndexer.new(self, super)
54
+ end
55
+
56
+ private
57
+
58
+ class PropsIndexer
59
+ def initialize(record, hash)
60
+ @record = record
61
+ @hash = hash
62
+ end
63
+
64
+ delegate :[], :fetch, :each_pair, :key?, to: :@hash
65
+
66
+ def []=(prop_name, value)
67
+ merge!(prop_name => value)
68
+ end
69
+
70
+ def merge!(new_props)
71
+ new_props.each_key(&Houston::Props.method(:valid_prop_name!))
72
+ @record.props = @hash = @hash.merge(new_props)
73
+ end
74
+
75
+ def delete!(key)
76
+ @record.props = @hash = @hash.except(key)
77
+ end
78
+
79
+ def to_h
80
+ @hash.dup
81
+ end
82
+
83
+ def respond_to_missing?(method_name, *args)
84
+ return true if key?(method_name.to_s)
85
+ super
86
+ end
87
+
88
+ def method_missing(method_name, *args, &block)
89
+ prop_name = method_name.to_s
90
+ return self[prop_name] if key?(prop_name)
91
+ super
92
+ end
93
+ end
94
+
95
+ end
96
+ end
@@ -83,7 +83,7 @@ module ProjectAdapter
83
83
 
84
84
  def #{params_method}
85
85
  #{adapter_method}.parameters.each_with_object({}) do |parameter, hash|
86
- hash[parameter] = extended_attributes[parameter.to_s]
86
+ hash[parameter] = props[parameter.to_s]
87
87
  end
88
88
  end
89
89
 
@@ -0,0 +1,32 @@
1
+ module Api
2
+ module V1
3
+ class MeasurementsController < ApplicationController
4
+ before_filter :api_authenticate!
5
+ skip_before_filter :verify_authenticity_token
6
+
7
+ rescue_from ActiveRecord::RecordNotFound do
8
+ head 404
9
+ end
10
+
11
+ rescue_from KeyError do |e|
12
+ render json: { error: e.message }, status: 422
13
+ end
14
+
15
+ def index
16
+ name = params.fetch :name
17
+ start_time = params.fetch :start
18
+ end_time = params.fetch :end
19
+ measurements = Measurement.named(name).taken_between(start_time, end_time)
20
+
21
+ if slugs = params[:project]
22
+ slugs = slugs.split(",") if slugs.is_a?(String)
23
+ projects = Project.where(slug: slugs)
24
+ measurements = measurements.where(subject: projects)
25
+ end
26
+
27
+ render json: MeasurementsPresenter.new(measurements)
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -10,7 +10,7 @@ class ApplicationController < ActionController::Base
10
10
 
11
11
 
12
12
  delegate :mobile?, to: :browser
13
- helper_method :mobile?
13
+ helper_method :mobile?, :unfurling?
14
14
 
15
15
 
16
16
  rescue_from CanCan::AccessDenied do |exception|
@@ -0,0 +1,61 @@
1
+ class AuthorizationsController < ApplicationController
2
+
3
+ def index
4
+ @title = "Authorizations"
5
+ authorize! :read, Authorization
6
+ @authorizations = Authorization.all
7
+ end
8
+
9
+ def new
10
+ @title = "New Authorization"
11
+ authorize! :create, Authorization
12
+ @authorization = Authorization.new
13
+ end
14
+
15
+ def create
16
+ @authorization = Authorization.new(params[:authorization])
17
+ authorize! :create, @authorization
18
+
19
+ if @authorization.save
20
+ redirect_to authorizations_path
21
+ else
22
+ render action: :new
23
+ end
24
+ end
25
+
26
+ def edit
27
+ @title = "Edit Authorization"
28
+ @authorization = Authorization.find params[:id]
29
+ authorize! :update, Authorization
30
+ end
31
+
32
+ def update
33
+ @authorization = Authorization.find params[:id]
34
+ authorize! :update, Authorization
35
+
36
+ if @authorization.update_attributes(params[:authorization])
37
+ redirect_to authorizations_path
38
+ else
39
+ render action: :new
40
+ end
41
+ end
42
+
43
+ def grant
44
+ @authorization = Authorization.find(params[:id])
45
+ if @authorization.granted?
46
+ redirect_to authorizations_url, notice: "Already Granted"
47
+ else
48
+ puts "\e[96;4m#{@authorization.authorize_url}\e[0m"
49
+ redirect_to @authorization.authorize_url
50
+ end
51
+ end
52
+
53
+ def oauth2_callback
54
+ authorization = Authorization.set_access_token! params
55
+ redirect_to authorization_granted_url(authorization)
56
+ end
57
+
58
+ def granted
59
+ end
60
+
61
+ end