overapp 0.4.2 → 0.5.0

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.
@@ -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