ore-core 0.1.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.
Files changed (67) hide show
  1. data/.document +4 -0
  2. data/.rspec +1 -0
  3. data/.yardopts +1 -0
  4. data/ChangeLog.md +17 -0
  5. data/GemspecYML.md +284 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +68 -0
  8. data/Rakefile +25 -0
  9. data/gemspec.yml +18 -0
  10. data/lib/ore.rb +3 -0
  11. data/lib/ore/checks.rb +88 -0
  12. data/lib/ore/defaults.rb +140 -0
  13. data/lib/ore/dependency.rb +65 -0
  14. data/lib/ore/document_file.rb +118 -0
  15. data/lib/ore/exceptions.rb +3 -0
  16. data/lib/ore/exceptions/exception.rb +4 -0
  17. data/lib/ore/exceptions/invalid_metadata.rb +6 -0
  18. data/lib/ore/exceptions/project_not_found.rb +6 -0
  19. data/lib/ore/naming.rb +113 -0
  20. data/lib/ore/paths.rb +146 -0
  21. data/lib/ore/project.rb +599 -0
  22. data/lib/ore/settings.rb +274 -0
  23. data/lib/ore/specification.rb +29 -0
  24. data/lib/ore/versions.rb +3 -0
  25. data/lib/ore/versions/exceptions.rb +1 -0
  26. data/lib/ore/versions/exceptions/invalid_version.rb +8 -0
  27. data/lib/ore/versions/version.rb +75 -0
  28. data/lib/ore/versions/version_constant.rb +126 -0
  29. data/lib/ore/versions/version_file.rb +66 -0
  30. data/lib/rubygems_plugin.rb +40 -0
  31. data/ore-core.gemspec +6 -0
  32. data/spec/dependency_spec.rb +36 -0
  33. data/spec/document_file_spec.rb +29 -0
  34. data/spec/helpers/files.rb +7 -0
  35. data/spec/helpers/files/.document +5 -0
  36. data/spec/helpers/files/VERSION +1 -0
  37. data/spec/helpers/files/VERSION.yml +5 -0
  38. data/spec/helpers/projects.rb +13 -0
  39. data/spec/helpers/projects/dm-is-plugin/Gemfile +3 -0
  40. data/spec/helpers/projects/dm-is-plugin/VERSION +1 -0
  41. data/spec/helpers/projects/dm-is-plugin/dm-is-plugin.gemspec +10 -0
  42. data/spec/helpers/projects/dm-is-plugin/gemspec.yml +9 -0
  43. data/spec/helpers/projects/dm-is-plugin/lib/dm-is-plugin.rb +4 -0
  44. data/spec/helpers/projects/dm-is-plugin/lib/dm-is-plugin/is/plugin.rb +6 -0
  45. data/spec/helpers/projects/explicit/gemspec.yml +19 -0
  46. data/spec/helpers/projects/explicit/lib/explicit/version.rb +15 -0
  47. data/spec/helpers/projects/ffi-binding/gemspec.yml +11 -0
  48. data/spec/helpers/projects/ffi-binding/lib/ffi/binding/version.rb +5 -0
  49. data/spec/helpers/projects/jewelery/VERSION +1 -0
  50. data/spec/helpers/projects/jewelery/bin/jewelery +3 -0
  51. data/spec/helpers/projects/jewelery/gemspec.yml +6 -0
  52. data/spec/helpers/projects/jewelery/jewelery.gemspec +10 -0
  53. data/spec/helpers/projects/jewelery/lib/jewelery.rb +4 -0
  54. data/spec/helpers/projects/jewelery/lib/jewelery/rubies.rb +4 -0
  55. data/spec/helpers/projects/minimal/gemspec.yml +4 -0
  56. data/spec/helpers/projects/minimal/lib/minimal.rb +2 -0
  57. data/spec/naming_spec.rb +56 -0
  58. data/spec/projects/dm_plugin_project_spec.rb +29 -0
  59. data/spec/projects/explicit_project_spec.rb +37 -0
  60. data/spec/projects/ffi_binding_project_spec.rb +25 -0
  61. data/spec/projects/jeweler_project_spec.rb +17 -0
  62. data/spec/projects/minimal_project_spec.rb +17 -0
  63. data/spec/projects/project_examples.rb +40 -0
  64. data/spec/spec_helper.rb +4 -0
  65. data/spec/versions/version_file_spec.rb +28 -0
  66. data/spec/versions/version_spec.rb +53 -0
  67. 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
