invert 0.1.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.
@@ -0,0 +1,36 @@
1
+ <head>
2
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
3
+ <link href="dev/github.css" rel="stylesheet" type="text/css" />
4
+ </head>
5
+
6
+ <h1 id="inverse-comparison-wrapper">Inverse Comparison Wrapper</h1>
7
+
8
+ <h2 id="introduction">Introduction</h2>
9
+
10
+ <p>To <tt>sort_by</tt> in reverse order, use the <tt>Invert</tt> wrapper supplied in this gem.</p>
11
+
12
+ <p>This gem is based on post by <strong>glenn mcdonald</strong>:</p>
13
+
14
+ <ul>
15
+ <li><a href="http://stackoverflow.com/questions/73032/how-can-i-sort-by-multiple-conditions-with-different-orders">http://stackoverflow.com/questions/73032/how-can-i-sort-by-multiple-conditions-with-different-orders</a></li>
16
+ <li><a href="http://stackoverflow.com/users/7919/glenn-mcdonald">http://stackoverflow.com/users/7919/glenn-mcdonald</a></li>
17
+ </ul>
18
+
19
+ <h2 id="setup">Setup</h2>
20
+
21
+ <pre><code>gem install invert
22
+ </code></pre>
23
+
24
+ <h2 id="examples">Examples</h2>
25
+
26
+ <pre><code>[1, 2, 3].sort_by {|i| Invert(i)} # =&gt; [3, 2, 1]
27
+ [&quot;alfa&quot;, &quot;bravo&quot;, &quot;charlie&quot;].sort_by {|s| Invert(s)} # =&gt; [&quot;charlie&quot;, &quot;bravo&quot;, &quot;alfa&quot;]
28
+ </code></pre>
29
+
30
+ <p>Multi-sort:</p>
31
+ <pre><code>users.sort_by {|r| [Invert(r.age), r.name]}
32
+ </code></pre>
33
+
34
+ <h2 id="feedback">Feedback</h2>
35
+
36
+ <p>Send bug reports, suggestions and criticisms through <a href="http://github.com/dadooda/invert">project's page on GitHub</a>.</p>
@@ -0,0 +1,36 @@
1
+
2
+ Inverse Comparison Wrapper
3
+ ==========================
4
+
5
+ Introduction
6
+ ------------
7
+
8
+ To <tt>sort_by</tt> in reverse order, use the <tt>Invert</tt> wrapper supplied in this gem.
9
+
10
+ This gem is based on post by **glenn mcdonald**:
11
+
12
+ * [http://stackoverflow.com/questions/73032/how-can-i-sort-by-multiple-conditions-with-different-orders](http://stackoverflow.com/questions/73032/how-can-i-sort-by-multiple-conditions-with-different-orders)
13
+ * [http://stackoverflow.com/users/7919/glenn-mcdonald](http://stackoverflow.com/users/7919/glenn-mcdonald)
14
+
15
+
16
+ Setup
17
+ -----
18
+
19
+ $ gem sources --add http://rubygems.org
20
+ $ gem install invert
21
+
22
+
23
+ Examples
24
+ --------
25
+
26
+ [1, 2, 3].sort_by {|i| Invert(i)} # => [3, 2, 1]
27
+ ["alfa", "bravo", "charlie"].sort_by {|s| Invert(s)} # => ["charlie", "bravo", "alfa"]
28
+
29
+ Multi-sort:
30
+ users.sort_by {|r| [Invert(r.age), r.name]}
31
+
32
+
33
+ Feedback
34
+ --------
35
+
36
+ Send bug reports, suggestions and criticisms through [project's page on GitHub](http://github.com/dadooda/invert).
@@ -0,0 +1,4 @@
1
+ ---
2
+ :major: 0
3
+ :minor: 1
4
+ :patch: 0
data/init.rb ADDED
@@ -0,0 +1,3 @@
1
+ Dir[File.join(File.dirname(__FILE__), "lib/**/*.rb")].each do |fn|
2
+ require fn
3
+ end
@@ -0,0 +1,46 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{invert}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Glenn McDonald", "Alex Fortuna"]
12
+ s.date = %q{2010-07-18}
13
+ s.description = %q{Inverse Comparison Wrapper}
14
+ s.email = %q{alex.r@askit.org}
15
+ s.extra_rdoc_files = [
16
+ "README.html",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ "README.html",
21
+ "README.md",
22
+ "VERSION.yml",
23
+ "init.rb",
24
+ "invert.gemspec",
25
+ "lib/invert.rb"
26
+ ]
27
+ s.homepage = %q{http://github.com/dadooda/invert}
28
+ s.rdoc_options = ["--charset=UTF-8"]
29
+ s.require_paths = ["lib"]
30
+ s.rubygems_version = %q{1.3.5}
31
+ s.summary = %q{Inverse Comparison Wrapper}
32
+ s.test_files = [
33
+ "spec/spec_helper.rb",
34
+ "spec/invert_spec.rb"
35
+ ]
36
+
37
+ if s.respond_to? :specification_version then
38
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
39
+ s.specification_version = 3
40
+
41
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
42
+ else
43
+ end
44
+ else
45
+ end
46
+ end
@@ -0,0 +1,32 @@
1
+ # Inverse comparison wrapper. Terribly useful to use with <tt>sort_by</tt> to do asc/desc multisorting per each key.
2
+ #
3
+ # Based on the post by glenn mcdonald:
4
+ # http://stackoverflow.com/questions/73032/how-can-i-sort-by-multiple-conditions-with-different-orders
5
+ # http://stackoverflow.com/users/7919/glenn-mcdonald
6
+ #
7
+ # Examples:
8
+ # [1, 2, 3].sort_by {|i| Invert(i)} # => [3, 2, 1]
9
+ # ["alfa", "bravo", "charlie"].sort_by {|s| Invert(s)} # => ["charlie", "bravo", "alfa"]
10
+ #
11
+ # Multi-sort:
12
+ # users.sort_by {|r| [Invert(r.age), r.name]}
13
+
14
+ # Wrap an object to invert <tt><=></tt> method.
15
+ # items.sort_by {|r| [r.prop1, Invert.new(r.prop2)]}
16
+ class Invert
17
+ attr_reader :r
18
+
19
+ def initialize(r)
20
+ @r = r
21
+ end
22
+
23
+ def <=>(other)
24
+ -(@r <=> other.r)
25
+ end
26
+ end
27
+
28
+ # A shortened form of <tt>Invert.new</tt>.
29
+ # items.sort_by {|r| [r.prop1, Invert(r.prop2)]}
30
+ def Invert(*args)
31
+ Invert.new(*args)
32
+ end
@@ -0,0 +1,27 @@
1
+ require File.join(File.dirname(__FILE__), "spec_helper")
2
+
3
+ describe "#{klass = Invert}" do
4
+ describe "#new" do
5
+ it "requires an argument" do
6
+ Proc.new do
7
+ klass.new
8
+ end.should raise_error ArgumentError
9
+
10
+ Proc.new do
11
+ klass.new(10)
12
+ end.should_not raise_error
13
+ end
14
+ end
15
+
16
+ it "generally works" do
17
+ [1, 2, 3].sort_by {|i| Invert.new(i)}.should == [3, 2, 1]
18
+ ["alfa", "bravo", "charlie"].sort_by {|s| Invert.new(s)}.should == ["charlie", "bravo", "alfa"]
19
+ end
20
+ end
21
+
22
+ describe "Invert()" do
23
+ it "generally works" do
24
+ [1, 2, 3].sort_by {|i| Invert.new(i)}.should == [3, 2, 1]
25
+ ["alfa", "bravo", "charlie"].sort_by {|s| Invert.new(s)}.should == ["charlie", "bravo", "alfa"]
26
+ end
27
+ end
@@ -0,0 +1 @@
1
+ require File.join(File.dirname(__FILE__), "../init.rb")
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: invert
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Glenn McDonald
8
+ - Alex Fortuna
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2010-07-18 00:00:00 +04:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: Inverse Comparison Wrapper
18
+ email: alex.r@askit.org
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files:
24
+ - README.html
25
+ - README.md
26
+ files:
27
+ - README.html
28
+ - README.md
29
+ - VERSION.yml
30
+ - init.rb
31
+ - invert.gemspec
32
+ - lib/invert.rb
33
+ has_rdoc: true
34
+ homepage: http://github.com/dadooda/invert
35
+ licenses: []
36
+
37
+ post_install_message:
38
+ rdoc_options:
39
+ - --charset=UTF-8
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ version:
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: "0"
53
+ version:
54
+ requirements: []
55
+
56
+ rubyforge_project:
57
+ rubygems_version: 1.3.5
58
+ signing_key:
59
+ specification_version: 3
60
+ summary: Inverse Comparison Wrapper
61
+ test_files:
62
+ - spec/spec_helper.rb
63
+ - spec/invert_spec.rb