namelessjon-dm-gen 0.0.3 → 0.0.4
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/lib/generators/one_file.rb +26 -3
- data/lib/templates/one_file.rb +3 -3
- data/spec/dm_gen_spec.rb +0 -5
- data/spec/one_file_spec.rb +111 -0
- data/spec/spec_helper.rb +8 -0
- metadata +4 -3
data/lib/generators/one_file.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module DMGen
|
2
|
-
class
|
2
|
+
class OneFile < Templater::Generator
|
3
3
|
first_argument :name, :required => true
|
4
4
|
second_argument :model
|
5
5
|
third_argument :attributes, :as => :hash, :default => {}
|
@@ -7,6 +7,13 @@ module DMGen
|
|
7
7
|
desc <<-eos
|
8
8
|
Generates a 'one file test' for DataMapper, including debug logging and sqlite3 memory DB
|
9
9
|
Use like 'dm-gen one_file filename [model] [model,attributes,here]'
|
10
|
+
|
11
|
+
For example:
|
12
|
+
dm-gen one_file validation_test Post title:string,body:text
|
13
|
+
|
14
|
+
generates a one file test called 'validation_test.rb' which will have a class
|
15
|
+
called Post in it, with 3 properties: a Serial id (added for free), and a title
|
16
|
+
and a body.
|
10
17
|
eos
|
11
18
|
|
12
19
|
def self.source_root
|
@@ -15,14 +22,30 @@ module DMGen
|
|
15
22
|
|
16
23
|
template :one_file do |t|
|
17
24
|
t.source = 'one_file.rb'
|
18
|
-
t.destination = "#{self.
|
25
|
+
t.destination = "#{self.filename}.rb"
|
19
26
|
end
|
20
27
|
|
21
28
|
def model_name
|
22
29
|
(model) ? model.camel_case : "TestModel"
|
23
30
|
end
|
24
31
|
|
32
|
+
def filename
|
33
|
+
name.sub(/\.rb\z/,'')
|
34
|
+
end
|
35
|
+
|
36
|
+
def properties
|
37
|
+
h = {}
|
38
|
+
attributes.each do |k, v|
|
39
|
+
# skip if the property is named id
|
40
|
+
next if k == "id"
|
41
|
+
|
42
|
+
# convert to snake/camel case
|
43
|
+
h[k.snake_case] = v.camel_case
|
44
|
+
end
|
45
|
+
h
|
46
|
+
end
|
47
|
+
|
25
48
|
end
|
26
49
|
|
27
|
-
add :one_file,
|
50
|
+
add :one_file, OneFile
|
28
51
|
end
|
data/lib/templates/one_file.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# A one file test to show ...
|
4
4
|
require 'rubygems'
|
5
5
|
|
6
|
-
gem('dm-core', '~> 0.9.
|
6
|
+
gem('dm-core', '~> 0.9.8')
|
7
7
|
require 'dm-core'
|
8
8
|
|
9
9
|
|
@@ -18,8 +18,8 @@ class <%= model_name %>
|
|
18
18
|
|
19
19
|
# properties
|
20
20
|
property :id, Serial
|
21
|
-
<%
|
22
|
-
property :<%= name
|
21
|
+
<% properties.each do |name, type| -%>
|
22
|
+
property :<%= name %>, <%= type %>
|
23
23
|
<% end %>
|
24
24
|
end
|
25
25
|
|
data/spec/dm_gen_spec.rb
CHANGED
@@ -0,0 +1,111 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
shared "one file generator" do
|
5
|
+
before do
|
6
|
+
@result = @generator.render!.first
|
7
|
+
end
|
8
|
+
|
9
|
+
it "successfully renders" do
|
10
|
+
lambda { @generator.render! }.should.not.raise
|
11
|
+
end
|
12
|
+
|
13
|
+
it "makes a file named 'validation_test.rb' when passed 'validation_test'" do
|
14
|
+
@generator.should create('/tmp/validation_test.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
it "makes a file named 'validation_test.rb' when passed 'validation_test.rb'" do
|
18
|
+
@generator = DMGen::OneFile.new('/tmp', {}, 'validation_test.rb')
|
19
|
+
@generator.should create('/tmp/validation_test.rb')
|
20
|
+
end
|
21
|
+
|
22
|
+
# model stuff
|
23
|
+
it "includes DataMapper::Resource" do
|
24
|
+
@result.should.match(/include DataMapper::Resource/)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "has a serial id property" do
|
28
|
+
@result.should.match(/property :id, Serial/)
|
29
|
+
end
|
30
|
+
|
31
|
+
# requires
|
32
|
+
it "requires rubygems" do
|
33
|
+
@result.should.match(/require 'rubygems'/)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "requires dm-core" do
|
37
|
+
@result.should.match(/require 'dm-core'/)
|
38
|
+
end
|
39
|
+
|
40
|
+
# other boilerplate
|
41
|
+
it "sets up a logger" do
|
42
|
+
@result.should.match(/DataMapper::Logger\.new\(STDOUT, :debug\)/)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "sets up a connection to an sqlite3 in-memory db" do
|
46
|
+
@result.should.match(/DataMapper\.setup\(:default, 'sqlite3::memory:'\)/)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "automigrates the db!" do
|
50
|
+
@result.should.match(/DataMapper\.auto_migrate!/)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
describe "DMGen::OneFile" do
|
57
|
+
describe "with name option only" do
|
58
|
+
before do
|
59
|
+
@generator = DMGen::OneFile.new('/tmp', {}, 'validation_test')
|
60
|
+
end
|
61
|
+
|
62
|
+
behaves_like "one file generator"
|
63
|
+
|
64
|
+
it "makes a Model called TestModel" do
|
65
|
+
@result.should.match(/class TestModel/)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
describe "with a model name too!" do
|
71
|
+
before do
|
72
|
+
@generator = DMGen::OneFile.new('/tmp', {}, 'validation_test', 'post')
|
73
|
+
end
|
74
|
+
|
75
|
+
behaves_like "one file generator"
|
76
|
+
|
77
|
+
it "makes a Model called Post" do
|
78
|
+
@result.should.match(/class Post/)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
describe "and attributes!" do
|
84
|
+
before do
|
85
|
+
@generator = DMGen::OneFile.new('/tmp', {}, 'validation_test', 'post',
|
86
|
+
'title:string,PostBody:text,created_at:date_time,id:serial')
|
87
|
+
end
|
88
|
+
|
89
|
+
behaves_like "one file generator"
|
90
|
+
|
91
|
+
it "makes a Model called Post" do
|
92
|
+
@result.should.match(/class Post/)
|
93
|
+
end
|
94
|
+
|
95
|
+
it "includes the title property as a string" do
|
96
|
+
@result.should.match(/property :title, String/)
|
97
|
+
end
|
98
|
+
|
99
|
+
it "snake cases the property name" do
|
100
|
+
@result.should.match(/property :post_body, Text/)
|
101
|
+
end
|
102
|
+
|
103
|
+
it "camel cases the property type" do
|
104
|
+
@result.should.match(/property :created_at, DateTime/)
|
105
|
+
end
|
106
|
+
|
107
|
+
it "only includes a serial property once" do
|
108
|
+
@result.should.not.match(/property :id, Serial.*?property :id, Serial/m)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
gem('bacon')
|
2
3
|
require 'bacon'
|
3
4
|
|
5
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
6
|
+
require 'dm_gen'
|
7
|
+
|
4
8
|
# get a summary of errors raised and such
|
5
9
|
Bacon.summary_on_exit
|
10
|
+
|
11
|
+
def create(file)
|
12
|
+
lambda { |obj| obj.all_actions.map{|t| t.destination }.include?(file) }
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: namelessjon-dm-gen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Stott
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-12-
|
12
|
+
date: 2008-12-13 00:00:00 -08:00
|
13
13
|
default_executable: dm-gen
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -36,8 +36,9 @@ files:
|
|
36
36
|
- lib/generators
|
37
37
|
- lib/generators/one_file.rb
|
38
38
|
- lib/dm_gen.rb
|
39
|
-
- spec/spec_helper.rb
|
40
39
|
- spec/dm_gen_spec.rb
|
40
|
+
- spec/spec_helper.rb
|
41
|
+
- spec/one_file_spec.rb
|
41
42
|
has_rdoc: false
|
42
43
|
homepage: http://github.com/namelessjon/dm-gen
|
43
44
|
post_install_message:
|