cakery 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +85 -17
- data/Rakefile +6 -6
- data/cakery.gemspec +3 -2
- data/lib/cakery.rb +87 -0
- data/lib/cakery/macro.rb +5 -0
- data/lib/cakery/version.rb +1 -1
- data/logo.png +0 -0
- data/spec/assets/proj/test2/secret/secret.txt +1 -0
- data/spec/assets/proj/test3/secret/deeper/secret.txt +1 -0
- data/spec/assets/proj/test4/secret/secret.txt +2 -0
- data/spec/assets/proj/test5/secret1/secret.txt +1 -0
- data/spec/assets/proj/test5/secret2/secret.txt +1 -0
- data/spec/assets/test0.cakery +1 -0
- data/spec/assets/test1.cakery +1 -0
- data/spec/assets/test2.cakery +1 -0
- data/spec/assets/test3.cakery +1 -0
- data/spec/assets/test4.cakery +1 -0
- data/spec/assets/test5.cakery +1 -0
- data/spec/bake_spec.rb +155 -0
- metadata +46 -7
- data/spec/test_spec.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 920eb92b0f7768c0d57447338be4e816161705f7
|
4
|
+
data.tar.gz: 7735938903fb130741577a233d059a32b4054f3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc687ce06115f77998d5d844febccdc3eb5a740d4945fe4a46301c1f991c11a45dfce137fc61097d32f6797abc7bb335c86eee052c5ba65ad86189b84ce66dcd
|
7
|
+
data.tar.gz: 04ccf69a6d5d9d5548c4b38a46e1cf8b02b62cf2d8bc5011fd39fcf23e4e18a4096c166c4aeb652978abd5ae2f43c95891bae3124a3f301ca93692547803dd82
|
data/README.md
CHANGED
@@ -5,31 +5,99 @@
|
|
5
5
|
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/sotownsend/cakery/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
|
6
6
|
[![License](http://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/sotownsend/cakery/blob/master/LICENSE)
|
7
7
|
|
8
|
-
|
8
|
+
##What is this?
|
9
9
|
|
10
|
-
|
11
|
-
Purpose built for our continuous integration & deployment infrastructure at Fittr®.
|
10
|
+
Combine many files into one intelligently. Cakery has a simple *DSL* that allows you to glob directories and pass strings to an **erb** file. You can also add **macros** to a cakery pipeline. Think about it as a more generic version of [Sprockets](https://github.com/sstephenson/sprockets).
|
12
11
|
|
13
|
-
##
|
14
|
-
There are 3 relative ways of looking at a path in *cakery*.
|
15
|
-
* File Relative - A path relative to the current code file
|
16
|
-
* pwd Relative - A path relative to the current `pwd` pointer
|
17
|
-
* project Relative - A path relative to a project root (think rails)
|
12
|
+
## Quick Start
|
18
13
|
|
19
|
-
|
20
|
-
|
21
|
-
|
14
|
+
###Combine many js files in the `./spec` directory into one file
|
15
|
+
In your ruby code:
|
16
|
+
```ruby
|
17
|
+
#Create a new recipe
|
18
|
+
recipe = Cakery.new('test.js.erb') do |r|
|
19
|
+
#The << operator means to glob the directory into a string in @spec
|
20
|
+
r.spec << "./spec/*_spec.js"
|
21
|
+
|
22
|
+
#The < operator means assignment
|
23
|
+
r.debug < true
|
24
|
+
r.foo < "bar"
|
25
|
+
end
|
26
|
+
|
27
|
+
#Build using the current directory
|
28
|
+
cake = recipe.bake
|
29
|
+
|
30
|
+
#Get the concatenated result of the build
|
31
|
+
puts cake.src
|
32
|
+
```
|
22
33
|
|
23
|
-
|
24
|
-
|
25
|
-
|
34
|
+
Create a test.js.erb with:
|
35
|
+
```erb
|
36
|
+
<%= @spec %>
|
37
|
+
|
38
|
+
<!-- Announce whether we are in debug or release -->
|
39
|
+
<% if @debug %>
|
40
|
+
console.log("Debug!");
|
41
|
+
<% end %>
|
42
|
+
console.log("Release :(");
|
43
|
+
<% end %>
|
44
|
+
```
|
26
45
|
|
27
|
-
|
46
|
+
------
|
28
47
|
|
29
|
-
###
|
48
|
+
###Macros
|
49
|
+
Macros receive a block of text and then do something with that text. A *macro* is a subclass of **Cakery::Macro** that implements **def process(str)** and returns a **String**. You can also stack macros.
|
50
|
+
|
51
|
+
In your ruby code:
|
30
52
|
```ruby
|
31
|
-
#
|
53
|
+
#Create a new recipe
|
54
|
+
class MyMacro < Cakery::Macro
|
55
|
+
def process str
|
56
|
+
out = ""
|
57
|
+
str.split("\n").each do |line|
|
58
|
+
if line =~ /hello/
|
59
|
+
out += line.gsub(/hello/, "goodbye")
|
60
|
+
else
|
61
|
+
out += line
|
62
|
+
end
|
63
|
+
out += "\n"
|
64
|
+
end
|
65
|
+
out
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
recipe = Cakery.new('test.js.erb') do |r|
|
70
|
+
#The << operator means to glob the directory into a string in @spec
|
71
|
+
r.spec << MyMacro << "./spec/*_spec.js"
|
72
|
+
r.spec << MyMacro < "hello"
|
73
|
+
|
74
|
+
#Additionally, you can stack macros. Macros always use the << operator intra macros
|
75
|
+
#The last operator may either be < or <<
|
76
|
+
r.spec << MyMacro << MyOtherMacro < "Hello"
|
77
|
+
r.spec << MyMacro << MyOtherMacro << "./spec/*_spec.js"
|
78
|
+
|
79
|
+
#The < operator means assignment
|
80
|
+
r.debug < true
|
81
|
+
r.foo < "bar"
|
82
|
+
end
|
83
|
+
|
84
|
+
#Build using the current directory
|
85
|
+
cake = recipe.bake
|
86
|
+
|
87
|
+
#Get the concatenated result of the build
|
88
|
+
puts cake.src
|
89
|
+
```
|
90
|
+
|
91
|
+
Create a test.js.erb with:
|
92
|
+
```erb
|
93
|
+
<%= @spec %>
|
32
94
|
|
95
|
+
<!-- Announce whether we are in debug or release -->
|
96
|
+
<% if @debug %>
|
97
|
+
console.log("Debug!");
|
98
|
+
<% end %>
|
99
|
+
console.log("Release :(");
|
100
|
+
<% end %>
|
33
101
|
```
|
34
102
|
|
35
103
|
## Requirements
|
data/Rakefile
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
require 'rspec/core/rake_task'
|
2
2
|
require "bundler/gem_tasks"
|
3
3
|
require "fileutils"
|
4
|
-
require './lib/
|
4
|
+
require './lib/cakery'
|
5
5
|
|
6
6
|
#Gem things
|
7
7
|
#############################################################################
|
8
8
|
#Upgrade version of gem
|
9
9
|
def upgrade_version
|
10
|
-
versionf = './lib/
|
10
|
+
versionf = './lib/cakery/version.rb'
|
11
11
|
require versionf
|
12
12
|
|
13
13
|
#Upgrade version '0.0.1' => '0.0.2'
|
14
|
-
version =
|
14
|
+
version = Cakery::VERSION
|
15
15
|
new_version = version.split(".")
|
16
16
|
new_version[2] = new_version[2].to_i + 1
|
17
17
|
new_version = new_version.join(".")
|
@@ -30,9 +30,9 @@ task :push do
|
|
30
30
|
`git push`
|
31
31
|
`git tag #{version}`
|
32
32
|
`git push origin #{version}`
|
33
|
-
`gem build
|
34
|
-
`gem push
|
35
|
-
`rm
|
33
|
+
`gem build cakery.gemspec`
|
34
|
+
`gem push cakery-#{version}.gem`
|
35
|
+
`rm cakery-#{version}.gem`
|
36
36
|
end
|
37
37
|
|
38
38
|
#############################################################################
|
data/cakery.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Cakery::VERSION
|
9
9
|
spec.authors = ["seo"]
|
10
10
|
spec.email = ["seotownsend@icloud.com"]
|
11
|
-
spec.summary = "
|
12
|
-
spec.description = "
|
11
|
+
spec.summary = "Combine many files into one intelligently"
|
12
|
+
spec.description = "Combine many files into one intelligently. Cakery has a simple *DSL* that allows you to glob directories and pass strings to an **erb** file. You can also add **macros** to a cakery pipeline. Think about it as a more generic version of [Sprockets](https://github.com/sstephenson/sprockets)."
|
13
13
|
spec.homepage = "https://github.com/sotownsend/cakery"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
@@ -21,4 +21,5 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.6"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.3"
|
23
23
|
spec.add_development_dependency "rspec", "~> 3.2"
|
24
|
+
spec.add_development_dependency "pry", "~> 0.10"
|
24
25
|
end
|
data/lib/cakery.rb
CHANGED
@@ -1,3 +1,90 @@
|
|
1
|
+
require 'cakery/macro'
|
2
|
+
require 'erb'
|
3
|
+
|
1
4
|
module Cakery
|
5
|
+
class Cakery
|
6
|
+
attr_accessor :src
|
7
|
+
|
8
|
+
#Create a new cakery (recipe) with an erb file
|
9
|
+
def initialize erb_path, &block
|
10
|
+
raise "You gave cakery the file: #{erb_path.inspect} but this wasn't a file" unless File.file?(erb_path)
|
11
|
+
|
12
|
+
#Create a new erb compiler
|
13
|
+
@erb_src = File.read(erb_path)
|
14
|
+
@erbc = ERB.new(@erb_src)
|
15
|
+
|
16
|
+
@block = block
|
17
|
+
end
|
18
|
+
|
19
|
+
def bake
|
20
|
+
ctx = CakeryERBContext.new
|
21
|
+
@block.call(ctx)
|
22
|
+
@src = @erbc.result(ctx.get_binding)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class CakeryERBContext
|
27
|
+
def initialize
|
28
|
+
end
|
29
|
+
|
30
|
+
def method_missing name, *args, &block
|
31
|
+
if name =~ /=/
|
32
|
+
name = ('@'+name.to_s.gsub(/=/, "")).to_sym
|
33
|
+
self.instance_variable_set(name, args.first)
|
34
|
+
else
|
35
|
+
return CakeERBContextTwoClauseHelper.new(self, name)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_binding
|
40
|
+
return binding
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
#Allow things like r.my_secret << './secret, this handles the '<<' part and
|
45
|
+
#is given 'my_secret' as a name
|
46
|
+
class CakeERBContextTwoClauseHelper
|
47
|
+
def initialize erb_context, name
|
48
|
+
@erb_context = erb_context
|
49
|
+
@name = name
|
50
|
+
@macros = []
|
51
|
+
end
|
52
|
+
|
53
|
+
def <<(e)
|
54
|
+
vname = ('@'+@name.to_s.gsub(/=/, "")).to_sym
|
55
|
+
out = ""
|
56
|
+
|
57
|
+
#Append all files or it's a macro class
|
58
|
+
if e.class == String
|
59
|
+
fpaths = Dir[e].select{|e| File.file?(e)}
|
60
|
+
fpaths.each do |fpath|
|
61
|
+
out << File.read(fpath)
|
62
|
+
end
|
63
|
+
|
64
|
+
#Run through each macro and run it in the reverse
|
65
|
+
#order that we put it in so that
|
66
|
+
#r.var << MyMacroA << MyMacroB << "./directory" will execute first MyMacroB and then MyMacroA
|
67
|
+
while macro = @macros.pop
|
68
|
+
out = macro.new.process(out)
|
69
|
+
end
|
70
|
+
|
71
|
+
@erb_context.instance_variable_set(vname, "") unless @erb_context.instance_variable_defined?(vname)
|
72
|
+
v = @erb_context.instance_variable_get(vname)
|
73
|
+
v += out
|
74
|
+
@erb_context.instance_variable_set(vname, v)
|
75
|
+
|
76
|
+
else
|
77
|
+
#Assume it's a macro, save it onto the stack
|
78
|
+
@macros << e
|
79
|
+
|
80
|
+
#Return self, recurse because there should be a string (or another macro)
|
81
|
+
#to the right of this one
|
82
|
+
return self
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
2
86
|
|
87
|
+
def self.new *params, &block
|
88
|
+
return Cakery.new(*params, &block)
|
89
|
+
end
|
3
90
|
end
|
data/lib/cakery/macro.rb
ADDED
data/lib/cakery/version.rb
CHANGED
data/logo.png
CHANGED
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
hello world
|
@@ -0,0 +1 @@
|
|
1
|
+
hello world
|
@@ -0,0 +1 @@
|
|
1
|
+
hello world
|
@@ -0,0 +1 @@
|
|
1
|
+
goodbye world
|
@@ -0,0 +1 @@
|
|
1
|
+
test
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= @secret %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= @secret %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= @secret %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= @secret %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= @secret %>
|
data/spec/bake_spec.rb
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
require 'cakery'
|
3
|
+
|
4
|
+
RSpec.describe "Baking" do
|
5
|
+
def cakery_path name
|
6
|
+
return File.join(File.dirname(__FILE__), "assets/#{name}.cakery")
|
7
|
+
end
|
8
|
+
|
9
|
+
#go into ./spec/assets/proj/$project_name and use
|
10
|
+
#it as a project folder
|
11
|
+
def cd_proj name
|
12
|
+
Dir.chdir File.join(File.dirname(__FILE__), "assets/proj/#{name}") do
|
13
|
+
yield
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "can run a no variable cakery file" do
|
18
|
+
cp = cakery_path "test0"
|
19
|
+
c = Cakery.new(cp) do |r|
|
20
|
+
end
|
21
|
+
|
22
|
+
c.bake
|
23
|
+
expect(c.src).to eq("test\n")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "can use a text variable in the cakery file" do
|
27
|
+
cp = cakery_path "test1"
|
28
|
+
secret = SecureRandom.hex
|
29
|
+
|
30
|
+
c = Cakery.new(cp) do |r|
|
31
|
+
r.secret = secret
|
32
|
+
end
|
33
|
+
|
34
|
+
c.bake
|
35
|
+
expect(c.src).to eq("#{secret}\n")
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
it "can use a directory append" do
|
40
|
+
cp = cakery_path "test2"
|
41
|
+
|
42
|
+
c = Cakery.new(cp) do |r|
|
43
|
+
r.secret << './secret/*'
|
44
|
+
end
|
45
|
+
|
46
|
+
cd_proj "test2" do
|
47
|
+
c.bake
|
48
|
+
end
|
49
|
+
expect(c.src).to eq("hello world\n\n")
|
50
|
+
end
|
51
|
+
|
52
|
+
it "can use a directory append many" do
|
53
|
+
cp = cakery_path "test3"
|
54
|
+
|
55
|
+
c = Cakery.new(cp) do |r|
|
56
|
+
r.secret << './secret/**/*'
|
57
|
+
end
|
58
|
+
|
59
|
+
cd_proj "test3" do
|
60
|
+
c.bake
|
61
|
+
end
|
62
|
+
expect(c.src).to eq("hello world\n\n")
|
63
|
+
end
|
64
|
+
|
65
|
+
it "will not get depth if not requested" do
|
66
|
+
cp = cakery_path "test3"
|
67
|
+
|
68
|
+
c = Cakery.new(cp) do |r|
|
69
|
+
r.secret << './secret/*'
|
70
|
+
end
|
71
|
+
|
72
|
+
cd_proj "test3" do
|
73
|
+
c.bake
|
74
|
+
end
|
75
|
+
expect(c.src).to eq("\n")
|
76
|
+
end
|
77
|
+
|
78
|
+
it "supports macros" do
|
79
|
+
cp = cakery_path "test4"
|
80
|
+
|
81
|
+
class MyMacro < Cakery::Macro
|
82
|
+
def process str
|
83
|
+
out = ""
|
84
|
+
str.split("\n").each do |line|
|
85
|
+
if line =~ /hello/
|
86
|
+
out += line.gsub(/hello/, "goodbye")
|
87
|
+
else
|
88
|
+
out += line
|
89
|
+
end
|
90
|
+
|
91
|
+
out += "\n"
|
92
|
+
end
|
93
|
+
out
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
c = Cakery.new(cp) do |r|
|
98
|
+
r.secret << MyMacro << './secret/*'
|
99
|
+
end
|
100
|
+
|
101
|
+
cd_proj "test4" do
|
102
|
+
c.bake
|
103
|
+
end
|
104
|
+
|
105
|
+
#Started out with hello world 1, goodbye world 2 -> goodbye world 1, goodbye world 2
|
106
|
+
expect(c.src).to eq("goodbye world 1\ngoodbye world 2\n\n")
|
107
|
+
end
|
108
|
+
|
109
|
+
#it "supports stacked macros" do
|
110
|
+
#cp = cakery_path "test4"
|
111
|
+
|
112
|
+
#class MyMacro < Cakery::Macro
|
113
|
+
#def process str
|
114
|
+
#out = ""
|
115
|
+
#str.split("\n").each do |line|
|
116
|
+
#if line =~ /hello/
|
117
|
+
#out += line.gsub(/hello/, "goodbye")
|
118
|
+
#elsif line =~ /goodbye/
|
119
|
+
#out += line.gsub(/goodbye/, "fuck_you")
|
120
|
+
#else
|
121
|
+
#out += line
|
122
|
+
#end
|
123
|
+
|
124
|
+
#out += "\n"
|
125
|
+
#end
|
126
|
+
#out
|
127
|
+
#end
|
128
|
+
#end
|
129
|
+
|
130
|
+
#c = Cakery.new(cp) do |r|
|
131
|
+
#r.secret << MyMacro << MyMacro << './secret/*'
|
132
|
+
#end
|
133
|
+
|
134
|
+
#cd_proj "test4" do
|
135
|
+
#c.bake
|
136
|
+
#end
|
137
|
+
|
138
|
+
##Started out with hello world 1, goodbye world 2 -> goodbye world 1, goodbye world 2
|
139
|
+
#expect(c.src).to eq("fuck_you world 1\nfuck_you world 2\n\n")
|
140
|
+
#end
|
141
|
+
|
142
|
+
#it "supports two dir sources to one variable" do
|
143
|
+
#cp = cakery_path "test5"
|
144
|
+
|
145
|
+
#c = Cakery.new(cp) do |r|
|
146
|
+
#r.secret << "./secret1/*"
|
147
|
+
#r.secret << "./secret2/*"
|
148
|
+
#end
|
149
|
+
|
150
|
+
#cd_proj "test5" do
|
151
|
+
#c.bake
|
152
|
+
#end
|
153
|
+
#expect(c.src).to eq("hello world\ngoodbye world\n\n")
|
154
|
+
#end
|
155
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cakery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- seo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,8 +52,24 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.2'
|
55
|
-
|
56
|
-
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.10'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.10'
|
69
|
+
description: Combine many files into one intelligently. Cakery has a simple *DSL*
|
70
|
+
that allows you to glob directories and pass strings to an **erb** file. You can
|
71
|
+
also add **macros** to a cakery pipeline. Think about it as a more generic version
|
72
|
+
of [Sprockets](https://github.com/sstephenson/sprockets).
|
57
73
|
email:
|
58
74
|
- seotownsend@icloud.com
|
59
75
|
executables: []
|
@@ -68,9 +84,21 @@ files:
|
|
68
84
|
- Rakefile
|
69
85
|
- cakery.gemspec
|
70
86
|
- lib/cakery.rb
|
87
|
+
- lib/cakery/macro.rb
|
71
88
|
- lib/cakery/version.rb
|
72
89
|
- logo.png
|
73
|
-
- spec/
|
90
|
+
- spec/assets/proj/test2/secret/secret.txt
|
91
|
+
- spec/assets/proj/test3/secret/deeper/secret.txt
|
92
|
+
- spec/assets/proj/test4/secret/secret.txt
|
93
|
+
- spec/assets/proj/test5/secret1/secret.txt
|
94
|
+
- spec/assets/proj/test5/secret2/secret.txt
|
95
|
+
- spec/assets/test0.cakery
|
96
|
+
- spec/assets/test1.cakery
|
97
|
+
- spec/assets/test2.cakery
|
98
|
+
- spec/assets/test3.cakery
|
99
|
+
- spec/assets/test4.cakery
|
100
|
+
- spec/assets/test5.cakery
|
101
|
+
- spec/bake_spec.rb
|
74
102
|
homepage: https://github.com/sotownsend/cakery
|
75
103
|
licenses:
|
76
104
|
- MIT
|
@@ -94,6 +122,17 @@ rubyforge_project:
|
|
94
122
|
rubygems_version: 2.4.6
|
95
123
|
signing_key:
|
96
124
|
specification_version: 4
|
97
|
-
summary:
|
125
|
+
summary: Combine many files into one intelligently
|
98
126
|
test_files:
|
99
|
-
- spec/
|
127
|
+
- spec/assets/proj/test2/secret/secret.txt
|
128
|
+
- spec/assets/proj/test3/secret/deeper/secret.txt
|
129
|
+
- spec/assets/proj/test4/secret/secret.txt
|
130
|
+
- spec/assets/proj/test5/secret1/secret.txt
|
131
|
+
- spec/assets/proj/test5/secret2/secret.txt
|
132
|
+
- spec/assets/test0.cakery
|
133
|
+
- spec/assets/test1.cakery
|
134
|
+
- spec/assets/test2.cakery
|
135
|
+
- spec/assets/test3.cakery
|
136
|
+
- spec/assets/test4.cakery
|
137
|
+
- spec/assets/test5.cakery
|
138
|
+
- spec/bake_spec.rb
|