indentation 0.0.7 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZDFlODVkZWY2ZTI0ZDA0NzJiN2M4MWJlM2JlZTViYzY4NGExY2QxZg==
5
+ data.tar.gz: !binary |-
6
+ Y2E4YTVkNDNlMTQyNTUzNTA5NDlkY2EzYTIzNTUxZmE2N2FkOGVjMw==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NjQwNTAyN2Y1OGZjZTVkNWQ5MzZiYmFjNTY0NGY4MWViZmFmODRkYTMyZWRm
10
+ YWZhN2ViNTg2ZGYwMDkzOTQxMGE3YjA5ODExYjAxZmJmNTVjMGVlNTA2OTJj
11
+ NTE4Y2I1NjAwODlkZTEyNThhYTAyY2Q5NjgxMTczMDY1ZTNmZDQ=
12
+ data.tar.gz: !binary |-
13
+ OTNkMTViZWVmMDU2MmEyNzMzYzIzZTIxY2E3ZjhlYzI4NjdkNzQxNzJlODg2
14
+ ZTQ2NTI4NjI1ZGI4NmVkZGMwOTJkNTI0ZjQ0MWM5YTAzMDhmMmUxNzhmNDgy
15
+ N2RlYWU2MzUyMGI4MjZkYWY2NTY3MWVkMzE5ZWFkNjg4YmM0NWM=
@@ -6,7 +6,7 @@
6
6
 
7
7
  A small library of extensions to Ruby's Array and String classes that allow indentation manipulation of Strings and Arrays of Strings. Has the capability of working with multi-line strings. If you frequently use String arrays to manipulate text, see synopsis (In README.rdoc) for examples of how indentation can make your life easier.
8
8
 
9
- == SYNOPSIS:
9
+ == EXAMPLES:
10
10
 
11
11
  === Indent
12
12
 
@@ -53,7 +53,7 @@ A small library of extensions to Ruby's Array and String classes that allow inde
53
53
 
54
54
  # Accepts an indentation modifier
55
55
  " one\n two".reset_indentation(1) # => " one\n two"
56
- " one\n two".reset_indentation(0) # => " one\ntwo" - Default behavior
56
+ " one\n two".reset_indentation(0) # => " one\ntwo" # Default behavior
57
57
  " one\n two".reset_indentation(-1) # => "one\ntwo"
58
58
 
59
59
 
@@ -111,12 +111,29 @@ A small library of extensions to Ruby's Array and String classes that allow inde
111
111
  " three\n".find_least_indentation(:ignore_blank_lines => false) # => 0
112
112
 
113
113
  # Option to ignore both blank lines (no characters whatsoever) and empty lines (whitespace-only)
114
- # Default => true
114
+ # Implies :ignore_blank_lines => true when enabled
115
+ # Default => true
115
116
  " three\n ".find_least_indentation # => 3
116
117
  " three\n ".find_least_indentation(:ignore_empty_lines => false) # => 1
117
- " three\n".find_least_indentation(:ignore_empty_lines => false) # => 3
118
- " three\n".find_least_indentation(:ignore_empty_lines => false, :ignore_blank_lines => false) # => 0
118
+ " three\n".find_least_indentation # => 3
119
+ " three\n".find_least_indentation(:ignore_empty_lines => false) # => 0
120
+
121
+ # To ignore blank, but not empty, lines:
122
+ " three\n ".find_least_indentation(:ignore_blank_lines => true, :ignore_empty_lines => false) # => 1
123
+ " three\n".find_least_indentation(:ignore_blank_lines => true, :ignore_empty_lines => false) # => 3
124
+
125
+ === English Array Join
126
+
127
+ # Given an Array of Strings and an optional conjunction, joins them using English list punctuation
128
+ # to find the least indentation within a multi-line String
129
+ ['one', 'two'].english_join # => "one and two"
130
+ ['one', 'two', 'three'].english_join # => "one, two, and three"
131
+
132
+ # Different conjunction
133
+ ['one', 'two', 'three'].english_join('or') # => "one, two, or three"
119
134
 
