speculate_about 1.0.3 → 1.0.5

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
  SHA256:
3
- metadata.gz: 96e9eda6deb236573c353c92c89f44760d2999cba3125bf1e8649d65a4bc1b2f
4
- data.tar.gz: 332f43cee63d821d30fab5a6d55bdfb3e8f262c572ece94a5fedb32df76da35f
3
+ metadata.gz: 3fbc552a8595414d6e1b7dbbe3db1ccd402a641994525e03c80d0ce012b26f61
4
+ data.tar.gz: 3bad757b061a13ee60055cdda247fb52becf060b5b2a039e6baf1e8ff6901b7d
5
5
  SHA512:
6
- metadata.gz: f94c4c30a750cc567462a3d07a54ffdadc96a2ab25ad7455841aca001e9d48d84b79a45d0c3aa814b3c2d43773c974d941cb54ffaf211963c9b7d91860529d69
7
- data.tar.gz: 28989add83923ef511532015ea95cddd91730e874a6fcd30381e3a8138841d4f8bb7b6fa35fe8dfde46495243e4e840f160a2678d910564700572e40af9b0d18
6
+ metadata.gz: a782e9265dc4c020a49fe602662934fc13bbcffd8c3b101f91f1e3298bfaa66f87c2e215607ec6e59545b8a6a5fb463a5139ec23f019446fd2d2d31057de5d8e
7
+ data.tar.gz: 5bf85f65b7797da2a3a02e446c2515849d912a1e049166ee32e6c7e1711287694e0f11eaa5c51d3c4545d67314b1b750b90c72f650263a2321f9a252b8c4bf48
data/lib/debugging.rb ADDED
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kernel
4
+ def debug__(subject=nil, msg: nil, rtrn: nil, debug:)
5
+ return rtrn || subject unless debug
6
+
7
+ $stderr.puts(msg) if msg
8
+ $stderr.puts(subject.inspect) if subject
9
+ rtrn || subject
10
+ end
11
+
12
+ def dbg_match(msg, lnb, debug:)
13
+ designation = name.split("::").last.downcase
14
+ debug__(msg: "#{lnb.succ}: #{msg} match in :#{designation}", debug:)
15
+ end
16
+ end
17
+ # SPDX-License-Identifier: Apache-2.0
@@ -8,6 +8,8 @@ module Speculations
8
8
  _usage
9
9
  when "-v", "--version"
10
10
  _version
11
+ when "-d", "--debug"
12
+ return _compile_and_maybe_run(args.drop(1), debug: true)
11
13
  else
12
14
  return _compile_and_maybe_run args
13
15
  end
@@ -16,11 +18,11 @@ module Speculations
16
18
 
17
19
  private
18
20
 
19
- def _compile_and_maybe_run args
21
+ def _compile_and_maybe_run(args, debug: false)
20
22
  require_relative "../speculations"
21
23
  args = Dir.glob(["*.md", "speculations/**/*.md"]) if args.empty?
22
24
  args.each do |input_file|
23
- Speculations.compile(input_file)
25
+ Speculations.compile(input_file, debug:)
24
26
  end
25
27
  end
26
28
 
@@ -2,17 +2,22 @@ module Speculations
2
2
  class Parser
3
3
  module State
4
4
  module Candidate extend self
5
- def parse line, lnb, node, ctxt
5
+ def parse line, lnb, node, ctxt, debug: false
6
6
  case
7
7
  when State.blank_line(line)
8
+ dbg_match("blank_line", lnb, debug:)
8
9
  [:candidate, node, ctxt]
9
10
  when match = State.context_match(line)
11
+ dbg_match("context", lnb, debug:)
10
12
  _parse_context(match, lnb:, node:)
11
13
  when match = State.maybe_include(line)
14
+ dbg_match("maybe_include", lnb, debug:)
12
15
  [:candidate, node, :inc]
13
16
  when match = State.maybe_example(line)
17
+ dbg_match("maybe_example", lnb, debug:)
14
18
  [:candidate, node, match[:title]]
15
19
  when match = State.ruby_code_block(line)
20
+ dbg_match("ruby_code_block", lnb, debug:)
16
21
  _parse_ruby_code_block(match, ctxt:, lnb:, node:)
17
22
  else
18
23
  [:out, node]
@@ -36,8 +41,6 @@ module Speculations
36
41
  end
37
42
  [:in, node, (ctxt == :inc ? :includes : :out)]
38
43
  end
39
-
40
-
41
44
  end
42
45
  end
43
46
  end
@@ -1,11 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Speculations
2
4
  class Parser
3
5
  module State
4
6
  module In extend self
5
-
6
- def parse line, _lnb, node, ctxt
7
+ include State
8
+ def parse line, lnb, node, ctxt, debug: true
7
9
  case
8
10
  when State.eoblock_match(line)
11
+ dbg_match("eblock", lnb, debug:)
9
12
  [ctxt, node.parent]
10
13
  else
11
14
  [:in, node.add_line(line), ctxt]
@@ -15,3 +18,4 @@ module Speculations
15
18
  end
16
19
  end
17
20
  end
21
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -5,13 +5,16 @@ module Speculations
5
5
  module Includes extend self
6
6
  include ContextMaker
7
7
 
8
- def parse line, lnb, node, _ctxt
8
+ def parse line, lnb, node, _ctxt, debug: true
9
9
  case
10
10
  when match = State.context_match(line)
11
+ dbg_match("context", lnb, debug:)
11
12
  make_new_context(lnb: lnb, node: node, match: match)
12
13
  when match = State.maybe_include(line)
14
+ dbg_match("maybe_include", lnb, debug:)
13
15
  [:candidate, node, :inc]
14
16
  when match = State.maybe_example(line)
