yap-shell 0.4.0 → 0.4.1

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.
@@ -16,7 +16,12 @@ module Yap
16
16
  @addon_name ||= self.name.split(/::/).last.scan(/[A-Z][^A-Z]+/).map(&:downcase).reject{ |f| f == "addon" }.join("_").to_sym
17
17
  end
18
18
 
19
+ def debug_log(msg)
20
+ Treefell['addons'].puts "addon=#{addon_name} #{msg}"
21
+ end
22
+
19
23
  def require(name)
24
+ Treefell['shell'].puts "addon is requiring: #{name}"
20
25
  directory = File.dirname caller[0].split(':').first
21
26
  lib_path = File.join directory, "lib"
22
27
  support_file = File.join lib_path, "#{name}.rb"
@@ -26,8 +31,10 @@ module Yap
26
31
  o
27
32
  end
28
33
  if File.exists?(support_file) && namespace
34
+ Treefell['shell'].puts "#{name} is found in addon, loading #{support_file} in context of #{namespace}"
29
35
  namespace.module_eval IO.read(support_file), support_file, lineno=1
30
36
  else
37
+ Treefell['shell'].puts "#{name} not found in addon, falling back to super"
31
38
  super(name)
32
39
  end
33
40
  end
@@ -37,6 +44,10 @@ module Yap
37
44
  def addon_name
38
45
  @addon_name ||= self.class.addon_name
39
46
  end
47
+
48
+ def debug_log(msg)
49
+ self.class.debug_log(msg)
50
+ end
40
51
  end
41
52
  end
42
53
 
@@ -51,33 +62,51 @@ module Yap
51
62
  module Addons
52
63
  def self.syntax_ok?(file)
53
64
  `ruby -c #{file}`
54
- $?.exitstatus == 0
65
+ ($?.exitstatus == 0).tap do |result|
66
+ Treefell['shell'].puts "is syntax ok?(#{file.inspect}) #{result}"
67
+ end
55
68
  end
56
69
 
57
70
  def self.load_rcfiles(files)
71
+ Treefell['shell'].puts "loading rcfiles #{files.inspect}"
58
72
  files.map do |file|
59
- RcFile.new IO.read(file)
60
- end
73
+ if File.exists?(file)
74
+ RcFile.new file
75
+ else
76
+ Treefell['shell'].puts "skipping non-existent rcfile #{file.inspect} "
77
+ end
78
+ end.flatten.compact
61
79
  end
62
80
 
63
81
  def self.load_directories(directories)
82
+ Treefell['shell'].puts "loading addon directories: #{directories.inspect}"
64
83
  directories.map do |d|
65
- next unless File.directory?(d)
66
- load_directory(d).map(&:new)
67
- end.flatten
84
+ if File.directory?(d)
85
+ load_directory(d).map(&:new)
86
+ else
87
+ Treefell['shell'].puts "skipping addon directory #{d.inspect}, does not exist or is not a directory"
88
+ end
89
+ end.flatten.compact.tap do |results|
90
+ Treefell['shell'].puts "loaded addons: #{results.inspect}"
91
+ end
68
92
  end
69
93
 
70
94
  class RcFile < Addon
71
- def initialize(contents)
72
- @contents = contents
95
+ attr_reader :file
96
+
97
+ def initialize(file)
98
+ @file = file
73
99
  end
74
100
 
75
101
  def initialize_world(world)
76
- world.instance_eval @contents
102
+ Treefell['shell'].puts "initializing rcfile: #{file}"
103
+ world.instance_eval File.read(@file)
77
104
  end
78
105
  end
79
106
 
80
107
  def self.load_directory(directory)
108
+ directory = File.expand_path(directory)
109
+ Treefell['shell'].puts "loading addon from directory: #{directory}"
81
110
  namespace = File.basename(directory).
82
111
  split(/[_-]/).
83
112
  map(&:capitalize).join
@@ -96,23 +125,35 @@ module Yap
96
125
  end
97
126
 
98
127
  Yap::World::UserAddons.const_set namespace, addon_module
128
+ Treefell['shell'].puts "creating addon namespace: Yap::World::UserAddons::#{namespace}"
99
129
 
100
130
  lib_path = File.join directory, "lib"
