corefines 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 82c26f93d1bc1ddcc3dcb1c97969c68e8c0cef6f
4
- data.tar.gz: 6054a13281a7d9fa3b271e0b0346807ad544ae13
3
+ metadata.gz: c7839672b793a5df3d5ffa892272260eccf0c0db
4
+ data.tar.gz: 0a263d7e00645c8451d93461bfe9ed81cd8ccc1c
5
5
  SHA512:
6
- metadata.gz: c610bd41cde34fdb019703195c19e634581da8aea88ee5453e777f4479fc7d800b4a02fede7d99ef55c8cd17ec6dc3b26b63ccd4e2e514c02575265e84b4e2fe
7
- data.tar.gz: 6bbc9e703f2e9f705340c7be511950f81d5e443cb3143cd2928d2c66dc14b330bbea79c0333100dd3015c2bd36b7797ee09663a8407a3c55621b74edf20396de
6
+ metadata.gz: 93f5a5a21061dea9e9aaddf7ea5520e7743a0c84c9635d42c63cdaed032fae12e328e141a60d40ac22ea7d986b3cda8a258374a583df7fdbcafbf7d8856bc317
7
+ data.tar.gz: 7b31c6b28bb018d1b0ee9fd9368922a0a282a545e461c0e6f488111ea0837abcdee533249d97560c7f31adc47aaf8cc2698fd4dc03bf353ce2435b226aef7e2d
data/CHANGELOG.adoc CHANGED
@@ -3,6 +3,11 @@
3
3
  :doc-base-url: http://www.rubydoc.info/github/jirutka/corefines/Corefines
4
4
  :issue-uri: {repo-uri}/issues
5
5
 
