gem_loader 0.0.2

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.
@@ -0,0 +1,2 @@
1
+ coverage/*
2
+ pkg/*
data/README ADDED
File without changes
@@ -0,0 +1,29 @@
1
+ require File.expand_path("../depends.rb", __FILE__)
2
+ GemLoader.require :test, :rakefile
3
+
4
+ Spec::Rake::SpecTask.new(:spec) do |spec|
5
+ spec.libs = [ 'lib', 'spec' ]
6
+ spec.spec_opts = ['--options', "spec/spec.opts"]
7
+ spec.spec_files = FileList['spec/**/*_spec.rb']
8
+ end
9
+
10
+ namespace :spec do
11
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
12
+ spec.libs = [ 'lib', 'spec' ]
13
+ spec.pattern = 'spec/**/*_spec.rb'
14
+ spec.rcov = true
15
+ end
16
+ end
17
+
18
+
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"]
25
+ end
26
+ Jeweler::GemcutterTasks.new
27
+
28
+ task :spec => :check_dependencies
29
+ task :default => :spec
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.2
@@ -0,0 +1,16 @@
1
+ require "rubygems"
2
+ require File.expand_path("../lib/gem_loader", __FILE__)
3
+
4
+
5
+ GemLoader.setup do
6
+ scope :test do
7
+ gem :rspec, ">= 1.3.0", :require => "spec"
8
+ end
9
+
10
+ scope :rakefile do
11
+ gem :rake, ">= 0.8.7"
12
+ gem :jeweler, ">= 1.4.0"
13
+
14
+ require 'spec/rake/spectask'
15
+ end
16
+ end
@@ -0,0 +1,52 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{gem_loader}
8
+ s.version = "0.0.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Sunteya"]
12
+ s.date = %q{2010-03-26}
13
+ s.email = %q{Sunteya@gmail.com}
14
+ s.extra_rdoc_files = [
15
+ "README"
16
+ ]
17
+ s.files = [
18
+ ".gitignore",
19
+ "README",
20
+ "Rakefile",
21
+ "VERSION",
22
+ "depends.rb",
23
+ "gem_loader.gemspec",
24
+ "lib/gem_loader.rb",
25
+ "lib/gem_loader/base.rb",
26
+ "lib/gem_loader/gem.rb",
27
+ "lib/gem_loader/scope.rb",
28
+ "spec/lib/gem_loader_spec.rb",
29
+ "spec/spec.opts",
30
+ "spec/spec_helper.rb"
31
+ ]
32
+ s.homepage = %q{http://github.com/sunteya/gem_loader}
33
+ s.rdoc_options = ["--charset=UTF-8"]
34
+ s.require_paths = ["lib"]
35
+ s.rubygems_version = %q{1.3.6}
36
+ s.summary = %q{a tiny gem's dependencies loader.}
37
+ s.test_files = [
38
+ "spec/lib/gem_loader_spec.rb",
39
+ "spec/spec_helper.rb"
40
+ ]
41
+
42
+ if s.respond_to? :specification_version then
43
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
44
+ s.specification_version = 3
45
+
46
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
47
+ else
48
+ end
49
+ else
50
+ end
51
+ end
52
+
@@ -0,0 +1,15 @@
1
+ require File.expand_path("../gem_loader/scope", __FILE__)
2
+ require File.expand_path("../gem_loader/gem", __FILE__)
3
+ require File.expand_path("../gem_loader/base", __FILE__)
4
+
5
+
6
+ module GemLoader
7
+
8
+ def self.instance
9
+ @instance ||= Base.new
10
+ end
11
+
12
+ def self.method_missing(sym, *args, &block)
13
+ self.instance.send(sym, *args, &block)
14
+ end
15
+ end
@@ -0,0 +1,47 @@
1
+ module GemLoader
2
+ class Base
3
+ attr_accessor :scopes
4
+
5
+ def initialize
6
+ self.scopes = {}
7
+ end
8
+
9
+ def scope(name)
10
+ self.scopes ||= {}
11
+ self.scopes[name] ||= Scope.new(name)
12
+ end
13
+
14
+ def setup(&block)
15
+ Dsl.new(self, &block)
16
+ end
17
+
18
+ def load(*args)
19
+ scope_names = [ args ].flatten
20
+ scope_names.each do |scope_name|
21
+ self.scope(scope_name).load
22
+ end
23
+ end
24
+
25
+ def require(*args)
26
+ scope_names = [ args ].flatten
27
+ self.load(scope_names)
28
+
29
+ scope_names.each do |scope_name|
30
+ self.scope(scope_name).require
31
+ end
32
+ 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
+ end
47
+ end
@@ -0,0 +1,42 @@
1
+ module GemLoader
2
+ class Gem
3
+ attr_accessor :name, :version, :options, :requires
4
+
5
+ def initialize(name, version = nil, options = {})
6
+ self.name = name.to_s
7
+ self.version = version
8
+ self.options = options || {}
9
+ end
10
+
11
+ def load
12
+ if self.version
13
+ Kernel.send :gem, self.name, self.version
14
+ else
15
+ Kernel.send :gem, self.name
16
+ end
17
+ end
18
+
19
+ def require
20
+ if self.options.include?(:require)
21
+ [ self.options[:require] ].flatten.compact.each do |lib|
22
+ Kernel.send :require, lib.to_s
23
+ end
24
+ else
25
+ Kernel.send :require, self.name
26
+ end
27
+ end
28
+
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
+ end
42
+ end
@@ -0,0 +1,56 @@
1
+ module GemLoader
2
+ class Scope
3
+ attr_accessor :name, :gems, :libs
4
+
5
+ def initialize(name)
6
+ self.name = name
7
+ self.gems = []
8
+ self.libs = []
9
+ end
10
+
11
+ def load
12
+ self.gems.each do |gem|
13
+ gem.load
14
+ end
15
+ end
16
+
17
+ def require
18
+ self.gems.each do |gem|
19
+ gem.require
20
+ end
21
+
22
+ self.libs.flatten.each do |lib|
23
+ Kernel.send :require, lib.to_s
24
+ end
25
+ end
26
+
27
+ def gem(name, version, options)
28
+ (self.gems ||= []) << Gem.new(name, version, options)
29
+ self.gems.last
30
+ end
31
+
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
55
+ end
56
+ end
@@ -0,0 +1,7 @@
1
+ require "spec_helper"
2
+
3
+ describe "GemLoader" do
4
+ it "should be setup test environment successful" do
5
+ defined?(::GemLoader).should_not be_nil
6
+ end
7
+ end
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,6 @@
1
+ require File.expand_path("../../depends.rb", __FILE__)
2
+ require "gem_loader"
3
+
4
+ GemLoader.require :test
5
+
6
+
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gem_loader
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 2
9
+ version: 0.0.2
10
+ platform: ruby
11
+ authors:
12
+ - Sunteya
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-03-26 00:00:00 +08:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description:
22
+ email: Sunteya@gmail.com
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files:
28
+ - README
29
+ files:
30
+ - .gitignore
31
+ - README
32
+ - Rakefile
33
+ - VERSION
34
+ - depends.rb
35
+ - gem_loader.gemspec
36
+ - lib/gem_loader.rb
37
+ - lib/gem_loader/base.rb
38
+ - lib/gem_loader/gem.rb
39
+ - lib/gem_loader/scope.rb
40
+ - spec/lib/gem_loader_spec.rb
41
+ - spec/spec.opts
42
+ - spec/spec_helper.rb
43
+ has_rdoc: true
44
+ homepage: http://github.com/sunteya/gem_loader
45
+ licenses: []
46
+
47
+ post_install_message:
48
+ rdoc_options:
49
+ - --charset=UTF-8
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ requirements: []
67
+
68
+ rubyforge_project:
69
+ rubygems_version: 1.3.6
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: a tiny gem's dependencies loader.
73
+ test_files:
74
+ - spec/lib/gem_loader_spec.rb
75
+ - spec/spec_helper.rb