eulerplate 0.0.1 → 0.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 62c9793f2b58e133be8ad1ea11d4a91df6f91ccc
4
- data.tar.gz: 02cc001b66f7c1e0813ea0e514dd9da457918cb7
3
+ metadata.gz: 9cf6ee751d24ac9d62ba6a0799b86749c1ba62db
4
+ data.tar.gz: baa38ffea524ff0104a79c2fdc08c87998a0a7bc
5
5
  SHA512:
6
- metadata.gz: 457f38a6477742025d38cffbb8d4f6a780f4d0adce76b03893d77ba9a53834ace8f13c964b9d481779d0cbc234367e3d6e0e7e55f58c129639a5039c8cdcfffb
7
- data.tar.gz: cb771ce998871ce34cf01ce6fb7a765803de0ccf288cc8d7ab335170c845ed6d0f8514192e9188c52e595e247a2e635b52e2d4ca22b9ab0cfb9c4a1f609b7d8f
6
+ metadata.gz: f2213455f914417175555799410a708444890115919326c69e82e816b89871c11d485d57ea9b8705f9cdc80e8cc4c513ff79d6188581f7f0e3459d03b2b1a336
7
+ data.tar.gz: b7fdd605325c451fd802fafbf48678515ab09bf6b2d524826872dc3fb45f739b3f9a78fbce3cf38401a8bde3d6d0b536ac9b48b1e214fa26b0abfd2fbe188910
@@ -0,0 +1,3 @@
1
+ class SumSquareDifference
2
+
3
+ end
@@ -0,0 +1,26 @@
1
+ # PROBLEM 6: Sum square difference
2
+ # https://projecteuler.net/problem=6
3
+ #
4
+ # The sum of the squares of the first ten natural numbers is,
5
+ # 1^2 + 2^2 + ... + 10^2 = 385
6
+ # The square of the sum of the first ten natural numbers is,
7
+ # (1 + 2 + ... + 10)^2 = 55^2 = 3025
8
+ # Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is 3025 − 385 = 2640.
9
+ # Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.
10
+ #
11
+ # WRITE YOUR TESTS!
12
+
13
+
14
+ require_relative 'sum_square_difference'
15
+
16
+
17
+
18
+ require_relative 'sum_square_difference'
19
+
20
+ describe SumSquareDifference do
21
+ it 'verifies the example' do
22
+ skip 'write a test using the example given above'
23
+ end
24
+
25
+ it 'helps you find the solution'
26
+ end
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # Eulerplate
2
2
 
3
- An an API for querying Project Euler AND a command line tool for creating test folders.
4
-
5
- This is a fairly simple gem.
3
+ A command line gem for creating kata boilerplate—specs and folders—for Project Euler problems.
6
4
 
7
5
  ## Installation
8
6
 
@@ -14,17 +12,35 @@ To create a folder in the present working directory just type:
14
12
 
15
13
  $ eulerplate new PROBLEM_NUMBER
16
14
 
17
- for Problem 8, you will get a new directory:
15
+ for Problem 3, you will get a new directory:
18
16
 
19
- - **8-largest-product-in-a-series**
17
+ - **3-largest-prime-factor**
20
18
 
21
19
  And two files in that directory:
22
20
 
23
- - **largest_product_in_a_series.rb**
24
- - **largest_product_in_a_series_spec.rb**
25
-
26
- The spec file will come with a pending RSpec test requiring the ruby file.
27
-
21
+ - **largest_prime_factor_spec.rb** with the code:
22
+ ```ruby
23
+ # PROBLEM 3: Largest prime factor
24
+ # https://projecteuler.net/problem=3
25
+ #
26
+ # The prime factors of 13195 are 5, 7, 13 and 29.
27
+ # What is the largest prime factor of the number 600851475143 ?
28
+ #
29
+ # WRITE YOUR TESTS!
30
+ require_relative 'largest_prime_factor'
31
+
32
+ describe LargestPrimeFactor do
33
+ it 'verifies the example' do
34
+ skip 'write code to verify the example'
35
+ end
36
+ end
37
+ ```
38
+ - **largest_product_in_a_series_spec.rb** with the code:
39
+ ```ruby
40
+ class LargestPrimeFactor
41
+
42
+ end
43
+ ```
28
44
 
