sugar_refinery 1.0.0
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +157 -0
- data/MIT-LICENSE.txt +20 -0
- data/README.md +42 -0
- data/Rakefile +49 -0
- data/doc/create_documentation.rb +471 -0
- data/doc/index.html +1687 -0
- data/lib/sugar_refinery.rb +1 -0
- data/lib/sugar_refinery/alias_for.rb +15 -0
- data/lib/sugar_refinery/all.rb +5 -0
- data/lib/sugar_refinery/array_op.rb +15 -0
- data/lib/sugar_refinery/array_stats.rb +31 -0
- data/lib/sugar_refinery/blank.rb +47 -0
- data/lib/sugar_refinery/camel_snake.rb +15 -0
- data/lib/sugar_refinery/chain_map.rb +11 -0
- data/lib/sugar_refinery/constantize.rb +29 -0
- data/lib/sugar_refinery/dir_utils.rb +20 -0
- data/lib/sugar_refinery/file_force_delete.rb +12 -0
- data/lib/sugar_refinery/file_gsub.rb +23 -0
- data/lib/sugar_refinery/hash_op.rb +28 -0
- data/lib/sugar_refinery/hash_zip.rb +11 -0
- data/lib/sugar_refinery/inner_map.rb +15 -0
- data/lib/sugar_refinery/lchomp.rb +15 -0
- data/lib/sugar_refinery/marshal_copy.rb +11 -0
- data/lib/sugar_refinery/mash.rb +22 -0
- data/lib/sugar_refinery/ords.rb +17 -0
- data/lib/sugar_refinery/regexp_union.rb +17 -0
- data/lib/sugar_refinery/same.rb +11 -0
- data/lib/sugar_refinery/string_op.rb +20 -0
- data/lib/sugar_refinery/version.rb +3 -0
- data/spec/alias_for_spec.rb +55 -0
- data/spec/array_op_spec.rb +17 -0
- data/spec/array_stats_spec.rb +82 -0
- data/spec/blank_spec.rb +22 -0
- data/spec/camel_snake_spec.rb +15 -0
- data/spec/chain_map_spec.rb +16 -0
- data/spec/constantize_spec.rb +33 -0
- data/spec/dir_utils_spec.rb +32 -0
- data/spec/file_force_delete_spec.rb +30 -0
- data/spec/file_gsub_spec.rb +26 -0
- data/spec/hash_op_spec.rb +28 -0
- data/spec/hash_zip_spec.rb +11 -0
- data/spec/inner_map_spec.rb +24 -0
- data/spec/lchomp_spec.rb +20 -0
- data/spec/marshal_copy_spec.rb +15 -0
- data/spec/mash_spec.rb +17 -0
- data/spec/ords_spec.rb +15 -0
- data/spec/regexp_union_spec.rb +19 -0
- data/spec/same_spec.rb +10 -0
- data/spec/spec_helper.rb +18 -0
- data/spec/string_op_spec.rb +22 -0
- data/sugar_refinery.gemspec +20 -0
- metadata +138 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 67c2c0f14a0f111f938ef418f1ea14328c3ad8a5
|
4
|
+
data.tar.gz: 711d19f2e8b7db76c28c8fe08fd14a52f4fe04c1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: de1a759dae8a9ae774fdacdcf6cd29aa1279f69ef123835e7ec6b2cccead07473efc6d29708d7510f2f970fa1d3d8f2952dd3f602e3f8089789c1a5ea443d53d
|
7
|
+
data.tar.gz: b51b321dcf0377ee6b408f6dc73671ec53d04308098555bbfe5f3cf299c07fd3b2db269d2908c834ff83217fa1a9510fd500b75c46697b2f61b4e8f2b1c56e55
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
# SUGAR REFINERY CHANGELOG
|
2
|
+
|
3
|
+
## 2016-01-02 | Sugar Refinery 1.0
|
4
|
+
|
5
|
+
* turn zucker gem into sugar_refinery
|
6
|
+
* move iterate into its own gem
|
7
|
+
* move instance_variable_from into its own gem
|
8
|
+
* move egonil into its own gem
|
9
|
+
* remove 'Zucker#require' and 'Zucker#require_all'
|
10
|
+
* remove 'refine' gem dependency
|
11
|
+
* remove unary_conversion in favor of https://bugs.ruby-lang.org/issues/11782
|
12
|
+
* remove square_brackets_for
|
13
|
+
* remove tap
|
14
|
+
* rename string_extras to lchomp
|
15
|
+
* rename hash_extras to hash_zip
|
16
|
+
* rename float_extras to same
|
17
|
+
* rename dir_extras to dir_utils
|
18
|
+
* split file_extras into file_force_delete and file_gsub (also remove File.filename)
|
19
|
+
|
20
|
+
|
21
|
+
## OLD ZUCKER CHANGELOG
|
22
|
+
|
23
|
+
2015-04-01 | Zucker 100.1.0
|
24
|
+
* drop Ruby 1.9 support
|
25
|
+
* add float_extras for Float#same?
|
26
|
+
* add chain_map
|
27
|
+
* add inner_map
|
28
|
+
* add array_stats
|
29
|
+
|
30
|
+
|
31
|
+
2014-04-01 | Zucker 100.0.0
|
32
|
+
* drop Ruby 1.8 support
|
33
|
+
* rewrite zucker to use refinements!
|
34
|
+
* use usual semantic versioning
|
35
|
+
* remove all "debug" cubes, use the "debugging" gem instead!
|
36
|
+
* remove "ruby_version" cube, use the "ruby_version" gem instead!
|
37
|
+
* remove "engine" cube, use the "ruby_engine" gem instead!
|
38
|
+
* remove "info" cube, use the "ruby_info" gem instead!
|
39
|
+
* remove "os" cube, use rdp's "os" gem instead!
|
40
|
+
* remove "*_to_proc" cubes, use the "procstar" gem instead!
|
41
|
+
* remove "sandbox" cube, since sandboxing is not recommended and removed from Ruby 2.1
|
42
|
+
* remove "kernel" and "not" cube completely
|
43
|
+
* tweaks to most other cubes
|
44
|
+
|
45
|
+
|
46
|
+
2013-04-30 | Zucker 13
|
47
|
+
* fix alias_for bug
|
48
|
+
* let RubyVersion#inspect and RubyEngine#inspect map to #to_s
|
49
|
+
* remove Array#sum
|
50
|
+
* repackage (gh#4)
|
51
|
+
|
52
|
+
|
53
|
+
2012-01-16 | Zucker 12
|
54
|
+
* fix a requiring bug
|
55
|
+
* rename zucker/version cube to zucker/ruby_version and Zucker::PACKAGES to Zucker::PACKS
|
56
|
+
* remove more_aliases! (keep it simple...)
|
57
|
+
* add case cube: String#to_camel and String#to_snake
|
58
|
+
|
59
|
+
|
60
|
+
2011-05-25 | Zucker 11
|
61
|
+
* add Zucker::constants to check if cube has been required (e.g. Zucker::AliasFor if 'zucker/alias_for' is loaded)
|
62
|
+
* rbx tweaks
|
63
|
+
* don't define Binding#vars on rbx (prevent endless recursion)
|
64
|
+
* sandbox-not-working warning
|
65
|
+
* add Kernel#ignore_sigquit!
|
66
|
+
* fix warnings
|
67
|
+
* doc tweaks
|
68
|
+
|
69
|
+
|
70
|
+
2011-04-29 | Zucker 10
|
71
|
+
* doc/spec tweaks
|
72
|
+
* make test.rubygems.org-testable
|
73
|
+
* fix zucker 9 permission issue
|
74
|
+
|
75
|
+
|
76
|
+
2011-01-22 | Zucker 9
|
77
|
+
* remove history versions (sorry, it caused too much gem/rdoc troubles)
|
78
|
+
* add file cube: File.delete! and File.gsub
|
79
|
+
* debug pack improvements
|
80
|
+
* binding: typos + return nil
|
81
|
+
* cc: support for ripl + return nil
|
82
|
+
* mm: also show eigenclass for modules + nicer displaying + return nil
|
83
|
+
* added Regexp#visualize
|
84
|
+
* remove optional sandbox param
|
85
|
+
* rename xxx2proc to xxx_to_proc
|
86
|
+
* change rakefile/rspec/gemspec structure
|
87
|
+
* more minor fixes and improvements
|
88
|
+
|
89
|
+
|
90
|
+
2010-10-06 | Zucker 8
|
91
|
+
* fix a little alias_for bug
|
92
|
+
* disable rdoc creation when installing (in favour of the custom docs)
|
93
|
+
* change Binding#inspect to Binding.variables (was too verbose and dangerous)
|
94
|
+
|
95
|
+
|
96
|
+
2010-10-03 | Zucker 7
|
97
|
+
* fix critical OS.windows? bug
|
98
|
+
|
99
|
+
|
100
|
+
2010-10-03 | Zucker 6
|
101
|
+
* no new cubes
|
102
|
+
* bugfix for OS.posix?
|
103
|
+
* small changes + bugfixes + doc improvements
|
104
|
+
* add two user methods to Info
|
105
|
+
* change egonil semantics ( using method_missing, see http://ruby.janlelis.de/26/catch_nil.rb )
|
106
|
+
* bugfix for vv
|
107
|
+
|
108
|
+
|
109
|
+
2010-09-04 | Zucker 5
|
110
|
+
* debug edition - add two debug helpers: oo (output line, method, file) and cc (output method callstack)
|
111
|
+
* rename cube D to dd add add more debug aliases (for mm and binding)
|
112
|
+
* fix __SPECIAL_VARS__ in info and kernel cube and some minor bugfixes
|
113
|
+
* Zucker.activate_more_aliases! option
|
114
|
+
* add Hash#&
|
115
|
+
* add aliases: File.filename (for basename), Dir.join and Dir.split (for File.join, split)
|
116
|
+
* add a flexible requiring mechansim in zucker.rb (no api changes)
|
117
|
+
* restructure packages
|
118
|
+
* add rake tasks for releasing
|
119
|
+
* improve RubyVersion constant (cleaner and more flexible)
|
120
|
+
|
121
|
+
|
122
|
+
2010-09-01 | Zucker 4
|
123
|
+
* fix Binding#inspect
|
124
|
+
* add RubyEngine constant
|
125
|
+
* add RubyVersion constant
|
126
|
+
* add OS constant
|
127
|
+
* add q debug method (like p but on one line)
|
128
|
+
* add String#-
|
129
|
+
|
130
|
+
|
131
|
+
2010-08-14 | Zucker 3
|
132
|
+
* add tap cube
|
133
|
+
* add Object#not
|
134
|
+
* add alias_for for an alternative alias syntax
|
135
|
+
* add String#constantize (improved AS version)
|
136
|
+
* improve Info module
|
137
|
+
* make Array#sum Rails compatibile
|
138
|
+
* improve docs
|
139
|
+
* change directory layout (no changes for requiring)
|
140
|
+
* more small changes
|
141
|
+
|
142
|
+
|
143
|
+
2010-08-08 | Zucker 2
|
144
|
+
* add info cube
|
145
|
+
* add chaining for array2proc
|
146
|
+
* fix Hash.zip
|
147
|
+
* fix instance_variables_from binding for 1.9
|
148
|
+
* more specs
|
149
|
+
|
150
|
+
|
151
|
+
2010-08-06 | Zucker 1
|
152
|
+
* initial release
|
153
|
+
|
154
|
+
|
155
|
+
2010-08-05 | Zucker 0
|
156
|
+
* pre-release for rug-b talk
|
157
|
+
|
data/MIT-LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010-2016 Jan Lelis
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# Ruby Sugar Refinery [](http://badge.fury.io/rb/sugar-refinery) [](https://travis-ci.org/janlelis/sugar-refinery)
|
2
|
+
|
3
|
+
The Ruby Sugar Refinery is a collection of tiny [refinements](http://ruby-doc.org/core-2.3.0/doc/syntax/refinements_rdoc.html) (declarative local core extensions) for Ruby.
|
4
|
+
|
5
|
+
## Setup & Usage
|
6
|
+
|
7
|
+
Add to Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'sugar_refinery', require: 'sugar_refinery/all'
|
11
|
+
```
|
12
|
+
|
13
|
+
Then add refinements to the current Ruby file or module:
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
using SugarRefinery::CamelSnake
|
17
|
+
using SugarRefinery::HashZip
|
18
|
+
|
19
|
+
"ClassName".to_snake # => "class_name"
|
20
|
+
Hash.zip [1,2,3], [4,5,6] # => {1=>4, 2=>5, 3=>6}
|
21
|
+
```
|
22
|
+
|
23
|
+
## Included Refinements
|
24
|
+
|
25
|
+
[See the documentation!](http://janlelis.github.io/sugar-refinery)
|
26
|
+
|
27
|
+
## Zucker Gems
|
28
|
+
|
29
|
+
Missing former functionality? It might have been extracted into a separate gem:
|
30
|
+
|
31
|
+
* [iterate](https://github.com/janlelis/iterate)
|
32
|
+
* [instance_variable_from](https://github.com/janlelis/instance_variable_from)
|
33
|
+
* [egonil](https://github.com/janlelis/egonil)
|
34
|
+
* [debugging](https://github.com/janlelis/debugging)
|
35
|
+
* [procstar](https://github.com/janlelis/procstar)
|
36
|
+
* [ruby_info](https://github.com/janlelis/ruby_info)
|
37
|
+
* [ruby_version](https://github.com/janlelis/ruby_version)
|
38
|
+
* [ruby_engine](https://github.com/janlelis/ruby_engine)
|
39
|
+
|
40
|
+
## J-_-L
|
41
|
+
|
42
|
+
Copyright (c) 2010-2016 [Jan Lelis](http://janlelis.com), released under the MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# # #
|
2
|
+
# Get gemspec info
|
3
|
+
|
4
|
+
gemspec_file = Dir['*.gemspec'].first
|
5
|
+
gemspec = eval File.read(gemspec_file), binding, gemspec_file
|
6
|
+
info = "#{gemspec.name} | #{gemspec.version} | " \
|
7
|
+
"#{gemspec.runtime_dependencies.size} dependencies | " \
|
8
|
+
"#{gemspec.files.size} files"
|
9
|
+
|
10
|
+
|
11
|
+
# # #
|
12
|
+
# Gem build and install task
|
13
|
+
|
14
|
+
desc info
|
15
|
+
task :gem do
|
16
|
+
puts info + "\n\n"
|
17
|
+
print " "; sh "gem build #{gemspec_file}"
|
18
|
+
FileUtils.mkdir_p 'pkg'
|
19
|
+
FileUtils.mv "#{gemspec.name}-#{gemspec.version}.gem", 'pkg'
|
20
|
+
puts; sh %{gem install --no-document pkg/#{gemspec.name}-#{gemspec.version}.gem}
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
# # #
|
25
|
+
# Start an IRB session with the gem loaded
|
26
|
+
|
27
|
+
desc "#{gemspec.name} | IRB"
|
28
|
+
task :irb do
|
29
|
+
sh "irb -I ./lib -r #{gemspec.name.gsub '-','/'}"
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
# # #
|
34
|
+
# Run Specs
|
35
|
+
|
36
|
+
desc "#{gemspec.name} | Spec"
|
37
|
+
task 'spec' do
|
38
|
+
sh %[rspec spec]
|
39
|
+
end
|
40
|
+
task default: :spec
|
41
|
+
|
42
|
+
|
43
|
+
# # #
|
44
|
+
# Documentation
|
45
|
+
|
46
|
+
desc "#{gemspec.name} | Documentation"
|
47
|
+
task 'doc' do
|
48
|
+
ruby 'doc/create_documentation.rb'
|
49
|
+
end
|
@@ -0,0 +1,471 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# creates the documentation for SugarRefinery
|
3
|
+
|
4
|
+
require 'date'
|
5
|
+
require 'yaml'
|
6
|
+
require 'coderay'
|
7
|
+
|
8
|
+
require_relative '../lib/sugar_refinery/camel_snake'
|
9
|
+
using SugarRefinery::CamelSnake
|
10
|
+
|
11
|
+
|
12
|
+
class SugarRefineryDoc
|
13
|
+
ORDER = %w|summary use methods info spec source|
|
14
|
+
DESCRIPTIONS = {
|
15
|
+
'summary' => 'Summary',
|
16
|
+
'use' => 'Activate',
|
17
|
+
'methods' => 'Usage',
|
18
|
+
'info' => 'Information',
|
19
|
+
'spec' => 'Specification',
|
20
|
+
'source' => 'Source',
|
21
|
+
}
|
22
|
+
|
23
|
+
|
24
|
+
class << self
|
25
|
+
def generate(path = File.dirname(__FILE__) + '/../')
|
26
|
+
@path = path
|
27
|
+
|
28
|
+
# get version / date
|
29
|
+
@version = SugarRefinery::VERSION
|
30
|
+
@date = Date.today.to_s
|
31
|
+
|
32
|
+
# include + format changelog
|
33
|
+
@changelog = replace_html_special_chars File.read File.join( @path, 'CHANGELOG.md' )
|
34
|
+
|
35
|
+
# collect description files and turn them into html
|
36
|
+
@cubes = Dir[ File.join(path, 'doc', 'desc', '*.yaml') ].inject({}) do |res, cube_file; a|
|
37
|
+
begin
|
38
|
+
a = YAML.load_file cube_file
|
39
|
+
rescue
|
40
|
+
warn "Could not load the yaml file for #{ cube_file }"
|
41
|
+
end
|
42
|
+
if a.instance_of? Hash
|
43
|
+
res.merge a
|
44
|
+
else
|
45
|
+
res
|
46
|
+
end
|
47
|
+
end.sort.map{ |name, hash| cube name, hash }.join
|
48
|
+
|
49
|
+
output_path = File.join(path, 'doc', 'index.html')
|
50
|
+
template = DATA.read
|
51
|
+
template.gsub! /\.\.([a-z]+)\.\./i do eval "@#$1" end # substitute vars
|
52
|
+
template.gsub! /⇧(.+?)⇧/, '<code>\1</code>'
|
53
|
+
template.gsub! /●(.+?)●/, '<strong>\1</strong>'
|
54
|
+
template.gsub! /→(.+?)→(.+?)→/, '<a href="\2">\1</a>'
|
55
|
+
File.open(output_path, 'w'){ |file| file.puts(template) }
|
56
|
+
|
57
|
+
puts "Created SugarRefinery documentation at #{File.expand_path(output_path)}"
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def cube(name, hash)
|
63
|
+
@cube_name = name
|
64
|
+
%{ <div class="cubes"><h3 title="require 'sugar_refinery/#{name}'" id="#{name}">#{name}</h3>
|
65
|
+
<table class="cube_table"
|
66
|
+
id="#{ name }_cube"
|
67
|
+
title="require 'sugar_refinery/#{name}'"> } +
|
68
|
+
|
69
|
+
ORDER.map{ |th|
|
70
|
+
if %w|spec use source|.include?(th) || td = hash[th]
|
71
|
+
"<tr><th>#{ DESCRIPTIONS[th] }</th>" +
|
72
|
+
" <td>#{ send th, td || name }</td></tr>"
|
73
|
+
end
|
74
|
+
}.join + '</table></div>'
|
75
|
+
end
|
76
|
+
|
77
|
+
def use(n)
|
78
|
+
"<div class=\"using source\" style=\"display:block\">#{ syntax_highlight "using SugarRefinery::#{n.to_camel}" }</div>"
|
79
|
+
end
|
80
|
+
|
81
|
+
def methods(m)
|
82
|
+
m.map{ |name, usage|
|
83
|
+
"<h5>#{replace_html_special_chars name}</h5>" +
|
84
|
+
"<div class=\"usage source\" style=\"display:block\">#{ syntax_highlight usage }</div>"
|
85
|
+
}.join
|
86
|
+
end
|
87
|
+
|
88
|
+
def info(i)
|
89
|
+
i.map{|e|convert_html_chars e}.join '<br/>'
|
90
|
+
end
|
91
|
+
|
92
|
+
def summary(s)
|
93
|
+
convert_html_chars s
|
94
|
+
end
|
95
|
+
|
96
|
+
def spec(_)
|
97
|
+
source_helper(:spec, File.join( @path, 'spec/' ), '_spec')
|
98
|
+
end
|
99
|
+
|
100
|
+
def source(_)
|
101
|
+
source_helper(:source, File.join( @path, 'lib/sugar_refinery') )
|
102
|
+
end
|
103
|
+
|
104
|
+
def source_helper(kind, file_prefix, suffix='')
|
105
|
+
%{ <span id="show_#{@cube_name}_#{kind}">(<a href="javascript:show('#{@cube_name}_#{kind}')">show</a>)</span>
|
106
|
+
<div class="source" id="#{@cube_name}_#{kind}">#{
|
107
|
+
get_source_file( File.join file_prefix, ( @cube_name + suffix + '.rb' ) )
|
108
|
+
}</div> }
|
109
|
+
end
|
110
|
+
|
111
|
+
def get_source_file(filename)
|
112
|
+
if File.file? filename
|
113
|
+
syntax_highlight( File.read(filename).strip )
|
114
|
+
else
|
115
|
+
'<em>FIXME: missing (please create a <a href="http://github.com/janlelis/sugar_refinery/issues">github issue</a>)</em>'
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def syntax_highlight(string)
|
120
|
+
CodeRay.scan(string, :ruby).div
|
121
|
+
end
|
122
|
+
|
123
|
+
def replace_html_special_chars(string)
|
124
|
+
string.gsub( /&/, '&' ).
|
125
|
+
gsub( /</, '<' ).
|
126
|
+
gsub( />/, '>' )
|
127
|
+
end
|
128
|
+
|
129
|
+
def convert_html_chars(string, protect_spaces = false)
|
130
|
+
string = replace_html_special_chars( string )
|
131
|
+
string = string.to_s.gsub( "\n", '<br/>' )
|
132
|
+
|
133
|
+
if protect_spaces
|
134
|
+
string.gsub(' ',' ')
|
135
|
+
else
|
136
|
+
string
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
SugarRefineryDoc.generate *ARGV
|
143
|
+
|
144
|
+
__END__
|
145
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
146
|
+
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
147
|
+
|
148
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
149
|
+
<head>
|
150
|
+
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
151
|
+
|
152
|
+
<title>Ruby Sugar Refinery</title>
|
153
|
+
<script type="text/javascript">
|
154
|
+
var show = function(snippet){
|
155
|
+
document.getElementById( snippet ).style.display = 'block'
|
156
|
+
if( document.getElementById( 'show_'+snippet ) ){
|
157
|
+
document.getElementById( 'show_'+snippet ).style.display = 'none'
|
158
|
+
}
|
159
|
+
}
|
160
|
+
</script>
|
161
|
+
<style type="text/css">
|
162
|
+
body{
|
163
|
+
background-color:#aaa;
|
164
|
+
color:#111;
|
165
|
+
font-family:sans-serif;
|
166
|
+
}
|
167
|
+
|
168
|
+
#world{
|
169
|
+
background:#fff;
|
170
|
+
}
|
171
|
+
|
172
|
+
h1, h2, h3, h4, h5, h6{
|
173
|
+
margin:0px;
|
174
|
+
padding:0px;
|
175
|
+
}
|
176
|
+
|
177
|
+
h1{
|
178
|
+
color:#222;
|
179
|
+
text-align:left;
|
180
|
+
padding:0.7em;
|
181
|
+
}
|
182
|
+
h2{
|
183
|
+
margin-left:1em;
|
184
|
+
margin-top:0.8em;
|
185
|
+
margin-bottom:0.5em;
|
186
|
+
}
|
187
|
+
|
188
|
+
th{
|
189
|
+
width:200px;
|
190
|
+
color:#444;
|
191
|
+
}
|
192
|
+
|
193
|
+
p{
|
194
|
+
margin:0px;
|
195
|
+
margin-bottom:0.5em;
|
196
|
+
}
|
197
|
+
|
198
|
+
p.text{
|
199
|
+
margin-left:1.5em;
|
200
|
+
margin-right:1em;
|
201
|
+
}
|
202
|
+
|
203
|
+
code{
|
204
|
+
}
|
205
|
+
|
206
|
+
.scode{
|
207
|
+
display:block;
|
208
|
+
margin:0.8em;
|
209
|
+
margin-left:0;
|
210
|
+
padding:0.5em;
|
211
|
+
border:1px solid black;
|
212
|
+
background:#eee;
|
213
|
+
}
|
214
|
+
|
215
|
+
.cubes{
|
216
|
+
margin:0px;
|
217
|
+
margin-left:1.65em;
|
218
|
+
margin-right:1em;
|
219
|
+
}
|
220
|
+
|
221
|
+
a{
|
222
|
+
color:#111;
|
223
|
+
}
|
224
|
+
|
225
|
+
table{
|
226
|
+
margin:0.8em;
|
227
|
+
margin-top:0.2em;
|
228
|
+
margin-left:0;
|
229
|
+
padding:0.2em;
|
230
|
+
border:1px solid #111;
|
231
|
+
background:#eee;
|
232
|
+
overflow:auto;
|
233
|
+
display:block;
|
234
|
+
}
|
235
|
+
|
236
|
+
ul{
|
237
|
+
margin:5px 0px !important;
|
238
|
+
padding:none;
|
239
|
+
}
|
240
|
+
|
241
|
+
th{
|
242
|
+
text-align:left;
|
243
|
+
vertical-align:top;
|
244
|
+
padding-right:3em;
|
245
|
+
}
|
246
|
+
|
247
|
+
td{
|
248
|
+
width:100%;
|
249
|
+
}
|
250
|
+
|
251
|
+
li{
|
252
|
+
list-style:none;
|
253
|
+
}
|
254
|
+
|
255
|
+
|
256
|
+
#foot{
|
257
|
+
text-align:left;
|
258
|
+
padding:0.3em;
|
259
|
+
font-size:70%
|
260
|
+
}
|
261
|
+
#foot, #foot a{
|
262
|
+
color:#444;
|
263
|
+
}
|
264
|
+
#smile{
|
265
|
+
font-size:150%;
|
266
|
+
float:right;
|
267
|
+
}
|
268
|
+
#smile a{
|
269
|
+
text-decoration:none;
|
270
|
+
}
|
271
|
+
|
272
|
+
.small{
|
273
|
+
font-size:70%;
|
274
|
+
}
|
275
|
+
|
276
|
+
code, pre{
|
277
|
+
font-face:mono;
|
278
|
+
margin:0px;
|
279
|
+
padding:0px;
|
280
|
+
}
|
281
|
+
|
282
|
+
.source{
|
283
|
+
display:none;
|
284
|
+
width:98%;
|
285
|
+
padding: 3px 5px;
|
286
|
+
overflow: auto;
|
287
|
+
font-size: 12px;
|
288
|
+
background-color: #f8f8f8;
|
289
|
+
border:1px solid #005;
|
290
|
+
border: 1px solid silver;
|
291
|
+
font-family: 'Courier New', 'Terminal', monospace;
|
292
|
+
color: #000;
|
293
|
+
}
|
294
|
+
|
295
|
+
# http://coderay.rubychan.de/
|
296
|
+
.source pre { margin: 0px; }
|
297
|
+
|
298
|
+
span.source { white-space: pre; border: 0px; padding: 2px; }
|
299
|
+
|
300
|
+
table.source { border-collapse: collapse; width: 100%; padding: 2px; }
|
301
|
+
table.source td { padding: 2px 4px; vertical-align: top; }
|
302
|
+
|
303
|
+
.source .line_numbers, .source .no {
|
304
|
+
background-color: #def;
|
305
|
+
color: gray;
|
306
|
+
text-align: right;
|
307
|
+
}
|
308
|
+
.source .line_numbers a:target, .source .no a:target { color: blue; }
|
309
|
+
.source .line_numbers .highlighted, .source .no .highlighted { color: red; }
|
310
|
+
.source .no { padding: 0px 4px; }
|
311
|
+
.source .code { width: 100%; }
|
312
|
+
.source .code pre { overflow: auto; }
|
313
|
+
|
314
|
+
.source .debug { color:white ! important; background:blue ! important; }
|
315
|
+
|
316
|
+
.source .an { color:#007 }
|
317
|
+
.source .at { color:#f08 }
|
318
|
+
.source .av { color:#700 }
|
319
|
+
.source .bi { color:#509; font-weight:bold }
|
320
|
+
.source .c { color:#888; }
|
321
|
+
.source .c .dl { color:#444; }
|
322
|
+
.source .c .ch { color:#444; }
|
323
|
+
|
324
|
+
.source .ch { color:#04D }
|
325
|
+
.source .ch .k { color:#04D }
|
326
|
+
.source .ch .dl { color:#039 }
|
327
|
+
|
328
|
+
.source .cl { color:#B06; font-weight:bold }
|
329
|
+
.source .cm { color:#A08; font-weight:bold }
|
330
|
+
.source .co { color:#036; font-weight:bold }
|
331
|
+
.source .cr { color:#0A0 }
|
332
|
+
.source .cv { color:#369 }
|
333
|
+
.source .de { color:#B0B; }
|
334
|
+
.source .df { color:#099; font-weight:bold }
|
335
|
+
.source .di { color:#088; font-weight:bold }
|
336
|
+
.source .dl { color:black }
|
337
|
+
.source .do { color:#970 }
|
338
|
+
.source .dt { color:#34b }
|
339
|
+
.source .ds { color:#D42; font-weight:bold }
|
340
|
+
.source .e { color:#666; font-weight:bold }
|
341
|
+
.source .en { color:#800; font-weight:bold }
|
342
|
+
.source .er { color:#F00; background-color:#FAA }
|
343
|
+
.source .ex { color:#C00; font-weight:bold }
|
344
|
+
.source .fl { color:#60E; font-weight:bold }
|
345
|
+
.source .fu { color:#06B; font-weight:bold }
|
346
|
+
.source .gv { color:#d70; font-weight:bold }
|
347
|
+
.source .hx { color:#058; font-weight:bold }
|
348
|
+
.source .i { color:#00D; font-weight:bold }
|
349
|
+
.source .ic { color:#B44; font-weight:bold }
|
350
|
+
|
351
|
+
.source .il { background-color: hsla(0,0%,0%,0.1); color: black }
|
352
|
+
.source .il .idl { font-weight: bold; color: #666 }
|
353
|
+
.source .idl { font-weight: bold; background-color: hsla(0,0%,0%,0.1); color: #666; }
|
354
|
+
|
355
|
+
.source .im { color:#f00; }
|
356
|
+
.source .in { color:#B2B; font-weight:bold }
|
357
|
+
.source .iv { color:#33B }
|
358
|
+
.source .la { color:#970; font-weight:bold }
|
359
|
+
.source .lv { color:#963 }
|
360
|
+
.source .ns { color:#707; font-weight:bold }
|
361
|
+
.source .oc { color:#40E; font-weight:bold }
|
362
|
+
.source .op { }
|
363
|
+
.source .pc { color:#058; font-weight:bold }
|
364
|
+
.source .pd { color:#369; font-weight:bold }
|
365
|
+
.source .pp { color:#579; }
|
366
|
+
.source .ps { color:#00C; font-weight:bold }
|
367
|
+
.source .pt { color:#074; font-weight:bold }
|
368
|
+
.source .r, .kw { color:#080; font-weight:bold }
|
369
|
+
|
370
|
+
.source .ke { color: #808; }
|
371
|
+
.source .ke .dl { color: #606; }
|
372
|
+
.source .ke .ch { color: #80f; }
|
373
|
+
.source .vl { color: #088; }
|
374
|
+
|
375
|
+
.source .rx { background-color:hsla(300,100%,50%,0.1); }
|
376
|
+
.source .rx .k { color:#808 }
|
377
|
+
.source .rx .dl { color:#404 }
|
378
|
+
.source .rx .mod { color:#C2C }
|
379
|
+
.source .rx .fu { color:#404; font-weight: bold }
|
380
|
+
|
381
|
+
.source .s { background-color:hsla(0,100%,50%,0.1); }
|
382
|
+
.source .s .k { color: #D20; }
|
383
|
+
.source .s .ch { color: #b0b; }
|
384
|
+
.source .s .dl { color: #710; }
|
385
|
+
|
386
|
+
.source .sh { background-color:hsla(120,100%,50%,0.1); }
|
387
|
+
.source .sh .k { color:#2B2 }
|
388
|
+
.source .sh .dl { color:#161 }
|
389
|
+
|
390
|
+
.source .sy { color:#A60 }
|
391
|
+
.source .sy .k { color:#A60 }
|
392
|
+
.source .sy .dl { color:#630 }
|
393
|
+
|
394
|
+
.source .ta { color:#070 }
|
395
|
+
.source .ts { color:#D70; font-weight:bold }
|
396
|
+
.source .ty { color:#339; font-weight:bold }
|
397
|
+
.source .v { color:#036 }
|
398
|
+
.source .xt { color:#444 }
|
399
|
+
|
400
|
+
.source .ins { background: hsla(120,100%,50%,0.2) }
|
401
|
+
.source .del { background: hsla(0,100%,50%,0.2) }
|
402
|
+
.source .chg { color: #aaf; background: #007; }
|
403
|
+
.source .head { color: #f8f; background: #505 }
|
404
|
+
.source .head .filename { color: white; }
|
405
|
+
|
406
|
+
.source .ins .eye { background-color: hsla(120,100%,50%,0.2) }
|
407
|
+
.source .del .eye { background-color: hsla(0,100%,50%,0.2) }
|
408
|
+
|
409
|
+
.source .ins .ins { color: #080; background:transparent; font-weight:bold }
|
410
|
+
.source .del .del { color: #800; background:transparent; font-weight:bold }
|
411
|
+
.source .chg .chg { color: #66f; }
|
412
|
+
.source .head .head { color: #f4f; }
|
413
|
+
|
414
|
+
.rubylogo{
|
415
|
+
margin-left:1.4em;
|
416
|
+
margin-top:0.6em;
|
417
|
+
margin-right:1em;
|
418
|
+
float:left;
|
419
|
+
}
|
420
|
+
|
421
|
+
</style>
|
422
|
+
</head>
|
423
|
+
<body>
|
424
|
+
<div id="world">
|
425
|
+
<img class="rubylogo" alt="ruby" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAADAVgAAwFYBgeEOVwAAAAd0SU1FB9oIHxY1C2ozXR0AABglSURBVGjevZt/sGVVdec/a+9z7q/3o1830N00DQiCQkoQiPgj0UiG8UcyMZNSC82PkdIEqYlaISkTMTPlVEw5IdHRqKEURQ2JSZwaiYijJimnxohMVH42Aml+2dD9ul//fP1+9Lv3nnP23mv+2Puce25DTOI4dtepe+5+7913vnut9V1rfdd+wo/wn/cea+3UWlBFIFfVDOdCsbi/Gj7+CMWePRQH9lEsLlItLjLav0h1fAX1ivqKUDq08njnkNKzYZXDsyb86qoH4KNzXd6xXjztGbIfBdAQAsYYjDFT66q6E7gQeJWIBDXmmKpfN1k2kl4P040X3S6m08FYIyH4TBEQASMYhGGOGWY4CSx+fC5fqZD971gv9gH8wVyHd6+XPxrAJwMVEVR1AFwBnFsdWrrKrSy/TIcbSJ6Tb9tBftpWqiNHML0uptfH9vqYfh/b7+OzHPUBSZ9Ziae0gaGBwggKKBBU7vvAfOfDTuW+69eLBwDes9DjvStj5P8n0JOs+VzgZzcevP9la//wjZ8qnnjslHLP41QH9irjITbLpXP6TmZf+BJmf+Z1VBtjhg/uojx4kGJxkWJxL+X+RdzKKq5yjIoNxtWYEaqViJQqWolIpUZLRBxQij7shPf8l9XyVoDfme/8cAGrKiKTj6zKcpDl+U8A7167+1vP3vvhG7aNdj/UC8cOEdbWMYoai1gBAyoByXoZg4svZ+t7P0i1NuTEvXdTHDigxYH94pYO6OqeJ2Rt9RhOHUHRUkQqIsgK0VKNVBDBo1RC4eGX3rda/PUP1aVDCA1Y59yCMea/icjri4MHOrve/PrOxv13GQkBVLGgYkUUEQXUgBURmyk+KBv3/gMrf34TZ/zxZwiuUn9iXdzanD716INSrq8hBhTUC+JV8CISAA8SgBDfa0AkQLcSvfWdm3s//oHj43vtD5t9VfVqEe4MZfXj373urZ1d1/yHfLy4KEpQVRUUFCRo3BxF0BjbKIKJW4Dbv5fejz2fhStfLTo/5//+HW8T9QVWaGLVIQQRcSo4BI+oA7wgHsSJqFfEi+DQs1/YtbeaHxZYVRVV/RVfjG9e+tIX7P+69Fzd88nPSLCoN+AD4lTwCj5AUHABnCpVCDjVeHnBI5SHlykP7ENBN192uf25R77nxmc/xy1JT4/anq7Yvo5sV0vJ1YtRFaM1eyuogqog3oBHg4NXOyPnmf/XmG3l1euG+5665bvX/0b2nauv0o29B4QBGgK1J0NQNEhzT4AQhBAieB8UBwTimpYlAgLopnPOyd9w9y551s/8rPdB1QFOjHibKVmueZbpILM6a63OGqMDER0oOqOqfUV6Cr3A67Mf1KrGmCZmVfWGpb/50rt2f+D3OXrHXWr7iMlQFFFAohvX2wQqkCJYAyAxjoPEQsSn79f684tC/GioVJX9yXf9rs7Pz1cP3/bXmTqHqEqyakx9oBako6IW1U5QuqqUqFTwmh8I8Elgb3r4j37v1x7/2Ecoji2rGTTfJhLARGwRtMQLUWI4py8QAzMoBFGCghiQwQzVwQOUe76HXzkufvW4hrU1Offcs/PuS3/S3/2/v26NCKKqJMLyquJVqUB8ChWvigdV1efJD5p6VNUCn777umve9NRf3YIvKzWx/sEomPQqGkHXxk0FUiQfjSQlAoggAtZAhtKdm+P8W24jHDzEePfDhPUV9RsbEkZDfFloKEtOHF8p77lnlwkhZIholcA6jWxf84JX1KE4Vcl+QLCDcnXlv+56zzvf9MQtn1KJBhdCDDhJ4Bofq0HLxL0DIKIEFZoaScBg8F7pXXQZlBVrX/8a7thhfFWJL0t8VaovSglVQSjLziXP2u4feHKpHPnQcdHC6kIQp9CAVxWn4FQ1+9fmWVXdsrG49927b/zAbzxy06c0GyBojEqR6FdCtHAKVZDorpLWjLb3I7o3RjEIPihiYOYFL6HYt5e1Rx4iVI5QlfhyjK+chKokOKcagqhqdt7CQJ5aHxVHC9eJzI96EAfqUakUjaD1X1Z41KWiqu4sVpbf//BHbnjjwx/+mOYzzVNLHadNjMgkbmmvt9Y0enL8YRW8KBYwcwvMXfpC1u+7h40Di6gqwXvUh5SvFVUk5h5VUHNGP+8I+H2jSpyq9aBOg7jozuJV1Sn/vEu3wJ4H3Hz3u97+8sf+7K80n514oqHlytLgivGa3Ldel5Qka1efbJBiVFBRBhdcROfMszn2wRsoh0MQE39VBNi6QFUlwlY5zUpmu5l7dFj6SoP1oF6D+IC6+Lv89wXsE9jg/eXATd+89hcvfeJzn1M7mKQb04pXOYkCJdSxmjag/taanGsQyRuCARHLGde+nY1HH2H1u/djBjNo8ISg6WdroIEQd0GjteP6nKi9sGfYNQplGbQTonujYLrKIfP9LGuNwXt/mRhzy72/9zuX7vni59VkiMaYbcDWQMPEkKjGvFoDMy0eS1mIVP82rwSlf+55bPv3V7G++yFcUCrncS7gfbzie49L750P4n1ac47KeckC5uLc5KcYirEmmgAGylL2/XJtSj2v23Pbf7/wHz/9cfXOSWTSFLPEfFl7rOgEtCSXDTYlyHrtJGvXrioCroJL/vTzjJf2c/jv/hYnBql8HbPEcI33QUPkAdXa0uleJd6qOV/oGqFaVDIVGCgH/7kYvmzlsd3X7frQHzBeWReToSZhNNpKPzKxWuPerTitmbmNNMjE4gqEEZzzq29i7sLncfSOr3PwjrvpntYH7xPASezWKVI1VWqEVnxTE5oC8mxD3lPYozD7TBZukZSUa6vvvO9DNwz2/59d2pmLrY2RCdOqtpP0SexMy6otZq7Zub4Q8CNYuOi5XPyhTxCqiqX/+UUkQ13lhRZBtUGH9D6kstwn71JSiZoewyvSBc4IkPEMFq6ViuCqK7/3lS9d9dAtt2AHiG9ZVGQStzJdHrcWJ2xM25ptwALqIT9lhov+8CNI3sGPRvrEV77MqkFsUU2nNCJQTeC8xth3rcun9ViEEJUPYEcMq2kLt6UZNxrffMfv/hYuuYYJk/ijRT4hMXUNTmryqvPspFSmbvZVpzfgOb95Pae+/MrIDCLYhS1hVGIlT3lZwLYJkYk123tcFzsBsHUWEOgqZPH9snkm66rqm7523a+fvfzUEcXE9g4lxkurn23yqUzIp36AINOlZc3agZh+1IB3cMbP/zznv+23MNYiqiJZpjv+zSuCAfKUx226MomXIdbiJm2wkYnXTRU/aWPmAuTxUVayky2rqrPrSwc+sevPPqt5L7pybSlb76BACKmjaYEWJhavc1FoxW9opS8jsPmy53PZRz6F7fVxRw6jzikaZNull6kHutEjtE4G7eIm1KEVJp5Vf60N2Cp0tPGM1axt2fTvnV/4pdebQARrWkysEmMkq6untG5a5ESLjKY4zaSfIcZt78yzuPxPPkN3bp7R/ffihydAVUQDHTfO5hf6ZbUx6gASJMZhpxUeUxniaV3O5KXTAgysZidZ98eOPvzQW/ffdXdOlGWaEjEwuXwrblIVQ617aGu3tbWWJCx8AbNn7eTFN3+WhXOfw+pXb8evrCT3SF3rxgZbL7jQ7PvOvZg8CXYgpcRYtM3UYpIt6tjVk+r3fnLnFI0r2UnWvebBj9+4rWsNwyrGrCSr2lT6hbZrpXxcDwLETBcUQaNb1xYPY5g/90x+4k//Bwtbd3Dk5htxy0cRY8F70JRPg5dBt2tCSM+u0coBGDOJU1sDkRaJyYRLTKyuaNntRNbqdV9Zrh6/au2+e8xMp6PBBxmVFT7En/QCNoA3/4QXSdwUaTUPJEbGgB/DwnPO4aWfvY3u8RUOffT9uLU1xJimSkoxISKilhBUEK/Y0AKhOilHaf3ONmvX93OhaV7qCPCZqhJC6ANXrD344I58PNLZTkdS5ca4rGq9DZdIwpsJKNvugloNRNMwGAgONj33PF72l19E9jzB0uc+C95FfNGkkyotilzS7ebS39RnOByRVqV+jtBy30omKakuQupY64cJbwBrBjRLKsZLgOuLR3bTrUqZ7fc1VioxIIqywqFNCiDlZCsthraTelpqrSc9zMLzLuTlt3wBfeIJDnzyY2hZTlm16YIaeRMyVRnMzOiJjZFqC+xUzMoEZM0dSCw8TvUTnklc8iQQskS6ZwHijy/TFyF0u1EOT0wjQFFVuKj8TlQLmWhWjXalEy3LWthxxb/l5Z++lbWv/R37/vj9qHcNpWtt3aYpmPSMBhH1XlQadVcadbdNovV7nViz7yepsVW+7wkJMCIS54mZpTM/j5zYiD1Vq7oQie5dBcWbaN2awBqxLoGuhjC3YwvP/eWredHvf5DFm25k74f+EMnyBDYkdw6NhdvWJWln4itNsSt1bLbB1iQVdEKSmsEmN+GZloX31AJAUKgAsvlNdE7fgTl6FD2uDVGIkeYDigQ6mOg6NjF0lnJHOYadL76EF/7n93L2q1/DI+/6TZb+/DNIlqEiLRFg0vXQek+SswVkxkgwRowLKm3L1uTkdVLl1SQ26FiqEOiUOl0Gw/dqlw4CGwCd7afT27GTIssiiuVjiAjGSJN2jAjDssS36kgboEqMeOk7/iMvevd7GGzdzt2veQUr3/4Wkllwbqqpmn6apz2coGjXGGONqAatgTWW9q0cXHdL3a5grcFnCqU2la0REUH2CoRMNFAdOlyYXo/uGTvpnnXWFNWa5WNJSxasCEYMIrBRJNCAL2Hz2dt57a23s+3SywH41it/itX7741pJ4SmLZy0Fy3c+vQyKYa3SGYMQYIGxdQWngKbXDTPhV7Hoqq4LHK2AawxYqOOPDbGkK1+5XYoK6NlQff5l9E759moczGGJAkzy8sYEUxySUl7PSwDttvhlTd9VC+5+i0CaHHsCPdfc7Usf+fbKnku+FBDmMKkJ9eC+jTDiwp0DBoUiZ1xtHAbrE95vtuxjaFUAhaDtYIVk4wkDiA7cefXoXRGh0O0qph/6RVoUTQHTqKqEEGrd9Drkc/Osnnrds76hddyybW/Tj4YoKDl8rJ++y1v5vCXv0p3U0/E+zaOiVL7DH6tz3DjgYFI7Q/SjtsmHQH9riGzSfZJG5JnFiMGKwYbOah8w3hINrrnHgihg/OUS0vMverfsfmnr2T46G6Gjz3GeH4T+ZYthNGIzQsLmB076V9wIduvfAW20421b1mKBq/Ld90n993+ZUxPmBlVdEwUlXKTuEqnXFj06cF8kvWVTESMoGWseVRlkpNj3Bp6uYn1fZwz4QVyY+P5EhGsMQjJwuWJdRGRzQDu8d06fOgBmfvpV7Bw2lZmL74Et7JCKEtMntHZcipmdgaKAr8xpDq+jJaVaFmqjsey/I1vMkfO0AfW8IoiXQMdIxigmzYAVWnUHp3S6J+GWAWZERjHTCa1ZZ1Cr2MYdC2hFrhrOVWUkAldbBtwzESVK40g20DwxsrhW25m5sUvTZSoZIMB5DlaFlRL+6EoCFWFliValWhZoWUp6ir23v5VOmZAYEyBFyHy1SgVLEOv2KheaN9ANwFoqR9tQVMA8aA9YhzXfbBX6OSGftdGRVOY2iFEGWXKpmDBxDhOPRCZK5wA2xDFWMPjf/O3nPqtO+mdchpaFmhZEqoyAawiyKqCor1e4k5scPDBXeTdPhk5XktUdMpNNZ3DqCAMfaTrGUF6guZ1ZSrTVhdB+oo60jhZEZsJ/a5F0Elf3gCPv2loAh0sagQjpkgtNVlZFUYgWlgDh0vHN9/4Zq64+aO44UYDmCJZtHJxI6oKqpLgKgiBxbsextJFiSOTTCxxnp8k2TQLCooaMCRlcU1hOYAVdLMQcsVYmRhNY3FjuqBjYpYbdC3WaEs7q/co8rggFOLIbLSwEbNfREbRpatSBNlqgMPDcWwWVtc4dscdDDYvEIpxBOocOId6DyGk13hvjOHQ7icxmUXxBFEEi8E18pBPFZHRRpePdbegNhKRHEq9a6aEzQLddMZFQE8xyH6g37VkRlLcSgJLI3yLCl4CFsEYGxla5IDAKLl0aRC2VUFZLUpMsJBZdn/+di557atwwxH4gGqIr8EnKcSjzqMhYARWjxxHLOlBQnIswSRCMTqtMrbkXGlJRQqIU+xS0gK6gswo0hfodyx5ZmI5Kqkcm9Zx02anD7ZCbjIE2S+iEXAIXhC2bpSBwgdmyAgG1g4fYeXxPQzmBtGNQ4hTgPRKCM2Jlf37l1NNXJeAmvJonKNqKx2Fk0CfpH9JSwKTIMiJAIWgz5Ku7MBwTB1BYkyohulatLWPkj4kNxYR9lNbWAQpvG49XoVYLzf6sbD44KNccNH5lKMRWls1ga0BWwOH9y1H67ZmCvX/MokE4aTJwMnaci3jtrsjrzBnDDttR3qSYVToeMNBW+KTcKOmrVdPmvUgsKGOU+wMii5esu/xAiAbOjVlUOvi5F0lxMY/oKwsH2d1cT/dPEM1TM1niYMrghHGpUtUrKiEBixpCDbV1UgLHE8X3po8C8yL5YysSy4Wm/LpZsmZocMTuo4zKXMnL6oJSyWS2JoW2jWZOMKJ5jTtoXEklngYNR4FTPM6Cldx6OgKZ5y6CZeGWu1JngBH10qCD1OurK0OqJZ2aZeEJ1nYt2rj2v03GcuZWZ9cDLaumMQgRpgTy8VmCw/4ZZyEiRLRmrCrBta0kF6WUah3DWBtKltJc9SUPSWehFkbjtg87jejmBptSOdIjx0bqU5mDy3Q092AZ9qy7UlE3eLVUs0Wm3NG1sMa23RoVhLrCqk+NrzIbucBd5TVUESikommJcSWNQjkJqsmgJUgInuBswSRSRzGZLg6HHNs9QRz/Q7BN027qKqGoDgfRNORg+hKbdgTPbop/NsTvtZ7p9ARYXPWYWfWT5qZxZgE2JqUagQrMd0YDC/u7eD+8jBL1Qls62CJJlevCDpruw1gI0IFfLWO+5BOwIUUxy54NoqCsqioyoqyKCmLkqqsGA4rfEgRKFMwm55XmHia1tM9pjWpIsC8zTi7M2BnPkCMkFlLZg2ZseTWkosls5bcZOTGkomNr9bygsEOzu9uaboTEY0jLQ0UEqosy6vWiXiJgIVrCdFG9clWgGCEo+OCrggZBtWgQeOhwOHIxN5etMXLYcrC7elAfUKgid0kiu3Mu5yW9eiY2Lu2u5y6n81EmtP1jZun+0wsl82ezty4y73DpXreJV6UoYSy1+tPAL91ZcQnF/pL7alfw5oIQZRSPevjihlJrX90Z62qTl0IabuEnxJsWqMIMZNY9Qo9YzinM8OMzZre1aRi35jYx1oma9bYRnmx9ea0Nub5s6czk3X5xuqTGMBrYIOq6vf75dTfPATRx0W5DcwveEkWCzEX1xZaCRWZl0TOKiGY9LV4ZoqWlTnJudvNvZUoN52e9zizM4hivknWSgAbwImZjU1rSPO9JlnctlhcRbhgYTunzm7iiwcewIXAmi/W8tn5tSaGP7G5z7XHx8si3ORh5OJBTLygTkM87ImwatCRq6QqKi2LUp0LGuq+vonf5M46LefU3VIQyLKMhZkeric8ZUYsmYKjUrJCyQn1lKJURnGiOIFKFIfiUYLRqHyaCLxjLF2b07U5eadL3u9CJ9Ptc1v4xfNfQifLOV6O1piZW52uZoG/ODXPV6v8fU75ba2rVGkOzUgQ6JdeTx15PCDZrGK7ErQSL46gHi+OgMPjpyorL0KwBnILJvKAikzYfbJVqGpsKDCSiSFDyEwkr44YcolAOyajI5aOzehkGXmWkWU53Syn2+nR73TZ8CW7jjx555b+/Btf+eAji41Lf2Khxy8fHVcf35S9TxDv0OtrsAGadLPWMZwy8ipiRaRDSB7QWDlNEppzW5nBpRaN1pRSRJrTc4a6AZaUS9NWCzj1VJL0+jCp3NLw7JCiB71yyAoHBzY/ONvpL83nvY3Ngzl/6sy8O212i7/49HOXrvnmnUeeZuEb5/u8bW3EJxf6vTXPC7yRLwV0QacUfmGu8n77EKvdzSGok4CXoA5PRRBPYQNlZmL8Szrkrc80cdSYN+EYsFeERZB9Jt7vG6s/DuriX+Roc25FwVkRZ0QKIzLOxIy7WTae6wzGb3jyUPlPnb96/2kZv33ETT/Hn8z3efvaCIA/2tSfVfQFCq9T5OeAs1SQTNGz1jOv+SAvpaKUSivjjnqjh73RIwqHgSMicgg4AqwIsiawboQ1i1nvYlaPhaLITdQB4iVqjYQuJsxl3XCwOqEztsfFM9u4/MlH/3V/YfOW/4T59Pue8Wv/F9jGEQFesRfqAAAAAElFTkSuQmCC" />
|
426
|
+
<h1>Ruby Sugar Refinery</h1>
|
427
|
+
<br/>
|
428
|
+
<p class="text">The Ruby Sugar Refinery is a collection of tiny <a href="http://ruby-doc.org/core-2.3.0/doc/syntax/refinements_rdoc.html">refinements</a> (declarative local core extensions) for Ruby.</p>
|
429
|
+
|
430
|
+
<h2>Setup & Usage</h2>
|
431
|
+
<p class="text">
|
432
|
+
Add to Gemfile:
|
433
|
+
</p>
|
434
|
+
|
435
|
+
<div class="cubes">
|
436
|
+
<code class="scode">gem 'sugar_refinery', require: 'sugar_refinery/all'</code>
|
437
|
+
</div>
|
438
|
+
|
439
|
+
<p class="text">
|
440
|
+
Then add refinements to the current Ruby file or module:
|
441
|
+
<div class="cubes">
|
442
|
+
<pre class="scode">using SugarRefinery::CamelSnake
|
443
|
+
using SugarRefinery::HashZip
|
444
|
+
|
445
|
+
"ClassName".to_snake # => "class_name"
|
446
|
+
Hash.zip [1,2,3], [4,5,6] # => {1=>4, 2=>5, 3=>6}</pre>
|
447
|
+
</div>
|
448
|
+
</p>
|
449
|
+
|
450
|
+
<h2>List of Refinements</h2>
|
451
|
+
|
452
|
+
..cubes..
|
453
|
+
|
454
|
+
<h2>Changelog</h2>
|
455
|
+
<div class="cubes">
|
456
|
+
<pre class="scode">..changelog..</pre>
|
457
|
+
</div>
|
458
|
+
<br/>
|
459
|
+
</div>
|
460
|
+
|
461
|
+
<div id="foot">
|
462
|
+
<div id="smile"><a href="http://janlelis.com">J-_-L</a></div>
|
463
|
+
This is the Ruby Sugar Refinery ..version.. documentation (..date..).
|
464
|
+
It is available at <a href="http://janlelis.github.io/sugar_refinery">janlelis.github.io/sugar_refinery</a>.
|
465
|
+
Ruby Logo CC-BY-SA Yukihiro Matsumoto.
|
466
|
+
</div>
|
467
|
+
|
468
|
+
<a href="https://github.com/janlelis/sugar-refinery"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://camo.githubusercontent.com/38ef81f8aca64bb9a64448d0d70f1308ef5341ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f6461726b626c75655f3132313632312e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png"></a>
|
469
|
+
</body>
|
470
|
+
</html>
|
471
|
+
|