snippr 0.16.2 → 0.17.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +18 -0
- data/lib/snippr/meta_data.rb +24 -7
- data/snippr.gemspec +1 -1
- data/spec/fixtures/merge/array1.snip +6 -0
- data/spec/fixtures/merge/array2.snip +6 -0
- data/spec/snippr/meta_data_spec.rb +40 -12
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 62a34d096d4e43ff626eb69835c161385d17286c
|
4
|
+
data.tar.gz: 9471aec2a2e21590e4510bc1b8d648d0494c5622
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 429bbb9e104d98c08e81508c9475d7f5921ab20f4c10cd5e58792c63cd58c61181c08744ac632ca0211045d6027feb6f0b985920bfb3c68d6e45e9727df7811d
|
7
|
+
data.tar.gz: 23d835aea3caae6e78c520ab631019a3f99e74c2e57e0704da39d73c598e4f115a7aa436e626145d1883e47210f3bc42bbad0acb1a7aa471f69761493e447b5b
|
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -140,8 +140,26 @@ If you have a snippet `a/path/snippet.snip`:
|
|
140
140
|
This would merge the metadata from `path/from/root/to/snippet.snip` and `a/path/relative/to/this/snippet.snip` into the containing snippets metadata.
|
141
141
|
If there are duplicate keys the metadata in the main/base snippet is chosen.
|
142
142
|
|
143
|
+
This only works on the *first level* of yaml data.
|
143
144
|
Be aware that the `_include` key is *removed* from the metadata after including.
|
144
145
|
|
146
|
+
If the YAML contains two arrays to be merged, both will be ADDED:
|
147
|
+
|
148
|
+
---
|
149
|
+
key:
|
150
|
+
- a: 1
|
151
|
+
---
|
152
|
+
|
153
|
+
and
|
154
|
+
|
155
|
+
---
|
156
|
+
key:
|
157
|
+
- b: 2
|
158
|
+
---
|
159
|
+
|
160
|
+
will result in:
|
161
|
+
|
162
|
+
{key: [{"a" => 1, "b" => 2}]}
|
145
163
|
|
146
164
|
### Including snippr files inside other files
|
147
165
|
|
data/lib/snippr/meta_data.rb
CHANGED
@@ -15,13 +15,15 @@ module Snippr
|
|
15
15
|
if content =~ /^(---\s*\n.*?\n?)^(---\s*$?)/m
|
16
16
|
content = Regexp.last_match.post_match.strip
|
17
17
|
meta = yaml_load(name, $1)
|
18
|
-
if meta
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
if meta
|
19
|
+
if meta.keys.include?(INCLUDE)
|
20
|
+
Array(meta[INCLUDE]).each do |include_path|
|
21
|
+
if (snippet && include_path.start_with?("./"))
|
22
|
+
include_path = snippet.name.gsub(/\/.*?$/,"") + "/" + include_path.gsub(/^\.\//, "")
|
23
|
+
end
|
24
|
+
snippet = Snippr.load(include_path)
|
25
|
+
meta = deep_yaml_merge(snippet.meta, meta)
|
22
26
|
end
|
23
|
-
snippet = Snippr.load(include_path)
|
24
|
-
meta = snippet.meta.deep_merge(meta)
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
@@ -31,7 +33,22 @@ module Snippr
|
|
31
33
|
[content, meta]
|
32
34
|
end
|
33
35
|
|
34
|
-
|
36
|
+
private
|
37
|
+
|
38
|
+
def self.deep_yaml_merge(first_hash, other_hash)
|
39
|
+
other_hash.each_pair do |k,v|
|
40
|
+
tv = first_hash[k]
|
41
|
+
if tv.is_a?(Hash) && v.is_a?(Hash)
|
42
|
+
first_hash[k] = deep_yaml_merge(tv, v)
|
43
|
+
elsif tv.is_a?(Array) && v.is_a?(Array)
|
44
|
+
first_hash[k] = tv.concat(v)
|
45
|
+
else
|
46
|
+
first_hash[k] = v
|
47
|
+
end
|
48
|
+
end
|
49
|
+
first_hash
|
50
|
+
end
|
51
|
+
|
35
52
|
|
36
53
|
def self.yaml_load(name, yml)
|
37
54
|
YAML.load(yml)
|
data/snippr.gemspec
CHANGED
@@ -10,6 +10,8 @@ describe Snippr::MetaData do
|
|
10
10
|
TEST_CONTENT_WITH_INCLUDE = "---\n_include:\n - include/test\n - include/test2\ntest: main\n---"
|
11
11
|
TEST_CONTENT_WITH_RELATIVE_INCLUDE = "---\n_include:\n - ./test\n - ./test2\ntest: main\n---"
|
12
12
|
|
13
|
+
TEST_CONTENT_WITH_MERGE = "---\n_include:\n - merge/array1\n - merge/array2\n---"
|
14
|
+
|
13
15
|
describe '.extract' do
|
14
16
|
it 'returns an array with 2 elements [contentstring, metahash]' do
|
15
17
|
result = Snippr::MetaData.extract([:content], TEST_CONTENT)
|
@@ -44,21 +46,47 @@ describe Snippr::MetaData do
|
|
44
46
|
expect(result.second).to eq({})
|
45
47
|
end
|
46
48
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
49
|
+
context "_include" do
|
50
|
+
it "includes other front matter via the _include key" do
|
51
|
+
result = Snippr::MetaData.extract([:content], TEST_CONTENT_WITH_INCLUDE)
|
52
|
+
expect(result.second).to eq({"this_is_also"=>"included_from_include_test2_snippet", "test"=>"main", "this_is"=>"included_from_include_test_snippet", "_include"=>["include/test", "include/test2"]})
|
53
|
+
end
|
51
54
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
55
|
+
it "includes metadata from relative include paths" do
|
56
|
+
snippet = Snippr.load("include/main")
|
57
|
+
result = Snippr::MetaData.extract([:content], TEST_CONTENT_WITH_RELATIVE_INCLUDE, snippet)
|
58
|
+
expect(result.second).to eq({"this_is_also"=>"included_from_include_test2_snippet", "test"=>"main", "this_is"=>"included_from_include_test_snippet", "_include"=>["./test", "./test2"]})
|
59
|
+
end
|
57
60
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
+
it "includes other front matter blocks but lets the main block win" do
|
62
|
+
result = Snippr::MetaData.extract([:content], TEST_CONTENT_WITH_INCLUDE)
|
63
|
+
expect(result.second).to eq({"this_is_also"=>"included_from_include_test2_snippet", "test"=>"main", "this_is"=>"included_from_include_test_snippet", "_include"=>["include/test", "include/test2"]})
|
64
|
+
end
|
65
|
+
|
66
|
+
it "combines a hash containing an array into one" do
|
67
|
+
# this merges/adds an array to another array when the included hashes contain the same key:
|
68
|
+
# promotion:
|
69
|
+
# - a: 1
|
70
|
+
#
|
71
|
+
# and
|
72
|
+
#
|
73
|
+
# promotion:
|
74
|
+
# - b: 2
|
75
|
+
#
|
76
|
+
# will result in
|
77
|
+
# promotion:
|
78
|
+
# - a: 1
|
79
|
+
# - b: 2
|
80
|
+
#
|
81
|
+
# instead of letting the later argument win:
|
82
|
+
#
|
83
|
+
# promotion:
|
84
|
+
# - b: 2
|
85
|
+
result = Snippr::MetaData.extract([:content], TEST_CONTENT_WITH_MERGE)
|
86
|
+
expect(result.second).to eq({"tracking"=>{"promotion"=>[{"b"=>2}, {"a"=>1}]}, "_include"=>["merge/array1", "merge/array2"]})
|
87
|
+
end
|
61
88
|
end
|
89
|
+
|
62
90
|
end
|
63
91
|
|
64
92
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: snippr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Harrington
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-08-
|
13
|
+
date: 2014-08-26 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: i18n
|
@@ -109,6 +109,7 @@ files:
|
|
109
109
|
- ".gitignore"
|
110
110
|
- ".rspec"
|
111
111
|
- ".travis.yml"
|
112
|
+
- CHANGELOG.md
|
112
113
|
- Gemfile
|
113
114
|
- LICENSE
|
114
115
|
- README.md
|
@@ -158,6 +159,8 @@ files:
|
|
158
159
|
- spec/fixtures/include/main.snip
|
159
160
|
- spec/fixtures/include/test.snip
|
160
161
|
- spec/fixtures/include/test2.snip
|
162
|
+
- spec/fixtures/merge/array1.snip
|
163
|
+
- spec/fixtures/merge/array2.snip
|
161
164
|
- spec/fixtures/meta/broken.snip
|
162
165
|
- spec/fixtures/meta/onlyContent_de.snip
|
163
166
|
- spec/fixtures/meta/withContent.snip
|
@@ -237,6 +240,8 @@ test_files:
|
|
237
240
|
- spec/fixtures/include/main.snip
|
238
241
|
- spec/fixtures/include/test.snip
|
239
242
|
- spec/fixtures/include/test2.snip
|
243
|
+
- spec/fixtures/merge/array1.snip
|
244
|
+
- spec/fixtures/merge/array2.snip
|
240
245
|
- spec/fixtures/meta/broken.snip
|
241
246
|
- spec/fixtures/meta/onlyContent_de.snip
|
242
247
|
- spec/fixtures/meta/withContent.snip
|