gem_loader 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -23,18 +23,20 @@ You need to create a gem's dependencies file, such as "depends.rb" or any other
23
23
  gem "sinatra", "1.0"
24
24
  end
25
25
 
26
- scope :development do
26
+ scope :optional
27
+
28
+ scope :test do
27
29
  gem "rspec", ">= 1.3.0", :require => nil
28
30
  end
29
-
30
- scope :test => [:runtime, :development]
31
+
32
+ scope :development => [ :optional, :test ]
31
33
 
32
34
  scope :rakefile do
33
35
  gem "rake", ">= 0.8.7"
34
36
  gem "jeweler", ">= 1.4.0"
35
- gem "rspec"
36
-
37
- require "spec/rake/spectask"
37
+
38
+ gem "rspec", :require => "spec/rake/spectask" # '>= 1.3.0' version shared at :test scope
39
+
38
40
  end
39
41
  end
40
42
 
@@ -65,5 +67,4 @@ example for Jeweler
65
67
 
66
68
  ## TODO
67
69
 
68
- * Shared version of the definition of the gem's depends file
69
- * Add a rake support, used to view the dependencies
70
+ * Add a rake or CLI support, used to view the dependencies
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.2.0
data/depends.rb CHANGED
@@ -5,17 +5,18 @@ require File.expand_path("../lib/gem_loader", __FILE__)
5
5
  GemLoader.setup do
6
6
 
7
7
  scope :runtime
8
-
9
- scope :development do
10
- gem :rspec, ">= 1.3.0", :require => nil
8
+
9
+ scope :optional
10
+
11
+ scope :test do
12
+ gem "rspec", ">= 1.3.0", :require => nil
11
13
  end
12
14
 
13
- scope :test => [ :runtime, :development ]
15
+ scope :development => [:optional, :test]
14
16
 
15
- scope :rakefile => [ :runtime, :development ] do
16
- gem :rake, ">= 0.8.7"
17
- gem :jeweler, ">= 1.4.0"
18
-
19
- require "spec/rake/spectask"
17
+ scope :rakefile do
18
+ gem "rake", ">= 0.8.7"
19
+ gem "jeweler", ">= 1.4.0"
20
+ gem "rspec", :require => "spec/rake/spectask"
20
21
  end
