shipyard 0.0.1 → 0.0.2

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/bin/shipyard CHANGED
@@ -3,5 +3,22 @@
3
3
  $:.unshift(File.dirname(__FILE__) + '/../lib/')
4
4
  require 'shipyard'
5
5
 
6
- builder = Shipyard::Builder.new('Manifest')
6
+ MANIFEST_FILE = 'Manifest'
7
+
8
+ def usage
9
+ puts <<-END
10
+ Usage: shipyard <table name>
11
+ END
12
+ end
13
+
14
+ if ARGV.size != 1
15
+ usage
16
+ Process.exit(1)
17
+ end
18
+
19
+ if !File.exists?(MANIFEST_FILE)
20
+ puts "No Manifest file found in current directory."
21
+ Process.exit(2)
22
+ end
23
+ builder = Shipyard::Builder.new(MANIFEST_FILE, ARGV.first)
7
24
  builder.generate
@@ -7,13 +7,20 @@ module Shipyard
7
7
  attr_reader :table
8
8
  attr_reader :db
9
9
 
10
- def initialize(manifest_file)
11
- @manifest = Manifest.new(manifest_file)
10
+ def initialize(manifest_file, table)
11
+ @manifest = Manifest.new(manifest_file, table)
12
12
  @context = Context.new(@manifest)
13
13
  end
14
14
 
15
15
  def generate
16
- Dir['*.erb'].each do |filename|
16
+ templates = Dir['*.erb']
17
+
18
+ templates.each do |template|
19
+ abort "No destination mapped for template '#{template}'" unless !!@manifest.destination_for(template)
20
+ end
21
+
22
+ puts "Rendering to output directory #{@manifest.output_dir}"
23
+ templates.each do |filename|
17
24
  open(filename) do |file|
18
25
  # pass in the context object and render the template
19
26
  template = ERB.new(file.read)
@@ -21,9 +28,13 @@ module Shipyard
21
28
  code = template.result(@context.get_binding)
22
29
 
23
30
  # write the rendered file to the associated destination
24
- output_file = File.join(@manifest.output_dir, @manifest.destination_for(filename))
31
+ dst = @manifest.destination_for(filename)
32
+ output_file = File.join(@manifest.output_dir, dst)
25
33
  File.makedirs(File.dirname(output_file))
26
- open(output_file, 'w') { |f| f.write(code) }
34
+ open(output_file, 'w') do |f|
35
+ puts "\t#{filename} => #{output_file}"
36
+ f.write(code)
37
+ end
27
38
  end
28
39
  end
29
40
  end
@@ -5,17 +5,17 @@ class Context
5
5
 
6
6
  def initialize(manifest)
7
7
  @db = manifest.database
8
- @table = manifest.table.to_s
8
+ @table = manifest.table
9
+ @row = manifest.row
9
10
  @dataset = @db[manifest.table]
10
- @row = Inflector::singularize(manifest.table.to_s)
11
11
  end
12
12
 
13
13
  def columns
14
- columns_with_types.keys.map(&:to_s)
14
+ @db.schema(@table.to_sym).map { |arr| arr[0].to_s }
15
15
  end
16
16
 
17
17
  def columns_with_types
18
- @db.schema(@table.to_sym).inject({}) { |r, v| r[v[0].to_s] = v[1][:type].to_s; r }
18
+ @db.schema(@table.to_sym).inject({}) { |r, v| r[v[0].to_s] = v[1][:type]; r }
19
19
  end
20
20
 
21
21
  def primary_key
@@ -1,17 +1,16 @@
1
+ require 'active_support/inflector'
2
+
1
3
  module Shipyard
2
4
  class Manifest
3
- attr_reader :maps
5
+ attr_reader :table, :row, :maps
4
6
 
5
- def initialize(filename)
7
+ def initialize(filename, table)
8
+ @table = table
9
+ @row = ActiveSupport::Inflector.singularize(table)
6
10
  @maps = {}
7
11
  open(filename) { |file| instance_eval(file.read) }
8
12
  end
9
13
 
10
- def table(name = nil)
11
- @table = name if !!name
12
- @table
13
- end
14
-
15
14
  def database(sequel = nil)
16
15
  @database = sequel if !!sequel
17
16
  @database
data/spec/context_spec.rb CHANGED
@@ -6,18 +6,17 @@ module Shipyard
6
6
 
7
7
  before(:each) do
8
8
  @test_dir = 'test_manifest'
9
+ @test_table = 'users'
9
10
  Dir.mkdir(@test_dir)
10
11
  @test_manifest = File.join(@test_dir, 'Manifest')
11
12
  File.open(@test_manifest, 'w') do |file|
12
13
  file.write <<-EOF
13
- table :test_table
14
-
15
14
  database Sequel.sqlite
16
15
 
17
16
  map :test_template, 'controllers/test.rb'
18
17
  EOF
19
18
  end
20
- @m = Manifest.new(@test_manifest)
19
+ @m = Manifest.new(@test_manifest, @test_table)
21
20
  end
