gem_loader 0.0.3 → 0.1.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/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