string_stubber 0.0.2 → 0.0.3

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.
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ -cfs
2
+
data/Gemfile CHANGED
@@ -2,6 +2,3 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in string_stubber.gemspec
4
4
  gemspec
5
-
6
- gem 'lorem'
7
-
data/Gemfile.lock CHANGED
@@ -1,16 +1,27 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- string_stubber (0.0.1)
4
+ string_stubber (0.0.3)
5
+ yard (~> 0.6)
5
6
 
6
7
  GEM
7
8
  remote: http://rubygems.org/
8
9
  specs:
9
- lorem (0.1.2)
10
+ diff-lcs (1.1.2)
11
+ rspec (2.4.0)
12
+ rspec-core (~> 2.4.0)
13
+ rspec-expectations (~> 2.4.0)
14
+ rspec-mocks (~> 2.4.0)
15
+ rspec-core (2.4.0)
16
+ rspec-expectations (2.4.0)
17
+ diff-lcs (~> 1.1.2)
18
+ rspec-mocks (2.4.0)
19
+ yard (0.6.4)
10
20
 
11
21
  PLATFORMS
22
+ java
12
23
  ruby
13
24
 
14
25
  DEPENDENCIES
15
- lorem
26
+ rspec (~> 2.4)
16
27
  string_stubber!
data/README.md CHANGED
@@ -35,3 +35,5 @@ So far, so good! Suggestions are welcome.
35
35
  # TODO
36
36
 
37
37
  stubbing from the right direction is simple to do and will be the next addition.
38
+ *^* done, needs specs
39
+ left and right indexes
@@ -1,41 +1,44 @@
1
1
  module StringStubber
2
2
  module Base
3
- WORD = /\b(\w+)\b/
4
- SNIP = /\s*?\W+$/
3
+ WORD = /[\w[:punct:]]+/
4
+ SNIP = /\s+$/
5
5
 
6
+ # Stubs a given text string, up to a given number of words
7
+ # @param [String] text Any piece of text
8
+ # @param [Fixnum] max_words The desired number of words
9
+ # @return [String] The text, stubbed at max_words number of words
6
10
  def stub_words(text, max_words)
7
11
  scanner = StringScanner.new(text.to_s)
8
12
 
9
13
  return scan_words(scanner, max_words)
10
14
  end
11
15
 
16
+ # Stubs the given text string a number of whole-words, not to go beyond the given text position
17
+ # @param [String] text Any piece of text
18
+ # @param [Fixnum] max_text Text position that delimits the desired number of whole words
19
+ # @return [String] The text, stubbed at the max_text position
12
20
  def stub_text(text, max_text)
13
- string = text.to_s
14
- scanner = StringScanner.new(string)
21
+ scanner = StringScanner.new(text.to_s)
15
22
 
16
23
  return scan_text(scanner, max_text)
17
24
  end
18
25
 
19
26
  def scan_word(scanner)
20
- (str = scanner.scan_until(WORD)).gsub!(SNIP, '')
21
-
22
- return str
27
+ scanner.scan_until(WORD)
23
28
  end
24
29
 
25
30
  def scan_words(scanner, max_words)
26
31
  max_words.times.map {
27
32
  scanner.scan_until(WORD)
28
- }.flatten.join
33
+ }.compact.join
29
34
  end
30
35
 
31
36
  def scan_text(scanner, max_text)
32
37
  start = scanner.pos
33
38
 
34
- until scanner.pos > max_text || scanner.scan_until(WORD).nil?; end
35
-
36
- (str = scanner.pre_match || scanner.string[start, max_text]).gsub!(SNIP, '')
39
+ until scanner.pos >= max_text || scanner.scan_until(WORD).nil?; end
37
40
 
38
- return str
41
+ (str = scanner.pre_match || scanner.string[start, max_text]).gsub!(SNIP, '')
39
42
  end
40
43
  end # module Base
41
44
  end # module StringStubber
@@ -68,7 +68,3 @@ module StringStubber
68
68
  end
69
69
  end
70
70
  end
71
-
72
- class String
73
- include StringStubber::CoreExt
74
- end
@@ -1,3 +1,3 @@
1
1
  module StringStubber
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -14,3 +14,7 @@ require 'string_stubber/core_ext'
14
14
  module StringStubber
15
15
  extend StringStubber::Base
16
16
  end
