disco_app 0.15.0 → 0.16.1.pre.sidekiq.pre.6.pre.release

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/app/.DS_Store +0 -0
  3. data/app/clients/disco_app/graphql_client.rb +85 -0
  4. data/app/controllers/disco_app/flow/actions_controller.rb +7 -0
  5. data/app/controllers/disco_app/flow/concerns/actions_controller.rb +47 -0
  6. data/app/jobs/disco_app/flow/process_action_job.rb +11 -0
  7. data/app/jobs/disco_app/flow/process_trigger_job.rb +11 -0
  8. data/app/jobs/disco_app/shop_job.rb +8 -9
  9. data/app/models/disco_app/concerns/renders_assets.rb +1 -1
  10. data/app/models/disco_app/concerns/shop.rb +4 -5
  11. data/app/models/disco_app/flow/action.rb +7 -0
  12. data/app/models/disco_app/flow/concerns/action.rb +24 -0
  13. data/app/models/disco_app/flow/concerns/trigger.rb +24 -0
  14. data/app/models/disco_app/flow/trigger.rb +7 -0
  15. data/app/services/disco_app/flow/create_action.rb +35 -0
  16. data/app/services/disco_app/flow/create_trigger.rb +34 -0
  17. data/app/services/disco_app/flow/process_action.rb +50 -0
  18. data/app/services/disco_app/flow/process_trigger.rb +52 -0
  19. data/config/routes.rb +7 -1
  20. data/db/migrate/20150525000000_create_shops_if_not_existent.rb +80 -80
  21. data/db/migrate/20170315062548_create_disco_app_sources.rb +2 -0
  22. data/db/migrate/20170315062629_add_sources_to_shop_subscriptions.rb +2 -0
  23. data/db/migrate/20170327214540_create_disco_app_users.rb +2 -1
  24. data/db/migrate/20170606160751_fix_disco_app_users_index.rb +2 -0
  25. data/db/migrate/20181229100327_create_flow_actions_and_triggers.rb +32 -0
  26. data/lib/.DS_Store +0 -0
  27. data/lib/disco_app/configuration.rb +4 -0
  28. data/lib/disco_app/version.rb +1 -1
  29. data/lib/generators/disco_app/disco_app_generator.rb +24 -8
  30. data/lib/generators/disco_app/templates/config/appsignal.yml +12 -0
  31. data/lib/generators/disco_app/templates/config/cable.yml.tt +11 -0
  32. data/lib/generators/disco_app/templates/config/database.yml.tt +6 -3
  33. data/lib/generators/disco_app/templates/config/environments/staging.rb +108 -0
  34. data/lib/generators/disco_app/templates/config/newrelic.yml +3 -0
  35. data/lib/generators/disco_app/templates/controllers/home_controller.rb +1 -0
  36. data/lib/generators/disco_app/templates/initializers/session_store.rb +1 -1
  37. data/lib/generators/disco_app/templates/root/.env +3 -0
  38. data/{.github → lib/generators/disco_app/templates/root/.github}/PULL_REQUEST_TEMPLATE.md +1 -1
  39. data/lib/generators/disco_app/templates/root/.rubocop.yml +223 -158
  40. data/test/dummy/config/database.yml +3 -0
  41. data/test/dummy/config/environments/staging.rb +85 -0
  42. data/test/dummy/config/secrets.yml +3 -0
  43. data/test/dummy/db/schema.rb +39 -11
  44. data/test/dummy/log/test.log +0 -0
  45. data/test/services/disco_app/flow/create_action_test.rb +51 -0
  46. data/test/services/disco_app/flow/create_trigger_test.rb +56 -0
  47. data/test/services/disco_app/flow/process_action_test.rb +68 -0
  48. data/test/services/disco_app/flow/process_trigger_test.rb +61 -0
  49. data/test/vcr/flow_trigger_invalid_title.yml +35 -0
  50. data/test/vcr/flow_trigger_valid.yml +38 -0
  51. metadata +194 -135
  52. data/app/clients/disco_app/rollbar_client.rb +0 -53
  53. data/app/clients/disco_app/rollbar_client_error.rb +0 -2
  54. data/lib/generators/disco_app/templates/initializers/rollbar.rb +0 -23
  55. data/lib/tasks/rollbar.rake +0 -24
