arrival 0.1.0 → 0.1.1

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.
@@ -1,8 +0,0 @@
1
- ---
2
- engines:
3
- rubocop:
4
- enabled: true
5
- channel: rubocop-0-49
6
- ratings:
7
- paths:
8
- - "**.rb"
@@ -1,31 +0,0 @@
1
- ---
2
- name: Bug report
3
- about: Create a report to help us improve
4
- title: "[BUG] "
5
- labels: ''
6
- assignees: ''
7
-
8
- ---
9
-
10
- **Describe the bug**
11
- <!-- A clear and concise description of what the bug is. -->
12
-
13
- **To Reproduce**
14
- Steps to reproduce the behavior:
15
- 1. Configure like '...'
16
- 2. Run '...'
17
- 3. See error
18
-
19
- **Expected behavior**
20
- A clear and concise description of what you expected to happen.
21
-
22
- **Back traces, screenshots, errors **
23
- If applicable, add anything that helps explaining your problem.
24
-
25
- **Setup**
26
- - OS: name, version
27
- - gh-ost version:
28
- - arrival version:
29
-
30
- **Additional context**
31
- Add any other context about the problem here.
@@ -1,20 +0,0 @@
1
- ---
2
- name: Feature request
3
- about: Suggest an idea for this project
4
- title: "[IMPROVEMENT]"
5
- labels: ''
6
- assignees: ''
7
-
8
- ---
9
-
10
- **Is your feature request related to a problem? Please describe.**
11
- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12
-
13
- **Describe the solution you'd like**
14
- A clear and concise description of what you want to happen.
15
-
16
- **Describe alternatives you've considered**
17
- A clear and concise description of any alternative solutions or features you've considered.
18
-
19
- **Additional context**
20
- Add any other context or screenshots about the feature request here.
@@ -1,4 +0,0 @@
1
- username: <%= ENV['PERCONA_DB_USER'] || 'root' %>
2
- password: <%= ENV['PERCONA_DB_PASSWORD'] || '' %>
3
- database: <%= ENV['PERCONA_DB_NAME'] || 'arrival_test' %>
4
- hostname: <%= ENV['PERCONA_DB_HOST'] || 'localhost' %>
@@ -1,24 +0,0 @@
1
- module Arrival
2
- # Represents the 'DSN' argument of Percona's pt-online-schema-change
3
- # See https://www.percona.com/doc/percona-toolkit/2.0/pt-online-schema-change.html#dsn-options
4
- class DSN
5
- # Constructor
6
- #
7
- # @param database [String, Symbol]
8
- # @param table_name [String, Symbol]
9
- def initialize(database, table_name)
10
- @database = database
11
- @table_name = table_name
12
- end
13
-
14
- # Returns the pt-online-schema-change DSN string. See
15
- # https://www.percona.com/doc/percona-toolkit/2.0/pt-online-schema-change.html#dsn-options
16
- def to_s
17
- "D=#{database},t=#{table_name}"
18
- end
19
-
20
- private
21
-
22
- attr_reader :table_name, :database
23
- end
24
- end
@@ -1,22 +0,0 @@
1
- module Arrival
2
- module LogSanitizers
3
- class PasswordSanitizer
4
- PASSWORD_REPLACEMENT = '[filtered_password]'.freeze
5
-
6
- delegate :password_argument, to: :connection_details
7
-
8
- def initialize(connection_details)
9
- @connection_details = connection_details
10
- end
11
-
12
- def execute(log_statement)
13
- return log_statement if password_argument.blank?
14
- log_statement.gsub(password_argument, PASSWORD_REPLACEMENT)
15
- end
16
-
17
- private
18
-
19
- attr_accessor :connection_details
20
- end
21
- end
22
- end
@@ -1,16 +0,0 @@
1
- module Arrival
2
- module LoggerFactory
3
- # Returns the appropriate logger instance for the given configuration. Use
4
- # :verbose option to log to the stdout
5
- #
6
- # @param verbose [Boolean]
7
- # @return [#say, #write]
8
- def self.build(sanitizers: [], verbose: true)
9
- if verbose
10
- Arrival::Logger.new(sanitizers)
11
- else
12
- Arrival::NullLogger.new
13
- end
14
- end
15
- end
16
- end
@@ -1,15 +0,0 @@
1
- module Arrival
2
- class NullLogger
3
- def say(_message, _subitem = false)
4
- # noop
5
- end
6
-
7
- def write(_text)
8
- # noop
9
- end
10
-
11
- def write_no_newline(_text)
12
- # noop
13
- end
14
- end
15
- end
data/lib/lhm.rb DELETED
@@ -1,23 +0,0 @@
1
- require 'lhm/adapter'
2
-
3
- # Defines the same global namespace as LHM's gem does to mimic its API
4
- # while providing a different behaviour. We delegate all LHM's methods to
5
- # ActiveRecord so that you don't need to modify your old LHM migrations
6
- module Lhm
7
- # Yields an adapter instance so that Lhm migration Dsl methods get
8
- # delegated to ActiveRecord::Migration ones instead
9
- #
10
- # @param table_name [String]
11
- # @param _options [Hash]
12
- # @param block [Block]
13
- def self.change_table(table_name, _options = {}, &block) # rubocop:disable Lint/UnusedMethodArgument
14
- yield Adapter.new(@migration, table_name)
15
- end
16
-
17
- # Sets the migration to apply the adapter to
18
- #
19
- # @param migration [ActiveRecord::Migration]
20
- def self.migration=(migration)
21
- @migration = migration
22
- end
23
- end
@@ -1,107 +0,0 @@
1
- require 'lhm/column_with_sql'
2
- require 'lhm/column_with_type'
3
-
4
- module Lhm
5
- # Translates Lhm DSL to ActiveRecord's one, so Lhm migrations will now go
6
- # through Percona as well, without any modification on the migration's
7
- # code
8
- class Adapter
9
- # Constructor
10
- #
11
- # @param migration [ActiveRecord::Migtration]
12
- # @param table_name [String, Symbol]
13
- def initialize(migration, table_name)
14
- @migration = migration
15
- @table_name = table_name
16
- end
17
-
18
- # Adds the specified column through ActiveRecord
19
- #
20
- # @param column_name [String, Symbol]
21
- # @param definition [String, Symbol]
22
- def add_column(column_name, definition)
23
- attributes = column_attributes(column_name, definition)
24
- migration.add_column(*attributes)
25
- end
26
-
27
- # Removes the specified column through ActiveRecord
28
- #
29
- # @param column_name [String, Symbol]
30
- def remove_column(column_name)
31
- migration.remove_column(table_name, column_name)
32
- end
33
-
34
- # Adds an index in the specified columns through ActiveRecord. Note you
35
- # can provide a name as well
36
- #
37
- # @param columns [Array<String>, Array<Symbol>, String, Symbol]
38
- # @param index_name [String]
39
- def add_index(columns, index_name = nil)
40
- options = { name: index_name } if index_name
41
- migration.add_index(table_name, columns, options || {})
42
- end
43
-
44
- # Removes the index in the given columns or by its name
45
- #
46
- # @param columns [Array<String>, Array<Symbol>, String, Symbol]
47
- # @param index_name [String]
48
- def remove_index(columns, index_name = nil)
49
- options = if index_name
50
- { name: index_name }
51
- else
52
- { column: columns }
53
- end
54
- migration.remove_index(table_name, options)
55
- end
56
-
57
- # Change the column to use the provided definition, through ActiveRecord
58
- #
59
- # @param column_name [String, Symbol]
60
- # @param definition [String, Symbol]
61
- def change_column(column_name, definition)
62
- attributes = column_attributes(column_name, definition)
63
- migration.change_column(*attributes)
64
- end
65
-
66
- # Renames the old_name column to new_name by using ActiveRecord
67
- #
68
- # @param old_name [String, Symbol]
69
- # @param new_name [String, Symbol]
70
- def rename_column(old_name, new_name)
71
- migration.rename_column(table_name, old_name, new_name)
72
- end
73
-
74
- # Adds a unique index on the given columns, with the provided name if passed
75
- #
76
- # @param columns [Array<String>, Array<Symbol>, String, Symbol]
77
- # @param index_name [String]
78
- def add_unique_index(columns, index_name = nil)
79
- options = { unique: true }
80
- options.merge!(name: index_name) if index_name # rubocop:disable Performance/RedundantMerge
81
-
82
- migration.add_index(table_name, columns, options)
83
- end
84
-
85
- private
86
-
87
- attr_reader :migration, :table_name
88
-
89
- # Returns the instance of ActiveRecord column with the given name and
90
- # definition
91
- #
92
- # @param name [String, Symbol]
93
- # @param definition [String]
94
- def column(name, definition)
95
- @column ||= if definition.is_a?(Symbol)
96
- ColumnWithType.new(name, definition)
97
- else
98
- ColumnWithSql.new(name, definition)
99
- end
100
- end
101
-
102
- def column_attributes(name, definition)
103
- attributes = column(name, definition).attributes
104
- [table_name, name].concat(attributes)
105
- end
106
- end
107
- end
@@ -1,96 +0,0 @@
1
- require 'forwardable'
2
-
3
- module Lhm
4
- # Abstracts the details of a table column definition when specified with a MySQL
5
- # column definition string
6
- class ColumnWithSql
7
- extend Forwardable
8
-
9
- # Returns the column's class to be used
10
- #
11
- # @return [Constant]
12
- def self.column_factory
13
- ::ActiveRecord::ConnectionAdapters::ArrivalAdapter::Column
14
- end
15
-
16
- # Constructor
17
- #
18
- # @param name [String, Symbol]
19
- # @param definition [String]
20
- def initialize(name, definition)
21
- @name = name
22
- @definition = definition
23
- end
24
-
25
- # Returns the column data as an Array to be used with the splat operator.
26
- # See Lhm::Adaper#add_column
27
- #
28
- # @return [Array]
29
- def attributes
30
- [type, column_options]
31
- end
32
-
33
- private
34
-
35
- def_delegators :column, :limit, :type, :default, :null
36
-
37
- attr_reader :name, :definition
38
-
39
- # TODO: investigate
40
- #
41
- # Rails doesn't take into account lenght argument of INT in the
42
- # definition, as an integer it will default it to 4 not an integer
43
- #
44
- # Returns the columns data as a Hash
45
- #
46
- # @return [Hash]
47
- def column_options
48
- { limit: column.limit, default: column.default, null: column.null }
49
- end
50
-
51
- # Returns the column instance with the provided data
52
- #
53
- # @return [column_factory]
54
- def column
55
- cast_type = ActiveRecord::Base.connection.send(:lookup_cast_type, definition)
56
- metadata = ActiveRecord::ConnectionAdapters::SqlTypeMetadata.new(
57
- type: cast_type.type,
58
- sql_type: definition,
59
- limit: cast_type.limit
60
- )
61
- mysql_metadata = ActiveRecord::ConnectionAdapters::MySQL::TypeMetadata.new(metadata)
62
- @column ||= self.class.column_factory.new(
63
- name,
64
- default_value,
65
- mysql_metadata,
66
- null_value
67
- )
68
- end
69
-
70
- # Gets the DEFAULT value the column takes as specified in the
71
- # definition, if any
72
- #
73
- # @return [String, NilClass]
74
- def default_value
75
- match = if definition =~ /timestamp|datetime/i
76
- /default '?(.+[^'])'?/i.match(definition)
77
- else
78
- /default '?(\w+)'?/i.match(definition)
79
- end
80
-
81
- return unless match
82
-
83
- match[1].downcase != 'null' ? match[1] : nil
84
- end
85
-
86
- # Checks whether the column accepts NULL as specified in the definition
87
- #
88
- # @return [Boolean]
89
- def null_value
90
- match = /((\w*) NULL)/i.match(definition)
91
- return true unless match
92
-
93
- match[2].downcase == 'not' ? false : true
94
- end
95
- end
96
- end
@@ -1,29 +0,0 @@
1
- module Lhm
2
- # Abstracts the details of a table column definition when specified with a type
3
- # as a symbol. This is the regular ActiveRecord's #add_column syntax:
4
- #
5
- # add_column :tablenames, :field, :string
6
- #
7
- class ColumnWithType
8
- # Constructor
9
- #
10
- # @param name [String, Symbol]
11
- # @param definition [Symbol]
12
- def initialize(name, definition)
13
- @name = name
14
- @definition = definition
15
- end
16
-
17
- # Returns the column data as an Array to be used with the splat operator.
18
- # See Lhm::Adaper#add_column
19
- #
20
- # @return [Array]
21
- def attributes
22
- [definition]
23
- end
24
-
25
- private
26
-
27
- attr_reader :definition
28
- end
29
- end