cyclone_lariat 0.4.0 → 1.0.0.rc1

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 (73) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/gem-push.yml +4 -4
  3. data/.rubocop.yml +9 -5
  4. data/Gemfile.lock +123 -21
  5. data/Guardfile +42 -0
  6. data/README.md +417 -220
  7. data/bin/cyclone_lariat +75 -43
  8. data/cyclone_lariat.gemspec +10 -3
  9. data/lib/cyclone_lariat/clients/abstract.rb +40 -0
  10. data/lib/cyclone_lariat/clients/sns.rb +163 -0
  11. data/lib/cyclone_lariat/clients/sqs.rb +114 -0
  12. data/lib/cyclone_lariat/core.rb +21 -0
  13. data/lib/cyclone_lariat/errors.rb +16 -0
  14. data/lib/cyclone_lariat/fake.rb +19 -0
  15. data/lib/cyclone_lariat/generators/command.rb +53 -0
  16. data/lib/cyclone_lariat/generators/event.rb +52 -0
  17. data/lib/cyclone_lariat/generators/queue.rb +30 -0
  18. data/lib/cyclone_lariat/generators/topic.rb +29 -0
  19. data/lib/cyclone_lariat/messages/v1/abstract.rb +139 -0
  20. data/lib/cyclone_lariat/messages/v1/command.rb +20 -0
  21. data/lib/cyclone_lariat/messages/v1/event.rb +20 -0
  22. data/lib/cyclone_lariat/messages/v1/validator.rb +31 -0
  23. data/lib/cyclone_lariat/messages/v2/abstract.rb +149 -0
  24. data/lib/cyclone_lariat/messages/v2/command.rb +20 -0
  25. data/lib/cyclone_lariat/messages/v2/event.rb +20 -0
  26. data/lib/cyclone_lariat/messages/v2/validator.rb +39 -0
  27. data/lib/cyclone_lariat/middleware.rb +9 -6
  28. data/lib/cyclone_lariat/migration.rb +54 -117
  29. data/lib/cyclone_lariat/options.rb +52 -0
  30. data/lib/cyclone_lariat/presenters/graph.rb +54 -0
  31. data/lib/cyclone_lariat/presenters/queues.rb +41 -0
  32. data/lib/cyclone_lariat/presenters/subscriptions.rb +34 -0
  33. data/lib/cyclone_lariat/presenters/topics.rb +40 -0
  34. data/lib/cyclone_lariat/publisher.rb +25 -0
  35. data/lib/cyclone_lariat/repo/active_record/messages.rb +92 -0
  36. data/lib/cyclone_lariat/repo/active_record/versions.rb +28 -0
  37. data/lib/cyclone_lariat/repo/messages.rb +43 -0
  38. data/lib/cyclone_lariat/repo/messages_mapper.rb +49 -0
  39. data/lib/cyclone_lariat/repo/sequel/messages.rb +73 -0
  40. data/lib/cyclone_lariat/repo/sequel/versions.rb +28 -0
  41. data/lib/cyclone_lariat/repo/versions.rb +42 -0
  42. data/lib/cyclone_lariat/resources/queue.rb +167 -0
  43. data/lib/cyclone_lariat/resources/topic.rb +132 -0
  44. data/lib/cyclone_lariat/services/migrate.rb +51 -0
  45. data/lib/cyclone_lariat/services/rollback.rb +51 -0
  46. data/lib/cyclone_lariat/version.rb +1 -1
  47. data/lib/cyclone_lariat.rb +4 -11
  48. data/lib/tasks/console.rake +1 -1
  49. data/lib/tasks/cyclone_lariat.rake +10 -12
  50. data/lib/tasks/db.rake +0 -15
  51. metadata +127 -27
  52. data/config/db.example.rb +0 -9
  53. data/config/initializers/sequel.rb +0 -7
  54. data/db/migrate/01_add_uuid_extensions.rb +0 -15
  55. data/db/migrate/02_add_events.rb +0 -19
  56. data/db/migrate/03_add_versions.rb +0 -9
  57. data/docs/_imgs/graphviz_01.png +0 -0
  58. data/docs/_imgs/graphviz_02.png +0 -0
  59. data/docs/_imgs/graphviz_03.png +0 -0
  60. data/docs/_imgs/lariat.jpg +0 -0
  61. data/docs/_imgs/logic.png +0 -0
  62. data/docs/_imgs/sqs_sns_diagram.png +0 -0
  63. data/lib/cyclone_lariat/abstract/client.rb +0 -112
  64. data/lib/cyclone_lariat/abstract/message.rb +0 -98
  65. data/lib/cyclone_lariat/command.rb +0 -13
  66. data/lib/cyclone_lariat/configure.rb +0 -15
  67. data/lib/cyclone_lariat/event.rb +0 -13
  68. data/lib/cyclone_lariat/messages_mapper.rb +0 -46
  69. data/lib/cyclone_lariat/messages_repo.rb +0 -60
  70. data/lib/cyclone_lariat/queue.rb +0 -147
  71. data/lib/cyclone_lariat/sns_client.rb +0 -149
  72. data/lib/cyclone_lariat/sqs_client.rb +0 -93
  73. data/lib/cyclone_lariat/topic.rb +0 -113
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cyclone_lariat/messages/v1/event'
4
+ require 'cyclone_lariat/messages/v1/command'
5
+ require 'cyclone_lariat/repo/messages_mapper'
6
+
7
+ module CycloneLariat
8
+ module Repo
9
+ module Sequel
10
+ class Messages
11
+ attr_reader :dataset
12
+
13
+ def initialize(dataset)
14
+ @dataset = dataset
15
+ end
16
+
17
+ def enabled?
18
+ !dataset.nil?
19
+ end
20
+
21
+ def disabled?
22
+ dataset.nil?
23
+ end
24
+
25
+ def create(msg)
26
+ dataset.insert MessagesMapper.to_row(msg)
27
+ end
28
+
29
+ def exists?(uuid:)
30
+ dataset.where(uuid: uuid).limit(1).any?
31
+ end
32
+
33
+ def processed!(uuid:, error: nil)
34
+ data = { processed_at: ::Sequel.function(:NOW) }
35
+ data.merge!(client_error_message: error.message, client_error_details: JSON.generate(error.details)) if error
36
+
37
+ !dataset.where(uuid: uuid).update(data).zero?
38
+ end
39
+
40
+ def find(uuid:)
41
+ row = dataset.where(uuid: uuid).first
42
+ return if row.nil?
43
+
44
+ build MessagesMapper.from_row(row)
45
+ end
46
+
47
+ def each_unprocessed
48
+ dataset.where(processed_at: nil).each do |row|
49
+ msg = build MessagesMapper.from_row(row)
50
+ yield(msg)
51
+ end
52
+ end
53
+
54
+ def each_with_client_errors
55
+ dataset.where { (processed_at !~ nil) & (client_error_message !~ nil) }.each do |row|
56
+ msg = build MessagesMapper.from_row(row)
57
+ yield(msg)
58
+ end
59
+ end
60
+
61
+ private
62
+
63
+ def build(raw)
64
+ case kind = raw.delete(:kind)
65
+ when 'event' then CycloneLariat::Messages::V1::Event.wrap raw
66
+ when 'command' then CycloneLariat::Messages::V1::Command.wrap raw
67
+ else raise ArgumentError, "Unknown kind `#{kind}` of message"
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CycloneLariat
4
+ module Repo
5
+ module Sequel
6
+ class Versions
7
+ attr_reader :dataset
8
+
9
+ def initialize(dataset)
10
+ @dataset = dataset
11
+ end
12
+
13
+ def add(version)
14
+ dataset.insert(version: version)
15
+ true
16
+ end
17
+
18
+ def remove(version)
19
+ dataset.filter(version: version).delete.positive?
20
+ end
21
+
22
+ def all
23
+ dataset.all
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+ require 'luna_park/extensions/injector'
5
+ require 'cyclone_lariat/core'
6
+ require 'cyclone_lariat/repo/sequel/versions'
7
+ require 'cyclone_lariat/repo/active_record/versions'
8
+
9
+ module CycloneLariat
10
+ module Repo
11
+ class Versions
12
+ include LunaPark::Extensions::Injector
13
+
14
+ attr_reader :config
15
+
16
+ dependency(:sequel_versions_class) { Repo::Sequel::Versions }
17
+ dependency(:active_record_versions_class) { Repo::ActiveRecord::Versions }
18
+
19
+ extend Forwardable
20
+
21
+ def_delegators :driver, :add, :remove, :all
22
+
23
+ def initialize(**options)
24
+ @config = CycloneLariat::Options.wrap(options).merge!(CycloneLariat.config)
25
+ end
26
+
27
+ def driver
28
+ @driver ||= select(driver: config.driver)
29
+ end
30
+
31
+ private
32
+
33
+ def select(driver:)
34
+ case driver
35
+ when :sequel then sequel_versions_class.new(config.versions_dataset)
36
+ when :active_record then active_record_versions_class.new(config.versions_dataset)
37
+ else raise ArgumentError, "Undefined driver `#{driver}`"
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,167 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'uri'
4
+
5
+ module CycloneLariat
6
+ module Resources
7
+ class Queue
8
+ SNS_SUFFIX = :queue
9
+
10
+ attr_reader :instance, :kind, :region, :dest, :account_id, :publisher, :type, :fifo, :content_based_deduplication
11
+
12
+ def initialize(instance:, kind:, region:, dest:, account_id:, publisher:, type:, fifo:, content_based_deduplication: nil, tags: nil, name: nil)
13
+ @instance = instance
14
+ @kind = kind
15
+ @region = region
16
+ @dest = dest
17
+ @account_id = account_id
18
+ @publisher = publisher
19
+ @type = type
20
+ @fifo = fifo
21
+ @tags = tags
22
+ @name = name
23
+ @content_based_deduplication = content_based_deduplication
24
+ end
25
+
26
+ def arn
27
+ ['arn', 'aws', 'sqs', region, account_id, name].join ':'
28
+ end
29
+
30
+ ##
31
+ # Url example:
32
+ # https://sqs.eu-west-1.amazonaws.com/247606935658/stage-event-queue
33
+ def url
34
+ "https://sqs.#{region}.amazonaws.com/#{account_id}/#{name}"
35
+ end
36
+
37
+ def custom?
38
+ !standard?
39
+ end
40
+
41
+ def standard?
42
+ instance && kind && publisher && type && true
43
+ end
44
+
45
+ def name
46
+ @name ||= begin
47
+ name = [instance, kind, SNS_SUFFIX, publisher, type, dest].compact.join '-'
48
+ name += '.fifo' if fifo
49
+ name
50
+ end
51
+ end
52
+
53
+ alias to_s name
54
+
55
+ def topic?
56
+ false
57
+ end
58
+
59
+ def queue?
60
+ true
61
+ end
62
+
63
+ def protocol
64
+ 'sqs'
65
+ end
66
+
67
+ def attributes
68
+ attrs = {}
69
+ attrs['FifoQueue'] = 'true' if fifo
70
+ attrs['ContentBasedDeduplication'] = 'true' if content_based_deduplication
71
+ attrs
72
+ end
73
+
74
+ class << self
75
+ ##
76
+ # Name example: test-event-queue-cyclone_lariat-note_added.fifo
77
+ # instance: teste
78
+ # kind: event
79
+ # publisher: cyclone_lariat
80
+ # type: note_added
81
+ # dest: nil
82
+ # fifo: true
83
+ def from_name(name, region:, account_id:)
84
+ is_fifo_array = name.split('.')
85
+ full_name = is_fifo_array[0]
86
+ fifo_suffix = is_fifo_array[-1]
87
+ suffix_exists = fifo_suffix != full_name
88
+
89
+ if suffix_exists && fifo_suffix != 'fifo'
90
+ raise ArgumentError, "Queue name #{name} consists unexpected suffix #{fifo_suffix}"
91
+ end
92
+
93
+ fifo = suffix_exists
94
+ queue_array = full_name.split('-')
95
+
96
+ raise ArgumentError, "Topic name should consists `#{SNS_SUFFIX}`" unless queue_array[2] != SNS_SUFFIX
97
+
98
+ queue_array.clear if queue_array.size < 5
99
+
100
+ new(
101
+ instance: queue_array[0], kind: queue_array[1], region: region, dest: queue_array[5],
102
+ account_id: account_id, publisher: queue_array[3], type: queue_array[4], fifo: fifo, name: name
103
+ )
104
+ end
105
+
106
+ ##
107
+ # URL example: https://sqs.eu-west-1.amazonaws.com/247606935658/test-event-queue-cyclone_lariat-note_added.fifo
108
+ # url_array[0] => https
109
+ # host_array[0] => sqs
110
+ # host_array[1] => eu-west-1
111
+ # url_array[3] => 247606935658 # account_id
112
+ # url_array[4] => test-event-queue-cyclone_lariat-note_added.fifo # name
113
+ def from_url(url)
114
+ raise ArgumentError, 'Url is not http format' unless url =~ URI::DEFAULT_PARSER.make_regexp
115
+
116
+ url_array = url.split('/')
117
+ raise ArgumentError, 'Url should start from https' unless url_array[0] == 'https:'
118
+
119
+ host_array = url_array[2].split('.')
120
+ raise ArgumentError, 'It is not queue url' unless host_array[0] == 'sqs'
121
+
122
+ from_name(url_array[4], region: host_array[1], account_id: url_array[3])
123
+ end
124
+
125
+ ##
126
+ # Arn example: "arn:aws:sqs:eu-west-1:247606935658:custom_queue"
127
+ # arn_array[0] => 'arn'
128
+ # arn_array[1] => 'aws'
129
+ # arn_array[2] => 'sqs'
130
+ # arn_array[3] => 'eu-west-1' # region
131
+ # arn_array[4] => '247606935658' # account_id
132
+ # arn_array[5] => 'alexey_test2' # name
133
+ def from_arn(arn)
134
+ arn_array = arn.split(':')
135
+
136
+ raise ArgumentError, "Arn `#{arn}` should consists `arn`" unless arn_array[0] == 'arn'
137
+ raise ArgumentError, "Arn `#{arn}` should consists `aws`" unless arn_array[1] == 'aws'
138
+ raise ArgumentError, "Arn `#{arn}` should consists `sqs`" unless arn_array[2] == 'sqs'
139
+
140
+ from_name(arn_array[5], region: arn_array[3], account_id: arn_array[4])
141
+ end
142
+ end
143
+
144
+ def tags
145
+ @tags ||= begin
146
+ if standard?
147
+ {
148
+ 'standard' => 'true',
149
+ 'instance' => String(instance),
150
+ 'kind' => String(kind),
151
+ 'publisher' => String(publisher),
152
+ 'type' => String(type),
153
+ 'dest' => dest ? String(dest) : 'undefined',
154
+ 'fifo' => fifo ? 'true' : 'false'
155
+ }
156
+ else
157
+ {
158
+ 'standard' => 'false',
159
+ 'name' => String(name),
160
+ 'fifo' => fifo ? 'true' : 'false'
161
+ }
162
+ end
163
+ end
164
+ end
165
+ end
166
+ end
167
+ end
@@ -0,0 +1,132 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CycloneLariat
4
+ module Resources
5
+ class Topic
6
+ SNS_SUFFIX = :fanout
7
+
8
+ attr_reader :instance, :kind, :region, :account_id, :publisher, :type, :fifo, :content_based_deduplication
9
+
10
+ def initialize(instance:, kind:, region:, account_id:, publisher:, type:, fifo:, content_based_deduplication: nil, tags: nil, name: nil)
11
+ @instance = instance
12
+ @kind = kind
13
+ @region = region
14
+ @account_id = account_id
15
+ @publisher = publisher
16
+ @type = type
17
+ @fifo = fifo
18
+ @tags = tags
19
+ @name = name
20
+ @content_based_deduplication = content_based_deduplication
21
+ end
22
+
23
+ def arn
24
+ ['arn', 'aws', 'sns', region, account_id, to_s].join ':'
25
+ end
26
+
27
+ def custom?
28
+ !standard?
29
+ end
30
+
31
+ def standard?
32
+ return false unless instance && kind && publisher && type
33
+
34
+ true
35
+ end
36
+
37
+ def name
38
+ @name ||= begin
39
+ name = [instance, kind, SNS_SUFFIX, publisher, type].compact.join '-'
40
+ name += '.fifo' if fifo
41
+ name
42
+ end
43
+ end
44
+
45
+ def attributes
46
+ attrs = {}
47
+ attrs['FifoTopic'] = 'true' if fifo
48
+ attrs['ContentBasedDeduplication'] = 'true' if content_based_deduplication
49
+ attrs
50
+ end
51
+
52
+ def topic?
53
+ true
54
+ end
55
+
56
+ def queue?
57
+ false
58
+ end
59
+
60
+ def protocol
61
+ 'sns'
62
+ end
63
+
64
+ alias to_s name
65
+
66
+ def ==(other)
67
+ arn == other.arn
68
+ end
69
+
70
+ class << self
71
+ def from_name(name, region:, account_id:)
72
+ is_fifo_array = name.split('.')
73
+ full_name = is_fifo_array[0]
74
+ fifo_suffix = is_fifo_array[-1]
75
+ suffix_exists = fifo_suffix != full_name
76
+
77
+ if suffix_exists && fifo_suffix != 'fifo'
78
+ raise ArgumentError, "Topic name #{name} consists unexpected suffix #{fifo_suffix}"
79
+ end
80
+
81
+ fifo = suffix_exists
82
+ topic_array = full_name.split('-')
83
+
84
+ raise ArgumentError, "Topic name should consists `#{SNS_SUFFIX}`" unless topic_array[2] != SNS_SUFFIX
85
+
86
+ topic_array.clear if topic_array.size < 5
87
+
88
+ new(
89
+ instance: topic_array[0],
90
+ kind: topic_array[1],
91
+ publisher: topic_array[3],
92
+ type: topic_array[4],
93
+ region: region,
94
+ account_id: account_id,
95
+ fifo: fifo,
96
+ name: name
97
+ )
98
+ end
99
+
100
+ def from_arn(arn)
101
+ arn_array = arn.split(':')
102
+ raise ArgumentError, 'Arn should consists `arn`' unless arn_array[0] == 'arn'
103
+ raise ArgumentError, 'Arn should consists `aws`' unless arn_array[1] == 'aws'
104
+ raise ArgumentError, 'Arn should consists `sns`' unless arn_array[2] == 'sns'
105
+
106
+ from_name(arn_array[5], region: arn_array[3], account_id: arn_array[4])
107
+ end
108
+ end
109
+
110
+ def tags
111
+ @tags ||= begin
112
+ if standard?
113
+ [
114
+ { key: 'standard', value: 'true' },
115
+ { key: 'instance', value: String(instance) },
116
+ { key: 'kind', value: String(kind) },
117
+ { key: 'publisher', value: String(publisher) },
118
+ { key: 'type', value: String(type) },
119
+ { key: 'fifo', value: fifo ? 'true' : 'false' }
120
+ ]
121
+ else
122
+ [
123
+ { key: 'standard', value: 'false' },
124
+ { key: 'name', value: String(name) },
125
+ { key: 'fifo', value: fifo ? 'true' : 'false' }
126
+ ]
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CycloneLariat
4
+ module Services
5
+ class Migrate
6
+ attr_reader :repo, :dir
7
+
8
+ def initialize(repo:, dir:)
9
+ @repo = repo
10
+ @dir = dir
11
+ end
12
+
13
+ def call
14
+ alert('No one migration exists') if !Dir.exist?(dir) || Dir.empty?(dir)
15
+ output = []
16
+
17
+ migration_paths.each do |path|
18
+ filename = File.basename(path, '.rb')
19
+ version, title = filename.split('_', 2)
20
+
21
+ next if existed_migrations.include? version.to_i
22
+
23
+ class_name = title.split('_').collect(&:capitalize).join
24
+ output << "Up - #{version} #{class_name} #{path}"
25
+ require_relative Pathname.new(Dir.pwd) + Pathname.new(path)
26
+ Object.const_get(class_name).new.up
27
+ repo.add(version)
28
+ end
29
+
30
+ output
31
+ end
32
+
33
+ private
34
+
35
+ # Sorted by timestamp
36
+ def migration_paths
37
+ # lariat/migrate/1668161620_many_to_one.rb
38
+ Dir.glob("#{dir}/*.rb").sort_by do |file_path|
39
+ # 1668161620_many_to_one.rb
40
+ file_name = file_path.split('/')[-1]
41
+ # 1668161620
42
+ file_name.split('_').first.to_i
43
+ end
44
+ end
45
+
46
+ def existed_migrations
47
+ @existed_migrations ||= repo.all.map { |row| row[:version] }
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CycloneLariat
4
+ module Services
5
+ class Rollback
6
+ attr_reader :repo, :dir
7
+
8
+ def initialize(repo:, dir:)
9
+ @repo = repo
10
+ @dir = dir
11
+ end
12
+
13
+ def call(version = nil)
14
+ version ||= existed_migrations[-1]
15
+ output = []
16
+
17
+ paths_of_downgrades(version).each do |path|
18
+ filename = File.basename(path, '.rb')
19
+ version, title = filename.split('_', 2)
20
+ class_name = title.split('_').collect(&:capitalize).join
21
+ output << "Down - #{version} #{class_name} #{path}"
22
+ require_relative Pathname.new(Dir.pwd) + Pathname.new(path)
23
+ Object.const_get(class_name).new.down
24
+ repo.remove(version)
25
+ end
26
+
27
+ output
28
+ end
29
+
30
+ def existed_migrations
31
+ @existed_migrations ||= repo.all.map { |row| row[:version] }.sort
32
+ end
33
+
34
+ def paths_of_downgrades(version)
35
+ migrations_to_downgrade = existed_migrations.select { |migration| migration >= version }
36
+
37
+ paths = []
38
+ migrations_to_downgrade.each do |migration|
39
+ path = Pathname.new(Dir.pwd) + Pathname.new(dir)
40
+ founded = Dir.glob("#{path}/#{migration}_*.rb")
41
+ raise "Could not found migration: `#{migration}` in #{path}" if founded.empty?
42
+ raise "Found lot of migration: `#{migration}` in #{path}" if founded.size > 1
43
+
44
+ paths += founded
45
+ end
46
+
47
+ paths
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CycloneLariat
4
- VERSION = '0.4.0'
4
+ VERSION = '1.0.0.rc1'
5
5
  end
