webhookdb 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/data/messages/web/install-customer-login.liquid +1 -1
  3. data/data/messages/web/install-success.liquid +2 -2
  4. data/db/migrations/038_webhookdb_api_key.rb +13 -0
  5. data/lib/webhookdb/api/install.rb +23 -1
  6. data/lib/webhookdb/api/service_integrations.rb +17 -12
  7. data/lib/webhookdb/api/system.rb +13 -2
  8. data/lib/webhookdb/fixtures/service_integrations.rb +4 -0
  9. data/lib/webhookdb/front.rb +23 -11
  10. data/lib/webhookdb/idempotency.rb +94 -33
  11. data/lib/webhookdb/jobs/backfill.rb +24 -5
  12. data/lib/webhookdb/jobs/scheduled_backfills.rb +5 -0
  13. data/lib/webhookdb/oauth/{front.rb → front_provider.rb} +21 -4
  14. data/lib/webhookdb/oauth/{intercom.rb → intercom_provider.rb} +1 -1
  15. data/lib/webhookdb/oauth.rb +8 -7
  16. data/lib/webhookdb/organization/alerting.rb +11 -0
  17. data/lib/webhookdb/postgres/model_utilities.rb +19 -0
  18. data/lib/webhookdb/replicator/column.rb +9 -1
  19. data/lib/webhookdb/replicator/front_conversation_v1.rb +5 -1
  20. data/lib/webhookdb/replicator/front_marketplace_root_v1.rb +2 -5
  21. data/lib/webhookdb/replicator/front_message_v1.rb +5 -1
  22. data/lib/webhookdb/replicator/front_signalwire_message_channel_app_v1.rb +325 -0
  23. data/lib/webhookdb/replicator/front_v1_mixin.rb +9 -1
  24. data/lib/webhookdb/replicator/signalwire_message_v1.rb +25 -13
  25. data/lib/webhookdb/service_integration.rb +36 -3
  26. data/lib/webhookdb/signalwire.rb +40 -0
  27. data/lib/webhookdb/spec_helpers/citest.rb +18 -9
  28. data/lib/webhookdb/spec_helpers/postgres.rb +9 -0
  29. data/lib/webhookdb/spec_helpers/service.rb +5 -0
  30. data/lib/webhookdb/spec_helpers/shared_examples_for_columns.rb +25 -13
  31. data/lib/webhookdb/spec_helpers/whdb.rb +7 -0
  32. data/lib/webhookdb/sync_target.rb +1 -1
  33. data/lib/webhookdb/tasks/specs.rb +4 -2
  34. data/lib/webhookdb/version.rb +1 -1
  35. data/lib/webhookdb.rb +14 -0
  36. metadata +34 -4
@@ -423,6 +423,11 @@ module Webhookdb::SpecHelpers::Service
423
423
  super
424
424
  end
425
425
 
426
+ def delete(uri, params={}, env={}, &)
427
+ env, params = make_json_request(env, params)
428
+ super
429
+ end
430
+
426
431
  def make_json_request(env, params)
427
432
  env["CONTENT_TYPE"] ||= "application/json"
428
433
  params = Webhookdb::Json.encode(params) if env["CONTENT_TYPE"] == "application/json" && !params.is_a?(String)
@@ -27,7 +27,7 @@ RSpec.shared_examples "a service column converter" do |isomorphic_proc|
27
27
  end
28
28
  end
29
29
 
30
- RSpec.shared_examples "a service column defaulter" do |isomorphic_proc|
30
+ RSpec.shared_examples "a service column defaulter" do |isomorphic_proc, ruby: true, sql: true|
31
31
  let(:resource) { nil }
32
32
  let(:event) { nil }
33
33
  let(:enrichment) { nil }
@@ -37,20 +37,32 @@ RSpec.shared_examples "a service column defaulter" do |isomorphic_proc|
37
37
  let(:expected_query) { nil }
38
38
  let(:db) { Webhookdb::Postgres::Model.db }
39
39
 
