oci8_simple 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ source :rubygems
2
+
1
3
  gem "ruby-oci8", "~>2.0.4"
2
4
 
3
5
  group :development do
data/Gemfile.lock CHANGED
@@ -1,4 +1,5 @@
1
1
  GEM
2
+ remote: http://rubygems.org/
2
3
  specs:
3
4
  git (1.2.5)
4
5
  jeweler (1.5.2)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
data/bin/describe ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
3
+ require 'oci8_simple'
4
+
5
+ Oci8Simple::Describe.run_from_argv
@@ -90,12 +90,15 @@ environment:
90
90
  ERR
91
91
  end
92
92
 
93
- private
94
-
93
+ # Create and return raw Oci8 connection
95
94
  def conn
96
95
  @conn ||= new_connection
97
96
  end
98
97
 
98
+ private
99
+
100
+
101
+
99
102
  def new_connection
100
103
  c = OCI8.new(config["username"], config["password"], config["database"])
101
104
  c.autocommit = true
@@ -0,0 +1,59 @@
1
+ class Oci8Simple::Describe
2
+ def initialize(env=nil)
3
+ @env = env || "development"
4
+ end
5
+
6
+ def run(table)
7
+ description = client.conn.describe_table(table)
8
+ c = description.columns.sort{|a,b| a.name <=> b.name }
9
+ max_name = max(c.map(&:name)) + 3
10
+ max_type = max(c.map {|col| type_and_size(col)}) + 1
11
+ c.map do |col|
12
+ "\"#{col.name}\"".ljust(max_name, ' ') + type_and_size(col).ljust(max_type, ' ') + null(col)
13
+ end.map(&:upcase).join("\n")
14
+ end
15
+
16
+ def null(col)
17
+ col.nullable? ? "" : "NOT NULL"
18
+ end
19
+
20
+ def type_and_size(col)
21
+ str = "#{col.data_type}"
22
+ if(col.data_type.to_s =~ /varchar/i)
23
+ str << "(#{col.char_size} CHAR)"
24
+ elsif(col.data_type == :number)
25
+ str << "(#{col.precision})"
26
+ end
27
+ str
28
+ end
29
+
30
+ def max(arr)
31
+ arr.map(&:length).max
32
+ end
33
+
34
+ def self.usage
35
+ "Usage: #{0} TABLE_NAME [ENVIRONMENT]"
36
+ end
37
+
38
+ def self.run_from_argv
39
+ o = OptionParser.new do |opt|
40
+ opt.banner = usage
41
+ opt.on("-v", "--version", "Show version") do
42
+ puts "version #{File.read(File.join(File.dirname(__FILE__), '..', '..', 'VERSION'))}"
43
+ exit
44
+ end
45
+ end
46
+ o.parse!
47
+ if(ARGV[0].nil?)
48
+ puts o
49
+ else
50
+ puts self.new(ARGV[1]).run(ARGV[0])
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ def client
57
+ @client ||= Oci8Simple::Client.new(@env)
58
+ end
59
+ end
data/lib/oci8_simple.rb CHANGED
@@ -6,5 +6,6 @@ require 'yaml'
6
6
  gem 'ruby-oci8'
7
7
  require 'oci8'
8
8
 
9
+ require 'oci8_simple/cli'
9
10
  require 'oci8_simple/client'
10
- require 'oci8_simple/cli'
11
+ require 'oci8_simple/describe'
data/oci8_simple.gemspec CHANGED
@@ -5,17 +5,16 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{oci8_simple}
8
- s.version = "0.3.0"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Billy Reisinger"]
12
- s.date = %q{2011-05-16}
13
- s.default_executable = %q{oci8_simple}
12
+ s.date = %q{2011-06-10}
14
13
  s.description = %q{Run single statements against an arbitrary Oracle schema. This client is intended to be used by simple
15
14
  command-line scripts to aid automation. This is *not* meant to replace an ORM such as ActiveRecord + OracleEnhancedAdapter.
16
15
  The only prerequisite to running this code is that you have installed the ruby-oci8 gem on your machine.}
17
16
  s.email = %q{billy.reisinger@gmail.com}