17
+ dbg_match("maybe_example", lnb, debug:)
15
18
  [:candidate, node, match[:title]]
16
19
  else
17
20
  [:includes, node]
@@ -5,13 +5,17 @@ module Speculations
5
5
  module Out extend self
6
6
  include ContextMaker
7
7
 
8
- def parse line, lnb, node, _ctxt
8
+ def parse line, lnb, node, _ctxt, debug: false
9
+ # debug__(msg: "out #{lnb}: #{line}", debug:)
9
10
  case
10
11
  when match = State.context_match(line)
12
+ dbg_match("context", lnb, debug:)
11
13
  make_new_context(lnb: lnb, node: node, match: match)
12
14
  when match = State.maybe_example(line)
15
+ dbg_match("maybe_example", lnb, debug:)
13
16
  [:candidate, node, match[:title]]
14
17
  when match = State.maybe_include(line)
18
+ dbg_match("maybe_include", lnb, debug:)
15
19
  [:candidate, node, :inc]
16
20
  else
17
21
  [:out, node]
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../debugging'
4
+ require_relative './parser/context'
5
+ require_relative './parser/state'
1
6
  module Speculations
2
7
  class Parser
3
- require_relative './parser/context'
4
- require_relative './parser/state'
5
-
6
8
 
7
9
  def self.parsers
8
10
  @__parsers__ ||= {
@@ -13,13 +15,13 @@ module Speculations
13
15
  }
14
16
  end
15
17
 
16
- def parse_from_file file
18
+ def parse_from_file(file, debug: false)
17
19
  @filename = file
18
20
  @input = File
19
21
  .new(file)
20
22
  .each_line(chomp: true)
21
23
  .lazy
22
- parse!
24
+ parse!(debug:)
23
25
  end
24
26
 
25
27
  private
@@ -28,14 +30,17 @@ module Speculations
28
30
  @state = :out
29
31
  end
30
32
 
31
- def parse!
33
+ def parse!(debug:)
32
34
  root = node = Context.new(filename: @filename)
33
35
  ctxt = nil
34
36
  @input.each_with_index do |line, lnb|
35
37
  parser = self.class.parsers.fetch(@state)
36
- @state, node, ctxt = parser.parse(line, lnb.succ, node, ctxt)
38
+ old_state = @state
39
+ @state, node, ctxt = parser.parse(line, lnb.succ, node, ctxt, debug:)
40
+ debug__(msg: "#{lnb}: #{old_state}-> #{@state}", debug:) if @state != old_state
37
41
  end
38
42
  root
39
43
  end
40
44
  end
41
45
  end
46
+ # AGPL-3.0-or-later
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Speculations
2
- VERSION = "1.0.3"
4
+ VERSION = "1.0.5"
3
5
  end
6
+ # SPDX-License-Identifier: AGPL-3.0-or-later
data/lib/speculations.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'fileutils'
2
+ require_relative 'debugging'
2
3
  require_relative 'speculations/parser'
3
4
  module Speculations extend self
4
5
 
@@ -11,13 +12,17 @@ module Speculations extend self
11
12
  # YOU HAVE BEEN WARNED
12
13
  EOD
13
14
 
14
- def compile(infile, outfile=nil)
15
+ def compile(infile, outfile=nil, debug: false)
15
16
  raise ArgumentError, "#{infile} not found" unless File.readable? infile
16
17
  outfile ||= _speculation_path(infile)
17
18
  if _out_of_date?(outfile, infile)
18
- ast = Speculations::Parser.new.parse_from_file(infile)
19
+ debug__(msg: "recompiling #{infile} -> #{outfile}", debug:)
20
+
21
+ ast = Speculations::Parser.new.parse_from_file(infile, debug:)
19
22
  code = _decorated_ast_code ast, infile
20
23
  File.write(outfile, code.join("\n"))
24
+ else
25
+ debug__(msg: "#{infile} ignored as it is upto date", debug:)
21
26
  end
22
27
  outfile
23
28
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: speculate_about
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Dober
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-29 00:00:00.000000000 Z
11
+ date: 2024-04-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Allows Markdown or other text files to be used as literal specs, à la
14
- Elixr doctest, but from any file.
14
+ Elixir doctest, but from any file.
15
15
  email: robert.dober@gmail.com
16
16
  executables:
17
17
  - speculate
@@ -19,6 +19,7 @@ extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
21
  - bin/speculate
22
+ - lib/debugging.rb
22
23
  - lib/speculate_about.rb
23
24
  - lib/speculations.rb
24
25
  - lib/speculations/cli.rb
@@ -34,9 +35,9 @@ files:
34
35
  - lib/speculations/parser/state/out.rb
35
36
  - lib/speculations/parser/state/triggers.rb
36
37
  - lib/speculations/version.rb
37
- homepage: https://github.com/robertdober/speculate
38
+ homepage: https://codeberg.org/lab419/speculate_about
38
39
  licenses:
39
- - Apache-2.0
40
+ - AGPL-3.0-or-later
40
41
  metadata: {}
41
42
  post_install_message:
42
43
  rdoc_options: []
@@ -46,14 +47,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
46
47
  requirements:
47
48
  - - ">="
48
49
  - !ruby/object:Gem::Version
49
- version: 3.1.0
50
+ version: 3.3.0
50
51
  required_rubygems_version: !ruby/object:Gem::Requirement
51
52
  requirements:
52
53
  - - ">="
53
54
  - !ruby/object:Gem::Version
54
55
  version: '0'
55
56
  requirements: []
56
- rubygems_version: 3.4.19
57
+ rubygems_version: 3.5.6
57
58
  signing_key:
58
59
  specification_version: 4
59
60
  summary: Extract RSpecs from Markdown