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.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/BEN/304/260OKU.md +137 -0
  3. data/CHANGELOG.md +9 -0
  4. data/LICENSE.md +675 -0
  5. data/README.md +1 -0
  6. data/bin/src +12 -0
  7. data/bin/srv +12 -0
  8. data/ellipses.gemspec +39 -0
  9. data/lib/ellipses-client.rb +4 -0
  10. data/lib/ellipses-server.rb +4 -0
  11. data/lib/ellipses.rb +5 -0
  12. data/lib/ellipses/client.rb +17 -0
  13. data/lib/ellipses/client/application.rb +77 -0
  14. data/lib/ellipses/client/cli.rb +24 -0
  15. data/lib/ellipses/client/cli/compile.rb +21 -0
  16. data/lib/ellipses/client/cli/decompile.rb +21 -0
  17. data/lib/ellipses/client/cli/init.rb +23 -0
  18. data/lib/ellipses/client/cli/update.rb +19 -0
  19. data/lib/ellipses/client/cli/validate.rb +21 -0
  20. data/lib/ellipses/client/cli/version.rb +17 -0
  21. data/lib/ellipses/client/command.rb +69 -0
  22. data/lib/ellipses/client/commands.rb +23 -0
  23. data/lib/ellipses/client/commands/include.rb +22 -0
  24. data/lib/ellipses/client/commands/reject.rb +17 -0
  25. data/lib/ellipses/client/commands/select.rb +17 -0
  26. data/lib/ellipses/client/commands/substitute.rb +23 -0
  27. data/lib/ellipses/client/commands/translate.rb +15 -0
  28. data/lib/ellipses/client/config.rb +33 -0
  29. data/lib/ellipses/client/directive.rb +39 -0
  30. data/lib/ellipses/client/error.rb +10 -0
  31. data/lib/ellipses/client/lines.rb +154 -0
  32. data/lib/ellipses/client/meta.rb +79 -0
  33. data/lib/ellipses/client/meta_file.rb +56 -0
  34. data/lib/ellipses/client/parser.rb +74 -0
  35. data/lib/ellipses/client/repository.rb +101 -0
  36. data/lib/ellipses/client/source.rb +69 -0
  37. data/lib/ellipses/error.rb +5 -0
  38. data/lib/ellipses/server.rb +10 -0
  39. data/lib/ellipses/server/application.rb +85 -0
  40. data/lib/ellipses/server/cli.rb +21 -0
  41. data/lib/ellipses/server/cli/dump.rb +20 -0
  42. data/lib/ellipses/server/cli/validate.rb +21 -0
  43. data/lib/ellipses/server/cli/version.rb +17 -0
  44. data/lib/ellipses/server/error.rb +7 -0
  45. data/lib/ellipses/server/meta.rb +69 -0
  46. data/lib/ellipses/server/meta_file.rb +39 -0
  47. data/lib/ellipses/server/repository.rb +47 -0
  48. data/lib/ellipses/server/symbols.rb +146 -0
  49. data/lib/ellipses/support.rb +3 -0
  50. data/lib/ellipses/support/deflate_path.rb +14 -0
  51. data/lib/ellipses/support/digest.rb +13 -0
  52. data/lib/ellipses/support/entropy.rb +17 -0
  53. data/lib/ellipses/support/expand_path.rb +13 -0
  54. data/lib/ellipses/support/intersperse_arrays.rb +14 -0
  55. data/lib/ellipses/support/prefixize_non_blank.rb +16 -0
  56. data/lib/ellipses/support/refinements.rb +20 -0
  57. data/lib/ellipses/support/sanitize_path.rb +101 -0
  58. data/lib/ellipses/support/search_path.rb +19 -0
  59. data/lib/ellipses/support/shell.rb +85 -0
  60. data/lib/ellipses/support/to_range.rb +15 -0
  61. data/lib/ellipses/support/ui.rb +55 -0
  62. data/lib/ellipses/support/updatelines.rb +19 -0
  63. data/lib/ellipses/support/writelines.rb +11 -0
  64. data/lib/ellipses/version.rb +5 -0
  65. metadata +264 -0
data/README.md ADDED
@@ -0,0 +1 @@
1
+ BENİOKU.md
data/bin/src ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'ellipses/client/cli'
5
+
6
+ def main
7
+ Dry::CLI.new(Ellipses::Client::CLI::Commands).()
8
+ rescue Ellipses::Error => e
9
+ Ellipses::Support::UI.abort e.message
10
+ end
11
+
12
+ main
data/bin/srv ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'ellipses/server/cli'
5
+
6
+ def main
7
+ Dry::CLI.new(Ellipses::Server::CLI::Commands).()
8
+ rescue Ellipses::Error => e
9
+ Ellipses::Support::UI.abort e.message
10
+ end
11
+
12
+ main
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
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'ellipses'
4
+ require_relative 'ellipses/client'
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'ellipses'
4
+ require_relative 'ellipses/server'
data/lib/ellipses.rb ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'ellipses/error'
4
+ require_relative 'ellipses/support'
5
+ require_relative 'ellipses/version'
@@ -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,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ellipses
4
+ module Client
5
+ module CLI
6
+ module Commands
7
+ class Version < Dry::CLI::Command
8
+ desc 'Print version'
9
+
10
+ def call(*)
11
+ puts Ellipses::VERSION
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ 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