overapp 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,134 @@
1
+ class Object
2
+ def dsl_method(name)
3
+ attr_writer name
4
+ define_method(name) do |*args|
5
+ if args.size == 0
6
+ instance_variable_get("@#{name}")
7
+ elsif args.size == 1
8
+ send("#{name}=",args.first)
9
+ else
10
+ raise "Bad"
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+ class ProjectDSL
17
+ dsl_method :config
18
+ dsl_method :path
19
+
20
+ attr_accessor :name
21
+ include FromHash
22
+
23
+ fattr(:project) do
24
+ res = Overapp::Project.new
25
+ res.config_body = config || ""
26
+ res.path = path || "/tmp/#{rand(100000000000000000)}"
27
+
28
+ res.vars = res.vars.merge(vars)
29
+ res
30
+ end
31
+
32
+ def file(path,body,overlay_ops={})
33
+ if overlay_ops.size > 0
34
+ inner = []
35
+ overlay_ops.each do |k,v|
36
+ inner << "#{k}: #{v}"
37
+ end
38
+ str = "<overlay>\n" + inner.join("\n") + "\n</overlay>"
39
+ body = str + body
40
+ end
41
+
42
+ self.files << OpenStruct.new(:path => path, :body => body)
43
+ end
44
+
45
+ def var(k,v)
46
+ vars[k] = v
47
+ end
48
+
49
+ fattr(:files) { [] }
50
+ fattr(:vars) { {} }
51
+ end
52
+
53
+ shared_context "projects" do
54
+ class << self
55
+ def project(name="default",&b)
56
+ dsl = ProjectDSL.new(:name => name)
57
+ b[dsl]
58
+ raise "project #{name} already exists" if project_dsls[name]
59
+ self.project_dsls[name] = dsl
60
+ end
61
+ def project_dsls
62
+ @project_dsls ||= {}
63
+ end
64
+ fattr(:vars) { {} }
65
+ def var(k,v)
66
+ vars[k] = v
67
+ end
68
+
69
+ def has_files(num)
70
+ it "has #{num} files" do
71
+ combined.size.should == num
72
+ end
73
+ end
74
+
75
+ def has_file(name,*args)
76
+ it "file #{name} has proper body" do
77
+ file = combined.find { |x| x.path == name }
78
+ file.should be
79
+ if args.size > 0
80
+ file.body.should == args.first
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ let(:project) do
87
+ self.class.project_dsls.values.first.project
88
+ end
89
+
90
+ let(:combined) do
91
+ project.combined_files
92
+ end
93
+
94
+ before do
95
+ Overapp.stub(:dir_files_full) do |dir|
96
+ dsl = self.class.project_dsls.values.find { |x| x.project.path == dir || x.name.to_s == dir.to_s }
97
+ if dsl
98
+ dsl.files.map do |f|
99
+ {:file => f.path, :body => f.body}
100
+ end
101
+ else
102
+ raise "no dir #{dir}, possible: \n" + self.class.project_dsls.values.map { |x| x.project.path }.join("\n")
103
+ end
104
+ end
105
+
106
+ Overapp::Project.stub("project?") do |dir|
107
+ dsl = self.class.project_dsls.values.find { |x| x.project.path == dir || x.name.to_s == dir.to_s }
108
+ if dsl
109
+ dsl.config.present?
110
+ else
111
+ raise "no dir #{dir}, possible: \n" + self.class.project_dsls.values.map { |x| x.project.path }.join("\n")
112
+ end
113
+ end
114
+
115
+ Overapp::Project.stub("load") do |ops|
116
+ dir = ops[:path]
117
+ dsl = self.class.project_dsls.values.find { |x| x.project.path == dir || x.name.to_s == dir.to_s }
118
+ if dsl
119
+ dsl.project
120
+ else
121
+ raise "no dir #{dir}, possible: \n" + self.class.project_dsls.values.map { |x| x.project.path }.join("\n")
122
+ end
123
+ end
124
+
125
+ self.class.vars.each do |k,v|
126
+ Overapp::Var.set k,v
127
+ end
128
+
129
+ end
130
+
131
+ after do
132
+ Overapp::Var.clear!
133
+ end
134
+ end
@@ -0,0 +1,73 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe 'Template' do
4
+ let(:template_file) do
5
+ Overapp::TemplateFile.new(:full_body => full_body)
6
+ end
7
+
8
+ let(:base) do
9
+ OpenStruct.new(:full_body => "abc")
10
+ end
11
+
12
+ let(:combined) do
13
+ template_file.combined(base)
14
+ end
15
+
16
+ let(:full_body) do
17
+ "<overapp>
18
+ action: append
19
+ template: erb
20
+ </overapp>
21
+ #{body}"
22
+ end
23
+
24
+ describe "no vars" do
25
+ let(:body) do
26
+ "<%= 2+2 %>"
27
+ end
28
+
29
+ it 'works' do
30
+ combined.full_body.should == "abc\n4"
31
+ end
32
+ end
33
+
34
+ describe "no vars, no base" do
35
+ let(:body) do
36
+ "<%= 2+2 %>"
37
+ end
38
+
39
+ it 'works' do
40
+ template_file.parsed.full_body.should == "\n4"
41
+ end
42
+ end
43
+
44
+ describe "has var" do
45
+ let(:body) do
46
+ "<%= foo %>"
47
+ end
48
+
49
+ before do
50
+ template_file.vars[:foo] = "bar"
51
+ end
52
+
53
+ it 'works' do
54
+ combined.full_body.should == "abc\nbar"
55
+ end
56
+ end
57
+
58
+ describe "not using template" do
59
+ let(:full_body) do
60
+ "<overapp>
61
+ action: append
62
+ </overapp>
63
+ #{body}"
64
+ end
65
+ let(:body) do
66
+ "<%= 2+2 %>"
67
+ end
68
+
69
+ it 'works' do
70
+ combined.full_body.should == "abc\n<%= 2+2 %>"
71
+ end
72
+ end
73
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: overapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Harris
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-16 00:00:00.000000000 Z
11
+ date: 2013-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mharris_ext
@@ -214,13 +214,19 @@ files:
214
214
  - lib/overapp/project/config_entry.rb
