eulerplate 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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