nonschema_migrations 6.0.alpha1 → 6.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,179 +1,211 @@
1
- class NonschemaMigrator < ActiveRecord::Migrator
2
- # This class related to data migration.
3
- # Used in rake tasks (rake data:[migrate|rollback|up|down])
4
-
5
- def initialize(direction, migrations, no_op, target_version = nil)
6
- @direction = direction
7
- @target_version = target_version
8
- @migrated_versions = nil
9
- @migrations = migrations
10
-
11
- validate(@migrations)
12
-
13
- ActiveRecord::InternalMetadata.create_table
14
- end
15
-
16
- if defined?(ActiveRecord::MigrationContext)
17
- class NonSchemaMigration < ActiveRecord::SchemaMigration
18
- def self.table_name
19
- NonschemaMigrator.schema_migrations_table_name
20
- end
21
- end
22
-
23
- class MigrationContext < ActiveRecord::MigrationContext
24
- def initialize(migrations_paths, data_migration)
25
-
26
- # super(migrations_paths, data_migration)
27
- @migrations_paths = migrations_paths
28
-
29
- @schema_migration = NonschemaMigrator::NonSchemaMigration
30
- end
31
-
32
- def new_migrator(*args)
33
- result = NonschemaMigrator.new(*args)
34
- result.migration_context = self
35
- result
36
- end
37
-
38
- # these methods are copied from ActiveRecord::Migrator
39
- # replaced:
40
- # 1.) ActiveRecord::NonSchemaMigration with @schema_migration
41
- # 2.) ActiveRecord::Migrator.new with new_migrator
42
-
43
- def get_all_versions
44
- if @schema_migration.table_exists?
45
- @schema_migration.all_versions.map(&:to_i)
46
- else
47
- []
48
- end
49
- end
50
-
51
- def migrations_status
52
- db_list = @schema_migration.normalized_versions
53
-
54
- file_list = migration_files.map do |file|
55
- version, name, scope = parse_migration_filename(file)
56
- raise IllegalMigrationNameError.new(file) unless version
57
- version = @schema_migration.normalize_migration_number(version)
58
- status = db_list.delete(version) ? "up" : "down"
59
- [status, version, (name + scope).humanize]
60
- end.compact
61
-
62
- db_list.map! do |version|
63
- ["up", version, "********** NO FILE **********"]
64
- end
65
-
66
- (db_list + file_list).sort_by { |_, version, _| version }
67
- end
68
-
69
- def rollback(steps)
70
- move(:down, steps)
71
- end
1
+ require_relative "./active_record/data_tasks.rb"
72
2
 
73
- def move(direction, steps)
74
- migrator = new_migrator(direction, migrations, schema_migration)
3
+ class NonschemaMigrator
75
4
 
76
- if current_version != 0 && !migrator.current_migration
77
- raise UnknownMigrationVersionError.new(current_version)
78
- end
5
+ # include ActiveRecord::Tasks::DatabaseTasks
79
6
 
80
- start_index =
81
- if current_version == 0
82
- 0
83
- else
84
- migrator.migrations.index(migrator.current_migration)
85
- end
86
-
87
- finish = migrator.migrations[start_index + steps]
88
- version = finish ? finish.version : 0
89
- send(direction, version)
90
- end
91
-
92
- def up(target_version = nil)
93
- selected_migrations = if block_given?
94
- migrations.select { |m| yield m }
95
- else
96
- migrations
97
- end
98
-
99
- new_migrator(:up, selected_migrations, target_version).migrate
100
- end
101
-
102
- def down(target_version = nil)
103
- selected_migrations = if block_given?
104
- migrations.select { |m| yield m }
105
- else
106
- migrations
107
- end
108
-
109
- new_migrator(:down, selected_migrations, target_version).migrate
110
- end
111
- end
112
-
113
- class << self
114
- def context(path)
115
- NonschemaMigrator::MigrationContext.new(path, ActiveRecord::DataMigration)
116
- end
117
-
118
- def new_migrator(path, *args)
119
- result = self.new(*args)
120
- result.migration_context=context(path)
121
- result
122
- end
123
-
124
- def migrate(path)
125
- context(path).migrate()
126
- end
127
-
128
- def rollback(path, steps = 1)
129
- context(path).rollback(steps)
130
- end
131
-
132
- def run(direction, path, target_version)
133
- new_migrator(path, direction, context(path).migrations, target_version).run
134
- end
135
- end
7
+ # This class related to data migration.
8
+ # Used in rake tasks (rake data:[migrate|rollback|up|down])
136
9
 