135
+ # Different separator
136
+ ['one', 'two', 'three'].english_join('or', ' ') # => "one two or three"
120
137
 
121
138
  == REQUIREMENTS:
122
139
 
@@ -1,5 +1,2 @@
1
- $:.unshift(File.dirname(__FILE__)) unless
2
- $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
-
4
1
  require 'indentation/string_mod.rb'
5
2
  require 'indentation/array_mod.rb'
@@ -71,4 +71,25 @@ class Array
71
71
  indent!(-find_least_indentation + modifier)
72
72
  end
73
73
 
74
+ # Join an array of strings using English list punctuation.
75
+ def english_join(conjunction = 'and', separator = ', ', oxford_comma = true)
76
+ len = self.length
77
+ return '' if len == 0
78
+ return self[0].to_s if len == 1
79
+ return "#{self[0].to_s} #{conjunction} #{self[1].to_s}" if len == 2
80
+ join_str = ''
81
+ self.each_with_index{|ele, i|
82
+ str = if !oxford_comma && i == len - 2
83
+ "#{ele} #{conjunction} "
84
+ elsif i == len - 2
85
+ "#{ele}#{separator}#{conjunction} "
86
+ elsif i == len - 1
87
+ "#{ele}"
88
+ else
89
+ "#{ele}#{separator}"
90
+ end
91
+ join_str << str
92
+ }
93
+ join_str
94
+ end
74
95
  end
@@ -8,7 +8,7 @@ module Indentation
8
8
  # Required String
9
9
  GEM_NAME = "indentation"
10
10
  # Required String
11
- VERSION = '0.0.7'
11
+ VERSION = '0.1.1'
12
12
  # Optional String or Array of Strings
13
13
  AUTHORS = ["Sam Dana"]
14
14
  # Optional String or Array of Strings
@@ -279,104 +279,25 @@ describe "Reset Indentation function" do
279
279
  array.reset_indentation!.should == ["This", " is", "a test"]
280
280
  array.should == ["This", " is", "a test"]
281
281
  end
282
-
283
282
  end
284
283
 
285
- describe "README.rdoc" do
286
- it "should have correct examples for indent" do
287
-
288
- # Default indentation is 2 spaces
289
- "test".indent.should == " test"
290
-
291
- # Amount of indentation can be changed
292
- "test".indent(3).should == " test"
293
-
294
- # Indentation character (or string) is set as the second parameter of indent.
295
- "test".indent(2, "\t").should == "\t\ttest"
296
-
297
- # Operates on multi-line strings
298
- "this\nis\na\ntest".indent.should == " this\n is\n a\n test"
299
-
300
- # Indent method accepts negative values (Removes tabs, spaces, and supplied indentation string)
301
- " test".indent(-1).should == " test"
302
- "\t test".indent(-5).should == "test"
303
- "\t-- Test".indent(-10).should == "-- Test"
304
- "\t-- Test".indent(-10, '-').should == "Test"
305
- "--- Test".indent(-2, '--').should == "- Test"
306
-
307
- # Operates on arrays
308
- ["one", "two"].indent.should == [" one", " two"]
309
- [["one", " two"], ["uno", "\t\tdos"]].indent.should == [[" one", " two"], [" uno", " \t\tdos"]]
310
-
284
+ describe "English Join function" do
285
+ it "should use the given conjunction to join the words with comma separation" do
286
+ [].english_join.should == ''
287
+ ['one'].english_join.should == 'one'
288
+ ['one', 'two'].english_join.should == 'one and two'
289
+ ['one', 'two', 'three'].english_join.should == 'one, two, and three'
311
290
  end
312
291
 