@@ -6,105 +6,105 @@ class CreateShopsIfNotExistent < ActiveRecord::Migration[5.1]
6
6
  def change
7
7
  return if table_exists? :disco_app_shops
8
8
 
9
- create_table "disco_app_app_settings", force: :cascade do |t|
10
- t.datetime "created_at", null: false
11
- t.datetime "updated_at", null: false
9
+ create_table :disco_app_app_settings, force: :cascade do |t|
10
+ t.datetime :created_at, null: false
11
+ t.datetime :updated_at, null: false
12
12
  end
13
13
 
14
- create_table "disco_app_application_charges", force: :cascade do |t|
15
- t.integer "shop_id", limit: 8
16
- t.integer "subscription_id", limit: 8
17
- t.integer "status", default: 0
18
- t.datetime "created_at", null: false
19
- t.datetime "updated_at", null: false
20
- t.integer "shopify_id", limit: 8
21
- t.string "confirmation_url"
14
+ create_table :disco_app_application_charges, force: :cascade do |t|
15
+ t.integer :shop_id, limit: 8
16
+ t.integer :subscription_id, limit: 8
17
+ t.integer :status, default: 0
18
+ t.datetime :created_at, null: false
19
+ t.datetime :updated_at, null: false
20
+ t.integer :shopify_id, limit: 8
21
+ t.string :confirmation_url
22
22
  end
23
23
 
24
- create_table "disco_app_plan_codes", force: :cascade do |t|
25
- t.integer "plan_id", limit: 8
26
- t.string "code"
27
- t.integer "trial_period_days"
28
- t.integer "amount"
29
- t.datetime "created_at", null: false
30
- t.datetime "updated_at", null: false
31
- t.integer "status", default: 0
24
+ create_table :disco_app_plan_codes, force: :cascade do |t|
25
+ t.integer :plan_id, limit: 8
26
+ t.string :code
27
+ t.integer :trial_period_days
28
+ t.integer :amount
29
+ t.datetime :created_at, null: false
30
+ t.datetime :updated_at, null: false
31
+ t.integer :status, default: 0
32
32
  end
33
33
 
34
- create_table "disco_app_plans", force: :cascade do |t|
35
- t.integer "status", default: 0
36
- t.string "name"
37
- t.integer "plan_type", default: 0
38
- t.integer "trial_period_days"
39
- t.datetime "created_at", null: false
40
- t.datetime "updated_at", null: false
41
- t.integer "amount", default: 0
42
- t.string "currency", default: "USD"
43
- t.integer "interval", default: 0
44
- t.integer "interval_count", default: 1
34
+ create_table :disco_app_plans, force: :cascade do |t|
35
+ t.integer :status, default: 0
36
+ t.string :name
37
+ t.integer :plan_type, default: 0
38
+ t.integer :trial_period_days
39
+ t.datetime :created_at, null: false
40
+ t.datetime :updated_at, null: false
41
+ t.integer :amount, default: 0
42
+ t.string :currency, default: 'USD'
43
+ t.integer :interval, default: 0
44
+ t.integer :interval_count, default: 1
45
45
  end
46
46
 
47
- create_table "disco_app_recurring_application_charges", force: :cascade do |t|
48
- t.integer "shop_id", limit: 8
49
- t.integer "subscription_id", limit: 8
50
- t.integer "status", default: 0
51
- t.datetime "created_at", null: false
52
- t.datetime "updated_at", null: false
53
- t.integer "shopify_id", limit: 8
54
- t.string "confirmation_url"
47
+ create_table :disco_app_recurring_application_charges, force: :cascade do |t|
48
+ t.integer :shop_id, limit: 8
49
+ t.integer :subscription_id, limit: 8
50
+ t.integer :status, default: 0
51
+ t.datetime :created_at, null: false
52
+ t.datetime :updated_at, null: false
53
+ t.integer :shopify_id, limit: 8
54
+ t.string :confirmation_url
55
55
  end
56
56
 
