yap-shell 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +9 -24
  3. data/Gemfile +1 -5
  4. data/LICENSE.txt +17 -18
  5. data/README.md +28 -14
  6. data/Rakefile +4 -1
  7. data/bin/yap +1 -3
  8. data/lib/.gitkeep +0 -0
  9. data/yap-shell.gemspec +12 -11
  10. metadata +19 -184
  11. data/.rspec +0 -2
  12. data/.travis.yml +0 -11
  13. data/DESIGN.md +0 -87
  14. data/Gemfile.travis +0 -8
  15. data/Gemfile.travis.lock +0 -104
  16. data/WISHLIST.md +0 -54
  17. data/bin/yap-dev +0 -45
  18. data/lib/tasks/gem.rake +0 -62
  19. data/lib/yap.rb +0 -52
  20. data/lib/yap/addon.rb +0 -24
  21. data/lib/yap/addon/base.rb +0 -52
  22. data/lib/yap/addon/export_as.rb +0 -12
  23. data/lib/yap/addon/loader.rb +0 -84
  24. data/lib/yap/addon/path.rb +0 -56
  25. data/lib/yap/addon/rc_file.rb +0 -21
  26. data/lib/yap/addon/reference.rb +0 -22
  27. data/lib/yap/cli.rb +0 -4
  28. data/lib/yap/cli/commands.rb +0 -6
  29. data/lib/yap/cli/commands/addon.rb +0 -14
  30. data/lib/yap/cli/commands/addon/disable.rb +0 -35
  31. data/lib/yap/cli/commands/addon/enable.rb +0 -35
  32. data/lib/yap/cli/commands/addon/list.rb +0 -37
  33. data/lib/yap/cli/commands/addon/search.rb +0 -99
  34. data/lib/yap/cli/commands/generate.rb +0 -13
  35. data/lib/yap/cli/commands/generate/addon.rb +0 -258
  36. data/lib/yap/cli/commands/generate/addonrb.template +0 -22
  37. data/lib/yap/cli/commands/generate/gemspec.template +0 -25
  38. data/lib/yap/cli/commands/generate/license.template +0 -21
  39. data/lib/yap/cli/commands/generate/rakefile.template +0 -6
  40. data/lib/yap/cli/commands/generate/readme.template +0 -40
  41. data/lib/yap/cli/options.rb +0 -162
  42. data/lib/yap/cli/options/addon.rb +0 -64
  43. data/lib/yap/cli/options/addon/disable.rb +0 -62
  44. data/lib/yap/cli/options/addon/enable.rb +0 -63
  45. data/lib/yap/cli/options/addon/list.rb +0 -65
  46. data/lib/yap/cli/options/addon/search.rb +0 -76
  47. data/lib/yap/cli/options/generate.rb +0 -59
  48. data/lib/yap/cli/options/generate/addon.rb +0 -63
  49. data/lib/yap/configuration.rb +0 -74
  50. data/lib/yap/gem_helper.rb +0 -195
  51. data/lib/yap/gem_tasks.rb +0 -6
  52. data/lib/yap/shell.rb +0 -116
  53. data/lib/yap/shell/aliases.rb +0 -58
  54. data/lib/yap/shell/builtins.rb +0 -18
  55. data/lib/yap/shell/builtins/alias.rb +0 -42
  56. data/lib/yap/shell/builtins/cd.rb +0 -57
  57. data/lib/yap/shell/builtins/env.rb +0 -11
  58. data/lib/yap/shell/commands.rb +0 -163
  59. data/lib/yap/shell/evaluation.rb +0 -439
  60. data/lib/yap/shell/evaluation/shell_expansions.rb +0 -99
  61. data/lib/yap/shell/event_emitter.rb +0 -18
  62. data/lib/yap/shell/execution.rb +0 -16
  63. data/lib/yap/shell/execution/builtin_command_execution.rb +0 -20
  64. data/lib/yap/shell/execution/command_execution.rb +0 -30
  65. data/lib/yap/shell/execution/context.rb +0 -128
  66. data/lib/yap/shell/execution/file_system_command_execution.rb +0 -137
  67. data/lib/yap/shell/execution/result.rb +0 -18
  68. data/lib/yap/shell/execution/ruby_command_execution.rb +0 -80
  69. data/lib/yap/shell/execution/shell_command_execution.rb +0 -30
  70. data/lib/yap/shell/prompt.rb +0 -21
  71. data/lib/yap/shell/repl.rb +0 -237
  72. data/lib/yap/shell/version.rb +0 -5
  73. data/lib/yap/world.rb +0 -286
  74. data/rcfiles/yaprc +0 -390
  75. data/scripts/4 +0 -8
  76. data/scripts/bg-vim +0 -4
  77. data/scripts/fail +0 -3
  78. data/scripts/letters +0 -8
  79. data/scripts/lots-of-output +0 -6
  80. data/scripts/pass +0 -3
  81. data/scripts/simulate-long-running +0 -4
  82. data/scripts/write-to-stderr.rb +0 -3
  83. data/scripts/write-to-stdout.rb +0 -3
  84. data/spec/features/addons/generating_an_addon_spec.rb +0 -55
  85. data/spec/features/addons/using_an_addon_spec.rb +0 -182
  86. data/spec/features/aliases_spec.rb +0 -78
  87. data/spec/features/environment_variables_spec.rb +0 -69
  88. data/spec/features/filesystem_commands_spec.rb +0 -61
  89. data/spec/features/first_time_spec.rb +0 -45
  90. data/spec/features/grouping_spec.rb +0 -81
  91. data/spec/features/line_editing_spec.rb +0 -174
  92. data/spec/features/range_spec.rb +0 -35
  93. data/spec/features/redirection_spec.rb +0 -234
  94. data/spec/features/repetition_spec.rb +0 -118
  95. data/spec/features/shell_expansions_spec.rb +0 -127
  96. data/spec/spec_helper.rb +0 -172
  97. data/spec/support/matchers/have_not_printed.rb +0 -30
  98. data/spec/support/matchers/have_printed.rb +0 -68
  99. data/spec/support/very_soon.rb +0 -9
  100. data/spec/support/yap_spec_dsl.rb +0 -258
  101. data/test.rb +0 -206
  102. data/update-rawline.sh +0 -6