313
- it "should have correct examples for reset indentation" do
314
-
315
- # 'resets' the indentation of a string by finding the least amount of indentation in the String/Array, and
316
- # removing that amount from every line.
317
- " def method_name\n # Do stuff\n end".reset_indentation.should == "def method_name\n # Do stuff\nend"
318
-
319
- # Operates on arrays
320
- [" def method_name", " # Do stuff", " end"].reset_indentation.should == ["def method_name", " # Do stuff", "end"]
321
-
322
- # Useful for heredocs - must chomp to remove trailing newline
323
- my_string = <<-EOS.chomp.reset_indentation
324
- def method_name
325
- # Do stuff
326
- end
327
- EOS
328
- my_string.should == "def method_name\n # Do stuff\nend"
329
-
330
- # Accepts an indentation modifier
331
- " one\n two".reset_indentation(1).should == " one\n two"
332
- " one\n two".reset_indentation(0).should == " one\ntwo" # Default behavior
333
- " one\n two".reset_indentation(-1).should == "one\ntwo"
292
+ it "should override the default conjunction with the passed conjunction" do
293
+ ['one', 'two', 'three'].english_join('or').should == 'one, two, or three'
334
294
  end
335
295
 
336
- it "should have correct examples for append separator" do
337
-
338
- # Given an Array of Arrays or an Array of Strings, appends a separator object to all but the last element in the Array.
339
- # NOTE: For an Array of Strings the separator object must be a String, since it is appended to other Strings
340
- ["arg1", "arg2", "arg3"].append_separator("!").should == ["arg1!", "arg2!", "arg3"]
341
- [["line1"], ["line2"], ["line3"]].append_separator("").should == [["line1", ""], ["line2", ""], ["line3"]]
342
- [["line1", "line2"], ["line3", "line4"]].append_separator("").should == [["line1", "line2", ""], ["line3", "line4"]]
343
-
344
- # Useful combined with indent and join
345
- vars = ["var1", "var2", "var3", "var4"]
346
- method_def = ["def add_up(#{vars.join(', ')})"]
347
- method_body = vars.append_separator(" + ")
348
- method_def += method_body.indent
349
- method_def << "end"
350
- method_def.join("\n").should == "def add_up(var1, var2, var3, var4)\n var1 + \n var2 + \n var3 + \n var4\nend"
351
-
352
- # Handy for separating arrays of string arrays
353
- test_array = [["this", "is", "a", "test"], ["quick", "brown", "fox"], ["lazy", "typist"]]
354
- test_array.append_separator("").join("\n").should == "this\nis\na\ntest\n\nquick\nbrown\nfox\n\nlazy\ntypist"
296
+ it "should override the default separator with the passed separator" do
297
+ ['one', 'two', 'three'].english_join('or', ' ').should == 'one two or three'
355
298
  end
356
299
 
357
- it "should have correct examples for find_least_indentation" do
358
-
359
- # Given a String or Array of Strings, finds the least indentation on any line. Splits on newlines found within strings
360
- # to find the least indentation within a multi-line String
361
- " test".find_least_indentation # => 2
362
- " three\n two \n one".find_least_indentation # => 1
363
- [" two", " three", " four"].find_least_indentation # => 2
364
- [" two", " three", [" four", " five\n one"]].find_least_indentation # => 1
365
-
366
- # Option to ignore blank (no characters whatsoever) lines.
367
- # Note, disabling this option will automatically disable :ignore_empty_lines
368
- # Default => true
369
- " three\n".find_least_indentation # => 3
370
- " three\n".find_least_indentation(:ignore_blank_lines => false) # => 0
371
-
372
- # Option to not only ignore both blank lines (no characters whatsoever) and empty lines (whitespace-only)
373
- # Default => true
374
- " three\n ".find_least_indentation # => 3
375
- " three\n ".find_least_indentation(:ignore_empty_lines => false) # => 1
376
- " three\n".find_least_indentation(:ignore_empty_lines => false) # => 3
377
- " three\n".find_least_indentation(:ignore_empty_lines => false, :ignore_blank_lines => false) # => 0
378
- end
379
-
380
-
381
-
382
- end
300
+ it "should allow turning off the oxford comma" do
301
+ ['one', 'two', 'three'].english_join('and', ', ', false).should == 'one, two and three'
302
+ end
303
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Readme Rdoc examples" do
4
+ rdoc_examples.each do |example_name, example_code|
5
+ it "should pass the #{example_name} example from the README" do
6
+ eval(example_code)
7
+ end
8
+ end
9
+ end
@@ -8,3 +8,50 @@ end
8
8
 