57
- create_table "disco_app_sessions", force: :cascade do |t|
58
- t.string "session_id", null: false
59
- t.text "data"
60
- t.datetime "created_at", null: false
61
- t.datetime "updated_at", null: false
62
- t.integer "shop_id"
57
+ create_table :disco_app_sessions, force: :cascade do |t|
58
+ t.string :session_id, null: false
59
+ t.text :data
60
+ t.datetime :created_at, null: false
61
+ t.datetime :updated_at, null: false
62
+ t.integer :shop_id
63
63
  end
64
64
 
65
- add_index "disco_app_sessions", ["session_id"], name: "index_disco_app_sessions_on_session_id", unique: true, using: :btree
66
- add_index "disco_app_sessions", ["updated_at"], name: "index_disco_app_sessions_on_updated_at", using: :btree
65
+ add_index :disco_app_sessions, [:session_id], name: 'index_disco_app_sessions_on_session_id', unique: true, using: :btree
66
+ add_index :disco_app_sessions, [:updated_at], name: 'index_disco_app_sessions_on_updated_at', using: :btree
67
67
 
68
- create_table "disco_app_shops", force: :cascade do |t|
69
- t.string "shopify_domain", null: false
70
- t.string "shopify_token", null: false
71
- t.datetime "created_at", null: false
72
- t.datetime "updated_at", null: false
73
- t.integer "status", default: 0
74
- t.string "domain"
75
- t.string "plan_name"
76
- t.string "name"
77
- t.jsonb "data", default: {}
68
+ create_table :disco_app_shops, force: :cascade do |t|
69
+ t.string :shopify_domain, null: false
70
+ t.string :shopify_token, null: false
71
+ t.datetime :created_at, null: false
72
+ t.datetime :updated_at, null: false
73
+ t.integer :status, default: 0
74
+ t.string :domain
75
+ t.string :plan_name
76
+ t.string :name
77
+ t.jsonb :data, default: {}
78
78
  end
79
79
 
80
- add_index "disco_app_shops", ["shopify_domain"], name: "index_disco_app_shops_on_shopify_domain", unique: true, using: :btree
80
+ add_index :disco_app_shops, [:shopify_domain], name: 'index_disco_app_shops_on_shopify_domain', unique: true, using: :btree
81
81
 
82
- create_table "disco_app_subscriptions", force: :cascade do |t|
83
- t.integer "shop_id"
84
- t.integer "plan_id"
85
- t.integer "status"
86
- t.integer "subscription_type"
87
- t.datetime "created_at", null: false
88
- t.datetime "updated_at", null: false
89
- t.datetime "trial_start_at"
90
- t.datetime "trial_end_at"
91
- t.datetime "cancelled_at"
92
- t.integer "amount", default: 0
93
- t.integer "plan_code_id", limit: 8
94
- t.string "source"
95
- t.integer "trial_period_days"
82
+ create_table :disco_app_subscriptions, force: :cascade do |t|
83
+ t.integer :shop_id
84
+ t.integer :plan_id
85
+ t.integer :status
86
+ t.integer :subscription_type
87
+ t.datetime :created_at, null: false
88
+ t.datetime :updated_at, null: false
89
+ t.datetime :trial_start_at
90
+ t.datetime :trial_end_at
91
+ t.datetime :cancelled_at
92
+ t.integer :amount, default: 0
93
+ t.integer :plan_code_id, limit: 8
94
+ t.string :source
95
+ t.integer :trial_period_days
96
96
  end
97
97
 
98
- add_index "disco_app_subscriptions", ["plan_id"], name: "index_disco_app_subscriptions_on_plan_id", using: :btree
99
- add_index "disco_app_subscriptions", ["shop_id"], name: "index_disco_app_subscriptions_on_shop_id", using: :btree
98
+ add_index :disco_app_subscriptions, [:plan_id], name: 'index_disco_app_subscriptions_on_plan_id', using: :btree
99
+ add_index :disco_app_subscriptions, [:shop_id], name: 'index_disco_app_subscriptions_on_shop_id', using: :btree
100
100
 
