ellipses 0.0.0

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