codeless_code 0.1.7 → 0.1.8
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 +4 -4
- data/.gitmodules +1 -1
- data/.reek.yml +14 -0
- data/.rubocop.yml +18 -0
- data/.ruby-version +1 -0
- data/{test/test_codeless_code.rb → .travis.yml} +12 -10
- data/Gemfile +5 -0
- data/Gemfile.lock +21 -0
- data/Guardfile +13 -1
- data/README.md +6 -0
- data/Rakefile +26 -11
- data/VERSION +1 -1
- data/bin/codeless_code +3 -1
- data/codeless_code.gemspec +33 -12
- data/lib/codeless_code/catalog.rb +3 -1
- data/lib/codeless_code/cli.rb +56 -24
- data/lib/codeless_code/commands/filter_fables.rb +15 -10
- data/lib/codeless_code/commands/list_translations.rb +3 -0
- data/lib/codeless_code/fable.rb +42 -53
- data/lib/codeless_code/fable_set.rb +8 -6
- data/lib/codeless_code/filters/builders.rb +4 -2
- data/lib/codeless_code/filters/composite.rb +3 -1
- data/lib/codeless_code/filters/date.rb +40 -30
- data/lib/codeless_code/filters/from_options.rb +45 -28
- data/lib/codeless_code/filters/headers/base.rb +61 -0
- data/lib/codeless_code/filters/{header_integer.rb → headers/integer.rb} +16 -19
- data/lib/codeless_code/filters/{header_string.rb → headers/string.rb} +12 -22
- data/lib/codeless_code/filters/lang.rb +3 -0
- data/lib/codeless_code/filters/translator.rb +7 -2
- data/lib/codeless_code/filters.rb +16 -8
- data/lib/codeless_code/formats/base.rb +20 -7
- data/lib/codeless_code/formats/parsers/base.rb +106 -0
- data/lib/codeless_code/formats/parsers/plain.rb +49 -0
- data/lib/codeless_code/formats/parsers/term.rb +79 -0
- data/lib/codeless_code/formats/plain.rb +21 -12
- data/lib/codeless_code/formats/raw.rb +2 -0
- data/lib/codeless_code/formats/term.rb +21 -15
- data/lib/codeless_code/language_set.rb +7 -4
- data/lib/codeless_code/options.rb +5 -3
- data/lib/codeless_code/renderers/fable.rb +13 -8
- data/lib/codeless_code/renderers/term_page.rb +46 -31
- data/lib/codeless_code.rb +119 -106
- data/test/codeless_code/commands/test_filter_fables.rb +89 -0
- data/test/codeless_code/filters/headers/test_integer.rb +86 -0
- data/test/codeless_code/filters/headers/test_string.rb +86 -0
- data/test/codeless_code/filters/test_builders.rb +4 -2
- data/test/codeless_code/filters/test_composite.rb +70 -0
- data/test/codeless_code/filters/test_date.rb +99 -0
- data/test/codeless_code/filters/test_langs.rb +50 -0
- data/test/codeless_code/filters/test_translator.rb +51 -0
- data/test/codeless_code/renderers/test_fable.rb +98 -0
- data/test/codeless_code/renderers/test_term_page.rb +87 -0
- data/test/codeless_code/test_catalog.rb +12 -5
- data/test/codeless_code/test_cli.rb +85 -0
- data/test/codeless_code/test_fable.rb +19 -10
- data/test/codeless_code/test_fable_set.rb +17 -5
- data/test/codeless_code/test_language_set.rb +16 -3
- data/test/codeless_code/test_options.rb +3 -11
- data/test/helper.rb +36 -10
- data/test/support/fs.rb +103 -0
- metadata +65 -11
- data/.document +0 -5
- data/data/README.md +0 -34
- data/lib/codeless_code/formats/plain_generator.rb +0 -157
- data/lib/codeless_code/formats/term_generator.rb +0 -167
- data/test/codeless_code/filters/test_header_integer.rb +0 -82
- data/test/codeless_code/filters/test_header_string.rb +0 -82
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5154091052ec2023109ecdc022ec10fdfa3762dcec89f1dd2f6203acac57018d
|
4
|
+
data.tar.gz: f9eb3c12e08dd25885faf6d758d67e1020d324a8ce53ab7c77b486b001eeceb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bba85e6463c19551a62b0064af87905f0bc1781bcaf198591c2513b4157ae514cc0fd17e31da864683be25c599c7d4170250ecfee8a098c45df9caab6d40600d
|
7
|
+
data.tar.gz: 4d8b4f45d6511bac204a88bb5b936a5303da0d5bbed221bdfa0531e03ee45193bcce7ae3f959c5d3c1b41f8ea75359598a5d010a09e98393dfa57dfd9a1de525
|
data/.gitmodules
CHANGED
data/.reek.yml
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
---
|
2
|
+
exclude_paths:
|
3
|
+
- test
|
4
|
+
detectors:
|
5
|
+
DuplicateMethodCall:
|
6
|
+
enabled: false
|
7
|
+
NilCheck:
|
8
|
+
enabled: false
|
9
|
+
LongParameterList:
|
10
|
+
max_params: 4
|
11
|
+
UtilityFunction:
|
12
|
+
exclude:
|
13
|
+
- CodelessCode::Filters::Headers::Base
|
14
|
+
- CodelessCode::Filters::Date
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
AllCops:
|
2
|
+
Exclude:
|
3
|
+
- codeless_code.gemspec
|
4
|
+
- vendor/**/*
|
5
|
+
|
6
|
+
Metrics/BlockLength:
|
7
|
+
Exclude:
|
8
|
+
- lib/codeless_code.rb
|
9
|
+
|
10
|
+
Metrics/ModuleLength:
|
11
|
+
Exclude:
|
12
|
+
- lib/codeless_code.rb
|
13
|
+
|
14
|
+
Style/DoubleNegation:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Style/FormatStringToken:
|
18
|
+
Enabled: false
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.5.1
|
@@ -1,3 +1,4 @@
|
|
1
|
+
---
|
1
2
|
# codeless_code filters and prints fables from http://thecodelesscode.com
|
2
3
|
# Copyright (C) 2018 Jon Sangster
|
3
4
|
#
|
@@ -13,14 +14,15 @@
|
|
13
14
|
#
|
14
15
|
# You should have received a copy of the GNU General Public License along with
|
15
16
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
16
|
-
|
17
|
-
|
18
|
-
class TestCodelessCode < UnitTest
|
19
|
-
def test_data_dir
|
20
|
-
assert_kind_of Pathname, CodelessCode::DEFAULT_DATA
|
21
|
-
assert_predicate CodelessCode::DEFAULT_DATA, :frozen?
|
22
|
-
|
23
|
-
assert_predicate CodelessCode::DEFAULT_DATA.glob('*'), :any?
|
24
|
-
end
|
25
|
-
end
|
17
|
+
language: ruby
|
26
18
|
|
19
|
+
before_script:
|
20
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
21
|
+
- chmod +x ./cc-test-reporter
|
22
|
+
- ./cc-test-reporter before-build
|
23
|
+
env:
|
24
|
+
- COVERAGE=1
|
25
|
+
script:
|
26
|
+
- bundle exec rake
|
27
|
+
after_script:
|
28
|
+
- ./cc-test-reporter after-build -t simplecov --exit-code $TRAVIS_TEST_RESULT
|
data/Gemfile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# codeless_code filters and prints fables from http://thecodelesscode.com
|
2
4
|
# Copyright (C) 2018 Jon Sangster
|
3
5
|
#
|
@@ -24,6 +26,8 @@ group :development do
|
|
24
26
|
gem 'bundler', '~> 1.17'
|
25
27
|
gem 'guard', '~> 2.14'
|
26
28
|
gem 'guard-minitest', '~> 2.4'
|
29
|
+
gem 'guard-reek', '~> 1.2'
|
30
|
+
gem 'guard-rubocop', '~> 1.3'
|
27
31
|
gem 'jeweler', '~> 2.0'
|
28
32
|
gem 'minitest', '~> 5.11'
|
29
33
|
gem 'minitest-reporters', '~> 1.3'
|
@@ -31,6 +35,7 @@ group :development do
|
|
31
35
|
gem 'rake', '~> 12.3'
|
32
36
|
gem 'rdoc', '~> 6.0'
|
33
37
|
gem 'reek', '~> 5.2'
|
38
|
+
gem 'rubocop', '~> 0.60'
|
34
39
|
gem 'simplecov', '~> 0.16', require: false
|
35
40
|
gem 'yard', '~> 0.9'
|
36
41
|
end
|
data/Gemfile.lock
CHANGED
@@ -45,9 +45,16 @@ GEM
|
|
45
45
|
guard-minitest (2.4.6)
|
46
46
|
guard-compat (~> 1.2)
|
47
47
|
minitest (>= 3.0)
|
48
|
+
guard-reek (1.2.0)
|
49
|
+
guard-compat (~> 1.1)
|
50
|
+
reek
|
51
|
+
guard-rubocop (1.3.0)
|
52
|
+
guard (~> 2.0)
|
53
|
+
rubocop (~> 0.20)
|
48
54
|
hashie (3.6.0)
|
49
55
|
highline (2.0.0)
|
50
56
|
ice_nine (0.11.2)
|
57
|
+
jaro_winkler (1.5.1)
|
51
58
|
jeweler (2.3.9)
|
52
59
|
builder
|
53
60
|
bundler
|
@@ -92,8 +99,10 @@ GEM
|
|
92
99
|
multi_json (~> 1.3)
|
93
100
|
multi_xml (~> 0.5)
|
94
101
|
rack (>= 1.2, < 3)
|
102
|
+
parallel (1.12.1)
|
95
103
|
parser (2.5.3.0)
|
96
104
|
ast (~> 2.4.0)
|
105
|
+
powerpack (0.1.2)
|
97
106
|
pry (0.11.3)
|
98
107
|
coderay (~> 1.1.0)
|
99
108
|
method_source (~> 0.9.0)
|
@@ -113,6 +122,14 @@ GEM
|
|
113
122
|
kwalify (~> 0.7.0)
|
114
123
|
parser (>= 2.5.0.0, < 2.6, != 2.5.1.1)
|
115
124
|
rainbow (>= 2.0, < 4.0)
|
125
|
+
rubocop (0.60.0)
|
126
|
+
jaro_winkler (~> 1.5.1)
|
127
|
+
parallel (~> 1.10)
|
128
|
+
parser (>= 2.5, != 2.5.1.1)
|
129
|
+
powerpack (~> 0.1)
|
130
|
+
rainbow (>= 2.2.2, < 4.0)
|
131
|
+
ruby-progressbar (~> 1.7)
|
132
|
+
unicode-display_width (~> 1.4.0)
|
116
133
|
ruby-progressbar (1.10.0)
|
117
134
|
ruby_dep (1.5.0)
|
118
135
|
semver2 (3.4.2)
|
@@ -125,6 +142,7 @@ GEM
|
|
125
142
|
slop (4.6.2)
|
126
143
|
thor (0.20.0)
|
127
144
|
thread_safe (0.3.6)
|
145
|
+
unicode-display_width (1.4.0)
|
128
146
|
virtus (1.0.5)
|
129
147
|
axiom-types (~> 0.1)
|
130
148
|
coercible (~> 1.0)
|
@@ -140,6 +158,8 @@ DEPENDENCIES
|
|
140
158
|
colorize (~> 0.8)
|
141
159
|
guard (~> 2.14)
|
142
160
|
guard-minitest (~> 2.4)
|
161
|
+
guard-reek (~> 1.2)
|
162
|
+
guard-rubocop (~> 1.3)
|
143
163
|
jeweler (~> 2.0)
|
144
164
|
mediacloth (~> 0.6)
|
145
165
|
minitest (~> 5.11)
|
@@ -149,6 +169,7 @@ DEPENDENCIES
|
|
149
169
|
rake (~> 12.3)
|
150
170
|
rdoc (~> 6.0)
|
151
171
|
reek (~> 5.2)
|
172
|
+
rubocop (~> 0.60)
|
152
173
|
simplecov (~> 0.16)
|
153
174
|
slop (~> 4.6)
|
154
175
|
yard (~> 0.9)
|
data/Guardfile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# vim:ft=ruby:
|
2
4
|
# codeless_code filters and prints fables from http://thecodelesscode.com
|
3
5
|
# Copyright (C) 2018 Jon Sangster
|
@@ -14,8 +16,18 @@
|
|
14
16
|
#
|
15
17
|
# You should have received a copy of the GNU General Public License along with
|
16
18
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
17
|
-
guard :minitest do
|
19
|
+
guard :minitest, all_after_pass: true do
|
18
20
|
watch(%r{^test/(.*)\/?test_(.*)\.rb$})
|
19
21
|
watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
|
20
22
|
watch(%r{^test/helper\.rb$}) { 'test' }
|
21
23
|
end
|
24
|
+
|
25
|
+
guard :reek do
|
26
|
+
watch(%r{^lib/.+\.rb$})
|
27
|
+
watch('.reek.yml')
|
28
|
+
end
|
29
|
+
|
30
|
+
guard :rubocop do
|
31
|
+
watch(/.+\.rb$/)
|
32
|
+
watch(%r{(?:.+/)?\.rubocop(?:_todo)?\.yml$}) { |m| File.dirname(m[0]) }
|
33
|
+
end
|
data/README.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# codeless_code
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/codeless_code)
|
4
|
+
[](https://travis-ci.org/sangster/codeless_code)
|
5
|
+
[](https://codeclimate.com/github/sangster/codeless_code/maintainability)
|
6
|
+
<a href="https://codeclimate.com/github/sangster/codeless_code/test_coverage"><img src="https://api.codeclimate.com/v1/badges/0b67f813b9c48e639888/test_coverage" /></a>
|
7
|
+
[](https://github.com/sangster/codeless_code/blob/master/LICENSE)
|
8
|
+
|
3
9
|
Search and print [The Codeless Code](http://thecodelesscode.com/contents)
|
4
10
|
fables.
|
5
11
|
|
data/Rakefile
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
# codeless_code filters and prints fables from http://thecodelesscode.com
|
3
4
|
# Copyright (C) 2018 Jon Sangster
|
4
5
|
#
|
@@ -21,8 +22,8 @@ require 'bundler'
|
|
21
22
|
begin
|
22
23
|
Bundler.setup(:default, :development)
|
23
24
|
rescue Bundler::BundlerError => e
|
24
|
-
|
25
|
-
|
25
|
+
warn e.message
|
26
|
+
warn 'Run `bundle install` to install missing gems'
|
26
27
|
exit e.status_code
|
27
28
|
end
|
28
29
|
|
@@ -37,9 +38,9 @@ require 'yard'
|
|
37
38
|
require 'codeless_code'
|
38
39
|
|
39
40
|
Jeweler::Tasks.new do |gem|
|
40
|
-
gem.name =
|
41
|
-
gem.homepage =
|
42
|
-
gem.license =
|
41
|
+
gem.name = 'codeless_code'
|
42
|
+
gem.homepage = 'https://github.com/sangster/codeless_code'
|
43
|
+
gem.license = 'GPL-3.0'
|
43
44
|
gem.summary = 'Search and print The Codeless Code fables'
|
44
45
|
gem.description = <<-DESC.gsub(/\s+/m, ' ').strip
|
45
46
|
http://thecodelesscode.com contains many humorous and interesting fables
|
@@ -48,8 +49,8 @@ Jeweler::Tasks.new do |gem|
|
|
48
49
|
|
49
50
|
This tool provides a CLI to filter through these fables and view them.
|
50
51
|
DESC
|
51
|
-
gem.email =
|
52
|
-
gem.authors = [
|
52
|
+
gem.email = 'jon@ertt.ca'
|
53
|
+
gem.authors = ['Jon Sangster']
|
53
54
|
gem.files.include('data/**/*.txt')
|
54
55
|
# dependencies defined in Gemfile
|
55
56
|
end
|
@@ -62,9 +63,9 @@ Rake::TestTask.new(:test) do |test|
|
|
62
63
|
end
|
63
64
|
Rake::Task[:build].prerequisites << :test
|
64
65
|
|
65
|
-
desc
|
66
|
+
desc 'Code coverage detail'
|
66
67
|
task :simplecov do
|
67
|
-
ENV['COVERAGE'] =
|
68
|
+
ENV['COVERAGE'] = 'true'
|
68
69
|
Rake::Task['test'].execute
|
69
70
|
end
|
70
71
|
|
@@ -96,4 +97,18 @@ namespace :readme do
|
|
96
97
|
end
|
97
98
|
end
|
98
99
|
|
99
|
-
|
100
|
+
namespace :lint do
|
101
|
+
require 'reek/rake/task'
|
102
|
+
require 'rubocop/rake_task'
|
103
|
+
|
104
|
+
Reek::Rake::Task.new do |t|
|
105
|
+
t.fail_on_error = false
|
106
|
+
end
|
107
|
+
|
108
|
+
RuboCop::RakeTask.new
|
109
|
+
end
|
110
|
+
|
111
|
+
desc 'Run all linters'
|
112
|
+
task lint: ['lint:rubocop', 'lint:reek']
|
113
|
+
|
114
|
+
task default: %i[test lint]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.8
|
data/bin/codeless_code
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
# vim: ft=ruby:
|
3
5
|
|
4
6
|
require 'pathname'
|
@@ -7,4 +9,4 @@ require 'pry-byebug' if ENV.key?('DEBUG')
|
|
7
9
|
$LOAD_PATH << Pathname.new(__dir__).join('..', 'lib')
|
8
10
|
require 'codeless_code'
|
9
11
|
|
10
|
-
CodelessCode::Cli.new(File.basename($
|
12
|
+
CodelessCode::Cli.new(File.basename($PROGRAM_NAME), ARGV).call
|
data/codeless_code.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: codeless_code 0.1.
|
5
|
+
# stub: codeless_code 0.1.8 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "codeless_code".freeze
|
9
|
-
s.version = "0.1.
|
9
|
+
s.version = "0.1.8"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Jon Sangster".freeze]
|
14
|
-
s.date = "2018-11-
|
14
|
+
s.date = "2018-11-09"
|
15
15
|
s.description = "http://thecodelesscode.com contains many humorous and interesting fables and koans. The authors have open-sourced these fables, and many tanslations, available at https://github.com/aldesantis/the-codeless-code. This tool provides a CLI to filter through these fables and view them.".freeze
|
16
16
|
s.email = "jon@ertt.ca".freeze
|
17
17
|
s.executables = ["codeless_code".freeze]
|
@@ -20,8 +20,11 @@ Gem::Specification.new do |s|
|
|
20
20
|
"README.md"
|
21
21
|
]
|
22
22
|
s.files = [
|
23
|
-
".document",
|
24
23
|
".gitmodules",
|
24
|
+
".reek.yml",
|
25
|
+
".rubocop.yml",
|
26
|
+
".ruby-version",
|
27
|
+
".travis.yml",
|
25
28
|
"Gemfile",
|
26
29
|
"Gemfile.lock",
|
27
30
|
"Guardfile",
|
@@ -31,7 +34,6 @@ Gem::Specification.new do |s|
|
|
31
34
|
"VERSION",
|
32
35
|
"bin/codeless_code",
|
33
36
|
"codeless_code.gemspec",
|
34
|
-
"data/README.md",
|
35
37
|
"data/the-codeless-code/cs-hanzik/case-1.txt",
|
36
38
|
"data/the-codeless-code/cs-hanzik/case-10.txt",
|
37
39
|
"data/the-codeless-code/cs-hanzik/case-11.txt",
|
@@ -1487,30 +1489,40 @@ Gem::Specification.new do |s|
|
|
1487
1489
|
"lib/codeless_code/filters/composite.rb",
|
1488
1490
|
"lib/codeless_code/filters/date.rb",
|
1489
1491
|
"lib/codeless_code/filters/from_options.rb",
|
1490
|
-
"lib/codeless_code/filters/
|
1491
|
-
"lib/codeless_code/filters/
|
1492
|
+
"lib/codeless_code/filters/headers/base.rb",
|
1493
|
+
"lib/codeless_code/filters/headers/integer.rb",
|
1494
|
+
"lib/codeless_code/filters/headers/string.rb",
|
1492
1495
|
"lib/codeless_code/filters/lang.rb",
|
1493
1496
|
"lib/codeless_code/filters/translator.rb",
|
1494
1497
|
"lib/codeless_code/formats/base.rb",
|
1498
|
+
"lib/codeless_code/formats/parsers/base.rb",
|
1499
|
+
"lib/codeless_code/formats/parsers/plain.rb",
|
1500
|
+
"lib/codeless_code/formats/parsers/term.rb",
|
1495
1501
|
"lib/codeless_code/formats/plain.rb",
|
1496
|
-
"lib/codeless_code/formats/plain_generator.rb",
|
1497
1502
|
"lib/codeless_code/formats/raw.rb",
|
1498
1503
|
"lib/codeless_code/formats/term.rb",
|
1499
|
-
"lib/codeless_code/formats/term_generator.rb",
|
1500
1504
|
"lib/codeless_code/language_set.rb",
|
1501
1505
|
"lib/codeless_code/options.rb",
|
1502
1506
|
"lib/codeless_code/renderers/fable.rb",
|
1503
1507
|
"lib/codeless_code/renderers/term_page.rb",
|
1508
|
+
"test/codeless_code/commands/test_filter_fables.rb",
|
1509
|
+
"test/codeless_code/filters/headers/test_integer.rb",
|
1510
|
+
"test/codeless_code/filters/headers/test_string.rb",
|
1504
1511
|
"test/codeless_code/filters/test_builders.rb",
|
1505
|
-
"test/codeless_code/filters/
|
1506
|
-
"test/codeless_code/filters/
|
1512
|
+
"test/codeless_code/filters/test_composite.rb",
|
1513
|
+
"test/codeless_code/filters/test_date.rb",
|
1514
|
+
"test/codeless_code/filters/test_langs.rb",
|
1515
|
+
"test/codeless_code/filters/test_translator.rb",
|
1516
|
+
"test/codeless_code/renderers/test_fable.rb",
|
1517
|
+
"test/codeless_code/renderers/test_term_page.rb",
|
1507
1518
|
"test/codeless_code/test_catalog.rb",
|
1519
|
+
"test/codeless_code/test_cli.rb",
|
1508
1520
|
"test/codeless_code/test_fable.rb",
|
1509
1521
|
"test/codeless_code/test_fable_set.rb",
|
1510
1522
|
"test/codeless_code/test_language_set.rb",
|
1511
1523
|
"test/codeless_code/test_options.rb",
|
1512
1524
|
"test/helper.rb",
|
1513
|
-
"test/
|
1525
|
+
"test/support/fs.rb"
|
1514
1526
|
]
|
1515
1527
|
s.homepage = "https://github.com/sangster/codeless_code".freeze
|
1516
1528
|
s.licenses = ["GPL-3.0".freeze]
|
@@ -1528,6 +1540,8 @@ Gem::Specification.new do |s|
|
|
1528
1540
|
s.add_development_dependency(%q<bundler>.freeze, ["~> 1.17"])
|
1529
1541
|
s.add_development_dependency(%q<guard>.freeze, ["~> 2.14"])
|
1530
1542
|
s.add_development_dependency(%q<guard-minitest>.freeze, ["~> 2.4"])
|
1543
|
+
s.add_development_dependency(%q<guard-reek>.freeze, ["~> 1.2"])
|
1544
|
+
s.add_development_dependency(%q<guard-rubocop>.freeze, ["~> 1.3"])
|
1531
1545
|
s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.0"])
|
1532
1546
|
s.add_development_dependency(%q<minitest>.freeze, ["~> 5.11"])
|
1533
1547
|
s.add_development_dependency(%q<minitest-reporters>.freeze, ["~> 1.3"])
|
@@ -1535,6 +1549,7 @@ Gem::Specification.new do |s|
|
|
1535
1549
|
s.add_development_dependency(%q<rake>.freeze, ["~> 12.3"])
|
1536
1550
|
s.add_development_dependency(%q<rdoc>.freeze, ["~> 6.0"])
|
1537
1551
|
s.add_development_dependency(%q<reek>.freeze, ["~> 5.2"])
|
1552
|
+
s.add_development_dependency(%q<rubocop>.freeze, ["~> 0.60"])
|
1538
1553
|
s.add_development_dependency(%q<simplecov>.freeze, ["~> 0.16"])
|
1539
1554
|
s.add_development_dependency(%q<yard>.freeze, ["~> 0.9"])
|
1540
1555
|
else
|
@@ -1545,6 +1560,8 @@ Gem::Specification.new do |s|
|
|
1545
1560
|
s.add_dependency(%q<bundler>.freeze, ["~> 1.17"])
|
1546
1561
|
s.add_dependency(%q<guard>.freeze, ["~> 2.14"])
|
1547
1562
|
s.add_dependency(%q<guard-minitest>.freeze, ["~> 2.4"])
|
1563
|
+
s.add_dependency(%q<guard-reek>.freeze, ["~> 1.2"])
|
1564
|
+
s.add_dependency(%q<guard-rubocop>.freeze, ["~> 1.3"])
|
1548
1565
|
s.add_dependency(%q<jeweler>.freeze, ["~> 2.0"])
|
1549
1566
|
s.add_dependency(%q<minitest>.freeze, ["~> 5.11"])
|
1550
1567
|
s.add_dependency(%q<minitest-reporters>.freeze, ["~> 1.3"])
|
@@ -1552,6 +1569,7 @@ Gem::Specification.new do |s|
|
|
1552
1569
|
s.add_dependency(%q<rake>.freeze, ["~> 12.3"])
|
1553
1570
|
s.add_dependency(%q<rdoc>.freeze, ["~> 6.0"])
|
1554
1571
|
s.add_dependency(%q<reek>.freeze, ["~> 5.2"])
|
1572
|
+
s.add_dependency(%q<rubocop>.freeze, ["~> 0.60"])
|
1555
1573
|
s.add_dependency(%q<simplecov>.freeze, ["~> 0.16"])
|
1556
1574
|
s.add_dependency(%q<yard>.freeze, ["~> 0.9"])
|
1557
1575
|
end
|
@@ -1563,6 +1581,8 @@ Gem::Specification.new do |s|
|
|
1563
1581
|
s.add_dependency(%q<bundler>.freeze, ["~> 1.17"])
|
1564
1582
|
s.add_dependency(%q<guard>.freeze, ["~> 2.14"])
|
1565
1583
|
s.add_dependency(%q<guard-minitest>.freeze, ["~> 2.4"])
|
1584
|
+
s.add_dependency(%q<guard-reek>.freeze, ["~> 1.2"])
|
1585
|
+
s.add_dependency(%q<guard-rubocop>.freeze, ["~> 1.3"])
|
1566
1586
|
s.add_dependency(%q<jeweler>.freeze, ["~> 2.0"])
|
1567
1587
|
s.add_dependency(%q<minitest>.freeze, ["~> 5.11"])
|
1568
1588
|
s.add_dependency(%q<minitest-reporters>.freeze, ["~> 1.3"])
|
@@ -1570,6 +1590,7 @@ Gem::Specification.new do |s|
|
|
1570
1590
|
s.add_dependency(%q<rake>.freeze, ["~> 12.3"])
|
1571
1591
|
s.add_dependency(%q<rdoc>.freeze, ["~> 6.0"])
|
1572
1592
|
s.add_dependency(%q<reek>.freeze, ["~> 5.2"])
|
1593
|
+
s.add_dependency(%q<rubocop>.freeze, ["~> 0.60"])
|
1573
1594
|
s.add_dependency(%q<simplecov>.freeze, ["~> 0.16"])
|
1574
1595
|
s.add_dependency(%q<yard>.freeze, ["~> 0.9"])
|
1575
1596
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# codeless_code filters and prints fables from http://thecodelesscode.com
|
2
4
|
# Copyright (C) 2018 Jon Sangster
|
3
5
|
#
|
@@ -41,7 +43,7 @@ module CodelessCode
|
|
41
43
|
LanguageSet.new(lang, root_dir: @root_dir)
|
42
44
|
else
|
43
45
|
raise LanguageSet::NotFoundError,
|
44
|
-
format(
|
46
|
+
format('No fables for language %p', lang)
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
data/lib/codeless_code/cli.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# codeless_code filters and prints fables from http://thecodelesscode.com
|
2
4
|
# Copyright (C) 2018 Jon Sangster
|
3
5
|
#
|
@@ -17,63 +19,77 @@ require 'date'
|
|
17
19
|
require 'slop'
|
18
20
|
|
19
21
|
module CodelessCode
|
22
|
+
# Parse command-line parameters and dispatch them to the user's chosen
|
23
|
+
# "command."
|
20
24
|
class Cli
|
21
|
-
def initialize(command_name = $
|
25
|
+
def initialize(command_name = $PROGRAM_NAME, args = ARGV)
|
22
26
|
@command_name = command_name
|
23
27
|
@args = args
|
24
28
|
end
|
25
29
|
|
26
30
|
def call
|
27
31
|
user_io = io_open
|
32
|
+
call_io(user_io)
|
33
|
+
rescue Slop::Error => err
|
34
|
+
warn format("%s\n\n%s", err, options.help)
|
35
|
+
exit 1
|
36
|
+
ensure
|
37
|
+
user_io&.close
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
28
41
|
|
42
|
+
def call_io(user_io)
|
29
43
|
if options.key?(:help)
|
30
|
-
(user_io
|
44
|
+
io_puts(user_io, options.help)
|
31
45
|
elsif options.key?(:version)
|
32
|
-
(user_io
|
46
|
+
io_puts(user_io, version_str)
|
33
47
|
elsif options.key?(:list_translations)
|
34
|
-
|
48
|
+
list_translations(user_io)
|
35
49
|
else
|
36
|
-
|
37
|
-
.call(&method(:select))
|
50
|
+
filter_fables(user_io)
|
38
51
|
end
|
39
|
-
|
40
|
-
rescue Slop::Error => e
|
41
|
-
warn format("%s\n\n%s", e, options.help)
|
42
|
-
exit 1
|
43
|
-
ensure
|
44
|
-
user_io&.close
|
45
52
|
end
|
46
53
|
|
47
|
-
|
54
|
+
# :reek:ControlParameter
|
55
|
+
# :reek:UtilityFunction
|
56
|
+
def io_puts(io, *args)
|
57
|
+
(io || $stdout).puts(*args)
|
58
|
+
end
|
48
59
|
|
49
60
|
def options
|
50
61
|
@options ||= Options.new(@command_name, @args)
|
51
62
|
end
|
52
63
|
|
64
|
+
def list_translations(user_io)
|
65
|
+
Commands::ListTranslations.new(catalog, io: user_io).call
|
66
|
+
end
|
67
|
+
|
68
|
+
def filter_fables(user_io)
|
69
|
+
Commands::FilterFables.new(catalog, options, io: user_io)
|
70
|
+
.call(&method(:select_rand))
|
71
|
+
end
|
72
|
+
|
53
73
|
def catalog
|
54
74
|
@catalog ||= Catalog.new(options.data_dir)
|
55
75
|
end
|
56
76
|
|
57
77
|
# @return [IO,nil] the user's chosen output stream. +nil+ if unspecified
|
78
|
+
# :reek:FeatureEnvy
|
58
79
|
def io_open
|
59
|
-
|
60
|
-
|
61
|
-
end
|
62
|
-
end
|
80
|
+
path = options[:output]
|
81
|
+
return if path.nil?
|
63
82
|
|
64
|
-
|
65
|
-
select_rand(fables)
|
83
|
+
path == '-' ? $stdout.dup : File.open(path, 'w')
|
66
84
|
end
|
67
85
|
|
68
86
|
# @return [Enumerable<Fable>] a random subset of the given collection, as
|
69
87
|
# specified by {#options}
|
70
88
|
def select_rand(fables)
|
71
89
|
if options[:daily]
|
72
|
-
fables.sample(1, random:
|
90
|
+
fables.sample(1, random: date_random_generator)
|
73
91
|
elsif (count = options[:random_set])
|
74
|
-
|
75
|
-
raise ArgumentError, format('not a number %p', count)
|
76
|
-
end
|
92
|
+
assert_num!(count)
|
77
93
|
fables.sample(count&.to_i)
|
78
94
|
elsif options[:random]
|
79
95
|
fables.sample(1)
|
@@ -82,6 +98,22 @@ module CodelessCode
|
|
82
98
|
end
|
83
99
|
end
|
84
100
|
|
101
|
+
# :reek:UtilityFunction
|
102
|
+
def date_random_generator
|
103
|
+
Random.new(::Date.today.strftime('%Y%m%d').to_i)
|
104
|
+
end
|
105
|
+
|
106
|
+
def assert_num!(num)
|
107
|
+
return unless assert_num(num)
|
108
|
+
|
109
|
+
raise ArgumentError, format('not a number %p', num)
|
110
|
+
end
|
111
|
+
|
112
|
+
# :reek:UtilityFunction
|
113
|
+
def assert_num(num)
|
114
|
+
num&.to_i&.to_s != num
|
115
|
+
end
|
116
|
+
|
85
117
|
def version_str
|
86
118
|
format(['%s %s', '%s', 'See <%s>'].join("\n\n"), @command_name, VERSION,
|
87
119
|
copyright_summary, 'https://github.com/sangster/codeless_code')
|
@@ -92,7 +124,7 @@ module CodelessCode
|
|
92
124
|
'Copyright (C) %<date>d Jon Sangster',
|
93
125
|
'License GPL-3.0: GNU General Public License v3.0 <%<url>s>',
|
94
126
|
'This is free software: you are free to change and redistribute it.',
|
95
|
-
'There is NO WARRANTY, to the extent permitted by law.'
|
127
|
+
'There is NO WARRANTY, to the extent permitted by law.'
|
96
128
|
].join("\n")
|
97
129
|
|
98
130
|
format(template, date: ::Date.today.year,
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# codeless_code filters and prints fables from http://thecodelesscode.com
|
2
4
|
# Copyright (C) 2018 Jon Sangster
|
3
5
|
#
|
@@ -29,11 +31,8 @@ module CodelessCode
|
|
29
31
|
@io = io
|
30
32
|
end
|
31
33
|
|
32
|
-
def call
|
33
|
-
|
34
|
-
fables = @catalog.select(filter)
|
35
|
-
fables = yield fables if block_given?
|
36
|
-
fables = sort(fables)
|
34
|
+
def call(&blk)
|
35
|
+
fables = filters_from_options(&blk)
|
37
36
|
|
38
37
|
case fables.size
|
39
38
|
when 0
|
@@ -47,9 +46,16 @@ module CodelessCode
|
|
47
46
|
|
48
47
|
private
|
49
48
|
|
49
|
+
def filters_from_options
|
50
|
+
filter = Filters::FromOptions.new(options)
|
51
|
+
fables = @catalog.select(filter)
|
52
|
+
fables = yield fables if block_given?
|
53
|
+
sort(fables)
|
54
|
+
end
|
55
|
+
|
50
56
|
def sort(fables)
|
51
57
|
if options.key?(:sort)
|
52
|
-
fables = fables.sort_by { |
|
58
|
+
fables = fables.sort_by { |fable| fable[options[:sort]] || "\uffff" }
|
53
59
|
end
|
54
60
|
fables = fables.reverse if options[:reverse]
|
55
61
|
fables
|
@@ -64,9 +70,7 @@ module CodelessCode
|
|
64
70
|
end
|
65
71
|
|
66
72
|
def pager(cmd, fable)
|
67
|
-
io =
|
68
|
-
pid = io.pid
|
69
|
-
|
73
|
+
io = IO.popen(cmd, 'w')
|
70
74
|
io.puts for_pager(fable)
|
71
75
|
ensure
|
72
76
|
io&.close
|
@@ -98,12 +102,13 @@ module CodelessCode
|
|
98
102
|
|
99
103
|
def title_width(fables)
|
100
104
|
if options[:columns]
|
101
|
-
-fables.map { |
|
105
|
+
-fables.map { |fable| render(fable).best_title.size }.compact.max
|
102
106
|
else
|
103
107
|
''
|
104
108
|
end
|
105
109
|
end
|
106
110
|
|
111
|
+
# :reek:UtilityFunction
|
107
112
|
def render(fable)
|
108
113
|
Renderers::Fable.new(fable)
|
109
114
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# codeless_code filters and prints fables from http://thecodelesscode.com
|
2
4
|
# Copyright (C) 2018 Jon Sangster
|
3
5
|
#
|
@@ -15,6 +17,7 @@
|
|
15
17
|
# this program. If not, see <https://www.gnu.org/licenses/>.
|
16
18
|
module CodelessCode
|
17
19
|
module Commands
|
20
|
+
# List all the translations available in the given {Catalog}.
|
18
21
|
class ListTranslations
|
19
22
|
# @param io [IO] if given, the output will be written to this stream,
|
20
23
|
# otherwise STDOUT will be used
|