dbagile 0.0.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.
- data/LICENCE.textile +12 -0
- data/README.textile +89 -0
- data/bin/dba +22 -0
- data/lib/dbagile/adapter/sequel/class_methods.rb +18 -0
- data/lib/dbagile/adapter/sequel/connection.rb +38 -0
- data/lib/dbagile/adapter/sequel/data/table_driven.rb +30 -0
- data/lib/dbagile/adapter/sequel/data/transaction_driven.rb +43 -0
- data/lib/dbagile/adapter/sequel/schema/concrete_script.rb +135 -0
- data/lib/dbagile/adapter/sequel/schema/physical_dump.rb +106 -0
- data/lib/dbagile/adapter/sequel/schema/schema2sequel_args.rb +71 -0
- data/lib/dbagile/adapter/sequel/schema/table_driven.rb +52 -0
- data/lib/dbagile/adapter/sequel/schema/transaction_driven.rb +46 -0
- data/lib/dbagile/adapter/sequel/sequel_tracer.rb +144 -0
- data/lib/dbagile/adapter/sequel.rb +46 -0
- data/lib/dbagile/adapter.rb +15 -0
- data/lib/dbagile/command/api.rb +49 -0
- data/lib/dbagile/command/bulk/commons.rb +130 -0
- data/lib/dbagile/command/bulk/export.rb +99 -0
- data/lib/dbagile/command/bulk/import.rb +147 -0
- data/lib/dbagile/command/bulk.rb +3 -0
- data/lib/dbagile/command/class_methods.rb +103 -0
- data/lib/dbagile/command/db/add.rb +94 -0
- data/lib/dbagile/command/db/list.rb +40 -0
- data/lib/dbagile/command/db/ping.rb +49 -0
- data/lib/dbagile/command/db/rm.rb +52 -0
- data/lib/dbagile/command/db/stage.rb +81 -0
- data/lib/dbagile/command/db/use.rb +48 -0
- data/lib/dbagile/command/db.rb +6 -0
- data/lib/dbagile/command/dba.rb +121 -0
- data/lib/dbagile/command/help.rb +50 -0
- data/lib/dbagile/command/repo/create.rb +54 -0
- data/lib/dbagile/command/repo.rb +1 -0
- data/lib/dbagile/command/robust.rb +86 -0
- data/lib/dbagile/command/schema/check.rb +59 -0
- data/lib/dbagile/command/schema/commons.rb +118 -0
- data/lib/dbagile/command/schema/diff.rb +101 -0
- data/lib/dbagile/command/schema/dump.rb +48 -0
- data/lib/dbagile/command/schema/merge.rb +55 -0
- data/lib/dbagile/command/schema/sql_script.rb +124 -0
- data/lib/dbagile/command/schema.rb +6 -0
- data/lib/dbagile/command/sql/drop.rb +40 -0
- data/lib/dbagile/command/sql/heading.rb +34 -0
- data/lib/dbagile/command/sql/send.rb +67 -0
- data/lib/dbagile/command/sql/show.rb +42 -0
- data/lib/dbagile/command/sql.rb +4 -0
- data/lib/dbagile/command/web/tools.rb +23 -0
- data/lib/dbagile/command/web.rb +1 -0
- data/lib/dbagile/command.rb +158 -0
- data/lib/dbagile/contract/connection.rb +66 -0
- data/lib/dbagile/contract/data/dataset.rb +69 -0
- data/lib/dbagile/contract/data/table_driven.rb +49 -0
- data/lib/dbagile/contract/data/transaction_driven.rb +74 -0
- data/lib/dbagile/contract/data.rb +3 -0
- data/lib/dbagile/contract/robust/helpers.rb +19 -0
- data/lib/dbagile/contract/robust/optimistic/data/table_driven.rb +31 -0
- data/lib/dbagile/contract/robust/optimistic/data/transaction_driven.rb +45 -0
- data/lib/dbagile/contract/robust/optimistic/schema/table_driven.rb +53 -0
- data/lib/dbagile/contract/robust/optimistic/schema/transaction_driven.rb +45 -0
- data/lib/dbagile/contract/robust/optimistic.rb +18 -0
- data/lib/dbagile/contract/robust.rb +20 -0
- data/lib/dbagile/contract/schema/table_driven.rb +89 -0
- data/lib/dbagile/contract/schema/transaction_driven.rb +68 -0
- data/lib/dbagile/contract/schema.rb +2 -0
- data/lib/dbagile/contract/utils/delegate.rb +17 -0
- data/lib/dbagile/contract/utils/full.rb +13 -0
- data/lib/dbagile/contract/utils.rb +2 -0
- data/lib/dbagile/contract.rb +5 -0
- data/lib/dbagile/core/chain.rb +92 -0
- data/lib/dbagile/core/connection.rb +51 -0
- data/lib/dbagile/core/database.rb +221 -0
- data/lib/dbagile/core/io/dsl.rb +95 -0
- data/lib/dbagile/core/io/robustness.rb +82 -0
- data/lib/dbagile/core/io.rb +2 -0
- data/lib/dbagile/core/repository/builder.rb +67 -0
- data/lib/dbagile/core/repository/yaml_methods.rb +82 -0
- data/lib/dbagile/core/repository.rb +211 -0
- data/lib/dbagile/core/schema/builder/coercion.rb +210 -0
- data/lib/dbagile/core/schema/builder/concept_factory.rb +61 -0
- data/lib/dbagile/core/schema/builder.rb +187 -0
- data/lib/dbagile/core/schema/composite.rb +239 -0
- data/lib/dbagile/core/schema/computations/filter.rb +40 -0
- data/lib/dbagile/core/schema/computations/merge.rb +55 -0
- data/lib/dbagile/core/schema/computations/minus.rb +44 -0
- data/lib/dbagile/core/schema/computations/split.rb +37 -0
- data/lib/dbagile/core/schema/computations.rb +4 -0
- data/lib/dbagile/core/schema/database_schema.rb +129 -0
- data/lib/dbagile/core/schema/errors.rb +173 -0
- data/lib/dbagile/core/schema/logical/attribute.rb +68 -0
- data/lib/dbagile/core/schema/logical/constraint/candidate_key.rb +70 -0
- data/lib/dbagile/core/schema/logical/constraint/foreign_key.rb +121 -0
- data/lib/dbagile/core/schema/logical/constraint.rb +58 -0
- data/lib/dbagile/core/schema/logical/constraints.rb +28 -0
- data/lib/dbagile/core/schema/logical/heading.rb +47 -0
- data/lib/dbagile/core/schema/logical/relvar.rb +81 -0
- data/lib/dbagile/core/schema/logical.rb +24 -0
- data/lib/dbagile/core/schema/migrate/abstract_script.rb +35 -0
- data/lib/dbagile/core/schema/migrate/collapse_table.rb +15 -0
- data/lib/dbagile/core/schema/migrate/create_table.rb +15 -0
- data/lib/dbagile/core/schema/migrate/drop_table.rb +15 -0
- data/lib/dbagile/core/schema/migrate/expand_table.rb +15 -0
- data/lib/dbagile/core/schema/migrate/operation.rb +141 -0
- data/lib/dbagile/core/schema/migrate/stager.rb +282 -0
- data/lib/dbagile/core/schema/migrate.rb +2 -0
- data/lib/dbagile/core/schema/part.rb +114 -0
- data/lib/dbagile/core/schema/physical/index.rb +64 -0
- data/lib/dbagile/core/schema/physical/indexes.rb +12 -0
- data/lib/dbagile/core/schema/physical.rb +26 -0
- data/lib/dbagile/core/schema/robustness.rb +39 -0
- data/lib/dbagile/core/schema/schema_object.rb +94 -0
- data/lib/dbagile/core/schema.rb +254 -0
- data/lib/dbagile/core/transaction.rb +74 -0
- data/lib/dbagile/core.rb +7 -0
- data/lib/dbagile/environment/buffering.rb +45 -0
- data/lib/dbagile/environment/delegator.rb +59 -0
- data/lib/dbagile/environment/interactions.rb +208 -0
- data/lib/dbagile/environment/on_error.rb +47 -0
- data/lib/dbagile/environment/repository.rb +161 -0
- data/lib/dbagile/environment/robustness.rb +7 -0
- data/lib/dbagile/environment/testing.rb +23 -0
- data/lib/dbagile/environment.rb +122 -0
- data/lib/dbagile/errors.rb +30 -0
- data/lib/dbagile/io/csv.rb +99 -0
- data/lib/dbagile/io/json.rb +41 -0
- data/lib/dbagile/io/pretty_table.rb +128 -0
- data/lib/dbagile/io/ruby.rb +62 -0
- data/lib/dbagile/io/text.rb +18 -0
- data/lib/dbagile/io/type_safe.rb +65 -0
- data/lib/dbagile/io/xml.rb +35 -0
- data/lib/dbagile/io/yaml.rb +30 -0
- data/lib/dbagile/io.rb +94 -0
- data/lib/dbagile/loader.rb +16 -0
- data/lib/dbagile/plugin.rb +29 -0
- data/lib/dbagile/restful/client/delete.rb +22 -0
- data/lib/dbagile/restful/client/get.rb +24 -0
- data/lib/dbagile/restful/client/post.rb +22 -0
- data/lib/dbagile/restful/client/utils.rb +16 -0
- data/lib/dbagile/restful/client.rb +41 -0
- data/lib/dbagile/restful/middleware/delete.rb +22 -0
- data/lib/dbagile/restful/middleware/get.rb +27 -0
- data/lib/dbagile/restful/middleware/one_database.rb +82 -0
- data/lib/dbagile/restful/middleware/post.rb +23 -0
- data/lib/dbagile/restful/middleware/utils.rb +65 -0
- data/lib/dbagile/restful/middleware.rb +54 -0
- data/lib/dbagile/restful/server.rb +65 -0
- data/lib/dbagile/restful.rb +9 -0
- data/lib/dbagile/robustness/dependencies.rb +36 -0
- data/lib/dbagile/robustness/file_system.rb +53 -0
- data/lib/dbagile/robustness.rb +14 -0
- data/lib/dbagile/tools/file_system.rb +24 -0
- data/lib/dbagile/tools/math.rb +11 -0
- data/lib/dbagile/tools/ordered_hash.rb +39 -0
- data/lib/dbagile/tools/ruby.rb +78 -0
- data/lib/dbagile/tools/string.rb +6 -0
- data/lib/dbagile/tools/tuple.rb +49 -0
- data/lib/dbagile/tools.rb +6 -0
- data/lib/dbagile.rb +66 -0
- data/test/assumptions/equality.spec +11 -0
- data/test/assumptions/fixtures.rb +39 -0
- data/test/assumptions/inheritance.spec +17 -0
- data/test/assumptions/sequel/autonumber.spec +19 -0
- data/test/assumptions/sequel/connect.spec +29 -0
- data/test/assumptions/sequel/test.db +0 -0
- data/test/assumptions/stdlib/pathname.spec +13 -0
- data/test/assumptions/yaml/fixtures.rb +25 -0
- data/test/assumptions/yaml/to_yaml.spec +10 -0
- data/test/assumptions.spec +2 -0
- data/test/commands/bulk/export.spec +100 -0
- data/test/commands/bulk/import.spec +49 -0
- data/test/commands/db/add.spec +31 -0
- data/test/commands/db/list.spec +29 -0
- data/test/commands/db/ping.spec +21 -0
- data/test/commands/db/rm.spec +18 -0
- data/test/commands/db/use.spec +18 -0
- data/test/commands/dba.spec +54 -0
- data/test/commands/repo/create.spec +30 -0
- data/test/commands/schema/check.spec +25 -0
- data/test/commands/schema/diff.spec +30 -0
- data/test/commands/schema/dump.spec +23 -0
- data/test/commands/schema/fixtures/add_constraint.yaml +30 -0
- data/test/commands/schema/fixtures/announced.yaml +28 -0
- data/test/commands/schema/fixtures/effective.yaml +20 -0
- data/test/commands/schema/fixtures/invalid.yaml +6 -0
- data/test/commands/schema/sql_script.spec +56 -0
- data/test/commands/sql/drop.spec +25 -0
- data/test/commands/sql/heading.spec +7 -0
- data/test/commands/sql/scripts/delete.sql +1 -0
- data/test/commands/sql/scripts/insert.sql +2 -0
- data/test/commands/sql/send.spec +29 -0
- data/test/commands/sql/show.spec +17 -0
- data/test/commands.spec +138 -0
- data/test/contract/connection/transaction.ex +11 -0
- data/test/contract/connection.spec +9 -0
- data/test/contract/data/dataset/columns.ex +5 -0
- data/test/contract/data/dataset/count.ex +5 -0
- data/test/contract/data/dataset.spec +9 -0
- data/test/contract/data/table_driven/dataset.ex +31 -0
- data/test/contract/data/table_driven/exists_q.ex +27 -0
- data/test/contract/data/table_driven.spec +9 -0
- data/test/contract/data/transaction_driven/delete.ex +29 -0
- data/test/contract/data/transaction_driven/direct_sql.ex +19 -0
- data/test/contract/data/transaction_driven/insert.ex +8 -0
- data/test/contract/data/transaction_driven/update.ex +19 -0
- data/test/contract/data/transaction_driven.spec +18 -0
- data/test/contract/robust/data/table_driven.spec +15 -0
- data/test/contract/robust/data/transaction_driven.spec +21 -0
- data/test/contract/robust/schema/table_driven.spec +21 -0
- data/test/contract/robust/schema/transaction_driven.spec +19 -0
- data/test/contract/schema/table_driven/column_names.ex +5 -0
- data/test/contract/schema/table_driven/has_column_q.ex +13 -0
- data/test/contract/schema/table_driven/has_table_q.ex +11 -0
- data/test/contract/schema/table_driven/heading.ex +5 -0
- data/test/contract/schema/table_driven.spec +9 -0
- data/test/contract/schema/transaction_driven/create_table.ex +10 -0
- data/test/contract/schema/transaction_driven/drop_table.ex +10 -0
- data/test/contract/schema/transaction_driven.spec +18 -0
- data/test/contract.spec +66 -0
- data/test/fixtures/basics/data/basic_values.rb +13 -0
- data/test/fixtures/basics/data/empty_table.rb +3 -0
- data/test/fixtures/basics/data/non_empty_table.rb +4 -0
- data/test/fixtures/basics/data/parts.rb +8 -0
- data/test/fixtures/basics/data/suppliers.rb +7 -0
- data/test/fixtures/basics/data/supplies.rb +14 -0
- data/test/fixtures/basics/dbagile.idx +20 -0
- data/test/fixtures/basics/fixtures.yaml +28 -0
- data/test/fixtures/basics/robust.db +0 -0
- data/test/fixtures/basics/suppliers.yaml +30 -0
- data/test/fixtures/basics/test.db +0 -0
- data/test/fixtures/empty/dbagile.idx +5 -0
- data/test/fixtures.rb +152 -0
- data/test/restful/delete/no_format.ex +32 -0
- data/test/restful/delete.spec +8 -0
- data/test/restful/get/csv_format.ex +12 -0
- data/test/restful/get/json_format.ex +19 -0
- data/test/restful/get/query_string.ex +11 -0
- data/test/restful/get/text_format.ex +12 -0
- data/test/restful/get/yaml_format.ex +14 -0
- data/test/restful/get.spec +5 -0
- data/test/restful/post/no_format.ex +22 -0
- data/test/restful/post.spec +8 -0
- data/test/restful.spec +32 -0
- data/test/run_all_suite.rb +51 -0
- data/test/spec_helper.rb +26 -0
- data/test/support/be_a_valid_json_string.rb +19 -0
- data/test/support/be_a_valid_yaml_string.rb +18 -0
- data/test/unit/adapter/factor.spec +13 -0
- data/test/unit/adapter/sequel/new.spec +19 -0
- data/test/unit/command/api.spec +12 -0
- data/test/unit/command/command_for.spec +36 -0
- data/test/unit/command/command_name_of.spec +21 -0
- data/test/unit/command/ruby_method_for.spec +21 -0
- data/test/unit/command/sanity.spec +34 -0
- data/test/unit/contract/utils/delegate/delegate.spec +23 -0
- data/test/unit/core/chain/chain.spec +57 -0
- data/test/unit/core/chain/connect.spec +22 -0
- data/test/unit/core/chain/delegate_chain.spec +16 -0
- data/test/unit/core/chain/initialize.spec +19 -0
- data/test/unit/core/chain/plug.spec +31 -0
- data/test/unit/core/io/dsl/scope.spec +9 -0
- data/test/unit/core/repository/create_bang.spec +31 -0
- data/test/unit/core/repository/current.spec +31 -0
- data/test/unit/core/repository/database.spec +47 -0
- data/test/unit/core/repository/fixtures/corrupted/dbagile.idx +1 -0
- data/test/unit/core/repository/fixtures/test_and_prod/dbagile.idx +21 -0
- data/test/unit/core/repository/fixtures.rb +25 -0
- data/test/unit/core/repository/has_database_q.spec +16 -0
- data/test/unit/core/repository/load.spec +51 -0
- data/test/unit/core/repository/to_yaml.spec +17 -0
- data/test/unit/core/schema/check.spec +32 -0
- data/test/unit/core/schema/empty_q.spec +18 -0
- data/test/unit/core/schema/filter.spec +42 -0
- data/test/unit/core/schema/fixtures/dbagile.yaml +7 -0
- data/test/unit/core/schema/fixtures/empty.yaml +11 -0
- data/test/unit/core/schema/fixtures/invalid.yaml +54 -0
- data/test/unit/core/schema/fixtures/left.yaml +46 -0
- data/test/unit/core/schema/fixtures/left_minus_right.yaml +31 -0
- data/test/unit/core/schema/fixtures/right.yaml +46 -0
- data/test/unit/core/schema/fixtures/right_minus_left.yaml +31 -0
- data/test/unit/core/schema/fixtures/suppliers_and_parts.yaml +30 -0
- data/test/unit/core/schema/fixtures.rb +32 -0
- data/test/unit/core/schema/merge.spec +72 -0
- data/test/unit/core/schema/minus.spec +26 -0
- data/test/unit/core/schema/sanity.spec +39 -0
- data/test/unit/core/schema/split.spec +58 -0
- data/test/unit/core/schema/stage_script.spec +26 -0
- data/test/unit/core/schema/to_yaml.spec +13 -0
- data/test/unit/core/schema/yaml_display.spec +14 -0
- data/test/unit/core/schema/yaml_load.spec +20 -0
- data/test/unit/core/transaction/transaction.spec +10 -0
- data/test/unit/fixtures.rb +67 -0
- data/test/unit/io/to_xxx.spec +52 -0
- data/test/unit/plugin/options.spec +21 -0
- data/test/unit/plugin/tuple_heading.spec +11 -0
- data/test/unit/plugin/with_options.spec +12 -0
- data/test/unit/tools/ruby/class_unqualified_name.spec +26 -0
- data/test/unit/tools/ruby/extract_file_rdoc.spec +10 -0
- data/test/unit/tools/ruby/fixtures/rdoc.txt +12 -0
- data/test/unit/tools/ruby/fixtures.rb +19 -0
- data/test/unit/tools/ruby/optional_args_block_call.spec +35 -0
- data/test/unit/tools/ruby/parent_module.spec +21 -0
- data/test/unit/tools/ruby/rdoc_file_paragraphs.spec +13 -0
- data/test/unit/tools/tuple/tuple_heading.spec +11 -0
- data/test/unit/tools/tuple/tuple_key.spec +27 -0
- data/test/unit/tools/tuple/tuple_project.spec +23 -0
- data/test/unit.spec +3 -0
- metadata +422 -0
data/lib/dbagile.rb
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require 'dbagile/loader'
|
|
2
|
+
module DbAgile
|
|
3
|
+
|
|
4
|
+
# Version of the DbAgile interface
|
|
5
|
+
VERSION = "0.0.1".freeze
|
|
6
|
+
|
|
7
|
+
# Domains recognized as valid domains inside a SQL database
|
|
8
|
+
RECOGNIZED_DOMAINS = [
|
|
9
|
+
::SByC::TypeSystem::Ruby::Boolean,
|
|
10
|
+
TrueClass, FalseClass,
|
|
11
|
+
String,
|
|
12
|
+
Fixnum, Bignum, Integer,
|
|
13
|
+
Float,
|
|
14
|
+
Time,
|
|
15
|
+
Date
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
#
|
|
19
|
+
# Builds a DbAgile::Command::API instance and yields the block with the
|
|
20
|
+
# api instance.
|
|
21
|
+
#
|
|
22
|
+
# A fresh new default environement is created if no one is given.
|
|
23
|
+
#
|
|
24
|
+
# Example
|
|
25
|
+
# DbAgile::dba do |dba|
|
|
26
|
+
# # Override environment default values (~/.dbagile, ...)
|
|
27
|
+
# dba.repository_path = ... # your application own repository
|
|
28
|
+
# dba.output_buffer = ... # keep messages in any object supporting :<< (STDOUT by default)
|
|
29
|
+
#
|
|
30
|
+
# # Start using dbagile commands
|
|
31
|
+
# dba.bulk_export %w{--csv --type-safe contacts} # each line pushed in buffer
|
|
32
|
+
# dba.bulk_export %w{--ruby contacts} # each record pushed as a Hash in buffer
|
|
33
|
+
# end
|
|
34
|
+
#
|
|
35
|
+
def dba(environment = nil)
|
|
36
|
+
environment ||= default_environment
|
|
37
|
+
dba = DbAgile::Command::API.new(environment)
|
|
38
|
+
if block_given?
|
|
39
|
+
yield(dba)
|
|
40
|
+
else
|
|
41
|
+
dba
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
module_function :dba
|
|
45
|
+
|
|
46
|
+
#
|
|
47
|
+
# Builds a default environment instance.
|
|
48
|
+
#
|
|
49
|
+
# @see DbAgile::Core::Repository.default
|
|
50
|
+
#
|
|
51
|
+
def default_environment
|
|
52
|
+
DbAgile::Environment.default
|
|
53
|
+
end
|
|
54
|
+
module_function :default_environment
|
|
55
|
+
|
|
56
|
+
end # module DbAgile
|
|
57
|
+
require 'dbagile/robustness'
|
|
58
|
+
require 'dbagile/errors'
|
|
59
|
+
require 'dbagile/environment'
|
|
60
|
+
require 'dbagile/contract'
|
|
61
|
+
require 'dbagile/tools'
|
|
62
|
+
require 'dbagile/io'
|
|
63
|
+
require 'dbagile/core'
|
|
64
|
+
require 'dbagile/adapter'
|
|
65
|
+
require 'dbagile/plugin'
|
|
66
|
+
require 'dbagile/command'
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require File.expand_path('../fixtures.rb', __FILE__)
|
|
2
|
+
describe "The way comparison work" do
|
|
3
|
+
|
|
4
|
+
it "should not override ==" do
|
|
5
|
+
foo1 = DbAgile::Fixtures::Assumptions::FooComparable.new(1)
|
|
6
|
+
foo2 = DbAgile::Fixtures::Assumptions::FooComparable.new(1)
|
|
7
|
+
(foo1 <=> foo2).should == 0
|
|
8
|
+
(foo1 == foo2).should == false
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require File.expand_path('../../spec_helper.rb', __FILE__)
|
|
2
|
+
module DbAgile
|
|
3
|
+
module Fixtures
|
|
4
|
+
module Assumptions
|
|
5
|
+
|
|
6
|
+
module SafeModule
|
|
7
|
+
|
|
8
|
+
def safe_method
|
|
9
|
+
SafeModule
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class UnsafeClass
|
|
15
|
+
|
|
16
|
+
def safe_method
|
|
17
|
+
UnsafeClass
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
include SafeModule
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class FooComparable
|
|
24
|
+
|
|
25
|
+
attr_reader :int
|
|
26
|
+
|
|
27
|
+
def initialize(int)
|
|
28
|
+
@int = int
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def <=>(other)
|
|
32
|
+
@int <=> other.int
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end # module Assumptions
|
|
38
|
+
end # module Fixtures
|
|
39
|
+
end # module DbAgile
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require File.expand_path('../fixtures.rb', __FILE__)
|
|
2
|
+
describe "The way inheritance works with modules" do
|
|
3
|
+
|
|
4
|
+
let(:namespace){ DbAgile::Fixtures::Assumptions }
|
|
5
|
+
let(:safe_class){ namespace::UnsafeClass.new.extend(namespace::SafeModule) }
|
|
6
|
+
|
|
7
|
+
describe "The way modules are included" do
|
|
8
|
+
subject{ safe_class }
|
|
9
|
+
it{ should be_kind_of(namespace::SafeModule) }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "The way methods are overriden" do
|
|
13
|
+
subject{ safe_class.safe_method }
|
|
14
|
+
it { should == namespace::UnsafeClass }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require File.expand_path('../../fixtures', __FILE__)
|
|
2
|
+
describe "auto number on sequel /" do
|
|
3
|
+
|
|
4
|
+
let(:db_file){ File.expand_path('../test.db', __FILE__) }
|
|
5
|
+
let(:db){ Sequel::connect("sqlite://#{db_file}") }
|
|
6
|
+
before{
|
|
7
|
+
if db.table_exists?(:test)
|
|
8
|
+
db.drop_table(:test)
|
|
9
|
+
end
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
it "should be supported at primary key time" do
|
|
13
|
+
db.create_table(:test){
|
|
14
|
+
column :id, :integer
|
|
15
|
+
primary_key :id, :auto_increment => true
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require File.expand_path('../../fixtures', __FILE__)
|
|
2
|
+
describe "Sequel::connect /" do
|
|
3
|
+
|
|
4
|
+
let(:uris){[
|
|
5
|
+
'postgres://nosuchuser@localhost/nosuch_database',
|
|
6
|
+
'sqlite://tmp/test.db',
|
|
7
|
+
'mysql://nosuchuser@localhost/nosuch_database',
|
|
8
|
+
'dbi-frontbase://nosuchuser@localhost/nosuch_database',
|
|
9
|
+
'dbi-mysql://nosuchuser@localhost/nosuch_database',
|
|
10
|
+
'dbi-oracle://nosuchuser@localhost/nosuch_database',
|
|
11
|
+
'dbi-msql://nosuchuser@localhost/nosuch_database',
|
|
12
|
+
]}
|
|
13
|
+
|
|
14
|
+
it "allows connecting and using SQL tools on unexisting databases" do
|
|
15
|
+
uris.each{|uri|
|
|
16
|
+
lambda{
|
|
17
|
+
db = Sequel::connect(uri)
|
|
18
|
+
gen = Sequel::Schema::Generator.new(db){
|
|
19
|
+
column :id, Integer
|
|
20
|
+
column :name, String
|
|
21
|
+
primary_key [:id]
|
|
22
|
+
}
|
|
23
|
+
res = db.send(:create_table_sql, :mytable, gen, {})
|
|
24
|
+
res.should =~ /CREATE TABLE/
|
|
25
|
+
}.should_not raise_error
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
Binary file
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require File.expand_path('../../fixtures.rb', __FILE__)
|
|
2
|
+
require 'pathname'
|
|
3
|
+
describe "Pathname utility" do
|
|
4
|
+
|
|
5
|
+
it "should be able to relativize files" do
|
|
6
|
+
child = Pathname.new(__FILE__)
|
|
7
|
+
parent = Pathname.new(File.dirname(File.dirname(__FILE__)))
|
|
8
|
+
rel = child.relative_path_from(parent)
|
|
9
|
+
rel.should be_relative
|
|
10
|
+
rel.to_s.should == "stdlib/pathname.spec"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
require File.expand_path('../../fixtures', __FILE__)
|
|
3
|
+
module DbAgile
|
|
4
|
+
module Fixtures
|
|
5
|
+
class YAMLDumpable
|
|
6
|
+
|
|
7
|
+
attr_reader :name
|
|
8
|
+
|
|
9
|
+
def initialize(name)
|
|
10
|
+
@name = name
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def to_yaml(opts = {})
|
|
14
|
+
YAML::quick_emit(self, opts) do |out|
|
|
15
|
+
out.map("tag:yaml.org,2002:map", :inline ) do |map|
|
|
16
|
+
map.add('class', self.class.to_s)
|
|
17
|
+
map.add('name', self.name)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
{ 'test' => true }.to_yaml(opts)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end # class YAMLDumpable
|
|
24
|
+
end # module Fixtures
|
|
25
|
+
end # module DbAgile
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
require File.expand_path('../fixtures', __FILE__)
|
|
2
|
+
describe "to_yaml understanding /" do
|
|
3
|
+
|
|
4
|
+
describe "about user-defined to_yaml method" do
|
|
5
|
+
let(:dumpable){ DbAgile::Fixtures::YAMLDumpable.new("hello") }
|
|
6
|
+
subject{ lambda{ dumpable.to_yaml } }
|
|
7
|
+
it{ should_not raise_error }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
shared_examples_for("The bulk:export command") do
|
|
2
|
+
|
|
3
|
+
it "should return the output buffer" do
|
|
4
|
+
dba.bulk_export(%w{suppliers}).should == dba.output_buffer
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
it "should support a --select option" do
|
|
8
|
+
dba.bulk_export(%w{--csv --select id,name basic_values})
|
|
9
|
+
dba.output_buffer.string.should =~ /^1,Standard values/
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should support a --allbut option" do
|
|
13
|
+
dba.bulk_export(%w{--csv --allbut name basic_values})
|
|
14
|
+
dba.output_buffer.string.should_not =~ /Standard values/
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
### --csv
|
|
18
|
+
|
|
19
|
+
describe "When used with --csv option" do
|
|
20
|
+
|
|
21
|
+
it "should support a --headers option" do
|
|
22
|
+
dba.bulk_export(%w{--csv --headers --select id,name basic_values})
|
|
23
|
+
dba.output_buffer.string.should =~ /^id,name/
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should support a --seperator option" do
|
|
27
|
+
dba.bulk_export(%w{--csv --separator=; --select id,name basic_values})
|
|
28
|
+
dba.output_buffer.string.should =~ /^1;Standard values/
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should support --force-quotes --quote options" do
|
|
32
|
+
dba.bulk_export(%w{--csv --quote=' --force-quotes --select id,name basic_values})
|
|
33
|
+
dba.output_buffer.string.strip.should == "'1','Standard values'"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
### --json
|
|
39
|
+
|
|
40
|
+
describe "When used with --json option" do
|
|
41
|
+
|
|
42
|
+
it "should return a valid JSON string" do
|
|
43
|
+
result = dba.bulk_export(%w{--json basic_values}).string
|
|
44
|
+
result.should be_a_valid_json_string
|
|
45
|
+
back_tuple = JSON::parse(result)[0]
|
|
46
|
+
DbAgile::Fixtures::basic_values[0].each_pair{|k,v|
|
|
47
|
+
next if v.kind_of?(Time) or v.kind_of?(Date) # not supported by json
|
|
48
|
+
back_tuple[k.to_s].should == v
|
|
49
|
+
}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "should support a --no-pretty option" do
|
|
53
|
+
result = dba.bulk_export(%w{--json --no-pretty --select id,name basic_values}).string
|
|
54
|
+
result.strip.should_not =~ /\n/
|
|
55
|
+
result.should be_a_valid_json_string
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should support a --pretty option" do
|
|
59
|
+
result = dba.bulk_export(%w{--json --pretty --select id,name basic_values}).string
|
|
60
|
+
result.strip.should =~ /\n/
|
|
61
|
+
result.should be_a_valid_json_string
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "should support a --type-sage option" do
|
|
65
|
+
result = dba.bulk_export(%w{--json --type-safe basic_values}).string
|
|
66
|
+
result.should be_a_valid_json_string
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
### --yaml
|
|
72
|
+
|
|
73
|
+
describe "When used with --yaml option" do
|
|
74
|
+
|
|
75
|
+
it "should return yaml valid string" do
|
|
76
|
+
result = dba.bulk_export(%w{--yaml basic_values}).string
|
|
77
|
+
result.should be_a_valid_yaml_string
|
|
78
|
+
YAML::load(result).should == DbAgile::Fixtures::basic_values
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "should return yaml valid string with --type-safe" do
|
|
82
|
+
result = dba.bulk_export(%w{--yaml --type-safe basic_values}).string
|
|
83
|
+
result.should be_a_valid_yaml_string
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
### --ruby
|
|
89
|
+
|
|
90
|
+
describe "When used with --ruby option" do
|
|
91
|
+
|
|
92
|
+
it "should support a valid ruby string" do
|
|
93
|
+
dba.bulk_export %w{--ruby basic_values}
|
|
94
|
+
back = Kernel.eval(dba.output_buffer.string)
|
|
95
|
+
back.should == DbAgile::Fixtures::basic_values
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
shared_examples_for("The bulk:import command") do
|
|
2
|
+
|
|
3
|
+
# --ruby
|
|
4
|
+
|
|
5
|
+
describe "When used with a --ruby option" do
|
|
6
|
+
|
|
7
|
+
it "should work on input buffer by default" do
|
|
8
|
+
File.open(DbAgile::Fixtures::basic_values_path, "r"){|io|
|
|
9
|
+
dba.input_buffer = io
|
|
10
|
+
dba.bulk_import %w{--ruby --drop-table basic_values_copy}
|
|
11
|
+
dba.sql_send "UPDATE basic_values_copy SET ruby_nil = null"
|
|
12
|
+
}
|
|
13
|
+
dba.dataset(:basic_values_copy).to_a.should == DbAgile::Fixtures::basic_values
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should accept a --input option" do
|
|
17
|
+
dba.bulk_import ['--input', DbAgile::Fixtures::basic_values_path] + %w{--ruby --drop-table basic_values_copy}
|
|
18
|
+
dba.sql_send "UPDATE basic_values_copy SET ruby_nil = null"
|
|
19
|
+
dba.dataset(:basic_values_copy).to_a.should == DbAgile::Fixtures::basic_values
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should support an export/import piping through StringIO" do
|
|
23
|
+
dba.bulk_export %w{--ruby basic_values}
|
|
24
|
+
dba.input_buffer = StringIO.new(dba.output_buffer.string)
|
|
25
|
+
dba.output_buffer = StringIO.new
|
|
26
|
+
dba.bulk_import %w{--ruby --create-table basic_values_copy}
|
|
27
|
+
dba.dataset(:basic_values_copy).to_a.should == DbAgile::Fixtures::basic_values
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end # --ruby
|
|
31
|
+
|
|
32
|
+
# --format=x --type-safe
|
|
33
|
+
[:csv, :json, :yaml, :ruby].each do |format|
|
|
34
|
+
|
|
35
|
+
describe "When piping import/export with --type-safe in #{format}" do
|
|
36
|
+
|
|
37
|
+
it "should be type safe" do
|
|
38
|
+
dba.bulk_export "--format", format, "--type-safe", "basic_values"
|
|
39
|
+
dba.input_buffer = StringIO.new(dba.output_buffer.string)
|
|
40
|
+
dba.output_buffer = StringIO.new
|
|
41
|
+
dba.bulk_import "--drop-table", "--format", format, "--type-safe", "basic_values_copy"
|
|
42
|
+
dba.dataset(:basic_values_copy).to_a.should == DbAgile::Fixtures::basic_values
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end # --format=x --type-safe
|
|
48
|
+
|
|
49
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
shared_examples_for("The db:add command") do
|
|
2
|
+
|
|
3
|
+
it "should return the new database" do
|
|
4
|
+
dba.db_add(%w{test test.db}).should be_kind_of(DbAgile::Core::Database)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
it "should accept an absolute database" do
|
|
8
|
+
dba.db_add(%w{test postgres://dbagile@localhost/unexisting}).should be_kind_of(DbAgile::Core::Database)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should raise an error when the name is already in use" do
|
|
12
|
+
dba.db_add(%w{test test.db})
|
|
13
|
+
lambda{ dba.db_add(%w{test test.db}) }.should raise_error(DbAgile::DatabaseNameConflictError)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should save the repository" do
|
|
17
|
+
dba.db_add(%w{test test.db})
|
|
18
|
+
dba.dup.repository.has_database?(:test).should be_true
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should set the database as the current one by default" do
|
|
22
|
+
dba.db_add(%w{test test.db})
|
|
23
|
+
dba.dup.repository.current?(:test).should be_true
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should not set the database as the current one with --no-current" do
|
|
27
|
+
dba.db_add(%w{--no-current test test.db})
|
|
28
|
+
dba.dup.repository.current?(:test).should be_false
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
shared_examples_for("The db:list command") do
|
|
2
|
+
|
|
3
|
+
describe "/ on a non empty repository /" do
|
|
4
|
+
|
|
5
|
+
it "should return the repository instance" do
|
|
6
|
+
dba.db_list.should be_kind_of(DbAgile::Core::Repository)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "should print the databases" do
|
|
10
|
+
dba.output_buffer = StringIO.new
|
|
11
|
+
dba.db_list
|
|
12
|
+
dba.output_buffer.string.should =~ /Available databases/
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe "/ on an empty repository /" do
|
|
18
|
+
|
|
19
|
+
before{ dba.repository_path = DbAgile::Fixtures::ensure_empty_repository! }
|
|
20
|
+
|
|
21
|
+
it "should print a friendly error message when no database" do
|
|
22
|
+
dba.message_buffer = StringIO.new
|
|
23
|
+
dba.db_list
|
|
24
|
+
dba.message_buffer.string.should =~ /No database found/
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
shared_examples_for("The db:ping command") do
|
|
2
|
+
|
|
3
|
+
it "should return the pinged database" do
|
|
4
|
+
dba.db_ping(%w{sqlite}).should be_kind_of(::DbAgile::Core::Database)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
it "should return the error if ping failed" do
|
|
8
|
+
dba.db_ping(%w{unexisting}).should be_kind_of(StandardError)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should print a friendly message on success" do
|
|
12
|
+
dba.db_ping(%w{sqlite})
|
|
13
|
+
dba.output_buffer.string.should =~ /ok/
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should print a friendly message on failure" do
|
|
17
|
+
dba.db_ping(%w{unexisting})
|
|
18
|
+
dba.output_buffer.string.should =~ /KO/
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
shared_examples_for("The db:rm command") do
|
|
2
|
+
|
|
3
|
+
it "should return the repository" do
|
|
4
|
+
dba.db_add(%w{test test.db})
|
|
5
|
+
dba.db_rm(%w{test}).should be_kind_of(::DbAgile::Core::Repository)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "should raise an error when the name is unknown" do
|
|
9
|
+
lambda{ dba.db_rm(%w{test}) }.should raise_error(DbAgile::NoSuchDatabaseError)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should save the repository" do
|
|
13
|
+
dba.db_add(%w{test test.db})
|
|
14
|
+
dba.db_rm(%w{test})
|
|
15
|
+
dba.dup.repository.has_database?(:test).should be_false
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
shared_examples_for("The db:use command") do
|
|
2
|
+
|
|
3
|
+
it "should return the current database" do
|
|
4
|
+
dba.db_add(%w{test test.db})
|
|
5
|
+
dba.db_use(%w{test}).should be_kind_of(::DbAgile::Core::Database)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "should raise an error if the database is unknown" do
|
|
9
|
+
lambda{ dba.db_use(%w{test}) }.should raise_error(DbAgile::NoSuchDatabaseError)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should save the repository" do
|
|
13
|
+
dba.db_add(%w{--no-current test test.db})
|
|
14
|
+
dba.db_use(%w{test})
|
|
15
|
+
dba.dup.repository.current?(:test).should be_true
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
shared_examples_for("The dba command") do
|
|
2
|
+
|
|
3
|
+
let(:env){ DbAgile::default_environment.with_testing_methods! }
|
|
4
|
+
let(:dba){ DbAgile::Command::Dba.new(env) }
|
|
5
|
+
subject{ dba.run(__FILE__, args); env }
|
|
6
|
+
|
|
7
|
+
describe "when called on an existing repository /" do
|
|
8
|
+
|
|
9
|
+
before{ env.repository_path = DbAgile::Fixtures::repository_path(:basics) }
|
|
10
|
+
|
|
11
|
+
describe "with no args" do
|
|
12
|
+
let(:args){ [] }
|
|
13
|
+
it{ should have_flushed(/Usage:/) }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe "with --help" do
|
|
17
|
+
let(:args){ ['--help'] }
|
|
18
|
+
it{ should have_flushed(/Usage:/) }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe "with --version" do
|
|
22
|
+
let(:args){ ['--version'] }
|
|
23
|
+
it{ should have_flushed(/(c)/) }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe "with --interactive" do
|
|
27
|
+
let(:args){ ['--interactive'] }
|
|
28
|
+
it{ should be_interactive }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe "with --no-interactive" do
|
|
32
|
+
let(:args){ ['--no-interactive'] }
|
|
33
|
+
it{ should_not be_interactive }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe "with --backtrace" do
|
|
37
|
+
let(:args){ ['--backtrace'] }
|
|
38
|
+
it{ should be_show_backtrace }
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe "with --no-backtrace" do
|
|
42
|
+
let(:args){ ['--no-backtrace'] }
|
|
43
|
+
it{ should_not be_show_backtrace }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe "with help" do
|
|
47
|
+
let(:args){ ['help', 'help'] }
|
|
48
|
+
it{ should have_flushed(/Usage:/) }
|
|
49
|
+
it{ should have_flushed(/Description:/) }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
end # on an existing repository
|
|
53
|
+
|
|
54
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
shared_examples_for("The repo:create command") do
|
|
2
|
+
|
|
3
|
+
let(:empty_path){ DbAgile::Fixtures::repository_path(:empty) }
|
|
4
|
+
|
|
5
|
+
describe "when the repository already exists" do
|
|
6
|
+
|
|
7
|
+
before { dba.repository_path = DbAgile::Fixtures::ensure_empty_repository! }
|
|
8
|
+
|
|
9
|
+
it "should raise an error without --force" do
|
|
10
|
+
lambda{ dba.repo_create [ dba.repository_path ] }.should raise_error(IOError)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should not raise an error with --force" do
|
|
14
|
+
lambda{ dba.repo_create [ "--force", dba.repository_path ] }.should_not raise_error(IOError)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe "when the repository does not exist" do
|
|
20
|
+
|
|
21
|
+
before { FileUtils.rm_rf(empty_path) }
|
|
22
|
+
|
|
23
|
+
it "should create the repo without --force" do
|
|
24
|
+
dba.repo_create [ dba.repository_path ]
|
|
25
|
+
dba.repository.should be_kind_of(DbAgile::Core::Repository)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
shared_examples_for("The schema:check command") do
|
|
2
|
+
|
|
3
|
+
describe "when the shema is valid" do
|
|
4
|
+
|
|
5
|
+
it "should return a Schema and Errors" do
|
|
6
|
+
schema, errors = dba.schema_check
|
|
7
|
+
schema.should be_kind_of(DbAgile::Core::Schema::DatabaseSchema)
|
|
8
|
+
errors.should be_kind_of(DbAgile::SchemaSemanticsError)
|
|
9
|
+
errors.should be_empty
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe "when the shema is invalid" do
|
|
15
|
+
|
|
16
|
+
it "should return a Schema and Errors" do
|
|
17
|
+
schema, errors = dba.schema_check [ File.expand_path('../fixtures/invalid.yaml', __FILE__) ]
|
|
18
|
+
schema.should be_kind_of(DbAgile::Core::Schema::DatabaseSchema)
|
|
19
|
+
errors.should be_kind_of(DbAgile::SchemaSemanticsError)
|
|
20
|
+
errors.should_not be_empty
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
shared_examples_for("The schema:diff command") do
|
|
2
|
+
|
|
3
|
+
let(:invalid){ File.expand_path('../fixtures/invalid.yaml', __FILE__) }
|
|
4
|
+
let(:announced){ File.expand_path('../fixtures/announced.yaml', __FILE__) }
|
|
5
|
+
let(:effective){ File.expand_path('../fixtures/effective.yaml', __FILE__) }
|
|
6
|
+
|
|
7
|
+
it "should return merged schema" do
|
|
8
|
+
dba.message_buffer = StringIO.new
|
|
9
|
+
dba.schema_diff([announced, effective]).should be_kind_of(DbAgile::Core::Schema::DatabaseSchema)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should show all differences without -u" do
|
|
13
|
+
dba.message_buffer = StringIO.new
|
|
14
|
+
dba.schema_diff([effective, announced]).should be_kind_of(DbAgile::Core::Schema::DatabaseSchema)
|
|
15
|
+
s = dba.message_buffer.string
|
|
16
|
+
s.should =~ /PARTS/
|
|
17
|
+
s.should =~ /SUPPLIERS/
|
|
18
|
+
s.should =~ /SUPPLIES/
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should not show all differences with -u" do
|
|
22
|
+
dba.message_buffer = StringIO.new
|
|
23
|
+
dba.schema_diff(['-u', effective, announced]).should be_kind_of(DbAgile::Core::Schema::DatabaseSchema)
|
|
24
|
+
s = dba.message_buffer.string
|
|
25
|
+
s.should =~ /SUPPLIES/
|
|
26
|
+
s.should_not =~ /SUPPLIERS/
|
|
27
|
+
s.should_not =~ /PARTS/
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|