40
- it "returns expected value using ruby proc" do
41
- v = isomorphic_proc.ruby.call(resource:, event:, enrichment:, service_integration:)
42
- expect(v).to expected
40
+ if ruby
41
+ it "returns expected value using ruby proc" do
42
+ v = isomorphic_proc.ruby.call(resource:, event:, enrichment:, service_integration:)
43
+ expect(v).to expected
44
+ end
45
+ else
46
+ it "is not implemented for ruby" do
47
+ expect { isomorphic_proc.ruby.call }.to raise_error(NotImplementedError)
48
+ end
43
49
  end
44
50
 
45
- it "returns expected value using sql proc" do
46
- e = isomorphic_proc.sql.call(service_integration:)
47
- if expected_query.respond_to?(:match)
48
- expect(db.select(e).sql).to match(expected_query)
49
- elsif expected_query
50
- expect(db.select(e).sql).to eq(expected_query)
51
- else
52
- v = db.select(e).first.to_a[0][1]
53
- expect(v).to expected
51
+ if sql
52
+ it "returns expected value using sql proc" do
53
+ e = isomorphic_proc.sql.call(service_integration:)
54
+ if expected_query.respond_to?(:match)
55
+ expect(db.select(e).sql).to match(expected_query)
56
+ elsif expected_query
57
+ expect(db.select(e).sql).to eq(expected_query)
58
+ else
59
+ v = db.select(e).first.to_a[0][1]
60
+ expect(v).to expected
61
+ end
62
+ end
63
+ else
64
+ it "is not implemented for sql" do
65
+ expect { isomorphic_proc.sql.call }.to raise_error(NotImplementedError)
54
66
  end
55
67
  end
56
68
  end
@@ -136,4 +136,11 @@ module Webhookdb::SpecHelpers::Whdb
136
136
  raise "Must provide :replicator or have :svc available" if replicator.nil?
137
137
  return replicator.admin_dataset { |ds| ds.where(pk: row.fetch(:pk)).update(fields) }
138
138
  end
139
+
140
+ RSpec::Matchers.define(:be_a_uuid) do
141
+ match do |v|
142
+ uuid = /\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\z/i
143
+ v =~ uuid
144
+ end
145
+ end
139
146
  end
@@ -55,7 +55,7 @@ class Webhookdb::SyncTarget < Webhookdb::Postgres::Model(:sync_targets)
55
55
 
56
56
  after_configured do
57
57
  if Webhookdb::RACK_ENV == "test"
58
- safename = ENV["USER"].gsub(/[^A-Za-z]/, "")
58
+ safename = ENV.fetch("USER", "root").gsub(/[^A-Za-z]/, "")
59
59
  self.default_schema = "synctest_#{safename}"
60
60
  end
61
61
  end
@@ -10,13 +10,15 @@ module Webhookdb::Tasks
10
10
  def initialize
11
11
  super()
12
12
  namespace :specs do
13
- desc "Run API integration tests"
13
+ desc "Run API integration tests in the 'integration' folder of this gem. " \
14
+ "To run your own tests, create a task similar to this one, " \
15
+ "that calls Webhookdb::SpecHelpers::Citest.run_tests."
14
16
  task :integration do
15
17
  require "rspec/core"
16
18
  require "slack-notifier"
17
19
  require "webhookdb/spec_helpers/integration"
18
20
  require "webhookdb/spec_helpers/citest"
19
- Webhookdb::SpecHelpers::Citest.run_tests("integration")
21
+ Webhookdb::SpecHelpers::Citest.run_tests(Webhookdb::SpecHelpers::Citest::INTEGRATION_TESTS_DIR)
20
22
  end
21
23
 
22
24
  desc "The release process needs to finish quickly, so start the integration tests in another dyno."
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Webhookdb
4
- VERSION = "1.0.2"
4
+ VERSION = "1.1.0"
5
5
  end
data/lib/webhookdb.rb CHANGED
@@ -10,7 +10,21 @@ require "phony"
10
10
 
11
11
  require "webhookdb/json"
12
12
 
