multitenancy_tools 0.1.9 → 0.1.10

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: 660954dd5f64df45380a4cc405912a4dbb8366ec
4
- data.tar.gz: c46e9cc25a12190d1648262e0cc57874dfc9914e
3
+ metadata.gz: 38a295e4d0fb3dc90035639d066137927c576551
4
+ data.tar.gz: f0ee6b1bd47bf9d4f357b599fd88aab97c7a2bfe
5
5
  SHA512:
6
- metadata.gz: 291d66ebc172a1b205c684f46bed7bc228e9b05a99d456906685bd1dc85db169a898bede1c72bfae54e350a10caa9390f7c7a15c4de62f4c76297730da27fe96
7
- data.tar.gz: cc438125123d4bc2ffa963be2445fa86973d36f7029562caf604b51767d038ba371de825648d5c1411d66d53be93d74eebfac96cef7e9dc17814ad42048aad25
6
+ metadata.gz: 1c354ac59d1a9bdd44ebcd9832f69b16e794d086104b9d8fa1ba9361c86b82715f48220479ba5a31091c3f90bc7af3e84e7028f58a78cc3ef1c9747fb1930720
7
+ data.tar.gz: acdf161ac4b73e1c57c9631c5d836d3fb892312a487d1ff9f9266d92fac985f37ca58b96e2d7a613e970954c60d48a8e0e500198627bf97c0b22f5d7f61aafd0
data/README.md CHANGED
@@ -5,8 +5,11 @@
5
5
  [![Test Coverage][cc-cov-badge]][cc-cov-details]
6
6
 
7
7
  This Ruby gem is a collection of tools that can be used to handle multitenant
8
- Ruby/Rails apps. The currently only supported database is PostgreSQL and there
9
- is no plan to support other databases.
8
+ Ruby/Rails apps. Like the name says, it is just a collection of tools and not
9
+ an opinionated implementation and does not require a specific architecture.
10
+
11
+ The currently only supported database is PostgreSQL and there is no plan to
12
+ support other databases.
10
13
 
11
14
  The documentation is [available on RubyDoc.info][docs].
12
15
 
@@ -6,10 +6,14 @@ require 'multitenancy_tools/schema_creator'
6
6
  require 'multitenancy_tools/table_dumper'
7
7
  require 'multitenancy_tools/schema_switcher'
8
8
  require 'multitenancy_tools/schema_destroyer'
9
+ require 'multitenancy_tools/functions_dumper'
9
10
 
10
11
  module MultitenancyTools
11
- # Creates a new schema using the SQL file as template.
12
+ # Creates a new schema using the SQL file as template. This SQL file can be
13
+ # generated by {SchemaDumper}.
12
14
  #
15
+ # @see SchemaCreator
16
+ # @see SchemaDumper
13
17
  # @param name [String] schema name
14
18
  # @param sql_file [String] absolute path to the SQL template
15
19
  # @param connection [ActiveRecord::ConnectionAdapters::PostgreSQLAdapter] connection adapter
@@ -17,8 +21,9 @@ module MultitenancyTools
17
21
  SchemaCreator.new(name, connection).create_from_file(sql_file)
18
22
  end
19
23
 
20
- # Removes a schema from the database.
24
+ # Drops the schema from the database.
21
25
  #
26
+ # @see SchemaDestroyer
22
27
  # @param name [String] schema name
23
28
  # @param connection [ActiveRecord::ConnectionAdapters::PostgreSQLAdapter] connection adapter
24
29
  def self.destroy(name, connection = ActiveRecord::Base.connection)
@@ -27,10 +32,32 @@ module MultitenancyTools
27
32
 
28
33
  # Uses the passed schema as the scope for all queries triggered by the block.
29
34
  #
35
+ # @see SchemaSwitcher
30
36
  # @param schema [String] schema name
31
37
  # @param connection [ActiveRecord::ConnectionAdapters::PostgreSQLAdapter] connection adapter
32
38
  # @yield The block that must be executed using the schema as scope
33
39
  def self.using(schema, connection = ActiveRecord::Base.connection, &block)
34
40
  SchemaSwitcher.new(schema, connection).run(&block)
35
41
  end
42
+
43
+ # Generates a SQL dump of the schema. Requires pg_dump.
44
+ #
45
+ # @see SchemaDumper
46
+ # @param database [String]
47
+ # @param schema [String]
48
+ # @param file [String]
49
+ def self.dump_schema(database, schema, file, **args)
50
+ SchemaDumper.new(database, schema).dump_to(file, **args)
51
+ end
52
+
53
+ # Generates a SQL dump of the table. Requires pg_dump.
54
+ #
55
+ # @see TableDumper
56
+ # @param database [String]
57
+ # @param schema [String]
58
+ # @param table [String]
59
+ # @param file [String]
60
+ def self.dump_table(database, schema, table, file, **args)
61
+ TableDumper.new(database, schema, table).dump_to(file, **args)
62
+ end
36
63
  end
@@ -0,0 +1,40 @@
1
+ module MultitenancyTools
2
+ # {FunctionsDumper} can be used to generate a SQL dump of all functions that
3
+ # are present on a PostgreSQL schema.
4
+ #
5
+ # @example
6
+ # dumper = MultitenancyTools::FunctionsDumper.new('schema name')
7
+ # dumper.dump_to('path/to/file.sql')
8
+ class FunctionsDumper
9
+ # @param schema [String] schema name
10
+ # @param connection [ActiveRecord::ConnectionAdapters::PostgreSQLAdapter] connection adapter
11
+ def initialize(schema, connection = ActiveRecord::Base.connection)
12
+ @connection = connection
13
+ @schema = @connection.quote(schema)
14
+ end
15
+
16
+ # Generates a dump and writes it into a file. Please see {IO.new} for open
17
+ # modes.
18
+ #
19
+ # @see http://ruby-doc.org/core-2.2.2/IO.html#method-c-new-label-Open+Mode
20
+ # IO Open Modes
21
+ # @param file [String] file path
22
+ # @param mode [String] IO open mode
23
+ def dump_to(file, mode: 'w')
24
+ results = @connection.execute(<<-SQL)
25
+ SELECT
26
+ trim(trailing e' \n' from pg_get_functiondef(f.oid)) || ';\n'
27
+ AS definition
28
+ FROM pg_catalog.pg_proc f
29
+ INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid)
30
+ WHERE n.nspname = #{@schema};
31
+ SQL
32
+
33
+ File.open(file, mode) do |f|
34
+ results.each do |result|
35
+ f.write result['definition']
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,3 +1,3 @@
1
1
  module MultitenancyTools
2
- VERSION = '0.1.9'
2
+ VERSION = '0.1.10'
3
3
  end
@@ -20,10 +20,12 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ['lib']
22
22
 
23
+ spec.add_dependency 'activerecord', '~> 4.2.0'
24
+ spec.add_dependency 'pg'
25
+
23
26
  spec.add_development_dependency 'bundler', '~> 1.10'
24
27
  spec.add_development_dependency 'rake', '~> 10.0'
25
28
  spec.add_development_dependency 'rspec', '~> 3.3.0'
26
- spec.add_development_dependency 'activerecord', '~> 4.2.0'
27
- spec.add_development_dependency 'pg'
28
29
  spec.add_development_dependency 'yard'
30
+ spec.add_development_dependency 'pry'
29
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multitenancy_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lenon Marcel
@@ -11,66 +11,80 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2015-08-03 00:00:00.000000000 Z
14
+ date: 2015-08-18 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
- name: bundler
17
+ name: activerecord
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
20
  - - "~>"
21
21
  - !ruby/object:Gem::Version
22
- version: '1.10'
23
- type: :development
22
+ version: 4.2.0
23
+ type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '1.10'
29
+ version: 4.2.0
30
30
  - !ruby/object:Gem::Dependency
31
- name: rake
31
+ name: pg
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ - !ruby/object:Gem::Dependency
45
+ name: bundler
32
46
  requirement: !ruby/object:Gem::Requirement
33
47
  requirements:
34
48
  - - "~>"
35
49
  - !ruby/object:Gem::Version
36
- version: '10.0'
50
+ version: '1.10'
37
51
  type: :development
38
52
  prerelease: false
39
53
  version_requirements: !ruby/object:Gem::Requirement
40
54
  requirements:
41
55
  - - "~>"
42
56
  - !ruby/object:Gem::Version
43
- version: '10.0'
57
+ version: '1.10'
44
58
  - !ruby/object:Gem::Dependency
45
- name: rspec
59
+ name: rake
46
60
  requirement: !ruby/object:Gem::Requirement
47
61
  requirements:
48
62
  - - "~>"
49
63
  - !ruby/object:Gem::Version
50
- version: 3.3.0
64
+ version: '10.0'
51
65
  type: :development
52
66
  prerelease: false
53
67
  version_requirements: !ruby/object:Gem::Requirement
54
68
  requirements:
55
69
  - - "~>"
56
70
  - !ruby/object:Gem::Version
57
- version: 3.3.0
71
+ version: '10.0'
58
72
  - !ruby/object:Gem::Dependency
59
- name: activerecord
73
+ name: rspec
60
74
  requirement: !ruby/object:Gem::Requirement
61
75
  requirements:
62
76
  - - "~>"
63
77
  - !ruby/object:Gem::Version
64
- version: 4.2.0
78
+ version: 3.3.0
65
79
  type: :development
66
80
  prerelease: false
67
81
  version_requirements: !ruby/object:Gem::Requirement
68
82
  requirements:
69
83
  - - "~>"
70
84
  - !ruby/object:Gem::Version
71
- version: 4.2.0
85
+ version: 3.3.0
72
86
  - !ruby/object:Gem::Dependency
73
- name: pg
87
+ name: yard
74
88
  requirement: !ruby/object:Gem::Requirement
75
89
  requirements:
76
90
  - - ">="
@@ -84,7 +98,7 @@ dependencies:
84
98
  - !ruby/object:Gem::Version
85
99
  version: '0'
86
100
  - !ruby/object:Gem::Dependency
87
- name: yard
101
+ name: pry
88
102
  requirement: !ruby/object:Gem::Requirement
89
103
  requirements:
90
104
  - - ">="
@@ -119,6 +133,7 @@ files:
119
133
  - lib/multitenancy_tools.rb
120
134
  - lib/multitenancy_tools/dump_cleaner.rb
121
135
  - lib/multitenancy_tools/errors.rb
136
+ - lib/multitenancy_tools/functions_dumper.rb
122
137
  - lib/multitenancy_tools/schema_creator.rb
123
138
  - lib/multitenancy_tools/schema_destroyer.rb
124
139
  - lib/multitenancy_tools/schema_dumper.rb