lovely-rufus 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4bc1501b91f7200aa0470d05f334d920ac46357d
4
+ data.tar.gz: f6b4a99d363210365ec476ae344804c6b8a67511
5
+ SHA512:
6
+ metadata.gz: d12aac424d760ae10388d15909c717c073af5d5e31a697c8d855606bcd5b615e7a49721229b1924a039d4d28801fa538fdf7ad519db9cdf21a89a19e200c3657
7
+ data.tar.gz: c6f3c5eff72842a91fc091e495d54f865f6b615b0240a1d86830bb9ab69dfa57128bac9a1dd3cf21082acbad1bcffa84ad21fd70559f53b99330a0e482548415
data/.rubocop.yml ADDED
@@ -0,0 +1,23 @@
1
+ AccessModifierIndentation:
2
+ Enabled: false
3
+
4
+ AndOr:
5
+ Enabled: false
6
+
7
+ DefWithoutParentheses:
8
+ Enabled: false
9
+
10
+ Documentation:
11
+ Enabled: false
12
+
13
+ EndAlignment:
14
+ Enabled: false
15
+
16
+ IndentationWidth:
17
+ Enabled: false
18
+
19
+ MethodLength:
20
+ Enabled: false
21
+
22
+ RegexpLiteral:
23
+ Enabled: false
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.0.0
data/Gemfile CHANGED
@@ -1,2 +1,2 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
  gemspec
data/Gemfile.lock CHANGED
@@ -1,27 +1,39 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lovely-rufus (0.0.2)
4
+ lovely-rufus (0.0.3)
5
5
 
6
6
  GEM
7
- remote: http://rubygems.org/
7
+ remote: https://rubygems.org/
8
8
  specs:
9
- ffi (1.1.5)
10
- listen (0.5.3)
11
- minitest (4.2.0)
12
- rake (0.9.2.2)
13
- rb-inotify (0.8.8)
14
- ffi (>= 0.5.0)
15
- rerun (0.7.1)
16
- listen
9
+ ast (1.1.0)
10
+ minitest (5.0.8)
11
+ parser (2.0.0)
12
+ ast (~> 1.1)
13
+ slop (~> 3.4, >= 3.4.5)
14
+ powerpack (0.0.9)
15
+ rainbow (1.1.4)
16
+ reek (1.3.4)
17
+ ruby2ruby (~> 2.0.2)
18
+ ruby_parser (~> 3.2)
19
+ sexp_processor
20
+ rubocop (0.15.0)
21
+ parser (~> 2.0)
22
+ powerpack (~> 0.0.6)
23
+ rainbow (>= 1.1.4)
24
+ ruby2ruby (2.0.6)
25
+ ruby_parser (~> 3.1)
26
+ sexp_processor (~> 4.0)
27
+ ruby_parser (3.2.2)
28
+ sexp_processor (~> 4.1)
29
+ sexp_processor (4.4.0)
30
+ slop (3.4.7)
17
31
 
18
32
  PLATFORMS
19
33
  ruby
20
34
 
21
35
  DEPENDENCIES
22
- bundler
23
36
  lovely-rufus!
