rubiks-cli 1.0.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 197c7fa7147a8f3fb0227d127d6d64d6338729d0377c0355382a0a66b6bcc995
4
+ data.tar.gz: 9a3ffff2994525091121016c68aff0ff6a3be0ca6dae41152e4408e7e732830c
5
+ SHA512:
6
+ metadata.gz: 9d3d468c20efceddf69dae6ebe9fe8441e072ddede45e6fe598643018173c4a96c4dba51c0de218e3df9015607c2e0b9b5f4faa8992a765e1a639a01484a2a19
7
+ data.tar.gz: 5e986f12bb70365f6d00ddc8c892059e3bfe983bb173733aafcedfe5937953939155734c1aa41f2466d9307295ecbb27afb811a7e41a76b05c59e99d18b13992
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.gem
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/clean"
3
+
4
+ task :build do
5
+ puts "Building gem..."
6
+ system "gem build rubiks-cli.gemspec"
7
+ end
8
+
9
+ task :install => :build do
10
+ puts "Installing gem..."
11
+ system "gem install rubiks-cli-*.gem"
12
+ end
13
+
14
+ task :clean do
15
+ puts "Cleaning up built gems..."
16
+ system "rm -f *.gem"
17
+ end
18
+
19
+ task :release => [:clean, :build] do
20
+ puts "Pushing to RubyGems..."
21
+ system "gem push rubiks-cli-*.gem"
22
+ end
data/bin/rubiks ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubiks_cli'
4
+
5
+ HELP = "Press Enter to start\nType 'q' to quit\nType 'n' for a new scramble"
6
+
7
+ cmd = 'n'
8
+
9
+ while true
10
+ RubiksCli::Timer.clear_screen
11
+ if cmd == ''
12
+ RubiksCli::Timer.start
13
+ cmd = 'n'
14
+ end
15
+
16
+ if cmd == 'n'
17
+ puts RubiksCli::Scrambler.get_scramble
18
+ elsif cmd.downcase == 'q'
19
+ break
20
+ else
21
+ puts HELP
22
+ end
23
+
24
+ cmd = gets.chomp
25
+ end
@@ -0,0 +1,31 @@
1
+ module RubiksCli
2
+ class Scrambler
3
+ LENGTH = 20
4
+ FACES = ['U', 'D', 'F', 'B', 'L', 'R']
5
+ SUFFIXES = [ '', '\'', '2' ]
6
+
7
+ def self.get_scramble
8
+ moves = []
9
+ second_to_last_face = ''
10
+ last_face = ''
11
+
12
+ LENGTH.times do |i|
13
+ next_move = ""
14
+ next_face = ''
15
+ begin
16
+ next_move = self.get_move
17
+ next_face = next_move[0]
18
+ end while next_face == second_to_last_face || next_face == last_face
19
+
20
+ moves[i] = next_move
21
+ second_to_last_face = last_face
22
+ last_face = next_face
23
+ end
24
+ moves.join(", ")
25
+ end
26
+
27
+ def self.get_move
28
+ FACES.sample + SUFFIXES.sample
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ require 'io/console'
2
+
3
+ module RubiksCli
4
+ class Timer
5
+
6
+ def self.clear_screen
7
+ system("clear") || system("cls")
8
+ end
9
+
10
+ def self.time
11
+ start = Time.now
12
+
13
+ STDIN.raw do
14
+ loop do
15
+ print "\r#{(Time.now - start).round(1)}"
16
+ break if STDIN.wait_readable(0.01)
17
+ end
18
+ STDIN.read_nonblock(1) rescue nil
19
+ end
20
+
21
+ return Time.now - start
22
+ end
23
+
24
+ def self.start
25
+ clear_screen
26
+ time = Timer.time
27
+ clear_screen
28
+ puts time.round(3)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,3 @@
1
+ module RubiksCli
2
+ VERSION = "1.0.0"
3
+ end
data/lib/rubiks_cli.rb ADDED
@@ -0,0 +1,6 @@
1
+ require_relative "rubiks_cli/version"
2
+ require_relative "rubiks_cli/scrambler"
3
+ require_relative "rubiks_cli/timer"
4
+
5
+ module RubiksCli
6
+ end
@@ -0,0 +1,26 @@
1
+ require_relative "lib/rubiks_cli/version"
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "rubiks-cli"
5
+ spec.version = RubiksCli::VERSION
6
+ spec.authors = ["Noah Scott"]
7
+ spec.email = ["noah.scott.24@ucl.ac.uk"]
8
+
9
+ spec.summary = "A command-line Rubik's Cube timer"
10
+ spec.description = "A simple CLI tool for timing Rubik's Cube solves"
11
+ spec.homepage = "https://github.com/noahsc0tt/rubiks-cli"
12
+ spec.license = "MIT"
13
+ spec.required_ruby_version = ">= 2.7.0"
14
+
15
+ spec.metadata["source_code_uri"] = spec.homepage
16
+
17
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
18
+ `git ls-files -z 2>/dev/null`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
19
+ end
20
+
21
+ spec.bindir = "bin"
22
+ spec.executables = ["rubiks"]
23
+ spec.require_paths = ["lib"]
24
+
25
+
26
+ end
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubiks-cli
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Noah Scott
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies: []
12
+ description: A simple CLI tool for timing Rubik's Cube solves
13
+ email:
14
+ - noah.scott.24@ucl.ac.uk
15
+ executables:
16
+ - rubiks
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - ".gitignore"
21
+ - Rakefile
22
+ - bin/rubiks
23
+ - lib/rubiks_cli.rb
24
+ - lib/rubiks_cli/scrambler.rb
25
+ - lib/rubiks_cli/timer.rb
26
+ - lib/rubiks_cli/version.rb
27
+ - rubiks-cli.gemspec
28
+ homepage: https://github.com/noahsc0tt/rubiks-cli
29
+ licenses:
30
+ - MIT
31
+ metadata:
32
+ source_code_uri: https://github.com/noahsc0tt/rubiks-cli
33
+ rdoc_options: []
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.7.0
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ requirements: []
47
+ rubygems_version: 3.7.2
48
+ specification_version: 4
49
+ summary: A command-line Rubik's Cube timer
50
+ test_files: []