db_supplier 0.0.2 → 0.1.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: 622d6fa57555ac4fbbc58770cd67b34cebaa639f
4
- data.tar.gz: 7eb8e5170133a3470174641a2a550f18b03519c3
3
+ metadata.gz: 533c11b3bc295ab99df5d77dc9a4bcc67bcb7bc4
4
+ data.tar.gz: f5794c726b53c1c61cc95625c11051a79a27e035
5
5
  SHA512:
6
- metadata.gz: 4c55a26b34b9c4dd4c9502ee97733995157bae4a0cce796b1f243f6374639e02a36209e725c42476a8c043833695b2e780a2cfb69f7f8835d7bbacea30ca79b2
7
- data.tar.gz: b0caeb1f65ede478e88e266d708cd3235abadc76d0cfdcf8a7975344a724c6908bd4b76936b17553cfce7d7ae89cc614b0384fdc9f8304d4540bc263a7c712cd
6
+ metadata.gz: 3aba1be43ec02176b3d8290228710bd0d010d4048a381315003092001b50714766880fa1a3a1b30af1a2fbdada1a4d5b534cdd9fa942a87371118ffb0311623b
7
+ data.tar.gz: c45c45bc2f540801088cd548372802fa9ad4e271b3a7a8578faa183a5d7e1c517ffc3240dce9b1161ce389f92f4c6a2e2fe79059a6b97442a769e5b7a2192f54
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 2.1
5
+ gemfile:
6
+ - Gemfile
7
+ script: bundle exec rspec
data/README.md CHANGED
@@ -1,7 +1,11 @@
1
1
  # DBSupplier
