oreilly-snippets 0.0.12 → 0.0.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/lib/oreilly/snippets.rb +48 -5
- data/lib/oreilly/snippets/version.rb +1 -1
- data/spec/fixtures/add-callouts-no-space.js +3 -0
- data/spec/fixtures/normalize_callouts.js +1 -0
- data/spec/fixtures/normalize_callouts_long.js +21 -0
- data/spec/process_spec.rb +86 -3
- metadata +13 -9
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZDlmMjc1YTY5MWZlMmJiM2MwYjA0OGY4NWQzNDFlYzE5M2UyYzY2ZQ==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1d3e3c29a72469016a1400732a8e020cddee9599
|
4
|
+
data.tar.gz: e9377684d7ba0e2bc9f4f5ae65e8514be72b57a1
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
NGRmYWE3M2MxNmZjODk0MWE0YWY1ZWU5MzUwYTlhYzE1MTNlZjFiYzBjZmEz
|
11
|
-
YzJjMDI2MDJlYjY3ZTI2YWNiMDFlMzc0NTBlMTliMDQ0MGVkOTY=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MGE0NjY5MTA5ZmIzYTI3YzVjMTcxNzdiMDQ2ZjQxZjRiZTk2NmRmOWY3M2I5
|
14
|
-
MjUwY2ZmNjE4ZWNiOGYyZmVmMzJkZjU2YWI2YjM3OWZjMDllNTAwNDBiYmFm
|
15
|
-
MmQzZjc3ZDllMDlhZWJlMGYwZDMwZTU0ZWEwYTEwNDQ3Y2ZiN2Q=
|
6
|
+
metadata.gz: cd8d103b247334041ef4b2e487b5f4002ff56444495c2d5ca32b10c846c4911cea0648d63c1e3e61af3be9aaaba6381505e3d24377a3a3fce964892da09435a1
|
7
|
+
data.tar.gz: b8fd891e2fbbb6c5becc3429d8916bbd84ca7853431d9a282da3ad86d0da91f200d2ec4cb13c19395f9225bc0b0ba2a815e87948291a5dcf957a9850eec1ce93
|
data/lib/oreilly/snippets.rb
CHANGED
@@ -15,7 +15,17 @@ module Oreilly
|
|
15
15
|
@@_config.merge!( opts )
|
16
16
|
end
|
17
17
|
|
18
|
-
def self.get_content_from_file(
|
18
|
+
def self.get_content_from_file( s )
|
19
|
+
|
20
|
+
spec = s[:filename]
|
21
|
+
identifier = s[:identifier]
|
22
|
+
language = s[:language]
|
23
|
+
sha = s[:sha]
|
24
|
+
numbers = s[:lines]
|
25
|
+
flatten = s[:flatten]
|
26
|
+
normcallouts = s[:normcallouts]
|
27
|
+
callouts = s[:callouts]
|
28
|
+
|
19
29
|
contents = nil
|
20
30
|
line_numbers = nil
|
21
31
|
error = false
|
@@ -62,7 +72,9 @@ module Oreilly
|
|
62
72
|
end
|
63
73
|
end
|
64
74
|
|
65
|
-
if
|
75
|
+
if callouts
|
76
|
+
rv = process_callouts( rv, callouts )
|
77
|
+
elsif normcallouts
|
66
78
|
rv = normalize_callouts( rv )
|
67
79
|
end
|
68
80
|
|
@@ -71,10 +83,41 @@ module Oreilly
|
|
71
83
|
rv
|
72
84
|
end
|
73
85
|
|
86
|
+
def self.process_callouts( input, callouts )
|
87
|
+
rv = nil
|
88
|
+
# Strip them out and figure out the comment character
|
89
|
+
comment_character = nil
|
90
|
+
rv = input.gsub( /([#\/]\/?) ?<\d+>/ ) { |c| comment_character = $1; '' }
|
91
|
+
|
92
|
+
unless comment_character
|
93
|
+
# OK, we need to scan for it and hope to figure it out
|
94
|
+
if rv =~ /\/\/[\/]+$/
|
95
|
+
comment_character = '/'
|
96
|
+
elsif rv =~ /#[^#]+$/
|
97
|
+
comment_character = '#'
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
unless comment_character
|
102
|
+
comment_character = '//'
|
103
|
+
end
|
104
|
+
|
105
|
+
unless callouts.eql? ""
|
106
|
+
list = callouts.split /,/
|
107
|
+
lines = rv.split /\n/
|
108
|
+
list.each_with_index do |c,i|
|
109
|
+
index = c.to_i - 1
|
110
|
+
lines[index] += "#{comment_character} <#{i+1}>" if lines.length > index and index >= 0
|
111
|
+
end
|
112
|
+
rv = lines.join "\n"
|
113
|
+
end
|
114
|
+
rv
|
115
|
+
end
|
116
|
+
|
74
117
|
def self.normalize_callouts( rv )
|
75
118
|
# Find something that looks like comment character + whitespace + < + number + >
|
76
119
|
index = 0
|
77
|
-
rv.gsub!( /([\/#]) <\d
|
120
|
+
rv.gsub!( /([\/#]) <\d*>/ ) { |c| index += 1; "#{$1} <#{index}>" }
|
78
121
|
rv
|
79
122
|
end
|
80
123
|
|
@@ -107,7 +150,7 @@ module Oreilly
|
|
107
150
|
|
108
151
|
|
109
152
|
def self.scrub_other_identifiers( s, comments )
|
110
|
-
puts s
|
153
|
+
# puts s
|
111
154
|
re = /#{comments} BEGIN \S+\n(.*)\n#{comments} END \S+\n/m
|
112
155
|
s.gsub!( re, $1 )
|
113
156
|
s
|
@@ -118,7 +161,7 @@ module Oreilly
|
|
118
161
|
rv = input
|
119
162
|
if snippets and snippets.length > 0
|
120
163
|
snippets.each do |s|
|
121
|
-
content = get_content_from_file( s[:filename], s[:identifier], s[:language], s[:sha], s[:lines], s[:flatten], s[:normcallouts] )
|
164
|
+
content = get_content_from_file( s ) # s[:filename], s[:identifier], s[:language], s[:sha], s[:lines], s[:flatten], s[:normcallouts] )
|
122
165
|
rv = rv.gsub( s[:full], content )
|
123
166
|
end
|
124
167
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
something().is().here()
|
2
|
+
another.thing().ok()
|
3
|
+
another.thing().ok()
|
4
|
+
something().is().here()
|
5
|
+
another.thing().ok()
|
6
|
+
another.thing().ok()
|
7
|
+
something().is().here()
|
8
|
+
another.thing().ok()
|
9
|
+
another.thing().ok()
|
10
|
+
something().is().here()
|
11
|
+
another.thing().ok()
|
12
|
+
another.thing().ok()
|
13
|
+
something().is().here()
|
14
|
+
another.thing().ok()
|
15
|
+
another.thing().ok()
|
16
|
+
something().is().here()
|
17
|
+
another.thing().ok()
|
18
|
+
another.thing().ok()
|
19
|
+
something().is().here()
|
20
|
+
another.thing().ok()
|
21
|
+
another.thing().ok()
|
data/spec/process_spec.rb
CHANGED
@@ -6,6 +6,14 @@ TEST_REPO = "oreilly-snippets-sample-content"
|
|
6
6
|
GITHUB_REPO = "https://github.com/xrd/#{TEST_REPO}.git"
|
7
7
|
ROOT = File.join "spec", TEST_REPO
|
8
8
|
|
9
|
+
WITH_DIRECTORY_AND_SHA = <<END
|
10
|
+
[filename="../oreilly-snippets", language="js", sha="2f35461ff68c92c2e554c953:spec/fixtures/factorial.js"]
|
11
|
+
snippet~~~~
|
12
|
+
Put any descriptive text you want here. It will be replaced with the
|
13
|
+
snippet~~~~
|
14
|
+
END
|
15
|
+
|
16
|
+
|
9
17
|
WITH_SHA = <<END
|
10
18
|
[filename="#{ROOT}", language="js", sha="c863f786f5959799d7c:test.js"]
|
11
19
|
snippet~~~~
|
@@ -37,6 +45,36 @@ snippet~~~~
|
|
37
45
|
|
38
46
|
END
|
39
47
|
|
48
|
+
STRIP_CALLOUTS_JS = <<"END"
|
49
|
+
[filename="spec/fixtures/normalize_callouts.js", callouts=""]
|
50
|
+
snippet~~~~
|
51
|
+
...
|
52
|
+
snippet~~~~
|
53
|
+
END
|
54
|
+
|
55
|
+
ADD_CALLOUTS_JS = <<"END"
|
56
|
+
[filename="spec/fixtures/normalize_callouts.js", callouts="1,2,3"]
|
57
|
+
snippet~~~~
|
58
|
+
...
|
59
|
+
snippet~~~~
|
60
|
+
END
|
61
|
+
|
62
|
+
NO_SPACED_CALLOUTS_JS = <<"END"
|
63
|
+
[filename="spec/fixtures/add-callouts-no-space.js", callouts="1"]
|
64
|
+
snippet~~~~
|
65
|
+
...
|
66
|
+
snippet~~~~
|
67
|
+
END
|
68
|
+
|
69
|
+
|
70
|
+
REALLY_LONG_CALLOUTS_JS = <<"END"
|
71
|
+
[filename="spec/fixtures/normalize_callouts_long.js", callouts="1,10,15"]
|
72
|
+
snippet~~~~
|
73
|
+
...
|
74
|
+
snippet~~~~
|
75
|
+
END
|
76
|
+
|
77
|
+
|
40
78
|
NORMALIZE_CALLOUTS_JS = <<"END"
|
41
79
|
[filename="spec/fixtures/normalize_callouts.js", normcallouts="true"]
|
42
80
|
snippet~~~~
|
@@ -51,7 +89,6 @@ snippet~~~~
|
|
51
89
|
snippet~~~~
|
52
90
|
END
|
53
91
|
|
54
|
-
|
55
92
|
NORMALIZE_CALLOUTS_RB = <<"END"
|
56
93
|
[filename="spec/fixtures/normalize_callouts.rb", normcallouts="true"]
|
57
94
|
snippet~~~~
|
@@ -217,11 +254,47 @@ describe Oreilly::Snippets do
|
|
217
254
|
output.should_not match( /END FACTORIAL_FUNC/ )
|
218
255
|
end
|
219
256
|
|
257
|
+
describe "#callouts" do
|
258
|
+
it "should strip callouts completely" do
|
259
|
+
output = Oreilly::Snippets.process( STRIP_CALLOUTS_JS )
|
260
|
+
output.should_not match( /<\d+>/ )
|
261
|
+
end
|
262
|
+
|
263
|
+
it "should add callouts" do
|
264
|
+
output = Oreilly::Snippets.process( ADD_CALLOUTS_JS )
|
265
|
+
lines = output.split /\n/
|
266
|
+
lines[0].should match( /<1>/ )
|
267
|
+
lines[1].should match( /<2>/ )
|
268
|
+
lines[2].should match( /<3>/ )
|
269
|
+
end
|
270
|
+
|
271
|
+
it "should add callouts into a long file" do
|
272
|
+
output = Oreilly::Snippets.process( REALLY_LONG_CALLOUTS_JS )
|
273
|
+
lines = output.split /\n/
|
274
|
+
lines[0].should match( /<1>/ )
|
275
|
+
lines[9].should match( /<2>/ )
|
276
|
+
lines[14].should match( /<3>/ )
|
277
|
+
end
|
278
|
+
|
279
|
+
it "should add callouts using a default comment" do
|
280
|
+
output = Oreilly::Snippets.process( REALLY_LONG_CALLOUTS_JS )
|
281
|
+
lines = output.split /\n/
|
282
|
+
lines[0].should match( /\/\/ <1>/ )
|
283
|
+
end
|
284
|
+
|
285
|
+
it "should add callouts without a space character in between comment and callout" do
|
286
|
+
output = Oreilly::Snippets.process( NO_SPACED_CALLOUTS_JS )
|
287
|
+
lines = output.split /\n/
|
288
|
+
lines[0].should match( /\/\/ <1>/ )
|
289
|
+
lines[1].should_not match( /\/\/<10>/ )
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
220
293
|
describe "#normcallouts" do
|
221
294
|
it "should normalize callouts" do
|
222
295
|
output = Oreilly::Snippets.process( NORMALIZE_CALLOUTS_JS )
|
223
296
|
output.should match( /<1>/ )
|
224
|
-
output.should_not match( /<
|
297
|
+
output.should_not match( /<12>/ )
|
225
298
|
end
|
226
299
|
|
227
300
|
it "should normalize callouts with alternative comments" do
|
@@ -302,7 +375,7 @@ END
|
|
302
375
|
Dir.chdir File.join( ROOT )
|
303
376
|
original = `git show c863f786f5959799d7c11312a7ba1d603ff16339:test.js`
|
304
377
|
Dir.chdir cwd
|
305
|
-
output.
|
378
|
+
output.rstrip.should == original.rstrip
|
306
379
|
end
|
307
380
|
|
308
381
|
it "should retrieve by SHA and give us only certain lines" do
|
@@ -316,6 +389,16 @@ END
|
|
316
389
|
output.should == original
|
317
390
|
end
|
318
391
|
|
392
|
+
it "should parse directory specifications" do
|
393
|
+
output = Oreilly::Snippets.process( WITH_DIRECTORY_AND_SHA )
|
394
|
+
original = nil
|
395
|
+
path = ENV['REPO_NAME'] || "../oreilly-snippets"
|
396
|
+
Dir.chdir path do
|
397
|
+
original = `git show 2f35461ff68c92c2e554c953:spec/fixtures/factorial.js`
|
398
|
+
end
|
399
|
+
output.should == ( original + "\n" )
|
400
|
+
end
|
401
|
+
|
319
402
|
it "should indicate placeholder if using xxx as the sha" do
|
320
403
|
output = Oreilly::Snippets.process( WITH_PLACEHOLDER_SHA )
|
321
404
|
output.should match( /PLACEHOLDER/ )
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oreilly-snippets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Dawson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,28 +28,28 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
description: Use O'Reilly style snippets inside your markup (asciidoc or markdown)
|
@@ -69,12 +69,14 @@ files:
|
|
69
69
|
- lib/oreilly/snippets.rb
|
70
70
|
- lib/oreilly/snippets/version.rb
|
71
71
|
- oreilly-snippets.gemspec
|
72
|
+
- spec/fixtures/add-callouts-no-space.js
|
72
73
|
- spec/fixtures/coffeetech.js
|
73
74
|
- spec/fixtures/factorial.java
|
74
75
|
- spec/fixtures/factorial.js
|
75
76
|
- spec/fixtures/normalize_callouts.honey
|
76
77
|
- spec/fixtures/normalize_callouts.js
|
77
78
|
- spec/fixtures/normalize_callouts.rb
|
79
|
+
- spec/fixtures/normalize_callouts_long.js
|
78
80
|
- spec/fixtures/with_spaces.rb
|
79
81
|
- spec/fixtures/with_tabs.rb
|
80
82
|
- spec/process_spec.rb
|
@@ -89,27 +91,29 @@ require_paths:
|
|
89
91
|
- lib
|
90
92
|
required_ruby_version: !ruby/object:Gem::Requirement
|
91
93
|
requirements:
|
92
|
-
- -
|
94
|
+
- - '>='
|
93
95
|
- !ruby/object:Gem::Version
|
94
96
|
version: '0'
|
95
97
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
98
|
requirements:
|
97
|
-
- -
|
99
|
+
- - '>='
|
98
100
|
- !ruby/object:Gem::Version
|
99
101
|
version: '0'
|
100
102
|
requirements: []
|
101
103
|
rubyforge_project:
|
102
|
-
rubygems_version: 2.2.
|
104
|
+
rubygems_version: 2.2.2
|
103
105
|
signing_key:
|
104
106
|
specification_version: 4
|
105
107
|
summary: See the README
|
106
108
|
test_files:
|
109
|
+
- spec/fixtures/add-callouts-no-space.js
|
107
110
|
- spec/fixtures/coffeetech.js
|
108
111
|
- spec/fixtures/factorial.java
|
109
112
|
- spec/fixtures/factorial.js
|
110
113
|
- spec/fixtures/normalize_callouts.honey
|
111
114
|
- spec/fixtures/normalize_callouts.js
|
112
115
|
- spec/fixtures/normalize_callouts.rb
|
116
|
+
- spec/fixtures/normalize_callouts_long.js
|
113
117
|
- spec/fixtures/with_spaces.rb
|
114
118
|
- spec/fixtures/with_tabs.rb
|
115
119
|
- spec/process_spec.rb
|