algerb 0.0.0
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.
- data/.rspec +1 -0
- data/.travis.yml +8 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +61 -0
- data/Guardfile +19 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +9 -0
- data/Rakefile +48 -0
- data/VERSION +1 -0
- data/algerb.gemspec +91 -0
- data/autoloader.rb +9 -0
- data/bin/algerb +7 -0
- data/features/autoloader_generation.feature +40 -0
- data/features/step_definitions/autoloader_generation_steps.rb +7 -0
- data/features/support/env.rb +3 -0
- data/lib/algerb/app.rb +25 -0
- data/lib/algerb/file.rb +19 -0
- data/lib/algerb/files.rb +25 -0
- data/lib/algerb/files_builder.rb +20 -0
- data/lib/algerb/generator.rb +43 -0
- data/lib/algerb/util.rb +17 -0
- data/lib/algerb.rb +2 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/unit/algerb/files_builder_spec.rb +31 -0
- data/spec/unit/algerb/files_spec.rb +51 -0
- data/spec/unit/algerb/generator_spec.rb +46 -0
- data/spec/unit/algerb/util_spec.rb +78 -0
- metadata +177 -0
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
-fd -c
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
aruba (0.4.11)
|
5
|
+
childprocess (>= 0.2.3)
|
6
|
+
cucumber (>= 1.1.1)
|
7
|
+
ffi (>= 1.0.11)
|
8
|
+
rspec (>= 2.7.0)
|
9
|
+
builder (3.0.0)
|
10
|
+
childprocess (0.2.4)
|
11
|
+
ffi (~> 1.0.6)
|
12
|
+
cucumber (1.1.4)
|
13
|
+
builder (>= 2.1.2)
|
14
|
+
diff-lcs (>= 1.1.2)
|
15
|
+
gherkin (~> 2.7.1)
|
16
|
+
json (>= 1.4.6)
|
17
|
+
term-ansicolor (>= 1.0.6)
|
18
|
+
diff-lcs (1.1.3)
|
19
|
+
ffi (1.0.11)
|
20
|
+
gherkin (2.7.1)
|
21
|
+
json (>= 1.4.6)
|
22
|
+
git (1.2.5)
|
23
|
+
guard (0.9.4)
|
24
|
+
ffi (>= 0.5.0)
|
25
|
+
thor (~> 0.14.6)
|
26
|
+
guard-cucumber (0.7.4)
|
27
|
+
cucumber (>= 0.10)
|
28
|
+
guard (>= 0.8.3)
|
29
|
+
guard-rspec (0.5.11)
|
30
|
+
guard (>= 0.8.4)
|
31
|
+
jeweler (1.6.4)
|
32
|
+
bundler (~> 1.0)
|
33
|
+
git (>= 1.2.5)
|
34
|
+
rake
|
35
|
+
json (1.6.4)
|
36
|
+
rake (0.9.2.2)
|
37
|
+
rcov (0.9.11)
|
38
|
+
rspec (2.7.0)
|
39
|
+
rspec-core (~> 2.7.0)
|
40
|
+
rspec-expectations (~> 2.7.0)
|
41
|
+
rspec-mocks (~> 2.7.0)
|
42
|
+
rspec-core (2.7.1)
|
43
|
+
rspec-expectations (2.7.0)
|
44
|
+
diff-lcs (~> 1.1.2)
|
45
|
+
rspec-mocks (2.7.0)
|
46
|
+
term-ansicolor (1.0.7)
|
47
|
+
thor (0.14.6)
|
48
|
+
|
49
|
+
PLATFORMS
|
50
|
+
ruby
|
51
|
+
|
52
|
+
DEPENDENCIES
|
53
|
+
aruba
|
54
|
+
cucumber
|
55
|
+
guard-cucumber
|
56
|
+
guard-rspec
|
57
|
+
jeweler (~> 1.6.4)
|
58
|
+
rake
|
59
|
+
rcov
|
60
|
+
rspec
|
61
|
+
thor
|
data/Guardfile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
group :feature do
|
5
|
+
guard 'cucumber' do
|
6
|
+
watch(%r{^features/.+\.feature$})
|
7
|
+
watch(%r{^features/support/.+$}) { 'features' }
|
8
|
+
watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
|
9
|
+
watch(%r{^bin/algerb$}) { 'features' }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
group :spec do
|
14
|
+
guard 'rspec', :version => 2 do
|
15
|
+
watch(%r{^spec/.+_spec\.rb$})
|
16
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
|
17
|
+
watch('spec/spec_helper.rb') { "spec" }
|
18
|
+
end
|
19
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Yuya Takeyama
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
Bundler.setup(:default, :development)
|
4
|
+
require 'rake'
|
5
|
+
|
6
|
+
require 'jeweler'
|
7
|
+
Jeweler::Tasks.new do |gem|
|
8
|
+
gem.name = 'algerb'
|
9
|
+
gem.homepage = "http://github.com/yuya-takeyama/algerb"
|
10
|
+
gem.license = 'MIT'
|
11
|
+
gem.summary = %Q{Autoloader generator for Ruby}
|
12
|
+
gem.description = %Q{Generates autoloader script for your Ruby library.}
|
13
|
+
gem.email = 'sign.of.the.wolf.pentagram@gmail.com'
|
14
|
+
gem.authors = ['Yuya Takeyama']
|
15
|
+
end
|
16
|
+
Jeweler::RubygemsDotOrgTasks.new
|
17
|
+
|
18
|
+
require 'cucumber/rake/task'
|
19
|
+
Cucumber::Rake::Task.new
|
20
|
+
|
21
|
+
require 'rspec/core/rake_task'
|
22
|
+
desc 'Run RSpec'
|
23
|
+
RSpec::Core::RakeTask.new do |spec|
|
24
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
25
|
+
spec.rspec_opts = ['--color', '--format nested']
|
26
|
+
end
|
27
|
+
|
28
|
+
require 'rcov/rcovtask'
|
29
|
+
Rcov::RcovTask.new do |test|
|
30
|
+
test.libs << 'spec'
|
31
|
+
test.pattern = 'spec/**/*_spec.rb'
|
32
|
+
test.verbose = true
|
33
|
+
end
|
34
|
+
|
35
|
+
desc 'Run tests, both RSpec and Cucumber'
|
36
|
+
task :test => [:spec, :cucumber]
|
37
|
+
|
38
|
+
task :default => :test
|
39
|
+
|
40
|
+
require 'rake/rdoctask'
|
41
|
+
Rake::RDocTask.new do |rdoc|
|
42
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
43
|
+
|
44
|
+
rdoc.rdoc_dir = 'rdoc'
|
45
|
+
rdoc.title = "algerb #{version}"
|
46
|
+
rdoc.rdoc_files.include('README*')
|
47
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
48
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.0
|
data/algerb.gemspec
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "algerb"
|
8
|
+
s.version = "0.0.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Yuya Takeyama"]
|
12
|
+
s.date = "2011-12-31"
|
13
|
+
s.description = "Generates autoloader script for your Ruby library."
|
14
|
+
s.email = "sign.of.the.wolf.pentagram@gmail.com"
|
15
|
+
s.executables = ["algerb"]
|
16
|
+
s.extra_rdoc_files = [
|
17
|
+
"LICENSE.txt",
|
18
|
+
"README.rdoc"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
".rspec",
|
22
|
+
".travis.yml",
|
23
|
+
"Gemfile",
|
24
|
+
"Gemfile.lock",
|
25
|
+
"Guardfile",
|
26
|
+
"LICENSE.txt",
|
27
|
+
"README.rdoc",
|
28
|
+
"Rakefile",
|
29
|
+
"VERSION",
|
30
|
+
"algerb.gemspec",
|
31
|
+
"autoloader.rb",
|
32
|
+
"bin/algerb",
|
33
|
+
"features/autoloader_generation.feature",
|
34
|
+
"features/step_definitions/autoloader_generation_steps.rb",
|
35
|
+
"features/support/env.rb",
|
36
|
+
"lib/algerb.rb",
|
37
|
+
"lib/algerb/app.rb",
|
38
|
+
"lib/algerb/file.rb",
|
39
|
+
"lib/algerb/files.rb",
|
40
|
+
"lib/algerb/files_builder.rb",
|
41
|
+
"lib/algerb/generator.rb",
|
42
|
+
"lib/algerb/util.rb",
|
43
|
+
"spec/spec_helper.rb",
|
44
|
+
"spec/unit/algerb/files_builder_spec.rb",
|
45
|
+
"spec/unit/algerb/files_spec.rb",
|
46
|
+
"spec/unit/algerb/generator_spec.rb",
|
47
|
+
"spec/unit/algerb/util_spec.rb"
|
48
|
+
]
|
49
|
+
s.homepage = "http://github.com/yuya-takeyama/algerb"
|
50
|
+
s.licenses = ["MIT"]
|
51
|
+
s.require_paths = ["lib"]
|
52
|
+
s.rubygems_version = "1.8.10"
|
53
|
+
s.summary = "Autoloader generator for Ruby"
|
54
|
+
|
55
|
+
if s.respond_to? :specification_version then
|
56
|
+
s.specification_version = 3
|
57
|
+
|
58
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
59
|
+
s.add_runtime_dependency(%q<thor>, [">= 0"])
|
60
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
61
|
+
s.add_development_dependency(%q<cucumber>, [">= 0"])
|
62
|
+
s.add_development_dependency(%q<aruba>, [">= 0"])
|
63
|
+
s.add_development_dependency(%q<guard-cucumber>, [">= 0"])
|
64
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
65
|
+
s.add_development_dependency(%q<guard-rspec>, [">= 0"])
|
66
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
67
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
68
|
+
else
|
69
|
+
s.add_dependency(%q<thor>, [">= 0"])
|
70
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
71
|
+
s.add_dependency(%q<cucumber>, [">= 0"])
|
72
|
+
s.add_dependency(%q<aruba>, [">= 0"])
|
73
|
+
s.add_dependency(%q<guard-cucumber>, [">= 0"])
|
74
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
75
|
+
s.add_dependency(%q<guard-rspec>, [">= 0"])
|
76
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
77
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
78
|
+
end
|
79
|
+
else
|
80
|
+
s.add_dependency(%q<thor>, [">= 0"])
|
81
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
82
|
+
s.add_dependency(%q<cucumber>, [">= 0"])
|
83
|
+
s.add_dependency(%q<aruba>, [">= 0"])
|
84
|
+
s.add_dependency(%q<guard-cucumber>, [">= 0"])
|
85
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
86
|
+
s.add_dependency(%q<guard-rspec>, [">= 0"])
|
87
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
88
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
data/autoloader.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
module Algerb
|
2
|
+
autoload :App, 'algerb/app'
|
3
|
+
autoload :File, 'algerb/file'
|
4
|
+
autoload :Files, 'algerb/files'
|
5
|
+
autoload :FilesBuilder, 'algerb/files_builder'
|
6
|
+
autoload :Generator, 'algerb/generator'
|
7
|
+
autoload :Util, 'algerb/util'
|
8
|
+
end
|
9
|
+
autoload :Algerb, 'algerb'
|
data/bin/algerb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
Feature: Autoloader generation
|
2
|
+
Writing Ruby's Kernel.#autoload by hand is so messy.
|
3
|
+
So Algerb generates autoloader file automatically.
|
4
|
+
|
5
|
+
Scenario: Autoloader generation for single file
|
6
|
+
Given an empty file named "./lib/foo.rb"
|
7
|
+
When I run `algerb`
|
8
|
+
Then the file "./autoloader.rb" should contain exactly:
|
9
|
+
"""
|
10
|
+
autoload :Foo, 'foo'
|
11
|
+
|
12
|
+
"""
|
13
|
+
|
14
|
+
Scenario: Autoloader generation for multiple files
|
15
|
+
Given an empty file named "./lib/foo.rb"
|
16
|
+
And an empty file named "./lib/bar.rb"
|
17
|
+
When I run `algerb`
|
18
|
+
Then the file "./autoloader.rb" should contain exactly:
|
19
|
+
"""
|
20
|
+
autoload :Bar, 'bar'
|
21
|
+
autoload :Foo, 'foo'
|
22
|
+
|
23
|
+
"""
|
24
|
+
|
25
|
+
Scenario: Autoloader generation for library has nested structure.
|
26
|
+
Given an empty file named "./lib/foo.rb"
|
27
|
+
And an empty file named "./lib/foo/bar.rb"
|
28
|
+
And an empty file named "./lib/foo/bar/baz.rb"
|
29
|
+
When I run `algerb`
|
30
|
+
Then the file "./autoloader.rb" should contain exactly:
|
31
|
+
"""
|
32
|
+
module Foo
|
33
|
+
module Bar
|
34
|
+
autoload :Baz, 'foo/bar/baz'
|
35
|
+
end
|
36
|
+
autoload :Bar, 'foo/bar'
|
37
|
+
end
|
38
|
+
autoload :Foo, 'foo'
|
39
|
+
|
40
|
+
"""
|
data/lib/algerb/app.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
module Algerb; end
|
4
|
+
class Algerb::App < Thor
|
5
|
+
default_task :generate
|
6
|
+
|
7
|
+
method_option :target, :default => './lib'
|
8
|
+
method_option :output, :default => './autoloader.rb'
|
9
|
+
|
10
|
+
desc 'generate', 'Generates autoloader script'
|
11
|
+
def generate
|
12
|
+
open(options[:output], 'w') do |file|
|
13
|
+
file.puts ::Algerb::Generator.new.generate(target_files(options['target']))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def target_files(target_dir)
|
19
|
+
original_dir = Dir.pwd
|
20
|
+
Dir.chdir(target_dir)
|
21
|
+
result = Dir.glob('**/*.rb')
|
22
|
+
Dir.chdir(original_dir)
|
23
|
+
result.sort
|
24
|
+
end
|
25
|
+
end
|
data/lib/algerb/file.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
class Algerb::File
|
2
|
+
include Algerb::Util
|
3
|
+
|
4
|
+
FILE_PATTERN = %r{/?(a-z0-9\-_\.)$}i
|
5
|
+
|
6
|
+
attr_reader :name
|
7
|
+
|
8
|
+
def initialize(name)
|
9
|
+
@name = name
|
10
|
+
end
|
11
|
+
|
12
|
+
def each(&block)
|
13
|
+
each_files(&block)
|
14
|
+
end
|
15
|
+
|
16
|
+
def ==(another)
|
17
|
+
self.name == another.name
|
18
|
+
end
|
19
|
+
end
|
data/lib/algerb/files.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
class Algerb::Files
|
2
|
+
include ::Enumerable
|
3
|
+
|
4
|
+
attr_reader :name, :files
|
5
|
+
|
6
|
+
def initialize(name = nil, files = {})
|
7
|
+
@name = name
|
8
|
+
@files = files
|
9
|
+
end
|
10
|
+
|
11
|
+
def add(file)
|
12
|
+
if @files.has_key?(file.name)
|
13
|
+
file.files.each do |name, _file|
|
14
|
+
@files[file.name].files[name] = _file
|
15
|
+
end
|
16
|
+
else
|
17
|
+
@files[file.name] = file
|
18
|
+
end
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def ==(another)
|
23
|
+
self.name == another.name and self.files == another.files
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Algerb::FilesBuilder
|
2
|
+
attr_reader :files
|
3
|
+
|
4
|
+
FILE_PATTERN = %r{^([a-z0-9\_\.])/?}
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@files = Algerb::Files.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def add(path)
|
11
|
+
paths = path.split('/').reverse
|
12
|
+
file = Algerb::File.new(paths.slice!(0, 1)[0])
|
13
|
+
files = paths.inject(file) do |file, path|
|
14
|
+
files = Algerb::Files.new(path).add(file)
|
15
|
+
files
|
16
|
+
end
|
17
|
+
@files.add files
|
18
|
+
self
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class Algerb::Generator
|
2
|
+
include Algerb::Util
|
3
|
+
|
4
|
+
def generate(files)
|
5
|
+
generate_autoloader_body(files)
|
6
|
+
end
|
7
|
+
|
8
|
+
def generate_autoloader_body(files)
|
9
|
+
builder = Algerb::FilesBuilder.new
|
10
|
+
files.each do |file|
|
11
|
+
builder.add file
|
12
|
+
end
|
13
|
+
_generate_autoloader_body(builder.files.files)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def _generate_autoloader_body(files, parent = nil, level = 0)
|
18
|
+
files.sort_by {|name, file| name }.inject('') do |result, key_value|
|
19
|
+
name, file = key_value
|
20
|
+
path = remove_ext(prefix(parent) + file.name)
|
21
|
+
if file.is_a?(Algerb::File)
|
22
|
+
result += indent(level) + "autoload :#{file_to_class(file.name)}, '#{path}'\n"
|
23
|
+
else
|
24
|
+
result += indent(level) + "module #{file_to_class(file.name)}\n"
|
25
|
+
result += _generate_autoloader_body(file.files, path, level + 1)
|
26
|
+
result += indent(level) + "end\n"
|
27
|
+
end
|
28
|
+
result
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def prefix(parent)
|
33
|
+
if parent.nil?
|
34
|
+
''
|
35
|
+
else
|
36
|
+
"#{parent}/"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def indent(level)
|
41
|
+
' ' * level
|
42
|
+
end
|
43
|
+
end
|
data/lib/algerb/util.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module Algerb::Util
|
2
|
+
def file_to_class(file)
|
3
|
+
remove_ext(file).split('_').map {|word| word.capitalize }.join('')
|
4
|
+
end
|
5
|
+
|
6
|
+
def indentation(code, level)
|
7
|
+
code.split("\n").map {|line| ' ' * level + line + "\n" }.join('')
|
8
|
+
end
|
9
|
+
|
10
|
+
def remove_dir(path)
|
11
|
+
path.sub(%r{^([a-z0-9\_]*/)*}, '')
|
12
|
+
end
|
13
|
+
|
14
|
+
def remove_ext(path)
|
15
|
+
path.sub(/\.rb$/, '')
|
16
|
+
end
|
17
|
+
end
|
data/lib/algerb.rb
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Algerb::FilesBuilder do
|
4
|
+
let(:builder) { Algerb::FilesBuilder.new }
|
5
|
+
|
6
|
+
describe 'files' do
|
7
|
+
subject { builder.files }
|
8
|
+
|
9
|
+
context 'without any files' do
|
10
|
+
it { should == Algerb::Files.new }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when 1 file ("foo.rb") is added' do
|
14
|
+
before { builder.add('foo.rb') }
|
15
|
+
it { should == Algerb::Files.new.add(Algerb::File.new('foo.rb'))}
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'when 1 file ("foo/bar.rb") is added' do
|
19
|
+
before { builder.add('foo/bar.rb') }
|
20
|
+
it { should == Algerb::Files.new.add(Algerb::Files.new('foo').add(Algerb::File.new('bar.rb')))}
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when 2 files ("foo/bar.rb", "foo/baz.rb") are added' do
|
24
|
+
before do
|
25
|
+
builder.add('foo/bar.rb')
|
26
|
+
builder.add('foo/baz.rb')
|
27
|
+
end
|
28
|
+
it { should == Algerb::Files.new.add(Algerb::Files.new('foo').add(Algerb::File.new('bar.rb')).add(Algerb::File.new('baz.rb'))) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Algerb::Files do
|
4
|
+
let(:root) { Algerb::Files.new }
|
5
|
+
|
6
|
+
describe '#files' do
|
7
|
+
subject { root.files }
|
8
|
+
|
9
|
+
context 'when no files are added' do
|
10
|
+
it { should == {} }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'when 1 file ("foo.rb") is added' do
|
14
|
+
before { root.add(file) }
|
15
|
+
let(:file) { Algerb::File.new('foo.rb') }
|
16
|
+
|
17
|
+
it { should == {'foo.rb' => file} }
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when 2 files ("foo.rb", "bar.rb") are added' do
|
21
|
+
before do
|
22
|
+
root.add(file1)
|
23
|
+
root.add(file2)
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:file1) { Algerb::File.new('foo.rb') }
|
27
|
+
let(:file2) { Algerb::File.new('bar.rb') }
|
28
|
+
|
29
|
+
it { should == {'foo.rb' => file1, 'bar.rb' => file2} }
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'when 1 dir ("foo") is added' do
|
33
|
+
before { root.add(dir) }
|
34
|
+
let(:dir) { Algerb::Files.new('foo') }
|
35
|
+
|
36
|
+
it { should == {'foo' => dir} }
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'when 2 dirs ("foo", "bar") are added' do
|
40
|
+
before do
|
41
|
+
root.add(dir1)
|
42
|
+
root.add(dir2)
|
43
|
+
end
|
44
|
+
|
45
|
+
let(:dir1) { Algerb::Files.new('foo') }
|
46
|
+
let(:dir2) { Algerb::Files.new('bar') }
|
47
|
+
|
48
|
+
it { should == {'foo' => dir1, 'bar' => dir2} }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Algerb::Generator do
|
4
|
+
describe '#generate_autoloader_body' do
|
5
|
+
subject { Algerb::Generator.new.generate_autoloader_body(files) }
|
6
|
+
|
7
|
+
context 'with 1 file ("foo.rb")' do
|
8
|
+
let(:files) { ["foo.rb"] }
|
9
|
+
|
10
|
+
it { should == "autoload :Foo, 'foo'\n" }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'with 2 files ("foo.rb", "bar.rb")' do
|
14
|
+
let(:files) { ["foo.rb", "bar.rb"] }
|
15
|
+
|
16
|
+
it do
|
17
|
+
should == "autoload :Bar, 'bar'\n" +
|
18
|
+
"autoload :Foo, 'foo'\n"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'with 2 files ("foo.rb", "foo/bar.rb")' do
|
23
|
+
let(:files) { ['foo.rb', 'foo/bar.rb'] }
|
24
|
+
it do
|
25
|
+
should == "module Foo\n" +
|
26
|
+
" autoload :Bar, 'foo/bar'\n" +
|
27
|
+
"end\n" +
|
28
|
+
"autoload :Foo, 'foo'\n"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'with 2files ("foo.rb", "foo/bar/baz/foo_bar.rb")' do
|
33
|
+
let(:files) { ['foo.rb', 'foo/bar/baz/foo_bar.rb'] }
|
34
|
+
it do
|
35
|
+
should == "module Foo\n" +
|
36
|
+
" module Bar\n" +
|
37
|
+
" module Baz\n" +
|
38
|
+
" autoload :FooBar, 'foo/bar/baz/foo_bar'\n" +
|
39
|
+
" end\n" +
|
40
|
+
" end\n" +
|
41
|
+
"end\n" +
|
42
|
+
"autoload :Foo, 'foo'\n"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Algerb::Util do
|
4
|
+
include Algerb::Util
|
5
|
+
|
6
|
+
describe '#file_to_class' do
|
7
|
+
subject { file_to_class(file) }
|
8
|
+
|
9
|
+
context 'with file name only alpabets' do
|
10
|
+
let(:file) { 'foo' }
|
11
|
+
it 'should be capitalized' do
|
12
|
+
subject.should == 'Foo'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'with file name with alphabets and underscore' do
|
17
|
+
let(:file) { 'foo_bar' }
|
18
|
+
|
19
|
+
it 'should be CamelCase' do
|
20
|
+
subject.should == 'FooBar'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#indentation' do
|
26
|
+
subject { indentation(code, 2) }
|
27
|
+
|
28
|
+
context 'with single line' do
|
29
|
+
let(:code) { "foo\n" }
|
30
|
+
|
31
|
+
it { should == " foo\n" }
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'with multiple lines' do
|
35
|
+
let(:code) { "foo\nbar" }
|
36
|
+
|
37
|
+
it { should == " foo\n bar\n" }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '#remove_dir' do
|
42
|
+
subject { remove_dir(path) }
|
43
|
+
|
44
|
+
context 'without dir ("foo")' do
|
45
|
+
let(:path) { 'foo' }
|
46
|
+
|
47
|
+
it { should == 'foo' }
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'with 1 nested dir ("foo/bar")' do
|
51
|
+
let(:path) { 'foo/bar' }
|
52
|
+
|
53
|
+
it { should == 'bar' }
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'with 2 nested dir ("foo/bar/baz")' do
|
57
|
+
let(:path) { 'foo/bar/baz' }
|
58
|
+
|
59
|
+
it { should == 'baz' }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '#remove_ext' do
|
64
|
+
subject { remove_ext(path) }
|
65
|
+
|
66
|
+
context 'without directory ("foo.rb")' do
|
67
|
+
let(:path) { 'foo.rb' }
|
68
|
+
|
69
|
+
it { should == 'foo' }
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'with directory ("foo/bar.rb")' do
|
73
|
+
let(:path) { 'foo/bar.rb' }
|
74
|
+
|
75
|
+
it { should == 'foo/bar' }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
metadata
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: algerb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Yuya Takeyama
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-12-31 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: thor
|
16
|
+
requirement: &28381860 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *28381860
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &28381300 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *28381300
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: cucumber
|
38
|
+
requirement: &28380260 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *28380260
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: aruba
|
49
|
+
requirement: &28379700 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *28379700
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: guard-cucumber
|
60
|
+
requirement: &28378960 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *28378960
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: &28378100 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *28378100
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: guard-rspec
|
82
|
+
requirement: &28346620 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *28346620
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: jeweler
|
93
|
+
requirement: &28346080 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ~>
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 1.6.4
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *28346080
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: rcov
|
104
|
+
requirement: &28345560 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *28345560
|
113
|
+
description: Generates autoloader script for your Ruby library.
|
114
|
+
email: sign.of.the.wolf.pentagram@gmail.com
|
115
|
+
executables:
|
116
|
+
- algerb
|
117
|
+
extensions: []
|
118
|
+
extra_rdoc_files:
|
119
|
+
- LICENSE.txt
|
120
|
+
- README.rdoc
|
121
|
+
files:
|
122
|
+
- .rspec
|
123
|
+
- .travis.yml
|
124
|
+
- Gemfile
|
125
|
+
- Gemfile.lock
|
126
|
+
- Guardfile
|
127
|
+
- LICENSE.txt
|
128
|
+
- README.rdoc
|
129
|
+
- Rakefile
|
130
|
+
- VERSION
|
131
|
+
- algerb.gemspec
|
132
|
+
- autoloader.rb
|
133
|
+
- bin/algerb
|
134
|
+
- features/autoloader_generation.feature
|
135
|
+
- features/step_definitions/autoloader_generation_steps.rb
|
136
|
+
- features/support/env.rb
|
137
|
+
- lib/algerb.rb
|
138
|
+
- lib/algerb/app.rb
|
139
|
+
- lib/algerb/file.rb
|
140
|
+
- lib/algerb/files.rb
|
141
|
+
- lib/algerb/files_builder.rb
|
142
|
+
- lib/algerb/generator.rb
|
143
|
+
- lib/algerb/util.rb
|
144
|
+
- spec/spec_helper.rb
|
145
|
+
- spec/unit/algerb/files_builder_spec.rb
|
146
|
+
- spec/unit/algerb/files_spec.rb
|
147
|
+
- spec/unit/algerb/generator_spec.rb
|
148
|
+
- spec/unit/algerb/util_spec.rb
|
149
|
+
homepage: http://github.com/yuya-takeyama/algerb
|
150
|
+
licenses:
|
151
|
+
- MIT
|
152
|
+
post_install_message:
|
153
|
+
rdoc_options: []
|
154
|
+
require_paths:
|
155
|
+
- lib
|
156
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
157
|
+
none: false
|
158
|
+
requirements:
|
159
|
+
- - ! '>='
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '0'
|
162
|
+
segments:
|
163
|
+
- 0
|
164
|
+
hash: -1824357919057677533
|
165
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
|
+
none: false
|
167
|
+
requirements:
|
168
|
+
- - ! '>='
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: '0'
|
171
|
+
requirements: []
|
172
|
+
rubyforge_project:
|
173
|
+
rubygems_version: 1.8.10
|
174
|
+
signing_key:
|
175
|
+
specification_version: 3
|
176
|
+
summary: Autoloader generator for Ruby
|
177
|
+
test_files: []
|