@@ -1,13 +0,0 @@
1
- require 'fileutils'
2
- require 'term/ansicolor'
3
-
4
- module Yap
5
- module Cli
6
- module Commands
7
- class Generate
8
- def process
9
- end
10
- end
11
- end
12
- end
13
- end
@@ -1,258 +0,0 @@
1
- require 'fileutils'
2
- require 'term/ansicolor'
3
-
4
- module Yap
5
- module Cli
6
- module Commands
7
- class Generate::Addon
8
- attr_accessor :addon_name, :version, :use_git
9
-
10
- def initialize(addon_name)
11
- @addon_name = addon_name.gsub(/[^\w\-_]+/, '-').downcase
12
- @version = '0.1.0'
13
- @use_git = true
14
- end
15
-
16
- def doing(text, &block)
17
- print "#{text}"
18
- block.call
19
- puts " #{Term::ANSIColor.green('done')}"
20
- end
21
-
22
- def process
23
- puts "Creating addon #{Term::ANSIColor.yellow(addon_name)} in #{addon_dir}/"
24
- puts
25
-
26
- mkdir addon_dir
27
- Dir.chdir addon_dir do
28
- mkdir lib_path
29
- write_file 'Gemfile', gemfile_contents
30
- write_file gemspec_name, gemspec_contents
31
- write_file 'LICENSE.txt', license_contents
32
- write_file 'Rakefile', rakefile_contents
33
- write_file 'README.md', readme_contents
34
- write_file addonrb_path, addonrb_contents
35
- mkdir lib_addon_path
36
- write_file version_path, version_contents
37
-
38
- puts
39
- if use_git && `which git` && $?.exitstatus == 0
40
- write_file '.gitignore', gitignore_contents
41
- doing "git init . && git add . && git commit -m 'initial commit of #{addon_name}'" do
42
- `git init . && git add . && git commit -m 'initial commit of #{addon_name} addon for yap'`
43
- end
44
- else
45
- puts "Git initialization #{Term::ANSIColor.cyan('skipped')}"
46
- end
47
- end
48
-
49
- puts
50
- puts "Yap addon generated! A few helpful things to note:"
51
- puts
52
- puts <<-TEXT.gsub(/^\s*\|/, '')
53
- | * The #{Term::ANSIColor.yellow(addon_name)} addon has been generated in #{addon_dir}/
54
- | * It is a standard rubygem, has its own gemspec, and is named #{Term::ANSIColor.yellow(gem_safe_addon_name)}
55
- | * Yap loads the #{Term::ANSIColor.yellow(constant_name)}, found in #{addonrb_path} (start there)
56
- | * Share your addon with others by building a gem and pushing it to rubygems
57
- |
58
- |For more information see https://github.com/zdennis/yap-shell/wiki/Addons
59
- |
60
- |Now, to get started:
61
- |
62
- | cd #{gem_safe_addon_name}
63
- TEXT
64
- puts
65
- end
66
-
67
- private
68
-
69
- def mkdir(path)
70
- doing("Create directory: #{path}"){ FileUtils.mkdir_p path }
71
- end
72
-
73
- def write_file(path, contents)
74
- doing "Creating file: #{path}" do
75
- File.write path, contents
76
- end
77
- end
78
-
79
- def addon_dir
80
- gem_safe_addon_name
81
- end
82
-
83
- def addonrb_path
84
- File.join(lib_path, gem_safe_addon_name + '.rb')
85
- end
86
-
87
- def addonrb_contents
88
- contents = File.read(File.dirname(__FILE__) + '/addonrb.template')
89
- contents % addonrb_template_variables
90
- end
91
-
92
- def addonrb_template_variables
93
- export_as = addon_name
94
- export_as = "'#{addon_name}'" if addon_name =~ /-/
95
- {
96
- addon_dir: addon_dir,
97
- constant_name: constant_name,
98
- export_as: export_as
99
- }
100
- end
101
-
102
- def bundler_version
103
- require 'bundler/version'
104
- Bundler::VERSION.scan(/\d+\.\d+/).first ||
105
- fail('Cannot determine bundler version')
106
- end
107
-
108
- def constant_name
109
- gem_safe_addon_name.split(/\W+/).map(&:capitalize).join
110
- end
111
-
112
- def gemfile_contents
113
- <<-GEMFILE.gsub(/^\s*\|/, '')
114
- |source 'https://rubygems.org'
115
- |
116
- |# Specify your gem's dependencies in #{gemspec_name}
117
- |gemspec
118
- GEMFILE
119
- end
120
-
121
- def gem_safe_addon_name
122
- "yap-shell-addon-#{addon_name}"
123
- end
124
-
125
- def gemspec_name
126
- "#{gem_safe_addon_name}.gemspec"
127
- end
128
-
129
- def gemspec_contents
130
- contents = File.read(File.dirname(__FILE__) + '/gemspec.template')
131
- contents % gemspec_template_variables
132
- end
133
-
134
- def gemspec_template_variables
135
- {
136
- addon_dir: addon_dir,
137
- constant_name: constant_name,
138
- summary: "#{addon_name} summary goes here.",
139
- description: "#{addon_name} description goes here.",
140
- license: 'MIT',
141
- authors: [],
142
- email: 'you@example.com',
143
- homepage: '',
144
- bundler_version: bundler_version,
145
- rake_version: rake_version,
146
- rspec_version: rspec_version,
147
- yap_version: yap_version
148
- }
149
- end
150
-
151
- def gitignore_contents
152
- <<-TEXT.gsub(/^\s*/, '')
153
- *.gem
154
- *.rbc
155
- .bundle
156
- .config
157
- .yardoc
158
- Gemfile.lock
159
- InstalledFiles
160
- _yardoc
161
- coverage
162
- doc/
163
- lib/bundler/man
164
- pkg
165
- rdoc
166
- spec/reports
167
- test/tmp
168
- test/version_tmp
169
- tmp
170
- *.bundle
171
- *.so
172
- *.o
173
- *.a
174
- mkmf.log
175
- wiki/
176
- TEXT
177
- end
178
-
179
- def lib_path
180
- File.join('lib')
181
- end
182
-
183
- def lib_addon_path
184
- File.join(lib_path, addon_dir)
185
- end
186
-
187
- def license_contents
188
- contents = File.read(File.dirname(__FILE__) + '/license.template')
189
- contents % license_template_variables
190
- end
191
-
192
- def license_template_variables
193
- username = (`git config user.name` rescue 'YOUR_NAME')
194
- { username: username }
195
- end
196
-
197
- def rake_version
198
- require 'rake/version'
199
- version_string = if Rake.const_defined?(:VERSION)
200
- Rake::VERSION
201
- else
202
- Rake::Version::NUMBERS.join('.')
203
- end
204
- version_string.scan(/\d+\.\d+/).first ||
205
- fail('Cannot determine rake version')
206
- end
207
-
208
- def rakefile_contents
209
- File.read(File.dirname(__FILE__) + '/rakefile.template')
210
- end
211
-
212
- def readme_contents
213
- contents = File.read(File.dirname(__FILE__) + '/readme.template')
214
- contents % readme_template_variables
215
- end
216
-
217
- def readme_template_variables
218
- {
219
- addon_name: addon_name,
220
- gem_safe_addon_name: gem_safe_addon_name,
221
- lib_addon_path: lib_addon_path,
222
- addon_dir: addon_dir,
223
- constant_name: constant_name,
224
- summary: "#{addon_name} summary goes here.",
225
- description: "#{addon_name} description goes here.",
226
- license: 'MIT',
227
- authors: [],
228
- email: 'you@example.com',
229
- homepage: ''
230
- }
231
- end
232
-
233
- def rspec_version
234
- require 'rspec/version'
235
- RSpec::Version::STRING.scan(/\d+\.\d+/).first ||
236
- fail('Cannot determine rspec version')
237
- end
238
-
239
- def version_path
240
- File.join(lib_addon_path, 'version.rb')
241
- end
242
-
243
- def version_contents
244
- <<-RUBY.gsub(/^\s*\|/, '')
245
- |module #{constant_name}
246
- | VERSION = '#{version}'
247
- |end
248
- RUBY
249
- end
250
-
251
- def yap_version
252
- Yap::Shell::VERSION.scan(/\d+\.\d+/).first ||
253
- fail('Cannot determine yap version')
254
- end
255
- end
256
- end
257
- end
258
- end
@@ -1,22 +0,0 @@
1
- require 'yap/addon'
2
- require '%{addon_dir}/version'
3
-
4
- module %{constant_name}
5
- class Addon < ::Yap::Addon::Base
6
- self.export_as :%{export_as}
7
-
8
- def initialize_world(world)
9
- @world = world
10
-
11
- # Initialize your addon here. A few helpful things:
12
- #
13
- # @world is an Yap::World instance and it brings together
14
- # all the things you may want to interact with. E.g.
15
- # aliases, builtins, env, shell_commands, key bindings,
16
- # editor, prompt, etc.
17
- #
18
- # For more information see:
19
- # https://github.com/zdennis/yap-shell/wiki/Addons
20
- end
21
- end
22
- end
@@ -1,25 +0,0 @@
1
- require File.dirname(__FILE__) + '/lib/%{addon_dir}/version'
2
-
3
- Gem::Specification.new do |spec|
4
- spec.name = '%{addon_dir}'
5
- spec.version = %{constant_name}::VERSION
6
- spec.authors = ['Your name']
7
- spec.email = '%{email}'
8
- spec.date = Date.today.to_s
9
-
10
- spec.summary = '%{summary}'
11
- spec.description = '%{description}'
12
- spec.homepage = '%{homepage}'
13
- spec.license = '%{license}'
14
-
15
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(/^(test|spec|features)\//) }
16
- spec.bindir = "exe"
17
- spec.executables = spec.files.grep(/^exe\//) { |f| File.basename(f) }
18
- spec.require_paths = ["lib"]
19
-
20
- spec.add_dependency "yap-shell", "~> %{yap_version}"
21
-
22
- spec.add_development_dependency "bundler", "~> %{bundler_version}"
23
- spec.add_development_dependency "rake", "~> %{rake_version}"
24
- spec.add_development_dependency "rspec", "~> %{rspec_version}"
25
- end
@@ -1,21 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2016 %{username}
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
@@ -1,6 +0,0 @@
1
- require "yap/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task :default => :spec
@@ -1,40 +0,0 @@
1
- # %{addon_name} for yap-shell
2
-
3
- Welcome to your new yap addon! In this directory, you'll find the files you need to be able to package up your addon into a gem. Put your Ruby code in the file `%{lib_addon_path}`.
4
-
5
- TODO: Delete this and the text above, and describe your gem
6
-
7
- ## Installation
8
-
9
- Add this line to your application's Gemfile:
10
-
11
- ```ruby
12
- gem '%{gem_safe_addon_name}'
13
- ```
14
-
15
- And then execute:
16
-
17
- $ bundle
18
-
19
- Or install it yourself as:
20
-
21
- $ gem install %{gem_safe_addon_name}
22
-
23
- ## Usage
24
-
25
- TODO: Write usage instructions here
26
-
27
- ## Development
28
-
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
-
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
-
33
- ## Contributing
34
-
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/%{gem_safe_addon_name}.
36
-
37
-
38
- ## License
39
-
40
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -1,162 +0,0 @@
1
- require 'pathname'
2
- require 'yap/cli/options'
3
-
4
- module Yap
5
- module Cli
6
- module OptionsLoader
7
-
8
- def load_command(path)
9
- load_constant_from_path Pathname.new('yap/cli/commands').join(path)
10
- end
11
-
12
- def load_constant_from_path(path)
13
- requiring_parts = []
14
- path_parts = path.to_s.split('/')
15
- requiring_path = nil
16
- constant = path_parts.reduce(Object) do |constant, path_part|
17
- requiring_parts << path_part
18
- file2load = Yap.root.join('lib', requiring_parts.join('/') + "*.rb")
19
- requiring_path = Dir[ file2load ].sort.first
20
- if requiring_path
21
- require requiring_path
22
- path_part = File.basename(requiring_path).sub(/\.rb$/, '')
23
- requiring_parts.pop
24
- requiring_parts.push path_part
25
- constant_name = path_part.capitalize
26
- if constant.const_defined?(constant_name)
27
- constant = constant.const_get(constant_name)
28
- else
29
- fail "Couldn't find #{path_part} in #{constant}"
30
- end
31
- else
32
- fail LoadError, "Couldn't load any file for #{file2load}"
33
- end
34
- end
35
- Treefell['shell'].puts "#{inspect} loaded: #{constant}"
36
- constant
37
- end
38
-
39
- def load_relative_constant(path_str)
40
- base_path = self.class.name.downcase.gsub(/::/, '/')
41
- require_path = Pathname.new(base_path)
42
- load_constant_from_path require_path.join(path_str).to_s
43
- end
44
- end
45
-
46
- class Options
47
- include OptionsLoader
48
-
49
- attr_reader :options
50
-
51
- def initialize(options: {})
52
- @options = options
53
- @commands = []
54
- end
55
-
56
- def [](key)
57
- @options[key]
58
- end
59
-
60
- def commands
61
- @commands.dup.freeze
62
- end
63
-
64
- def parse(args)
65
- option_parser.order!(args)
66
- options_instance = self
67
-
68
- Yap.configuration.run_shell = false if args.any?
69
-
70
- scope = []
71
- require_path = Pathname.new("yap/cli/options")
72
- args_processed = []
73
-
74
- while args.any?
75
- if args_processed == args
76
- puts "Unknown option(s*): #{scope.concat([args.first]).join(' ')}"
77
- exit 1
78
- end
79
- args_processed = args.dup
80
-
81
- option_str = args.shift
82
- current_scope = scope + [option_str]
83
-
84
-
85
- begin
86
- options_class = load_relative_constant current_scope.join('/')
87
- options_instance = options_class.new(options: options)
88
- options[:option] = options_instance
89
- options_instance.parse(args)
90
- @commands << options_instance.command
91
-
92
- scope << option_str
93
- rescue LoadError => ex
94
- puts "Unknown option: #{option_str}"
95
- puts
96
- puts options_instance.help_message
97
- exit 1
98
- end
99
- end
100
- end
101
-
102
- def help_message
103
- option_parse.to_s
104
- end
105
-
106
- private
107
-
108
- def option_parser
109
- OptionParser.new do |opts|
110
- opts.banner = <<-TEXT.gsub(/^\s*\|/, '')
111
- |Usage: #{opts.program_name} [option|command]
112
- |
113
- |When a command is omitted the yap shell starts an interactive
114
- |session. Otherwise, the command is executed.
115
- |
116
- |Shell options:
117
- TEXT
118
- opts.on('-h', '--help', 'Prints this help') do
119
- puts opts
120
- commands = Dir[ File.dirname(__FILE__) + '/commands/*.rb' ].map do |path|
121
- command = File.basename(path).sub(/\.rb$/, '')
122
- "#{command}: #{Term::ANSIColor.cyan(opts.program_name + ' ' + command + ' --help')}"
123
- end
124
- commands = %| #{commands.join("\n ")}|
125
- puts <<-TEXT.gsub(/^\s*\|/, '')
126
- |
127
- |Commands:
128
- |
129
- |#{commands}
130
- |
131
- TEXT
132
- exit 0
133
- end
134
-
135
- opts.on('--skip-first-time', 'Disables creating ~/.yap directory on shell startup') do
136
- Yap.configuration.skip_first_time = true
137
- end
138
-
139
- opts.on('--addon-paths=PATHS', 'Paths to directories containing addons (comma-separated). This overwrites the default addon paths.') do |paths|
140
- Yap.configuration.addon_paths = paths.split(',').map(&:strip)
141
- end
142
-
143
- opts.on('--no-addons', 'Disables auto-loading addons on shell startup') do
144
- Yap.configuration.use_addons = false
145
- end
146
-
147
- opts.on('--no-history', 'Disables auto-loading or saving history') do
148
- Yap.configuration.use_history = false
149
- end
150
-
151
- opts.on('--rcfiles=PATHS', 'Paths to Yap rcfiles in the order they should load (comma-separated). This overwrites the default rcfiles.') do |paths|
152
- Yap.configuration.rcfiles = paths.split(',').map(&:strip)
153
- end
154
-
155
- opts.on('--no-rcfiles', 'Disables auto-loading rcfiles on shell startup') do
156
- Yap.configuration.use_rcfiles = false
157
- end
158
- end
159
- end
160
- end
161
- end
162
- end