nicolus 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+ === 1.0.0 / 2008-02-14
2
+
3
+ * project creation
4
+ * lib
5
+ * command line
6
+
@@ -0,0 +1,11 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ bin/nicolus
6
+ bin/nicolus.bat
7
+ lib/nicolus.rb
8
+ lib/opt_parse.rb
9
+ test/listes.csv
10
+ test/listes_3_col.csv
11
+ test/test_nicolus.rb
@@ -0,0 +1,50 @@
1
+ = nicolus
2
+ http://nicolus.rubyforge.org/
3
+ by Benjamin Francisoud
4
+
5
+ == DESCRIPTION:
6
+
7
+ Nicolus is a simple program to make all possible combination out of 2 or more lists of words.
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ * Command line parser
12
+ * "inverse" generate "aaa 111" and "111 aaa"
13
+
14
+ == SYNOPSIS:
15
+
16
+ For example:
17
+ listA = aaa, bbb, ccc
18
+ listB = 111, 222
19
+
20
+ Combination will be:
21
+ result= aaa 111, aaa 222, bbb 111, bbb 222, ccc 111, ccc 222
22
+
23
+ == INSTALL:
24
+
25
+ * gem install nicolus
26
+
27
+ == LICENSE:
28
+
29
+ (The MIT License)
30
+
31
+ Copyright (c) 2008 FIX
32
+
33
+ Permission is hereby granted, free of charge, to any person obtaining
34
+ a copy of this software and associated documentation files (the
35
+ 'Software'), to deal in the Software without restriction, including
36
+ without limitation the rights to use, copy, modify, merge, publish,
37
+ distribute, sublicense, and/or sell copies of the Software, and to
38
+ permit persons to whom the Software is furnished to do so, subject to
39
+ the following conditions:
40
+
41
+ The above copyright notice and this permission notice shall be
42
+ included in all copies or substantial portions of the Software.
43
+
44
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
45
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
46
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
47
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
48
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
49
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
50
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,30 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+ require './lib/nicolus.rb'
6
+
7
+ Hoe.new('nicolus', Nicolus::VERSION) do |p|
8
+ p.rubyforge_name = 'nicolus'
9
+ p.author = 'Benjamin Francisoud'
10
+ p.email = 'pub.cog@gmail.com'
11
+ p.summary = 'Nicolus is a simple program to make all possible combination out of 2 or more lists of words.'
12
+ p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
13
+ p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
14
+ p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
15
+ p.remote_rdoc_dir = '' # Release to root
16
+ # p.need_zip = true
17
+ end
18
+
19
+ SVN = 'svn+ssh://cogito@rubyforge.org/var/svn/nicolus'
20
+
21
+ task :svn_branch => [:clean] do
22
+ `svn delete #{SVN}/branches/1.X -m "cleanup branch"`
23
+ `svn copy #{SVN}/trunk #{SVN}/branches/1.X -m "create branch"`
24
+ end
25
+
26
+ task :svn_tag do
27
+ `svn copy #{SVN}/trunk #{SVN}/tags/#{Nicolus::VERSION} -m "create tag"`
28
+ end
29
+
30
+ # vim: syntax=Ruby
@@ -0,0 +1 @@
1
+ ruby ../lib/opt_parse.rb $1 $2 $3 $4 $5 $6 $7 $8 $9
@@ -0,0 +1,4 @@
1
+ @echo off
2
+ cls
3
+
4
+ ruby ../lib/opt_parse.rb %1 %2 %3 %4 %5 %6 %7 %8 %9
@@ -0,0 +1,78 @@
1
+ require 'matrix'
2
+
3
+ class Object
4
+ def blank?
5
+ respond_to?(:empty?) ? empty? : !self
6
+ end
7
+ end
8
+
9
+ class String
10
+ def unquote!
11
+ # remove first
12
+ unless (gsub!(/\A\"/, '').nil?)
13
+ # remove last
14
+ gsub!(/\"$/, '')
15
+ end
16
+ end
17
+ end
18
+
19
+ module Nicolus
20
+ VERSION = '1.0.0'
21
+
22
+ class Combinaison
23
+ def initialize(input_file, filename, inv=false)
24
+ @input_file, @filename = input_file, filename
25
+ @inv = inv
26
+ end
27
+
28
+ def inverse?
29
+ return @inv
30
+ end
31
+
32
+ # a,1,A
33
+ # b,2,B
34
+ # c,3,C
35
+ # => [[a, b, c], [1, 2, 3], [A, B, C]]
36
+ def create_lists
37
+ list = []
38
+ IO.foreach(@input_file) do |line|
39
+ columns = line.chomp.split(',')
40
+ list << columns
41
+ end
42
+ # [[a, 1, A], [b, 2, B], [c, 3, C]] => [[a, b, c], [1, 2, 3], [A, B, C]]
43
+ @listes = (Matrix.rows list).transpose.to_a
44
+ end
45
+
46
+ def create_result
47
+ # Too complex should take a look at ruby 1.9 array.combination()
48
+ # http://ruby-doc.org/core-1.9/classes/Array.src/M002238.html
49
+ File.open(@filename, File::CREAT|File::RDWR|File::TRUNC) do |file|
50
+ @listes.each do |line|
51
+ line.each do |item|
52
+ # unless(item.nil? or item.strip.empty?)
53
+ unless(item.blank?)
54
+ item.unquote!
55
+ pos = @listes.index(line)
56
+ sub_array = @listes - @listes[0, pos+1]
57
+ sub_array.each do |sub_line|
58
+ sub_line.each do |rest|
59
+ # unless(rest.nil? or rest.strip.empty?)
60
+ unless(rest.blank?)
61
+ rest.unquote!
62
+ file << "#{item} #{rest}\n"
63
+ file << "#{rest} #{item}\n" if(inverse?)
64
+ end # unless(rest)
65
+ end # sub_line
66
+ end # sub_array
67
+ end # unless(item)
68
+ end # line.each
69
+ end # @listes.each
70
+ end # File.open
71
+ end # create_result()
72
+
73
+ def run
74
+ create_lists
75
+ create_result
76
+ end
77
+ end # class Combinaison
78
+ end # module Nicolus
@@ -0,0 +1,54 @@
1
+ require 'optparse'
2
+ require File.dirname(__FILE__) + '/nicolus.rb'
3
+
4
+ module Nicolus
5
+
6
+ class OptParse
7
+ # Return a structure describing the options.
8
+ def self.parse(args)
9
+ options = {}
10
+ opts = OptionParser.new do |opts|
11
+ opts.banner = "Usage: \n\tnicolus --input listes.csv --output combinaison.csv\n\tnicolus -i listes.csv -o combinaison.csv --inverse\n"
12
+
13
+ opts.separator ""
14
+ opts.separator "Mandatory options:"
15
+
16
+ opts.on("-i", "--input [FILE]", :REQUIRED, String, "Csv File with lists of words") do |i|
17
+ options[:input] = i
18
+ end
19
+ opts.on("-o", "--output [FILE]", :REQUIRED, String, "Csv File to store the result") do |o|
20
+ options[:output] = o
21
+ end
22
+
23
+ opts.separator ""
24
+ opts.separator "Optional options:"
25
+
26
+ opts.on("-I", "--inverse", "Generate inverse combinaison") do |inv|
27
+ options[:inverse] = inv
28
+ end
29
+
30
+ opts.separator ""
31
+ opts.separator "Common options:"
32
+
33
+ # No argument, shows at tail. This will print an options summary.
34
+ opts.on_tail("-h", "--help", "Show this message") do
35
+ puts opts
36
+ exit
37
+ end
38
+ end
39
+
40
+ if (args.size == 0)
41
+ # No args specify > running help
42
+ opts.parse!(["--help"])
43
+ else
44
+ opts.parse!(args)
45
+ end
46
+
47
+ options
48
+ end # parse()
49
+ end # class Optparse
50
+ end # module Nicolus
51
+
52
+ options = Nicolus::OptParse.parse(ARGV)
53
+ comb = Nicolus::Combinaison.new(options[:input], options[:output], options[:inverse])
54
+ comb.run
@@ -0,0 +1,4 @@
1
+ "aaaa",1111
2
+ "bbbb",2222
3
+ "cccc",3333
4
+ "dddd",
@@ -0,0 +1,4 @@
1
+ "aaaa",1111,"AA"
2
+ "bbbb",2222,"BB"
3
+ "cccc",3333,"CC"
4
+ "dddd",,"DD"
@@ -0,0 +1,56 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/nicolus.rb'
3
+
4
+ class TestNicolus < Test::Unit::TestCase
5
+ def test_run_2_col
6
+ comb = Nicolus::Combinaison.new("test/listes.csv", "test/combinaison_2_col.csv")
7
+ comb.run
8
+ assert File.exist?("test/combinaison_2_col.csv")
9
+ File.delete "test/combinaison_2_col.csv"
10
+ end
11
+
12
+ def test_run_2_col_inverse
13
+ comb = Nicolus::Combinaison.new("test/listes.csv", "test/combinaison_2_col_inverse.csv", true)
14
+ comb.run
15
+ assert File.exist?("test/combinaison_2_col_inverse.csv")
16
+ File.delete "test/combinaison_2_col_inverse.csv"
17
+ end
18
+
19
+ def test_run_3_col
20
+ comb = Nicolus::Combinaison.new("test/listes_3_col.csv", "test/combinaison_3_col.csv") #, true)
21
+ comb.run
22
+ assert File.exist?("test/combinaison_3_col.csv")
23
+ File.delete "test/combinaison_3_col.csv"
24
+ end
25
+
26
+ def test_run_3_col_inverse
27
+ comb = Nicolus::Combinaison.new("test/listes_3_col.csv", "test/combinaison_3_col_inverse.csv", true)
28
+ comb.run
29
+ assert File.exist?("test/combinaison_3_col_inverse.csv")
30
+ File.delete "test/combinaison_3_col_inverse.csv"
31
+ end
32
+
33
+ def test_unquote_normal
34
+ to_unquote = "abc"
35
+ to_unquote.unquote!
36
+ assert_equal "abc", to_unquote
37
+ end
38
+
39
+ def test_unquote_1_quote
40
+ to_unquote = "\"abc"
41
+ to_unquote.unquote!
42
+ assert_equal "abc", to_unquote
43
+ end
44
+
45
+ def test_unquote_2_quotes
46
+ to_unquote = "\"abc\""
47
+ to_unquote.unquote!
48
+ assert_equal "abc", to_unquote
49
+ end
50
+
51
+ def test_unquote_3_quotes
52
+ to_unquote = "\"ab\"c\""
53
+ to_unquote.unquote!
54
+ assert_equal "ab\"c", to_unquote
55
+ end
56
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.4
3
+ specification_version: 1
4
+ name: nicolus
5
+ version: !ruby/object:Gem::Version
6
+ version: 1.0.0
7
+ date: 2008-02-15 00:00:00 +01:00
8
+ summary: Nicolus is a simple program to make all possible combination out of 2 or more lists of words.
9
+ require_paths:
10
+ - lib
11
+ email: pub.cog@gmail.com
12
+ homepage: http://nicolus.rubyforge.org/
13
+ rubyforge_project: nicolus
14
+ description: "Nicolus is a simple program to make all possible combination out of 2 or more lists of words. == FEATURES/PROBLEMS: * Command line parser * \"inverse\" generate \"aaa 111\" and \"111 aaa\" == SYNOPSIS:"
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Benjamin Francisoud
31
+ files:
32
+ - History.txt
33
+ - Manifest.txt
34
+ - README.txt
35
+ - Rakefile
36
+ - bin/nicolus
37
+ - bin/nicolus.bat
38
+ - lib/nicolus.rb
39
+ - lib/opt_parse.rb
40
+ - test/listes.csv
41
+ - test/listes_3_col.csv
42
+ - test/test_nicolus.rb
43
+ test_files:
44
+ - test/test_nicolus.rb
45
+ rdoc_options:
46
+ - --main
47
+ - README.txt
48
+ extra_rdoc_files:
49
+ - History.txt
50
+ - Manifest.txt
51
+ - README.txt
52
+ executables:
53
+ - nicolus
54
+ - nicolus.bat
55
+ extensions: []
56
+
57
+ requirements: []
58
+
59
+ dependencies:
60
+ - !ruby/object:Gem::Dependency
61
+ name: hoe
62
+ version_requirement:
63
+ version_requirements: !ruby/object:Gem::Version::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 1.3.0
68
+ version: