houston-core 0.8.4 → 0.9.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (225) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/Gemfile.lock +72 -78
  4. data/app/assets/javascripts/houston/app/models/role.coffee +4 -0
  5. data/app/assets/javascripts/houston/app/views/nested_resources.coffee +44 -0
  6. data/app/assets/javascripts/houston/app/views/team_roles_view.coffee +10 -0
  7. data/app/assets/javascripts/houston/application.js +3 -1
  8. data/app/assets/javascripts/houston/core/ajax_helpers.coffee +26 -0
  9. data/app/assets/javascripts/houston/core/app.coffee +0 -45
  10. data/app/assets/javascripts/houston/core/errors.coffee +1 -12
  11. data/app/assets/javascripts/houston/core/handlebars_helpers.coffee +8 -70
  12. data/app/assets/javascripts/houston/core/jquery_extensions.coffee +0 -138
  13. data/app/assets/javascripts/houston/core/timeline_helpers.coffee +44 -0
  14. data/app/assets/javascripts/houston/core/uploader_helpers.coffee +99 -0
  15. data/app/assets/javascripts/houston/vendor.js +26 -9
  16. data/app/assets/stylesheets/houston/application/actions.scss +22 -0
  17. data/app/assets/stylesheets/houston/application/navigation.scss +2 -2
  18. data/app/assets/stylesheets/houston/application/{freight_train.css.scss → nested_resources.scss} +1 -0
  19. data/app/assets/stylesheets/houston/core/alerts.scss +0 -4
  20. data/app/assets/stylesheets/houston/core/timeline.scss +204 -0
  21. data/app/assets/templates/houston/teams/roles/index.hbs +1 -0
  22. data/app/assets/templates/houston/teams/roles/show.hbs +19 -0
  23. data/app/channels/events_channel.rb +1 -1
  24. data/app/concerns/houston/props.rb +3 -2
  25. data/app/controllers/actions_controller.rb +8 -3
  26. data/app/controllers/application_controller.rb +9 -12
  27. data/app/controllers/authorizations_controller.rb +41 -14
  28. data/app/controllers/errors_controller.rb +3 -3
  29. data/app/controllers/project_follows_controller.rb +23 -0
  30. data/app/controllers/project_options_controller.rb +1 -1
  31. data/app/controllers/user_options_controller.rb +1 -1
  32. data/app/helpers/actions_helper.rb +12 -0
  33. data/app/helpers/application_helper.rb +0 -10
  34. data/app/helpers/layout_helper.rb +20 -0
  35. data/app/helpers/markdown_helper.rb +2 -10
  36. data/app/helpers/navigation_helper.rb +5 -5
  37. data/app/helpers/project_helper.rb +6 -0
  38. data/app/helpers/url_helper.rb +4 -4
  39. data/app/helpers/view_extensions_helper.rb +20 -0
  40. data/app/models/action.rb +61 -44
  41. data/app/models/authorization.rb +55 -10
  42. data/app/models/follow.rb +6 -0
  43. data/app/models/persistent_trigger.rb +11 -1
  44. data/app/models/project.rb +5 -27
  45. data/app/models/user.rb +15 -59
  46. data/app/presenters/project_presenter.rb +2 -2
  47. data/app/views/actions/_actions.html.erb +8 -5
  48. data/app/views/actions/index.html.erb +1 -1
  49. data/app/views/actions/running.html.erb +9 -15
  50. data/app/views/actions/show.html.erb +6 -3
  51. data/app/views/actions/unqueued.html.erb +41 -0
  52. data/app/views/authorizations/_form.html.erb +28 -16
  53. data/app/views/authorizations/index.html.erb +9 -4
  54. data/app/views/{oauth/providers/edit.html.erb → authorizations/oauth2_callback.html.erb} +3 -2
  55. data/app/views/devise/sessions/new.html.erb +0 -8
  56. data/app/views/errors/index.html.erb +9 -5
  57. data/app/views/layouts/_navigation.html.erb +9 -0
  58. data/app/views/layouts/application.html.erb +11 -6
  59. data/app/views/layouts/dashboard.html.erb +9 -0
  60. data/app/views/projects/_form.html.erb +7 -18
  61. data/app/views/projects/_header.html.erb +2 -6
  62. data/app/views/projects/index.html.erb +4 -4
  63. data/app/views/teams/_form.html.erb +7 -17
  64. data/app/views/teams/index.html.erb +1 -1
  65. data/app/views/users/_form.html.erb +1 -38
  66. data/config/application.rb +8 -5
  67. data/config/initializers/devise.rb +0 -14
  68. data/config/initializers/secret_token.rb +8 -13
  69. data/config/routes.rb +12 -28
  70. data/db/migrate/20130706141443_drop_deprecated_project_roles.rb +5 -1
  71. data/db/migrate/20170118005958_remove_antecedents_from_versions_of_tickets.rb +1 -1
  72. data/db/migrate/20170130011016_drop_users_environments_subscribed_to.rb +9 -0
  73. data/db/migrate/20170205004452_drop_settings.rb +12 -0
  74. data/db/migrate/20170206002030_drop_extension_hstore.rb +9 -0
  75. data/db/migrate/20170206002732_drop_legacy_columns_from_users.rb +10 -0
  76. data/db/migrate/20170209022159_rename_projects_color_to_color_name.rb +5 -0
  77. data/db/migrate/20170213001453_change_providers_from_models_to_extensions.rb +27 -0
  78. data/db/migrate/20170215012012_add_props_to_authorizations.rb +5 -0
  79. data/db/migrate/20170216041034_add_user_to_persistent_triggers.rb +5 -0
  80. data/db/migrate/20170226201504_create_follows.rb +20 -0
  81. data/db/migrate/20170301014051_drop_name_from_authorizations.rb +9 -0
  82. data/db/migrate/20170307032041_add_created_at_to_actions.rb +11 -0
  83. data/db/migrate/20170307035755_allow_actions_started_at_to_be_null.rb +5 -0
  84. data/db/migrate/20170310024505_replace_authorizations_provider_name_with_type.rb +12 -0
  85. data/db/migrate/20170329030329_drop_consumer_tokens.rb +9 -0
  86. data/db/structure.sql +187 -212
  87. data/houston-core.gemspec +10 -13
  88. data/lib/houston/boot.rb +1 -4
  89. data/lib/houston/boot/actions.rb +24 -21
  90. data/lib/houston/boot/configuration.rb +46 -113
  91. data/lib/houston/boot/extensions.rb +54 -341
  92. data/lib/houston/boot/extensions/deprecated.rb +194 -0
  93. data/lib/houston/boot/extensions/dsl.rb +99 -0
  94. data/lib/houston/boot/extensions/events.rb +81 -0
  95. data/lib/houston/boot/extensions/features.rb +42 -0
  96. data/lib/houston/boot/extensions/layout.rb +70 -0
  97. data/lib/houston/boot/extensions/navigation.rb +42 -0
  98. data/lib/houston/boot/extensions/oauth.rb +62 -0
  99. data/lib/houston/boot/extensions/serializers.rb +29 -0
  100. data/lib/houston/boot/extensions/view.rb +34 -0
  101. data/lib/houston/boot/observer.rb +10 -5
  102. data/{app/models/oauth → lib/houston/boot}/provider.rb +7 -5
  103. data/lib/houston/boot/running_as.rb +0 -5
  104. data/lib/houston/boot/serializer.rb +12 -6
  105. data/lib/houston/boot/{active_record_serializer.rb → serializers/active_record_serializer.rb} +0 -2
  106. data/lib/houston/boot/{readonly_hash_serializer.rb → serializers/readonly_hash_serializer.rb} +0 -2
  107. data/lib/houston/boot/timer.rb +10 -0
  108. data/lib/houston/boot/triggers.rb +27 -8
  109. data/lib/houston/version.rb +1 -1
  110. data/templates/new-instance/.gitignore +0 -4
  111. data/templates/new-instance/config/main.rb +8 -10
  112. data/templates/new-module/test/dummy/houston.rb +1 -0
  113. data/test/acceptance/layout_test.rb +58 -0
  114. data/test/acceptance/updating_props_test.rb +72 -0
  115. data/test/support/config.rb +1 -0
  116. data/test/unit/extensions/events_extension_test.rb +33 -0
  117. data/test/unit/extensions/layout_extension_test.rb +74 -0
  118. data/test/unit/extensions/navigation_extension_test.rb +62 -0
  119. data/test/unit/extensions/oauth_extension_test.rb +91 -0
  120. data/test/unit/extensions/project_features_extension_test.rb +79 -0
  121. data/test/unit/extensions/serializers_extension_test.rb +47 -0
  122. data/test/unit/extensions/view_extension_test.rb +98 -0
  123. data/test/unit/models/actions_test.rb +11 -5
  124. data/test/unit/models/configuration_test.rb +0 -8
  125. data/test/unit/models/observer_test.rb +16 -0
  126. data/test/unit/models/persistent_trigger_test.rb +29 -2
  127. data/test/unit/models/serializer_test.rb +6 -0
  128. data/test/unit/models/timer_test.rb +88 -0
  129. metadata +87 -168
  130. data/app/assets/font/octicons.eot +0 -0
  131. data/app/assets/font/octicons.svg +0 -198
  132. data/app/assets/font/octicons.ttf +0 -0
  133. data/app/assets/font/octicons.woff +0 -0
  134. data/app/assets/font/roboto-black-webfont.eot +0 -0
  135. data/app/assets/font/roboto-black-webfont.svg +0 -675
  136. data/app/assets/font/roboto-black-webfont.ttf +0 -0
  137. data/app/assets/font/roboto-black-webfont.woff +0 -0
  138. data/app/assets/font/roboto-blackitalic-webfont.eot +0 -0
  139. data/app/assets/font/roboto-blackitalic-webfont.svg +0 -677
  140. data/app/assets/font/roboto-blackitalic-webfont.ttf +0 -0
  141. data/app/assets/font/roboto-blackitalic-webfont.woff +0 -0
  142. data/app/assets/font/roboto-bold-webfont.eot +0 -0
  143. data/app/assets/font/roboto-bold-webfont.svg +0 -675
  144. data/app/assets/font/roboto-bold-webfont.ttf +0 -0
  145. data/app/assets/font/roboto-bold-webfont.woff +0 -0
  146. data/app/assets/font/roboto-bolditalic-webfont.eot +0 -0
  147. data/app/assets/font/roboto-bolditalic-webfont.svg +0 -677
  148. data/app/assets/font/roboto-bolditalic-webfont.ttf +0 -0
  149. data/app/assets/font/roboto-bolditalic-webfont.woff +0 -0
  150. data/app/assets/font/roboto-italic-webfont.eot +0 -0
  151. data/app/assets/font/roboto-italic-webfont.svg +0 -668
  152. data/app/assets/font/roboto-italic-webfont.ttf +0 -0
  153. data/app/assets/font/roboto-italic-webfont.woff +0 -0
  154. data/app/assets/font/roboto-light-webfont.eot +0 -0
  155. data/app/assets/font/roboto-light-webfont.svg +0 -666
  156. data/app/assets/font/roboto-light-webfont.ttf +0 -0
  157. data/app/assets/font/roboto-light-webfont.woff +0 -0
  158. data/app/assets/font/roboto-lightitalic-webfont.eot +0 -0
  159. data/app/assets/font/roboto-lightitalic-webfont.svg +0 -668
  160. data/app/assets/font/roboto-lightitalic-webfont.ttf +0 -0
  161. data/app/assets/font/roboto-lightitalic-webfont.woff +0 -0
  162. data/app/assets/font/roboto-medium-webfont.eot +0 -0
  163. data/app/assets/font/roboto-medium-webfont.svg +0 -675
  164. data/app/assets/font/roboto-medium-webfont.ttf +0 -0
  165. data/app/assets/font/roboto-medium-webfont.woff +0 -0
  166. data/app/assets/font/roboto-mediumitalic-webfont.eot +0 -0
  167. data/app/assets/font/roboto-mediumitalic-webfont.svg +0 -677
  168. data/app/assets/font/roboto-mediumitalic-webfont.ttf +0 -0
  169. data/app/assets/font/roboto-mediumitalic-webfont.woff +0 -0
  170. data/app/assets/font/roboto-regular-webfont.eot +0 -0
  171. data/app/assets/font/roboto-regular-webfont.svg +0 -666
  172. data/app/assets/font/roboto-regular-webfont.ttf +0 -0
  173. data/app/assets/font/roboto-regular-webfont.woff +0 -0
  174. data/app/assets/font/roboto-thin-webfont.eot +0 -0
  175. data/app/assets/font/roboto-thin-webfont.svg +0 -666
  176. data/app/assets/font/roboto-thin-webfont.ttf +0 -0
  177. data/app/assets/font/roboto-thin-webfont.woff +0 -0
  178. data/app/assets/font/roboto-thinitalic-webfont.eot +0 -0
  179. data/app/assets/font/roboto-thinitalic-webfont.svg +0 -668
  180. data/app/assets/font/roboto-thinitalic-webfont.ttf +0 -0
  181. data/app/assets/font/roboto-thinitalic-webfont.woff +0 -0
  182. data/app/assets/images/bug-fixed-128.png +0 -0
  183. data/app/assets/images/bug-fixed-32.png +0 -0
  184. data/app/assets/images/bug-fixed-48.png +0 -0
  185. data/app/assets/images/bug-new-128.png +0 -0
  186. data/app/assets/images/bug-new-32.png +0 -0
  187. data/app/assets/images/bug-new-48.png +0 -0
  188. data/app/assets/images/bug-open-32.png +0 -0
  189. data/app/assets/images/bug-zero-128.png +0 -0
  190. data/app/assets/images/bug-zero-48.png +0 -0
  191. data/app/assets/images/drag-grip.png +0 -0
  192. data/app/assets/javascripts/houston/core/burndown_chart.coffee +0 -111
  193. data/app/assets/javascripts/houston/core/stacked_area_graph.coffee +0 -113
  194. data/app/assets/javascripts/houston/core/stacked_bar_graph.coffee +0 -108
  195. data/app/assets/stylesheets/houston/application/project_tiles.scss +0 -26
  196. data/app/assets/stylesheets/houston/application/tips.scss +0 -5
  197. data/app/assets/stylesheets/houston/core/octicons-icons.scss +0 -221
  198. data/app/assets/stylesheets/houston/core/octicons.scss.erb +0 -9
  199. data/app/assets/stylesheets/houston/core/roboto.scss.erb +0 -131
  200. data/app/concerns/historical_weekly_stats.rb +0 -15
  201. data/app/concerns/nosync.rb +0 -21
  202. data/app/controllers/oauth/providers_controller.rb +0 -45
  203. data/app/controllers/project_roles_controller.rb +0 -22
  204. data/app/controllers/settings_controller.rb +0 -14
  205. data/app/controllers/tester_bar_controller.rb +0 -12
  206. data/app/controllers/user_credentials_controller.rb +0 -24
  207. data/app/models/role.rb +0 -33
  208. data/app/models/setting.rb +0 -10
  209. data/app/models/settings.rb +0 -38
  210. data/app/models/slackdown.rb +0 -23
  211. data/app/models/user_credentials.rb +0 -27
  212. data/app/views/errors/_actions.html.erb +0 -17
  213. data/app/views/layouts/_tester_bar.html.erb +0 -6
  214. data/app/views/layouts/minimal.html.erb +0 -50
  215. data/app/views/layouts/naked.html.erb +0 -47
  216. data/app/views/layouts/naked_dashboard.html.erb +0 -50
  217. data/app/views/oauth/providers/_form.html.erb +0 -54
  218. data/app/views/oauth/providers/index.html.erb +0 -41
  219. data/app/views/oauth/providers/new.html.erb +0 -7
  220. data/config/initializers/add_navigation_renderers.rb +0 -5
  221. data/config/initializers/vestal_versions.rb +0 -9
  222. data/db/migrate/20130519163615_create_user_credentials.rb +0 -18
  223. data/lib/houston/boot/events.rb +0 -10
  224. data/lib/tasks/keypair.rake +0 -17
  225. data/vendor/assets/javascripts/jquery.pjax.js +0 -817
@@ -0,0 +1,47 @@
1
+ require "test_helper"
2
+
3
+ class SerializersExtensionTest < ActiveSupport::TestCase
4
+
5
+
6
+ context "Houston.serializers" do
7
+ should "be an instance of Houston::Extensions::Serializers" do
8
+ assert_kind_of Houston::Extensions::Serializers, Houston.serializers
9
+ end
10
+ end
11
+
12
+
13
+ context "#add" do
14
+ should "register a serializer for a certain kind of object" do
15
+ n = UnserializableNumber.new(5)
16
+ assert_raises Houston::Serializer::UnserializableError do
17
+ serialize(n)
18
+ end
19
+ serializers << UnserializableNumberSerializer
20
+ assert_equal "5", serialize(n)
21
+ end
22
+ end
23
+
24
+
25
+ private
26
+
27
+ def serialize(object)
28
+ Houston::Serializer.new(serializers).dump(object)
29
+ end
30
+
31
+ def serializers
32
+ @serializers ||= Houston::Extensions::Serializers.new
33
+ end
34
+
35
+ UnserializableNumber = Struct.new(:value)
36
+
37
+ class UnserializableNumberSerializer
38
+ def applies_to?(object)
39
+ object.is_a? UnserializableNumber
40
+ end
41
+
42
+ def pack(object)
43
+ object.value
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,98 @@
1
+ require "test_helper"
2
+
3
+ class ViewExtensionTest < ActiveSupport::TestCase
4
+ attr_reader :column, :field
5
+
6
+ context "Houston.view" do
7
+ should "be an instance of Houston::Extensions::Views" do
8
+ assert_kind_of Houston::Extensions::Views, Houston.view
9
+ end
10
+ end
11
+
12
+ context 'Houston.view["anything"]' do
13
+ should "be an instance of Houston::View" do
14
+ assert_kind_of Houston::Extensions::View, Houston.view["anything"]
15
+ end
16
+
17
+ should "support `has` as a shortcut for extend" do
18
+ view = views["test"].has :Table
19
+ assert_kind_of Houston::Extensions::HasTable, view
20
+ end
21
+ end
22
+
23
+
24
+ context "HasTable#add_column" do
25
+ setup do
26
+ views["widgets"].has :Table
27
+ @column = views["widgets"].add_column("Rotation") { 45 }
28
+ end
29
+
30
+ should "add a column to the array of columns" do
31
+ assert_equal 1, views["widgets"].columns.length
32
+ assert_equal "Rotation", views["widgets"].columns.first.name
33
+ end
34
+
35
+ should "invoke the block on render" do
36
+ assert_equal 45, views["widgets"].columns.first.render(self)
37
+ end
38
+
39
+ should "add a column that's accessible to everyone by default" do
40
+ assert column.permitted?(Ability.new(unprivileged_user))
41
+ end
42
+
43
+ should "let you chain an ability to the column" do
44
+ column.ability { can?(:manange, :all) }
45
+
46
+ assert column.permitted?(Ability.new(privileged_user))
47
+ refute column.permitted?(Ability.new(unprivileged_user))
48
+ end
49
+ end
50
+
51
+
52
+ context "HasForm#add_field" do
53
+ setup do
54
+ views["widgets"].has :Form
55
+ @field = views["widgets"].add_field("Material") do |f|
56
+ f.select "test.material", %w{Aluminum Titanium Platinum}
57
+ end
58
+ end
59
+
60
+ should "add a field to the array of fields" do
61
+ assert_equal 1, views["widgets"].fields.length
62
+ assert_equal "Material", views["widgets"].fields.first.label
63
+ end
64
+
65
+ should "invoke the block with a FormBuilder on render" do
66
+ form_builder = Object.new
67
+ mock(form_builder).select.with_any_args
68
+ views["widgets"].fields.first.render(self, form_builder)
69
+ end
70
+
71
+ should "add a field that's accessible to everyone by default" do
72
+ assert field.permitted?(Ability.new(unprivileged_user))
73
+ end
74
+
75
+ should "let you chain an ability to the field" do
76
+ field.ability { can?(:manange, :all) }
77
+
78
+ assert field.permitted?(Ability.new(privileged_user))
79
+ refute field.permitted?(Ability.new(unprivileged_user))
80
+ end
81
+ end
82
+
83
+
84
+ private
85
+
86
+ def views
87
+ @views ||= Houston::Extensions::Views.new
88
+ end
89
+
90
+ def privileged_user
91
+ @privileged_user ||= users(:boblail)
92
+ end
93
+
94
+ def unprivileged_user
95
+ @unprivileged_user ||= create(:user)
96
+ end
97
+
98
+ end
@@ -3,10 +3,15 @@ require "test_helper"
3
3
  class ActionsTest < ActiveSupport::TestCase
4
4
 
5
5
  def setup
6
+ Houston.instance_variable_set :@actions, Houston::Actions.new
6
7
  actions.define("test-action") { }
7
8
  Action.delete_all
8
9
  end
9
10
 
11
+ def teardown
12
+ Houston.actions.clear
13
+ end
14
+
10
15
 
11
16
  context "Actions#define" do
12
17
  should "allow you to define the params an action requires" do
@@ -85,11 +90,12 @@ class ActionsTest < ActiveSupport::TestCase
85
90
  end
86
91
 
87
92
  should "invoke actions in the context of their params" do
88
- actions.redefine("test-action") do
89
- assert respond_to?(:example)
90
- assert_equal 5, example
91
- end
93
+ context = nil
94
+ actions.redefine("test-action") { context = self }
92
95
  run! example: 5
96
+
97
+ assert context.respond_to?(:example)
98
+ assert_equal 5, context.example
93
99
  end
94
100
  end
95
101
 
@@ -97,7 +103,7 @@ class ActionsTest < ActiveSupport::TestCase
97
103
  private
98
104
 
99
105
  def actions
100
- @actions ||= Houston::Actions.new
106
+ Houston.actions
101
107
  end
102
108
 
103
109
  def run!(params={}, options={})
@@ -41,14 +41,6 @@ class ConfigurationTest < ActiveSupport::TestCase
41
41
  end