9
9
  $:.unshift(File.dirname(__FILE__) + '/../lib')
10
10
  require 'indentation'
11
+
12
+ def rdoc_examples(examples_header = /^Examples:/i)
13
+ readme_rdoc = File.join(File.dirname(__FILE__), '../README.rdoc')
14
+ rdoc_content = File.read(readme_rdoc)
15
+ example_content = rdoc_content.split(/^== /).select{|p| p =~ examples_header}.first
16
+ raise "Couldn't find Examples header matching: #{examples_header}" unless example_content
17
+ examples_content = example_content.split('=== ')
18
+ examples = {}
19
+ # Skipping first 'example' since it is "Examples:\n"
20
+ examples_content[1..-1].each do |excon|
21
+ lines = excon.split("\n")
22
+ example_name = lines.shift.delete(':')
23
+ example_code = []
24
+ example_code << "$stdout = StringIO.new"
25
+ lines.each do |line|
26
+ l = line
27
+ if l =~ / # => /
28
+ code, check = line.split(/ # => /)
29
+ # Could make this more sophisticated, but just going with ==
30
+ l = code + ".should == " + check
31
+ elsif l =~ /(.*) ?# :([^ ]*) => (.*)$/
32
+ code = $~[1]
33
+ var = $~[2].to_sym
34
+ value = $~[3]
35
+ case var
36
+ when :stdout
37
+ l = "#{code}\n $stdout.string.chomp.split(%!\n!).last.should == %!#{value}!"
38
+ else
39
+ raise "Unkown variable type: #{var}"
40
+ end
41
+ end
42
+ example_code << l
43
+ end
44
+ # Debugging to show all of stdout during example
45
+ #example_code << "stdoutput = $stdout.string"
46
+ example_code << "$stdout = STDOUT"
47
+ #example_code << "puts stdoutput"
48
+ examples[example_name.to_sym] = example_code.join("\n")
49
+ end
50
+ examples
51
+ end
52
+
53
+ def time
54
+ t = Time.now
55
+ yield
56
+ Time.now - t
57
+ end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: indentation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
5
- prerelease:
4
+ version: 0.1.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Sam Dana
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-01-30 00:00:00.000000000 Z
11
+ date: 2013-10-09 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: A library of extensions to Ruby's Array and String classes that allow
15
14
  indentation manipulation of Strings and Arrays of Strings.
@@ -27,33 +26,34 @@ files:
27
26
  - lib/indentation/string_mod.rb
28
27
  - spec/.rspec
29
28
  - spec/indentation_spec.rb
29
+ - spec/rdoc_examples_spec.rb
30
30
  - spec/spec_helper.rb
31
31
  homepage: http://samueldana.github.com/indentation/
32
32
  licenses: []
33
+ metadata: {}
33
34
  post_install_message:
34
35
  rdoc_options: []
35
36
  require_paths:
36
37
  - lib
37
38
  required_ruby_version: !ruby/object:Gem::Requirement
38
- none: false
39
39
  requirements:
40
40
  - - ! '>='
41
41
  - !ruby/object:Gem::Version
42
42
  version: '0'
43
43
  required_rubygems_version: !ruby/object:Gem::Requirement
44
- none: false
45
44
  requirements:
46
45
  - - ! '>='
47
46
  - !ruby/object:Gem::Version
48
47
  version: '0'
49
48
  requirements: []
50
49
  rubyforge_project:
51
- rubygems_version: 1.8.24
50
+ rubygems_version: 2.0.3
52
51
  signing_key:
53
- specification_version: 3
52
+ specification_version: 4
54
53
  summary: A library of extensions to Ruby's Array and String classes that allow indentation
55
54
  manipulation of Strings and Arrays of Strings.
56
55
  test_files:
57
56
  - spec/indentation_spec.rb
57
+ - spec/rdoc_examples_spec.rb
58
58
  - spec/spec_helper.rb
59
59
  has_rdoc: