multi_ar 1.1.2 → 2.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6157c0dec341f35edadb6c5e12b406f0e73c5016
4
- data.tar.gz: e0085db67def7b4e394f95521b69d54e663a4397
3
+ metadata.gz: 8a68d8b3b4fdd989b89ab5aa655fd6ac2fec91c5
4
+ data.tar.gz: 29520a7ac32bf608d7c358f16c9a20708c672dd2
5
5
  SHA512:
6
- metadata.gz: 24b8d210c4258b08a521ce16aa4b1666be48b5620d17f2a35b10b9483e5aeab53afee6f7341c435e56160f8631c65885e37710d620c7a3a9467b2bac11eb3fb7
7
- data.tar.gz: 5a07c1661eeb796dc45ebe52d243b1757f5067c0f3b409b2e45f11ec398b93a830ad4c89c23d947bda830bebde5133737bfeba7726e3868b491ad091cc108dd5
6
+ metadata.gz: 5a61a6393a304c3686985ff31371489437a7b17115eb16e1b9661e7f13281487399a6e2c8ea06ef992b027ba65ce93a7e896f563079ac1d89707b6befd75e7bf
7
+ data.tar.gz: 563de82ff9c3661a85ca339c177edb8ed1028d042cc111f68e4f955aee4a431e77ab6a64f1926ad5d45ad796608ede7b2da0d431974b2a14b8ab83cee09588a1
checksums.yaml.gz.sig CHANGED
Binary file
@@ -1,8 +1,8 @@
1
1
 
2
2
  # TODO: we don’t want to unconditionally load Rails as that gives too many unnecessary dependencies,
3
3
  # but if we need it for something, it should be conditional dep through dep-gem or just used if present
4
- require "rails"
5
- require "rails/application"
4
+ #require "rails"
5
+ #require "rails/application"
6
6
 
7
7
  require "active_record"
8
8
  require "active_record/tasks/database_tasks"
@@ -20,13 +20,12 @@ module MultiAR
20
20
  def self.initialize db_config: "config/database.yaml", migration_dir: "db/migrate"
21
21
  @@initialized ||= false
22
22
  return if @@initialized == true
23
- Class.new(Rails::Application) unless Rails.application
23
+ #Class.new(Rails::Application) unless Rails.application
24
24
  raise "The database configuration file was not found. You can be pass path to it with db_config attribute. Current path: #{db_config}" unless File.exist? db_config
25
25
  db_config_data = YAML.load(ERB.new(File.read db_config).result)
26
26
  include ActiveRecord::Tasks
27
27
 
28
28
  ActiveRecord::Base.configurations = ::ActiveRecord::Tasks::DatabaseTasks.database_configuration = db_config_data
29
- ActiveRecord::Tasks::DatabaseTasks.migrations_paths = [ migration_dir ] # this is only used by db:new_migration rake task. # TODO: because of that, maybe we want to handle this differently?
30
29
  @@initialized = true
31
30
  end
32
31
 
@@ -1,5 +1,6 @@
1
1
 
2
2
  require "fileutils"
3
+ require "pathname"
3
4
  require "trollop"
4
5
 
5
6
  require_relative "../multi_ar"
@@ -19,7 +20,7 @@ module MultiAR
19
20
  # - dry # boolean
20
21
  # - environment # `true` or `String`
21
22
  # - verbose # boolean
22
- # - databases # `true` or `Array`
23
+ # - databases # `false` or `Array`, by default asks for databases
23
24
  # - migration_dir # String
24
25
  #
25
26
  # If value is `true`, an option will be added to CLI interface. If the value is something else, the option will be populated by this value instead.
@@ -55,15 +56,18 @@ module MultiAR
55
56
  @run_by_default = false
56
57
  end
57
58
 
59
+ DEFAULT_DB_CONFIG = "config/database.yaml"
60
+
58
61
  # @note Consumes ARGV, create copy of it if you need it for something.
59
62
  # @todo hardcode shorthands
60
63
  def cli
61
64
  p = Trollop::Parser.new
62
65
  p.version @version if @version
63
66
  p.banner @description if @description
64
- p.opt "init", "Create stub environment with configuration and database.yaml", type: :string
65
- p.opt "databases", "List of databases to perform operations", type: :strings if @options["databases"] == true
66
- p.opt "db_config", "Path to database config file", type: :string, default: "config/database.yaml" if @options["db_config"] == true
67
+ p.opt "init", "Create stub environment with configuration and database.yaml. " +
68
+ "For current dir, use “.”.", type: :string
69
+ p.opt "databases", "List of databases to perform operations", type: :strings if(@options["databases"] != false && !@options["databases"].respond_to?(:each))
70
+ p.opt "db_config", "Path to database config file", type: :string, default: DEFAULT_DB_CONFIG if @options["db_config"] == true
67
71
  p.opt "config", "Path to MultiAR framework config file", type: :string, default: "config/settings.yaml" if @options["config"] == true
68
72
  p.opt "dry", "Run the program without doing anything. Useful for debugging with -v", type: :flag if @options["dry"] == true
69
73
  p.opt "environment", "The environment to use. Corresponds to database config name " +
@@ -130,35 +134,37 @@ module MultiAR
130
134
  private
131
135
 
132
136
  def init_multi_ar
133
- @multi_ar = MultiAR.new config: @opts["config"],
134
- databases: @opts["databases"],
135
- db_config: @opts["db_config"],
136
- environment: @opts["environment"],
137
- migration_dirs: [ @opts["migration_dir"] ]
137
+ opts = {}
138
+ opts[:db_config] = @opts["db_config"] unless opts["db_config"].nil?
139
+ opts[:migration_dirs] = [ @opts["migration_dir"] ]
140
+ opts[:config] = @opts["config"] unless @opts["config"].nil?
141
+ opts[:databases] = @opts["databases"]
142
+ opts[:environment] = @opts["environment"]
143
+ @multi_ar = MultiAR.new opts
138
144
  end
139
145
 
140
146
  # @note This method will always quit the application or raise another exception for errors. Catch SystemExit if that’s not good for you.
141
147
  def bootstrap opts
142
148
  raise "--databases must be given when bootstrapping." unless opts["databases"]
143
- raise "#{opts["init"]} already exists" if File.exist? opts["init"]
149
+ #raise "#{opts["init"]} already exists" if File.exist? opts["init"] # We don’t want to actually check it, init is more like “add missing configuration”.
144
150
 
145
151
  config_dir = "config"
146
152
  database_config = "database.yaml"
147
153
 
148
- FileUtils.mkdir opts["init"]
154
+ FileUtils.mkdir opts["init"] unless Dir.exist? opts["init"]
149
155
  Dir.chdir opts["init"] do
150
- File.write "README", bootstrap_readme(opts)
151
- File.write "Gemfile", bootstrap_gemfile
156
+ File.write "README.md", bootstrap_readme(opts) unless File.exist?("README.md")
157
+ bootstrap_gemfile
152
158
 
153
- FileUtils.mkdir config_dir
159
+ FileUtils.mkdir config_dir unless Dir.exist? config_dir
154
160
  Dir.chdir config_dir do
155
- File.write database_config, bootstrap_db_config(opts)
161
+ File.write database_config, bootstrap_db_config(opts) unless File.exist?(database_config)
156
162
  end
157
163
 
158
- run_bundler
164
+ bootstrap_config opts
159
165
  end
160
166
 
161
- puts "#{opts["init"]} has been initialized. You can now run your program at the directory."
167
+ puts "Project at dir #{opts["init"]} has been initialized. You can now run your program at the directory."
162
168
  exit 0
163
169
  end
164
170
 
@@ -170,7 +176,7 @@ module MultiAR
170
176
  str << <<-EOS.gsub(/^ {10}/, "")
171
177
  #{full_name}:
172
178
  adapter: sqlite3
173
- database: db/#{full_name}_.sqlite3
179
+ database: db/#{full_name}.sqlite3
174
180
  pool: 5
175
181
  timeout: 5000