42
42
  end
43
43
 
44
- should "define an action with a made-up name (for now) when you don't specify an action" do
45
- action = nil
46
- assert_difference ["config.triggers.count", "config.actions.count"], +1 do
47
- action = config.every("10m") { }
48
- end
49
- assert_match /10m:[a-f0-9]{8,}/, action.name
50
- end
51
-
52
44
  should "define a timer for an existing action" do
53
45
  assert_difference "config.triggers.count", +1 do
54
46
  config.action("test-action") { }
@@ -81,6 +81,22 @@ class ObserverTest < ActiveSupport::TestCase
81
81
  end
82
82
 
83
83
 
84
+ context "Houston.observer.off" do
85
+ should "unregister a callback" do
86
+ calls = 0
87
+ callback = Proc.new { calls += 1 }
88
+ assert_difference "calls", +1 do
89
+ Houston.observer.on "test0", &callback
90
+ Houston.observer.fire "test0"
91
+ end
92
+ assert_no_difference "calls" do
93
+ Houston.observer.off "test0", &callback
94
+ Houston.observer.fire "test0"
95
+ end
96
+ end
97
+ end
98
+
99
+
84
100
  context "callback params" do
85
101
  should "be retrievable by array-style access" do
86
102
  callback_params = :not_called
@@ -37,6 +37,7 @@ class PersistentTriggerTest < ActiveSupport::TestCase
37
37
 
38
38
  context "#save!" do
39
39
  setup do
40
+ @user = users(:boblail)
40
41
  Houston.config.actions.define("test-action") { }
41
42
  end
42
43
 
@@ -46,13 +47,38 @@ class PersistentTriggerTest < ActiveSupport::TestCase
46
47
 
47
48
  should "add the trigger to the database" do
48
49
  assert_difference "PersistentTrigger.count", +1 do
49
- PersistentTrigger.every("day at 1:30pm", "test-action", example: 5).save!
50
+ @user.triggers.every("day at 1:30pm", "test-action", example: 5).save!
50
51
  end
51
52
  end
52
53
 
53
54
  should "register the trigger" do
54
55
  assert_difference "Houston.config.triggers.count", +1 do
55
- PersistentTrigger.every("day at 2:30pm", "test-action", example: 5).save!
56
+ @user.triggers.every("day at 2:30pm", "test-action", example: 5).save!
57
+ end
58
+ end
59
+ end
60
+
61
+
62
+ context "#destroy" do
63
+ setup do
64
+ @user = users(:boblail)
65
+ Houston.config.actions.define("test-action") { }
66
+ @trigger = @user.triggers.every("day at 2:30pm", "test-action", example: 5).tap(&:save!)
67
+ end
68
+
69
+ teardown do
70
+ Houston.config.actions.undefine("test-action")
71
+ end
72
+
73
+ should "remove the trigger from the database" do
74
+ assert_difference "PersistentTrigger.count", -1 do
75
+ @trigger.destroy
76
+ end
77
+ end
78
+
79
+ should "unregister the trigger" do
80
+ assert_difference "Houston.config.triggers.count", -1 do
81
+ @trigger.destroy
56
82
  end
57
83
  end
58
84
  end
@@ -61,6 +87,7 @@ class PersistentTriggerTest < ActiveSupport::TestCase
61
87
  context ".load_all" do
62
88
  setup do
