ellipses 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|