ellipses 0.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 +7 -0
- data/BEN/304/260OKU.md +137 -0
- data/CHANGELOG.md +9 -0
- data/LICENSE.md +675 -0
- data/README.md +1 -0
- data/bin/src +12 -0
- data/bin/srv +12 -0
- data/ellipses.gemspec +39 -0
- data/lib/ellipses-client.rb +4 -0
- data/lib/ellipses-server.rb +4 -0
- data/lib/ellipses.rb +5 -0
- data/lib/ellipses/client.rb +17 -0
- data/lib/ellipses/client/application.rb +77 -0
- data/lib/ellipses/client/cli.rb +24 -0
- data/lib/ellipses/client/cli/compile.rb +21 -0
- data/lib/ellipses/client/cli/decompile.rb +21 -0
- data/lib/ellipses/client/cli/init.rb +23 -0
- data/lib/ellipses/client/cli/update.rb +19 -0
- data/lib/ellipses/client/cli/validate.rb +21 -0
- data/lib/ellipses/client/cli/version.rb +17 -0
- data/lib/ellipses/client/command.rb +69 -0
- data/lib/ellipses/client/commands.rb +23 -0
- data/lib/ellipses/client/commands/include.rb +22 -0
- data/lib/ellipses/client/commands/reject.rb +17 -0
- data/lib/ellipses/client/commands/select.rb +17 -0
- data/lib/ellipses/client/commands/substitute.rb +23 -0
- data/lib/ellipses/client/commands/translate.rb +15 -0
- data/lib/ellipses/client/config.rb +33 -0
- data/lib/ellipses/client/directive.rb +39 -0
- data/lib/ellipses/client/error.rb +10 -0
- data/lib/ellipses/client/lines.rb +154 -0
- data/lib/ellipses/client/meta.rb +79 -0
- data/lib/ellipses/client/meta_file.rb +56 -0
- data/lib/ellipses/client/parser.rb +74 -0
- data/lib/ellipses/client/repository.rb +101 -0
- data/lib/ellipses/client/source.rb +69 -0
- data/lib/ellipses/error.rb +5 -0
- data/lib/ellipses/server.rb +10 -0
- data/lib/ellipses/server/application.rb +85 -0
- data/lib/ellipses/server/cli.rb +21 -0
- data/lib/ellipses/server/cli/dump.rb +20 -0
- data/lib/ellipses/server/cli/validate.rb +21 -0
- data/lib/ellipses/server/cli/version.rb +17 -0
- data/lib/ellipses/server/error.rb +7 -0
- data/lib/ellipses/server/meta.rb +69 -0
- data/lib/ellipses/server/meta_file.rb +39 -0
- data/lib/ellipses/server/repository.rb +47 -0
- data/lib/ellipses/server/symbols.rb +146 -0
- data/lib/ellipses/support.rb +3 -0
- data/lib/ellipses/support/deflate_path.rb +14 -0
- data/lib/ellipses/support/digest.rb +13 -0
- data/lib/ellipses/support/entropy.rb +17 -0
- data/lib/ellipses/support/expand_path.rb +13 -0
- data/lib/ellipses/support/intersperse_arrays.rb +14 -0
- data/lib/ellipses/support/prefixize_non_blank.rb +16 -0
- data/lib/ellipses/support/refinements.rb +20 -0
- data/lib/ellipses/support/sanitize_path.rb +101 -0
- data/lib/ellipses/support/search_path.rb +19 -0
- data/lib/ellipses/support/shell.rb +85 -0
- data/lib/ellipses/support/to_range.rb +15 -0
- data/lib/ellipses/support/ui.rb +55 -0
- data/lib/ellipses/support/updatelines.rb +19 -0
- data/lib/ellipses/support/writelines.rb +11 -0
- data/lib/ellipses/version.rb +5 -0
- metadata +264 -0
data/README.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
BENİOKU.md
|
data/bin/src
ADDED
data/bin/srv
ADDED
data/ellipses.gemspec
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.push File.expand_path('lib', __dir__)
|
4
|
+
|
5
|
+
require 'ellipses/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |s| # rubocop:disable Metrics/BlockLength
|
8
|
+
s.name = 'ellipses'
|
9
|
+
s.author = 'Recai Oktaş'
|
10
|
+
s.email = 'roktas@gmail.com'
|
11
|
+
s.license = 'GPL-3.0-or-later'
|
12
|
+
s.version = Ellipses::VERSION.dup
|
13
|
+
s.summary = 'Ellipses'
|
14
|
+
s.description = 'Ellipses'
|
15
|
+
|
16
|
+
s.homepage = 'https://alaturka.github.io/ellipses'
|
17
|
+
s.files = Dir['CHANGELOG.md', 'LICENSE.md', 'README.md', 'BENİOKU.md', 'ellipses.gemspec', 'lib/**/*']
|
18
|
+
s.executables = %w[src srv]
|
19
|
+
s.require_paths = %w[lib]
|
20
|
+
|
21
|
+
s.metadata['changelog_uri'] = 'https://github.com/alaturka/ellipses/blob/master/CHANGELOG.md'
|
22
|
+
s.metadata['source_code_uri'] = 'https://github.com/alaturka/ellipses'
|
23
|
+
s.metadata['bug_tracker_uri'] = 'https://github.com/alaturka/ellipses/issues'
|
24
|
+
|
25
|
+
s.required_ruby_version = '>= 2.5.0' # rubocop:disable Gemspec/RequiredRubyVersion
|
26
|
+
|
27
|
+
s.add_dependency 'dry-cli'
|
28
|
+
s.add_dependency 'tomlrb'
|
29
|
+
|
30
|
+
s.add_development_dependency 'bundler'
|
31
|
+
s.add_development_dependency 'minitest-focus', '>= 1.2.1'
|
32
|
+
s.add_development_dependency 'minitest-reporters', '>= 1.4.3'
|
33
|
+
s.add_development_dependency 'rake'
|
34
|
+
s.add_development_dependency 'rubocop'
|
35
|
+
s.add_development_dependency 'rubocop-minitest'
|
36
|
+
s.add_development_dependency 'rubocop-performance'
|
37
|
+
s.add_development_dependency 'rubocop-rake'
|
38
|
+
s.add_development_dependency 'rubygems-tasks'
|
39
|
+
end
|
data/lib/ellipses.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ellipses'
|
4
|
+
|
5
|
+
require_relative 'client/error'
|
6
|
+
require_relative 'client/command'
|
7
|
+
require_relative 'client/parser'
|
8
|
+
require_relative 'client/directive'
|
9
|
+
require_relative 'client/lines'
|
10
|
+
require_relative 'client/source'
|
11
|
+
require_relative 'client/meta'
|
12
|
+
require_relative 'client/meta_file'
|
13
|
+
require_relative 'client/repository'
|
14
|
+
require_relative 'client/config'
|
15
|
+
require_relative 'client/application'
|
16
|
+
|
17
|
+
require_relative 'client/commands'
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ellipses
|
4
|
+
module Client
|
5
|
+
class Application
|
6
|
+
attr_reader :config, :repository, :loader, :server
|
7
|
+
|
8
|
+
def initialize(loader: nil, repository: nil, server: nil, **options)
|
9
|
+
@config = Config.new(**options)
|
10
|
+
@loader = loader || MetaFile.new
|
11
|
+
@repository = repository || Repository.new(@loader)
|
12
|
+
@server = server || Server::Application.new(config.paths)
|
13
|
+
end
|
14
|
+
|
15
|
+
def init(directory)
|
16
|
+
@loader = MetaFile.create(directory)
|
17
|
+
end
|
18
|
+
|
19
|
+
def shutdown
|
20
|
+
Support::UI.warn 'Nothing changed' unless repository.save
|
21
|
+
|
22
|
+
loader.write(dump) and Support::UI.info('Updated lock file')
|
23
|
+
end
|
24
|
+
|
25
|
+
def compile(file)
|
26
|
+
init!
|
27
|
+
repository.register(file).recompile(server)
|
28
|
+
end
|
29
|
+
|
30
|
+
def compile!(file)
|
31
|
+
compile(file)
|
32
|
+
shutdown
|
33
|
+
end
|
34
|
+
|
35
|
+
def decompile(file)
|
36
|
+
init!
|
37
|
+
return unless repository.registered?(file)
|
38
|
+
|
39
|
+
repository[file].decompile
|
40
|
+
repository.unregister(file)
|
41
|
+
end
|
42
|
+
|
43
|
+
def decompile!(file)
|
44
|
+
decompile(file)
|
45
|
+
shutdown
|
46
|
+
end
|
47
|
+
|
48
|
+
def update
|
49
|
+
init!
|
50
|
+
repository.each_source { |source| source.recompile(server) }
|
51
|
+
shutdown
|
52
|
+
end
|
53
|
+
|
54
|
+
def validate!(*)
|
55
|
+
raise NotImplementedError
|
56
|
+
end
|
57
|
+
|
58
|
+
def dump
|
59
|
+
repository.dump
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def init!
|
65
|
+
raise Error, 'Must be initialized' unless loader.loaded?
|
66
|
+
|
67
|
+
repository.load(loader)
|
68
|
+
end
|
69
|
+
|
70
|
+
class << self
|
71
|
+
%i[init compile compile! decompile decompile! update].each do |meth|
|
72
|
+
define_method(meth) { |*args, **options| new(**options).public_send(meth, *args) }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dry/cli'
|
4
|
+
|
5
|
+
require 'ellipses/client'
|
6
|
+
|
7
|
+
module Ellipses
|
8
|
+
module Client
|
9
|
+
module CLI
|
10
|
+
module Commands
|
11
|
+
extend Dry::CLI::Registry
|
12
|
+
|
13
|
+
Dir[File.join(__dir__, 'cli/*.rb')].each { |command| require command }
|
14
|
+
|
15
|
+
register 'compile', Compile
|
16
|
+
register 'decompile', Decompile
|
17
|
+
register 'init', Init
|
18
|
+
register 'update', Update
|
19
|
+
register 'validate', Validate
|
20
|
+
register 'version', Version, aliases: ['v', '-v', '--version']
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ellipses
|
4
|
+
module Client
|
5
|
+
module CLI
|
6
|
+
module Commands
|
7
|
+
class Compile < Dry::CLI::Command
|
8
|
+
desc 'Compile file'
|
9
|
+
|
10
|
+
argument :file, type: :string, required: true, desc: 'File to be compiled'
|
11
|
+
|
12
|
+
option :paths, type: :array, default: [], desc: 'Providers path'
|
13
|
+
|
14
|
+
def call(file:, paths:)
|
15
|
+
Application.compile!(file, paths: paths)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ellipses
|
4
|
+
module Client
|
5
|
+
module CLI
|
6
|
+
module Commands
|
7
|
+
class Decompile < Dry::CLI::Command
|
8
|
+
desc 'Decompile file'
|
9
|
+
|
10
|
+
argument :file, type: :string, required: true, desc: 'File to be decompiled'
|
11
|
+
|
12
|
+
option :paths, type: :array, default: [], desc: 'Providers path'
|
13
|
+
|
14
|
+
def call(file:, paths:)
|
15
|
+
Application.decompile!(file, paths: paths)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ellipses
|
4
|
+
module Client
|
5
|
+
module CLI
|
6
|
+
module Commands
|
7
|
+
class Init < Dry::CLI::Command
|
8
|
+
desc 'Initialize repository'
|
9
|
+
|
10
|
+
argument :rootdir, default: '.', desc: 'Root directory'
|
11
|
+
|
12
|
+
example [
|
13
|
+
'path/to/rootdir # Initialize repository at root directory'
|
14
|
+
]
|
15
|
+
|
16
|
+
def call(rootdir:, **)
|
17
|
+
Application.init(rootdir)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ellipses
|
4
|
+
module Client
|
5
|
+
module CLI
|
6
|
+
module Commands
|
7
|
+
class Update < Dry::CLI::Command
|
8
|
+
desc 'Update'
|
9
|
+
|
10
|
+
option :paths, type: :array, default: [], desc: 'Providers path'
|
11
|
+
|
12
|
+
def call(*, paths:)
|
13
|
+
Application.update(paths: paths)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ellipses
|
4
|
+
module Client
|
5
|
+
module CLI
|
6
|
+
module Commands
|
7
|
+
class Validate < Dry::CLI::Command
|
8
|
+
desc 'Validate file'
|
9
|
+
|
10
|
+
argument :file, type: :string, required: true, desc: 'File to be validated'
|
11
|
+
|
12
|
+
option :paths, type: :array, default: [], desc: 'Providers path'
|
13
|
+
|
14
|
+
def call(file:, paths:)
|
15
|
+
Application.validate!(file, paths: paths)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ostruct'
|
4
|
+
|
5
|
+
module Ellipses
|
6
|
+
module Client
|
7
|
+
class Command
|
8
|
+
Error = Class.new Error
|
9
|
+
|
10
|
+
using Support::Refinements::Struct::FromHashWithoutBogusKeys
|
11
|
+
|
12
|
+
Proto = Struct.new :name, :klass, :argc, keyword_init: true do
|
13
|
+
def valid?(argv)
|
14
|
+
argc.nil? || argc.cover?(argv.size)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module DSL
|
19
|
+
def command(name, argc: (0..))
|
20
|
+
Commands.register name, Proto.new(name: name, klass: self, argc: Support.to_range(argc))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
module Mixins
|
25
|
+
module SetupPattern
|
26
|
+
def patternize(arg = nil)
|
27
|
+
param.pattern = Regexp.new(arg || argv.first)
|
28
|
+
rescue RegexpError => e
|
29
|
+
error(e.message)
|
30
|
+
end
|
31
|
+
|
32
|
+
def setup
|
33
|
+
patternize
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
extend DSL
|
39
|
+
|
40
|
+
attr_reader :argv, :server
|
41
|
+
|
42
|
+
def initialize(argv, server)
|
43
|
+
@argv = argv
|
44
|
+
@server = server
|
45
|
+
@param = OpenStruct.new
|
46
|
+
|
47
|
+
setup
|
48
|
+
end
|
49
|
+
|
50
|
+
def setup; end
|
51
|
+
|
52
|
+
def call(input, **kwargs)
|
53
|
+
raise NotImplementedError
|
54
|
+
end
|
55
|
+
|
56
|
+
def error(*args)
|
57
|
+
raise Error, *args
|
58
|
+
end
|
59
|
+
|
60
|
+
def to_s
|
61
|
+
self.class.name.downcase
|
62
|
+
end
|
63
|
+
|
64
|
+
protected
|
65
|
+
|
66
|
+
attr_reader :param
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ellipses
|
4
|
+
module Client
|
5
|
+
module Commands
|
6
|
+
@registry = {}
|
7
|
+
|
8
|
+
def self.available?(name)
|
9
|
+
@registry.key? name
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.register(name, proto)
|
13
|
+
@registry[name] = proto
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.proto(name)
|
17
|
+
@registry[name]
|
18
|
+
end
|
19
|
+
|
20
|
+
Dir[File.join(__dir__, 'commands', '*.rb')].each { |klass| require klass }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ellipses
|
4
|
+
module Client
|
5
|
+
module Commands
|
6
|
+
class Include < Command
|
7
|
+
command 'include', argc: (1..)
|
8
|
+
|
9
|
+
def setup
|
10
|
+
source, *param.symbols = argv
|
11
|
+
param.uri, param.port = source.split(':')
|
12
|
+
|
13
|
+
server.available!(param.uri)
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(*)
|
17
|
+
server.dump(uri: param.uri, symbols: param.symbols, port: param.port)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|