permutations 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.
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Wes Oldenbeuving
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/Rakefile ADDED
@@ -0,0 +1,59 @@
1
+ require "rake"
2
+ require "rake/clean"
3
+ require "rake/gempackagetask"
4
+ require 'rubygems'
5
+
6
+ ################################################################################
7
+ ### Gem
8
+ ################################################################################
9
+
10
+ begin
11
+ # Parse gemspec using the github safety level.
12
+ file = Dir['*.gemspec'].first
13
+ data = File.read(file)
14
+ spec = nil
15
+ # FIXME: Lowered SAFE from 3 to 2 to work with Ruby 1.9 due to rubygems
16
+ # performing a require internally
17
+ Thread.new { spec = eval("$SAFE = 2\n%s" % data)}.join
18
+
19
+ # Create the gem tasks
20
+ Rake::GemPackageTask.new(spec) do |package|
21
+ package.gem_spec = spec
22
+ end
23
+ rescue Exception => e
24
+ printf "WARNING: Error caught (%s): %s\n%s", e.class.name, e.message, e.backtrace[0...5].map {|l| ' %s' % l}.join("\n")
25
+ end
26
+
27
+ desc 'Package and install the gem for the current version'
28
+ task :install => :gem do
29
+ system "sudo gem install -l pkg/%s-%s.gem" % [spec.name, spec.version]
30
+ end
31
+
32
+ desc 'Show files missing from gemspec'
33
+ task :diff do
34
+ files = %w[
35
+ Rakefile
36
+ *README* *readme*
37
+ *LICENSE*
38
+ *.gemspec deps.rip
39
+ bin/*
40
+ lib/**/*
41
+ spec/**/*
42
+ ].map {|pattern| Dir.glob(pattern)}.flatten.select{|f| File.file?(f)}
43
+ missing_files = files - spec.files
44
+ extra_files = spec.files - files
45
+ puts "Missing files:"
46
+ puts missing_files.join(" ")
47
+ puts "Extra files:"
48
+ puts extra_files.join(" ")
49
+ end
50
+
51
+ desc 'Local install the latest gem version'
52
+ task :reinstall do
53
+ system("rm -f pkg/*.gem && rake gem && gem install pkg/*.gem")
54
+ end
55
+
56
+ desc 'Uninstall all Fresnel versions and install the latest gem version'
57
+ task :upgrade do
58
+ system("gem uninstall -a -x fresnel && rm -f pkg/*.gem && rake gem && gem install pkg/*.gem")
59
+ end
data/Readme.rdoc ADDED
@@ -0,0 +1,13 @@
1
+ = Permutations
2
+
3
+ Generate permutations for nested arrays or strings that offer one or more choices.
4
+ You can use it as a Rails plugin.
5
+
6
+ == Example
7
+
8
+ [[1,2],[3,4]].permutations # =>[[1,3],[1,4],[2,3],[2,4]]
9
+ "{1,2}{3,4}".permutations # => ["13", "14", "23", "24"]
10
+
11
+ == Credits
12
+
13
+ Created by Wes Oldenbeuving. Licensed under the MIT License.
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'permutations'
@@ -0,0 +1,41 @@
1
+ module Permutations
2
+ module Array
3
+ # Recursively permutate nested arrays.
4
+ def permutations(leftovers=self)
5
+ tail = leftovers.last
6
+ return tail.map{|e| [e]} if leftovers.size == 1
7
+ resulting_permutations = []
8
+ permutations(leftovers[0...-1]).each do |permutation|
9
+ tail.each do |tail_element|
10
+ resulting_permutations << (permutation + [tail_element])
11
+ end
12
+ end
13
+ resulting_permutations
14
+ end
15
+ end
16
+
17
+ module String
18
+ # Create multi-level string permutations
19
+ # "{a,b,c}{1,2,3}".permutations # => ["a1", "a2", "a3", "b1", "b2", "b3", "c1", "c2", "c3"]
20
+ def permutations
21
+ matches = self.scan(/(\{(.*?)\})/)
22
+ substitutions = matches.map{|match| match[0]}
23
+ permutations = matches.map{|match| match[1].split(/\s*,\s*/)}.permutations
24
+ permutations.map do |permutation|
25
+ permutated_string = self.dup
26
+ permutation.each_with_index do |choice, index|
27
+ choice_string = substitutions[index]
28
+ permutated_string.sub!(choice_string,choice)
29
+ end
30
+ permutated_string
31
+ end
32
+ end
33
+ end
34
+ end
35
+ class Array
36
+ include Permutations::Array
37
+ end
38
+
39
+ class String
40
+ include Permutations::String
41
+ end
@@ -0,0 +1,30 @@
1
+ Gem::Specification.new do |s|
2
+ # Project
3
+ s.name = 'permutations'
4
+ s.summary = "Permutations is a library that allows you to generate permutations from Arrays and Strings."
5
+ s.description = s.summary
6
+ s.version = '0.1.0'
7
+ s.date = '2010-01-21'
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Wes Oldenbeuving"]
10
+ s.email = "narnach@gmail.com"
11
+ s.homepage = "http://www.github.com/narnach/permutations"
12
+
13
+ # Files
14
+ root_files = %w[Readme.rdoc Rakefile permutations.gemspec init.rb MIT-LICENSE]
15
+ bin_files = []
16
+ lib_files = %w[permutations]
17
+ s.bindir = "bin"
18
+ s.require_path = "lib"
19
+ s.executables = bin_files
20
+ s.test_files = []
21
+ s.files = root_files + s.test_files + bin_files.map {|f| 'bin/%s' % f} + lib_files.map {|f| 'lib/%s.rb' % f}
22
+
23
+ # rdoc
24
+ s.has_rdoc = true
25
+ s.extra_rdoc_files = %w[ Readme.rdoc]
26
+ s.rdoc_options << '--inline-source' << '--line-numbers' << '--main' << 'Readme.rdoc'
27
+
28
+ # Requirements
29
+ s.required_ruby_version = ">= 1.8.0"
30
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: permutations
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Wes Oldenbeuving
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-01-21 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Permutations is a library that allows you to generate permutations from Arrays and Strings.
17
+ email: narnach@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - Readme.rdoc
24
+ files:
25
+ - Readme.rdoc
26
+ - Rakefile
27
+ - permutations.gemspec
28
+ - init.rb
29
+ - MIT-LICENSE
30
+ - lib/permutations.rb
31
+ has_rdoc: true
32
+ homepage: http://www.github.com/narnach/permutations
33
+ licenses: []
34
+
35
+ post_install_message:
36
+ rdoc_options:
37
+ - --inline-source
38
+ - --line-numbers
39
+ - --main
40
+ - Readme.rdoc
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.8.0
48
+ version:
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ requirements: []
56
+
57
+ rubyforge_project:
58
+ rubygems_version: 1.3.5
59
+ signing_key:
60
+ specification_version: 3
61
+ summary: Permutations is a library that allows you to generate permutations from Arrays and Strings.
62
+ test_files: []
63
+