yap-shell 0.4.0 → 0.4.1

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