101
- add_foreign_key "disco_app_application_charges", "disco_app_shops", column: "shop_id"
102
- add_foreign_key "disco_app_application_charges", "disco_app_subscriptions", column: "subscription_id"
103
- add_foreign_key "disco_app_plan_codes", "disco_app_plans", column: "plan_id"
104
- add_foreign_key "disco_app_recurring_application_charges", "disco_app_shops", column: "shop_id"
105
- add_foreign_key "disco_app_recurring_application_charges", "disco_app_subscriptions", column: "subscription_id"
106
- add_foreign_key "disco_app_sessions", "disco_app_shops", column: "shop_id", on_delete: :cascade
107
- add_foreign_key "disco_app_subscriptions", "disco_app_plan_codes", column: "plan_code_id"
101
+ add_foreign_key :disco_app_application_charges, :disco_app_shops, column: :shop_id
102
+ add_foreign_key :disco_app_application_charges, :disco_app_subscriptions, column: :subscription_id
103
+ add_foreign_key :disco_app_plan_codes, :disco_app_plans, column: :plan_id
104
+ add_foreign_key :disco_app_recurring_application_charges, :disco_app_shops, column: :shop_id
105
+ add_foreign_key :disco_app_recurring_application_charges, :disco_app_subscriptions, column: :subscription_id
106
+ add_foreign_key :disco_app_sessions, :disco_app_shops, column: :shop_id, on_delete: :cascade
107
+ add_foreign_key :disco_app_subscriptions, :disco_app_plan_codes, column: :plan_code_id
108
108
  end
109
109
 
110
110
  end
@@ -1,4 +1,5 @@
1
1
  class CreateDiscoAppSources < ActiveRecord::Migration[5.1]
2
+
2
3
  def change
3
4
  create_table :disco_app_sources do |t|
4
5
  t.string :source, null: true
@@ -7,4 +8,5 @@ class CreateDiscoAppSources < ActiveRecord::Migration[5.1]
7
8
  end
8
9
  add_index :disco_app_sources, :source
9
10
  end
11
+
10
12
  end
@@ -1,4 +1,5 @@
1
1
  class AddSourcesToShopSubscriptions < ActiveRecord::Migration[5.1]
2
+
2
3
  def change
3
4
  add_column :disco_app_subscriptions, :source_id, :integer, limit: 8, index: true
4
5
  add_foreign_key :disco_app_subscriptions, :disco_app_sources, column: :source_id
@@ -11,4 +12,5 @@ class AddSourcesToShopSubscriptions < ActiveRecord::Migration[5.1]
11
12
 
12
13
  remove_column :disco_app_subscriptions, :source
13
14
  end
15
+
14
16
  end
@@ -1,13 +1,14 @@
1
1
  class CreateDiscoAppUsers < ActiveRecord::Migration[5.1]
2
+
2
3
  def change
3
4
  create_table :disco_app_users do |t|
4
5
  t.integer :shop_id, limit: 8
5
6
  t.string :first_name
6
7
  t.string :last_name
7
8
  t.string :email
8
-
9
9
  t.timestamps null: false
10
10
  end
11
11
  add_index :disco_app_users, :shop_id, unique: true
12
12
  end
13
+
13
14
  end
@@ -1,6 +1,8 @@
1
1
  class FixDiscoAppUsersIndex < ActiveRecord::Migration[5.1]
2
+
2
3
  def change
3
4
  remove_index :disco_app_users, :shop_id
4
5
  add_index :disco_app_users, [:id, :shop_id], unique: true
5
6
  end
7
+
6
8
  end
@@ -0,0 +1,32 @@
1
+ class CreateFlowActionsAndTriggers < ActiveRecord::Migration[5.2]
2
+
3
+ def change
4
+ create_table :disco_app_flow_actions do |t|
5
+ t.integer :shop_id, limit: 8
6
+ t.string :action_id
7
+ t.string :action_run_id
8
+ t.jsonb :properties, default: {}
9
+ t.integer :status, default: 0
10
+ t.datetime :processed_at, null: true
11
+ t.jsonb :processing_errors, default: []
12
+ t.timestamps null: false
13
+ end
14
+
15
+ create_table :disco_app_flow_triggers do |t|
16
+ t.integer :shop_id, limit: 8
17
+ t.string :title
18
+ t.string :resource_name
19
+ t.string :resource_url
20
+ t.jsonb :properties, default: {}
21
+ t.integer :status, default: 0
22
+ t.datetime :processed_at, null: true
23
+ t.jsonb :processing_errors, default: []
24
+ t.timestamps null: false
25
+ end
26
+
27
+ add_foreign_key :disco_app_flow_actions, :disco_app_shops, column: :shop_id, on_delete: :cascade
28
+ add_foreign_key :disco_app_flow_triggers, :disco_app_shops, column: :shop_id, on_delete: :cascade
29
+ add_index :disco_app_flow_actions, :action_run_id, unique: true
30
+ end
31
+
32
+ end
data/lib/.DS_Store ADDED
Binary file
@@ -8,6 +8,10 @@ module DiscoApp
8
8
  # Set the list of Shopify webhook topics to register.
