funding_primer 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/.rvmrc +1 -0
- data/.travis.yml +10 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +52 -0
- data/LICENSE +22 -0
- data/README.md +43 -0
- data/README.rdoc +36 -0
- data/Rakefile +75 -0
- data/bin/funding_primer +41 -0
- data/features/basic_table.feature +35 -0
- data/features/help.feature +16 -0
- data/features/set_the_size.feature +21 -0
- data/features/step_definitions/funding_primer_steps.rb +0 -0
- data/features/support/env.rb +16 -0
- data/funding_primer.gemspec +23 -0
- data/lib/funding_primer.rb +3 -0
- data/lib/funding_primer/format.rb +11 -0
- data/lib/funding_primer/format/table.rb +30 -0
- data/lib/funding_primer/multiplication_table.rb +38 -0
- data/lib/funding_primer/prime.rb +105 -0
- data/lib/funding_primer/version.rb +3 -0
- data/man/funding_primer.1 +85 -0
- data/man/funding_primer.1.html +127 -0
- data/man/funding_primer.1.ronn +43 -0
- data/spec/format/table_spec.rb +21 -0
- data/spec/multiplication_table_spec.rb +19 -0
- data/spec/prime_spec.rb +8 -0
- metadata +179 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use --create ruby-1.9.3@funding_primer
|
data/.travis.yml
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
# - "1.8.7"
|
4
|
+
- "1.9.2"
|
5
|
+
- "1.9.3"
|
6
|
+
# - jruby-18mode # JRuby in 1.8 mode
|
7
|
+
# - jruby-19mode # JRuby in 1.9 mode
|
8
|
+
# - rbx-18mode
|
9
|
+
# - rbx-19mode
|
10
|
+
# uncomment this line if your project needs to run something other than rake# script: bundle exec rspec spec
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
funding_primer (0.1.1)
|
5
|
+
methadone (~> 1.2.2)
|
6
|
+
terminal-table (~> 1.4.5)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
aruba (0.5.0)
|
12
|
+
childprocess (= 0.2.3)
|
13
|
+
cucumber (>= 1.1.1)
|
14
|
+
ffi (>= 1.0.11)
|
15
|
+
rspec-expectations (>= 2.7.0)
|
16
|
+
builder (3.1.4)
|
17
|
+
childprocess (0.2.3)
|
18
|
+
ffi (~> 1.0.6)
|
19
|
+
cucumber (1.2.1)
|
20
|
+
builder (>= 2.1.2)
|
21
|
+
diff-lcs (>= 1.1.3)
|
22
|
+
gherkin (~> 2.11.0)
|
23
|
+
json (>= 1.4.6)
|
24
|
+
diff-lcs (1.1.3)
|
25
|
+
ffi (1.0.11)
|
26
|
+
gherkin (2.11.5)
|
27
|
+
json (>= 1.4.6)
|
28
|
+
json (1.7.5)
|
29
|
+
methadone (1.2.2)
|
30
|
+
bundler
|
31
|
+
rake (0.9.4)
|
32
|
+
rdoc (3.12)
|
33
|
+
json (~> 1.4)
|
34
|
+
rspec (2.12.0)
|
35
|
+
rspec-core (~> 2.12.0)
|
36
|
+
rspec-expectations (~> 2.12.0)
|
37
|
+
rspec-mocks (~> 2.12.0)
|
38
|
+
rspec-core (2.12.0)
|
39
|
+
rspec-expectations (2.12.0)
|
40
|
+
diff-lcs (~> 1.1.3)
|
41
|
+
rspec-mocks (2.12.0)
|
42
|
+
terminal-table (1.4.5)
|
43
|
+
|
44
|
+
PLATFORMS
|
45
|
+
ruby
|
46
|
+
|
47
|
+
DEPENDENCIES
|
48
|
+
aruba
|
49
|
+
funding_primer!
|
50
|
+
rake (~> 0.9.2)
|
51
|
+
rdoc
|
52
|
+
rspec
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Matt Gibb
|
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.
|
data/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# FundingPrimer
|
2
|
+
|
3
|
+
Multiplication tables for prime numbers!
|
4
|
+
|
5
|
+
In order to visualise the products of two prime numbers, funding_primer prints out a table of prime products.
|
6
|
+
|
7
|
+
In an arguable violation of the [UNIX Philosophy](http://en.wikipedia.org/wiki/Unix_philosophy) and the [Single Responsibility Principle](http://en.wikipedia.org/wiki/Single_responsibility_principle), funding_primer also ensures that talented programmers are employed at great startups :-)
|
8
|
+
|
9
|
+
## Build Status
|
10
|
+
|
11
|
+
[![Build Status](https://travis-ci.org/mattgibb/funding_primer.png)](https://travis-ci.org/mattgibb/funding_primer)
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
Add this line to your application's Gemfile:
|
16
|
+
|
17
|
+
gem 'funding_primer'
|
18
|
+
|
19
|
+
And then execute:
|
20
|
+
|
21
|
+
$ bundle
|
22
|
+
|
23
|
+
Or install it yourself as:
|
24
|
+
|
25
|
+
$ gem install funding_primer
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
TODO: Write usage instructions here
|
30
|
+
|
31
|
+
## Help
|
32
|
+
|
33
|
+
funding_primer --help
|
34
|
+
man funding_primer
|
35
|
+
|
36
|
+
## Contributing
|
37
|
+
|
38
|
+
1. Fork it
|
39
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
40
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
41
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
42
|
+
5. Create new Pull Request
|
43
|
+
|
data/README.rdoc
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
= funding_primer - Multiplication tables for prime numbers!
|
2
|
+
|
3
|
+
Author:: Matt Gibb (matt@mattgibb.com)
|
4
|
+
Copyright:: Copyright (c) 2012 Matt Gibb
|
5
|
+
|
6
|
+
|
7
|
+
License:: MIT, see LICENSE
|
8
|
+
|
9
|
+
In order to visualise the products of two prime numbers, funding_primer prints out a table of prime products.
|
10
|
+
|
11
|
+
In an arguable violation of the {UNIX Philosophy}[http://en.wikipedia.org/wiki/Unix_philosophy] and the {Single Responsibility Principle}[http://en.wikipedia.org/wiki/Single_responsibility_principle], funding_primer also ensures that talented programmers are employed at great startups :-)
|
12
|
+
|
13
|
+
== Links
|
14
|
+
|
15
|
+
* {Source on Github}[https://github.com/mattgibb/funding_primer]
|
16
|
+
* {<img src="https://travis-ci.org/mattgibb/funding_primer.png" />}[https://travis-ci.org/mattgibb/funding_primer]
|
17
|
+
* RDoc[http://rubydoc.info/github/mattgibb/funding_primer]
|
18
|
+
|
19
|
+
== Install
|
20
|
+
|
21
|
+
Add this line to your application's Gemfile:
|
22
|
+
|
23
|
+
gem 'funding_primer'
|
24
|
+
|
25
|
+
And then execute:
|
26
|
+
|
27
|
+
$ bundle
|
28
|
+
|
29
|
+
Or install it yourself as:
|
30
|
+
|
31
|
+
$ gem install funding_primer
|
32
|
+
|
33
|
+
== Examples
|
34
|
+
|
35
|
+
== Contributing
|
36
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
def dump_load_path
|
2
|
+
puts $LOAD_PATH.join("\n")
|
3
|
+
found = nil
|
4
|
+
$LOAD_PATH.each do |path|
|
5
|
+
if File.exists?(File.join(path,"rspec"))
|
6
|
+
puts "Found rspec in #{path}"
|
7
|
+
if File.exists?(File.join(path,"rspec","core"))
|
8
|
+
puts "Found core"
|
9
|
+
if File.exists?(File.join(path,"rspec","core","rake_task"))
|
10
|
+
puts "Found rake_task"
|
11
|
+
found = path
|
12
|
+
else
|
13
|
+
puts "!! no rake_task"
|
14
|
+
end
|
15
|
+
else
|
16
|
+
puts "!!! no core"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
if found.nil?
|
21
|
+
puts "Didn't find rspec/core/rake_task anywhere"
|
22
|
+
else
|
23
|
+
puts "Found in #{path}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
require 'bundler'
|
27
|
+
require 'rake/clean'
|
28
|
+
|
29
|
+
begin
|
30
|
+
require 'rspec/core/rake_task'
|
31
|
+
rescue LoadError
|
32
|
+
dump_load_path
|
33
|
+
raise
|
34
|
+
end
|
35
|
+
|
36
|
+
require 'cucumber'
|
37
|
+
require 'cucumber/rake/task'
|
38
|
+
gem 'rdoc' # we need the installed RDoc gem, not the system one
|
39
|
+
require 'rdoc/task'
|
40
|
+
|
41
|
+
include Rake::DSL
|
42
|
+
|
43
|
+
Bundler::GemHelper.install_tasks
|
44
|
+
|
45
|
+
|
46
|
+
RSpec::Core::RakeTask.new do |t|
|
47
|
+
# Put spec opts in a file named .rspec in root
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
CUKE_RESULTS = 'results.html'
|
52
|
+
CLEAN << CUKE_RESULTS
|
53
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
54
|
+
t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty --no-source -x"
|
55
|
+
t.fork = false
|
56
|
+
end
|
57
|
+
|
58
|
+
Rake::RDocTask.new do |rd|
|
59
|
+
|
60
|
+
rd.main = "README.rdoc"
|
61
|
+
|
62
|
+
rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
|
63
|
+
end
|
64
|
+
|
65
|
+
task :default => [:spec,:features]
|
66
|
+
|
67
|
+
require 'fileutils'
|
68
|
+
include FileUtils::Verbose
|
69
|
+
|
70
|
+
desc "Generate man page from README.md"
|
71
|
+
task :man do
|
72
|
+
cp 'README.md', 'man/funding_primer.1.ronn'
|
73
|
+
system "ronn --organization='Matt Gibb' man/funding_primer.1.ronn"
|
74
|
+
rm 'man/funding_primer.1.ronn'
|
75
|
+
end
|
data/bin/funding_primer
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require 'methadone'
|
5
|
+
require 'funding_primer'
|
6
|
+
|
7
|
+
class App
|
8
|
+
include FundingPrimer
|
9
|
+
include Methadone::Main
|
10
|
+
include Methadone::CLILogging
|
11
|
+
|
12
|
+
main do |number_of_primes=10|
|
13
|
+
matrix = MultiplicationTable.new(1..Integer(number_of_primes)).with_headings
|
14
|
+
formatter = Format::Table.new(matrix)
|
15
|
+
formatter.print
|
16
|
+
end
|
17
|
+
|
18
|
+
# supplemental methods here
|
19
|
+
|
20
|
+
# Declare command-line interface here
|
21
|
+
|
22
|
+
description "Multiplication tables for prime numbers!"
|
23
|
+
#
|
24
|
+
# Accept flags via:
|
25
|
+
# on("--flag VAL","Some flag")
|
26
|
+
# options[flag] will contain VAL
|
27
|
+
#
|
28
|
+
# Specify switches via:
|
29
|
+
# on("--[no-]switch","Some switch")
|
30
|
+
#
|
31
|
+
# Or, just call OptionParser methods on opts
|
32
|
+
#
|
33
|
+
# Optionally specify the number of primes
|
34
|
+
arg :number_of_primes, :optional
|
35
|
+
|
36
|
+
version FundingPrimer::VERSION
|
37
|
+
|
38
|
+
use_log_level_option
|
39
|
+
|
40
|
+
go!
|
41
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Feature: Funding Primer outputs a table of prime numbers
|
2
|
+
In order to see that the future employee can follow instructions
|
3
|
+
As head of technical recruitment
|
4
|
+
I want to run the app with default settings
|
5
|
+
|
6
|
+
Scenario: Generate table to stdout
|
7
|
+
When I run `funding_primer`
|
8
|
+
Then the output should contain exactly:
|
9
|
+
"""
|
10
|
+
+----+----+----+----+----+----+----+----+----+----+-----+
|
11
|
+
| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|
12
|
+
+----+----+----+----+----+----+----+----+----+----+-----+
|
13
|
+
| 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|
14
|
+
+----+----+----+----+----+----+----+----+----+----+-----+
|
15
|
+
| 2 | 2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 |
|
16
|
+
+----+----+----+----+----+----+----+----+----+----+-----+
|
17
|
+
| 3 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 24 | 27 | 30 |
|
18
|
+
+----+----+----+----+----+----+----+----+----+----+-----+
|
19
|
+
| 4 | 4 | 8 | 12 | 16 | 20 | 24 | 28 | 32 | 36 | 40 |
|
20
|
+
+----+----+----+----+----+----+----+----+----+----+-----+
|
21
|
+
| 5 | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 |
|
22
|
+
+----+----+----+----+----+----+----+----+----+----+-----+
|
23
|
+
| 6 | 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 60 |
|
24
|
+
+----+----+----+----+----+----+----+----+----+----+-----+
|
25
|
+
| 7 | 7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 | 63 | 70 |
|
26
|
+
+----+----+----+----+----+----+----+----+----+----+-----+
|
27
|
+
| 8 | 8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 | 80 |
|
28
|
+
+----+----+----+----+----+----+----+----+----+----+-----+
|
29
|
+
| 9 | 9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 | 81 | 90 |
|
30
|
+
+----+----+----+----+----+----+----+----+----+----+-----+
|
31
|
+
| 10 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100 |
|
32
|
+
+----+----+----+----+----+----+----+----+----+----+-----+
|
33
|
+
|
34
|
+
"""
|
35
|
+
And the exit status should be 0
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Feature: Funding Primer gives some basic help
|
2
|
+
In order to understand quickly what the future employee has built
|
3
|
+
As head of technical recruitment
|
4
|
+
I want to access a basic help message
|
5
|
+
|
6
|
+
Scenario: App gives a help message
|
7
|
+
When I get help for "funding_primer"
|
8
|
+
Then the exit status should be 0
|
9
|
+
And the banner should be present
|
10
|
+
And the banner should include the version
|
11
|
+
And the banner should document that this app takes options
|
12
|
+
And the banner should document that this app's arguments are:
|
13
|
+
|number_of_primes|optional|
|
14
|
+
And there should be a one line summary of what the app does
|
15
|
+
And the following options should be documented:
|
16
|
+
|--version|
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Feature: Output a user-specified number of primes
|
2
|
+
In order to fit the primes nicely on my device's screen
|
3
|
+
As a mobile user
|
4
|
+
I want to specify the size of the matrix
|
5
|
+
|
6
|
+
Scenario: Generate small table to stdout
|
7
|
+
When I run `funding_primer 3`
|
8
|
+
Then the output should contain exactly:
|
9
|
+
"""
|
10
|
+
+---+---+---+---+
|
11
|
+
| | 1 | 2 | 3 |
|
12
|
+
+---+---+---+---+
|
13
|
+
| 1 | 1 | 2 | 3 |
|
14
|
+
+---+---+---+---+
|
15
|
+
| 2 | 2 | 4 | 6 |
|
16
|
+
+---+---+---+---+
|
17
|
+
| 3 | 3 | 6 | 9 |
|
18
|
+
+---+---+---+---+
|
19
|
+
|
20
|
+
"""
|
21
|
+
And the exit status should be 0
|
File without changes
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'aruba/cucumber'
|
2
|
+
require 'methadone/cucumber'
|
3
|
+
|
4
|
+
ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
|
5
|
+
LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)),'..','..','lib')
|
6
|
+
|
7
|
+
Before do
|
8
|
+
# Using "announce" causes massive warnings on 1.9.2
|
9
|
+
@puts = true
|
10
|
+
@original_rubylib = ENV['RUBYLIB']
|
11
|
+
ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
|
12
|
+
end
|
13
|
+
|
14
|
+
After do
|
15
|
+
ENV['RUBYLIB'] = @original_rubylib
|
16
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/funding_primer/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.author = "Matt Gibb"
|
6
|
+
gem.email = ["matt@mattgibb.com"]
|
7
|
+
gem.summary = %q{Multiplication tables for prime numbers!}
|
8
|
+
gem.description = %q{In order to visualise the products of two prime numbers, funding_primer will print out a table of prime products.}
|
9
|
+
gem.homepage = "http://github.com/mattgibb/funding_primer"
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "funding_primer"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = FundingPrimer::VERSION
|
17
|
+
gem.add_development_dependency('rspec')
|
18
|
+
gem.add_development_dependency('rdoc')
|
19
|
+
gem.add_development_dependency('aruba')
|
20
|
+
gem.add_development_dependency('rake', '~> 0.9.2')
|
21
|
+
gem.add_dependency('methadone', '~> 1.2.2')
|
22
|
+
gem.add_dependency('terminal-table', '~> 1.4.5')
|
23
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module FundingPrimer
|
2
|
+
# <tt>FundingPrimer::Format</tt> is a module to store classes that format the prime number output.
|
3
|
+
#
|
4
|
+
# All formatter classes employ the {Strategy Pattern}[http://en.wikipedia.org/wiki/Strategy_pattern].
|
5
|
+
# That is, they expose exactly the same interface, and only differ in their implementation. This
|
6
|
+
# allows the format of the output to be chosen dynamically, simply by choosing a formatter class.
|
7
|
+
module Format
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'funding_primer/format/table'
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'terminal-table'
|
2
|
+
|
3
|
+
module FundingPrimer
|
4
|
+
module Format
|
5
|
+
class Table
|
6
|
+
# store the output and initialize the table with row separators
|
7
|
+
def initialize(array,output=STDOUT)
|
8
|
+
@output = output
|
9
|
+
@table = Terminal::Table.new do |t|
|
10
|
+
# add each row apart from the last one with a separator
|
11
|
+
array[0..-2].each do |row|
|
12
|
+
t.add_row row
|
13
|
+
t.add_separator
|
14
|
+
end
|
15
|
+
|
16
|
+
# add the last row without a separator
|
17
|
+
t.add_row array.last
|
18
|
+
end
|
19
|
+
|
20
|
+
# set left and right alignments of columns
|
21
|
+
# @table.align_column
|
22
|
+
end
|
23
|
+
|
24
|
+
def print
|
25
|
+
@output.puts @table
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module FundingPrimer
|
2
|
+
# <tt>FundingPrimer::MultiplicationTable</tt> is a 2-dimensional multiplication table of an enumerator of numbers.
|
3
|
+
#
|
4
|
+
# It can be thought of as the Cartesian product of a vector with itself, plus some optional headings
|
5
|
+
#
|
6
|
+
class MultiplicationTable
|
7
|
+
def initialize(numbers)
|
8
|
+
@numbers = numbers.to_a
|
9
|
+
end
|
10
|
+
|
11
|
+
# produces and caches a raw 2D array of pair-wise products from @numbers
|
12
|
+
#
|
13
|
+
# Example:
|
14
|
+
#
|
15
|
+
# FundingPrimer::MultiplicationTable.new(1..3).raw_array
|
16
|
+
# # => [[1,2,3],
|
17
|
+
# # [2,4,6],
|
18
|
+
# # [3,6,9]]
|
19
|
+
def raw_array
|
20
|
+
@raw_array ||= @numbers.product(@numbers).map {|pair| pair.inject :*}.each_slice(@numbers.length).to_a
|
21
|
+
end
|
22
|
+
|
23
|
+
# produces an array with row and column headings
|
24
|
+
#
|
25
|
+
# Example:
|
26
|
+
#
|
27
|
+
# FundingPrimer::MultiplicationTable.new(1..3).with_headings
|
28
|
+
# # => [[nil,1,2,3],
|
29
|
+
# # [1, 1,2,3],
|
30
|
+
# # [2, 2,4,6],
|
31
|
+
# [3, 3,6,9]]
|
32
|
+
def with_headings
|
33
|
+
column_headings = [nil].concat @numbers
|
34
|
+
array_with_row_headings = @numbers.zip(raw_array).map &:flatten
|
35
|
+
array_with_row_headings.unshift column_headings
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
module FundingPrimer
|
2
|
+
# FundingPrimer::Prime encapsulates the logic to generate prime numbers
|
3
|
+
class Prime
|
4
|
+
# Generates the first +n+ prime numbers. For example:
|
5
|
+
#
|
6
|
+
# FundingPrimer::Prime.first(3)
|
7
|
+
# # => [2,3,5]
|
8
|
+
def self.first(n, generator=TrialDivisionGenerator.new)
|
9
|
+
generator.first(n)
|
10
|
+
end
|
11
|
+
|
12
|
+
class BaseGenerator
|
13
|
+
# returns the first +n+ primes in an array. For example:
|
14
|
+
#
|
15
|
+
# first(3)
|
16
|
+
# # => [2,3,5]
|
17
|
+
#
|
18
|
+
# <tt>BaseGenerator#first(n)</tt> raises +NotImplementedError+.
|
19
|
+
def first(n)
|
20
|
+
raise NotImplementedError, "need to define `succ'"
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
# Tests for primality explicitly by brute force
|
26
|
+
#
|
27
|
+
# Modulo 2 and 3 optimisations are exploited, as well as
|
28
|
+
# testing possible prime factors only up to the square
|
29
|
+
# root of the prime candidate
|
30
|
+
class TrialDivisionGenerator < BaseGenerator
|
31
|
+
# start off @primes with 2 and 3, after which
|
32
|
+
#
|
33
|
+
# 6k ± 1, k > 0
|
34
|
+
#
|
35
|
+
# are the only candidates that are not divisible by 2 or 3
|
36
|
+
def initialize
|
37
|
+
@primes = [2,3]
|
38
|
+
@candidate = 5
|
39
|
+
@jump = 4 # jump to next candidate
|
40
|
+
# start from 5, since factors of 2 and 3 are not checked
|
41
|
+
@biggest_candidate_factor_index = 3
|
42
|
+
@next_biggest_candidate_factor_squared = 121 # 11 squared
|
43
|
+
end
|
44
|
+
|
45
|
+
# Lazily generates each successive prime that hasn't been cached yet
|
46
|
+
def first(n)
|
47
|
+
while n > @primes.length
|
48
|
+
# if necessary, add 1 extra prime to the factors that are tested
|
49
|
+
expand_candidate_factors
|
50
|
+
|
51
|
+
# append a truly prime number
|
52
|
+
append_candidate_to_primes
|
53
|
+
|
54
|
+
jump_to_next_candidate
|
55
|
+
end
|
56
|
+
|
57
|
+
@primes.take(n)
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
# Only prime factors up to the square root of the potential primes are checked.
|
62
|
+
# but without the performance hit of an actual square root calculation.
|
63
|
+
def expand_candidate_factors
|
64
|
+
if @candidate > @next_biggest_candidate_factor_squared
|
65
|
+
@biggest_candidate_factor_index += 1
|
66
|
+
@next_biggest_candidate_factor_squared = @primes[@biggest_candidate_factor_index + 1] ** 2
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# if the candidate is prime, add it to @primes
|
71
|
+
def append_candidate_to_primes
|
72
|
+
unless @primes[2..@biggest_candidate_factor_index].find {|prime| @candidate % prime == 0 }
|
73
|
+
@primes.push @candidate
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# jump is always either 2 or 4 to next candidate not divisible by 2 or 3
|
78
|
+
def jump_to_next_candidate
|
79
|
+
@candidate += @jump = 6 - @jump
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
class PrimorialGenerator < BaseGenerator
|
84
|
+
# Calculates the primorial of the integer +n+.
|
85
|
+
# That is, the product of the first n prime numbers.
|
86
|
+
#
|
87
|
+
# Raises an IndexError like <tt>Array#fetch</tt> if +n+ primes
|
88
|
+
# haven't been calculated and cached yet, since this function
|
89
|
+
# is intended to be used to calculate primes much bigger than +n+.
|
90
|
+
#
|
91
|
+
# NOTE: Some define primorial as the product of all of the
|
92
|
+
# prime numbers less than or equal to +n+. In this case, the
|
93
|
+
# implementation would be
|
94
|
+
#
|
95
|
+
# @primes.take_while {|p| p <= n }.inject :*
|
96
|
+
#
|
97
|
+
def primorial(n)
|
98
|
+
raise IndexError if n > @primes.length
|
99
|
+
@primes.take(n).inject(:*)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
@@ -0,0 +1,85 @@
|
|
1
|
+
.\" generated with Ronn/v0.7.3
|
2
|
+
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
|
+
.
|
4
|
+
.TH "FUNDING_PRIMER" "1" "November 2012" "Matt Gibb" ""
|
5
|
+
Multiplication tables for prime numbers!
|
6
|
+
.
|
7
|
+
.P
|
8
|
+
In order to visualise the products of two prime numbers, funding_primer prints out a table of prime products\.
|
9
|
+
.
|
10
|
+
.P
|
11
|
+
In an arguable violation of the UNIX Philosophy \fIhttp://en\.wikipedia\.org/wiki/Unix_philosophy\fR and the Single Responsibility Principle \fIhttp://en\.wikipedia\.org/wiki/Single_responsibility_principle\fR, funding_primer also ensures that talented programmers are employed at great startups :\-)
|
12
|
+
.
|
13
|
+
.SH "Build Status"
|
14
|
+
\fIhttps://travis\-ci\.org/mattgibb/funding_primer\fR
|
15
|
+
.
|
16
|
+
.SH "Installation"
|
17
|
+
Add this line to your application\'s Gemfile:
|
18
|
+
.
|
19
|
+
.IP "" 4
|
20
|
+
.
|
21
|
+
.nf
|
22
|
+
|
23
|
+
gem \'funding_primer\'
|
24
|
+
.
|
25
|
+
.fi
|
26
|
+
.
|
27
|
+
.IP "" 0
|
28
|
+
.
|
29
|
+
.P
|
30
|
+
And then execute:
|
31
|
+
.
|
32
|
+
.IP "" 4
|
33
|
+
.
|
34
|
+
.nf
|
35
|
+
|
36
|
+
$ bundle
|
37
|
+
.
|
38
|
+
.fi
|
39
|
+
.
|
40
|
+
.IP "" 0
|
41
|
+
.
|
42
|
+
.P
|
43
|
+
Or install it yourself as:
|
44
|
+
.
|
45
|
+
.IP "" 4
|
46
|
+
.
|
47
|
+
.nf
|
48
|
+
|
49
|
+
$ gem install funding_primer
|
50
|
+
.
|
51
|
+
.fi
|
52
|
+
.
|
53
|
+
.IP "" 0
|
54
|
+
.
|
55
|
+
.SH "Usage"
|
56
|
+
TODO: Write usage instructions here
|
57
|
+
.
|
58
|
+
.SH "Help"
|
59
|
+
.
|
60
|
+
.nf
|
61
|
+
|
62
|
+
funding_primer \-\-help
|
63
|
+
man funding_primer
|
64
|
+
.
|
65
|
+
.fi
|
66
|
+
.
|
67
|
+
.SH "Contributing"
|
68
|
+
.
|
69
|
+
.IP "1." 4
|
70
|
+
Fork it
|
71
|
+
.
|
72
|
+
.IP "2." 4
|
73
|
+
Create your feature branch (\fBgit checkout \-b my\-new\-feature\fR)
|
74
|
+
.
|
75
|
+
.IP "3." 4
|
76
|
+
Commit your changes (\fBgit commit \-am \'Added some feature\'\fR)
|
77
|
+
.
|
78
|
+
.IP "4." 4
|
79
|
+
Push to the branch (\fBgit push origin my\-new\-feature\fR)
|
80
|
+
.
|
81
|
+
.IP "5." 4
|
82
|
+
Create new Pull Request
|
83
|
+
.
|
84
|
+
.IP "" 0
|
85
|
+
|
@@ -0,0 +1,127 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv='content-type' value='text/html;charset=utf8'>
|
5
|
+
<meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
|
6
|
+
<title>funding_primer(1) - FundingPrimer</title>
|
7
|
+
<style type='text/css' media='all'>
|
8
|
+
/* style: man */
|
9
|
+
body#manpage {margin:0}
|
10
|
+
.mp {max-width:100ex;padding:0 9ex 1ex 4ex}
|
11
|
+
.mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
|
12
|
+
.mp h2 {margin:10px 0 0 0}
|
13
|
+
.mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
|
14
|
+
.mp h3 {margin:0 0 0 4ex}
|
15
|
+
.mp dt {margin:0;clear:left}
|
16
|
+
.mp dt.flush {float:left;width:8ex}
|
17
|
+
.mp dd {margin:0 0 0 9ex}
|
18
|
+
.mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
|
19
|
+
.mp pre {margin-bottom:20px}
|
20
|
+
.mp pre+h2,.mp pre+h3 {margin-top:22px}
|
21
|
+
.mp h2+pre,.mp h3+pre {margin-top:5px}
|
22
|
+
.mp img {display:block;margin:auto}
|
23
|
+
.mp h1.man-title {display:none}
|
24
|
+
.mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
|
25
|
+
.mp h2 {font-size:16px;line-height:1.25}
|
26
|
+
.mp h1 {font-size:20px;line-height:2}
|
27
|
+
.mp {text-align:justify;background:#fff}
|
28
|
+
.mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
|
29
|
+
.mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
|
30
|
+
.mp u {text-decoration:underline}
|
31
|
+
.mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
|
32
|
+
.mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
|
33
|
+
.mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
|
34
|
+
.mp b.man-ref {font-weight:normal;color:#434241}
|
35
|
+
.mp pre {padding:0 4ex}
|
36
|
+
.mp pre code {font-weight:normal;color:#434241}
|
37
|
+
.mp h2+pre,h3+pre {padding-left:0}
|
38
|
+
ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
|
39
|
+
ol.man-decor {width:100%}
|
40
|
+
ol.man-decor li.tl {text-align:left}
|
41
|
+
ol.man-decor li.tc {text-align:center;letter-spacing:4px}
|
42
|
+
ol.man-decor li.tr {text-align:right;float:right}
|
43
|
+
</style>
|
44
|
+
</head>
|
45
|
+
<!--
|
46
|
+
The following styles are deprecated and will be removed at some point:
|
47
|
+
div#man, div#man ol.man, div#man ol.head, div#man ol.man.
|
48
|
+
|
49
|
+
The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
|
50
|
+
.man-navigation should be used instead.
|
51
|
+
-->
|
52
|
+
<body id='manpage'>
|
53
|
+
<div class='mp' id='man'>
|
54
|
+
|
55
|
+
<div class='man-navigation' style='display:none'>
|
56
|
+
<a href="#Build-Status">Build Status</a>
|
57
|
+
<a href="#Installation">Installation</a>
|
58
|
+
<a href="#Usage">Usage</a>
|
59
|
+
<a href="#Help">Help</a>
|
60
|
+
<a href="#Contributing">Contributing</a>
|
61
|
+
</div>
|
62
|
+
|
63
|
+
<ol class='man-decor man-head man head'>
|
64
|
+
<li class='tl'>funding_primer(1)</li>
|
65
|
+
<li class='tc'></li>
|
66
|
+
<li class='tr'>funding_primer(1)</li>
|
67
|
+
</ol>
|
68
|
+
|
69
|
+
<h1>FundingPrimer</h1>
|
70
|
+
<p>Multiplication tables for prime numbers!</p>
|
71
|
+
|
72
|
+
<p>In order to visualise the products of two prime numbers, funding_primer prints out a table of prime products.</p>
|
73
|
+
|
74
|
+
<p>In an arguable violation of the <a href="http://en.wikipedia.org/wiki/Unix_philosophy">UNIX Philosophy</a> and the <a href="http://en.wikipedia.org/wiki/Single_responsibility_principle">Single Responsibility Principle</a>, funding_primer also ensures that talented programmers are employed at great startups :-)</p>
|
75
|
+
|
76
|
+
<h2 id="Build-Status">Build Status</h2>
|
77
|
+
|
78
|
+
<p><a href="https://travis-ci.org/mattgibb/funding_primer"><img src="https://travis-ci.org/mattgibb/funding_primer.png" alt="Build Status" /></a></p>
|
79
|
+
|
80
|
+
<h2 id="Installation">Installation</h2>
|
81
|
+
|
82
|
+
<p>Add this line to your application's Gemfile:</p>
|
83
|
+
|
84
|
+
<pre><code>gem 'funding_primer'
|
85
|
+
</code></pre>
|
86
|
+
|
87
|
+
<p>And then execute:</p>
|
88
|
+
|
89
|
+
<pre><code>$ bundle
|
90
|
+
</code></pre>
|
91
|
+
|
92
|
+
<p>Or install it yourself as:</p>
|
93
|
+
|
94
|
+
<pre><code>$ gem install funding_primer
|
95
|
+
</code></pre>
|
96
|
+
|
97
|
+
<h2 id="Usage">Usage</h2>
|
98
|
+
|
99
|
+
<p>TODO: Write usage instructions here</p>
|
100
|
+
|
101
|
+
<h2 id="Help">Help</h2>
|
102
|
+
|
103
|
+
<pre><code>funding_primer --help
|
104
|
+
man funding_primer
|
105
|
+
</code></pre>
|
106
|
+
|
107
|
+
<h2 id="Contributing">Contributing</h2>
|
108
|
+
|
109
|
+
<ol>
|
110
|
+
<li>Fork it</li>
|
111
|
+
<li>Create your feature branch (<code>git checkout -b my-new-feature</code>)</li>
|
112
|
+
<li>Commit your changes (<code>git commit -am 'Added some feature'</code>)</li>
|
113
|
+
<li>Push to the branch (<code>git push origin my-new-feature</code>)</li>
|
114
|
+
<li>Create new Pull Request</li>
|
115
|
+
</ol>
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
<ol class='man-decor man-foot man foot'>
|
120
|
+
<li class='tl'>Matt Gibb</li>
|
121
|
+
<li class='tc'>November 2012</li>
|
122
|
+
<li class='tr'>funding_primer(1)</li>
|
123
|
+
</ol>
|
124
|
+
|
125
|
+
</div>
|
126
|
+
</body>
|
127
|
+
</html>
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# FundingPrimer
|
2
|
+
|
3
|
+
Multiplication tables for prime numbers!
|
4
|
+
|
5
|
+
In order to visualise the products of two prime numbers, funding_primer prints out a table of prime products.
|
6
|
+
|
7
|
+
In an arguable violation of the [UNIX Philosophy](http://en.wikipedia.org/wiki/Unix_philosophy) and the [Single Responsibility Principle](http://en.wikipedia.org/wiki/Single_responsibility_principle), funding_primer also ensures that talented programmers are employed at great startups :-)
|
8
|
+
|
9
|
+
## Build Status
|
10
|
+
|
11
|
+
[![Build Status](https://travis-ci.org/mattgibb/funding_primer.png)](https://travis-ci.org/mattgibb/funding_primer)
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
Add this line to your application's Gemfile:
|
16
|
+
|
17
|
+
gem 'funding_primer'
|
18
|
+
|
19
|
+
And then execute:
|
20
|
+
|
21
|
+
$ bundle
|
22
|
+
|
23
|
+
Or install it yourself as:
|
24
|
+
|
25
|
+
$ gem install funding_primer
|
26
|
+
|
27
|
+
## Usage
|
28
|
+
|
29
|
+
TODO: Write usage instructions here
|
30
|
+
|
31
|
+
## Help
|
32
|
+
|
33
|
+
funding_primer --help
|
34
|
+
man funding_primer
|
35
|
+
|
36
|
+
## Contributing
|
37
|
+
|
38
|
+
1. Fork it
|
39
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
40
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
41
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
42
|
+
5. Create new Pull Request
|
43
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'funding_primer/format/table'
|
2
|
+
require 'stringio'
|
3
|
+
|
4
|
+
include FundingPrimer::Format
|
5
|
+
|
6
|
+
describe Table do
|
7
|
+
it 'prints out a table' do
|
8
|
+
@array = [["1","2"],["3","4"]]
|
9
|
+
@io = StringIO.new
|
10
|
+
@table = Table.new @array, @io
|
11
|
+
@table.print
|
12
|
+
@io.string.should eql <<-EOS
|
13
|
+
+---+---+
|
14
|
+
| 1 | 2 |
|
15
|
+
+---+---+
|
16
|
+
| 3 | 4 |
|
17
|
+
+---+---+
|
18
|
+
EOS
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'funding_primer/multiplication_table'
|
2
|
+
|
3
|
+
describe FundingPrimer::MultiplicationTable do
|
4
|
+
subject { FundingPrimer::MultiplicationTable.new 1..3 }
|
5
|
+
|
6
|
+
it 'produces a raw 2D array of pair-wise products' do
|
7
|
+
subject.raw_array.should eql [[1,2,3],
|
8
|
+
[2,4,6],
|
9
|
+
[3,6,9]]
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'produces an array with row and column headings' do
|
13
|
+
subject.with_headings.should eql [[nil,1,2,3],
|
14
|
+
[1, 1,2,3],
|
15
|
+
[2, 2,4,6],
|
16
|
+
[3, 3,6,9]]
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/spec/prime_spec.rb
ADDED
metadata
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: funding_primer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Matt Gibb
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-11-21 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rdoc
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: aruba
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rake
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.9.2
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.9.2
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: methadone
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 1.2.2
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 1.2.2
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: terminal-table
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 1.4.5
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.4.5
|
110
|
+
description: In order to visualise the products of two prime numbers, funding_primer
|
111
|
+
will print out a table of prime products.
|
112
|
+
email:
|
113
|
+
- matt@mattgibb.com
|
114
|
+
executables:
|
115
|
+
- funding_primer
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- .gitignore
|
120
|
+
- .rvmrc
|
121
|
+
- .travis.yml
|
122
|
+
- Gemfile
|
123
|
+
- Gemfile.lock
|
124
|
+
- LICENSE
|
125
|
+
- README.md
|
126
|
+
- README.rdoc
|
127
|
+
- Rakefile
|
128
|
+
- bin/funding_primer
|
129
|
+
- features/basic_table.feature
|
130
|
+
- features/help.feature
|
131
|
+
- features/set_the_size.feature
|
132
|
+
- features/step_definitions/funding_primer_steps.rb
|
133
|
+
- features/support/env.rb
|
134
|
+
- funding_primer.gemspec
|
135
|
+
- lib/funding_primer.rb
|
136
|
+
- lib/funding_primer/format.rb
|
137
|
+
- lib/funding_primer/format/table.rb
|
138
|
+
- lib/funding_primer/multiplication_table.rb
|
139
|
+
- lib/funding_primer/prime.rb
|
140
|
+
- lib/funding_primer/version.rb
|
141
|
+
- man/funding_primer.1
|
142
|
+
- man/funding_primer.1.html
|
143
|
+
- man/funding_primer.1.ronn
|
144
|
+
- spec/format/table_spec.rb
|
145
|
+
- spec/multiplication_table_spec.rb
|
146
|
+
- spec/prime_spec.rb
|
147
|
+
homepage: http://github.com/mattgibb/funding_primer
|
148
|
+
licenses: []
|
149
|
+
post_install_message:
|
150
|
+
rdoc_options: []
|
151
|
+
require_paths:
|
152
|
+
- lib
|
153
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
155
|
+
requirements:
|
156
|
+
- - ! '>='
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
|
+
none: false
|
161
|
+
requirements:
|
162
|
+
- - ! '>='
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '0'
|
165
|
+
requirements: []
|
166
|
+
rubyforge_project:
|
167
|
+
rubygems_version: 1.8.24
|
168
|
+
signing_key:
|
169
|
+
specification_version: 3
|
170
|
+
summary: Multiplication tables for prime numbers!
|
171
|
+
test_files:
|
172
|
+
- features/basic_table.feature
|
173
|
+
- features/help.feature
|
174
|
+
- features/set_the_size.feature
|
175
|
+
- features/step_definitions/funding_primer_steps.rb
|
176
|
+
- features/support/env.rb
|
177
|
+
- spec/format/table_spec.rb
|
178
|
+
- spec/multiplication_table_spec.rb
|
179
|
+
- spec/prime_spec.rb
|