29
45
  ## Contributing
30
46
 
data/Rakefile CHANGED
@@ -1,2 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'cucumber'
3
+ require 'cucumber/rake/task'
4
+
5
+ Cucumber::Rake::Task.new(:features) do |t|
6
+ t.cucumber_opts = "features --format pretty"
7
+ end
2
8
 
data/eulerplate.gemspec CHANGED
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.7"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
23
  spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "cucumber"
25
+ spec.add_development_dependency "aruba"
24
26
  spec.add_runtime_dependency "nokogiri"
25
27
  spec.add_runtime_dependency "thor"
26
28
  end
@@ -0,0 +1,35 @@
1
+ Feature: Generating problem bootstraps
2
+ In order to easily create Euler problems
3
+ As a User
4
+ I want eulerplate to create folders and specs
5
+
6
+ Scenario: Folders
7
+ When I run `eulerplate new 3`
8
+ Then the following files should exist:
9
+ | 3-largest-prime-factor/largest_prime_factor.rb |
10
+ Then the file "3-largest-prime-factor/largest_prime_factor.rb" should contain:
11
+ """
12
+ class LargestPrimeFactor
13
+
14
+ end
15
+ """
16
+ Then the file "3-largest-prime-factor/largest_prime_factor_spec.rb" should contain:
17
+ """
18
+ # PROBLEM 3: Largest prime factor
19
+ # https://projecteuler.net/problem=3
20
+ #
21
+ # The prime factors of 13195 are 5, 7, 13 and 29.
22
+ # What is the largest prime factor of the number 600851475143 ?
23
+ #
24
+ # WRITE YOUR TESTS!
25
+
26
+ require_relative 'largest_prime_factor'
27
+
28
+ describe LargestPrimeFactor do
29
+ it 'verifies the example' do
30
+ skip 'write a test using the example given above'
31
+ end
32
+
33
+ it 'leads you toward the solution'
34
+ end
35
+ """
@@ -0,0 +1 @@
1
+ require 'aruba/cucumber'
@@ -5,15 +5,12 @@ module Eulerplate
5
5
 
6
6
  desc 'new NUMBER', 'creates a new file structure for problem NUMBER'
7
7
  def new(number)
8
- problem = Eulerplate::FolderCreator.new.for_problem(number)
9
- say "Created the folder:"
10
- say "./#{ problem.folder_name }", :green
11
- say "And the files:"
12
- say "#{ problem.ruby_file_name }", :green
13
- say "#{ problem.test_name }", :green
14
- say "for Problem #{ problem.number }: #{ problem.name }"
15
- rescue
16
- say "HEY: That folder already exists!", :bold
8
+ problem = Eulerplate::Problems.get(number)
9
+ Eulerplate::Generators::ProblemKit.start([problem])
10
+ end
11
+
12
+ def self.source_root
13
+ File.dirname(__FILE__) + "/templates"
17
14
  end
18
15
 
19
16
  end
@@ -0,0 +1,25 @@
1
+ module Eulerplate
2
+ module Generators
3
+ class ProblemKit < Thor::Group
4
+ include Thor::Actions
5
+
6
+ argument :problem
7
+
8
+ def self.source_root
9
+ File.dirname(__FILE__) + "/templates"
10
+ end
11
+
12
+ def create_folder
13
+ empty_directory(problem.folder_name)
14
+ end
15
+
16
+ def create_class_file
17
+ template("class_file.rb", "#{problem.folder_name}/#{problem.class_file_name}")
18
+ end
19
+
20
+ def create_spec_file
21
+ template("spec_file.rb", "#{problem.folder_name}/#{problem.spec_file_name}")
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ class <%= problem.class_name %>
2
+
3
+ end
@@ -0,0 +1,11 @@
1
+ <%= problem.spec_description %>
2
+
3
+ require_relative '<%= problem.snake_name %>'
4
+
5
+ describe <%= problem.class_name %> do
6
+ it 'verifies the example' do
7
+ skip 'write a test using the example given above'
8
+ end
9
+
10
+ it 'leads you toward the solution'
11
+ end
@@ -3,7 +3,7 @@ require 'nokogiri'
3
3
 