137
- def migration_context=(context)
138
- @migration_context = context
139
- end
140
10
 
141
- def load_migrated
142
- @migrated_versions = Set.new(@migration_context.get_all_versions)
143
- end
11
+ def self.migrate(version = nil)
12
+ ActiveRecord::Tasks::DataTasks.migrate(version)
144
13
  end
145
14
 
146
- def record_version_state_after_migrating(version)
147
- if down?
148
- migrated.delete(version)
149
- ActiveRecord::DataMigration.where(:version => version.to_s).delete_all
150
- else
151
- migrated << version
152
- ActiveRecord::DataMigration.create!(:version => version.to_s)
153
- end
15
+ def self.rollback
16
+ ActiveRecord::Tasks::DataTasks.rollback
154
17
  end
155
18
 
156
-
157
- class <<self
158
- def migrations_path
159
- MIGRATIONS_PATH
160
- end
161
-
162
- def schema_migrations_table_name
163
- 'data_migrations'
164
- end
165
-
166
- def schema_migrations_table_name
167
- ActiveRecord::DataMigration.table_name
168
- end
169
-
170
- def get_all_versions(connection = ActiveRecord::Base.connection)
171
- if connection.table_exists?(schema_migrations_table_name)
172
- ActiveRecord::DataMigration.all.map { |x| x.version.to_i }.sort
173
- else
174
- []
175
- end
176
- end
19
+ def initialize(direction, migrations, no_op, target_version = nil)
20
+ # @direction = direction
21
+ # @target_version = target_version
22
+ # @migrated_versions = nil
23
+ # @migrations = migrations
24
+ #
25
+ # validate(@migrations)
26
+ #
27
+ # ActiveRecord::DataMigration.create_table
177
28
  end