22
21
 
23
22
  after(:each) do
@@ -28,27 +27,27 @@ module Shipyard
28
27
 
29
28
  it "should read the table name from the manifest" do
30
29
  ctx = Context.new(@m)
31
- ctx.table.should == 'test_table'
30
+ ctx.table.should == @test_table
32
31
  end
33
32
 
34
33
  it "should have a method to return the columns of the table" do
35
34
  ctx = Context.new(@m)
36
- ctx.db.create_table :test_table do
35
+ ctx.db.create_table @test_table.to_sym do
37
36
  primary_key :id
38
37
  String :name
39
38
  end
40
- ctx.columns.should == [:id, :name]
39
+ ctx.columns.should == ['id', 'name']
41
40
  end
42
41
 
43
42
  it "should have a method to return the columns with their types" do
44
43
  ctx = Context.new(@m)
45
- ctx.db.create_table :test_table do
44
+ ctx.db.create_table @test_table.to_sym do
46
45
  primary_key :id
47
46
  column :name, :text
48
47
  column :count, :integer
49
48
  end
50
49
 
51
- ctx.columns_with_types.should == {:id => :integer, :name => :string, :count => :integer}
50
+ ctx.columns_with_types.should == {'id' => :integer, 'name' => :string, 'count' => :integer}
52
51
  end
53
52
 
54
53
  end
@@ -5,19 +5,18 @@ module Shipyard
5
5
 
6
6
  before(:each) do
7
7
  @test_db = 'test.db'
8
+ @test_table = 'users'
8
9
  @test_dir = 'test_manifest'
9
10
  Dir.mkdir(@test_dir)
10
11
  @test_manifest = File.join(@test_dir, 'Manifest')
11
12
  File.open(@test_manifest, 'w') do |file|
12
13
  file.write <<-EOF
13
- table :test_table
14
-
15
14
  database Sequel.sqlite
16
15
 
17
16
  map :test_template, 'controllers/test.rb'
18
17
  EOF
19
18
  end
20
- @m = Manifest.new(@test_manifest)
19
+ @m = Manifest.new(@test_manifest, @test_table)
21
20
  end
22
21
 
23
22
  after(:each) do
@@ -26,8 +25,8 @@ module Shipyard
26
25
  @m = nil
27
26
  end
28
27
 
29
- it "should read a table name from the manifest file" do
30
- @m.table.should == :test_table
28
+ it "should take a table name in the constructor" do
29
+ @m.table.should == @test_table
31
30
  end
32
31
 
33
32
  it "should map template files to their output files" do
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shipyard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 2
10
+ version: 0.0.2
5
11
  platform: ruby
6
12
  authors:
7
13
  - Chris Kite
@@ -9,29 +15,41 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-07-14 00:00:00 -05:00
18
+ date: 2010-07-15 00:00:00 -05:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: activesupport
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
29
+ hash: 19
30
+ segments:
31
+ - 2
32
+ - 3
33
+ - 8
23
34
  version: 2.3.8
24
- version:
35
+ type: :runtime
36
+ version_requirements: *id001
25
37
  - !ruby/object:Gem::Dependency
26
38
  name: sequel
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
30
42
  requirements:
31
43
  - - ">="
32
44
  - !ruby/object:Gem::Version
45
+ hash: 55
46
+ segments:
47
+ - 3
48
+ - 12
49
+ - 0
33
50
  version: 3.12.0
34
- version:
51
+ type: :runtime
52
+ version_requirements: *id002
35
53
  description:
36
54
  email:
37
55
  executables:
@@ -47,6 +65,9 @@ files:
47
65
  - lib/shipyard/manifest.rb
48
66
  - bin/shipyard
49
67
  - README.rdoc
68
+ - spec/manifest_spec.rb
69
+ - spec/context_spec.rb
70
+ - spec/spec_helper.rb
50
71
  has_rdoc: true
51
72
  homepage: http://www.github.com/chriskite/shipyard
52
73
  licenses: []
@@ -60,21 +81,27 @@ rdoc_options:
60
81
  require_paths:
61
82
  - lib
62
83
  required_ruby_version: !ruby/object:Gem::Requirement
84
+ none: false
63
85
  requirements:
64
86
  - - ">="
65
87
  - !ruby/object:Gem::Version
88
+ hash: 3
89
+ segments:
90
+ - 0
66
91
  version: "0"
67
- version:
68
92
  required_rubygems_version: !ruby/object:Gem::Requirement
93
+ none: false
69
94
  requirements:
70
95
  - - ">="
71
96
  - !ruby/object:Gem::Version
97
+ hash: 3
98
+ segments:
99
+ - 0
72
100
  version: "0"
73
- version:
74
101
  requirements: []
75
102
 
76
103
  rubyforge_project:
77
- rubygems_version: 1.3.5
104
+ rubygems_version: 1.3.7
78
105
  signing_key:
79
106
  specification_version: 3
80
107
  summary: Code generation tool for database-backed applications