215
215
  - lib/overapp/project/write.rb
216
216
  - lib/overapp/template_file.rb
217
+ - lib/overapp/template_file/body_mod.rb
218
+ - lib/overapp/template_file/params.rb
219
+ - lib/overapp/template_file/var_obj.rb
217
220
  - lib/overapp/util/cmd.rb
218
221
  - lib/overapp/util/dir.rb
219
222
  - lib/overapp/util/git.rb
220
223
  - lib/overapp/util/tmp_dir.rb
221
224
  - lib/overapp/util/write.rb
225
+ - lib/overapp/var.rb
222
226
  - overapp.gemspec
227
+ - spec/command_replacement_spec.rb
223
228
  - spec/from_command_spec.rb
229
+ - spec/git_spec.rb
224
230
  - spec/input/rails_post_overlay/.overapp
225
231
  - spec/input/rails_post_overlay/app/models/post.rb
226
232
  - spec/input/rails_widget_overlay/.overapp
@@ -262,11 +268,14 @@ files:
262
268
  - spec/input/top/place/d.txt
263
269
  - spec/nesting_spec.rb
264
270
  - spec/overapp_spec.rb
271
+ - spec/project_context_spec.rb
265
272
  - spec/project_note_spec.rb
266
273
  - spec/spec_helper.rb
267
274
  - spec/support/output_dir.rb
275
+ - spec/support/project.rb
268
276
  - spec/support/setup.rb
269
277
  - spec/support/tmp_dir.rb
278
+ - spec/template_spec.rb
270
279
  - tmp/.gitkeep
271
280
  - vol/input/base/a.txt
272
281
  - vol/input/base/b.txt