29
+
30
+ # if defined?(ActiveRecord::MigrationContext)
31
+ # class NonSchemaMigration < ActiveRecord::SchemaMigration
32
+ # def self.table_name
33
+ # NonschemaMigrator.schema_migrations_table_name
34
+ # end
35
+ #
36
+ # def self.get_all_versions
37
+ # versions
38
+ # end
39
+ #
40
+ # def versions
41
+ # sm = Arel::SelectManager.new(arel_table)
42
+ # sm.project(arel_table[primary_key])
43
+ # sm.order(arel_table[primary_key].asc)
44
+ #
45
+ # connection.select_values(sm, "#{self.class} Load")
46
+ # end
47
+ # end
48
+ #
49
+ # class MigrationContext < ActiveRecord::MigrationContext
50
+ # def initialize(migrations_paths, data_migration)
51
+ #
52
+ # # super(migrations_paths, data_migration)
53
+ # @migrations_paths = migrations_paths
54
+ #
55
+ # @schema_migration = NonschemaMigrator::NonSchemaMigration
56
+ # end
57
+ #
58
+ # def new_migrator(*args)
59
+ # result = NonschemaMigrator.new(*args)
60
+ # result.migration_context = self
61
+ # result
62
+ # end
63
+ #
64
+ # def schema_migrations_table_name
65
+ # 'data_migrations'
66
+ # end
67
+ #
68
+ # # these methods are copied from ActiveRecord::Migrator
69
+ # # replaced:
70
+ # # 1.) ActiveRecord::NonSchemaMigration with @schema_migration
71
+ # # 2.) ActiveRecord::Migrator.new with new_migrator
72
+ #
73
+ # def get_all_versions
74
+ # byebug
75
+ # if connection.table_exists?(schema_migrations_table_name)
76
+ # @schema_migration.all_versions.map(&:to_i)
77
+ # else
78
+ # []
79
+ # end
80
+ # end
81
+ #
82
+ # def migrations_status
83
+ # db_list = @schema_migration.normalized_versions
84
+ #
85
+ # file_list = migration_files.map do |file|
86
+ # version, name, scope = parse_migration_filename(file)
87
+ # raise IllegalMigrationNameError.new(file) unless version
88
+ # version = @schema_migration.normalize_migration_number(version)
89
+ # status = db_list.delete(version) ? "up" : "down"
90
+ # [status, version, (name + scope).humanize]
91
+ # end.compact
92
+ #
93
+ # db_list.map! do |version|
94
+ # ["up", version, "********** NO FILE **********"]
95
+ # end
96
+ #
97
+ # (db_list + file_list).sort_by { |_, version, _| version }
98
+ # end
99
+ #
100
+ # def rollback(steps)
101
+ # move(:down, steps)
102
+ # end
103
+ #
104
+ # def move(direction, steps)
105
+ # migrator = new_migrator(direction, migrations, nil, schema_migration)
106
+ #
107
+ # if current_version != 0 && !migrator.current_migration
108
+ # raise UnknownMigrationVersionError.new(current_version)
109
+ # end
110
+ #
111
+ # start_index =
112
+ # if current_version == 0
113
+ # 0
114
+ # else
115
+ # migrator.migrations.index(migrator.current_migration)
116
+ # end
117
+ #
118
+ # finish = migrator.migrations[start_index + steps]
119
+ # version = finish ? finish.version : 0
120
+ # send(direction, version)
121
+ # end
122
+ #
123
+ # def up(target_version = nil)
124
+ # selected_migrations = if block_given?
125
+ # migrations.select { |m| yield m }
126
+ # else
127
+ # migrations
128
+ # end
129
+ #
130
+ # new_migrator(:up, selected_migrations, nil, target_version).migrate
131
+ # end
132
+ #
133
+ # def down(target_version = nil)
134
+ # selected_migrations = if block_given?
135
+ # migrations.select { |m| yield m }
136
+ # else
137
+ # migrations
138
+ # end
139
+ #
140
+ # new_migrator(:down, selected_migrations, nil, target_version).migrate
141
+ # end
142
+ # end
143
+ #
144
+ # class << self
145
+ # def context(path)
146
+ # NonschemaMigrator::MigrationContext.new(path, ActiveRecord::DataMigration)
147
+ # end
148
+ #
149
+ # def new_migrator(path, *args)
150
+ # result = self.new(*args)
151
+ # result.migration_context=context(path)
152
+ # result
153
+ # end
154
+ #
155
+ # def migrate(path)
156
+ # context(path).migrate()
157
+ # end
158
+ #
159
+ # def rollback(path, steps = 1)
160
+ # context(path).rollback(steps)
161
+ # end
162
+ #
163
+ # def run(direction, path, target_version)
164
+ # new_migrator(path, direction, context(path).migrations, nil, target_version).run
165
+ # end
166
+ # end
167
+ #
168
+ # def migration_context=(context)
169
+ # @migration_context = context
170
+ # end
171
+ #
172
+ # def load_migrated
173
+ # @migrated_versions = Set.new(@migration_context.get_all_versions)
174
+ # end
175
+ #
176
+ # def schema_migrations_table_name
177
+ # 'data_migrations'
178
+ # end
179
+ #
180
+ # end
181
+ #
182
+ # def record_version_state_after_migrating(version)
183
+ # if down?
184
+ # migrated.delete(version)
185
+ # ActiveRecord::DataMigration.where(:version => version.to_s).delete_all
186
+ # else
187
+ # migrated << version
188
+ # ActiveRecord::DataMigration.create!(:version => version.to_s)
189
+ # end
190
+ # end
191
+ #
192
+ #
193
+ # class <<self
194
+ # def migrations_path
195
+ # MIGRATIONS_PATH
196
+ # end
197
+ #
198
+ # def schema_migrations_table_name
199
+ # 'data_migrations'
200
+ # end
201
+ #
202
+ # def get_all_versions(connection = ActiveRecord::Base.connection)
203
+ # if connection.table_exists?(schema_migrations_table_name)
204
+ # ActiveRecord::DataMigration.all.map { |x| x.version.to_i }.sort
205
+ # else
206
+ # []
207
+ # end
208
+ # end
209
+ # end
178
210
  end
179
211
 
data/lib/tasks/data.rb CHANGED
@@ -12,15 +12,9 @@ namespace :data do
12
12
 
13
13
  desc "rollback data migration (#{MIGRATIONS_PATH})"
14
14
  task :rollback => :data_migration_dependencies do
15
- NonschemaMigrator.rollback(MIGRATIONS_PATH)
15
+ NonschemaMigrator.rollback
16
16
  end
17
17
 
18
- desc "honeybear (#{MIGRATIONS_PATH})"
19
- task :honeybear => :data_migration_dependencies do
20
- puts "hello honeybear"
21
- end
22
-
23
-
24
18
  namespace :migrate do