4
4
  module Eulerplate
5
5
  class Problems
6
- def problem(number)
6
+ def self.get(number)
7
7
  page = Nokogiri::HTML(open("https://projecteuler.net/problem=#{number}"))
8
8
  name = page.css('h2')[0].text
9
9
  number = page.css('#problem_info')[0].text.scan(/\d+/)[0].to_i
@@ -30,11 +30,11 @@ module Eulerplate
30
30
  result.join("-")
31
31
  end
32
32
 
33
- def test_name
33
+ def spec_file_name
34
34
  snake_name + "_spec.rb"
35
35
  end
36
36
 
37
- def ruby_file_name
37
+ def class_file_name
38
38
  snake_name + ".rb"
39
39
  end
40
40
 
@@ -44,7 +44,7 @@ module Eulerplate
44
44
  result.join("_")
45
45
  end
46
46
 
47
- def spec_body
47
+ def spec_description
48
48
  header = []
49
49
  header << "# PROBLEM #{number}: #{name}"
50
50
  header << "# https://projecteuler.net/problem=#{number}"
@@ -52,21 +52,7 @@ module Eulerplate
52
52
  header << problem.lines.map { |line| "# #{line}" }.join
53
53
  header << "#"
54
54
  header << "# WRITE YOUR TESTS!"
55
- header << "\n"
56
- header << "require_relative '#{snake_name}'"
57
- header << "\n"
58
- header << "describe #{class_name} do"
59
- header << " it 'verifies the example' do"
60
- header << " skip"
61
- header << " end"
62
- header << "end"
63
- end
64
-
65
- def ruby_body
66
- body = []
67
- body << "class #{class_name}"
68
- body << ""
69
- body << "end"
55
+ header.join("\n")
70
56
  end
71
57
 
72
58
  def class_name
@@ -1,3 +1,3 @@
1
1
  module Eulerplate
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/eulerplate.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require "eulerplate/problems"
2
2
  require "eulerplate/cli"
3
- require "eulerplate/folder_creator"
4
3
  require "eulerplate/version"
4
+ require "eulerplate/generators/problem_kit"
5
5
 
6
6
  module Eulerplate
7
7
  end
@@ -1,20 +1,20 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Eulerplate::Problems do
4
- let (:euler) { Eulerplate::Problems.new }
4
+ let (:problems) { Eulerplate::Problems }
5
5
 
6
6
  it 'knows the problem names' do
7
- name = euler.problem(9).name
7
+ name = problems.get(9).name
8
8
  expect(name).to eq "Special Pythagorean triplet"
9
9
  end
10
10
 
11
11
  it 'knows the problem numbers' do
12
- number = euler.problem(15).number
12
+ number = problems.get(15).number
13
13
  expect(number).to eq 15
14
14
  end
15
15
 
16
16
  it 'knows the problem content' do