176
182
 
@@ -182,10 +188,11 @@ module MultiAR
182
188
  end
183
189
 
184
190
  def bootstrap_gemfile
191
+
185
192
  str = <<-EOS.gsub(/^ {6}/, "")
186
193
  source "https://rubygems.org/"
187
194
 
188
- gem "#{script_name}"
195
+ gem "multi_ar"
189
196
  EOS
190
197
 
191
198
  @dependencies.each do |dep, version|
@@ -195,14 +202,24 @@ module MultiAR
195
202
  str << line
196
203
  end
197
204
 
198
- str
205
+ if File.exist?("Gemfile")
206
+ puts "NOTE: you should add following to your Gemfile:"
207
+ puts
208
+ puts str
209
+ return
210
+ end
211
+
212
+ File.write "Gemfile", str
213
+
214
+ # For convenience, we’ll run the bundler for the user in case we created the Gemfile.
215
+ run_bundler
199
216
  end
200
217
 
201
218
  def bootstrap_readme opts
202
219
  str = <<-EOS.gsub(/^ {6}/, "")
203
220
  ## #{script_name}
204
221
 
205
- This is scaffolded runtime directory for project #{script_name}, created by cimmgnd #{script_name} --init #{opts["init"]}.
222
+ This is scaffolded runtime directory for project #{project_name}, created by command #{script_name} --init #{opts["init"]}.
206
223
 
207
224
  Purpose of this scaffold is to ease usage of this #{script_name}, by providing sample configuration and ready
208
225
  bundle just ready for running. Default configuration is for SQLite3, but any databases supported
@@ -212,17 +229,39 @@ module MultiAR
212
229
 
213
230
  bundle exec #{script_name}
214
231
 
215
- #{script_name} is powered by ActiveRecord migration framework MultiAR-#{VERSION}. More information bundler can be found
216
- at its homepage: http://bundler.io
232
+ #{script_name} is powered by ActiveRecord migration framework MultiAR-#{VERSION}. More information about MultiAR
233
+ can be found at [its home page](https://github.com/Smarre/multi_ar)
234
+
235
+ More information bundler can be found [at its homepage](http://bundler.io)
217
236
  EOS
218
237
  end
219
238
 
239
+ # Writes simple config file for some defaults we can assume from input
240
+ def bootstrap_config opts
241
+ settings_file = "config/settings.yaml"
242
+ return if File.exist? settings_file
243
+ str = <<-EOF
244
+ databases:
245
+ EOF
246
+ opts["databases"].each do |database|
247
+ str << " - #{database}"
248
+ end
249
+
250
+ File.open settings_file, "w" do |f|
251
+ f.write str
252
+ end
253
+ end
254
+
220
255
  def run_bundler
221
256
  puts `bundle install`
222
257
  end
223
258
 
224
259
  def script_name
225
- @script_name ||= File.basename($0)
260
+ @script_name ||= File.basename($0).gsub("_", "\\_")
261
+ end
262
+
263
+ def project_name
264
+ Pathname.new(Dir.pwd).basename
226
265
  end
227
266
  end
228
267
  end
@@ -12,7 +12,7 @@ module ActiveRecordMigrations
12
12
  def create_migration_file
13
13
  set_local_assigns!
14
14
  validate_file_name!
15
- dir = ::ActiveRecord::Tasks::DatabaseTasks.migrations_paths.first
15
+ dir = ::ActiveRecord::Tasks::DatabaseTasks.migration_dir
16
16
  db_dir = ::ActiveRecord::Tasks::DatabaseTasks.sub_db_dir
17
17
  migration_template @migration_template, "#{dir}/#{db_dir}/#{file_name}.rb"
18
18
  end
@@ -1,20 +1,24 @@
1
1
 
2
- # TODO: we don’t want to unconditionally load Rails as that gives too many unnecessary dependencies,
3
- # but if we need it for something, it should be conditional dep through dep-gem or just used if present
4
- require "rails"
5
- require "rails/generators"
6
-
7
2
  require "active_record"
8
3
  require "active_record/tasks/database_tasks"
9
4
 
10
- require_relative "migration_generator"
11
-
12
5
  # Optionally support migration_comments
13
6
  begin
14
7
  require "migration_comments"
15
8
  rescue LoadError
16
9
  end
17
10
 
11
+ # In case there is no Rails available, let’s do simple class
12
+ begin
13
+ require "rails"
14
+ rescue LoadError
15
+ class Rails
16
+ def self.root
17
+ nil # TODO, we want MultiAR::root like thing somewhere
18
+ end
19
+ end
20
+ end
21
+
18
22
  # @api private
19
23
  module Rake
20
24
 
@@ -65,6 +69,11 @@ module Rake
65
69
 
66
70
  DSL.desc "Creates a new migration file with the specified name"
67
71
  DSL.task :new_migration, :name, :options do |t, args|
72
+ # Only migration generator requires Rails generators
73
+ require "rails"
74
+ require "rails/generators"
75
+ require_relative "migration_generator"
76
+
68
77
  name = args[:name] || ENV["name"]
69
78
  options = args[:options] || ENV["options"]
70
79
 
@@ -1,4 +1,4 @@
1
1
 
2
2
  module MultiAR
3
- VERSION = "1.1.2"
3
+ VERSION = "2.0.0"
4
4
  end
data/lib/multi_ar.rb CHANGED
@@ -29,7 +29,7 @@ module MultiAR
29
29
 
30
30
  # @param databases array of available databases
31
31
  # @todo config file is overriding parameters passed here... I think it should be other way around, but need more custom logic for that :/
32
- def initialize databases:, environment: "development", config: "config/multi_ar.yaml", db_config: "config/database.yaml", migration_dirs: []
32
+ def initialize databases:, environment: "development", config: "config/settings.yaml", db_config: "config/database.yaml", migration_dirs: []
33
33
 
34
34
  # first load config
35
35
  if not config.nil? and File.exist? config
@@ -52,8 +52,9 @@ module MultiAR
52
52
 
53
53
  Database.initialize db_config: db_config
54
54
 
55
- ActiveRecord::Tasks::DatabaseTasks.class_eval { attr_accessor :sub_db_dir }
55
+ ActiveRecord::Tasks::DatabaseTasks.class_eval { attr_accessor :sub_db_dir, :migration_dir }
56
56
  ActiveRecord::Tasks::DatabaseTasks.sub_db_dir = databases.first # TODO: I don’t think this is how it should work
57
+ ActiveRecord::Tasks::DatabaseTasks.migration_dir = migration_dirs.first # TODO: I don’t think this is how it should work
57
58
 
58
59
  @rake = ::Rake::Application.new
59
60
  ::Rake.application = @rake
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multi_ar
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samu Voutilainen
@@ -29,7 +29,7 @@ cert_chain:
29
29
  Ws73WZ+F+DOnfopIMUaeYUzKyUG+59p17ls//xzTouiLjcC9ee5ZaC9e+TzYsp4t
30
30
  ofnwRrqEHVW+zRWs/VIwm70F2Jnl5eSc3MjyhpWIC0eGFXtBY1XYCrHeCdQ=
31
31
  -----END CERTIFICATE-----
32
- date: 2015-11-23 00:00:00.000000000 Z
32
+ date: 2016-01-18 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: trollop
@@ -60,98 +60,112 @@ dependencies:
60
60
  - !ruby/object:Gem::Version
61
61
  version: '4'
62
62
  - !ruby/object:Gem::Dependency
63
- name: rails
63
+ name: rake
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '4'
68
+ version: '10.4'
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: 10.4.2
69
72
  type: :runtime
70
73
  prerelease: false
71
74
  version_requirements: !ruby/object:Gem::Requirement
72
75
  requirements:
73
76
  - - "~>"
74
77
  - !ruby/object:Gem::Version
75
- version: '4'
78
+ version: '10.4'
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 10.4.2
76
82
  - !ruby/object:Gem::Dependency
77
- name: railties
83
+ name: safe_attributes
78
84
  requirement: !ruby/object:Gem::Requirement
79
85
  requirements:
80
86
  - - "~>"
81
87
  - !ruby/object:Gem::Version
82
- version: '4'
88
+ version: '1.0'
83
89
  type: :runtime
84
90
  prerelease: false
85
91
  version_requirements: !ruby/object:Gem::Requirement
86
92
  requirements:
87
93
  - - "~>"
88
94
  - !ruby/object:Gem::Version
89
- version: '4'
95
+ version: '1.0'
90
96
  - !ruby/object:Gem::Dependency
91
- name: rake
97
+ name: redcarpet
92
98
  requirement: !ruby/object:Gem::Requirement
93
99
  requirements:
94
100
  - - "~>"
95
101
  - !ruby/object:Gem::Version
96
- version: '10.4'
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- version: 10.4.2
100
- type: :runtime
102
+ version: '3.3'
103
+ type: :development
101
104
  prerelease: false
102
105
  version_requirements: !ruby/object:Gem::Requirement
103
106
  requirements:
104
107
  - - "~>"
105
108
  - !ruby/object:Gem::Version
106
- version: '10.4'
107
- - - ">="
109
+ version: '3.3'
110
+ - !ruby/object:Gem::Dependency
111
+ name: github-markup
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
108
115
  - !ruby/object:Gem::Version
109
- version: 10.4.2
116
+ version: '1.4'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1.4'
110
124
  - !ruby/object:Gem::Dependency
111
- name: safe_attributes
125
+ name: cucumber
112
126
  requirement: !ruby/object:Gem::Requirement
113
127
  requirements:
114
128
  - - "~>"
115
129
  - !ruby/object:Gem::Version
116
- version: '1.0'
117
- type: :runtime
130
+ version: '2.1'
131
+ type: :development
118
132
  prerelease: false
119
133
  version_requirements: !ruby/object:Gem::Requirement
120
134
  requirements:
121
135
  - - "~>"
122
136
  - !ruby/object:Gem::Version
123
- version: '1.0'
137
+ version: '2.1'
124
138
  - !ruby/object:Gem::Dependency
125
- name: redcarpet
139
+ name: sqlite3
126
140
  requirement: !ruby/object:Gem::Requirement
127
141
  requirements:
128
142
  - - "~>"
129
143
  - !ruby/object:Gem::Version
130
- version: '3.3'
144
+ version: '1.3'
131
145
  type: :development
132
146
  prerelease: false
133
147
  version_requirements: !ruby/object:Gem::Requirement
134
148
  requirements:
135
149
  - - "~>"
136
150
  - !ruby/object:Gem::Version
137
- version: '3.3'
151
+ version: '1.3'
138
152
  - !ruby/object:Gem::Dependency
139
- name: github-markdown
153
+ name: rspec
140
154
  requirement: !ruby/object:Gem::Requirement
141
155
  requirements:
142
156
  - - "~>"
143
157
  - !ruby/object:Gem::Version
144
- version: '1.4'
158
+ version: '3.4'
145
159
  type: :development
146
160
  prerelease: false
147
161
  version_requirements: !ruby/object:Gem::Requirement
148
162
  requirements:
149
163
  - - "~>"
150
164
  - !ruby/object:Gem::Version
151
- version: '1.4'
165
+ version: '3.4'
152
166
  description: |-
153
- Migration support and some other relevant utilities implemented using ActiveRecord
154
- 4.
167
+ Core library for multi database support in any Ruby project for ActiveRecord 4.
168
+ Migrations are supported by optional gem multi_ar_migrations.
155
169
  email: smar@smar.fi
156
170
  executables:
157
171
  - multi_ar
@@ -190,6 +204,6 @@ rubyforge_project:
190
204
  rubygems_version: 2.4.8
191
205
  signing_key:
192
206
  specification_version: 4
193
- summary: Multi database migrations and utilities for ActiveRecord
207
+ summary: Multi database feature set for ActiveRecord
194
208
  test_files: []
195
209
  has_rdoc:
metadata.gz.sig CHANGED
Binary file