@@ -1,13 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'cyclone_lariat/configure'
4
- require_relative 'cyclone_lariat/sns_client'
5
- require_relative 'cyclone_lariat/errors'
6
- require_relative 'cyclone_lariat/event'
7
- require_relative 'cyclone_lariat/messages_mapper'
8
- require_relative 'cyclone_lariat/messages_repo'
9
- require_relative 'cyclone_lariat/migration'
10
- require_relative 'cyclone_lariat/middleware'
11
- require_relative 'cyclone_lariat/version'
12
-
13
- module CycloneLariat; end
3
+ require 'cyclone_lariat/core'
4
+ require 'cyclone_lariat/middleware'
5
+ require 'cyclone_lariat/migration'
6
+ require 'cyclone_lariat/publisher'
@@ -3,7 +3,7 @@
3
3
  desc 'IRB console with required CycloneLariat'
4
4
  task :console do
5
5
  # require 'cyclone_lariat'
6
- require_relative '../../lib/cyclone_lariat'
6
+ require 'cyclone_lariat'
7
7
  require 'irb'
8
8
  require_relative '../../config/initializers/cyclone_lariat'
9
9
  # require_relative(init_file) if File.exists?(init_file)
@@ -3,42 +3,40 @@
3
3
  require 'cyclone_lariat'