21
22
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{gem_loader}
8
- s.version = "0.1.4"
8
+ s.version = "0.2.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-28}
12
+ s.date = %q{2010-03-29}
13
13
  s.email = %q{Sunteya@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE",
@@ -24,16 +24,18 @@ Gem::Specification.new do |s|
24
24
  "depends.rb",
25
25
  "gem_loader.gemspec",
26
26
  "lib/gem_loader.rb",
27
- "lib/gem_loader/base.rb",
28
- "lib/gem_loader/base/dsl.rb",
27
+ "lib/gem_loader/context.rb",
28
+ "lib/gem_loader/context/dsl.rb",
29
29
  "lib/gem_loader/gem.rb",
30
30
  "lib/gem_loader/gem/dsl.rb",
31
+ "lib/gem_loader/gem_requirement.rb",
31
32
  "lib/gem_loader/gemspec.rb",
32
33
  "lib/gem_loader/scope.rb",
33
34
  "lib/gem_loader/scope/dsl.rb",
34
35
  "lib/gem_loader/version.rb",
35
- "spec/gem_loader/base/dsl_spec.rb",
36
- "spec/gem_loader/base_spec.rb",
36
+ "spec/gem_loader/context/dsl_spec.rb",
37
+ "spec/gem_loader/context_spec.rb",
38
+ "spec/gem_loader/gem_requirement.rb",
37
39
  "spec/gem_loader/gem_spec.rb",
38
40
  "spec/gem_loader/gemspec_spec.rb",
39
41
  "spec/gem_loader/scope/dsl_spec.rb",
@@ -48,8 +50,9 @@ Gem::Specification.new do |s|
48
50
  s.rubygems_version = %q{1.3.6}
49
51
  s.summary = %q{a tiny gem's dependencies loader.}
50
52
  s.test_files = [
51
- "spec/gem_loader/base/dsl_spec.rb",
52
- "spec/gem_loader/base_spec.rb",
53
+ "spec/gem_loader/context/dsl_spec.rb",
54
+ "spec/gem_loader/context_spec.rb",
55
+ "spec/gem_loader/gem_requirement.rb",
53
56
  "spec/gem_loader/gem_spec.rb",
54
57
  "spec/gem_loader/gemspec_spec.rb",
55
58
  "spec/gem_loader/scope/dsl_spec.rb",
@@ -1,5 +1,5 @@
1
1
  require File.expand_path("../gem_loader/version", __FILE__)
2
- require File.expand_path("../gem_loader/base", __FILE__)
2
+ require File.expand_path("../gem_loader/context", __FILE__)
3
3
  require File.expand_path("../gem_loader/gemspec", __FILE__)
4
4
 
5
5
 
@@ -1,24 +1,26 @@
1
1
  require File.expand_path("../scope", __FILE__)
2
+ require File.expand_path("../gem_requirement", __FILE__)
2
3
  require File.expand_path("../gem", __FILE__)
3
- require File.expand_path("../base/dsl", __FILE__)
4
+ require File.expand_path("../context/dsl", __FILE__)
4
5
 
5
6
  module GemLoader
6
- class Base
7
- attr_accessor :scopes
7
+ class Context
8
+ attr_accessor :scopes, :gem_requirements
8
9
 
9
10
  def initialize
10
11
  self.scopes = {}
12
+ self.gem_requirements = {}
11
13
  end
12
14
 
13
- def scope(name, depend_scopes = [])
14
- self.scopes ||= {}
15
- self.scopes[name] ||= Scope.new(name, depend_scopes)
15
+ def scope(name)
16
+ self.scopes[name] ||= Scope.new(self, name)
16
17
  end
17
18
 
18
- def setup(&block)
19
- self.dsl(&block)
19
+ def gem_requirement(name)
20
+ self.gem_requirements[name] ||= GemRequirement.new(name)
20
21
  end
21
22
 
23
+
22
24
  def load(*args)
23
25
  scope_names = [ args ].flatten
24
26
  scope_names.each do |scope_name|
@@ -37,7 +39,7 @@ module GemLoader
37
39
  end
38
40
 
39
41
  def self.instance
40
- @instance ||= Base.new
42
+ @instance ||= Context.new
41
43
  end
42
44
 
43
45
  def self.method_missing(sym, *args, &block)
@@ -0,0 +1,38 @@
1
+ module GemLoader
2
+ class Context
3
+
4
+ def setup(&block)
5
+ self.dsl(&block)
6
+ end
7
+
8
+ def dsl(&block)
9
+ Dsl.new(self, &block)
10
+ end
11
+
12
+ class Dsl
13
+ attr_accessor :context
14
+
15
+ def initialize(context, &block)
16
+ self.context = context
17
+ instance_eval(&block) if block
18
+ end
19
+
20
+ def scope(arg, &block)
21
+ if arg.is_a?(Hash)
22
+ name = arg.keys.first
23
+ depend_scope_names = [ arg[name] ].flatten
24
+ else
25
+ name = arg
26
+ depend_scope_names = []
27
+ end
28
+
29
+ scope = self.context.scope(name)
30
+ depend_scope_names.each do |name|
31
+ scope.add_depend_scope(self.context.scope(name))
32
+ end
33
+
34
+ scope.dsl(&block)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -2,16 +2,29 @@ require File.expand_path("../gem/dsl", __FILE__)
2
2
 
3
3
  module GemLoader
4
4
  class Gem
5
- attr_accessor :name, :version, :options, :requires
5
+ attr_accessor :name, :gem_requirement, :version_requirement, :options
6
6
 
7
- def initialize(name, version = nil, options = {})
7
+ def initialize(name, gem_requirement, *args)
8
8
  self.name = name.to_s
9
- self.version = version
10
- self.options = options || {}
9
+ self.gem_requirement = gem_requirement
10
+ self.options = {}
11
+
12
+ self.parse_args(*args)
13
+ end
14
+
15
+ def parse_args(*args)
16
+ self.options = args.pop if args.last.is_a?(Hash)
17
+ self.version_requirement = args.first
18
+ self.gem_requirement.add_version_requirement(version_requirement)
19
+ self
20
+ end
21
+
22
+ def version_requirements
23
+ self.gem_requirement.version_requirements
11
24
  end
12
25
 
13
26
  def gem_args
14
- [self.name, self.version].compact
27
+ [self.name, self.version_requirements ].compact.flatten
15
28
  end
16
29
 
17
30
  def load
@@ -6,10 +6,10 @@ module GemLoader
6
6
  end
7
7
 
8
8
  class Dsl
9
- attr_accessor :parent
9
+ attr_accessor :gem
10
10
 
11
- def initialize(parent, &block)
12
- self.parent = parent
11
+ def initialize(gem, &block)
12
+ self.gem = gem
13
13
  instance_eval(&block) if block
14
14
  end
15
15
  end
@@ -0,0 +1,18 @@
1
+ require File.expand_path("../gem/dsl", __FILE__)
2
+
3
+ module GemLoader
4
+ class GemRequirement
5
+
6
+ attr_accessor :name, :version_requirements
7
+
8
+ def initialize(name)
9
+ self.name = name
10
+ self.version_requirements = []
11
+ end
12
+
13
+ def add_version_requirement(version_requirement)
14
+ self.version_requirements << version_requirement if version_requirement
15
+ end
16
+
17
+ end
18
+ end
@@ -2,13 +2,16 @@ require File.expand_path("../scope/dsl", __FILE__)
2
2
 
3
3
  module GemLoader
4
4
  class Scope
5
- attr_accessor :name, :depend_scopes, :gems, :libs
5
+ attr_accessor :context, :name, :depend_scopes, :gems, :libs
6
6
 
7
- def initialize(name, depend_scopes = [])
7
+ def initialize(context, name)
8
+ self.context = context
8
9
  self.name = name
9
- self.depend_scopes = depend_scopes
10
- self.gems = []
11
- self.libs = []
10
+ self.depend_scopes, self.gems, self.libs = [], [], []
11
+ end
12
+
13
+ def add_depend_scope(scope)
14
+ self.depend_scopes << scope
12
15
  end
13
16
 
14
17
  def all_gems
@@ -31,9 +34,10 @@ module GemLoader
31
34
  end
32
35
  end
33
36
 
34
- def gem(name, version, options)
35
- (self.gems ||= []) << Gem.new(name, version, options)
36
- self.gems.last
37
+ def gem(name)
38
+ gem_requirement = self.context.gem_requirement(name)
39
+ gem = Gem.new(name, gem_requirement)
40
+ (self.gems << gem).last
37
41
  end
38
42
 
39
43
  end
@@ -6,22 +6,19 @@ module GemLoader
6
6
  end
7
7
 
8
8
  class Dsl
9
- attr_accessor :parent
9
+ attr_accessor :scope
10
10
 
11
- def initialize(parent, &block)
12
- self.parent = parent
11
+ def initialize(scope, &block)
12
+ self.scope = scope
13
13
  instance_eval(&block) if block
14
14
  end
15
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)
16
+ def gem(name, *args, &block)
17
+ self.scope.gem(name).parse_args(*args).dsl(&block)
21
18
  end
22
19
 
23
20
  def require(*args)
24
- self.parent.libs << [ args ].flatten
21
+ self.scope.libs << [ args ].flatten
25
22
  end
26
23
  end
27
24
  end
@@ -0,0 +1,23 @@
1
+ require "spec_helper"
2
+
3
+ describe GemLoader::Context::Dsl do
4
+
5
+
6
+ it "should say scope successful" do
7
+ @context.dsl do
8
+ scope :foo
9
+ end
10
+
11
+ @context.scope(:foo).should_not be_nil
12
+ end
13
+
14
+ it "should say scope with depend other scopes successful" do
15
+ @context.dsl do
16
+ scope :development => :test
17
+ end
18
+
19
+ scope = @context.scope(:development)
20
+ scope.depend_scopes.last.should == @context.scope(:test)
21
+ end
22
+
23
+ end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+ describe GemLoader::Context do
4
+
5
+ it "should be build scope successful" do
6
+ scope = @context.scope("name")
7
+ @context.scope("name").should == scope
8
+
9
+ scope2 = @context.scope("name") # reinvoke
10
+ scope.should == scope2
11
+ end
12
+
13
+ it "should be build gem requirement successful" do
14
+ gem_requirement = @context.gem_requirement("name")
15
+ @context.gem_requirement("name").should == gem_requirement
16
+
17
+ gem_requirement2 = @context.gem_requirement("name") # reinvoke
18
+ gem_requirement.should == gem_requirement2
19
+ end
20
+
21
+ end
@@ -0,0 +1,7 @@
1
+ require "spec_helper"
2
+
3
+ describe GemLoader::GemRequirement do
4
+
5
+
6
+
7
+ end
@@ -1,37 +1,46 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe GemLoader::Gem do
4
+
5
+ before(:each) do
6
+ gem_requirement = GemLoader::GemRequirement.new("foo")
7
+ @foo_gem = GemLoader::Gem.new("foo", gem_requirement)
8
+ @foo_gem2 = GemLoader::Gem.new("foo", gem_requirement)
9
+ end
4
10
 
5
11
  describe "should load and require by" do
6
12
  it "name only" do
7
- @gem = GemLoader::Gem.new("foo")
8
13
  Kernel.should_receive(:gem).with("foo")
9
14
  Kernel.should_receive(:require).with("foo")
10
15
  end
11
16
 
12
17
  it "name and version" do
13
- @gem = GemLoader::Gem.new("foo", "0.1")
14
- Kernel.should_receive(:gem).with("foo", "0.1")
18
+ @foo_gem.parse_args("0.1")
19
+ @foo_gem2.parse_args(">= 0.2")
20
+
21
+ Kernel.should_receive(:gem).with("foo", "0.1", ">= 0.2")
15
22
  Kernel.should_receive(:require).with("foo")
16
23
  end
17
24
 
18
25
  it "with require lib" do
19
- @gem = GemLoader::Gem.new("actionpack", "~> 2.3.5", :require => ["action_pack", "action_view", "action_controller"])
20
- Kernel.should_receive(:gem).with("actionpack", "~> 2.3.5")
26
+ @foo_gem.parse_args("~> 2.3.5", :require => ["action_pack", "action_view", "action_controller"])
27
+
28
+ Kernel.should_receive(:gem).with("foo", "~> 2.3.5")
21
29
  Kernel.should_receive(:require).with("action_pack")
22
30
  Kernel.should_receive(:require).with("action_view")
23
31
  Kernel.should_receive(:require).with("action_controller")
24
32
  end
25
33
 
26
34
  it "skip require" do
27
- @gem = GemLoader::Gem.new("foo", "0.1", :require => nil)
35
+ @foo_gem.parse_args("0.1", :require => nil)
36
+
28
37
  Kernel.should_receive(:gem).with("foo", "0.1")
29
38
  Kernel.stub!(:require).and_raise("fail")
30
39
  end
31
40
 
32
41
  after(:each) do
33
- @gem.load
34
- @gem.require
42
+ @foo_gem.load
43
+ @foo_gem.require
35
44
  end
36
45
  end
37
46
 
@@ -1,10 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe GemLoader::Gemspec do
4
- before(:each) do
5
- @base = GemLoader::Base.new
6
- GemLoader.stub!(:instance).and_return(@base)
7
- end
8
4
 
9
5
  it "should integrate gemspec with gem_loader" do
10
6
  spec = Gem::Specification.new
@@ -13,7 +9,7 @@ describe GemLoader::Gemspec do
13
9
  end
14
10
 
15
11
  it "should integrate to gemspec" do
16
- @base.setup do
12
+ @context.setup do
17
13
  scope :runtime do
18
14
  gem "run", "= 0.2"
19
15
  end
@@ -3,13 +3,13 @@ require "spec_helper"
3
3
  describe GemLoader::Scope::Dsl do
4
4
 
5
5
  before(:each) do
6
- @scope = GemLoader::Scope.new("test")
6
+ @scope = @context.scope(:test)
7
7
  @dsl = GemLoader::Scope::Dsl.new(@scope)
8
8
  end
9
9
 
10
10
  it "should say gem success" do
11
- @dsl.gem(:foo)
12
- @scope.gems.last.name.should == "foo"
11
+ @scope.dsl { gem("foo") }
12
+ @scope.gem("foo").should_not be_nil
13
13
  end
14
14
 
15
15
  it "should say require success" do
@@ -3,11 +3,11 @@ require "spec_helper"
3
3
  describe GemLoader::Scope do
4
4
 
5
5
  before(:each) do
6
- @scope = GemLoader::Scope.new("test")
6
+ @scope = @context.scope(:test)
7
7
  end
8
8
 
9
9
  it "should require by gem and libs" do
10
- @scope.gems << GemLoader::Gem.new("foo")
10
+ @scope.gem("foo")
11
11
  @scope.libs << [ "bar", "biz" ]
12
12
 
13
13
  Kernel.should_receive(:require).with("foo")
@@ -18,9 +18,9 @@ describe GemLoader::Scope do
18
18
  end
19
19
 
20
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")
21
+ depend_scope = @context.scope("depend")
22
+ depend_scope.gem("depend_gem")
23
+ @scope.gem("test_gem")
24
24
  @scope.depend_scopes << depend_scope
25
25
 
26
26
  @scope.all_gems.should == [ depend_scope.gems + @scope.gems ].flatten
@@ -2,8 +2,14 @@ require File.expand_path("../../depends.rb", __FILE__)
2
2
  require "gem_loader"
3
3
 
4
4
  GemLoader.require(:test)
5
+ GemLoader.require(:runtime, :development)
5
6
 
6
7
 
7
8
  Spec::Runner.configure do |config|
8
-
9
+
10
+ config.before(:each) do
11
+ @context = GemLoader::Context.new
12
+ GemLoader.stub!(:instance).and_return(@context)
13
+ end
14
+
9
15
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 4
9
- version: 0.1.4
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Sunteya
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-28 00:00:00 +08:00
17
+ date: 2010-03-29 00:00:00 +08:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -49,16 +49,18 @@ files:
49
49
  - depends.rb
50
50
  - gem_loader.gemspec
51
51
  - lib/gem_loader.rb
52
- - lib/gem_loader/base.rb
53
- - lib/gem_loader/base/dsl.rb
52
+ - lib/gem_loader/context.rb
53
+ - lib/gem_loader/context/dsl.rb
54
54
  - lib/gem_loader/gem.rb
55
55
  - lib/gem_loader/gem/dsl.rb
56
+ - lib/gem_loader/gem_requirement.rb
56
57
  - lib/gem_loader/gemspec.rb
57
58
  - lib/gem_loader/scope.rb
58
59
  - lib/gem_loader/scope/dsl.rb
59
60
  - lib/gem_loader/version.rb
60
- - spec/gem_loader/base/dsl_spec.rb
61
- - spec/gem_loader/base_spec.rb
61
+ - spec/gem_loader/context/dsl_spec.rb
62
+ - spec/gem_loader/context_spec.rb
63
+ - spec/gem_loader/gem_requirement.rb
62
64
  - spec/gem_loader/gem_spec.rb
63
65
  - spec/gem_loader/gemspec_spec.rb
64
66
  - spec/gem_loader/scope/dsl_spec.rb
@@ -97,8 +99,9 @@ signing_key:
97
99
  specification_version: 3
98
100
  summary: a tiny gem's dependencies loader.
99
101
  test_files:
100
- - spec/gem_loader/base/dsl_spec.rb
101
- - spec/gem_loader/base_spec.rb
102
+ - spec/gem_loader/context/dsl_spec.rb
103
+ - spec/gem_loader/context_spec.rb
104
+ - spec/gem_loader/gem_requirement.rb
102
105
  - spec/gem_loader/gem_spec.rb
103
106
  - spec/gem_loader/gemspec_spec.rb
104
107
  - spec/gem_loader/scope/dsl_spec.rb
@@ -1,31 +0,0 @@
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,20 +0,0 @@
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
@@ -1,6 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe GemLoader::Base do
4
-
5
-
6
- end