13
+ if ENV["DOCKER_DEV"]
14
+ # If DOCKER_DEV is set, replace 'localhost' urls with 'host.docker.internal'.
15
+ ENV.each do |k, v|
16
+ begin
17
+ localhost = URI(v).host == "localhost"
18
+ rescue StandardError
19
+ next
20
+ end
21
+ next unless localhost
22
+ ENV[k] = v.gsub("localhost", "host.docker.internal")
23
+ end
24
+ end
25
+
13
26
  if (heroku_app = ENV.fetch("MERGE_HEROKU_ENV", nil))
27
+ # If MERGE_HEROKU_ENV, merge all of its environment vars into the current env
14
28
  text = `heroku config -j --app=#{heroku_app}`
15
29
  json = Oj.load(text)
16
30
  json.each do |k, v|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webhookdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - WebhookDB
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-10 00:00:00.000000000 Z
11
+ date: 2024-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -248,6 +248,20 @@ dependencies:
248
248
  - - ">="
249
249
  - !ruby/object:Gem::Version
250
250
  version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: jwt
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "~>"
256
+ - !ruby/object:Gem::Version
257
+ version: '2.7'
258
+ type: :runtime
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "~>"
263
+ - !ruby/object:Gem::Version
264
+ version: '2.7'
251
265
  - !ruby/object:Gem::Dependency
252
266
  name: liquid
253
267
  requirement: !ruby/object:Gem::Requirement
@@ -724,6 +738,20 @@ dependencies:
724
738
  - - "~>"
725
739
  - !ruby/object:Gem::Version
726
740
  version: '10.4'
741
+ - !ruby/object:Gem::Dependency
742
+ name: uuidx
743
+ requirement: !ruby/object:Gem::Requirement
744
+ requirements:
745
+ - - "~>"
746
+ - !ruby/object:Gem::Version
747
+ version: '0.10'
748
+ type: :runtime
749
+ prerelease: false
750
+ version_requirements: !ruby/object:Gem::Requirement
751
+ requirements:
752
+ - - "~>"
753
+ - !ruby/object:Gem::Version
754
+ version: '0.10'
727
755
  - !ruby/object:Gem::Dependency
728
756
  name: warden
729
757
  requirement: !ruby/object:Gem::Requirement
@@ -824,6 +852,7 @@ files:
824
852
  - db/migrations/035_synchronous_backfill.rb
825
853
  - db/migrations/036_oauth.rb
826
854
  - db/migrations/037_oauth_used.rb
855
+ - db/migrations/038_webhookdb_api_key.rb
827
856
  - integration/async_spec.rb
828
857
  - integration/auth_spec.rb
829
858
  - integration/database_spec.rb
@@ -975,8 +1004,8 @@ files:
975
1004
  - lib/webhookdb/microsoft_calendar.rb
976
1005
  - lib/webhookdb/nextpax.rb
977
1006
  - lib/webhookdb/oauth.rb
978
- - lib/webhookdb/oauth/front.rb
979
- - lib/webhookdb/oauth/intercom.rb
1007
+ - lib/webhookdb/oauth/front_provider.rb
1008
+ - lib/webhookdb/oauth/intercom_provider.rb
980
1009
  - lib/webhookdb/oauth/session.rb
981
1010
  - lib/webhookdb/organization.rb
982
1011
  - lib/webhookdb/organization/alerting.rb
@@ -1014,6 +1043,7 @@ files:
1014
1043
  - lib/webhookdb/replicator/front_conversation_v1.rb
1015
1044
  - lib/webhookdb/replicator/front_marketplace_root_v1.rb
1016
1045
  - lib/webhookdb/replicator/front_message_v1.rb
1046
+ - lib/webhookdb/replicator/front_signalwire_message_channel_app_v1.rb
1017
1047
  - lib/webhookdb/replicator/front_v1_mixin.rb
1018
1048
  - lib/webhookdb/replicator/github_issue_comment_v1.rb
1019
1049
  - lib/webhookdb/replicator/github_issue_v1.rb