6
+ == 1.2.0 (2015-04-27)
7
+
8
+ * Add new refinement {doc-base-url}/String/Indent[String#indent].
9
+
10
+
6
11
  == 1.1.0 (2015-04-25)
7
12
 
8
13
  * Add new refinement {doc-base-url}/String/ToB[String#to_b].
data/README.adoc CHANGED
@@ -41,12 +41,12 @@ TODO
41
41
  Add this line to your application’s Gemfile:
42
42
 
43
43
  [source]
44
- gem 'corefines', '~> 1.0'
44
+ gem 'corefines', '~> 1.2'
45
45
 
46
46
  or to your gemspec:
47
47
 
48
48
  [source]
49
- s.add_runtime_dependency 'corefines', '~> 1.0'
49
+ s.add_runtime_dependency 'corefines', '~> 1.2'
50
50
 
51
51
  and then execute:
52
52
 
@@ -161,6 +161,7 @@ Not ideal indeed, but probably the best of what we can achieve.
161
161
  ** {doc-base-url}/String/Color[#color]
162
162
  ** {doc-base-url}/String/Concat[#concat]
163
163
  ** {doc-base-url}/String/Decolor[#decolor]
164
+ ** {doc-base-url}/String/Indent[#indent]
164
165
  ** {doc-base-url}/String/Remove[#remove]
165
166
  ** {doc-base-url}/String/ToB[#to_b]
166
167
  ** {doc-base-url}/String/Unindent[#unindent] (alias `#strip_heredoc`)
@@ -126,6 +126,50 @@ module Corefines
126
126
  end
127
127
  end
128
128
 
129
+ ##
130
+ # @!method indent(amount, indent_str = nil, indent_empty_lines = false)
131
+ # Returns an indented copy of this string.
132
+ #
133
+ # @example
134
+ # "foo".indent(2) # => " foo"
135
+ # " foo".indent(2) # => " foo"
136
+ # "foo\n\t\tbar".indent(2) # => "\t\tfoo\n\t\t\t\tbar"
137
+ # "foo".indent(2, '.') # => "..foo"
138
+ # "foo\n\nbar".indent(2) # => " foo\n\n bar"
139
+ # "foo\n\nbar".indent(2, nil, true) # => " foo\n \n bar"
140
+ #
141
+ # @param amount [Fixnum] the indent size.
142
+ # @param indent_str [String, nil] the indent character to use.
143
+ # The default is +nil+, which tells the method to make a guess by
144
+ # peeking at the first indented line, and fallback to a space if
145
+ # there is none.
146
+ # @param indent_empty_lines [Boolean] whether empty lines should be indented.
147
+ # @return [String] a new string.
148
+ #
149
+ # @!method indent!(amount, indent_str = nil, indent_empty_lines = false)
150
+ # Returns the indented string, or +nil+ if there was nothing to indent.
151
+ # This is same as {#indent}, except it indents the receiver in-place.
152
+ #
153
+ # @see #indent
154
+ # @param amount (see #indent)
155
+ # @param indent_str (see #indent)
156
+ # @param indent_empty_lines (see #indent)
157
+ # @return [String] self
158
+ #
159
+ module Indent
160
+ refine ::String do
161
+ def indent(amount, indent_str = nil, indent_empty_lines = false)
162
+ dup.tap { |str| str.indent! amount, indent_str, indent_empty_lines }
163
+ end
164
+
165
+ def indent!(amount, indent_str = nil, indent_empty_lines = false)
166
+ indent_str = indent_str || self[/^[ \t]/] || ' '
167
+ re = indent_empty_lines ? /^/ : /^(?!$)/
168
+ gsub! re, indent_str * amount
169
+ end
170
+ end
171
+ end
172
+
129
173
  ##
130
174
  # @!method remove(*patterns)
131
175
  # Returns a copy of this string with *all* occurrences of the _patterns_
@@ -232,6 +276,7 @@ module Corefines
232
276
 
233
277
  class << self
234
278
  alias_method :concat!, :concat
279
+ alias_method :indent!, :indent
235
280
  alias_method :remove!, :remove
236
281
  end
237
282
  end
@@ -1,3 +1,3 @@
1
1
  module Corefines
2
- VERSION = '1.1.0'
2
+ VERSION = '1.2.0'
3
3
  end
@@ -0,0 +1,48 @@
1
+ describe String do
2
+ using Corefines::String::indent
3
+
4
+ describe '#indent' do
5
+
6
+ context "with default indent_str" do
7
+ context "string already indented with spaces" do
8
+ it "indents with spaces" do
9
+ expect( "foo\n bar".indent(2) ).to eql " foo\n bar"
10
+ end
11
+ end
12
+
13
+ context "string already indented with tabs" do
14
+ it "indents with tabs" do
15
+ expect( "foo\n\tbar".indent(2) ).to eql "\t\tfoo\n\t\t\tbar"
16
+ end
17
+ end
18
+
19
+ context "string without indentation" do
20
+ it "indents with space" do
21
+ expect( "foo\nbar".indent(3) ).to eql " foo\n bar"
22
+ end
23
+ end
24
+
25
+ context "string that only contain newlines (edge cases)" do
26
+ it "doesn't indent at all" do
27
+ ['', "\n", "\n" * 7].each do |str|
28
+ expect( str.indent(8) ).to eql str
29
+ expect( str.indent(1, "\t") ).to eql str
30
+ expect( str.indent!(8) ).to be_nil
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ context "with indent_str" do
37
+ it "indents lines with the specified string" do
38
+ expect( "foo\n bar".indent(2, '.') ).to eql "..foo\n.. bar"
39
+ end
40
+ end
41
+
42
+ context "with indent_empty_lines" do
43
+ it "indents all lines including empty ones" do
44
+ expect( "foo\n\nbar".indent(2, nil, true) ).to eql " foo\n \n bar"
45
+ end
46
+ end
47
+ end
48
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: corefines
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jakub Jirutka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-24 00:00:00.000000000 Z
11
+ date: 2015-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciidoctor
@@ -142,6 +142,7 @@ files:
142
142
  - spec/string/color_spec.rb
143
143
  - spec/string/concat_spec.rb
144
144
  - spec/string/decolor_spec.rb
145
+ - spec/string/indent_spec.rb
145
146
  - spec/string/remove_spec.rb
146
147
  - spec/string/to_b_spec.rb
147
148
  - spec/string/unindent_spec.rb