ore-core 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +4 -0
- data/.rspec +1 -0
- data/.yardopts +1 -0
- data/ChangeLog.md +17 -0
- data/GemspecYML.md +284 -0
- data/LICENSE.txt +21 -0
- data/README.md +68 -0
- data/Rakefile +25 -0
- data/gemspec.yml +18 -0
- data/lib/ore.rb +3 -0
- data/lib/ore/checks.rb +88 -0
- data/lib/ore/defaults.rb +140 -0
- data/lib/ore/dependency.rb +65 -0
- data/lib/ore/document_file.rb +118 -0
- data/lib/ore/exceptions.rb +3 -0
- data/lib/ore/exceptions/exception.rb +4 -0
- data/lib/ore/exceptions/invalid_metadata.rb +6 -0
- data/lib/ore/exceptions/project_not_found.rb +6 -0
- data/lib/ore/naming.rb +113 -0
- data/lib/ore/paths.rb +146 -0
- data/lib/ore/project.rb +599 -0
- data/lib/ore/settings.rb +274 -0
- data/lib/ore/specification.rb +29 -0
- data/lib/ore/versions.rb +3 -0
- data/lib/ore/versions/exceptions.rb +1 -0
- data/lib/ore/versions/exceptions/invalid_version.rb +8 -0
- data/lib/ore/versions/version.rb +75 -0
- data/lib/ore/versions/version_constant.rb +126 -0
- data/lib/ore/versions/version_file.rb +66 -0
- data/lib/rubygems_plugin.rb +40 -0
- data/ore-core.gemspec +6 -0
- data/spec/dependency_spec.rb +36 -0
- data/spec/document_file_spec.rb +29 -0
- data/spec/helpers/files.rb +7 -0
- data/spec/helpers/files/.document +5 -0
- data/spec/helpers/files/VERSION +1 -0
- data/spec/helpers/files/VERSION.yml +5 -0
- data/spec/helpers/projects.rb +13 -0
- data/spec/helpers/projects/dm-is-plugin/Gemfile +3 -0
- data/spec/helpers/projects/dm-is-plugin/VERSION +1 -0
- data/spec/helpers/projects/dm-is-plugin/dm-is-plugin.gemspec +10 -0
- data/spec/helpers/projects/dm-is-plugin/gemspec.yml +9 -0
- data/spec/helpers/projects/dm-is-plugin/lib/dm-is-plugin.rb +4 -0
- data/spec/helpers/projects/dm-is-plugin/lib/dm-is-plugin/is/plugin.rb +6 -0
- data/spec/helpers/projects/explicit/gemspec.yml +19 -0
- data/spec/helpers/projects/explicit/lib/explicit/version.rb +15 -0
- data/spec/helpers/projects/ffi-binding/gemspec.yml +11 -0
- data/spec/helpers/projects/ffi-binding/lib/ffi/binding/version.rb +5 -0
- data/spec/helpers/projects/jewelery/VERSION +1 -0
- data/spec/helpers/projects/jewelery/bin/jewelery +3 -0
- data/spec/helpers/projects/jewelery/gemspec.yml +6 -0
- data/spec/helpers/projects/jewelery/jewelery.gemspec +10 -0
- data/spec/helpers/projects/jewelery/lib/jewelery.rb +4 -0
- data/spec/helpers/projects/jewelery/lib/jewelery/rubies.rb +4 -0
- data/spec/helpers/projects/minimal/gemspec.yml +4 -0
- data/spec/helpers/projects/minimal/lib/minimal.rb +2 -0
- data/spec/naming_spec.rb +56 -0
- data/spec/projects/dm_plugin_project_spec.rb +29 -0
- data/spec/projects/explicit_project_spec.rb +37 -0
- data/spec/projects/ffi_binding_project_spec.rb +25 -0
- data/spec/projects/jeweler_project_spec.rb +17 -0
- data/spec/projects/minimal_project_spec.rb +17 -0
- data/spec/projects/project_examples.rb +40 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/versions/version_file_spec.rb +28 -0
- data/spec/versions/version_spec.rb +53 -0
- metadata +170 -0
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'ore/versions/exceptions/invalid_version'
|
2
|
+
require 'ore/versions/version'
|
3
|
+
|
4
|
+
require 'yaml'
|
5
|
+
|
6
|
+
module Ore
|
7
|
+
module Versions
|
8
|
+
#
|
9
|
+
# Represents a version loaded from a `VERSION` file.
|
10
|
+
#
|
11
|
+
class VersionFile < Version
|
12
|
+
|
13
|
+
# Common `VERSION` file-names.
|
14
|
+
@@files = %w[VERSION VERSION.yml]
|
15
|
+
|
16
|
+
#
|
17
|
+
# Finds the `VERSION` file.
|
18
|
+
#
|
19
|
+
# @param [Project] project
|
20
|
+
# The Ore project.
|
21
|
+
#
|
22
|
+
# @return [VersionFile, nil]
|
23
|
+
# The version file of the project.
|
24
|
+
#
|
25
|
+
def self.find(project)
|
26
|
+
@@files.each do |name|
|
27
|
+
return load(project.path(name)) if project.file?(name)
|
28
|
+
end
|
29
|
+
|
30
|
+
return nil
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
# Loads the version file of the project.
|
35
|
+
#
|
36
|
+
# @param [String] path
|
37
|
+
# The path to the version file.
|
38
|
+
#
|
39
|
+
# @return [VersionFile]
|
40
|
+
# The loaded version file.
|
41
|
+
#
|
42
|
+
# @raise [InvalidVersion]
|
43
|
+
# The `VERSION` file must contain either a `Hash` or a `String`.
|
44
|
+
#
|
45
|
+
def self.load(path)
|
46
|
+
data = YAML.load_file(path)
|
47
|
+
|
48
|
+
case data
|
49
|
+
when Hash
|
50
|
+
self.new(
|
51
|
+
(data[:major] || data['major']),
|
52
|
+
(data[:minor] || data['minor']),
|
53
|
+
(data[:patch] || data['patch']),
|
54
|
+
(data[:build] || data['build'])
|
55
|
+
)
|
56
|
+
when String
|
57
|
+
self.parse(data)
|
58
|
+
else
|
59
|
+
file = File.basename(@path)
|
60
|
+
raise(InvalidVersion,"invalid version data in #{file.dump}")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Ore
|
2
|
+
#
|
3
|
+
# Provides transparent access to {Ore::Specification}.
|
4
|
+
#
|
5
|
+
# @param [Symbol] name
|
6
|
+
# The constant name.
|
7
|
+
#
|
8
|
+
# @return [Object]
|
9
|
+
# The constant.
|
10
|
+
#
|
11
|
+
# @raise [NameError]
|
12
|
+
# The constant could not be found.
|
13
|
+
#
|
14
|
+
def self.const_missing(name)
|
15
|
+
if name == :Specification
|
16
|
+
begin
|
17
|
+
# attempt to load 'ore/specification' from the $LOAD_PATH
|
18
|
+
require 'ore/specification'
|
19
|
+
rescue ::LoadError
|
20
|
+
# find our `lib/` directory
|
21
|
+
lib_dir = File.expand_path(File.dirname(__FILE__))
|
22
|
+
|
23
|
+
# modify the $LOAD_PATH is 'ore/specification' is not available
|
24
|
+
$LOAD_PATH << lib_dir unless $LOAD_PATH.include?(lib_dir)
|
25
|
+
|
26
|
+
begin
|
27
|
+
# attempt loading 'ore/specification' again
|
28
|
+
require 'ore/specification'
|
29
|
+
rescue ::LoadError
|
30
|
+
# ore is probably not installed, so raise a NameError
|
31
|
+
return super(name)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
return Ore.const_get(name)
|
36
|
+
end
|
37
|
+
|
38
|
+
super(name)
|
39
|
+
end
|
40
|
+
end
|
data/ore-core.gemspec
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ore/dependency'
|
3
|
+
|
4
|
+
describe Dependency do
|
5
|
+
subject { Dependency }
|
6
|
+
|
7
|
+
describe "parse" do
|
8
|
+
it "should parse a dependency string with only a name" do
|
9
|
+
dep = subject.parse('foo')
|
10
|
+
|
11
|
+
dep.name.should == 'foo'
|
12
|
+
dep.versions.should be_empty
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should parse a dependency with a version" do
|
16
|
+
dep = subject.parse('foo ~> 1.2.3')
|
17
|
+
|
18
|
+
dep.name.should == 'foo'
|
19
|
+
dep.versions.should == ['~> 1.2.3']
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "parse_versions" do
|
24
|
+
it "should parse a single version" do
|
25
|
+
dep = subject.parse_versions('foo', '~> 1.2.3')
|
26
|
+
|
27
|
+
dep.versions.should == ['~> 1.2.3']
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should parse multiple versions" do
|
31
|
+
dep = subject.parse_versions('foo', '~> 1.2.3, >= 1.4.0')
|
32
|
+
|
33
|
+
dep.versions.should == ['~> 1.2.3', '>= 1.4.0']
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'helpers/files'
|
3
|
+
|
4
|
+
require 'ore/document_file'
|
5
|
+
|
6
|
+
describe DocumentFile do
|
7
|
+
include Helpers::Files
|
8
|
+
|
9
|
+
subject { DocumentFile.new(file('.document')) }
|
10
|
+
|
11
|
+
it "should parse the file globs from a .document file" do
|
12
|
+
subject.file_globs.to_a.should =~ %w[
|
13
|
+
lib/**/*.rb
|
14
|
+
bin/*
|
15
|
+
]
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should parse the extra-file globs from a .document file" do
|
19
|
+
subject.extra_file_globs.to_a.should =~ %w[
|
20
|
+
ChangeLog.md
|
21
|
+
COPYING.txt
|
22
|
+
]
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should not consume the - separator" do
|
26
|
+
subject.file_globs.should_not include('-')
|
27
|
+
subject.extra_file_globs.should_not include('-')
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
1.2.3
|
@@ -0,0 +1 @@
|
|
1
|
+
1.2.3
|
@@ -0,0 +1,19 @@
|
|
1
|
+
name: Explicit
|
2
|
+
summary: An explicit library
|
3
|
+
description: This is a library written by strict developers.
|
4
|
+
license: MIT
|
5
|
+
homepage: http://github.com/user/explicit
|
6
|
+
email: user@example.com
|
7
|
+
authors:
|
8
|
+
- Senior Software Engineer
|
9
|
+
- Junior Software Engineer
|
10
|
+
|
11
|
+
post_install_message: |
|
12
|
+
Thanks for installing the Explicit gem!
|
13
|
+
|
14
|
+
To start Explicit, run the following command:
|
15
|
+
|
16
|
+
$ explicit
|
17
|
+
|
18
|
+
required_ruby_version: >= 1.8.7
|
19
|
+
required_rubygems_version: >= 1.3.7
|
@@ -0,0 +1,11 @@
|
|
1
|
+
name: ffi-binding
|
2
|
+
summary: FFI Binding
|
3
|
+
description: FFI Binding for some C library
|
4
|
+
homepage: http://github.com/wmeissner/ffi-binding
|
5
|
+
email: wmeissner@example.com
|
6
|
+
authors: Wayne Meissner
|
7
|
+
|
8
|
+
requirements: libstuff >= 1.0
|
9
|
+
|
10
|
+
dependencies:
|
11
|
+
ffi: ~> 0.6.0
|
@@ -0,0 +1 @@
|
|
1
|
+
1.2.3
|
data/spec/naming_spec.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ore/naming'
|
3
|
+
|
4
|
+
describe Naming do
|
5
|
+
subject do
|
6
|
+
obj = Object.new
|
7
|
+
obj.extend Ore::Naming
|
8
|
+
obj
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "underscore" do
|
12
|
+
it "should underscore CamelCase names" do
|
13
|
+
subject.underscore('FooBar').should == 'foo_bar'
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should not add leading underscores to Capitalized names" do
|
17
|
+
subject.underscore('Foo').should == 'foo'
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should not add tailing underscores to CamelCase names" do
|
21
|
+
subject.underscore('FooX').should == 'foox'
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should not add underscores when they already exist" do
|
25
|
+
subject.underscore('Foo_Bar').should == 'foo_bar'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should guess the module names from a project name" do
|
30
|
+
subject.modules_of('foo-bar').should == ['Foo', 'Bar']
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should filter out obvious names from the module names" do
|
34
|
+
subject.modules_of('ruby-foo').should == ['Foo']
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should recognize common acronyms in project names" do
|
38
|
+
subject.modules_of('ffi-bar').should == ['FFI', 'Bar']
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should guess the namespace from a project name" do
|
42
|
+
subject.namespace_of('foo-bar').should == 'Foo::Bar'
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should guess the namespace directories from a project name" do
|
46
|
+
subject.namespace_dirs_of('foo-bar').should == ['foo', 'bar']
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should filter out namespaces that are rarely used in directory names" do
|
50
|
+
subject.namespace_dirs_of('ruby-foo').should == ['foo']
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should guess the namespace directory from a project name" do
|
54
|
+
subject.namespace_path_of('foo-bar').should == 'foo/bar'
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'helpers/projects'
|
3
|
+
require 'projects/project_examples'
|
4
|
+
|
5
|
+
describe "DataMapper Plugin project" do
|
6
|
+
include Helpers::Projects
|
7
|
+
|
8
|
+
before(:all) do
|
9
|
+
@project = project('dm-is-plugin')
|
10
|
+
end
|
11
|
+
|
12
|
+
it_should_behave_like 'an Ore Project'
|
13
|
+
|
14
|
+
it "should correctly guess the namespace" do
|
15
|
+
@project.namespace.should == 'DataMapper::Is::Plugin'
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should have a namespace directory" do
|
19
|
+
@project.namespace_dir.should == 'dm-is-plugin'
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should use Bundler" do
|
23
|
+
@project.should be_bundler
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should default the required RubyGems version to >= 1.3.6" do
|
27
|
+
@project.required_rubygems_version.should == '>= 1.3.6'
|
28
|
+
end
|
29
|
+
end
|