4
4
 
5
5
  namespace :cyclone_lariat do
6
- desc 'Migrate topics for SQSSNS'
6
+ desc 'Migrate topics for SQS/SNS'
7
7
  task migrate: :config do
8
- require_relative '../../config/initializers/cyclone_lariat'
9
8
  CycloneLariat::Migration.migrate
10
9
  end
11
10
 
12
- desc 'Rollback topics for SQSSNS'
11
+ desc 'Rollback topics for SQS/SNS'
13
12
  task :rollback, [:version] => :config do |_, args|
14
- require_relative '../../config/initializers/cyclone_lariat'
15
13
  target_version = args[:version] ? args[:version].to_i : nil
16
14
  CycloneLariat::Migration.rollback(target_version)
17
15
  end
18
16
 
19
17
  namespace :list do
20
18
  desc 'List all topics'
21
- task :topics do
22
- require_relative '../../config/initializers/cyclone_lariat'
19
+ task topics: :config do
23
20
  CycloneLariat::Migration.list_topics
24
21
  end
25
22
 
26
23
  desc 'List all queues'
27
- task :queues do
28
- require_relative '../../config/initializers/cyclone_lariat'
24
+ task queues: :config do
29
25
  CycloneLariat::Migration.list_queues
30
26
  end
31
27
 
