gem_loader 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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