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.
Files changed (305) hide show
  1. data/LICENCE.textile +12 -0
  2. data/README.textile +89 -0
  3. data/bin/dba +22 -0
  4. data/lib/dbagile/adapter/sequel/class_methods.rb +18 -0
  5. data/lib/dbagile/adapter/sequel/connection.rb +38 -0
  6. data/lib/dbagile/adapter/sequel/data/table_driven.rb +30 -0
  7. data/lib/dbagile/adapter/sequel/data/transaction_driven.rb +43 -0
  8. data/lib/dbagile/adapter/sequel/schema/concrete_script.rb +135 -0
  9. data/lib/dbagile/adapter/sequel/schema/physical_dump.rb +106 -0
  10. data/lib/dbagile/adapter/sequel/schema/schema2sequel_args.rb +71 -0
  11. data/lib/dbagile/adapter/sequel/schema/table_driven.rb +52 -0
  12. data/lib/dbagile/adapter/sequel/schema/transaction_driven.rb +46 -0
  13. data/lib/dbagile/adapter/sequel/sequel_tracer.rb +144 -0
  14. data/lib/dbagile/adapter/sequel.rb +46 -0
  15. data/lib/dbagile/adapter.rb +15 -0
  16. data/lib/dbagile/command/api.rb +49 -0
  17. data/lib/dbagile/command/bulk/commons.rb +130 -0
  18. data/lib/dbagile/command/bulk/export.rb +99 -0
  19. data/lib/dbagile/command/bulk/import.rb +147 -0
  20. data/lib/dbagile/command/bulk.rb +3 -0
  21. data/lib/dbagile/command/class_methods.rb +103 -0
  22. data/lib/dbagile/command/db/add.rb +94 -0
  23. data/lib/dbagile/command/db/list.rb +40 -0
  24. data/lib/dbagile/command/db/ping.rb +49 -0
  25. data/lib/dbagile/command/db/rm.rb +52 -0
  26. data/lib/dbagile/command/db/stage.rb +81 -0
  27. data/lib/dbagile/command/db/use.rb +48 -0
  28. data/lib/dbagile/command/db.rb +6 -0
  29. data/lib/dbagile/command/dba.rb +121 -0
  30. data/lib/dbagile/command/help.rb +50 -0
  31. data/lib/dbagile/command/repo/create.rb +54 -0
  32. data/lib/dbagile/command/repo.rb +1 -0
  33. data/lib/dbagile/command/robust.rb +86 -0
  34. data/lib/dbagile/command/schema/check.rb +59 -0
  35. data/lib/dbagile/command/schema/commons.rb +118 -0
  36. data/lib/dbagile/command/schema/diff.rb +101 -0
  37. data/lib/dbagile/command/schema/dump.rb +48 -0
  38. data/lib/dbagile/command/schema/merge.rb +55 -0
  39. data/lib/dbagile/command/schema/sql_script.rb +124 -0
  40. data/lib/dbagile/command/schema.rb +6 -0
  41. data/lib/dbagile/command/sql/drop.rb +40 -0
  42. data/lib/dbagile/command/sql/heading.rb +34 -0
  43. data/lib/dbagile/command/sql/send.rb +67 -0
  44. data/lib/dbagile/command/sql/show.rb +42 -0
  45. data/lib/dbagile/command/sql.rb +4 -0
  46. data/lib/dbagile/command/web/tools.rb +23 -0
  47. data/lib/dbagile/command/web.rb +1 -0
  48. data/lib/dbagile/command.rb +158 -0
  49. data/lib/dbagile/contract/connection.rb +66 -0
  50. data/lib/dbagile/contract/data/dataset.rb +69 -0
  51. data/lib/dbagile/contract/data/table_driven.rb +49 -0
  52. data/lib/dbagile/contract/data/transaction_driven.rb +74 -0
  53. data/lib/dbagile/contract/data.rb +3 -0
  54. data/lib/dbagile/contract/robust/helpers.rb +19 -0
  55. data/lib/dbagile/contract/robust/optimistic/data/table_driven.rb +31 -0
  56. data/lib/dbagile/contract/robust/optimistic/data/transaction_driven.rb +45 -0
  57. data/lib/dbagile/contract/robust/optimistic/schema/table_driven.rb +53 -0
  58. data/lib/dbagile/contract/robust/optimistic/schema/transaction_driven.rb +45 -0
  59. data/lib/dbagile/contract/robust/optimistic.rb +18 -0
  60. data/lib/dbagile/contract/robust.rb +20 -0
  61. data/lib/dbagile/contract/schema/table_driven.rb +89 -0
  62. data/lib/dbagile/contract/schema/transaction_driven.rb +68 -0
  63. data/lib/dbagile/contract/schema.rb +2 -0
  64. data/lib/dbagile/contract/utils/delegate.rb +17 -0
  65. data/lib/dbagile/contract/utils/full.rb +13 -0
  66. data/lib/dbagile/contract/utils.rb +2 -0
  67. data/lib/dbagile/contract.rb +5 -0
  68. data/lib/dbagile/core/chain.rb +92 -0
  69. data/lib/dbagile/core/connection.rb +51 -0
  70. data/lib/dbagile/core/database.rb +221 -0
  71. data/lib/dbagile/core/io/dsl.rb +95 -0
  72. data/lib/dbagile/core/io/robustness.rb +82 -0
  73. data/lib/dbagile/core/io.rb +2 -0
  74. data/lib/dbagile/core/repository/builder.rb +67 -0
  75. data/lib/dbagile/core/repository/yaml_methods.rb +82 -0
  76. data/lib/dbagile/core/repository.rb +211 -0
  77. data/lib/dbagile/core/schema/builder/coercion.rb +210 -0
  78. data/lib/dbagile/core/schema/builder/concept_factory.rb +61 -0
  79. data/lib/dbagile/core/schema/builder.rb +187 -0
  80. data/lib/dbagile/core/schema/composite.rb +239 -0
  81. data/lib/dbagile/core/schema/computations/filter.rb +40 -0
  82. data/lib/dbagile/core/schema/computations/merge.rb +55 -0
  83. data/lib/dbagile/core/schema/computations/minus.rb +44 -0
  84. data/lib/dbagile/core/schema/computations/split.rb +37 -0
  85. data/lib/dbagile/core/schema/computations.rb +4 -0
  86. data/lib/dbagile/core/schema/database_schema.rb +129 -0
  87. data/lib/dbagile/core/schema/errors.rb +173 -0
  88. data/lib/dbagile/core/schema/logical/attribute.rb +68 -0
  89. data/lib/dbagile/core/schema/logical/constraint/candidate_key.rb +70 -0
  90. data/lib/dbagile/core/schema/logical/constraint/foreign_key.rb +121 -0
  91. data/lib/dbagile/core/schema/logical/constraint.rb +58 -0
  92. data/lib/dbagile/core/schema/logical/constraints.rb +28 -0
  93. data/lib/dbagile/core/schema/logical/heading.rb +47 -0
  94. data/lib/dbagile/core/schema/logical/relvar.rb +81 -0
  95. data/lib/dbagile/core/schema/logical.rb +24 -0
  96. data/lib/dbagile/core/schema/migrate/abstract_script.rb +35 -0
  97. data/lib/dbagile/core/schema/migrate/collapse_table.rb +15 -0
  98. data/lib/dbagile/core/schema/migrate/create_table.rb +15 -0
  99. data/lib/dbagile/core/schema/migrate/drop_table.rb +15 -0
  100. data/lib/dbagile/core/schema/migrate/expand_table.rb +15 -0
  101. data/lib/dbagile/core/schema/migrate/operation.rb +141 -0
  102. data/lib/dbagile/core/schema/migrate/stager.rb +282 -0
  103. data/lib/dbagile/core/schema/migrate.rb +2 -0
  104. data/lib/dbagile/core/schema/part.rb +114 -0
  105. data/lib/dbagile/core/schema/physical/index.rb +64 -0
  106. data/lib/dbagile/core/schema/physical/indexes.rb +12 -0
  107. data/lib/dbagile/core/schema/physical.rb +26 -0
  108. data/lib/dbagile/core/schema/robustness.rb +39 -0
  109. data/lib/dbagile/core/schema/schema_object.rb +94 -0
  110. data/lib/dbagile/core/schema.rb +254 -0
  111. data/lib/dbagile/core/transaction.rb +74 -0
  112. data/lib/dbagile/core.rb +7 -0
  113. data/lib/dbagile/environment/buffering.rb +45 -0
  114. data/lib/dbagile/environment/delegator.rb +59 -0
  115. data/lib/dbagile/environment/interactions.rb +208 -0
  116. data/lib/dbagile/environment/on_error.rb +47 -0
  117. data/lib/dbagile/environment/repository.rb +161 -0
  118. data/lib/dbagile/environment/robustness.rb +7 -0
  119. data/lib/dbagile/environment/testing.rb +23 -0
  120. data/lib/dbagile/environment.rb +122 -0
  121. data/lib/dbagile/errors.rb +30 -0
  122. data/lib/dbagile/io/csv.rb +99 -0
  123. data/lib/dbagile/io/json.rb +41 -0
  124. data/lib/dbagile/io/pretty_table.rb +128 -0
  125. data/lib/dbagile/io/ruby.rb +62 -0
  126. data/lib/dbagile/io/text.rb +18 -0
  127. data/lib/dbagile/io/type_safe.rb +65 -0
  128. data/lib/dbagile/io/xml.rb +35 -0
  129. data/lib/dbagile/io/yaml.rb +30 -0
  130. data/lib/dbagile/io.rb +94 -0
  131. data/lib/dbagile/loader.rb +16 -0
  132. data/lib/dbagile/plugin.rb +29 -0
  133. data/lib/dbagile/restful/client/delete.rb +22 -0
  134. data/lib/dbagile/restful/client/get.rb +24 -0
  135. data/lib/dbagile/restful/client/post.rb +22 -0
  136. data/lib/dbagile/restful/client/utils.rb +16 -0
  137. data/lib/dbagile/restful/client.rb +41 -0
  138. data/lib/dbagile/restful/middleware/delete.rb +22 -0
  139. data/lib/dbagile/restful/middleware/get.rb +27 -0
  140. data/lib/dbagile/restful/middleware/one_database.rb +82 -0
  141. data/lib/dbagile/restful/middleware/post.rb +23 -0
  142. data/lib/dbagile/restful/middleware/utils.rb +65 -0
  143. data/lib/dbagile/restful/middleware.rb +54 -0
  144. data/lib/dbagile/restful/server.rb +65 -0
  145. data/lib/dbagile/restful.rb +9 -0
  146. data/lib/dbagile/robustness/dependencies.rb +36 -0
  147. data/lib/dbagile/robustness/file_system.rb +53 -0
  148. data/lib/dbagile/robustness.rb +14 -0
  149. data/lib/dbagile/tools/file_system.rb +24 -0
  150. data/lib/dbagile/tools/math.rb +11 -0
  151. data/lib/dbagile/tools/ordered_hash.rb +39 -0
  152. data/lib/dbagile/tools/ruby.rb +78 -0
  153. data/lib/dbagile/tools/string.rb +6 -0
  154. data/lib/dbagile/tools/tuple.rb +49 -0
  155. data/lib/dbagile/tools.rb +6 -0
  156. data/lib/dbagile.rb +66 -0
  157. data/test/assumptions/equality.spec +11 -0
  158. data/test/assumptions/fixtures.rb +39 -0
  159. data/test/assumptions/inheritance.spec +17 -0
  160. data/test/assumptions/sequel/autonumber.spec +19 -0
  161. data/test/assumptions/sequel/connect.spec +29 -0
  162. data/test/assumptions/sequel/test.db +0 -0
  163. data/test/assumptions/stdlib/pathname.spec +13 -0
  164. data/test/assumptions/yaml/fixtures.rb +25 -0
  165. data/test/assumptions/yaml/to_yaml.spec +10 -0
  166. data/test/assumptions.spec +2 -0
  167. data/test/commands/bulk/export.spec +100 -0
  168. data/test/commands/bulk/import.spec +49 -0
  169. data/test/commands/db/add.spec +31 -0
  170. data/test/commands/db/list.spec +29 -0
  171. data/test/commands/db/ping.spec +21 -0
  172. data/test/commands/db/rm.spec +18 -0
  173. data/test/commands/db/use.spec +18 -0
  174. data/test/commands/dba.spec +54 -0
  175. data/test/commands/repo/create.spec +30 -0
  176. data/test/commands/schema/check.spec +25 -0
  177. data/test/commands/schema/diff.spec +30 -0
  178. data/test/commands/schema/dump.spec +23 -0
  179. data/test/commands/schema/fixtures/add_constraint.yaml +30 -0
  180. data/test/commands/schema/fixtures/announced.yaml +28 -0
  181. data/test/commands/schema/fixtures/effective.yaml +20 -0
  182. data/test/commands/schema/fixtures/invalid.yaml +6 -0
  183. data/test/commands/schema/sql_script.spec +56 -0
  184. data/test/commands/sql/drop.spec +25 -0
  185. data/test/commands/sql/heading.spec +7 -0
  186. data/test/commands/sql/scripts/delete.sql +1 -0
  187. data/test/commands/sql/scripts/insert.sql +2 -0
  188. data/test/commands/sql/send.spec +29 -0
  189. data/test/commands/sql/show.spec +17 -0
  190. data/test/commands.spec +138 -0
  191. data/test/contract/connection/transaction.ex +11 -0
  192. data/test/contract/connection.spec +9 -0
  193. data/test/contract/data/dataset/columns.ex +5 -0
  194. data/test/contract/data/dataset/count.ex +5 -0
  195. data/test/contract/data/dataset.spec +9 -0
  196. data/test/contract/data/table_driven/dataset.ex +31 -0
  197. data/test/contract/data/table_driven/exists_q.ex +27 -0
  198. data/test/contract/data/table_driven.spec +9 -0
  199. data/test/contract/data/transaction_driven/delete.ex +29 -0
  200. data/test/contract/data/transaction_driven/direct_sql.ex +19 -0
  201. data/test/contract/data/transaction_driven/insert.ex +8 -0
  202. data/test/contract/data/transaction_driven/update.ex +19 -0
  203. data/test/contract/data/transaction_driven.spec +18 -0
  204. data/test/contract/robust/data/table_driven.spec +15 -0
  205. data/test/contract/robust/data/transaction_driven.spec +21 -0
  206. data/test/contract/robust/schema/table_driven.spec +21 -0
  207. data/test/contract/robust/schema/transaction_driven.spec +19 -0
  208. data/test/contract/schema/table_driven/column_names.ex +5 -0
  209. data/test/contract/schema/table_driven/has_column_q.ex +13 -0
  210. data/test/contract/schema/table_driven/has_table_q.ex +11 -0
  211. data/test/contract/schema/table_driven/heading.ex +5 -0
  212. data/test/contract/schema/table_driven.spec +9 -0
  213. data/test/contract/schema/transaction_driven/create_table.ex +10 -0
  214. data/test/contract/schema/transaction_driven/drop_table.ex +10 -0
  215. data/test/contract/schema/transaction_driven.spec +18 -0
  216. data/test/contract.spec +66 -0
  217. data/test/fixtures/basics/data/basic_values.rb +13 -0
  218. data/test/fixtures/basics/data/empty_table.rb +3 -0
  219. data/test/fixtures/basics/data/non_empty_table.rb +4 -0
  220. data/test/fixtures/basics/data/parts.rb +8 -0
  221. data/test/fixtures/basics/data/suppliers.rb +7 -0
  222. data/test/fixtures/basics/data/supplies.rb +14 -0
  223. data/test/fixtures/basics/dbagile.idx +20 -0
  224. data/test/fixtures/basics/fixtures.yaml +28 -0
  225. data/test/fixtures/basics/robust.db +0 -0
  226. data/test/fixtures/basics/suppliers.yaml +30 -0
  227. data/test/fixtures/basics/test.db +0 -0
  228. data/test/fixtures/empty/dbagile.idx +5 -0
  229. data/test/fixtures.rb +152 -0
  230. data/test/restful/delete/no_format.ex +32 -0
  231. data/test/restful/delete.spec +8 -0
  232. data/test/restful/get/csv_format.ex +12 -0
  233. data/test/restful/get/json_format.ex +19 -0
  234. data/test/restful/get/query_string.ex +11 -0
  235. data/test/restful/get/text_format.ex +12 -0
  236. data/test/restful/get/yaml_format.ex +14 -0
  237. data/test/restful/get.spec +5 -0
  238. data/test/restful/post/no_format.ex +22 -0
  239. data/test/restful/post.spec +8 -0
  240. data/test/restful.spec +32 -0
  241. data/test/run_all_suite.rb +51 -0
  242. data/test/spec_helper.rb +26 -0
  243. data/test/support/be_a_valid_json_string.rb +19 -0
  244. data/test/support/be_a_valid_yaml_string.rb +18 -0
  245. data/test/unit/adapter/factor.spec +13 -0
  246. data/test/unit/adapter/sequel/new.spec +19 -0
  247. data/test/unit/command/api.spec +12 -0
  248. data/test/unit/command/command_for.spec +36 -0
  249. data/test/unit/command/command_name_of.spec +21 -0
  250. data/test/unit/command/ruby_method_for.spec +21 -0
  251. data/test/unit/command/sanity.spec +34 -0
  252. data/test/unit/contract/utils/delegate/delegate.spec +23 -0
  253. data/test/unit/core/chain/chain.spec +57 -0
  254. data/test/unit/core/chain/connect.spec +22 -0
  255. data/test/unit/core/chain/delegate_chain.spec +16 -0
  256. data/test/unit/core/chain/initialize.spec +19 -0
  257. data/test/unit/core/chain/plug.spec +31 -0
  258. data/test/unit/core/io/dsl/scope.spec +9 -0
  259. data/test/unit/core/repository/create_bang.spec +31 -0
  260. data/test/unit/core/repository/current.spec +31 -0
  261. data/test/unit/core/repository/database.spec +47 -0
  262. data/test/unit/core/repository/fixtures/corrupted/dbagile.idx +1 -0
  263. data/test/unit/core/repository/fixtures/test_and_prod/dbagile.idx +21 -0
  264. data/test/unit/core/repository/fixtures.rb +25 -0
  265. data/test/unit/core/repository/has_database_q.spec +16 -0
  266. data/test/unit/core/repository/load.spec +51 -0
  267. data/test/unit/core/repository/to_yaml.spec +17 -0
  268. data/test/unit/core/schema/check.spec +32 -0
  269. data/test/unit/core/schema/empty_q.spec +18 -0
  270. data/test/unit/core/schema/filter.spec +42 -0
  271. data/test/unit/core/schema/fixtures/dbagile.yaml +7 -0
  272. data/test/unit/core/schema/fixtures/empty.yaml +11 -0
  273. data/test/unit/core/schema/fixtures/invalid.yaml +54 -0
  274. data/test/unit/core/schema/fixtures/left.yaml +46 -0
  275. data/test/unit/core/schema/fixtures/left_minus_right.yaml +31 -0
  276. data/test/unit/core/schema/fixtures/right.yaml +46 -0
  277. data/test/unit/core/schema/fixtures/right_minus_left.yaml +31 -0
  278. data/test/unit/core/schema/fixtures/suppliers_and_parts.yaml +30 -0
  279. data/test/unit/core/schema/fixtures.rb +32 -0
  280. data/test/unit/core/schema/merge.spec +72 -0
  281. data/test/unit/core/schema/minus.spec +26 -0
  282. data/test/unit/core/schema/sanity.spec +39 -0
  283. data/test/unit/core/schema/split.spec +58 -0
  284. data/test/unit/core/schema/stage_script.spec +26 -0
  285. data/test/unit/core/schema/to_yaml.spec +13 -0
  286. data/test/unit/core/schema/yaml_display.spec +14 -0
  287. data/test/unit/core/schema/yaml_load.spec +20 -0
  288. data/test/unit/core/transaction/transaction.spec +10 -0
  289. data/test/unit/fixtures.rb +67 -0
  290. data/test/unit/io/to_xxx.spec +52 -0
  291. data/test/unit/plugin/options.spec +21 -0
  292. data/test/unit/plugin/tuple_heading.spec +11 -0
  293. data/test/unit/plugin/with_options.spec +12 -0
  294. data/test/unit/tools/ruby/class_unqualified_name.spec +26 -0
  295. data/test/unit/tools/ruby/extract_file_rdoc.spec +10 -0
  296. data/test/unit/tools/ruby/fixtures/rdoc.txt +12 -0
  297. data/test/unit/tools/ruby/fixtures.rb +19 -0
  298. data/test/unit/tools/ruby/optional_args_block_call.spec +35 -0
  299. data/test/unit/tools/ruby/parent_module.spec +21 -0
  300. data/test/unit/tools/ruby/rdoc_file_paragraphs.spec +13 -0
  301. data/test/unit/tools/tuple/tuple_heading.spec +11 -0
  302. data/test/unit/tools/tuple/tuple_key.spec +27 -0
  303. data/test/unit/tools/tuple/tuple_project.spec +23 -0
  304. data/test/unit.spec +3 -0
  305. metadata +422 -0