32
28
  desc 'List all subscriptions'
33
- task :subscriptions do
34
- require_relative '../../config/initializers/cyclone_lariat'
29
+ task subscriptions: :config do
35
30
  CycloneLariat::Migration.list_subscriptions
36
31
  end
37
32
  end
38
33
 
39
34
  desc 'Build graphviz graph for whole system'
40
- task :graph do
41
- require_relative '../../config/initializers/cyclone_lariat'
35
+ task graph: :config do
42
36
  CycloneLariat::Migration.build_graph
43
37
  end
38
+
39
+ task :config do
40
+ require_relative '../../config/initializers/cyclone_lariat'
41
+ end
44
42
  end
data/lib/tasks/db.rake CHANGED
@@ -22,20 +22,6 @@ namespace :db do
22
22
  puts "Database `#{DB_CONF[:database]}` successfully dropped" if system(cmd)
23
23
  end
24
24
 
25
- desc 'Apply migrate'
26
- task :migrate, [:version] => :config do |_, args|
27
- require 'logger'
28
- require 'sequel/core'
29
-
30
- Sequel.extension :migration
31
- version = args[:version] ? args[:version].to_i : nil
32
- migrations_path = "#{__dir__}/../../db/migrate/"
33
-
34
- Sequel.connect(**DB_CONF, logger: Logger.new($stdout)) do |db|
35
- Sequel::Migrator.run(db, migrations_path, target: version)
36
- end
37
- end
38
-
39
25
  desc 'Database console'
40
26
  task console: :config do
41
27
  cmd = "PGPASSWORD=#{DB_CONF[:password]} psql" \
@@ -50,6 +36,5 @@ namespace :db do
50
36
  task :reset do
51
37
  Rake::Task['db:drop'].invoke
52
38
  Rake::Task['db:create'].invoke
53
- Rake::Task['db:migrate'].invoke
54
39
  end
55
40
  end