gem_loader 0.1.4 → 0.2.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.
@@ -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