xing-root 0.0.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.
- checksums.yaml +7 -0
- data/lib/xing/edicts/clean-rake.rb +16 -0
- data/lib/xing/edicts/clean-run.rb +40 -0
- data/lib/xing/edicts/launch-browser.rb +91 -0
- data/lib/xing/edicts/start-child.rb +11 -0
- data/lib/xing/edicts/structure-checker.rb +99 -0
- data/lib/xing/edicts.rb +3 -0
- data/lib/xing/managers/child.rb +110 -0
- data/lib/xing/managers/tmux.rb +188 -0
- data/lib/xing/tasks/backend.rb +45 -0
- data/lib/xing/tasks/build.rb +28 -0
- data/lib/xing/tasks/develop.rb +144 -0
- data/lib/xing/tasks/frontend.rb +44 -0
- data/lib/xing/tasks/spec.rb +79 -0
- data/lib/xing/tasks/tasklib.rb +25 -0
- data/lib/xing/tasks.rb +8 -0
- data/lib/xing-root.rb +4 -0
- data/spec/edicts/clean_rake_spec.rb +43 -0
- data/spec/edicts/clean_run_spec.rb +43 -0
- data/spec/edicts/launch-browser_spec.rb +91 -0
- data/spec/edicts/start-child_spec.rb +30 -0
- data/spec/managers/tmux_spec.rb +104 -0
- data/spec/support/file-sandbox.rb +163 -0
- data/spec/tasks/develop_spec.rb +46 -0
- data/spec/tasks/frontend_spec.rb +26 -0
- data/spec/tasks/structure_checker_spec.rb +41 -0
- metadata +119 -0
@@ -0,0 +1,163 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module FileSandbox
|
4
|
+
def self.included(spec)
|
5
|
+
return unless spec.respond_to? :before
|
6
|
+
|
7
|
+
spec.before do
|
8
|
+
setup_sandbox
|
9
|
+
end
|
10
|
+
|
11
|
+
spec.after do
|
12
|
+
teardown_sandbox
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class HaveContents
|
17
|
+
def initialize(contents)
|
18
|
+
@contents = contents
|
19
|
+
end
|
20
|
+
|
21
|
+
def matches?(target)
|
22
|
+
case @contents
|
23
|
+
when Regexp
|
24
|
+
@contents =~ target.contents
|
25
|
+
when String
|
26
|
+
@contents == target.contents
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def have_contents(expected)
|
32
|
+
HaveContents.new(expected)
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_reader :sandbox
|
36
|
+
|
37
|
+
def in_sandbox(&block)
|
38
|
+
raise "I expected to create a sandbox as you passed in a block to me" if !block_given?
|
39
|
+
|
40
|
+
setup_sandbox
|
41
|
+
original_error = nil
|
42
|
+
|
43
|
+
begin
|
44
|
+
yield @sandbox
|
45
|
+
rescue => e
|
46
|
+
original_error = e
|
47
|
+
raise
|
48
|
+
ensure
|
49
|
+
begin
|
50
|
+
teardown_sandbox
|
51
|
+
rescue
|
52
|
+
if original_error
|
53
|
+
STDERR.puts "ALERT: a test raised an error and failed to release some lock(s) in the sandbox directory"
|
54
|
+
raise(original_error)
|
55
|
+
else
|
56
|
+
raise
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def setup_sandbox(path = '__sandbox')
|
63
|
+
unless @sandbox
|
64
|
+
@sandbox = Sandbox.new(path)
|
65
|
+
@__old_path_for_sandbox = Dir.pwd
|
66
|
+
Dir.chdir(@sandbox.root)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def teardown_sandbox
|
71
|
+
if @sandbox
|
72
|
+
Dir.chdir(@__old_path_for_sandbox)
|
73
|
+
@sandbox.clean_up
|
74
|
+
@sandbox = nil
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
class Sandbox
|
79
|
+
attr_reader :root
|
80
|
+
|
81
|
+
def initialize(path = '__sandbox')
|
82
|
+
@root = File.expand_path(path)
|
83
|
+
clean_up
|
84
|
+
FileUtils.mkdir_p @root
|
85
|
+
end
|
86
|
+
|
87
|
+
def [](name)
|
88
|
+
SandboxFile.new(File.join(@root, name), name)
|
89
|
+
end
|
90
|
+
|
91
|
+
# usage new :file=>'my file.rb', :with_contents=>'some stuff'
|
92
|
+
def new(options)
|
93
|
+
if options.has_key? :directory
|
94
|
+
dir = self[options.delete(:directory)]
|
95
|
+
FileUtils.mkdir_p dir.path
|
96
|
+
else
|
97
|
+
file = self[options.delete(:file)]
|
98
|
+
if (binary_content = options.delete(:with_binary_content) || options.delete(:with_binary_contents))
|
99
|
+
file.binary_content = binary_content
|
100
|
+
else
|
101
|
+
file.content = (options.delete(:with_content) || options.delete(:with_contents) || '')
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
raise "unexpected keys '#{options.keys.join(', ')}'" unless options.empty?
|
106
|
+
|
107
|
+
dir || file
|
108
|
+
end
|
109
|
+
|
110
|
+
def remove(options)
|
111
|
+
name = File.join(@root, options[:file])
|
112
|
+
FileUtils.remove_file name
|
113
|
+
end
|
114
|
+
|
115
|
+
def clean_up
|
116
|
+
FileUtils.rm_rf @root
|
117
|
+
if File.exists? @root
|
118
|
+
raise "Could not remove directory #{@root.inspect}, something is probably still holding a lock on it"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
|
124
|
+
class SandboxFile
|
125
|
+
attr_reader :path
|
126
|
+
|
127
|
+
def initialize(path, sandbox_path)
|
128
|
+
@path = path
|
129
|
+
@sandbox_path = sandbox_path
|
130
|
+
end
|
131
|
+
|
132
|
+
def inspect
|
133
|
+
"SandboxFile: #@sandbox_path"
|
134
|
+
end
|
135
|
+
|
136
|
+
def exist?
|
137
|
+
File.exist? path
|
138
|
+
end
|
139
|
+
|
140
|
+
def content
|
141
|
+
File.read path
|
142
|
+
end
|
143
|
+
|
144
|
+
def content=(content)
|
145
|
+
FileUtils.mkdir_p File.dirname(@path)
|
146
|
+
File.open(@path, "w") {|f| f << content}
|
147
|
+
end
|
148
|
+
|
149
|
+
def binary_content=(content)
|
150
|
+
FileUtils.mkdir_p File.dirname(@path)
|
151
|
+
File.open(@path, "wb") {|f| f << content}
|
152
|
+
end
|
153
|
+
|
154
|
+
def create
|
155
|
+
self.content = ''
|
156
|
+
end
|
157
|
+
|
158
|
+
alias exists? exist?
|
159
|
+
alias contents content
|
160
|
+
alias contents= content=
|
161
|
+
alias binary_contents= binary_content=
|
162
|
+
end
|
163
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'xing/tasks'
|
2
|
+
|
3
|
+
|
4
|
+
describe Xing::Tasks::Develop do
|
5
|
+
before :each do
|
6
|
+
Rake.application = nil
|
7
|
+
Xing::Tasks::Develop.new
|
8
|
+
end
|
9
|
+
|
10
|
+
it "creates all the develop rake tasks" do
|
11
|
+
expect(Rake.application.lookup "develop:launch_browser").to be_a(Rake::Task)
|
12
|
+
expect(Rake.application.lookup "develop:grunt_watch").to be_a(Rake::Task)
|
13
|
+
expect(Rake.application.lookup "develop:compass_watch").to be_a(Rake::Task)
|
14
|
+
expect(Rake.application.lookup "develop:rails_server").to be_a(Rake::Task)
|
15
|
+
expect(Rake.application.lookup "develop:sidekiq").to be_a(Rake::Task)
|
16
|
+
expect(Rake.application.lookup "develop:static_assets").to be_a(Rake::Task)
|
17
|
+
expect(Rake.application.lookup "develop:service:grunt_watch").to be_a(Rake::Task)
|
18
|
+
expect(Rake.application.lookup "develop:service:compass_watch").to be_a(Rake::Task)
|
19
|
+
expect(Rake.application.lookup "develop:service:rails_server").to be_a(Rake::Task)
|
20
|
+
expect(Rake.application.lookup "develop:service:sidekiq").to be_a(Rake::Task)
|
21
|
+
expect(Rake.application.lookup "develop:service:static_assets").to be_a(Rake::Task)
|
22
|
+
expect(Rake.application.lookup "develop:wait").to be_a(Rake::Task)
|
23
|
+
expect(Rake.application.lookup "develop:startup").to be_a(Rake::Task)
|
24
|
+
expect(Rake.application.lookup "develop:all").to be_a(Rake::Task)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "doesn't create TMUX clones" do
|
28
|
+
manager = Rake.application.lookup("develop:grunt_watch").edict.manager
|
29
|
+
expect(Rake.application.lookup("develop:compass_watch").edict.manager).to eql(manager)
|
30
|
+
expect(Rake.application.lookup("develop:rails_server").edict.manager).to eql(manager)
|
31
|
+
expect(Rake.application.lookup("develop:sidekiq").edict.manager).to eql(manager)
|
32
|
+
expect(Rake.application.lookup("develop:static_assets").edict.manager).to eql(manager)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "creates correct child tasks" do
|
36
|
+
expect(Rake.application.lookup("develop:grunt_watch").edict.child_task).to eq('develop:service:grunt_watch')
|
37
|
+
expect(Rake.application.lookup("develop:compass_watch").edict.child_task).to eq('develop:service:compass_watch')
|
38
|
+
expect(Rake.application.lookup("develop:rails_server").edict.child_task).to eq('develop:service:rails_server')
|
39
|
+
expect(Rake.application.lookup("develop:sidekiq").edict.child_task).to eq('develop:service:sidekiq')
|
40
|
+
expect(Rake.application.lookup("develop:static_assets").edict.child_task).to eq('develop:service:static_assets')
|
41
|
+
end
|
42
|
+
|
43
|
+
after :each do
|
44
|
+
Rake.application = nil
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'xing/tasks/frontend'
|
2
|
+
|
3
|
+
|
4
|
+
describe Xing::Tasks::Frontend do
|
5
|
+
before :each do
|
6
|
+
Rake.application = nil
|
7
|
+
Xing::Tasks::Frontend.new do |fe|
|
8
|
+
fe.dir = "test-dir"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it "creates all the frontend rake tasks" do
|
13
|
+
expect(Rake.application.lookup "frontend:npm_install").to be_a(Rake::Task)
|
14
|
+
expect(Rake.application.lookup "frontend:bundle_install").to be_a(Rake::Task)
|
15
|
+
expect(Rake.application.lookup "frontend:check_dependencies").to be_a(Rake::Task)
|
16
|
+
expect(Rake.application.lookup "frontend:setup").to be_a(Rake::Task)
|
17
|
+
expect(Rake.application.lookup "frontend:code_structure").to be_a(Rake::Task)
|
18
|
+
expect(Rake.application.lookup "frontend:code_structure:app").to be_a(Rake::Task)
|
19
|
+
expect(Rake.application.lookup "frontend:code_structure:common").to be_a(Rake::Task)
|
20
|
+
expect(Rake.application.lookup "frontend:code_structure:framework").to be_a(Rake::Task)
|
21
|
+
end
|
22
|
+
|
23
|
+
after :each do
|
24
|
+
Rake.application = nil
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'xing/edicts/structure-checker'
|
2
|
+
require 'support/file-sandbox'
|
3
|
+
require 'stringio'
|
4
|
+
|
5
|
+
describe Xing::Edicts::StructureChecker do
|
6
|
+
include FileSandbox
|
7
|
+
|
8
|
+
subject :checker do
|
9
|
+
Xing::Edicts::StructureChecker.new do |checker|
|
10
|
+
checker.dir = "test-dir"
|
11
|
+
checker.out_stream = stdout
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
let :stdout do
|
16
|
+
StringIO.new
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "with a problem file" do
|
20
|
+
before :each do
|
21
|
+
@sandbox.new :file => "test-dir/problem.js", :with_content => "import Thing from '../../../somewhere/bad.js';"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should report errors" do
|
25
|
+
expect{subject.action}.to raise_error(Xing::Edicts::StructureChecker::Error)
|
26
|
+
expect(stdout.string).to match(%r{In test-dir/problem.js})
|
27
|
+
expect(stdout.string).to match(%r{'from' includes ../})
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "with a good file" do
|
32
|
+
before :each do
|
33
|
+
@sandbox.new :file => "test-dir/problem.js", :with_content => "import Thing from 'somewhere/okay.js';"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should not report errors" do
|
37
|
+
expect{subject.action}.not_to raise_error
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xing-root
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Judson Lester
|
8
|
+
- Patricia Ho
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2015-10-18 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: edict
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: caliph
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: mattock
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
description: |2
|
57
|
+
The root of all that is Xing in the world.
|
58
|
+
email:
|
59
|
+
- judson@lrdesign.com
|
60
|
+
- patricia@lrdesign.com
|
61
|
+
executables: []
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- lib/xing-root.rb
|
66
|
+
- lib/xing/edicts.rb
|
67
|
+
- lib/xing/edicts/clean-rake.rb
|
68
|
+
- lib/xing/edicts/clean-run.rb
|
69
|
+
- lib/xing/edicts/launch-browser.rb
|
70
|
+
- lib/xing/edicts/start-child.rb
|
71
|
+
- lib/xing/edicts/structure-checker.rb
|
72
|
+
- lib/xing/managers/child.rb
|
73
|
+
- lib/xing/managers/tmux.rb
|
74
|
+
- lib/xing/tasks.rb
|
75
|
+
- lib/xing/tasks/backend.rb
|
76
|
+
- lib/xing/tasks/build.rb
|
77
|
+
- lib/xing/tasks/develop.rb
|
78
|
+
- lib/xing/tasks/frontend.rb
|
79
|
+
- lib/xing/tasks/spec.rb
|
80
|
+
- lib/xing/tasks/tasklib.rb
|
81
|
+
- spec/edicts/clean_rake_spec.rb
|
82
|
+
- spec/edicts/clean_run_spec.rb
|
83
|
+
- spec/edicts/launch-browser_spec.rb
|
84
|
+
- spec/edicts/start-child_spec.rb
|
85
|
+
- spec/managers/tmux_spec.rb
|
86
|
+
- spec/support/file-sandbox.rb
|
87
|
+
- spec/tasks/develop_spec.rb
|
88
|
+
- spec/tasks/frontend_spec.rb
|
89
|
+
- spec/tasks/structure_checker_spec.rb
|
90
|
+
homepage: ''
|
91
|
+
licenses:
|
92
|
+
- MIT
|
93
|
+
metadata: {}
|
94
|
+
post_install_message:
|
95
|
+
rdoc_options:
|
96
|
+
- "--inline-source"
|
97
|
+
- "--main"
|
98
|
+
- doc/README
|
99
|
+
- "--title"
|
100
|
+
- xing-root-0.0.1 Documentation
|
101
|
+
require_paths:
|
102
|
+
- lib/
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
requirements: []
|
114
|
+
rubyforge_project: xing-root
|
115
|
+
rubygems_version: 2.2.2
|
116
|
+
signing_key:
|
117
|
+
specification_version: 4
|
118
|
+
summary: The Root of all Xing
|
119
|
+
test_files: []
|