63
89
  PersistentTrigger.all.insert({
90
+ PersistentTrigger.column_for_attribute(:user_id) => users(:boblail).id,
64
91
  PersistentTrigger.column_for_attribute(:type) => "every",
65
92
  PersistentTrigger.column_for_attribute(:value) => "day at 9:00am",
66
93
  PersistentTrigger.column_for_attribute(:action) => "test-action",
@@ -58,6 +58,12 @@ class SerializerTest < ActiveSupport::TestCase
58
58
  refute_match /"^o":"ActiveSupport::TimeWithZone"/, dump(x: project)
59
59
  end
60
60
 
61
+ should "serialize a record with a Postgres array" do
62
+ refute_raises do
63
+ dump(Project.create!(name: "Test", slug: "test", selected_features: %w{feedback releases}))
64
+ end
65
+ end
66
+
61
67
 
62
68
  private
63
69
 
@@ -0,0 +1,88 @@
1
+ require "test_helper"
2
+
3
+ class TimerTest < ActiveSupport::TestCase
4
+
5
+
6
+ context "Before Rufus Scheduler is started" do
7
+ setup do
8
+ teardown_scheduler!
9
+ end
10
+
11
+ context "Adding a timer" do
12
+ should "add it to `queued_timers`" do
13
+ callback = Proc.new { :ok }
14
+ assert_difference "queued_timers.length", +1 do
15
+ timers.every "5s", &callback
16
+ end
17
+ end
18
+ end
19
+
20
+ context "Removing a timer" do
21
+ should "remove it from `queued_timers`" do
22
+ callback = Proc.new { :ok }
23
+ timers.every "5s", &callback
24
+
25
+ assert_difference "queued_timers.length", -1 do
26
+ timers.stop "5s", callback
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+
33
+ context "After Rufus Scheduler is started" do
34
+ setup do
35
+ setup_scheduler!
36
+ end
37
+
38
+ teardown do
39
+ teardown_scheduler!
40
+ end
41
+
42
+ context "Adding a timer" do
43
+ should "add a new job to the scheduler" do
44
+ callback = Proc.new { :ok }
45
+ assert_difference "scheduled_jobs.length", +1 do
46
+ timers.every "5s", &callback
47
+ end
48
+ end
49
+ end
50
+
51
+ context "Removing a timer" do
52
+ should "remove it from the scheduler's jobs" do
53
+ callback = Proc.new { :ok }
54
+ timers.every "5s", &callback
55
+
56
+ assert_difference "scheduled_jobs.length", -1 do
57
+ timers.stop "5s", callback
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+
64
+ private
65
+
66
+ def timers
67
+ @timers ||= Houston::Timer.new
68
+ end
69
+
70
+ def queued_timers
71
+ timers.send :queued_timers
72
+ end
73
+
74
+ def scheduled_jobs
75
+ $scheduler.jobs
76
+ end
77
+
78
+ def setup_scheduler!
79
+ teardown_scheduler!
80
+ $scheduler = Rufus::Scheduler.new
81
+ end
82
+
83
+ def teardown_scheduler!
84
+ $scheduler.shutdown if $scheduler
85
+ $scheduler = nil
86
+ end
87
+
88
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: houston-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
4
+ version: 0.9.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Lail
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 0.3.6
89
+ version: 0.3.9
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: 0.3.6
96
+ version: 0.3.9
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: browser
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -109,19 +109,19 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: 2.3.0
111
111
  - !ruby/object:Gem::Dependency
112
- name: cancan
112
+ name: cancancan
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 1.6.10
117
+ version: 1.16.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 1.6.10
124
+ version: 1.16.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: concurrent-ruby
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -164,20 +164,6 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: houston-devise_ldap_authenticatable
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :runtime
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
167
  - !ruby/object:Gem::Dependency
182
168
  name: faraday
183
169
  requirement: !ruby/object:Gem::Requirement
@@ -252,16 +238,16 @@ dependencies:
252
238
  name: neat-rails
253
239
  requirement: !ruby/object:Gem::Requirement
254
240
  requirements:
255
- - - ">="
241
+ - - "~>"
256
242
  - !ruby/object:Gem::Version
257
- version: '0'
243
+ version: 0.5.1
258
244
  type: :runtime
259
245
  prerelease: false
260
246
  version_requirements: !ruby/object:Gem::Requirement
261
247
  requirements:
262
- - - ">="
248
+ - - "~>"
263
249
  - !ruby/object:Gem::Version
264
- version: '0'
250
+ version: 0.5.1
265
251
  - !ruby/object:Gem::Dependency
266
252
  name: nokogiri
267
253
  requirement: !ruby/object:Gem::Requirement
@@ -338,14 +324,14 @@ dependencies:
338
324
  requirements:
339
325
  - - "~>"
340
326
  - !ruby/object:Gem::Version
341
- version: 1.8.6
327
+ version: 1.10.0
342
328
  type: :runtime
343
329
  prerelease: false
344
330
  version_requirements: !ruby/object:Gem::Requirement
345
331
  requirements:
346
332
  - - "~>"
347
333
  - !ruby/object:Gem::Version
348
- version: 1.8.6
334
+ version: 1.10.0
349
335
  - !ruby/object:Gem::Dependency
350
336
  name: progressbar
351
337
  requirement: !ruby/object:Gem::Requirement
@@ -375,35 +361,21 @@ dependencies:
375
361
  - !ruby/object:Gem::Version
376
362
  version: 1.3.1
377
363
  - !ruby/object:Gem::Dependency
378
- name: redcarpet
379
- requirement: !ruby/object:Gem::Requirement
380
- requirements:
381
- - - "~>"
382
- - !ruby/object:Gem::Version
383
- version: 3.3.2
384
- type: :runtime
385
- prerelease: false
386
- version_requirements: !ruby/object:Gem::Requirement
387
- requirements:
388
- - - "~>"
389
- - !ruby/object:Gem::Version
390
- version: 3.3.2
391
- - !ruby/object:Gem::Dependency
392
- name: strongbox
364
+ name: thor
393
365
  requirement: !ruby/object:Gem::Requirement
394
366
  requirements:
395
- - - "~>"
367
+ - - ">="
396
368
  - !ruby/object:Gem::Version
397
- version: 0.7.2
369
+ version: '0'
398
370
  type: :runtime
399
371
  prerelease: false
400
372
  version_requirements: !ruby/object:Gem::Requirement
401
373
  requirements:
402
- - - "~>"
374
+ - - ">="
403
375
  - !ruby/object:Gem::Version
404
- version: 0.7.2
376
+ version: '0'
405
377
  - !ruby/object:Gem::Dependency
406
- name: thor
378
+ name: kramdown
407
379
  requirement: !ruby/object:Gem::Requirement
408
380
  requirements:
409
381
  - - ">="
@@ -417,19 +389,19 @@ dependencies:
417
389
  - !ruby/object:Gem::Version
418
390
  version: '0'
419
391
  - !ruby/object:Gem::Dependency
420
- name: houston-vestal_versions
392
+ name: slackdown
421
393
  requirement: !ruby/object:Gem::Requirement
422
394
  requirements:
423
395
  - - ">="
424
396
  - !ruby/object:Gem::Version
425
- version: '0'
397
+ version: 0.2.1
426
398
  type: :runtime
427
399
  prerelease: false
428
400
  version_requirements: !ruby/object:Gem::Requirement
429
401
  requirements:
430
402
  - - ">="
431
403
  - !ruby/object:Gem::Version
432
- version: '0'
404
+ version: 0.2.1
433
405
  - !ruby/object:Gem::Dependency
434
406
  name: sass-rails
435
407
  requirement: !ruby/object:Gem::Requirement
@@ -478,28 +450,14 @@ dependencies:
478
450
  requirements:
479
451
  - - "~>"
480
452
  - !ruby/object:Gem::Version
481
- version: 3.2.0
453
+ version: 3.3.4
482
454
  type: :runtime
483
455
  prerelease: false
484
456
  version_requirements: !ruby/object:Gem::Requirement
485
457
  requirements:
486
458
  - - "~>"
487
459
  - !ruby/object:Gem::Version
488
- version: 3.2.0
489
- - !ruby/object:Gem::Dependency
490
- name: nested_editor_for
491
- requirement: !ruby/object:Gem::Requirement
492
- requirements:
493
- - - ">="
494
- - !ruby/object:Gem::Version
495
- version: '0'
496
- type: :runtime
497
- prerelease: false
498
- version_requirements: !ruby/object:Gem::Requirement
499
- requirements:
500
- - - ">="
501
- - !ruby/object:Gem::Version
502
- version: '0'
460
+ version: 3.3.4
503
461
  description:
504
462
  email:
505
463
  - bob.lailfamily@gmail.com
@@ -518,79 +476,20 @@ files:
518
476
  - README.md
519
477
  - ROADMAP.md
520
478
  - Rakefile
521
- - app/assets/font/octicons.eot
522
- - app/assets/font/octicons.svg
523
- - app/assets/font/octicons.ttf
524
- - app/assets/font/octicons.woff
525
- - app/assets/font/roboto-black-webfont.eot
526
- - app/assets/font/roboto-black-webfont.svg
527
- - app/assets/font/roboto-black-webfont.ttf
528
- - app/assets/font/roboto-black-webfont.woff
529
- - app/assets/font/roboto-blackitalic-webfont.eot
530
- - app/assets/font/roboto-blackitalic-webfont.svg
531
- - app/assets/font/roboto-blackitalic-webfont.ttf
532
- - app/assets/font/roboto-blackitalic-webfont.woff
533
- - app/assets/font/roboto-bold-webfont.eot
534
- - app/assets/font/roboto-bold-webfont.svg
535
- - app/assets/font/roboto-bold-webfont.ttf
536
- - app/assets/font/roboto-bold-webfont.woff
537
- - app/assets/font/roboto-bolditalic-webfont.eot
538
- - app/assets/font/roboto-bolditalic-webfont.svg
539
- - app/assets/font/roboto-bolditalic-webfont.ttf
540
- - app/assets/font/roboto-bolditalic-webfont.woff
541
- - app/assets/font/roboto-italic-webfont.eot
542
- - app/assets/font/roboto-italic-webfont.svg
543
- - app/assets/font/roboto-italic-webfont.ttf
544
- - app/assets/font/roboto-italic-webfont.woff
545
- - app/assets/font/roboto-light-webfont.eot
546
- - app/assets/font/roboto-light-webfont.svg
547
- - app/assets/font/roboto-light-webfont.ttf
548
- - app/assets/font/roboto-light-webfont.woff
549
- - app/assets/font/roboto-lightitalic-webfont.eot
550
- - app/assets/font/roboto-lightitalic-webfont.svg
551
- - app/assets/font/roboto-lightitalic-webfont.ttf
552
- - app/assets/font/roboto-lightitalic-webfont.woff
553
- - app/assets/font/roboto-medium-webfont.eot
554
- - app/assets/font/roboto-medium-webfont.svg
555
- - app/assets/font/roboto-medium-webfont.ttf
556
- - app/assets/font/roboto-medium-webfont.woff
557
- - app/assets/font/roboto-mediumitalic-webfont.eot
558
- - app/assets/font/roboto-mediumitalic-webfont.svg
559
- - app/assets/font/roboto-mediumitalic-webfont.ttf
560
- - app/assets/font/roboto-mediumitalic-webfont.woff
561
- - app/assets/font/roboto-regular-webfont.eot
562
- - app/assets/font/roboto-regular-webfont.svg
563
- - app/assets/font/roboto-regular-webfont.ttf
564
- - app/assets/font/roboto-regular-webfont.woff
565
- - app/assets/font/roboto-thin-webfont.eot
566
- - app/assets/font/roboto-thin-webfont.svg
567
- - app/assets/font/roboto-thin-webfont.ttf
568
- - app/assets/font/roboto-thin-webfont.woff
569
- - app/assets/font/roboto-thinitalic-webfont.eot
570
- - app/assets/font/roboto-thinitalic-webfont.svg
571
- - app/assets/font/roboto-thinitalic-webfont.ttf
572
- - app/assets/font/roboto-thinitalic-webfont.woff
573
479
  - app/assets/images/.keep
574
- - app/assets/images/bug-fixed-128.png
575
- - app/assets/images/bug-fixed-32.png
576
- - app/assets/images/bug-fixed-48.png
577
- - app/assets/images/bug-new-128.png
578
- - app/assets/images/bug-new-32.png
579
- - app/assets/images/bug-new-48.png
580
- - app/assets/images/bug-open-32.png
581
- - app/assets/images/bug-zero-128.png
582
- - app/assets/images/bug-zero-48.png
583
- - app/assets/images/drag-grip.png
584
480
  - app/assets/javascripts/houston/app/boot.coffee
585
481
  - app/assets/javascripts/houston/app/commands/show_keyboard_shortcuts.coffee
586
482
  - app/assets/javascripts/houston/app/emoji.coffee.erb
587
483
  - app/assets/javascripts/houston/app/infinite_scroll.coffee
484
+ - app/assets/javascripts/houston/app/models/role.coffee
588
485
  - app/assets/javascripts/houston/app/models/user.coffee
589
486
  - app/assets/javascripts/houston/app/mousetrap-bind-scoped.js
590
487
  - app/assets/javascripts/houston/app/views/keyboard_shortcuts_modal.coffee
488
+ - app/assets/javascripts/houston/app/views/nested_resources.coffee
489
+ - app/assets/javascripts/houston/app/views/team_roles_view.coffee
591
490
  - app/assets/javascripts/houston/application.js
491
+ - app/assets/javascripts/houston/core/ajax_helpers.coffee
592
492
  - app/assets/javascripts/houston/core/app.coffee
593
- - app/assets/javascripts/houston/core/burndown_chart.coffee
594
493
  - app/assets/javascripts/houston/core/core_ext/array.coffee
595
494
  - app/assets/javascripts/houston/core/core_ext/date.coffee
596
495
  - app/assets/javascripts/houston/core/core_ext/number.coffee
@@ -600,8 +499,8 @@ files:
600
499
  - app/assets/javascripts/houston/core/jquery_extensions.coffee
601
500
  - app/assets/javascripts/houston/core/keyboard_shortcuts.coffee
602
501
  - app/assets/javascripts/houston/core/observer.coffee
603
- - app/assets/javascripts/houston/core/stacked_area_graph.coffee
604
- - app/assets/javascripts/houston/core/stacked_bar_graph.coffee
502
+ - app/assets/javascripts/houston/core/timeline_helpers.coffee
503
+ - app/assets/javascripts/houston/core/uploader_helpers.coffee
605
504
  - app/assets/javascripts/houston/dashboard.js
606
505
  - app/assets/javascripts/houston/dashboard/refresher.coffee
607
506
  - app/assets/javascripts/houston/vendor.js
@@ -610,7 +509,6 @@ files:
610
509
  - app/assets/stylesheets/houston/application/ansi.scss
611
510
  - app/assets/stylesheets/houston/application/emoji.scss
612
511
  - app/assets/stylesheets/houston/application/forms.scss
613
- - app/assets/stylesheets/houston/application/freight_train.css.scss
614
512
  - app/assets/stylesheets/houston/application/full_screen.scss
615
513
  - app/assets/stylesheets/houston/application/github_repos.scss
616
514
  - app/assets/stylesheets/houston/application/globals.scss
@@ -621,13 +519,12 @@ files:
621
519
  - app/assets/stylesheets/houston/application/mobile.scss
622
520
  - app/assets/stylesheets/houston/application/modals.scss
623
521
  - app/assets/stylesheets/houston/application/navigation.scss
522
+ - app/assets/stylesheets/houston/application/nested_resources.scss
624
523
  - app/assets/stylesheets/houston/application/project_banner_buttons.scss
625
- - app/assets/stylesheets/houston/application/project_tiles.scss
626
524
  - app/assets/stylesheets/houston/application/projects.css.scss
627
525
  - app/assets/stylesheets/houston/application/sortable_table.scss
628
526
  - app/assets/stylesheets/houston/application/tables.scss
629
527
  - app/assets/stylesheets/houston/application/teams.scss
630
- - app/assets/stylesheets/houston/application/tips.scss
631
528
  - app/assets/stylesheets/houston/application/typeahead.scss
632
529
  - app/assets/stylesheets/houston/application/uploading.scss
633
530
  - app/assets/stylesheets/houston/application/user_wall.scss
@@ -638,24 +535,22 @@ files:
638
535
  - app/assets/stylesheets/houston/core/colors.scss.erb
639
536
  - app/assets/stylesheets/houston/core/globals.scss
640
537
  - app/assets/stylesheets/houston/core/misc.scss
641
- - app/assets/stylesheets/houston/core/octicons-icons.scss
642
- - app/assets/stylesheets/houston/core/octicons.scss.erb
643
538
  - app/assets/stylesheets/houston/core/overrides.scss
644
- - app/assets/stylesheets/houston/core/roboto.scss.erb
645
539
  - app/assets/stylesheets/houston/core/scores.scss
540
+ - app/assets/stylesheets/houston/core/timeline.scss
646
541
  - app/assets/stylesheets/houston/dashboard.css
647
542
  - app/assets/stylesheets/houston/dashboard/dashboard.scss
648
543
  - app/assets/stylesheets/houston/print.css.scss
649
544
  - app/assets/stylesheets/houston/variables.scss
650
545
  - app/assets/stylesheets/houston/vendor.css
546
+ - app/assets/templates/houston/teams/roles/index.hbs
547
+ - app/assets/templates/houston/teams/roles/show.hbs
651
548
  - app/assets/templates/keyboard_shortcuts.hbs
652
549
  - app/channels/application_cable/channel.rb
653
550
  - app/channels/application_cable/connection.rb
654
551
  - app/channels/events_channel.rb
655
552
  - app/concerns/feature_support.rb
656
- - app/concerns/historical_weekly_stats.rb
657
553
  - app/concerns/houston/props.rb
658
- - app/concerns/nosync.rb
659
554
  - app/concerns/project_adapter.rb
660
555
  - app/concerns/retirement.rb
661
556
  - app/controllers/actions_controller.rb
@@ -667,18 +562,14 @@ files:
667
562
  - app/controllers/errors_controller.rb
668
563
  - app/controllers/home_controller.rb
669
564
  - app/controllers/hooks_controller.rb
670
- - app/controllers/oauth/providers_controller.rb
565
+ - app/controllers/project_follows_controller.rb
671
566
  - app/controllers/project_hooks_controller.rb
672
567
  - app/controllers/project_options_controller.rb
673
- - app/controllers/project_roles_controller.rb
674
568
  - app/controllers/projects_controller.rb
675
569
  - app/controllers/sessions_controller.rb
676
- - app/controllers/settings_controller.rb
677
570
  - app/controllers/teams_controller.rb
678
- - app/controllers/tester_bar_controller.rb
679
571
  - app/controllers/triggers_controller.rb
680
572
  - app/controllers/uploads_controller.rb
681
- - app/controllers/user_credentials_controller.rb
682
573
  - app/controllers/user_options_controller.rb
683
574
  - app/controllers/users_controller.rb
684
575
  - app/helpers/actions_helper.rb
@@ -687,12 +578,14 @@ files:
687
578
  - app/helpers/email_helper.rb
688
579
  - app/helpers/emoji_helper.rb
689
580
  - app/helpers/exposure_helper.rb
581
+ - app/helpers/layout_helper.rb
690
582
  - app/helpers/markdown_helper.rb
691
583
  - app/helpers/navigation_helper.rb
692
584
  - app/helpers/oembed_helper.rb
693
585
  - app/helpers/project_helper.rb
694
586
  - app/helpers/score_card_helper.rb
695
587
  - app/helpers/url_helper.rb
588
+ - app/helpers/view_extensions_helper.rb
696
589
  - app/mailers/.keep
697
590
  - app/mailers/view_mailer.rb
698
591
  - app/models/.keep
@@ -701,18 +594,13 @@ files:
701
594
  - app/models/authorization.rb
702
595
  - app/models/concerns/.keep
703
596
  - app/models/error.rb
597
+ - app/models/follow.rb
704
598
  - app/models/measurement.rb
705
- - app/models/oauth/provider.rb
706
599
  - app/models/persistent_trigger.rb
707
600
  - app/models/project.rb
708
- - app/models/role.rb
709
- - app/models/setting.rb
710
- - app/models/settings.rb
711
- - app/models/slackdown.rb
712
601
  - app/models/team.rb
713
602
  - app/models/team_user.rb
714
603
  - app/models/user.rb
715
- - app/models/user_credentials.rb
716
604
  - app/presenters/measurements_presenter.rb
717
605
  - app/presenters/one_or_many.rb
718
606
  - app/presenters/project_presenter.rb
@@ -720,11 +608,13 @@ files:
720
608
  - app/views/actions/index.html.erb
721
609
  - app/views/actions/running.html.erb
722
610
  - app/views/actions/show.html.erb
611
+ - app/views/actions/unqueued.html.erb
723
612
  - app/views/authorizations/_form.html.erb
724
613
  - app/views/authorizations/edit.html.erb
725
614
  - app/views/authorizations/granted.html.erb
726
615
  - app/views/authorizations/index.html.erb
727
616
  - app/views/authorizations/new.html.erb
617
+ - app/views/authorizations/oauth2_callback.html.erb
728
618
  - app/views/configuration_error/_invalid_repo.html.erb
729
619
  - app/views/configuration_error/_no_version_control.html.erb
730
620
  - app/views/devise/_links.erb
@@ -741,22 +631,13 @@ files:
741
631
  - app/views/devise/registrations/new.html.erb
742
632
  - app/views/devise/sessions/new.html.erb
743
633
  - app/views/devise/unlocks/new.html.erb
744
- - app/views/errors/_actions.html.erb
745
634
  - app/views/errors/index.html.erb
746
635
  - app/views/home/index.html.erb
747
636
  - app/views/layouts/_mobile_navigation.html.erb
748
637
  - app/views/layouts/_navigation.html.erb
749
- - app/views/layouts/_tester_bar.html.erb
750
638
  - app/views/layouts/application.html.erb
751
639
  - app/views/layouts/dashboard.html.erb
752
640
  - app/views/layouts/email.html.erb
753
- - app/views/layouts/minimal.html.erb
754
- - app/views/layouts/naked.html.erb
755
- - app/views/layouts/naked_dashboard.html.erb
756
- - app/views/oauth/providers/_form.html.erb
757
- - app/views/oauth/providers/edit.html.erb
758
- - app/views/oauth/providers/index.html.erb
759
- - app/views/oauth/providers/new.html.erb
760
641
  - app/views/projects/_form.html.erb
761
642
  - app/views/projects/_header.html.erb
762
643
  - app/views/projects/_keyboard_shortcuts.html.erb
@@ -787,7 +668,6 @@ files:
787
668
  - config/environments/production.rb
788
669
  - config/environments/test.rb
789
670
  - config/initializers/action_view_field_error_proc.rb
790
- - config/initializers/add_navigation_renderers.rb
791
671
  - config/initializers/application_controller_renderer.rb
792
672
  - config/initializers/assets.rb
793
673
  - config/initializers/backtrace_silencers.rb
@@ -808,7 +688,6 @@ files:
808
688
  - config/initializers/requirements.rb
809
689
  - config/initializers/secret_token.rb
810
690
  - config/initializers/session_store.rb
811
- - config/initializers/vestal_versions.rb
812
691
  - config/initializers/wrap_parameters.rb
813
692
  - config/locales/devise.en.yml
814
693
  - config/locales/devise_invitable.en.yml
@@ -854,7 +733,6 @@ files:
854
733
  - db/migrate/20130504014802_add_extended_attributes_to_projects.rb
855
734
  - db/migrate/20130518224406_drop_projects_maintainers.rb
856
735
  - db/migrate/20130518224722_remove_pre_adapter_fields_from_projects.rb
857
- - db/migrate/20130519163615_create_user_credentials.rb
858
736
  - db/migrate/20130706141443_drop_deprecated_project_roles.rb
859
737
  - db/migrate/20130728191005_add_retired_at_to_users.rb
860
738
  - db/migrate/20130914155044_add_code_climate_repo_token_to_projects.rb
@@ -907,6 +785,20 @@ files:
907
785
  - db/migrate/20170116002818_drop_releases_tickets_and_releases_tasks.rb
908
786
  - db/migrate/20170116210225_move_adapter_names_to_props2.rb
909
787
  - db/migrate/20170118005958_remove_antecedents_from_versions_of_tickets.rb
788
+ - db/migrate/20170130011016_drop_users_environments_subscribed_to.rb
789
+ - db/migrate/20170205004452_drop_settings.rb
790
+ - db/migrate/20170206002030_drop_extension_hstore.rb
791
+ - db/migrate/20170206002732_drop_legacy_columns_from_users.rb
792
+ - db/migrate/20170209022159_rename_projects_color_to_color_name.rb
793
+ - db/migrate/20170213001453_change_providers_from_models_to_extensions.rb
794
+ - db/migrate/20170215012012_add_props_to_authorizations.rb
795
+ - db/migrate/20170216041034_add_user_to_persistent_triggers.rb
796
+ - db/migrate/20170226201504_create_follows.rb
797
+ - db/migrate/20170301014051_drop_name_from_authorizations.rb
798
+ - db/migrate/20170307032041_add_created_at_to_actions.rb
799
+ - db/migrate/20170307035755_allow_actions_started_at_to_be_null.rb
800
+ - db/migrate/20170310024505_replace_authorizations_provider_name_with_type.rb
801
+ - db/migrate/20170329030329_drop_consumer_tokens.rb
910
802
  - db/seeds.rb
911
803
  - db/structure.sql
912
804
  - houston-core.gemspec
@@ -922,15 +814,24 @@ files:
922
814
  - lib/houston/application.rb
923
815
  - lib/houston/boot.rb
924
816
  - lib/houston/boot/actions.rb
925
- - lib/houston/boot/active_record_serializer.rb
926
817
  - lib/houston/boot/configuration.rb
927
818
  - lib/houston/boot/daemonize.rb
928
- - lib/houston/boot/events.rb
929
819
  - lib/houston/boot/extensions.rb
820
+ - lib/houston/boot/extensions/deprecated.rb
821
+ - lib/houston/boot/extensions/dsl.rb
822
+ - lib/houston/boot/extensions/events.rb
823
+ - lib/houston/boot/extensions/features.rb
824
+ - lib/houston/boot/extensions/layout.rb
825
+ - lib/houston/boot/extensions/navigation.rb
826
+ - lib/houston/boot/extensions/oauth.rb
827
+ - lib/houston/boot/extensions/serializers.rb
828
+ - lib/houston/boot/extensions/view.rb
930
829
  - lib/houston/boot/observer.rb
931
- - lib/houston/boot/readonly_hash_serializer.rb
830
+ - lib/houston/boot/provider.rb
932
831
  - lib/houston/boot/running_as.rb
933
832
  - lib/houston/boot/serializer.rb
833
+ - lib/houston/boot/serializers/active_record_serializer.rb
834
+ - lib/houston/boot/serializers/readonly_hash_serializer.rb
934
835
  - lib/houston/boot/timer.rb
935
836
  - lib/houston/boot/triggers.rb
936
837
  - lib/houston/cli.rb
@@ -943,7 +844,6 @@ files:
943
844
  - lib/tasks/.keep
944
845
  - lib/tasks/actions.rake
945
846
  - lib/tasks/events.rake
946
- - lib/tasks/keypair.rake
947
847
  - lib/tasks/specific_tests.rake
948
848
  - lib/unexpected_response.rb
949
849
  - log/.keep
@@ -1028,7 +928,9 @@ files:
1028
928
  - templates/new-module/test/test_helper.rb
1029
929
  - templates/new-module/test/unit/fixtures_test.rb
1030
930
  - test/acceptance/.keep
931
+ - test/acceptance/layout_test.rb
1031
932
  - test/acceptance/rejecting_malformed_requests_test.rb
933
+ - test/acceptance/updating_props_test.rb
1032
934
  - test/factories/project_factory.rb
1033
935
  - test/factories/ticket_factory.rb
1034
936
  - test/factories/user_factory.rb
@@ -1049,12 +951,20 @@ files:
1049
951
  - test/unit/controllers/project_options_controller_test.rb
1050
952
  - test/unit/controllers/user_options_controller_test.rb
1051
953
  - test/unit/controllers/users_controller_test.rb
954
+ - test/unit/extensions/events_extension_test.rb
955
+ - test/unit/extensions/layout_extension_test.rb
956
+ - test/unit/extensions/navigation_extension_test.rb
957
+ - test/unit/extensions/oauth_extension_test.rb
958
+ - test/unit/extensions/project_features_extension_test.rb
959
+ - test/unit/extensions/serializers_extension_test.rb
960
+ - test/unit/extensions/view_extension_test.rb
1052
961
  - test/unit/models/actions_test.rb
1053
962
  - test/unit/models/configuration_test.rb
1054
963
  - test/unit/models/observer_test.rb
1055
964
  - test/unit/models/persistent_trigger_test.rb
1056
965
  - test/unit/models/props_test.rb
1057
966
  - test/unit/models/serializer_test.rb
967
+ - test/unit/models/timer_test.rb
1058
968
  - test/unit/models/triggers_test.rb
1059
969
  - test/unit/models/user_test.rb
1060
970
  - tmp/.keep
@@ -1101,7 +1011,6 @@ files:
1101
1011
  - vendor/assets/javascripts/jquery-ui-1.10.1/jquery.ui.widget.js
1102
1012
  - vendor/assets/javascripts/jquery-ui.js
1103
1013
  - vendor/assets/javascripts/jquery.autosize.js
1104
- - vendor/assets/javascripts/jquery.pjax.js
1105
1014
  - vendor/assets/javascripts/jquery.tablesorter.js
1106
1015
  - vendor/assets/javascripts/jquery.timeago.js
1107
1016
  - vendor/assets/javascripts/md5.js
@@ -1143,9 +1052,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
1143
1052
  version: '0'
1144
1053
  required_rubygems_version: !ruby/object:Gem::Requirement
1145
1054
  requirements:
1146
- - - ">="
1055
+ - - ">"
1147
1056
  - !ruby/object:Gem::Version
1148
- version: '0'
1057
+ version: 1.3.1
1149
1058
  requirements: []
1150
1059
  rubyforge_project:
1151
1060
  rubygems_version: 2.5.1
@@ -1154,7 +1063,9 @@ specification_version: 4
1154
1063
  summary: Mission Control for your projects and teams
1155
1064
  test_files:
1156
1065
  - test/acceptance/.keep
1066
+ - test/acceptance/layout_test.rb
1157
1067
  - test/acceptance/rejecting_malformed_requests_test.rb
1068
+ - test/acceptance/updating_props_test.rb
1158
1069
  - test/factories/project_factory.rb
1159
1070
  - test/factories/ticket_factory.rb
1160
1071
  - test/factories/user_factory.rb
@@ -1175,11 +1086,19 @@ test_files:
1175
1086
  - test/unit/controllers/project_options_controller_test.rb
1176
1087
  - test/unit/controllers/user_options_controller_test.rb
1177
1088
  - test/unit/controllers/users_controller_test.rb
1089
+ - test/unit/extensions/events_extension_test.rb
1090
+ - test/unit/extensions/layout_extension_test.rb
1091
+ - test/unit/extensions/navigation_extension_test.rb
1092
+ - test/unit/extensions/oauth_extension_test.rb
1093
+ - test/unit/extensions/project_features_extension_test.rb
1094
+ - test/unit/extensions/serializers_extension_test.rb
1095
+ - test/unit/extensions/view_extension_test.rb
1178
1096
  - test/unit/models/actions_test.rb
1179
1097
  - test/unit/models/configuration_test.rb
1180
1098
  - test/unit/models/observer_test.rb
1181
1099
  - test/unit/models/persistent_trigger_test.rb
1182
1100
  - test/unit/models/props_test.rb
1183
1101
  - test/unit/models/serializer_test.rb
1102
+ - test/unit/models/timer_test.rb
1184
1103
  - test/unit/models/triggers_test.rb
1185
1104
  - test/unit/models/user_test.rb