nrser 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4421226e39e63c2cca9d4c141a63e794db05427f
4
+ data.tar.gz: d743e1a89bab47750aece9d6b56fd00e85e151f6
5
+ SHA512:
6
+ metadata.gz: d785674fa973059b39fd67bf9ef2ff8052b89b2c70e74b016b1a8fe659693d2690b20076713a0d9da80c5a520753fce5ae896943d081f5f961e7d374dc5190f1
7
+ data.tar.gz: ec7b5f087c9ccb8d8da45dfe55cfd592edbed12f7bb9c32685595e52c4a64db45df01404c4e7cd5ccb539b51a64968952e482f5fb2091a1e1135f3a01efbbf38
@@ -0,0 +1,23 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
23
+ tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in nrser.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 nrser
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,35 @@
1
+ # NRSER Ruby lib
2
+
3
+ basic ruby utils i use in a lot of stuff.
4
+
5
+ these tools are hastily written or copied from other sources.
6
+
7
+ they are not fast.
8
+
9
+ they are not optimized.
10
+
11
+ they are largely untested.
12
+
13
+ proceed with caution.
14
+
15
+ ## Installation
16
+
17
+ Add this line to your application's Gemfile:
18
+
19
+ gem 'nrser'
20
+
21
+ And then execute:
22
+
23
+ $ bundle
24
+
25
+ Or install it yourself as:
26
+
27
+ $ gem install nrser
28
+
29
+ ## Contributing
30
+
31
+ 1. Fork it ( https://github.com/nrser/nrser-ruby/fork )
32
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
33
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
34
+ 4. Push to the branch (`git push origin my-new-feature`)
35
+ 5. Create a new Pull Request
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,114 @@
1
+ require "nrser/version"
2
+
3
+ module NRSER
4
+ module KernelRefinements
5
+ def tpl *args
6
+ NRSER::template *args
7
+ end
8
+ end
9
+
10
+ refine Object do
11
+ include KernelRefinements
12
+
13
+ def pipe
14
+ yield self
15
+ end
16
+
17
+ end
18
+
19
+ refine String do
20
+ def unblock
21
+ NRSER.unblock self
22
+ end
23
+
24
+ def dedent
25
+ NRSER.dedent self
26
+ end
27
+
28
+ def indent
29
+ NRSER.indent self
30
+ end
31
+ end # refine String
32
+
33
+ refine Exception do
34
+ def format
35
+ NRSER.format_exception self
36
+ end
37
+ end
38
+
39
+ using NRSER
40
+
41
+ def self.unblock str
42
+ parts = str.split(/\n\s+/)
43
+ if m = parts[0].match(/^\s+/)
44
+ parts[0] = parts[0][m.end(0)..-1]
45
+ end
46
+ if m = parts[-1].match(/\s+$/)
47
+ parts[-1] = parts[-1][0..m.begin(0)]
48
+ end
49
+ parts.join ' '
50
+ end # unblock
51
+
52
+ def self.common_prefix strings
53
+ raise ArgumentError.new("argument can't be empty") if strings.empty?
54
+ sorted = strings.sort.reject {|line| line == "\n"}
55
+ i = 0
56
+ while sorted.first[i] == sorted.last[i] &&
57
+ i < [sorted.first.length, sorted.last.length].min
58
+ i = i + 1
59
+ end
60
+ strings.first[0...i]
61
+ end # common_prefix
62
+
63
+ def self.dedent str
64
+ return str if str.empty?
65
+ lines = str.lines
66
+ indent = common_prefix(lines).match(/^\s*/)[0]
67
+ return str if indent.empty?
68
+ lines.map {|line|
69
+ line = line[indent.length..line.length] if line.start_with? indent
70
+ }.join
71
+ end # dedent
72
+
73
+ def self.filter_repeated_blank_lines str
74
+ out = []
75
+ lines = str.lines
76
+ skipping = false
77
+ str.lines.each do |line|
78
+ if line =~ /^\s*$/
79
+ unless skipping
80
+ out << line
81
+ end
82
+ skipping = true
83
+ else
84
+ skipping = false
85
+ out << line
86
+ end
87
+ end
88
+ out.join
89
+ end # filter_repeated_blank_lines
90
+
91
+ def self.template bnd, str
92
+ require 'erb'
93
+ filter_repeated_blank_lines ERB.new(dedent(str)).result(bnd)
94
+ end # template
95
+
96
+ def self.format_exception e
97
+ msg = "#{ e.message } (#{ e.class }):\n #{ e.backtrace.join("\n ") }"
98
+ File.open('./tmp/out.txt', 'w') do |f|
99
+ f.puts msg
100
+ end
101
+ msg
102
+ end
103
+
104
+ # adapted from acrive_support 4.2.0
105
+ #
106
+ # <https://github.com/rails/rails/blob/7847a19f476fb9bee287681586d872ea43785e53/activesupport/lib/active_support/core_ext/string/indent.rb>
107
+ #
108
+ def self.indent str, amount = 2, indent_string=nil, indent_empty_lines=false
109
+ indent_string = indent_string || str[/^[ \t]/] || ' '
110
+ re = indent_empty_lines ? /^/ : /^(?!$)/
111
+ str.gsub(re, indent_string * amount)
112
+ end
113
+
114
+ end
@@ -0,0 +1,3 @@
1
+ module NRSER
2
+ VERSION = "0.0.3"
3
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'nrser/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "nrser"
8
+ spec.version = NRSER::VERSION
9
+ spec.authors = ["nrser"]
10
+ spec.email = ["neil@neilsouza.com"]
11
+ spec.summary = %q{basic ruby utils i use in a lot of stuff.}
12
+ spec.homepage = "https://github.com/nrser/nrser-ruby"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.6"
21
+ spec.add_development_dependency "rake"
22
+ spec.add_development_dependency "rspec"
23
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe "NRSER.common_prefix" do
4
+ it "raises an error if argument is empty" do
5
+ expect{ NRSER.common_prefix [] }.to raise_error ArgumentError
6
+ end
7
+
8
+ it "works on a single string" do
9
+ expect( NRSER.common_prefix [''] ).to eq ''
10
+ expect( NRSER.common_prefix ['aaa'] ).to eq 'aaa'
11
+ end
12
+
13
+ it "works on a simple example" do
14
+ expect( NRSER.common_prefix ['aaa', 'acb', 'abc'] ).to eq 'a'
15
+ end
16
+
17
+ it "works when the strings are all the same" do
18
+ expect( NRSER.common_prefix ['aaa', 'aaa', 'aaa'] ).to eq 'aaa'
19
+ end
20
+
21
+ it "finds indents" do
22
+ expect(
23
+ NRSER.common_prefix <<-BLOCK.lines
24
+ def f x
25
+ x * x
26
+ end
27
+ BLOCK
28
+ ).to eq " "
29
+ end
30
+ end # common_prefix
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe "NRSER.dedent" do
4
+ it "removes indents" do
5
+ expect(
6
+ NRSER.dedent <<-BLOCK
7
+ def f x
8
+ x * x
9
+ end
10
+ BLOCK
11
+ ).to eq <<-BLOCK
12
+ def f x
13
+ x * x
14
+ end
15
+ BLOCK
16
+ end
17
+
18
+ it "ignores things it that aren't indented" do
19
+ expect(
20
+ NRSER.dedent <<-BLOCK
21
+ def f x
22
+ x * x
23
+ end
24
+ BLOCK
25
+ ).to eq <<-BLOCK
26
+ def f x
27
+ x * x
28
+ end
29
+ BLOCK
30
+ end
31
+
32
+ it "handles edge cases" do
33
+ expect( NRSER.dedent '' ).to eq ''
34
+ expect( NRSER.dedent 'blah' ).to eq 'blah'
35
+ end
36
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ using NRSER
4
+
5
+ describe "NRSER.format_exception" do
6
+ let(:error) {
7
+ begin
8
+ raise StandardError.new "blah blah blah"
9
+ rescue Exception => e
10
+ e
11
+ end
12
+ }
13
+
14
+ it "formats a raised error" do
15
+ str = NRSER.format_exception error
16
+ expect( str ).to start_with "blah blah blah (StandardError):"
17
+ expect( str.lines.drop(1) ).to all( start_with ' ' )
18
+ end
19
+
20
+ it "refines Exception" do
21
+ str = error.format
22
+ expect( str ).to start_with "blah blah blah (StandardError):"
23
+ expect( str.lines.drop(1) ).to all( start_with ' ' )
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ using NRSER
4
+
5
+ describe "NRSER.indent" do
6
+ it "indents a block" do
7
+ expect(
8
+ NRSER.indent <<-BLOCK
9
+ def f x
10
+ x * x
11
+ end
12
+ BLOCK
13
+ ).to eq <<-BLOCK
14
+ def f x
15
+ x * x
16
+ end
17
+ BLOCK
18
+ end
19
+
20
+ it "indents a single line string" do
21
+ expect( NRSER.indent "blah" ).to eq " blah"
22
+ end
23
+
24
+ it "refines String to add indent" do
25
+ expect(
26
+ <<-BLOCK.indent
27
+ def f x
28
+ x * x
29
+ end
30
+ BLOCK
31
+ ).to eq <<-BLOCK
32
+ def f x
33
+ x * x
34
+ end
35
+ BLOCK
36
+ end
37
+ end # indent
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ using NRSER
4
+
5
+ describe 'NRSER.template' do
6
+ it "refines tpl in object like it was defined in Kernel" do
7
+ expect(
8
+ tpl binding, <<-BLOCK
9
+ hey
10
+ BLOCK
11
+ ).to eq <<-BLOCK.dedent
12
+ hey
13
+ BLOCK
14
+ end
15
+
16
+ it "processes a simple template" do
17
+ x = 1
18
+
19
+ expect(
20
+ tpl binding, <<-BLOCK
21
+ x is <%= x %>
22
+ BLOCK
23
+ ).to eq <<-BLOCK.dedent
24
+ x is 1
25
+ BLOCK
26
+ end
27
+
28
+ it "handles edge cases" do
29
+ expect( tpl binding, '' ).to eq ''
30
+ expect( tpl binding, 'blah' ).to eq 'blah'
31
+ end
32
+ end # template
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ using NRSER
4
+
5
+ describe NRSER do
6
+ it 'has a version number' do
7
+ expect(NRSER::VERSION).not_to be nil
8
+ end
9
+ end
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'nrser'
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nrser
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - nrser
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description:
56
+ email:
57
+ - neil@neilsouza.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - ".travis.yml"
65
+ - Gemfile
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - lib/nrser.rb
70
+ - lib/nrser/version.rb
71
+ - nrser.gemspec
72
+ - spec/nrser/common_prefix_spec.rb
73
+ - spec/nrser/dedent_spec.rb
74
+ - spec/nrser/format_exception_spec.rb
75
+ - spec/nrser/indent_spec.rb
76
+ - spec/nrser/template_spec.rb
77
+ - spec/nrser_spec.rb
78
+ - spec/spec_helper.rb
79
+ - tmp/.gitkeep
80
+ homepage: https://github.com/nrser/nrser-ruby
81
+ licenses:
82
+ - MIT
83
+ metadata: {}
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubyforge_project:
100
+ rubygems_version: 2.2.2
101
+ signing_key:
102
+ specification_version: 4
103
+ summary: basic ruby utils i use in a lot of stuff.
104
+ test_files:
105
+ - spec/nrser/common_prefix_spec.rb
106
+ - spec/nrser/dedent_spec.rb
107
+ - spec/nrser/format_exception_spec.rb
108
+ - spec/nrser/indent_spec.rb
109
+ - spec/nrser/template_spec.rb
110
+ - spec/nrser_spec.rb
111
+ - spec/spec_helper.rb