gem_loader 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -12,16 +12,18 @@ namespace :spec do
12
12
  spec.libs = [ 'lib', 'spec' ]
13
13
  spec.pattern = 'spec/**/*_spec.rb'
14
14
  spec.rcov = true
15
+ spec.rcov_opts << ['--exclude', 'rcov']
15
16
  end
16
17
  end
17
18
 
18
19
 
19
- Jeweler::Tasks.new do |gem|
20
- gem.name = "gem_loader"
21
- gem.summary = "a tiny gem's dependencies loader."
22
- gem.email = "Sunteya@gmail.com"
23
- gem.homepage = "http://github.com/sunteya/gem_loader"
24
- gem.authors = ["Sunteya"]
20
+ Jeweler::Tasks.new do |spec|
21
+ spec.name = "gem_loader"
22
+ spec.summary = "a tiny gem's dependencies loader."
23
+ spec.email = "Sunteya@gmail.com"
24
+ spec.homepage = "http://github.com/sunteya/gem_loader"
25
+ spec.authors = ["Sunteya"]
26
+ GemLoader.gemspec.integrate(spec)
25
27
  end
26
28
  Jeweler::GemcutterTasks.new
27
29
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.1.0
data/depends.rb CHANGED
@@ -3,14 +3,17 @@ require File.expand_path("../lib/gem_loader", __FILE__)
3
3
 
4
4
 
5
5
  GemLoader.setup do
6
+
7
+ scope :development => :test
8
+
6
9
  scope :test do
7
- gem :rspec, ">= 1.3.0", :require => "spec"
10
+ gem :rspec, ">= 1.3.0", :require => nil
8
11
  end
9
12
 
10
- scope :rakefile do
13
+ scope :rakefile => :test do
11
14
  gem :rake, ">= 0.8.7"
12
15
  gem :jeweler, ">= 1.4.0"
13
16
 
14
- require 'spec/rake/spectask'
17
+ require "spec/rake/spectask"
15
18
  end
16
19
  end
data/gem_loader.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{gem_loader}
8
- s.version = "0.0.3"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Sunteya"]
12
- s.date = %q{2010-03-26}
12
+ s.date = %q{2010-03-27}
13
13
  s.email = %q{Sunteya@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE",
@@ -25,9 +25,19 @@ Gem::Specification.new do |s|
25
25
  "gem_loader.gemspec",
26
26
  "lib/gem_loader.rb",
27
27
  "lib/gem_loader/base.rb",
28
+ "lib/gem_loader/base/dsl.rb",
28
29
  "lib/gem_loader/gem.rb",
30
+ "lib/gem_loader/gem/dsl.rb",
31
+ "lib/gem_loader/gemspec.rb",
29
32
  "lib/gem_loader/scope.rb",
30
- "spec/lib/gem_loader_spec.rb",
33
+ "lib/gem_loader/scope/dsl.rb",
34
+ "spec/gem_loader/base/dsl_spec.rb",
35
+ "spec/gem_loader/base_spec.rb",
36
+ "spec/gem_loader/gem_spec.rb",
37
+ "spec/gem_loader/gemspec_spec.rb",
38
+ "spec/gem_loader/scope/dsl_spec.rb",
39
+ "spec/gem_loader/scope_spec.rb",
40
+ "spec/gem_loader_spec.rb",
31
41
  "spec/spec.opts",
32
42
  "spec/spec_helper.rb"
33
43
  ]
@@ -37,7 +47,13 @@ Gem::Specification.new do |s|
37
47
  s.rubygems_version = %q{1.3.6}