17
+
18
+ class String
19
+ include StringStubber::CoreExt
20
+ end
@@ -0,0 +1,11 @@
1
+ require "spec_helper"
2
+
3
+ IGNORE = /\.(gitmodules|png$|tar$|gz$|rbc$|gem$|pdf$)/
4
+
5
+ describe "The application itself" do
6
+ it "has no malformed whitespace" do
7
+ files = `git ls-files`.split("\n").select {|fn| fn !~ IGNORE}
8
+
9
+ files.should be_well_formed
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ require 'bundler'
2
+
3
+ Bundler.require :default
4
+ Bundler.require :development
5
+
6
+ Dir[ Bundler.root.join("spec/support/**/*.rb") ].each{|f| require f}
7
+
8
+ RSpec.configure do |c|
9
+ c.include CustomMatchers
10
+ end
@@ -0,0 +1,88 @@
1
+ require File.expand_path("../spec_helper", File.dirname(__FILE__))
2
+
3
+ describe StringStubber::Base do
4
+ describe 'The Base module should behave like a proper mix-in ;)' do
5
+ before :each do
6
+ @methods = [ :stub_words, :stub_text, :scan_word, :scan_words, :scan_text ]
7
+ end
8
+
9
+ it 'should have class methods available' do
10
+ class TestMixin
11
+ extend StringStubber::Base
12
+ end
13
+
14
+ @methods.each {|method|
15
+ TestMixin.respond_to?(method).should be_true
16
+ }
17
+ end
18
+ end # Should be a Mix-In
19
+
20
+ describe 'The stubbing methods should behave as expected (Docs check)' do
21
+ before :each do
22
+ @text = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus vitae risus vitae lorem iaculis placerat. "
23
+ @text << "Aliquam sit amet felis. Etiam congue. Donec risus risus, pretium ac, tincidunt eu, tempor eu, quam. Morbi "
24
+ @text << "blandit mollis magna. Suspendisse eu tortor. Donec vitae felis nec ligula blandit rhoncus. Ut a pede ac neque "
25
+ @text << "mattis facilisis. Nulla nunc ipsum, sodales vitae, hendrerit non, imperdiet ac, ante. Morbi sit amet mi. Ut "
26
+ @text << "magna. Curabitur id est. Nulla velit. Sed consectetuer sodales justo. Aliquam dictum gravida libero. Sed eu "
27
+ @text << "turpis. Nunc id lorem. Aenean consequat tempor mi. Phasellus in neque. Nunc fermentum convallis ligula."
28
+
29
+ @count = @text.split(/\W+/).count
30
+ end
31
+
32
+ describe 'Method: stub_words' do
33
+ it 'should return the expected number of words' do
34
+ StringStubber.stub_words(@text, 10).split(/\W+/).count.should be(10)
35
+ end
36
+
37
+ it 'should always return a string' do
38
+ stubs = [
39
+ StringStubber.stub_words(@text, -100),
40
+ StringStubber.stub_words(@text, -1),
41
+ StringStubber.stub_words(@text, 0),
42
+ StringStubber.stub_words(@text, 10),
43
+ StringStubber.stub_words(@text, 100)
44
+ ]
45
+
46
+ stubs.each {|stub|
47
+ stub.is_a?(String).should be_true
48
+ }
49
+ end
50
+
51
+ it 'should never have trailing spaces' do
52
+ @count.times {|x|
53
+ (StringStubber.stub_words(@text, x) !~ /\s+[\s\W]+$/).should be_true
54
+ }
55
+ end
56
+
57
+ it 'Should only have trailing non-words if they immediately follow words' do
58
+ # regex = /[^\w\s]/
59
+ # scanner = StringScanner.new(@text)
60
+ # count = @text.split(/[^\w\s]/).count
61
+ # puncts = Hash[ count.times.map {
62
+ # scanner.scan_until(regex)
63
+ # [scanner.pre_match.split.count, scanner.pos - 1]
64
+ # }
65
+ # ]
66
+ #
67
+ # @count.times {|x|
68
+ # (StringStubber.stub_words(@text, x) !~ /\s+$/).should be_true
69
+ # }
70
+ end
71
+
72
+ #
73
+ end # describe 'Method: stub_words'
74
+
75
+ describe 'Method: stub_text' do
76
+ it 'should return less than the number of chars specified, if the offset is in the middle of a word' do
77
+ StringStubber.stub_text(@text, 33).size.should be(27)
78
+ end
79
+
80
+ it 'should return less than the number of chars specified, if the offset is in the middle of a word\'s punctuation' do
81
+ StringStubber.stub_text(@text, 33).size.should be(27)
82
+ end
83
+
84
+ it 'should return exactly the number of chars specified, if the position lands on white-space' do
85
+ end
86
+ end # describe 'Method: stub_text'
87
+ end
88
+ end
@@ -0,0 +1,2 @@
1
+ require File.expand_path("../spec_helper", File.dirname(__FILE__))
2
+
@@ -0,0 +1,44 @@
1
+ module CustomMatchers
2
+ class BeWellFormed
3
+ def matches?(files)
4
+ @errors = files.map {|filename|
5
+ [
6
+ check_for_tabs(filename),
7
+ excessive_spacing(filename),
8
+ newline_precedes_eof(filename)
9
+ ]
10
+ }.flatten.compact
11
+
12
+ @errors.empty?
13
+ end
14
+
15
+ def failure_message_for_should
16
+ @errors.join("\n")
17
+ end
18
+
19
+ private
20
+ def check_for_tabs(filename)
21
+ bad_lines = File.readlines(filename).each_with_index.map do |line, line_no|
22
+ line_no + 1 if line["\t"] and line !~ /^\s+#.*\s+\n$/
23
+ end.flatten.compact
24
+
25
+ "#{filename} has tab characters on lines #{bad_lines.join(', ')}" if bad_lines.any?
26
+ end
27
+
28
+ def excessive_spacing(filename)
29
+ bad_lines = File.readlines(filename).each_with_index.map do |line, line_no|
30
+ line_no + 1 if line =~ /\s+\n$/ and line !~ /^\s+#.*\s+\n$/
31
+ end.flatten.compact
32
+
33
+ "#{filename} has spaces on the EOL on lines #{bad_lines.join(', ')}" if bad_lines.any?
34
+ end
35
+
36
+ def newline_precedes_eof(filename)
37
+ "#{filename} does not have a newline (\\n) before EOF" if File.read(filename) !~ /\n$/
38
+ end
39
+ end
40
+
41
+ def be_well_formed
42
+ BeWellFormed.new
43
+ end
44
+ end
@@ -14,6 +14,10 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.rubyforge_project = "string_stubber"
16
16
 