@@ -0,0 +1,26 @@
1
+ require File.expand_path('../fixtures', __FILE__)
2
+ describe "DbAgile::Core::Schema#stage_script" do
3
+
4
+ let(:announced) { DbAgile::Fixtures::Core::Schema::schema(:left) }
5
+ let(:effective) { DbAgile::Fixtures::Core::Schema::schema(:right) }
6
+
7
+ it "should compute the operation list correctly" do
8
+ merged = DbAgile::Core::Schema::merge(effective, announced){|l,r| nil}
9
+ ops = DbAgile::Core::Schema::stage_script(merged, {:expand => true, :collapse => true})
10
+ ops.should be_kind_of(DbAgile::Core::Schema::Migrate::AbstractScript)
11
+ ops.each{|op|
12
+ case op.kind
13
+ when :create_table
14
+ op.operations.size.should >= 1
15
+ when :drop_table
16
+ when :expand_table
17
+ op.operations.size.should == 1
18
+ when :collapse_table
19
+ op.operations.size.should == 1
20
+ else
21
+ raise "Unexpected operation kind #{op.kind}"
22
+ end
23
+ }
24
+ end
25
+
26
+ end
@@ -0,0 +1,13 @@
1
+ require File.expand_path('../fixtures', __FILE__)
2
+ require 'yaml'
3
+ describe "DbAgile::Core::Schema#to_yaml /" do
4
+
5
+ it "should work on all fixture files" do
6
+ DbAgile::Fixtures::Core::Schema::each_schema_file{|yaml_file|
7
+ schema = DbAgile::Core::Schema::yaml_file_load(yaml_file)
8
+ schema.to_yaml.should be_a_valid_yaml_string
9
+ DbAgile::Core::Schema::yaml_load(schema.to_yaml).should be_kind_of(DbAgile::Core::Schema::DatabaseSchema)
10
+ }
11
+ end
12
+
13
+ end
@@ -0,0 +1,14 @@
1
+ require File.expand_path('../fixtures', __FILE__)
2
+ describe "DbAgile::Core::Schema / to_yaml_str" do
3
+
4
+ let(:left) { DbAgile::Fixtures::Core::Schema::schema(:left) }
5
+ let(:right){ DbAgile::Fixtures::Core::Schema::schema(:right) }
6
+
7
+ it "should not print the ---" do
8
+ env = DbAgile::default_environment
9
+ env.message_buffer = StringIO.new
10
+ merged = DbAgile::Core::Schema::merge(left, right){|l,r| nil}
11
+ lambda{ merged.yaml_display(env) }.should_not raise_error
12
+ end
13
+
14
+ end
@@ -0,0 +1,20 @@
1
+ require File.expand_path('../fixtures', __FILE__)
2
+ describe "DbAgile::Core::Schema::yaml_load /" do
3
+
4
+ let(:yaml_file){ DbAgile::Fixtures::Core::Schema::schema_file(:suppliers_and_parts) }
5
+
6
+ it "should be YAML loadable from a file" do
7
+ DbAgile::Core::Schema::yaml_file_load(yaml_file).should be_kind_of(DbAgile::Core::Schema::DatabaseSchema)
8
+ end
9
+
10
+ it "should be YAML loadable from an IO" do
11
+ File.open(yaml_file, "r") do |io|
12
+ DbAgile::Core::Schema::yaml_file_load(io).should be_kind_of(DbAgile::Core::Schema::DatabaseSchema)
13
+ end
14
+ end
15
+
16
+ it "should be YAML loadable from an String" do
17
+ DbAgile::Core::Schema::yaml_load(File.read(yaml_file)).should be_kind_of(DbAgile::Core::Schema::DatabaseSchema)
18
+ end
19
+
20
+ end
@@ -0,0 +1,10 @@
1
+ require File.expand_path('../../../fixtures', __FILE__)
2
+ describe "DbAgile::Core::Transaction" do
3
+
4
+ subject{ ::DbAgile::Core::Transaction.new(nil) }
5
+ it{ should respond_to(:ping) }
6
+ it{ should respond_to(:dataset) }
7
+ it{ should respond_to(:create_table) }
8
+
9
+ end
10
+
@@ -0,0 +1,67 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+ module DbAgile
3
+ module Fixtures
4
+
5
+ module Utils
6
+
7
+ # Finds a file
8
+ def find_file(name_or_file, resolver, extension = nil)
9
+ if name_or_file.kind_of?(Symbol)
10
+ name_or_file = find_file("#{name_or_file}#{extension}", resolver)
11
+ end
12
+ unless name_or_file[0, 1] == '/'
13
+ name_or_file = File.expand_path("../fixtures/#{name_or_file}#{extension}", resolver)
14
+ end
15
+ name_or_file
16
+ end
17
+
18
+ # Yields block for each file with a given extension
19
+ def each_file(resolver, extension, &block)
20
+ Dir[File.expand_path("../fixtures/*.#{extension}", resolver)].each(&block)
21
+ end
22
+
23
+ # Yields block for each file with a given extension
24
+ def each_dir(resolver, &block)
25
+ Dir[File.expand_path("../fixtures/*", resolver)].each(&block)
26
+ end
27
+
28
+ end
29
+
30
+ class SayHello
31
+ def del_to_block
32
+ yield
33
+ end
34
+ def say_hello(who)
35
+ who
36
+ end
37
+ end
38
+
39
+ class Reverse
40
+ def say_hello(who)
41
+ delegate.say_hello(who.reverse)
42
+ end
43
+ end
44
+
45
+ class Upcase
46
+ def say_hello(who)
47
+ delegate.say_hello(who.upcase)
48
+ end
49
+ end
50
+
51
+ class Downcase
52
+ def say_hello(who)
53
+ delegate.say_hello(who.downcase)
54
+ end
55
+ end
56
+
57
+ class Capitalize
58
+ def initialize(method = :capitalize)
59
+ @method = method
60
+ end
61
+ def say_hello(who)
62
+ delegate.say_hello(who.send(@method))
63
+ end
64
+ end
65
+
66
+ end
67
+ end
@@ -0,0 +1,52 @@
1
+ require File.expand_path('../../fixtures', __FILE__)
2
+
3
+ describe "DbAgile::IO /" do
4
+
5
+ # Class sanity
6
+ describe "Class interface" do
7
+
8
+ DbAgile::IO::KNOWN_TO_FORMATS.each do |format|
9
+ specify{ DbAgile::IO.should respond_to("to_#{format}".to_sym) }
10
+ end
11
+
12
+ DbAgile::IO::KNOWN_FROM_FORMATS.each do |format|
13
+ specify{ DbAgile::IO.should respond_to("from_#{format}".to_sym) }
14
+ end
15
+
16
+ end
17
+
18
+ # Some tools
19
+ let(:relation_like){[
20
+ {:id => 1, :name => "DbAgile", :version => DbAgile::VERSION},
21
+ {:id => 2, :name => "SByC", :version => SByC::VERSION}
22
+ ]}
23
+ let(:columns){ [ :id, :name, :version ] }
24
+
25
+ ::DbAgile::IO::KNOWN_FORMATS.each do |format|
26
+
27
+ describe "#{format} format /" do
28
+ let(:options){ DbAgile::IO::roundtrip_options(format) }
29
+ let(:encoder){ lambda {
30
+ DbAgile::IO.send("to_#{format}".to_sym, relation_like, columns, StringIO.new, options)
31
+ }}
32
+ let(:decoder){ lambda {
33
+ DbAgile::IO.send("from_#{format}".to_sym, StringIO.new(encoder.call.string), options)
34
+ }}
35
+
36
+ specify "it should support a to_#{format} that returns the buffer" do
37
+ encoder.should_not raise_error
38
+ encoder.call.should be_kind_of(StringIO)
39
+ end
40
+
41
+ next unless DbAgile::IO.respond_to?("from_#{format}")
42
+
43
+ specify "it should support roundtrip" do
44
+ decoder.should_not raise_error
45
+ decoder.call.should == relation_like
46
+ end
47
+
48
+ end
49
+
50
+ end # ::DbAgile::IO::KNOWN_FORMATS
51
+
52
+ end # describe DbAgile::IO
@@ -0,0 +1,21 @@
1
+ require File.expand_path('../../fixtures', __FILE__)
2
+ describe "::DbAgile::Plugin#options" do
3
+
4
+ let(:defplugin){
5
+ class DefPlugin < ::DbAgile::Plugin
6
+ def default_options() {:default => 12} end
7
+ end
8
+ DefPlugin
9
+ }
10
+
11
+ describe "When initialize with default options without overriding" do
12
+ subject{ defplugin.new(:name => "dbagile").options }
13
+ it { should == {:default => 12, :name => "dbagile"} }
14
+ end
15
+
16
+ describe "When initialize with default options with overriding" do
17
+ subject{ defplugin.new(:default => 1, :name => "dbagile").options }
18
+ it { should == {:default => 1, :name => "dbagile"} }
19
+ end
20
+
21
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../../fixtures', __FILE__)
2
+ describe "::DbAgile::Plugin#tuple_heading" do
3
+
4
+ let(:plugin){ DbAgile::Plugin.new }
5
+
6
+ describe "When called on on a typical tuple" do
7
+ subject{ plugin.send(:tuple_heading, :id => 1, :name => "dbagile") }
8
+ it{ should == {:id => Fixnum, :name => String} }
9
+ end
10
+
11
+ end
@@ -0,0 +1,12 @@
1
+ require File.expand_path('../../fixtures', __FILE__)
2
+ describe "::DbAgile::Plugin.with_options" do
3
+
4
+ let(:subClass){ Class.new(::DbAgile::Plugin) }
5
+
6
+ context "when called on a subclass" do
7
+ subject{ subClass[:hello => "world"] }
8
+ it{ should be_kind_of(subClass) }
9
+ specify{ subject.options.should == {:hello => "world"}}
10
+ end
11
+
12
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path('../fixtures', __FILE__)
2
+ describe "DbAgile::RubyTools#class_unqualified_name /" do
3
+
4
+ subject{ DbAgile::RubyTools::class_unqualified_name(clazz) }
5
+
6
+ describe "when called on unqualified class" do
7
+ let(:clazz){ ::String }
8
+ it{ should == "String" }
9
+ end
10
+
11
+ describe "when called on qualified class" do
12
+ let(:clazz){ DbAgile::RubyTools }
13
+ it{ should == "RubyTools" }
14
+ end
15
+
16
+ describe "when called on long qualified class" do
17
+ let(:clazz){ DbAgile::Fixtures::Utils }
18
+ it{ should == "Utils" }
19
+ end
20
+
21
+ describe "when piped with parent_module" do
22
+ let(:clazz){ DbAgile::RubyTools::parent_module(DbAgile::Fixtures::Utils) }
23
+ it{ should == "Fixtures" }
24
+ end
25
+
26
+ end
@@ -0,0 +1,10 @@
1
+ require File.expand_path('../fixtures', __FILE__)
2
+ describe "DbAgile::RubyTools#extract_file_rdoc /" do
3
+
4
+ subject{ DbAgile::RubyTools::extract_file_rdoc(File.expand_path('../fixtures.rb', __FILE__)) }
5
+
6
+ it "should be as expected" do
7
+ subject.should == File.read(File.expand_path('../fixtures/rdoc.txt', __FILE__))
8
+ end
9
+
10
+ end
@@ -0,0 +1,12 @@
1
+
2
+ This is a fixtures helper that matches documentation conventions.
3
+
4
+ This is a second paragraph
5
+ That append on two lines
6
+
7
+
8
+ WARNING:
9
+ This kind of indentation should not be interpreted as code
10
+
11
+ But this one yes
12
+
@@ -0,0 +1,19 @@
1
+ require File.expand_path('../../../fixtures', __FILE__)
2
+ module DbAgile
3
+ module Fixtures
4
+ #
5
+ # This is a fixtures helper that matches documentation conventions.
6
+ #
7
+ # This is a second paragraph
8
+ # That append on two lines
9
+ #
10
+ #
11
+ # WARNING:
12
+ # This kind of indentation should not be interpreted as code
13
+ #
14
+ # But this one yes
15
+ #
16
+ module RubyTools
17
+ end # module RubyTools
18
+ end # module Fixtures
19
+ end # module DbAgile
@@ -0,0 +1,35 @@
1
+ require File.expand_path('../../../fixtures', __FILE__)
2
+ describe "DbAgile::RubyTools#optional_args_block_call /" do
3
+
4
+ subject{ DbAgile::RubyTools::optional_args_block_call(block, args) }
5
+
6
+ describe "when block has no arguments /" do
7
+ let(:block){ lambda {
8
+ "ok"
9
+ } }
10
+
11
+ describe "when no args are given" do
12
+ let(:args){ [ ] }
13
+ it { should == "ok" }
14
+ end
15
+
16
+ describe "when no args are given" do
17
+ let(:args){ [ "hello" ] }
18
+ it { should == "ok" }
19
+ end
20
+
21
+ end
22
+
23
+ describe "when block has one arguments /" do
24
+ let(:block){ lambda {|name|
25
+ name
26
+ } }
27
+
28
+ describe "when args are given" do
29
+ let(:args){ [ "hello" ] }
30
+ it { should == "hello" }
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,21 @@
1
+ require File.expand_path('../fixtures', __FILE__)
2
+ describe "DbAgile::RubyTools#parent_module /" do
3
+
4
+ subject{ DbAgile::RubyTools::parent_module(clazz) }
5
+
6
+ describe "when called on unqualified class" do
7
+ let(:clazz){ ::String }
8
+ it{ should be_nil }
9
+ end
10
+
11
+ describe "when called on qualified class" do
12
+ let(:clazz){ DbAgile::RubyTools }
13
+ it{ should == DbAgile }
14
+ end
15
+
16
+ describe "when called on long qualified class" do
17
+ let(:clazz){ DbAgile::Fixtures::Utils }
18
+ it{ should == DbAgile::Fixtures }
19
+ end
20
+
21
+ end
@@ -0,0 +1,13 @@
1
+ require File.expand_path('../fixtures', __FILE__)
2
+ describe "DbAgile::RubyTools#extract_file_rdoc /" do
3
+
4
+ subject{ DbAgile::RubyTools::rdoc_file_paragraphs(File.expand_path('../fixtures.rb', __FILE__)) }
5
+
6
+ it "should be as expected" do
7
+ subject.should == ["This is a fixtures helper that matches documentation conventions.\n",
8
+ "This is a second paragraph\nThat append on two lines\n",
9
+ "WARNING:\n This kind of indentation should not be interpreted as code\n",
10
+ " But this one yes\n"]
11
+ end
12
+
13
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../../../fixtures', __FILE__)
2
+ describe "::DbAgile::Tools::Tuple#tuple_heading" do
3
+
4
+ let(:tools){ Object.new.extend(DbAgile::Tools::Tuple) }
5
+
6
+ describe "When called on on a typical tuple" do
7
+ subject{ tools.tuple_heading(:id => 1, :name => "dbagile") }
8
+ it{ should == {:id => Fixnum, :name => String} }
9
+ end
10
+
11
+ end
@@ -0,0 +1,27 @@
1
+ require File.expand_path('../../../fixtures', __FILE__)
2
+ describe "::DbAgile::Tools::Tuple#tuple_key" do
3
+
4
+ let(:tools){ Object.new.extend(DbAgile::Tools::Tuple) }
5
+ let(:tuple){ {:id => 1, :name => "dbagile", :version => DbAgile::VERSION} }
6
+
7
+ describe "When called without keys info" do
8
+ subject{ tools.tuple_key(tuple, nil) }
9
+ it{ should == tuple }
10
+ end
11
+
12
+ describe "When called without matching key" do
13
+ subject{ tools.tuple_key(tuple, [[:hello], [:world, [:again]]]) }
14
+ it{ should == tuple }
15
+ end
16
+
17
+ describe "When called with a single matching key" do
18
+ subject{ tools.tuple_key(tuple, [ [:id] ]) }
19
+ it{ should == {:id => 1} }
20
+ end
21
+
22
+ describe "When called with a composite second matching key" do
23
+ subject{ tools.tuple_key(tuple, [ [:id2], [:name, :version] ]) }
24
+ it{ should == {:name => "dbagile", :version => DbAgile::VERSION} }
25
+ end
26
+
27
+ end
@@ -0,0 +1,23 @@
1
+ require File.expand_path('../../../fixtures', __FILE__)
2
+ describe "::DbAgile::Tools::Tuple#tuple_project" do
3
+
4
+ let(:tools){ Object.new.extend(DbAgile::Tools::Tuple) }
5
+ let(:tuple){ {:id => 1, :name => "dbagile"} }
6
+
7
+ describe "When called on on a typical tuple" do
8
+ subject{ tools.tuple_project(tuple, [:id]) }
9
+ it{ should == {:id => 1} }
10
+ end
11
+
12
+ describe "When called on on a typical tuple" do
13
+ subject{ tools.tuple_project(tuple, [:id, :name]) }
14
+ it{ should == {:id => 1, :name => "dbagile"} }
15
+ end
16
+
17
+ describe "When called on on a typical tuple" do
18
+ subject{ tools.tuple_project(tuple, [:noone]) }
19
+ it{ should == {:noone => nil} }
20
+ end
21
+
22
+
23
+ end
data/test/unit.spec ADDED
@@ -0,0 +1,3 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+ dbagile_load_all_subspecs(__FILE__)
3
+