131
+ Treefell['shell'].puts "prepending addon path to $LOAD_PATH: #{lib_path}"
101
132
  $LOAD_PATH.unshift lib_path
102
133
 
103
- gemfiles = Dir["#{directory}/Gemfile"]
104
- gemfiles.each do |gemfile|
105
- eval File.read(gemfile)
134
+ gemfiles = Dir["#{directory}/Gemfile"]
135
+ Treefell['shell'].puts "looking for Gemfile in #{namespace} addon directory: #{directory}"
136
+ if gemfiles.any?
137
+ gemfiles.each do |gemfile|
138
+ Treefell['shell'].puts "loading #{gemfile} for addon"
139
+ eval File.read(gemfile)
140
+ end
141
+ else
142
+ Treefell['shell'].puts "No Gemfile found for #{namespace} addon"
106
143
  end
107
144
 
108
145
  Dir["#{directory}/*.rb"].map do |addon_file|
109
146
  load_file(addon_file, namespace:namespace, dir:directory, addon_module:addon_module)
110
147
  end
111
148
  ensure
112
- $LOAD_PATH.delete(lib_path) if lib_path
149
+ if lib_path
150
+ Treefell['shell'].puts "Removing addon #{lib_path} path from $LOAD_PATH"
151
+ $LOAD_PATH.delete(lib_path)
152
+ end
113
153
  end
114
154
 
115
155
  def self.load_file(file, dir:, namespace:, addon_module:)
156
+ Treefell['shell'].puts "loading #{namespace} addon file: #{file}"
116
157
  klass_name = file.sub(dir, "").
117
158
  sub(/^#{Regexp.escape(File::Separator)}/, "").
118
159
  sub(File.extname(file.to_s), "").
@@ -128,6 +169,8 @@ module Yap
128
169
  else
129
170
  raise("Did not find #{klass_name} in #{file}")
130
171
  end
172
+ end.tap do |loaded_addon|
173
+ Treefell['shell'].puts "loaded #{File.dirname(file)} as #{loaded_addon.inspect}"
131
174
  end
132
175
  end
133
176
  end
data/rcfiles/.yaprc CHANGED
@@ -259,7 +259,13 @@ end
259
259
 
260
260
  func :'run-modified-specs' do |stdin:, stdout:|
261
261
  str = `git status`
262
- specs = str.scan(/\S+_spec.rb/)
262
+ files = str.scan(/\S+.rb/)
263
+ specs, non_specs = files.partition { |file| file.match(/\S+_spec.rb/) }
264
+ non_specs.each do |non_spec|
265
+ filename_without_extension = non_spec.gsub(/^[^\/]+\//, '').gsub(/\.rb$/, '')
266
+ specs.concat Dir["spec/**/*#{filename_without_extension}_spec.rb"]
267
+ end
268
+
263
269
  cmd = "bundle exec rspec #{specs.join(' ')}"
264
270
  stdout.puts cmd
265
271
  shell cmd
data/yap-shell.gemspec CHANGED
@@ -60,11 +60,12 @@ Gem::Specification.new do |spec|
60
60
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
61
61
  spec.require_paths = ["lib"]
62
62
 
63
- spec.add_dependency "yap-shell-parser", "~> 0.5.0"
63
+ spec.add_dependency "yap-shell-parser", "~> 0.6.1"
64
64
  spec.add_dependency "term-ansicolor", "~> 1.3"
65
65
  spec.add_dependency "ruby-termios", "~> 0.9.6"
66
66
  spec.add_dependency "ruby-terminfo", "~> 0.1.1"
67
67
  spec.add_dependency "yap-rawline", "~> 0.3.1"
68
+ spec.add_dependency "treefell", "~> 0.2.3"
68
69
 
69
70
  spec.add_development_dependency "bundler", "~> 1.6"
70
71
  spec.add_development_dependency "rake", "~> 10"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yap-shell
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zach Dennis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-06 00:00:00.000000000 Z
11
+ date: 2016-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: yap-shell-parser
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.5.0
19
+ version: 0.6.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.5.0
26
+ version: 0.6.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: term-ansicolor
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.3.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: treefell
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.2.3
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.2.3
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: bundler
85
99
  requirement: !ruby/object:Gem::Requirement