17
+ s.add_dependency 'yard', '~>0.6'
18
+
19
+ s.add_development_dependency 'rspec', '~>2.4'
20
+
17
21
  s.files = `git ls-files`.split("\n")
18
22
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
23
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 2
9
- version: 0.0.2
8
+ - 3
9
+ version: 0.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Scott Gonyea
@@ -14,10 +14,37 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-19 00:00:00 -08:00
17
+ date: 2011-01-20 00:00:00 -08:00
18
18
  default_executable:
19
- dependencies: []
20
-
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: yard
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ - 6
31
+ version: "0.6"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: rspec
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ~>
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 2
44
+ - 4
45
+ version: "2.4"
46
+ type: :development
47
+ version_requirements: *id002
21
48
  description: StringStubber allows you to truncate Strings, while preserving whole-words.
22
49
  email:
23
50
  - me@sgonyea.com
@@ -29,6 +56,7 @@ extra_rdoc_files: []
29
56
 
30
57
  files:
31
58
  - .gitignore
59
+ - .rspec
32
60
  - Gemfile
33
61
  - Gemfile.lock
34
62
  - README.md
@@ -37,6 +65,11 @@ files:
37
65
  - lib/string_stubber/base.rb
38
66
  - lib/string_stubber/core_ext.rb
39
67
  - lib/string_stubber/version.rb
68
+ - spec/quality_spec.rb
69
+ - spec/spec_helper.rb
70
+ - spec/string_stubber/base_spec.rb
71
+ - spec/string_stubber/core_ext_spec.rb
72
+ - spec/support/custom_matchers.rb
40
73
  - string_stubber.gemspec
41
74
  has_rdoc: true
42
75
  homepage: ""
@@ -70,5 +103,9 @@ rubygems_version: 1.3.7
70
103
  signing_key:
71
104
  specification_version: 3
72
105
  summary: Allows you to truncate Strings, while preserving whole-words.
73
- test_files: []
74
-
106
+ test_files:
107
+ - spec/quality_spec.rb
108
+ - spec/spec_helper.rb
109
+ - spec/string_stubber/base_spec.rb
110
+ - spec/string_stubber/core_ext_spec.rb
111
+ - spec/support/custom_matchers.rb