9
9
  attr_accessor :webhook_topics
10
10
 
11
+ # Set Flow configuration
12
+ attr_accessor :flow_actions
13
+ attr_accessor :flow_triggers
14
+
11
15
  # Set the below if using an application proxy.
12
16
  attr_accessor :app_proxy_prefix
13
17
 
@@ -1,3 +1,3 @@
1
1
  module DiscoApp
2
- VERSION = '0.15.0'
2
+ VERSION = '0.16.1-sidekiq-6-release'
3
3
  end
@@ -31,6 +31,7 @@ class DiscoAppGenerator < Rails::Generators::Base
31
31
 
32
32
  # Add gem requirements.
33
33
  gem 'active_link_to'
34
+ gem 'activeresource'
34
35
  gem 'acts_as_singleton'
35
36
  gem 'classnames-rails'
36
37
  gem 'newrelic_rpm'
@@ -40,13 +41,12 @@ class DiscoAppGenerator < Rails::Generators::Base
40
41
  gem 'premailer-rails'
41
42
  gem 'react-rails'
42
43
  gem 'render_anywhere'
43
- gem 'rollbar'
44
+ gem 'appsignal'
44
45
  gem 'shopify_app'
45
46
  gem 'sidekiq'
46
- gem 'activeresource'
47
47
 
48
- # Indicate which gems should only be used in production.
49
- gem_group :production do
48
+ # Indicate which gems should only be used in staging and production.
49
+ gem_group :staging, :production do
50
50
  gem 'mailgun_rails'
51
51
  gem 'rails_12factor'
52
52
  end
@@ -54,9 +54,9 @@ class DiscoAppGenerator < Rails::Generators::Base
54
54
  # Indicate which gems should only be used in development and test.
55
55
  gem_group :development, :test do
56
56
  gem 'dotenv-rails'
57
+ gem 'mechanize'
57
58
  gem 'minitest-reporters'
58
59
  gem 'webmock'
59
- gem 'mechanize'
60
60
  end
61
61
  end
62
62
 
@@ -65,6 +65,10 @@ class DiscoAppGenerator < Rails::Generators::Base
65
65
  template 'config/database.yml.tt'
66
66
  end
67
67
 
68
+ def update_cable_config
69
+ template 'config/cable.yml.tt'
70
+ end
71
+
68
72
  # Run bundle install to add our new gems before running tasks.
69
73
  def bundle_install
70
74
  Bundler.with_clean_env do
@@ -72,6 +76,10 @@ class DiscoAppGenerator < Rails::Generators::Base
72
76
  end
73
77
  end
74
78
 
79
+ def support_staging_environment
80
+ copy_file 'config/environments/staging.rb', 'config/environments/staging.rb'
81
+ end
82
+
75
83
  # Make any required adjustments to the application configuration.
76
84
  def configure_application
77
85
  # The force_ssl flag is commented by default for production.
@@ -109,15 +117,23 @@ class DiscoAppGenerator < Rails::Generators::Base
109
117
  application "config.active_job.queue_adapter = :sidekiq\n", env: :production
110
118
  application "# Use Sidekiq as the active job backend", env: :production
111
119
 
120
+ # Set Sidekiq as the queue adapter in staging.
121
+ application "config.active_job.queue_adapter = :sidekiq\n", env: :staging
122
+ application "# Use Sidekiq as the active job backend", env: :staging
123
+
112
124
  # Ensure the application configuration uses the DEFAULT_HOST environment
113
125
  # variable to set up support for reverse routing absolute URLS (needed when
114
126
  # generating Webhook URLs for example).
115
127
  application "routes.default_url_options[:host] = ENV['DEFAULT_HOST']\n"
116
128
  application "# Set the default host for absolute URL routing purposes"
117
129
 
118
- # Configure React in development and production.
130
+ # Configure React in development, staging, and production.
119
131
  application "config.react.variant = :development", env: :development
120
132
  application "# Use development variant of React in development.", env: :development
133
+
134
+ application "config.react.variant = :production", env: :staging
135
+ application "# Use production variant of React in staging.", env: :staging
136
+
121
137
  application "config.react.variant = :production", env: :production
122
138
  application "# Use production variant of React in production.", env: :production
123
139
 
@@ -137,13 +153,13 @@ class DiscoAppGenerator < Rails::Generators::Base
137
153
  end
138
154
  CONFIG
139
155
  application configuration, env: :production
156
+ application configuration, env: :staging
140
157
 
141
158
  # Monitoring configuration
142
- copy_file 'initializers/rollbar.rb', 'config/initializers/rollbar.rb'
159
+ copy_file 'config/appsignal.yml', 'config/appsignal.yml'
143
160
  copy_file 'config/newrelic.yml', 'config/newrelic.yml'
144
161
  end
145
162
 
146
-
147
163
  # Add entries to .env and .env.local
148
164
  def add_env_variables
149
165
  configuration = <<-CONFIG.strip_heredoc
@@ -0,0 +1,12 @@
1
+ default: &defaults
2
+ name: <%= ENV['SHOPIFY_APP_NAME'] || 'Unknown App' %>
3
+ push_api_key: <%= ENV['APPSIGNAL_PUSH_API_KEY'] %>
4
+ development:
5
+ <<: *defaults
6
+ active: false
7
+ staging:
8
+ <<: *defaults
9
+ active: true
10
+ production:
11
+ <<: *defaults
12
+ active: true
@@ -0,0 +1,11 @@
1
+ development:
2
+ adapter: async
3
+
4
+ test:
5
+ adapter: async
6
+
7
+ staging:
8
+ adapter: async
9
+
10
+ production:
11
+ adapter: async
@@ -4,18 +4,21 @@ default: &default
4
4
  pool: 5
5
5
  timeout: 5000
6
6
  prepared_statements: false
7
-
7
+
8
8
  development:
9
9
  <<: *default
10
10
  host: localhost
11
11
  port: 5432
12
12
  database: <%= Rails.application.class.parent_name.downcase %>
13
-
13
+
14
14
  test:
15
15
  <<: *default
16
16
  host: localhost
17
17
  port: 5432
18
18
  database: <%= Rails.application.class.parent_name.downcase %>_test
19
-
19
+
20
+ staging:
21
+ <<: *default
22
+
20
23
  production:
21
24
  <<: *default