18
- s.executables = ["oci8_simple"]
17
+ s.executables = ["oci8_simple", "describe"]
19
18
  s.extra_rdoc_files = [
20
19
  "README.rdoc"
21
20
  ]
@@ -27,13 +26,16 @@ Gem::Specification.new do |s|
27
26
  "README.rdoc",
28
27
  "Rakefile",
29
28
  "VERSION",
29
+ "bin/describe",
30
30
  "bin/oci8_simple",
31
31
  "lib/oci8_simple.rb",
32
32
  "lib/oci8_simple/cli.rb",
33
33
  "lib/oci8_simple/client.rb",
34
+ "lib/oci8_simple/describe.rb",
34
35
  "oci8_simple.gemspec",
35
36
  "test/cli_test.rb",
36
37
  "test/client_test.rb",
38
+ "test/describe_test.rb",
37
39
  "test/helper.rb"
38
40
  ]
39
41
  s.homepage = %q{http://github.com/unclebilly/oci8_simple}
@@ -44,6 +46,7 @@ Gem::Specification.new do |s|
44
46
  s.test_files = [
45
47
  "test/cli_test.rb",
46
48
  "test/client_test.rb",
49
+ "test/describe_test.rb",
47
50
  "test/helper.rb"
48
51
  ]
49
52
 
@@ -0,0 +1,30 @@
1
+ require File.join(File.dirname(__FILE__), 'helper')
2
+ class DescribeTest < Test::Unit::TestCase
3
+ context "Given a table and some data" do
4
+ setup do
5
+ @client = Oci8Simple::Client.new("test")
6
+ @client.run "DROP TABLE OCI8_SIMPLE_TEST CASCADE CONSTRAINTS" rescue nil
7
+ @client.run <<-SQL
8
+ CREATE TABLE "OCI8_SIMPLE_TEST"
9
+ (
10
+ "NAME" VARCHAR2(400 CHAR) NOT NULL ENABLE,
11
+ "ID" NUMBER(38,0) NOT NULL ENABLE,
12
+ "TEXTS" CLOB
13
+ )
14
+ SQL
15
+ @describe = Oci8Simple::Describe.new("test")
16
+ end
17
+ context "describing a table" do
18
+ setup do
19
+ end
20
+ should "format results for the command line" do
21
+ expected=<<-STR
22
+ "ID" NUMBER(38) NOT NULL
23
+ "NAME" VARCHAR2(400 CHAR) NOT NULL
24
+ "TEXTS" CLOB
25
+ STR
26
+ assert_equal(expected.chop, @describe.run("oci8_simple_test"))
27
+ end
28
+ end
29
+ end
30
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oci8_simple
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 0.3.0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Billy Reisinger
@@ -15,8 +15,8 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-16 00:00:00 -05:00
19
- default_executable: oci8_simple
18
+ date: 2011-06-10 00:00:00 -05:00
19
+ default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: ruby-oci8
@@ -117,6 +117,7 @@ description: |-
117
117
  email: billy.reisinger@gmail.com
118
118
  executables:
119
119
  - oci8_simple
120
+ - describe
120
121
  extensions: []
121
122
 
122
123
  extra_rdoc_files:
@@ -129,13 +130,16 @@ files:
129
130
  - README.rdoc
130
131
  - Rakefile
131
132
  - VERSION
133
+ - bin/describe
132
134
  - bin/oci8_simple
133
135
  - lib/oci8_simple.rb
134
136
  - lib/oci8_simple/cli.rb
135
137
  - lib/oci8_simple/client.rb
138
+ - lib/oci8_simple/describe.rb
136
139
  - oci8_simple.gemspec
137
140
  - test/cli_test.rb
138
141
  - test/client_test.rb
142
+ - test/describe_test.rb
139
143
  - test/helper.rb
140
144
  has_rdoc: true
141
145
  homepage: http://github.com/unclebilly/oci8_simple
@@ -174,4 +178,5 @@ summary: Run single statements against an arbitrary Oracle schema.
174
178
  test_files:
175
179
  - test/cli_test.rb
176
180
  - test/client_test.rb
181
+ - test/describe_test.rb
177
182
  - test/helper.rb