17
- problem = euler.problem(9).problem
17
+ problem = problems.get(9).problem
18
18
  expect(problem).to eq ['A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,',
19
19
  'a^2 + b^2 = c^2',
20
20
  'For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.',
@@ -25,12 +25,12 @@ describe Eulerplate::Problems do
25
25
 
26
26
  describe '#class_name' do
27
27
  it 'strips the class name of special symbols' do
28
- class_name = euler.problem(43).class_name
28
+ class_name = problems.get(43).class_name
29
29
  expect(class_name).to eq "SubstringDivisibility"
30
30
  end
31
31
 
32
32
  it 'knows the class name' do
33
- class_name = euler.problem(7).class_name
33
+ class_name = problems.get(7).class_name
34
34
  expect(class_name).to eq "Euler10001stPrime"
35
35
  end
36
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eulerplate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kit Langton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-06 00:00:00.000000000 Z
11
+ date: 2015-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: cucumber
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: aruba
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: nokogiri
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -91,23 +119,27 @@ files:
91
119
  - ".gitignore"
92
120
  - ".rspec"
93
121
  - ".travis.yml"
122
+ - 6-sum-square-difference/sum_square_difference.rb
123
+ - 6-sum-square-difference/sum_square_difference_spec.rb
94
124
  - Gemfile
95
125
  - LICENSE.txt
96
126
  - README.md
97
127
  - Rakefile
98
128
  - bin/eulerplate
99
129
  - eulerplate.gemspec
130
+ - features/problem_bootstrap.feature
131
+ - features/support/env.rb
100
132
  - lib/eulerplate.rb
101
133
  - lib/eulerplate/cli.rb
102
134
  - lib/eulerplate/folder_creator.rb
135
+ - lib/eulerplate/generators/problem_kit.rb
136
+ - lib/eulerplate/generators/templates/class_file.rb.tt
137
+ - lib/eulerplate/generators/templates/spec_file.rb.tt
103
138
  - lib/eulerplate/problems.rb
104
139
  - lib/eulerplate/version.rb
105
140
  - spec/eulerplate_spec.rb
106
- - spec/folder_creator_spec.rb
107
141
  - spec/problems_spec.rb
108
142
  - spec/spec_helper.rb
109
- - spec/temp/example_test.rb
110
- - spec/temp/special_pythagorean_triplet.rb
111
143
  homepage: https://github.com/sudokill/eulerplate
112
144
  licenses:
113
145
  - MIT
@@ -128,14 +160,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
160
  version: '0'
129
161
  requirements: []
130
162
  rubyforge_project:
131
- rubygems_version: 2.4.5
163
+ rubygems_version: 2.4.1
132
164
  signing_key:
133
165
  specification_version: 4
134
166
  summary: API and command line tool for Project Euler
135
167
  test_files:
168
+ - features/problem_bootstrap.feature
169
+ - features/support/env.rb
136
170
  - spec/eulerplate_spec.rb
137
- - spec/folder_creator_spec.rb
138
171
  - spec/problems_spec.rb
139
172
  - spec/spec_helper.rb
140
- - spec/temp/example_test.rb
141
- - spec/temp/special_pythagorean_triplet.rb
@@ -1,27 +0,0 @@
1
- require 'spec_helper'
2
- require 'tmpdir'
3
-
4
- describe Eulerplate::FolderCreator do
5
- it 'creates a folder for a problem' do
6
- Dir.mktmpdir do |dir|
7
- test_dir = Dir.new(dir)
8
- fc = Eulerplate::FolderCreator.new(dir: test_dir)
9
- fc.for_problem(9)
10
- expect(test_dir.to_a).to include "9-special-pythagorean-triplet"
11
- end
12
- end
13
-
14
- it 'creates a spec file for the problem' do
15
- Dir.mktmpdir do |dir|
16
- test_dir = Dir.new(dir)
17
- test_file = File.open(File.join(__dir__,"/temp","/example_test.rb")).read
18
- example_ruby_file = File.open(File.join(__dir__,"/temp","/special_pythagorean_triplet.rb")).read
19
- fc = Eulerplate::FolderCreator.new(dir: test_dir)
20
- problem = fc.for_problem(9)
21
- spec_file = File.read(File.join(dir, problem.folder_name, problem.test_name))
22
- ruby_file = File.read(File.join(dir, problem.folder_name, problem.ruby_file_name))
23
- expect(spec_file).to eq test_file
24
- expect(ruby_file).to eq example_ruby_file
25
- end
26
- end
27
- end
@@ -1,18 +0,0 @@
1
- # PROBLEM 9: Special Pythagorean triplet
2
- # https://projecteuler.net/problem=9
3
- #
4
- # A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,
5
- # a^2 + b^2 = c^2
6
- # For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.
7
- # There exists exactly one Pythagorean triplet for which a + b + c = 1000.
8
- # Find the product abc.
9
- #
10
- # WRITE YOUR TESTS!
11
-
12
- require_relative 'special_pythagorean_triplet'
13
-
14
- describe SpecialPythagoreanTriplet do
15
- it 'verifies the example' do
16
- skip
17
- end
18
- end
@@ -1,3 +0,0 @@
1
- class SpecialPythagoreanTriplet
2
-
3
- end