klue-langcraft 0.2.0 → 0.3.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 +4 -4
- data/.rubocop.yml +18 -3
- data/CHANGELOG.md +14 -0
- data/bin/langcraft.rb +177 -0
- data/lib/klue/langcraft/dsl/interpreter.rb +18 -18
- data/lib/klue/langcraft/dsl/klue_runner.rb +68 -0
- data/lib/klue/langcraft/dsl/watcher.rb +88 -0
- data/lib/klue/langcraft/dsl/webhook.rb +57 -0
- data/lib/klue/langcraft/version.rb +1 -1
- data/lib/klue/langcraft.rb +3 -0
- data/package-lock.json +2 -2
- data/package.json +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 586607de2048a4670a8cc9cd1e06dd9a2d1636aa0c9825698af2b6bac51ea24d
|
4
|
+
data.tar.gz: 1973c38bf614abc045c9d8e2759f984791b52da023d10441d2564bf54f99c323
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c20cb42da33cc805d4ec372f6101f796b44d127724fd1a611cd2620e4614e225148fc2162ab6f0e8d9bdf2fa1909575f0ed78da93ba057b4af38415bae739bd
|
7
|
+
data.tar.gz: 4ebe337655eba091ec8013700734afcea0a67006bc076ac5d94e075d4210fba5ee490e43f4eb92c716e2230d5c61918ce201fecde6b6919a081bfea1a95088c9
|
data/.rubocop.yml
CHANGED
@@ -40,8 +40,23 @@ Metrics/BlockLength:
|
|
40
40
|
- shared_examples_for
|
41
41
|
- transaction
|
42
42
|
|
43
|
+
Metrics/AbcSize:
|
44
|
+
Exclude:
|
45
|
+
- bin/*
|
46
|
+
|
47
|
+
|
43
48
|
Metrics/MethodLength:
|
44
49
|
Max: 25
|
50
|
+
Exclude:
|
51
|
+
- bin/*
|
52
|
+
|
53
|
+
Metrics/PerceivedComplexity:
|
54
|
+
Exclude:
|
55
|
+
- bin/*
|
56
|
+
|
57
|
+
Metrics/CyclomaticComplexity:
|
58
|
+
Exclude:
|
59
|
+
- bin/*
|
45
60
|
|
46
61
|
Layout/LineLength:
|
47
62
|
Max: 200
|
@@ -55,7 +70,7 @@ Lint/UnusedMethodArgument:
|
|
55
70
|
Style/BlockComments:
|
56
71
|
Enabled: false
|
57
72
|
Include:
|
58
|
-
- "**/spec
|
73
|
+
- "**/spec/**/*"
|
59
74
|
|
60
75
|
# My Preferences - Start
|
61
76
|
Metrics/ClassLength:
|
@@ -75,8 +90,8 @@ Style/EmptyMethod:
|
|
75
90
|
Exclude:
|
76
91
|
- "**/spec/**/*"
|
77
92
|
Metrics/ParameterLists:
|
78
|
-
|
79
|
-
|
93
|
+
Enabled: false
|
94
|
+
|
80
95
|
Layout/EmptyLineBetweenDefs:
|
81
96
|
Exclude:
|
82
97
|
- "**/spec/**/*"
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
# [0.2.0](https://github.com/appydave/klue-langcraft/compare/v0.1.1...v0.2.0) (2024-10-25)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* fix ci issue ([a3bfd35](https://github.com/appydave/klue-langcraft/commit/a3bfd35371b7c0ca70b0b57d70d4541c7a4ec54b))
|
7
|
+
* fix cop ([123070b](https://github.com/appydave/klue-langcraft/commit/123070bd1f636a81d01da469c2e5072c57384bae))
|
8
|
+
* update dsl_interpreter ([2507045](https://github.com/appydave/klue-langcraft/commit/2507045c3f7f205603a3f899785e9c5445c4c0bb))
|
9
|
+
|
10
|
+
|
11
|
+
### Features
|
12
|
+
|
13
|
+
* refactor dsl processor ([5875dc9](https://github.com/appydave/klue-langcraft/commit/5875dc957789f113da762a6dcb55cda66bfb8a3d))
|
14
|
+
|
1
15
|
## [0.1.1](https://github.com/appydave/klue-langcraft/compare/v0.1.0...v0.1.1) (2024-09-22)
|
2
16
|
|
3
17
|
|
data/bin/langcraft.rb
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __dir__)
|
5
|
+
|
6
|
+
require 'klue/langcraft'
|
7
|
+
require 'optparse'
|
8
|
+
|
9
|
+
# CLI class for the Klue Langcraft application.
|
10
|
+
# This class handles command-line interactions, parsing options,
|
11
|
+
# and executing the appropriate commands for processing files
|
12
|
+
# or watching directories.
|
13
|
+
class CLI
|
14
|
+
def initialize
|
15
|
+
@commands = {
|
16
|
+
'process' => method(:process_files),
|
17
|
+
'watch' => method(:watch_files)
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def run
|
22
|
+
if ARGV.empty?
|
23
|
+
print_help
|
24
|
+
exit
|
25
|
+
end
|
26
|
+
|
27
|
+
command, *args = ARGV
|
28
|
+
if @commands.key?(command)
|
29
|
+
@commands[command].call(args)
|
30
|
+
else
|
31
|
+
puts "Unknown command: #{command}"
|
32
|
+
print_help
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def process_files(args)
|
39
|
+
options = {}
|
40
|
+
parser = OptionParser.new do |opts|
|
41
|
+
opts.banner = 'Usage: langcraft process [options]'
|
42
|
+
|
43
|
+
opts.on('-i', '--input FILE', 'Input file (required)') do |file|
|
44
|
+
options[:input] = file
|
45
|
+
end
|
46
|
+
|
47
|
+
opts.on('-b', '--basic-output FILE', 'Output file') do |file|
|
48
|
+
options[:basic_output] = file
|
49
|
+
end
|
50
|
+
|
51
|
+
opts.on('-e', '--enhanced-output FILE', 'Output file') do |file|
|
52
|
+
options[:enhanced_output] = file
|
53
|
+
end
|
54
|
+
|
55
|
+
opts.on('-u', '--webhook-url URL', 'Webhook URL') do |url|
|
56
|
+
options[:webhook_url] = url
|
57
|
+
end
|
58
|
+
|
59
|
+
opts.on('-d', '--debug LEVEL', %i[none info detailed], 'Debug level (none, info, detailed)') do |level|
|
60
|
+
options[:debug] = level
|
61
|
+
end
|
62
|
+
|
63
|
+
opts.on('-h', '--help', 'Show this message') do
|
64
|
+
puts opts
|
65
|
+
exit
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
parser.parse!(args)
|
70
|
+
|
71
|
+
if validate_options(options)
|
72
|
+
run_klue_runner(options)
|
73
|
+
else
|
74
|
+
print_usage(parser)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def validate_options(options)
|
79
|
+
if options[:input].nil?
|
80
|
+
puts 'Error: Input file is required.'
|
81
|
+
false
|
82
|
+
else
|
83
|
+
true
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def run_klue_runner(options)
|
88
|
+
klue_runner = Klue::Langcraft::DSL::KlueRunner.new
|
89
|
+
klue_runner.run(
|
90
|
+
input_file: options[:input],
|
91
|
+
basic_output_file: options[:basic_output],
|
92
|
+
enhanced_output_file: options[:enhanced_output],
|
93
|
+
webhook_url: options[:webhook_url],
|
94
|
+
debug: options[:debug] || :none
|
95
|
+
)
|
96
|
+
rescue StandardError => e
|
97
|
+
puts "Error: #{e.message}"
|
98
|
+
exit 1
|
99
|
+
end
|
100
|
+
|
101
|
+
def print_usage(parser)
|
102
|
+
puts 'Error: Invalid or missing options.'
|
103
|
+
puts
|
104
|
+
puts parser
|
105
|
+
exit 1
|
106
|
+
end
|
107
|
+
|
108
|
+
def watch_files(args)
|
109
|
+
options = {
|
110
|
+
directories: [],
|
111
|
+
create_basic_json: false,
|
112
|
+
create_enhanced_json: false,
|
113
|
+
log_level: :info,
|
114
|
+
webhook_url: nil,
|
115
|
+
extensions: ['.klue'] # Default extension
|
116
|
+
}
|
117
|
+
OptionParser.new do |opts|
|
118
|
+
opts.banner = 'Usage: server watch [options]'
|
119
|
+
|
120
|
+
opts.on('-w', '--watch-directory DIRECTORY', 'Directory to watch (can be specified multiple times)') do |dir|
|
121
|
+
options[:directories] << File.expand_path(dir) # Expand the path here
|
122
|
+
end
|
123
|
+
|
124
|
+
opts.on('-f', '--flags TYPE', 'Set processing flags (none, basic, enhanced, all)') do |type|
|
125
|
+
types = type.split(',').map(&:strip).map(&:downcase)
|
126
|
+
options[:create_basic_json] = types.include?('basic') || types.include?('all')
|
127
|
+
options[:create_enhanced_json] = types.include?('enhanced') || types.include?('all')
|
128
|
+
end
|
129
|
+
|
130
|
+
opts.on('-l', '--log-level LEVEL', %i[none info detailed], 'Log level (none, info, detailed)') do |level|
|
131
|
+
options[:log_level] = level
|
132
|
+
end
|
133
|
+
|
134
|
+
opts.on('-u', '--webhook-url URL', 'Webhook URL') do |url|
|
135
|
+
options[:webhook_url] = url
|
136
|
+
end
|
137
|
+
|
138
|
+
opts.on('-e', '--extensions EXT1,EXT2,...', Array, 'File extensions to watch (default: .klue)') do |exts|
|
139
|
+
options[:extensions] = exts.map { |ext| ext.start_with?('.') ? ext : ".#{ext}" }
|
140
|
+
end
|
141
|
+
|
142
|
+
opts.on('-h', '--help', 'Show this message') do
|
143
|
+
puts opts
|
144
|
+
exit
|
145
|
+
end
|
146
|
+
end.parse!(args)
|
147
|
+
|
148
|
+
# If no directories were specified, use the current directory
|
149
|
+
options[:directories] = [Dir.pwd] if options[:directories].empty?
|
150
|
+
|
151
|
+
# Ensure all directories are expanded
|
152
|
+
options[:directories].map! { |dir| File.expand_path(dir) }
|
153
|
+
|
154
|
+
Klue::Langcraft::DSL::Watcher.new(
|
155
|
+
options[:directories],
|
156
|
+
create_basic_json: options[:create_basic_json],
|
157
|
+
create_enhanced_json: options[:create_enhanced_json],
|
158
|
+
log_level: options[:log_level],
|
159
|
+
webhook_url: options[:webhook_url],
|
160
|
+
extensions: options[:extensions]
|
161
|
+
).start
|
162
|
+
end
|
163
|
+
|
164
|
+
def print_help
|
165
|
+
puts 'Klue Langcraft Server'
|
166
|
+
puts 'Usage: server [command] [options]'
|
167
|
+
puts ''
|
168
|
+
puts 'Commands:'
|
169
|
+
puts ' process Process a single file'
|
170
|
+
puts ' watch Watch directories for changes'
|
171
|
+
puts ''
|
172
|
+
puts "Run 'server [command] --help' for more information on a command."
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
# Run the CLI
|
177
|
+
CLI.new.run
|
@@ -17,18 +17,18 @@ module Klue
|
|
17
17
|
attr_accessor :processed
|
18
18
|
|
19
19
|
def initialize
|
20
|
-
|
21
|
-
@processed = false
|
20
|
+
klue_reset
|
22
21
|
end
|
23
22
|
|
24
23
|
def process(input: nil, input_file: nil, output_file: nil)
|
25
|
-
|
26
|
-
|
24
|
+
klue_reset
|
25
|
+
klue_validate_input_arguments(input, input_file)
|
26
|
+
klue_input_content = klue_input_content(input, input_file)
|
27
27
|
|
28
28
|
@processed = true
|
29
|
-
instance_eval(
|
29
|
+
instance_eval(klue_input_content)
|
30
30
|
|
31
|
-
|
31
|
+
klue_write_output(output_file) if output_file
|
32
32
|
data
|
33
33
|
end
|
34
34
|
|
@@ -36,7 +36,7 @@ module Klue
|
|
36
36
|
raise "You must call 'process' before using other methods" unless @processed
|
37
37
|
|
38
38
|
key = method_name
|
39
|
-
value =
|
39
|
+
value = klue_process_args(args, block)
|
40
40
|
|
41
41
|
if @data[key]
|
42
42
|
@data[key] = [@data[key]] unless @data[key].is_a?(Array)
|
@@ -50,7 +50,7 @@ module Klue
|
|
50
50
|
@processed || super
|
51
51
|
end
|
52
52
|
|
53
|
-
def
|
53
|
+
def klue_process_args(args, block)
|
54
54
|
positional_args = []
|
55
55
|
named_args = {}
|
56
56
|
|
@@ -82,32 +82,32 @@ module Klue
|
|
82
82
|
|
83
83
|
private
|
84
84
|
|
85
|
-
def
|
85
|
+
def klue_reset
|
86
|
+
@data = {}
|
87
|
+
@processed = false
|
88
|
+
end
|
89
|
+
|
90
|
+
def klue_validate_input_arguments(input, input_file)
|
86
91
|
raise ArgumentError, 'Either input or input_file must be provided' unless input || input_file
|
87
92
|
raise ArgumentError, 'Both input and input_file cannot be provided' if input && input_file
|
88
93
|
end
|
89
94
|
|
90
|
-
def
|
95
|
+
def klue_input_content(input, input_file)
|
91
96
|
input_file ? File.read(input_file) : input
|
92
97
|
end
|
93
98
|
|
94
|
-
def
|
95
|
-
output_path =
|
99
|
+
def klue_write_output(output_file)
|
100
|
+
output_path = klue_output_path(output_file)
|
96
101
|
File.write(output_path, JSON.pretty_generate(data))
|
97
102
|
end
|
98
103
|
|
99
|
-
def
|
104
|
+
def klue_output_path(output_file)
|
100
105
|
if Pathname.new(output_file).absolute?
|
101
106
|
output_file
|
102
107
|
else
|
103
108
|
File.join(File.dirname(output_file), File.basename(output_file))
|
104
109
|
end
|
105
110
|
end
|
106
|
-
|
107
|
-
# Convert to JSON
|
108
|
-
def to_json(*_args)
|
109
|
-
@data.to_json
|
110
|
-
end
|
111
111
|
end
|
112
112
|
end
|
113
113
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Klue
|
4
|
+
module Langcraft
|
5
|
+
module DSL
|
6
|
+
# KlueRunner handles the processing of DSL input data
|
7
|
+
# It manages the execution of various processors and the output of processed data
|
8
|
+
class KlueRunner
|
9
|
+
attr_reader :interpreter, :pipeline, :webhook
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@interpreter = Klue::Langcraft::DSL::Interpreter.new
|
13
|
+
@pipeline = Klue::Langcraft::DSL::ProcessDataPipeline.new(Klue::Langcraft::DSL::ProcessMatcher.new)
|
14
|
+
@webhook = Klue::Langcraft::DSL::Webhook.new
|
15
|
+
end
|
16
|
+
|
17
|
+
# Run the KlueRunner with the given input data
|
18
|
+
# @param input [String] The input data to process
|
19
|
+
# @param input_file [String] The input file to process (input data and file are mutually exclusive)
|
20
|
+
# @param basic_output_file [String] The output file to write the processed data, this file is before any processing
|
21
|
+
# @param enhanced_output_file [String] The output file to write the processed data, this file is after processing
|
22
|
+
def run(
|
23
|
+
input: nil,
|
24
|
+
input_file: nil,
|
25
|
+
basic_output_file: nil,
|
26
|
+
enhanced_output_file: nil,
|
27
|
+
webhook_url: nil,
|
28
|
+
log_level: :none
|
29
|
+
)
|
30
|
+
@log_level = log_level
|
31
|
+
|
32
|
+
log_info('Processing input')
|
33
|
+
data = interpreter.process(input: input, input_file: input_file, output_file: basic_output_file)
|
34
|
+
log_detailed('Interpreter output:', data)
|
35
|
+
|
36
|
+
log_info('Executing pipeline - enhance')
|
37
|
+
enhanced_data = pipeline.execute(data)
|
38
|
+
log_detailed('Enhanced output:', enhanced_data)
|
39
|
+
|
40
|
+
if enhanced_output_file
|
41
|
+
log_info("Writing enhanced output to file: #{enhanced_output_file}")
|
42
|
+
@pipeline.write_output(enhanced_data, enhanced_output_file)
|
43
|
+
end
|
44
|
+
|
45
|
+
if webhook_url
|
46
|
+
log_info("Delivering data to webhook: #{webhook_url}")
|
47
|
+
@webhook.deliver(webhook_url, enhanced_data)
|
48
|
+
end
|
49
|
+
|
50
|
+
log_info('Processing complete')
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def log_info(message)
|
56
|
+
puts message if %i[info detailed].include?(@log_level)
|
57
|
+
end
|
58
|
+
|
59
|
+
def log_detailed(message, data)
|
60
|
+
return unless @log_level == :detailed
|
61
|
+
|
62
|
+
puts message
|
63
|
+
pp data
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'listen'
|
4
|
+
|
5
|
+
module Klue
|
6
|
+
module Langcraft
|
7
|
+
module DSL
|
8
|
+
# Watcher class for monitoring file changes in specified directories.
|
9
|
+
# This class sets up a file system listener to watch for changes to files
|
10
|
+
# with specified extensions, and processes those files using a KlueRunner.
|
11
|
+
class Watcher
|
12
|
+
def initialize(directories, **options)
|
13
|
+
@directories = directories.map { |dir| File.expand_path(dir) }
|
14
|
+
@options = options
|
15
|
+
@klue_runner = Klue::Langcraft::DSL::KlueRunner.new
|
16
|
+
@extensions = options[:extensions] || ['.klue']
|
17
|
+
end
|
18
|
+
|
19
|
+
def start
|
20
|
+
listener = create_listener
|
21
|
+
log_watcher_info
|
22
|
+
listener.start
|
23
|
+
sleep
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def create_listener
|
29
|
+
extension_regex = create_extension_regex
|
30
|
+
Listen.to(*@directories, only: extension_regex) do |modified, added, _removed|
|
31
|
+
process_changed_files(modified + added)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def create_extension_regex
|
36
|
+
Regexp.union(@extensions.map { |ext| /#{Regexp.escape(ext)}$/ })
|
37
|
+
end
|
38
|
+
|
39
|
+
def process_changed_files(files)
|
40
|
+
files.each { |file| process_file(file) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def process_file(file)
|
44
|
+
log_info('Processing file', file)
|
45
|
+
options = create_file_options(file)
|
46
|
+
run_klue_runner(options)
|
47
|
+
rescue StandardError => e
|
48
|
+
log_error('Error processing file', "#{file}: #{e.message}")
|
49
|
+
end
|
50
|
+
|
51
|
+
def create_file_options(file)
|
52
|
+
options = @options.dup
|
53
|
+
options[:input_file] = file
|
54
|
+
options[:basic_output_file] = file.sub(/#{File.extname(file)}$/, '.json') if @options[:create_basic_json]
|
55
|
+
options[:enhanced_output_file] = file.sub(/#{File.extname(file)}$/, '.enhanced.json') if @options[:create_enhanced_json]
|
56
|
+
options
|
57
|
+
end
|
58
|
+
|
59
|
+
def run_klue_runner(options)
|
60
|
+
@klue_runner.run(
|
61
|
+
input_file: options[:input_file],
|
62
|
+
basic_output_file: options[:basic_output_file],
|
63
|
+
enhanced_output_file: options[:enhanced_output_file],
|
64
|
+
webhook_url: options[:webhook_url],
|
65
|
+
log_level: options[:log_level]
|
66
|
+
)
|
67
|
+
end
|
68
|
+
|
69
|
+
def log_watcher_info
|
70
|
+
log_info('Watching directories', @directories.join(', '))
|
71
|
+
log_info('Watching file extensions', @extensions.join(', '))
|
72
|
+
log_info('Create basic JSON', @options[:create_basic_json])
|
73
|
+
log_info('Create enhanced JSON', @options[:create_enhanced_json])
|
74
|
+
log_info('Webhook URL', @options[:webhook_url])
|
75
|
+
log_info('Log level', @options[:log_level])
|
76
|
+
end
|
77
|
+
|
78
|
+
def log_info(label, value)
|
79
|
+
puts "#{label.ljust(30)}: #{value}" if %i[info detailed].include?(@options[:log_level])
|
80
|
+
end
|
81
|
+
|
82
|
+
def log_error(label, value)
|
83
|
+
puts "#{label.ljust(30)}: #{value}"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'net/http'
|
4
|
+
require 'json'
|
5
|
+
require 'uri'
|
6
|
+
|
7
|
+
module Klue
|
8
|
+
module Langcraft
|
9
|
+
module DSL
|
10
|
+
# Webhook class for handling HTTP POST requests to specified URLs.
|
11
|
+
# This class is responsible for sending processed data to external services
|
12
|
+
# via webhooks, handling the delivery process, and logging the results.
|
13
|
+
class Webhook
|
14
|
+
def deliver(webhook_url, data)
|
15
|
+
klue_type = extract_klue_type(data)
|
16
|
+
uri = build_uri(webhook_url, klue_type)
|
17
|
+
response = send_request(uri, build_payload(klue_type, data))
|
18
|
+
log_response(response, uri)
|
19
|
+
response
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def extract_klue_type(data)
|
25
|
+
data.keys.first.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
def build_uri(webhook_url, klue_type)
|
29
|
+
URI.parse("#{webhook_url}?klue-type=#{klue_type}")
|
30
|
+
end
|
31
|
+
|
32
|
+
def build_payload(klue_type, data)
|
33
|
+
{ klue_type: klue_type, data: data }
|
34
|
+
end
|
35
|
+
|
36
|
+
def send_request(uri, payload)
|
37
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
38
|
+
request = Net::HTTP::Post.new(uri.path, { 'Content-Type' => 'application/json' })
|
39
|
+
request.body = payload.to_json
|
40
|
+
http.request(request)
|
41
|
+
end
|
42
|
+
|
43
|
+
def log_response(response, uri)
|
44
|
+
puts "Response: #{response.code} - #{response.message}"
|
45
|
+
puts "Endpoint: #{uri}"
|
46
|
+
log_response_body(response)
|
47
|
+
end
|
48
|
+
|
49
|
+
def log_response_body(response)
|
50
|
+
body = JSON.parse(response.body)
|
51
|
+
puts "DSL Type: #{body['type']}"
|
52
|
+
# puts JSON.pretty_generate(body['data'])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/klue/langcraft.rb
CHANGED
@@ -19,6 +19,9 @@ require 'klue/langcraft/dsl/processors/full_name_processor'
|
|
19
19
|
require 'klue/langcraft/dsl/interpreter'
|
20
20
|
require 'klue/langcraft/dsl/process_matcher'
|
21
21
|
require 'klue/langcraft/dsl/process_data_pipeline'
|
22
|
+
require 'klue/langcraft/dsl/webhook'
|
23
|
+
require 'klue/langcraft/dsl/watcher'
|
24
|
+
require 'klue/langcraft/dsl/klue_runner'
|
22
25
|
|
23
26
|
require 'base_process'
|
24
27
|
require 'process_file_collector'
|
data/package-lock.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "klue-langcraft",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.3.0",
|
4
4
|
"lockfileVersion": 3,
|
5
5
|
"requires": true,
|
6
6
|
"packages": {
|
7
7
|
"": {
|
8
8
|
"name": "klue-langcraft",
|
9
|
-
"version": "0.
|
9
|
+
"version": "0.3.0",
|
10
10
|
"devDependencies": {
|
11
11
|
"@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
|
12
12
|
"@semantic-release/changelog": "^6.0.3",
|
data/package.json
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: klue-langcraft
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Cruwys
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-10-
|
11
|
+
date: 2024-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: appydave-tools
|
@@ -62,6 +62,7 @@ files:
|
|
62
62
|
- Rakefile
|
63
63
|
- bin/console
|
64
64
|
- bin/dsl_watcher.rb
|
65
|
+
- bin/langcraft.rb
|
65
66
|
- bin/setup
|
66
67
|
- docs/dsl-class-diagram.md
|
67
68
|
- docs/dsl-examples.md
|
@@ -84,12 +85,15 @@ files:
|
|
84
85
|
- lib/dsl_process_data.rb
|
85
86
|
- lib/klue/langcraft.rb
|
86
87
|
- lib/klue/langcraft/dsl/interpreter.rb
|
88
|
+
- lib/klue/langcraft/dsl/klue_runner.rb
|
87
89
|
- lib/klue/langcraft/dsl/process_data_pipeline.rb
|
88
90
|
- lib/klue/langcraft/dsl/process_matcher.rb
|
89
91
|
- lib/klue/langcraft/dsl/processor_config.rb
|
90
92
|
- lib/klue/langcraft/dsl/processors/file_collector_processor.rb
|
91
93
|
- lib/klue/langcraft/dsl/processors/full_name_processor.rb
|
92
94
|
- lib/klue/langcraft/dsl/processors/processor.rb
|
95
|
+
- lib/klue/langcraft/dsl/watcher.rb
|
96
|
+
- lib/klue/langcraft/dsl/webhook.rb
|
93
97
|
- lib/klue/langcraft/tokenizer-old-needs-revisit/-brief.md
|
94
98
|
- lib/klue/langcraft/tokenizer-old-needs-revisit/parser.rb
|
95
99
|
- lib/klue/langcraft/tokenizer-old-needs-revisit/sample_usage.rb
|