24
- minitest (~> 4.0)
25
- rake
26
- rb-inotify
27
- rerun
37
+ minitest (~> 5.0)
38
+ reek (~> 1.3)
39
+ rubocop (~> 0.15.0)
data/README.md CHANGED
@@ -67,4 +67,4 @@ Lovely Rufus was created as a [Ruby Mendicant University](http://blog.majesticse
67
67
 
68
68
  ---
69
69
 
70
- © MMX-MMXII Piotr Szotkowski <chastell@chastell.net>, licensed under AGPL 3 (see LICENCE)
70
+ © MMX-MMXIII Piotr Szotkowski <chastell@chastell.net>, licensed under AGPL 3 (see LICENCE)
data/Rakefile CHANGED
@@ -1,17 +1,18 @@
1
1
  require 'rake/testtask'
2
+ require 'reek/rake/task'
3
+ require 'rubocop/rake_task'
4
+
5
+ task default: %i[spec rubocop]
2
6
 
3
7
  Rake::TestTask.new :spec do |task|
4
8
  task.test_files = FileList['spec/**/*_spec.rb']
5
9
  task.warning = true
6
10
  end
7
11
 
8
- task default: :spec
9
-
10
- desc 'Run Lovely Rufus console'
11
- task :console do
12
- require 'irb'
13
- require_relative 'lib/lovely-rufus'
14
- include LovelyRufus
15
- ARGV.clear
16
- IRB.start
12
+ Reek::Rake::Task.new do |task|
13
+ task.config_files = 'config/reek.yml'
14
+ task.fail_on_error = false
15
+ task.reek_opts = '--quiet'
17
16
  end
17
+
18
+ Rubocop::RakeTask.new
data/config/reek.yml ADDED
File without changes
data/lib/lovely-rufus.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'delegate'
1
2
  require 'optparse'
2
3
 
3
4
  require_relative 'lovely-rufus/executable'
@@ -1,17 +1,25 @@
1
1
  module LovelyRufus class Executable
2
2
  def initialize args = ARGV
3
- @width = 72
4
- OptionParser.new do |opts|
5
- opts.on '-w', '--width WIDTH', Integer, 'Wrapping width' do |width|
6
- @width = width
7
- end
8
- end.parse! args
3
+ @settings = settings_from args
9
4
  end
10
5
 
11
6
  def run input = $stdin
12
- puts Wrapper.new(input.read).wrapped width
7
+ puts Wrapper.new(input.read).wrapped settings.width
13
8
  end
14
9
 
15
- attr_reader :width
16
- private :width
10
+ attr_reader :settings
11
+ private :settings
12
+
13
+ private
14
+
15
+ def settings_from args
16
+ Struct.new(:width).new.tap do |settings|
17
+ settings.width = 72
18
+ OptionParser.new do |opts|
19
+ opts.on '-w', '--width WIDTH', Integer, 'Wrapping width' do |width|
20
+ settings.width = width
21
+ end
22
+ end.parse! args
23
+ end
24
+ end
17
25
  end end
@@ -1,63 +1,93 @@
1
- # encoding: UTF-8
2
-
3
1
  module LovelyRufus class Wrapper
4
-
5
2
  NBSP = ' '
6
3
 
7
4
  def initialize text
8
- @paras = text.split(/\n[\/#> ]*\n/).map(&:strip)
5
+ @paras = text.split(%r{\n[/#> ]*\n}).map { |para| Para.new para.strip }
9
6
  end
10
7
 
11
8
  def wrapped max_width = 72
12
9
  return '' if paras.all?(&:empty?)
13
10
 
14
11
  paras.map do |para|
15
- best = wrap_para_to_width para, max_width
12
+ para.wrap_recursively max_width
13
+ end.join "\n\n"
14
+ end
15
+
16
+ attr_reader :paras
17
+ private :paras
18
+
19
+ private
20
+
21
+ class Para
22
+ def initialize text
23
+ @text = text
24
+ end
25
+
26
+ def empty?
27
+ text.empty?
28
+ end
29
+
30
+ def wrap_recursively max_width
31
+ best = wrap_to_width max_width
16
32
  (max_width - 1).downto 1 do |width|
17
- shorter = wrap_para_to_width para, width
33
+ shorter = wrap_to_width width
18
34
  break if shorter.lines.count > best.lines.count
19
35
  break if shorter.lines.map(&:size).max > best.lines.map(&:size).max
20
36
  best = shorter
21
37
  end
22
38
  best
23
- end.join "\n\n"
24
- end
39
+ end
25
40
 
26
- attr_reader :paras
27
- private :paras
41
+ def wrap_to_width width
42
+ quotes = text[/^([\/#> ]*)/]
43
+ leader = quotes.empty? ? '' : quotes.tr(' ', '') + ' '
44
+ width -= leader.size if width > leader.size
45
+ text.lines
46
+ .map { |line| line[quotes.size..-1] }.join # drop quotes
47
+ .tr("\n", ' ') # unwrap para
48
+ .gsub(/ ([^ ]) /, " \\1#{NBSP}") # glue 1-letter words
49
+ .gsub(/(.{1,#{width}})( |$\n?)/, "\\1\n") # wrap to width
50
+ .tap { |par| remove_hangouts par, width } # handle hangouts
51
+ .lines.map { |line| line.insert 0, leader }.join # re-insert leader
52
+ .tr(NBSP, ' ') # drop glue spaces
53
+ .chomp # final touch
54
+ end
28
55
 
29
- private
56
+ attr_reader :text
57
+ private :text
30
58
 
31
- def remove_hangouts para, width
32
- lines = para.split "\n"
59
+ private
33
60
 
34
- hangout_line = lines.each.with_index do |line, i|
35
- next unless space = line.rindex(/[ #{NBSP}]/) and i < lines.size - 1
36
- break i if i > 0 and space + 1 >= lines[i - 1].size
37
- break i if i < lines.size - 2 and space + 1 >= lines[i + 1].size
38
- break i if lines.size == 2 and space + 1 >= lines[i + 1].size
61
+ def find_hangout_line lines
62
+ lines.find.with_index do |line, i|
63
+ i < lines.size - 1 and
64
+ space = hangout_last_space(line) and
65
+ (hangout_to_previous_line i, lines, space or
66
+ hangout_to_next_line i, lines, space)
67
+ end
39
68
  end
40
69
 
41
- if hangout_line.is_a? Integer
42
- lines[hangout_line] << NBSP
43
- fixed = lines.join(' ').gsub "#{NBSP} ", NBSP
44
- para.replace wrap_para_to_width fixed, width
70
+ def hangout_last_space line
71
+ line.rindex(/[ #{NBSP}]/)
45
72
  end
46
- end
47
73
 
48
- def wrap_para_to_width para, width
49
- quotes = para[/^([\/#> ]*)/]
50
- leader = quotes.empty? ? '' : quotes.tr(' ', '') + ' '
51
- width -= leader.size if width > leader.size
52
- para
53
- .lines.map { |line| line[quotes.size..-1] }.join # drop quotes
54
- .tr("\n", ' ') # unwrap para
55
- .gsub(/ ([^ ]) /, " \\1#{NBSP}") # glue 1-letter words
56
- .gsub(/(.{1,#{width}})( |$\n?)/, "\\1\n") # wrap to width
57
- .tap { |par| remove_hangouts par, width } # handle hangouts
58
- .lines.map { |line| line.insert 0, leader }.join # re-insert leader
59
- .tr(NBSP, ' ') # drop glue spaces
60
- .chomp # final touch
61
- end
74
+ def hangout_to_next_line i, lines, space
75
+ (i < lines.size - 2 or lines.size == 2) and
76
+ space + 1 >= lines[i + 1].size
77
+ end
78
+
79
+ def hangout_to_previous_line i, lines, space
80
+ i > 0 and space + 1 >= lines[i - 1].size
81
+ end
62
82
 
83
+ def remove_hangouts para, width
84
+ lines = para.split "\n"
85
+ hangout_line = find_hangout_line lines
86
+ if hangout_line
87
+ hangout_line << NBSP
88
+ fixed = self.class.new lines.join(' ').gsub "#{NBSP} ", NBSP
89
+ para.replace fixed.wrap_to_width width
90
+ end
91
+ end
92
+ end
63
93
  end end
data/lovely-rufus.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = 'lovely-rufus'
3
- gem.version = '0.0.3'
3
+ gem.version = '0.0.4'
4
4
  gem.summary = 'lovely-rufus: text wrapper'
5
5
  gem.homepage = 'http://github.com/chastell/lovely-rufus'
6
6
  gem.author = 'Piotr Szotkowski'
@@ -10,9 +10,5 @@ Gem::Specification.new do |gem|
10
10
  gem.executables = gem.files.grep(%r{^bin/}).map { |path| File.basename path }
11
11
  gem.test_files = gem.files.grep %r{^spec/.*\.rb$}
12
12
 
13
- gem.add_development_dependency 'bundler'
14
- gem.add_development_dependency 'minitest', '~> 4.0'
15
- gem.add_development_dependency 'rake'
16
- gem.add_development_dependency 'rb-inotify'
17
- gem.add_development_dependency 'rerun'
13
+ gem.add_dependency 'lovely_rufus'
18
14
  end
@@ -1,31 +1,25 @@
1
- # encoding: UTF-8
2
-
3
1
  require_relative '../spec_helper'
4
2
 
5
3
  module LovelyRufus describe Executable do
4
+ describe '#run' do
5
+ it 'outputs passed text' do
6
+ text = StringIO.new 'some text'
7
+ -> { Executable.new.run text }.must_output "some text\n"
8
+ end
6
9
 
7
- describe '.new' do
8
- it 'parses passed params to fetch desired width' do
9
- capture_io do
10
- Executable.new.run StringIO.new 'some text'
11
- end.first.must_equal "some text\n"
12
-
13
- capture_io do
14
- Executable.new(['-w', '4']).run StringIO.new 'some text'
15
- end.first.must_equal "some\ntext\n"
10
+ it 'wraps passed text to desired width' do
11
+ text = StringIO.new 'some text'
12
+ -> { Executable.new(%w[--width 4]).run text }.must_output "some\ntext\n"
13
+ end
16
14
 
17
- capture_io do
18
- Executable.new(['--width', '4']).run StringIO.new 'some text'
19
- end.first.must_equal "some\ntext\n"
15
+ it 'supports short arguments' do
16
+ text = StringIO.new 'some text'
17
+ -> { Executable.new(%w[-w4]).run text }.must_output "some\ntext\n"
20
18
  end
21
- end
22
19
 
23
- describe '#run' do
24
20
  it 'outputs properly wrapped input' do
25
- capture_io do
26
- Executable.new(['-w', '4']).run StringIO.new 'some more text'
27
- end.first.must_equal "some\nmore\ntext\n"
21
+ text = StringIO.new 'some more text'
22
+ -> { Executable.new(%w[-w4]).run text }.must_output "some\nmore\ntext\n"
28
23
  end
29
24
  end
30
-
31
25
  end end
@@ -1,17 +1,18 @@
1
- # encoding: UTF-8
2
-
3
1
  require_relative '../spec_helper'
4
2
 
5
3
  module LovelyRufus describe Wrapper do
6
4
  describe '#wrapped' do
7
5
  it 'returns properly wrapped input' do
8
6
  YAML.load_file('spec/fixtures/wrapper.yml').each do |wrapping|
9
- Wrapper.new(wrapping['input']).wrapped(wrapping['width'] || 72).must_equal wrapping['output']
7
+ width = wrapping.fetch('width') { 72 }
8
+ wrapped = Wrapper.new(wrapping['input']).wrapped width
9
+ wrapped.must_equal wrapping['output']
10
10
  end
11
11
  end
12
12
 
13
13
  it 'silently strips trailing newlines' do
14
- Wrapper.new("a problematic example\n").wrapped(13).must_equal "a problematic\nexample"
14
+ wrapped = Wrapper.new("a problematic example\n").wrapped 13
15
+ wrapped.must_equal "a problematic\nexample"
15
16
  end
16
17
 
17
18
  it 'doesn’t breeak on email-quoted single words' do
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'bundler/setup'
2
2
  require 'minitest/autorun'
3
-
3
+ require 'minitest/pride'
4
4
  require 'yaml'
5
-
6
- require_relative '../lib/lovely-rufus'
5
+ require 'lovely-rufus'
metadata CHANGED
@@ -1,94 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lovely-rufus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
5
- prerelease:
4
+ version: 0.0.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Piotr Szotkowski
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-11-12 00:00:00.000000000 Z
11
+ date: 2014-02-17 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: bundler
14
+ name: lovely_rufus
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
- type: :development
20
+ type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: minitest
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
36
- - !ruby/object:Gem::Version
37
- version: '4.0'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: '4.0'
46
- - !ruby/object:Gem::Dependency
47
- name: rake
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: rb-inotify
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: rerun
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
24
+ - - '>='
92
25
  - !ruby/object:Gem::Version
93
26
  version: '0'
94
27
  description:
@@ -98,13 +31,15 @@ executables:
98
31
  extensions: []
99
32
  extra_rdoc_files: []
100
33
  files:
101
- - .rvmrc
34
+ - .rubocop.yml
35
+ - .ruby-version
102
36
  - Gemfile
103
37
  - Gemfile.lock
104
38
  - LICENCE
105
39
  - README.md
106
40
  - Rakefile
107
41
  - bin/lovely-rufus
42
+ - config/reek.yml
108
43
  - lib/lovely-rufus.rb
109
44
  - lib/lovely-rufus/executable.rb
110
45
  - lib/lovely-rufus/wrapper.rb
@@ -115,28 +50,27 @@ files:
115
50
  - spec/spec_helper.rb
116
51
  homepage: http://github.com/chastell/lovely-rufus
117
52
  licenses: []
53
+ metadata: {}
118
54
  post_install_message:
119
55
  rdoc_options: []
120
56
  require_paths:
121
57
  - lib
122
58
  required_ruby_version: !ruby/object:Gem::Requirement
123
- none: false
124
59
  requirements:
125
- - - ! '>='
60
+ - - '>='
126
61
  - !ruby/object:Gem::Version
127
62
  version: '0'
128
63
  required_rubygems_version: !ruby/object:Gem::Requirement
129
- none: false
130
64
  requirements:
131
- - - ! '>='
65
+ - - '>='
132
66
  - !ruby/object:Gem::Version
133
67
  version: '0'
134
68
  requirements: []
135
69
  rubyforge_project:
136
- rubygems_version: 1.8.24
70
+ rubygems_version: 2.0.14
137
71
  signing_key:
138
- specification_version: 3
139
- summary: ! 'lovely-rufus: text wrapper'
72
+ specification_version: 4
73
+ summary: 'lovely-rufus: text wrapper'
140
74
  test_files:
141
75
  - spec/lovely-rufus/executable_spec.rb
142
76
  - spec/lovely-rufus/wrapper_spec.rb
data/.rvmrc DELETED
@@ -1,2 +0,0 @@
1
- rvm gemset use lovely-rufus
2
- bundle