2
+ [![Build Status](https://travis-ci.org/ryopeko/db_supplier.svg?branch=master)](https://travis-ci.org/ryopeko/db_supplier)
3
+
2
4
  Migration tool from external database's DDL.
3
5
  Fetch sql from GitHub repository and migrate local database.
4
6
 
7
+ ![demo](https://cloud.githubusercontent.com/assets/192008/4487362/3443a748-49fa-11e4-87ef-88661b00fcc5.gif)
8
+
5
9
  ## Installation
6
10
 
7
11
  Add this line to your application's Gemfile:
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "db_supplier"
7
- spec.version = '0.0.2'
7
+ spec.version = '0.1.0'
8
8
  spec.authors = ["ryopeko"]
9
9
  spec.email = ["ryopeko@gmail.com"]
10
10
  spec.summary = %q{Migration tool from external database's DDL}
@@ -23,4 +23,8 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "rake", "~> 10.0"
24
24
  spec.add_development_dependency "sqlite3"
25
25
  spec.add_development_dependency "pry"
26
+ spec.add_development_dependency "rspec"
27
+ spec.add_development_dependency "rspec-mocks"
28
+ spec.add_development_dependency "simplecov"
29
+ spec.add_development_dependency "tapp"
26
30
  end
@@ -14,6 +14,7 @@ module DBSupplier
14
14
  @configurations = config
15
15
 
16
16
  @schema_repository = config[:schema_repository]
17
+ @schema_ref = config[:schema_ref] || 'master'
17
18
  @schema_files = config[:schema_files].symbolize_keys
18
19
  @access_token = config[:access_token]
19
20
 
@@ -57,12 +58,13 @@ module DBSupplier
57
58
  end
58
59
 
59
60
  def fetch_sql(db_name)
60
- migration_file_paths = Array(@schema_files.fetch(db_name.to_sym))
61
+ migration_file_paths = @schema_files.try(:fetch, db_name.to_sym) || (raise RuntimeError, "undefined #{db_name} schemat")
61
62
  repository = @schema_repository || (raise RuntimeError, 'undefined schema repository')
62
63
 
63
- migration_file_paths.map do |path|
64
+ Array(migration_file_paths).map do |path|
64
65
  client.contents(
65
66
  repository,
67
+ ref: @schema_ref,
66
68
  path: path,
67
69
  headers: {
68
70
  accept: 'application/vnd.github.VERSION.raw'
@@ -0,0 +1,123 @@
1
+ require 'spec_helper.rb'
2
+ require 'db_supplier/migrator'
3
+ require 'active_record'
4
+ require 'logger'
5
+
6
+ def migrate_class
7
+ DBSupplier::Migrator.dup
8
+ end
9
+
10
+ describe DBSupplier::Migrator do
11
+ describe ".client" do
12
+ context "when access_token is not present" do
13
+ it { expect { migrate_class.client }.to raise_error(RuntimeError) }
14
+ end
15
+
16
+ context "when access_token is present" do
17
+ let (:set_access_token) {
18
+ migrate_class.tap {|s|
19
+ s.configurations = {
20
+ access_token: 'access_token',
21
+ schema_files: { foo: 'bar' }
22
+ }
23
+ }
24
+ }
25
+
26
+ it { expect(set_access_token.client).to be_a_kind_of(Octokit::Client) }
27
+ end
28
+ end
29
+
30
+ describe ".databases" do
31
+ context "when schema_files is not present" do
32
+ it { expect(migrate_class.databases).to be_empty }
33
+ end
34
+
35
+ context "when schema_files is present" do
36
+ let (:database_name) { :foo }
37
+ let (:databases) { { database_name => 'bar' } }
38
+ let (:set_databases) {
39
+ migrate_class.tap {|s|
40
+ s.configurations = {
41
+ access_token: 'access_token',
42
+ schema_files: databases
43
+ }
44
+ }
45
+ }
46
+
47
+ it { expect(set_databases.databases).to eq [database_name] }
48
+ end
49
+ end
50
+
51
+ describe ".fetch_sql" do
52
+ context "when schema_repository is not present" do
53
+ it { expect { migrate_class.fetch_sql(:db_name) }.to raise_error(RuntimeError) }
54
+ end
55
+
56
+ context "when repository is not present" do
57
+ let (:set_schema_files) {
58
+ migrate_class.tap {|s|
59
+ s.configurations = {
60
+ access_token: 'access_token',
61
+ schema_files: { foo: 'bar' }
62
+ }
63
+ }
64
+ }
65
+
66
+ it { expect { set_schema_files.fetch_sql(:foo) }.to raise_error(RuntimeError) }
67
+ end
68
+
69
+ context "when schema_repository and repository are present" do
70
+ let (:db_name) { :foo }
71
+ let (:set_all_args) {
72
+ migrate_class.tap {|s|
73
+ s.configurations = {
74
+ schema_repository: 'repo_name',
75
+ access_token: 'access_token',
76
+ schema_files: { db_name => 'bar' }
77
+ }
78
+ }
79
+ }
80
+
81
+ allow_any_instance_of(Octokit::Client).to receive(:contents).and_return('sql')
82
+
83
+ it { expect(set_all_args.fetch_sql(db_name)).to eq ['sql'] }
84
+ end
85
+ end
86
+
87
+ describe ".migrate" do
88
+ context "when migrator can execute query" do
89
+ before do
90
+ @db_name = 'external_db_test.sqlite3'
91
+
92
+ ActiveRecord::Base.configurations = {
93
+ 'external_database_test' => {
94
+ adapter: 'sqlite3',
95
+ database: @db_name
96
+ }
97
+ }
98
+
99
+ migrator = migrate_class.tap {|s|
100
+ s.configurations = {
101
+ schema_repository: 'repo_name',
102
+ access_token: 'access_token',
103
+ schema_files: { external_database_test: 'foo.sql' },
104
+ logger: Logger.new('/dev/null')
105
+ }
106
+ }
107
+ @table_name = 'foo_table'
108
+
109
+ allow(migrator.client).to receive(:contents).and_return(
110
+ "CREATE TABLE \"#{@table_name}\" (\"id\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, \"name\" varchar(255) NOT NULL)"
111
+ )
112
+
113
+ migrator.migrate
114
+ end
115
+
116
+ after do
117
+ FileUtils.rm @db_name
118
+ end
119
+
120
+ it { expect(ActiveRecord::Base.connection.tables).to include(@table_name) }
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,24 @@
1
+ require 'rspec/mocks/standalone'
2
+ require 'simplecov'
3
+ require 'tapp'
4
+
5
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
6
+ SimpleCov::Formatter::HTMLFormatter
7
+ ]
8
+
9
+ SimpleCov.start do
10
+ add_filter 'spec'
11
+ end
12
+
13
+ RSpec.configure do |config|
14
+ config.filter_run :focus
15
+ config.run_all_when_everything_filtered = true
16
+
17
+ if config.files_to_run.one?
18
+ config.full_backtrace = true
19
+ config.default_formatter = 'doc'
20
+ end
21
+
22
+ config.order = :random
23
+ Kernel.srand config.seed
24
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: db_supplier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ryopeko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-23 00:00:00.000000000 Z
11
+ date: 2014-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -94,6 +94,62 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec-mocks
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: tapp
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
97
153
  description:
98
154
  email:
99
155
  - ryopeko@gmail.com
@@ -102,6 +158,8 @@ extensions: []
102
158
  extra_rdoc_files: []
103
159
  files:
104
160
  - ".gitignore"
161
+ - ".rspec"
162
+ - ".travis.yml"
105
163
  - Gemfile
106
164
  - LICENSE.txt
107
165
  - README.md
@@ -112,6 +170,8 @@ files:
112
170
  - lib/db_supplier/rails/railtie.rb
113
171
  - lib/db_supplier/rails/tasks.rake
114
172
  - sample.rb
173
+ - spec/migrator_spec.rb
174
+ - spec/spec_helper.rb
115
175
  homepage: https://github.com/ryopeko/db_supplier
116
176
  licenses:
117
177
  - MIT
@@ -136,5 +196,6 @@ rubygems_version: 2.2.2
136
196
  signing_key:
137
197
  specification_version: 4
138
198
  summary: Migration tool from external database's DDL
139
- test_files: []
140
- has_rdoc:
199
+ test_files:
200
+ - spec/migrator_spec.rb
201
+ - spec/spec_helper.rb