@@ -0,0 +1,108 @@
1
+ Rails.application.configure do
2
+ # Configure ActionMailer to use MailGun
3
+ if ENV['MAILGUN_API_KEY']
4
+ config.action_mailer.delivery_method = :mailgun
5
+ config.action_mailer.mailgun_settings = {
6
+ api_key: ENV['MAILGUN_API_KEY'],
7
+ domain: ENV['MAILGUN_API_DOMAIN']
8
+ }
9
+ end
10
+
11
+ # Use production variant of React in staging.
12
+ config.react.variant = :production
13
+ # Use Sidekiq as the active job backend
14
+ config.active_job.queue_adapter = :sidekiq
15
+
16
+ # Allow real charges in production with an ENV variable
17
+ config.x.shopify_charges_real = false
18
+
19
+ # Settings specified here will take precedence over those in config/application.rb.
20
+
21
+ # Code is not reloaded between requests.
22
+ config.cache_classes = true
23
+
24
+ # Eager load code on boot. This eager loads most of Rails and
25
+ # your application in memory, allowing both threaded web servers
26
+ # and those relying on copy on write to perform better.
27
+ # Rake tasks automatically ignore this option for performance.
28
+ config.eager_load = true
29
+
30
+ # Full error reports are disabled and caching is turned on.
31
+ config.consider_all_requests_local = false
32
+ config.action_controller.perform_caching = true
33
+
34
+ # Attempt to read encrypted secrets from `config/secrets.yml.enc`.
35
+ # Requires an encryption key in `ENV["RAILS_MASTER_KEY"]` or
36
+ # `config/secrets.yml.key`.
37
+ config.read_encrypted_secrets = true
38
+
39
+ # Disable serving static files from the `/public` folder by default since
40
+ # Apache or NGINX already handles this.
41
+ config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
42
+
43
+ # Compress JavaScripts and CSS.
44
+ config.assets.js_compressor = :uglifier
45
+ # config.assets.css_compressor = :sass
46
+
47
+ # Do not fallback to assets pipeline if a precompiled asset is missed.
48
+ config.assets.compile = false
49
+
50
+ # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
51
+
52
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server.
53
+ # config.action_controller.asset_host = 'http://assets.example.com'
54
+
55
+ # Specifies the header that your server uses for sending files.
56
+ # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
57
+ # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
58
+
59
+ # Mount Action Cable outside main process or domain
60
+ # config.action_cable.mount_path = nil
61
+ # config.action_cable.url = 'wss://example.com/cable'
62
+ # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
63
+
64
+ # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
65
+ config.force_ssl = true
66
+
67
+ # Use the lowest log level to ensure availability of diagnostic information
68
+ # when problems arise.
69
+ config.log_level = :debug
70
+
71
+ # Prepend all log lines with the following tags.
72
+ config.log_tags = [:request_id]
73
+
74
+ # Use a different cache store in staging.
75
+ # config.cache_store = :mem_cache_store
76
+
77
+ # Use a real queuing backend for Active Job (and separate queues per environment)
78
+ # config.active_job.queue_adapter = :resque
79
+ # config.active_job.queue_name_prefix = "example_app_#{Rails.env}"
80
+ config.action_mailer.perform_caching = false
81
+
82
+ # Ignore bad email addresses and do not raise email delivery errors.
83
+ # Set this to true and configure the email server for immediate delivery to raise delivery errors.
84
+ # config.action_mailer.raise_delivery_errors = false
85
+
86
+ # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
87
+ # the I18n.default_locale when a translation cannot be found).
88
+ config.i18n.fallbacks = true
89
+
90
+ # Send deprecation notices to registered listeners.
91
+ config.active_support.deprecation = :notify
92
+
93
+ # Use default logging formatter so that PID and timestamp are not suppressed.
94
+ config.log_formatter = ::Logger::Formatter.new
95
+
96
+ # Use a different logger for distributed setups.
97
+ # require 'syslog/logger'
98
+ # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
99
+
100
+ if ENV['RAILS_LOG_TO_STDOUT'].present?
101
+ logger = ActiveSupport::Logger.new(STDOUT)
102
+ logger.formatter = config.log_formatter
103
+ config.logger = ActiveSupport::TaggedLogging.new(logger)
104
+ end
105
+
106
+ # Do not dump schema after migrations.
107
+ config.active_record.dump_schema_after_migration = false
108
+ end
@@ -22,5 +22,8 @@ test:
22
22
  <<: *default_settings
23
23
  monitor_mode: false
24
24
 
25
+ staging:
26
+ <<: *default_settings
27
+
25
28
  production:
26
29
  <<: *default_settings
@@ -1,4 +1,5 @@
1
1
  class HomeController < ApplicationController
2
+
2
3
  include DiscoApp::Concerns::AuthenticatedController
3
4
 
4
5
  def index
@@ -1,2 +1,2 @@
1
1
  # Use an ActiveRecord-based session store.
2
- Rails.application.config.session_store :active_record_store, :key => '_disco_app_session'
2
+ Rails.application.config.session_store :active_record_store, key: '_disco_app_session'
@@ -18,3 +18,6 @@ REDIS_PROVIDER=
18
18
  DISCO_API_URL=
19
19
 
20
20
  WHITELISTED_DOMAINS=
21
+
22
+ # You can find this listed in 1Password
23
+ APPSIGNAL_PUSH_API_KEY=
@@ -1,4 +1,4 @@
1
- Forecast: [C-XXX](https://app.forecast.it/project/P-X/workflow/C-XXX)
1
+ Jira: [XXX-1](https://discodev.atlassian.net/browse/XXX-1)
2
2
 
3
3
  ### Description
4
4
  A brief overview of the work done. Be sure to provide some context to the issue/feature, so that the reviewer can jump right on in and review your sweet, sweet code.