magic_reveal 2.6.1.2 → 2.6.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/Guardfile +19 -4
- data/README.md +3 -1
- data/bin/magic-reveal +1 -1
- data/lib/magic_reveal.rb +1 -1
- data/lib/magic_reveal/app.rb +1 -1
- data/lib/magic_reveal/cli.rb +25 -22
- data/lib/magic_reveal/cli/options.rb +4 -3
- data/lib/magic_reveal/conductor.rb +7 -7
- data/lib/magic_reveal/creator.rb +2 -1
- data/lib/magic_reveal/identifier.rb +2 -1
- data/lib/magic_reveal/index_libber.rb +30 -21
- data/lib/magic_reveal/project_config.rb +15 -14
- data/lib/magic_reveal/reveal_js_fetcher.rb +3 -2
- data/lib/magic_reveal/slide_renderer.rb +24 -28
- data/lib/magic_reveal/version.rb +2 -1
- data/magic-reveal.gemspec +25 -29
- data/spec/integration/renderer_spec.rb +29 -0
- data/spec/magic_reveal/cli/options_spec.rb +2 -2
- data/spec/magic_reveal/cli_spec.rb +22 -24
- data/spec/magic_reveal/conductor_spec.rb +8 -8
- data/spec/magic_reveal/creator_spec.rb +22 -17
- data/spec/magic_reveal/identifier_spec.rb +18 -18
- data/spec/magic_reveal/index_libber_spec.rb +21 -21
- data/spec/magic_reveal/project_config_spec.rb +12 -12
- data/spec/magic_reveal/reveal_js_fetcher_spec.rb +10 -10
- data/spec/magic_reveal/slide_renderer_spec.rb +57 -51
- data/spec/spec_helper.rb +14 -12
- metadata +23 -49
@@ -4,6 +4,7 @@ require 'cgi'
|
|
4
4
|
require 'magic_reveal/version'
|
5
5
|
|
6
6
|
module MagicReveal
|
7
|
+
# Custom renderer so the HTML is the right format for Reveal.js.
|
7
8
|
class SlideRenderer < Redcarpet::Render::HTML
|
8
9
|
include Redcarpet::Render::SmartyPants
|
9
10
|
attr_accessor :has_shown_slides
|
@@ -14,11 +15,11 @@ module MagicReveal
|
|
14
15
|
|
15
16
|
def self.markdown_renderer
|
16
17
|
Redcarpet::Markdown.new(
|
17
|
-
|
18
|
-
:
|
19
|
-
:
|
20
|
-
:
|
21
|
-
:
|
18
|
+
new,
|
19
|
+
space_after_headers: true,
|
20
|
+
filter_html: true,
|
21
|
+
fenced_code_blocks: true,
|
22
|
+
no_intra_emphasis: true
|
22
23
|
)
|
23
24
|
end
|
24
25
|
|
@@ -31,39 +32,34 @@ module MagicReveal
|
|
31
32
|
has_shown_slides ? '</section>' : ''
|
32
33
|
end
|
33
34
|
|
34
|
-
def header(text, header_level)
|
35
|
-
|
36
|
-
|
37
|
-
output << "</section>"
|
38
|
-
else
|
35
|
+
def header(text, header_level, anchor = nil)
|
36
|
+
[].tap do |output|
|
37
|
+
output << '</section>' if has_shown_slides
|
39
38
|
@has_shown_slides = true
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
anchor_html = anchor ? " id=\"#{anchor}\"" : ''
|
40
|
+
|
41
|
+
output << '<section>'
|
42
|
+
output << "<h#{header_level}#{anchor_html}>#{text}</h#{header_level}>"
|
43
|
+
end.join("\n")
|
44
44
|
end
|
45
45
|
|
46
46
|
def prepare_code(code)
|
47
|
-
if code =~
|
48
|
-
File.read
|
47
|
+
if code =~ /\A\s*@@source\s*=\s*(?<filename>.*)\s*\Z/
|
48
|
+
File.read Regexp.last_match[:filename]
|
49
49
|
else
|
50
|
-
code.sub(
|
50
|
+
code.sub(/\A\s*/, '').sub(/\s*\Z/, '')
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
54
|
def block_code(code, language)
|
55
|
-
|
56
|
-
|
57
|
-
output <<
|
58
|
-
else
|
59
|
-
output << "<pre>"
|
60
|
-
end
|
61
|
-
output << "<code>"
|
55
|
+
[].tap do |output|
|
56
|
+
output << (language ? "<pre class=\"#{language}\">" : '<pre>')
|
57
|
+
output << '<code>'
|
62
58
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
59
|
+
output << CGI.escapeHTML(prepare_code code)
|
60
|
+
output << '</code>'
|
61
|
+
output << '</pre>'
|
62
|
+
end.join('')
|
67
63
|
end
|
68
64
|
end
|
69
65
|
end
|
data/lib/magic_reveal/version.rb
CHANGED
data/magic-reveal.gemspec
CHANGED
@@ -4,45 +4,41 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'magic_reveal/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'magic_reveal'
|
8
8
|
spec.version = MagicReveal::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['Christian Höltje']
|
10
|
+
spec.email = ['docwhat@gerf.org']
|
11
11
|
spec.description = %q{Create presentations with markdown and ease!}
|
12
12
|
spec.summary = %q{Create presentations using markdown and reveal.js}
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
13
|
+
spec.homepage = 'https://github.com/docwhat/magic_reveal'
|
14
|
+
spec.license = 'MIT'
|
15
15
|
|
16
|
-
spec.files = `git ls-files`.split(
|
16
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.required_ruby_version = '>= 1.9.
|
21
|
+
spec.required_ruby_version = '>= 1.9.3'
|
22
22
|
|
23
|
-
spec.add_dependency
|
24
|
-
spec.add_dependency
|
25
|
-
spec.add_dependency
|
26
|
-
spec.add_dependency
|
27
|
-
spec.add_dependency
|
28
|
-
spec.add_dependency
|
23
|
+
spec.add_dependency 'sinatra', '~> 1.4'
|
24
|
+
spec.add_dependency 'redcarpet', '~> 3.0'
|
25
|
+
spec.add_dependency 'archive-zip', '~> 0.6'
|
26
|
+
spec.add_dependency 'sys-admin', '~> 1.6'
|
27
|
+
spec.add_dependency 'nokogiri', '~> 1.5'
|
28
|
+
spec.add_dependency 'highline', '~> 1.6'
|
29
29
|
|
30
|
-
spec.add_development_dependency
|
31
|
-
spec.add_development_dependency
|
32
|
-
spec.add_development_dependency
|
33
|
-
spec.add_development_dependency
|
34
|
-
spec.add_development_dependency
|
35
|
-
spec.add_development_dependency
|
36
|
-
spec.add_development_dependency
|
37
|
-
spec.add_development_dependency
|
38
|
-
spec.add_development_dependency
|
30
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
31
|
+
spec.add_development_dependency 'rake'
|
32
|
+
spec.add_development_dependency 'guard', '~> 2.4'
|
33
|
+
spec.add_development_dependency 'guard-rspec', '~> 4.2'
|
34
|
+
spec.add_development_dependency 'guard-rubocop', '~> 1.0'
|
35
|
+
spec.add_development_dependency 'rspec', '~> 2.14'
|
36
|
+
spec.add_development_dependency 'faker'
|
37
|
+
spec.add_development_dependency 'coveralls', '~> 0.7'
|
38
|
+
spec.add_development_dependency 'better_errors'
|
39
|
+
spec.add_development_dependency 'binding_of_caller'
|
39
40
|
|
40
|
-
#For
|
41
|
-
spec.add_development_dependency 'rb-inotify'
|
42
|
-
spec.add_development_dependency 'rb-fsevent'
|
43
|
-
spec.add_development_dependency 'rb-fchange'
|
44
|
-
|
45
|
-
#For displaying notices
|
41
|
+
# For displaying notices
|
46
42
|
spec.add_development_dependency 'terminal-notifier-guard'
|
47
43
|
spec.add_development_dependency 'libnotify'
|
48
44
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'magic_reveal/slide_renderer'
|
3
|
+
|
4
|
+
describe 'integration of SlideRenderer with Redcarpet' do
|
5
|
+
let(:markdown) do
|
6
|
+
return <<-EOF
|
7
|
+
# Title
|
8
|
+
|
9
|
+
Some text `here`.
|
10
|
+
|
11
|
+
## Second level header
|
12
|
+
|
13
|
+
```
|
14
|
+
Fenced code goes here.
|
15
|
+
```
|
16
|
+
|
17
|
+
### Third level header
|
18
|
+
|
19
|
+
Indented code goes here.
|
20
|
+
|
21
|
+
EOF
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'does not have errors' do
|
25
|
+
renderer = MagicReveal::SlideRenderer.markdown_renderer
|
26
|
+
expect(renderer.render markdown)
|
27
|
+
.to be_kind_of(String)
|
28
|
+
end
|
29
|
+
end
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
require 'magic_reveal/cli/options'
|
3
3
|
|
4
4
|
describe MagicReveal::Cli::Options do
|
5
|
-
describe
|
5
|
+
describe '.parse' do
|
6
6
|
before { subject.parse args }
|
7
7
|
|
8
8
|
context "given 'new <project>'" do
|
@@ -43,7 +43,7 @@ describe MagicReveal::Cli::Options do
|
|
43
43
|
its(:command) { should be(:help) }
|
44
44
|
end
|
45
45
|
|
46
|
-
context
|
46
|
+
context 'given no arguments' do
|
47
47
|
let(:args) { [] }
|
48
48
|
|
49
49
|
its(:command) { should be(:help) }
|
@@ -1,35 +1,34 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'magic_reveal/cli'
|
3
3
|
|
4
|
-
|
5
4
|
describe MagicReveal::Cli do
|
6
|
-
describe
|
7
|
-
context
|
5
|
+
describe '.run' do
|
6
|
+
context 'with a null options' do
|
8
7
|
let(:options) { double(MagicReveal::Cli::Options).as_null_object }
|
9
|
-
let(:args) { double(
|
8
|
+
let(:args) { double('ARGV') }
|
10
9
|
before do
|
11
10
|
subject.stub(:show_help)
|
12
11
|
subject.stub(:avenge_programmer)
|
13
12
|
subject.stub(:options).and_return(options)
|
14
13
|
end
|
15
14
|
|
16
|
-
context
|
15
|
+
context 'command=nil' do
|
17
16
|
before { subject.run args }
|
18
17
|
|
19
|
-
it
|
18
|
+
it 'parses the args' do
|
20
19
|
expect(options).to have_received(:parse).with(args)
|
21
20
|
end
|
22
21
|
|
23
|
-
it
|
22
|
+
it 'fetches the command' do
|
24
23
|
expect(options).to have_received(:command)
|
25
24
|
end
|
26
25
|
|
27
|
-
it
|
26
|
+
it 'avenges the programmer' do
|
28
27
|
expect(subject).to have_received(:avenge_programmer)
|
29
28
|
end
|
30
29
|
end
|
31
30
|
|
32
|
-
context
|
31
|
+
context 'command=new' do
|
33
32
|
let(:creator) { double(MagicReveal::Creator).as_null_object }
|
34
33
|
before do
|
35
34
|
subject.creator = creator
|
@@ -37,19 +36,19 @@ describe MagicReveal::Cli do
|
|
37
36
|
subject.run args
|
38
37
|
end
|
39
38
|
|
40
|
-
it
|
39
|
+
it 'fetches the project' do
|
41
40
|
expect(options).to have_received(:project)
|
42
41
|
end
|
43
42
|
|
44
|
-
it
|
45
|
-
expect(creator)
|
46
|
-
to have_received(:create_project)
|
47
|
-
with(options.project)
|
43
|
+
it 'creates the project' do
|
44
|
+
expect(creator)
|
45
|
+
.to have_received(:create_project)
|
46
|
+
.with(options.project)
|
48
47
|
end
|
49
48
|
end
|
50
49
|
|
51
|
-
context
|
52
|
-
it
|
50
|
+
context 'command=help' do
|
51
|
+
it 'shows help' do
|
53
52
|
subject.stub(:show_help)
|
54
53
|
subject.should_receive(:show_help).and_return(nil)
|
55
54
|
options.stub(:command).and_return(:help)
|
@@ -57,8 +56,8 @@ describe MagicReveal::Cli do
|
|
57
56
|
end
|
58
57
|
end
|
59
58
|
|
60
|
-
context
|
61
|
-
it
|
59
|
+
context 'command=start' do
|
60
|
+
it 'starts the server' do
|
62
61
|
subject.stub(:start_server)
|
63
62
|
subject.should_receive(:start_server).and_return(nil)
|
64
63
|
options.stub(:command).and_return(:start)
|
@@ -66,8 +65,8 @@ describe MagicReveal::Cli do
|
|
66
65
|
end
|
67
66
|
end
|
68
67
|
|
69
|
-
context
|
70
|
-
it
|
68
|
+
context 'command=static' do
|
69
|
+
it 'creates a static file' do
|
71
70
|
subject.stub(:create_static)
|
72
71
|
subject.should_receive(:create_static).and_return(nil)
|
73
72
|
options.stub(:command).and_return(:static)
|
@@ -77,17 +76,16 @@ describe MagicReveal::Cli do
|
|
77
76
|
end
|
78
77
|
end
|
79
78
|
|
80
|
-
describe
|
81
|
-
it
|
79
|
+
describe '.creator' do
|
80
|
+
it 'sends new to creator' do
|
82
81
|
MagicReveal::Creator.should_receive(:new).with(Dir.getwd)
|
83
82
|
subject.creator
|
84
83
|
end
|
85
84
|
end
|
86
85
|
|
87
|
-
describe
|
86
|
+
describe '.options' do
|
88
87
|
it "responds to 'parse'" do
|
89
88
|
subject.options.should respond_to(:parse)
|
90
89
|
end
|
91
90
|
end
|
92
|
-
|
93
91
|
end
|
@@ -13,29 +13,29 @@ describe MagicReveal::Conductor do
|
|
13
13
|
|
14
14
|
its(:url) { should be_kind_of(URI) }
|
15
15
|
|
16
|
-
describe
|
17
|
-
it
|
18
|
-
subject.url =
|
16
|
+
describe '.fetch' do
|
17
|
+
it 'should save a file' do
|
18
|
+
subject.url = 'http://google.com/'
|
19
19
|
save_file = @tmpdir + 'index.html'
|
20
20
|
subject.fetch save_file
|
21
21
|
save_file.should exist
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
describe
|
25
|
+
describe '.unpack' do
|
26
26
|
let(:unpack_dir) { @tmpdir + "unpack-#{rand 200}" }
|
27
|
-
context
|
27
|
+
context 'given a zipfile' do
|
28
28
|
let(:zipfile) { EXAMPLE_DATA + 'wrapped.zip' }
|
29
29
|
|
30
|
-
it
|
30
|
+
it 'unpacks and unwraps the zipfile' do
|
31
31
|
subject.unpack zipfile, unpack_dir
|
32
32
|
(unpack_dir + 'testfile.md').should exist
|
33
33
|
end
|
34
34
|
|
35
|
-
context
|
35
|
+
context 'and the unpack directory exists already' do
|
36
36
|
before { unpack_dir.mkdir }
|
37
37
|
|
38
|
-
it
|
38
|
+
it 'should raise an error' do
|
39
39
|
expect { subject.unpack zipfile, unpack_dir }.to raise_error(MagicReveal::Error)
|
40
40
|
end
|
41
41
|
end
|
@@ -9,39 +9,44 @@ describe MagicReveal::Creator do
|
|
9
9
|
subject.reveal_js_fetcher = fetcher
|
10
10
|
end
|
11
11
|
|
12
|
-
context
|
12
|
+
context 'with a temporary directory' do
|
13
13
|
subject { described_class.new @tmpdir }
|
14
|
-
around
|
14
|
+
around do |example|
|
15
|
+
Dir.mktmpdir do |dir|
|
16
|
+
@tmpdir = Pathname.new dir
|
17
|
+
example.run
|
18
|
+
end
|
19
|
+
end
|
15
20
|
|
16
21
|
its(:directory) { should eq(@tmpdir) }
|
17
22
|
|
18
|
-
describe
|
23
|
+
describe 'create_project' do
|
19
24
|
let(:project) { "project#{rand 99}" }
|
20
25
|
before do
|
21
26
|
FileUtils.stub(:copy_file)
|
22
27
|
Pathname.any_instance.stub(:children).and_return([])
|
23
28
|
end
|
24
29
|
|
25
|
-
it
|
30
|
+
it 'makes the project directory' do
|
26
31
|
subject.create_project(project)
|
27
32
|
expect(@tmpdir + project).to be_directory
|
28
33
|
end
|
29
34
|
|
30
|
-
it
|
35
|
+
it 'fetches and saves reveal.js' do
|
31
36
|
subject.create_project(project)
|
32
|
-
expect(fetcher)
|
33
|
-
to have_received(:save_important_parts_to)
|
34
|
-
with(@tmpdir + project)
|
37
|
+
expect(fetcher)
|
38
|
+
.to have_received(:save_important_parts_to)
|
39
|
+
.with(@tmpdir + project)
|
35
40
|
end
|
36
41
|
|
37
|
-
it
|
42
|
+
it 'copies the template_slides' do
|
38
43
|
src = subject.template_slides
|
39
44
|
dst = @tmpdir + project + 'slides.md'
|
40
45
|
FileUtils.should_receive(:copy_file).with(src.to_s, dst.to_s)
|
41
46
|
subject.create_project(project)
|
42
47
|
end
|
43
48
|
|
44
|
-
it
|
49
|
+
it 'copies the template_config_ru' do
|
45
50
|
src = subject.template_config_ru
|
46
51
|
dst = @tmpdir + project + 'config.ru'
|
47
52
|
FileUtils.should_receive(:copy_file).with(src.to_s, dst.to_s)
|
@@ -49,23 +54,23 @@ describe MagicReveal::Creator do
|
|
49
54
|
end
|
50
55
|
end
|
51
56
|
|
52
|
-
describe
|
57
|
+
describe 'update_project' do
|
53
58
|
let(:project) { @tmpdir + "project#{rand 99}" }
|
54
59
|
|
55
|
-
it
|
60
|
+
it 'fetches and saves reveal.js' do
|
56
61
|
subject.update_project(project)
|
57
|
-
expect(fetcher)
|
58
|
-
to have_received(:save_important_parts_to)
|
59
|
-
with(project)
|
62
|
+
expect(fetcher)
|
63
|
+
.to have_received(:save_important_parts_to)
|
64
|
+
.with(project)
|
60
65
|
end
|
61
66
|
end
|
62
67
|
|
63
|
-
describe
|
68
|
+
describe '.template_slides' do
|
64
69
|
its(:template_slides) { should be_kind_of(Pathname) }
|
65
70
|
its(:template_slides) { should be_file }
|
66
71
|
end
|
67
72
|
|
68
|
-
describe
|
73
|
+
describe '.template_config_ru' do
|
69
74
|
its(:template_config_ru) { should be_kind_of(Pathname) }
|
70
75
|
its(:template_config_ru) { should be_file }
|
71
76
|
end
|
@@ -5,55 +5,55 @@ describe MagicReveal::Identifier do
|
|
5
5
|
subject { described_class.new sys_admin }
|
6
6
|
let(:sys_admin) { double(Sys::Admin).as_null_object }
|
7
7
|
|
8
|
-
describe
|
8
|
+
describe '.name' do
|
9
9
|
before do
|
10
10
|
sys_admin.stub(:respond_to?)
|
11
11
|
end
|
12
12
|
|
13
|
-
it
|
13
|
+
it 'gets the login' do
|
14
14
|
subject.name
|
15
15
|
expect(sys_admin).to have_received(:get_login)
|
16
16
|
end
|
17
17
|
|
18
|
-
it
|
18
|
+
it 'passes the login to get_user' do
|
19
19
|
subject.name
|
20
20
|
expect(sys_admin).to have_received(:get_user).with(sys_admin.get_login)
|
21
21
|
end
|
22
22
|
|
23
|
-
context
|
23
|
+
context 'the user has a full_name' do
|
24
24
|
let(:user) { double(Sys::Admin::User) }
|
25
25
|
before do
|
26
26
|
sys_admin.stub(:get_user).with(sys_admin.get_login).and_return(user)
|
27
27
|
sys_admin.stub(:respond_to?).with(:full_name).and_return(true)
|
28
28
|
end
|
29
29
|
|
30
|
-
it
|
31
|
-
name = double(
|
30
|
+
it 'returns the full_name' do
|
31
|
+
name = double('full_name')
|
32
32
|
user.should receive(:full_name).and_return(name)
|
33
33
|
expect(subject.name).to eq(name)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
context
|
37
|
+
context 'the user has a simple gecos' do
|
38
38
|
let(:user) { double(Sys::Admin::User) }
|
39
39
|
before do
|
40
40
|
sys_admin.stub(:get_user).with(sys_admin.get_login).and_return(user)
|
41
41
|
end
|
42
42
|
|
43
|
-
it
|
43
|
+
it 'returns the gecos' do
|
44
44
|
gecos = "Joe Cool #{rand 99}"
|
45
45
|
user.should receive(:gecos).and_return(gecos)
|
46
46
|
expect(subject.name).to eq(gecos)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
context
|
50
|
+
context 'the user has a comma-delimited gecos' do
|
51
51
|
let(:user) { double(Sys::Admin::User) }
|
52
52
|
before do
|
53
53
|
sys_admin.stub(:get_user).with(sys_admin.get_login).and_return(user)
|
54
54
|
end
|
55
55
|
|
56
|
-
it
|
56
|
+
it 'returns the gecos' do
|
57
57
|
name = "Joe Cool #{rand 99}"
|
58
58
|
gecos = "#{name},White House,412 555-1212,"
|
59
59
|
user.should receive(:gecos).and_return(gecos)
|
@@ -61,35 +61,35 @@ describe MagicReveal::Identifier do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
context
|
65
|
-
it
|
64
|
+
context 'the user has an empty comma-delimited gecos' do
|
65
|
+
it 'returns the gecos' do
|
66
66
|
login = "joecool#{rand 99}"
|
67
67
|
user = double(Sys::Admin::User)
|
68
68
|
|
69
69
|
sys_admin.stub(:get_login).and_return(login)
|
70
70
|
sys_admin.stub(:get_user).with(login).and_return(user)
|
71
71
|
|
72
|
-
user.should receive(:gecos).and_return(
|
72
|
+
user.should receive(:gecos).and_return(',,,')
|
73
73
|
expect(subject.name).to eq(login)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
-
context
|
78
|
-
it
|
77
|
+
context 'the user has an empty gecos' do
|
78
|
+
it 'returns the gecos' do
|
79
79
|
login = "joecool#{rand 99}"
|
80
80
|
user = double(Sys::Admin::User)
|
81
81
|
|
82
82
|
sys_admin.stub(:get_login).and_return(login)
|
83
83
|
sys_admin.stub(:get_user).with(login).and_return(user)
|
84
84
|
|
85
|
-
user.should receive(:gecos).and_return(
|
85
|
+
user.should receive(:gecos).and_return('')
|
86
86
|
expect(subject.name).to eq(login)
|
87
87
|
end
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
|
-
describe
|
92
|
-
it
|
91
|
+
describe '#name (an alias)' do
|
92
|
+
it 'calls .name on an instance' do
|
93
93
|
instance = double(described_class).as_null_object
|
94
94
|
described_class.stub(:new).and_return(instance)
|
95
95
|
expect(described_class.name).to be(instance.name)
|