38
48
  s.summary = %q{a tiny gem's dependencies loader.}
39
49
  s.test_files = [
40
- "spec/lib/gem_loader_spec.rb",
50
+ "spec/gem_loader/base/dsl_spec.rb",
51
+ "spec/gem_loader/base_spec.rb",
52
+ "spec/gem_loader/gem_spec.rb",
53
+ "spec/gem_loader/gemspec_spec.rb",
54
+ "spec/gem_loader/scope/dsl_spec.rb",
55
+ "spec/gem_loader/scope_spec.rb",
56
+ "spec/gem_loader_spec.rb",
41
57
  "spec/spec_helper.rb"
42
58
  ]
43
59
 
@@ -46,9 +62,12 @@ Gem::Specification.new do |s|
46
62
  s.specification_version = 3
47
63
 
48
64
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
65
+ s.add_development_dependency(%q<rspec>, [">= 1.3.0"])
49
66
  else
67
+ s.add_dependency(%q<rspec>, [">= 1.3.0"])
50
68
  end
51
69
  else
70
+ s.add_dependency(%q<rspec>, [">= 1.3.0"])
52
71
  end
53
72
  end
54
73
 
@@ -0,0 +1,31 @@
1
+ module GemLoader
2
+ class Base
3
+
4
+ def dsl(&block)
5
+ Dsl.new(self, &block)
6
+ end
7
+
8
+ class Dsl
9
+ attr_accessor :parent
10
+
11
+ def initialize(parent, &block)
12
+ self.parent = parent
13
+ instance_eval(&block) if block
14
+ end
15
+
16
+ def scope(arg, &block)
17
+ case arg
18
+ when Hash
19
+ name = arg.keys.first
20
+ dep_names = [ arg[name] ].flatten
21
+ else
22
+ name = arg
23
+ dep_names = []
24
+ end
25
+
26
+ dep_scopes = dep_names.map{ |dep_name| self.parent.scope(dep_name) }
27
+ self.parent.scope(name, dep_scopes).dsl(&block)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,7 @@
1
+ require File.expand_path("../scope", __FILE__)
2
+ require File.expand_path("../gem", __FILE__)
3
+ require File.expand_path("../base/dsl", __FILE__)
4
+
1
5
  module GemLoader
2
6
  class Base
3
7
  attr_accessor :scopes
@@ -6,13 +10,13 @@ module GemLoader
6
10
  self.scopes = {}
7
11
  end
8
12
 
9
- def scope(name)
13
+ def scope(name, depend_scopes = [])
10
14
  self.scopes ||= {}
11
- self.scopes[name] ||= Scope.new(name)
15
+ self.scopes[name] ||= Scope.new(name, depend_scopes)
12
16
  end
13
17
 
14
18
  def setup(&block)
15
- Dsl.new(self, &block)
19
+ self.dsl(&block)
16
20
  end
17
21
 
18
22
  def load(*args)
@@ -30,18 +34,5 @@ module GemLoader
30
34
  self.scope(scope_name).require
31
35
  end
32
36
  end
33
-
34
- class Dsl
35
- attr_accessor :parent
36
-
37
- def initialize(parent, &block)
38
- self.parent = parent
39
- instance_eval(&block)
40
- end
41
-
42
- def scope(name, &block)
43
- self.parent.scope(name).dsl(&block)
44
- end
45
- end
46
37
  end
47
38
  end
@@ -0,0 +1,17 @@
1
+ module GemLoader
2
+ class Gem
3
+
4
+ def dsl(&block)
5
+ Dsl.new(self, &block)
6
+ end
7
+
8
+ class Dsl
9
+ attr_accessor :parent
10
+
11
+ def initialize(parent, &block)
12
+ self.parent = parent
13
+ instance_eval(&block) if block
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,5 @@
1
+ require File.expand_path("../gem/dsl", __FILE__)
2
+
1
3
  module GemLoader
2
4
  class Gem
3
5
  attr_accessor :name, :version, :options, :requires
@@ -8,11 +10,15 @@ module GemLoader
8
10
  self.options = options || {}
9
11
  end
10
12
 
13
+ def gem_args
14
+ self.version ? [self.name, self.version] : [self.name]
15
+ end
16
+
11
17
  def load
12
18
  if self.version
13
- Kernel.send :gem, self.name, self.version
19
+ Kernel.send :gem, *gem_args
14
20
  else
15
- Kernel.send :gem, self.name
21
+ Kernel.send :gem, *gem_args
16
22
  end
17
23
  end
18
24
 
@@ -26,17 +32,5 @@ module GemLoader
26
32
  end
27
33
  end
28
34
 
29
- def dsl(&block)
30
- Dsl.new(self, &block)
31
- end
32
-
33
- class Dsl
34
- attr_accessor :parent
35
-
36
- def initialize(parent, &block)
37
- self.parent = parent
38
- instance_eval(&block) if block
39
- end
40
- end
41
35
  end
42
36
  end
@@ -0,0 +1,24 @@
1
+ module GemLoader
2
+
3
+ class Gemspec
4
+ attr_accessor :base
5
+
6
+ def initialize(base)
7
+ self.base = base
8
+ end
9
+
10
+ def integrate(spec)
11
+ base.scope(:runtime).all_gems.each do |gem|
12
+ spec.add_runtime_dependency(*gem.gem_args)
13
+ end
14
+
15
+ base.scope(:development).all_gems.each do |gem|
16
+ spec.add_development_dependency(*gem.gem_args)
17
+ end
18
+ end
19
+ end
20
+
21
+ def self.gemspec
22
+ Gemspec.new(self.instance)
23
+ end
24
+ end
@@ -0,0 +1,28 @@
1
+ module GemLoader
2
+ class Scope
3
+
4
+ def dsl(&block)
5
+ Dsl.new(self, &block)
6
+ end
7
+
8
+ class Dsl
9
+ attr_accessor :parent
10
+
11
+ def initialize(parent, &block)
12
+ self.parent = parent
13
+ instance_eval(&block) if block
14
+ end
15
+
16
+ def gem(*args, &block)
17
+ options = args.pop if args.last.is_a?(Hash)
18
+ name, version = *args
19
+
20
+ self.parent.gem(name, version, options).dsl(&block)
21
+ end
22
+
23
+ def require(*args)
24
+ self.parent.libs << [ args ].flatten
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,13 +1,20 @@
1
+ require File.expand_path("../scope/dsl", __FILE__)
2
+
1
3
  module GemLoader
2
4
  class Scope
3
- attr_accessor :name, :gems, :libs
5
+ attr_accessor :name, :depend_scopes, :gems, :libs
4
6
 
5
- def initialize(name)
7
+ def initialize(name, depend_scopes = [])
6
8
  self.name = name
9
+ self.depend_scopes = depend_scopes
7
10
  self.gems = []
8
11
  self.libs = []
9
12
  end
10
13
 
14
+ def all_gems
15
+ [ self.depend_scopes.map(&:all_gems) + self.gems ].flatten
16
+ end
17
+
11
18
  def load
12
19
  self.gems.each do |gem|
13
20
  gem.load
@@ -29,28 +36,6 @@ module GemLoader
29
36
  self.gems.last
30
37
  end
31
38
 
32
- def dsl(&block)
33
- Dsl.new(self, &block)
34
- end
35
-
36
- class Dsl
37
- attr_accessor :parent
38
-
39
- def initialize(parent, &block)
40
- self.parent = parent
41
- instance_eval(&block)
42
- end
43
-
44
- def gem(*args, &block)
45
- options = args.pop if args.last.is_a?(Hash)
46
- name, version = *args
47
-
48
- self.parent.gem(name, version, options).dsl(&block)
49
- end
50
-
51
- def require(*args)
52
- self.parent.libs << [ args ].flatten
53
- end
54
- end
39
+
55
40
  end
56
41
  end
data/lib/gem_loader.rb CHANGED
@@ -1,6 +1,5 @@
1
- require File.expand_path("../gem_loader/scope", __FILE__)
2
- require File.expand_path("../gem_loader/gem", __FILE__)
3
1
  require File.expand_path("../gem_loader/base", __FILE__)
2
+ require File.expand_path("../gem_loader/gemspec", __FILE__)
4
3
 
5
4
 
6
5
  module GemLoader
@@ -0,0 +1,20 @@
1
+ require "spec_helper"
2
+
3
+ describe GemLoader::Base::Dsl do
4
+
5
+ before(:each) do
6
+ @base = GemLoader::Base.new
7
+ @dsl = GemLoader::Base::Dsl.new(@base)
8
+ end
9
+
10
+ it "should say scope success" do
11
+ @dsl.scope(:foo)
12
+ @base.scopes[:foo].should_not be_nil
13
+ end
14
+
15
+ it "should say scope with depends" do
16
+ @dsl.scope(:foo => [:bar])
17
+ @base.scopes[:bar].should_not be_nil
18
+ @base.scopes[:foo].depend_scopes.should be_include @base.scopes[:bar]
19
+ end
20
+ end
@@ -0,0 +1,6 @@
1
+ require "spec_helper"
2
+
3
+ describe GemLoader::Base do
4
+
5
+
6
+ end
@@ -0,0 +1,36 @@
1
+ require "spec_helper"
2
+
3
+ describe GemLoader::Gem do
4
+
5
+ describe "should load and require by" do
6
+ it "name only" do
7
+ @gem = GemLoader::Gem.new("foo")
8
+ Kernel.should_receive(:gem).with("foo")
9
+ Kernel.should_receive(:require).with("foo")
10
+ end
11
+
12
+ it "name and version" do
13
+ @gem = GemLoader::Gem.new("foo", "0.1")
14
+ Kernel.should_receive(:gem).with("foo", "0.1")
15
+ Kernel.should_receive(:require).with("foo")
16
+ end
17
+
18
+ it "with require lib" do
19
+ @gem = GemLoader::Gem.new("foo", "0.1", :require => "lib")
20
+ Kernel.should_receive(:gem).with("foo", "0.1")
21
+ Kernel.stub!(:require).with("lib")
22
+ end
23
+
24
+ it "skip require" do
25
+ @gem = GemLoader::Gem.new("foo", "0.1", :require => nil)
26
+ Kernel.should_receive(:gem).with("foo", "0.1")
27
+ Kernel.stub!(:require).and_raise("fail")
28
+ end
29
+
30
+ after(:each) do
31
+ @gem.load
32
+ @gem.require
33
+ end
34
+ end
35
+
36
+ end
@@ -0,0 +1,30 @@
1
+ require "spec_helper"
2
+
3
+ describe GemLoader::Gemspec do
4
+ before(:each) do
5
+ @base = GemLoader::Base.new
6
+ GemLoader.stub!(:instance).and_return(@base)
7
+ end
8
+
9
+ it "should integrate to gemspec" do
10
+ @base.setup do
11
+ scope :runtime do
12
+ gem "run", "= 0.2"
13
+ end
14
+
15
+ scope :development do
16
+ gem "dev"
17
+ end
18
+ end
19
+
20
+ spec = Gem::Specification.new
21
+ GemLoader.gemspec.integrate(spec)
22
+ spec.runtime_dependencies.each do |gem|
23
+ gem.name.should == "run"
24
+ gem.requirement.requirements.last.should == Gem::Requirement.parse("= 0.2")
25
+ end
26
+
27
+ spec.development_dependencies.map(&:name).should == ["dev"]
28
+ end
29
+
30
+ end
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ describe GemLoader::Scope::Dsl do
4
+
5
+ before(:each) do
6
+ @scope = GemLoader::Scope.new("test")
7
+ @dsl = GemLoader::Scope::Dsl.new(@scope)
8
+ end
9
+
10
+ it "should say gem success" do
11
+ @dsl.gem(:foo)
12
+ @scope.gems.last.name.should == "foo"
13
+ end
14
+
15
+ it "should say require success" do
16
+ @dsl.require("bar")
17
+ @scope.libs.last.should == [ "bar" ]
18
+ end
19
+ end
@@ -0,0 +1,28 @@
1
+ require "spec_helper"
2
+
3
+ describe GemLoader::Scope do
4
+
5
+ before(:each) do
6
+ @scope = GemLoader::Scope.new("test")
7
+ end
8
+
9
+ it "should require by gem and libs" do
10
+ @scope.gems << GemLoader::Gem.new("foo")
11
+ @scope.libs << [ "bar", "biz" ]
12
+
13
+ Kernel.should_receive(:require).with("foo")
14
+ Kernel.should_receive(:require).with("bar")
15
+ Kernel.should_receive(:require).with("biz")
16
+
17
+ @scope.require
18
+ end
19
+
20
+ it "should include depends scope gems" do
21
+ depend_scope = GemLoader::Scope.new("depend")
22
+ depend_scope.gems << GemLoader::Gem.new("depend_gem")
23
+ @scope.gems << GemLoader::Gem.new("test_gem")
24
+ @scope.depend_scopes << depend_scope
25
+
26
+ @scope.all_gems.should == [ depend_scope.gems + @scope.gems ].flatten
27
+ end
28
+ end
File without changes
data/spec/spec_helper.rb CHANGED
@@ -4,3 +4,6 @@ require "gem_loader"
4
4
  GemLoader.require :test
5
5
 
6
6
 
7
+ Spec::Runner.configure do |config|
8
+
9
+ end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
+ - 1
7
8
  - 0
8
- - 3
9
- version: 0.0.3
9
+ version: 0.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Sunteya
@@ -14,10 +14,23 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-26 00:00:00 +08:00
17
+ date: 2010-03-27 00:00:00 +08:00
18
18
  default_executable:
19
- dependencies: []
20
-
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 3
30
+ - 0
31
+ version: 1.3.0
32
+ type: :development
33
+ version_requirements: *id001
21
34
  description:
22
35
  email: Sunteya@gmail.com
23
36
  executables: []
@@ -37,9 +50,19 @@ files:
37
50
  - gem_loader.gemspec
38
51
  - lib/gem_loader.rb
39
52
  - lib/gem_loader/base.rb
53
+ - lib/gem_loader/base/dsl.rb
40
54
  - lib/gem_loader/gem.rb
55
+ - lib/gem_loader/gem/dsl.rb
56
+ - lib/gem_loader/gemspec.rb
41
57
  - lib/gem_loader/scope.rb
42
- - spec/lib/gem_loader_spec.rb
58
+ - lib/gem_loader/scope/dsl.rb
59
+ - spec/gem_loader/base/dsl_spec.rb
60
+ - spec/gem_loader/base_spec.rb
61
+ - spec/gem_loader/gem_spec.rb
62
+ - spec/gem_loader/gemspec_spec.rb
63
+ - spec/gem_loader/scope/dsl_spec.rb
64
+ - spec/gem_loader/scope_spec.rb
65
+ - spec/gem_loader_spec.rb
43
66
  - spec/spec.opts
44
67
  - spec/spec_helper.rb
45
68
  has_rdoc: true
@@ -73,5 +96,11 @@ signing_key:
73
96
  specification_version: 3
74
97
  summary: a tiny gem's dependencies loader.
75
98
  test_files:
76
- - spec/lib/gem_loader_spec.rb
99
+ - spec/gem_loader/base/dsl_spec.rb
100
+ - spec/gem_loader/base_spec.rb
101
+ - spec/gem_loader/gem_spec.rb
102
+ - spec/gem_loader/gemspec_spec.rb
103
+ - spec/gem_loader/scope/dsl_spec.rb
104
+ - spec/gem_loader/scope_spec.rb
105
+ - spec/gem_loader_spec.rb
77
106
  - spec/spec_helper.rb