@@ -0,0 +1,6 @@
1
+ lib_dir = File.expand_path('lib',File.dirname(__FILE__))
2
+ $LOAD_PATH << lib_dir unless $LOAD_PATH.include?(lib_dir)
3
+
4
+ require 'ore/specification'
5
+
6
+ Ore::Specification.new
@@ -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,7 @@
1
+ module Helpers
2
+ module Files
3
+ def file(name)
4
+ File.join(File.dirname(__FILE__),'files',name)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ ChangeLog.md
5
+ COPYING.txt
@@ -0,0 +1 @@
1
+ 1.2.3
@@ -0,0 +1,5 @@
1
+ ---
2
+ :major: 1
3
+ :minor: 2
4
+ :patch: 3
5
+ :build:
@@ -0,0 +1,13 @@
1
+ require 'ore/project'
2
+
3
+ module Helpers
4
+ module Projects
5
+ def project_dir(name)
6
+ File.join(File.dirname(__FILE__),'projects',name)
7
+ end
8
+
9
+ def project(name)
10
+ Ore::Project.find(project_dir(name))
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
@@ -0,0 +1,10 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ begin
4
+ Ore::Specification.new do |gemspec|
5
+ # custom logic here
6
+ end
7
+ rescue NameError
8
+ STDERR.puts "The 'dm-is-plugin.gemspec' file requires Ore."
9
+ STDERR.puts "Run `gem install ore` to install Ore."
10
+ end
@@ -0,0 +1,9 @@
1
+ name: dm-is-plugin
2
+ summary: DataMapper Plugin
3
+ description: A plugin for DataMapper
4
+ homepage: http://github.com/datamapper/dm-is-plugin
5
+ email: datamapper@googlegroups.com
6
+ authors: Dan Kubb
7
+
8
+ dependencies:
9
+ dm-core: ~> 1.0.0
@@ -0,0 +1,4 @@
1
+ require 'dm-core'
2
+ require 'dm-is-plugin/is/plugin'
3
+
4
+ DataMapper::Model.append_extensions DataMapper::Is::Plugin
@@ -0,0 +1,6 @@
1
+ module DataMapper
2
+ module Is
3
+ module Plugin
4
+ end
5
+ end
6
+ end
@@ -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,15 @@
1
+ module Explicit
2
+ module Version
3
+ MAJOR = 1
4
+
5
+ MINOR = 2
6
+
7
+ PATCH = 3
8
+
9
+ VERSION = [MAJOR, MINOR, PATCH].join('.')
10
+
11
+ def self.to_s
12
+ VERSION
13
+ end
14
+ end
15
+ end
@@ -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,5 @@
1
+ module FFI
2
+ module Binding
3
+ VERSION = '1.2.3'
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ puts 'Built with Jeweler!'
@@ -0,0 +1,6 @@
1
+ name: Jewelery
2
+ summary: A library created with Jeweler
3
+ description: This is how projects have been layed out in the past.
4
+ homepage: http://github.com/technicalpickles/jewelery
5
+ email: technicalpickles@example.com
6
+ authors: technicalpickles
@@ -0,0 +1,10 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ begin
4
+ Ore::Specification.new do |gemspec|
5
+ # custom logic here
6
+ end
7
+ rescue NameError
8
+ STDERR.puts "The 'my-project.gemspec' file requires Ore."
9
+ STDERR.puts "Run `gem install ore` to install Ore."
10
+ end
@@ -0,0 +1,4 @@
1
+ require 'jewelery/rubies'
2
+
3
+ module Jewelery
4
+ end
@@ -0,0 +1,4 @@
1
+ module Jewelery
2
+ class Rubies
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ version: 1.2.3
2
+ summary: Minimal
3
+ description: Least amount of effort
4
+ authors: me
@@ -0,0 +1,2 @@
1
+ module Minimal
2
+ end
@@ -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