25
19
  desc %Q{runs the "up" for a given _data_ migration VERSION}
26
20
  task :up => :data_migration_dependencies do
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nonschema_migrations
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.alpha1
4
+ version: '6.6'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Fleetwood-Boldt
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-17 00:00:00.000000000 Z
11
+ date: 2024-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activerecord
14
+ name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 7.0.0.alpha2
19
+ version: '7.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: '7.1'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - '='
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '7.1'
30
+ - - ">="
25
31
  - !ruby/object:Gem::Version
26
- version: 7.0.0.alpha2
32
+ version: '7.1'
27
33
  description: Separate schema-only migrations from nonschema (data) migrations in your
28
34
  Rails app
29
35
  email: code@jasonfb.net
@@ -31,12 +37,39 @@ executables: []
31
37
  extensions: []
32
38
  extra_rdoc_files: []
33
39
  files:
40
+ - ".bundle/config"
41
+ - ".github/FUNDING.yml"
42
+ - ".gitignore"
43
+ - ".travis.yml"
44
+ - Appraisals
45
+ - Gemfile
46
+ - Gemfile.lock
47
+ - LICENCE.md
48
+ - README.md
49
+ - Rakefile
50
+ - gemfiles/.bundle/config
51
+ - gemfiles/rails_4_0.gemfile
52
+ - gemfiles/rails_4_0.gemfile.lock
53
+ - gemfiles/rails_4_1.gemfile
54
+ - gemfiles/rails_4_1.gemfile.lock
55
+ - gemfiles/rails_4_2.gemfile
56
+ - gemfiles/rails_4_2.gemfile.lock
57
+ - gemfiles/rails_5_0.gemfile
58
+ - gemfiles/rails_5_0.gemfile.lock
59
+ - gemfiles/rails_5_1.gemfile
60
+ - gemfiles/rails_5_1.gemfile.lock
61
+ - gemfiles/rails_5_2.gemfile
62
+ - gemfiles/rails_5_2.gemfile.lock
63
+ - gemfiles/rails_6_0.gemfile
34
64
  - lib/active_record/data_migration.rb
65
+ - lib/active_record/data_tasks.rb
35
66
  - lib/generators/data_migration_generator.rb
36
67
  - lib/generators/data_migrations/install_generator.rb
37
68
  - lib/generators/data_migrations/templates/create_data_migrations.rb
69
+ - lib/generators/data_migrations/templates/migration.rb
38
70
  - lib/nonschema_migrations.rb
39
71
  - lib/nonschema_migrations/railtie.rb
72
+ - lib/nonschema_migrations/version.rb
40
73
  - lib/nonschema_migrator.rb
41
74
  - lib/tasks/data.rb
42
75
  homepage: https://github.com/jasonfb/nonschema_migrations
@@ -46,15 +79,11 @@ metadata:
46
79
  source_code_uri: https://github.com/jasonfb/nonschema_migrations
47
80
  documentation_uri: https://jasonfleetwoodboldt.com/my-open-source-projects/nonschema-migrations/
48
81
  homepage_uri: https://heliosdev.shop/
49
- post_install_message: |
50
- ---------------------------------------------
51
- Welcome to Nonschema Migrations
52
- to set up, please run
53
-
54
- rails generate data_migrations:install
55
-
56
- For support please check us out at https://heliosdev.shop/
57
- ---------------------------------------------
82
+ post_install_message: "---------------------------------------------\nWelcome to Nonschema
83
+ Migrations\n\n1. run set up data migrations:\nrails generate data_migrations:install\n2.
84
+ to create a data migration use\nrails generate data_migration SetupExampleData\n\nYou
85
+ can think of data migrations like seed data for production, staging, and dev environments.
86
+ \n\nFor support please see https://heliosdev.shop/\n---------------------------------------------\n"
58
87
  rdoc_options: []
59
88
  require_paths:
60
89
  - lib
@@ -65,11 +94,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
65
94
  version: '0'
66
95
  required_rubygems_version: !ruby/object:Gem::Requirement
67
96
  requirements:
68
- - - ">"
97
+ - - ">="
69
98
  - !ruby/object:Gem::Version
70
- version: 1.3.1
99
+ version: '0'
71
100
  requirements: []
72
- rubygems_version: 3.1.4
101
+ rubygems_version: 3.4.10
73
102
  signing_key:
74
103
  specification_version: 4
75
104
  summary: Nonschema(data-only) migrations for your Rails app