jewel 0.0.1

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.
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ *.lock
2
+ doc/
3
+ .yardoc/
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm --create 1.9.3@jewel
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source :rubygems
2
+
3
+ gemspec
4
+
5
+ { rookie: '~/projects/rookie' }.each do |project, path|
6
+ path = File.expand_path path
7
+ gem project.to_s, path: path if Dir.exists? path
8
+ end
data/LICENSE.MPL2 ADDED
@@ -0,0 +1,3 @@
1
+ This Source Code Form is subject to the terms of the Mozilla Public
2
+ License, v. 2.0. If a copy of the MPL was not distributed with this file,
3
+ You can obtain one at http://mozilla.org/MPL/2.0/.
data/README.markdown ADDED
@@ -0,0 +1,3 @@
1
+ # Jewel
2
+
3
+ Centralize access to Gem information.
data/Rakefile ADDED
@@ -0,0 +1,3 @@
1
+ require 'rookie'
2
+
3
+ Rookie::Tasks.new('jewel.gemspec').define_tasks!
data/jewel.gemspec ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env gem build
2
+ # encoding: utf-8
3
+ $:.unshift File.expand_path('../lib', __FILE__)
4
+
5
+ require 'jewel'
6
+
7
+ Jewel::Gem.spec
data/lib/jewel.rb ADDED
@@ -0,0 +1,8 @@
1
+ # Provides easy access to Gem metadata in an object oriented fashion.
2
+ #
3
+ # @author Matheus Afonso Martins Moreira
4
+ # @since 0.0.1
5
+ module Jewel
6
+ end
7
+
8
+ require 'jewel/gem'
data/lib/jewel/gem.rb ADDED
@@ -0,0 +1,104 @@
1
+ require 'jewel/gem/metadata'
2
+
3
+ module Jewel
4
+
5
+ # The centralized spot for information about a gem.
6
+ #
7
+ # @author Matheus Afonso Martins Moreira
8
+ # @since 0.0.1
9
+ class Gem
10
+ end
11
+
12
+ end
13
+
14
+ class << Jewel::Gem
15
+
16
+ # The gem metadata.
17
+ #
18
+ # @return [Jewel::Gem::Metadata] this gem's metadata
19
+ def metadata
20
+ @metadata ||= Jewel::Gem::Metadata.new
21
+ end
22
+
23
+ # Forwards everything to this Gem's metadata.
24
+ def method_missing(method_name, *arguments, &block)
25
+ metadata.send method_name, *arguments, &block
26
+ end
27
+
28
+ # Sets the name of the gem.
29
+ #
30
+ # @param [String, Symbol, #to_s] name the name of the library
31
+ # @return [String]
32
+ def name!(name = nil)
33
+ arguments = [ name ].compact.map &:to_s
34
+ metadata.send :name, *arguments
35
+ end
36
+
37
+ # Adds a runtime dependency.
38
+ #
39
+ # If called within a {development} context, a development dependency will be
40
+ # added instead.
41
+ #
42
+ # @param [String, Symbol] gem the name of the gem
43
+ # @param [String] version the version of the gem
44
+ def depend_on(gem, version = nil)
45
+ metadata.send(if development?
46
+ :development_dependencies
47
+ else :dependencies end).merge! gem => version
48
+ end
49
+
50
+ # Executes the given block within a development context, turning runtime
51
+ # dependencies into development dependencies.
52
+ #
53
+ # @yield nothing
54
+ # @see depend_on
55
+ def development(&block)
56
+ @development = true
57
+ instance_eval &block
58
+ ensure
59
+ @development = false
60
+ end
61
+
62
+ # Returns this gem's specification.
63
+ #
64
+ # @return [Gem::Specification] the gem specification
65
+ # @see Jewel::Gem::Metadata.to_spec
66
+ def spec
67
+ metadata.to_spec
68
+ end
69
+
70
+ alias gemspec spec
71
+ alias to_spec spec
72
+
73
+ private
74
+
75
+ # Whether we are in a development context.
76
+ #
77
+ # @return [true, false] whether development mode is enabled
78
+ # @see development
79
+ def development?
80
+ !!@development
81
+ end
82
+
83
+ end
84
+
85
+ class Jewel::Gem
86
+
87
+ name! 'jewel'
88
+ summary 'Easy access to Gem metadata'
89
+ version '0.0.1'
90
+ homepage 'https://github.com/matheusmoreira/jewel'
91
+
92
+ author 'Matheus Afonso Martins Moreira'
93
+ email 'matheus.a.m.moreira@gmail.com'
94
+
95
+ files `git ls-files`.split "\n"
96
+
97
+ development do
98
+ depend_on :bundler
99
+ depend_on :redcarpet # yard uses it for markdown formatting
100
+ depend_on :rookie
101
+ depend_on :yard
102
+ end
103
+
104
+ end
@@ -0,0 +1,86 @@
1
+ module Jewel
2
+ class Gem
3
+
4
+ # Stores Ruby gem metadata.
5
+ #
6
+ # @author Matheus Afonso Martins Moreira
7
+ # @since 0.0.1
8
+ class Metadata
9
+
10
+ # Creates a new, empty set of gem metadata.
11
+ #
12
+ # If given a block, it will be evaluated in the context of the new
13
+ # instance.
14
+ #
15
+ # @param [Proc] block the initializer block
16
+ # @since 0.0.1
17
+ def initialize(&block)
18
+ instance_eval &block unless block.nil?
19
+ end
20
+
21
+ # Associates the name of the missing method with the given arguments.
22
+ #
23
+ # @since 0.0.1
24
+ def method_missing(method_name, *arguments, &block)
25
+ method = method_name.to_s.gsub(/[=?!\z]/ix, '').strip.intern
26
+ count = arguments.count
27
+ return stored_attributes[method] if count.zero?
28
+ value = count == 1 ? arguments.first : arguments
29
+ stored_attributes[method] = value
30
+ end
31
+
32
+ # This gem's runtime dependencies.
33
+ #
34
+ # @return [Hash] name => version pairs
35
+ # @since 0.0.1
36
+ def dependencies
37
+ @dependencies ||= {}
38
+ end
39
+
40
+ # This gem's development dependencies.
41
+ #
42
+ # @return [Hash] name => version pairs
43
+ # @since 0.0.1
44
+ def development_dependencies
45
+ @development_dependencies ||= {}
46
+ end
47
+
48
+ # Use the stored information to generate a Gem::Specification.
49
+ #
50
+ # @return [Gem::Specification] the specification
51
+ # @since 0.0.1
52
+ def to_spec
53
+ ::Gem::Specification.new do |gem_specification|
54
+
55
+ # Set all attributes
56
+ stored_attributes.keys.each do |key|
57
+ writer = '='.prepend key.to_s
58
+ gem_specification.send writer, stored_attributes[key] if gem_specification.respond_to? writer
59
+ end
60
+
61
+ # Add the dependencies
62
+ {
63
+ :add_runtime_dependency => dependencies,
64
+ :add_development_dependency => development_dependencies
65
+ }.each do |method_name, dependencies|
66
+ dependencies.each do |gem_name, version|
67
+ gem_specification.send method_name.intern, gem_name.to_s, version
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ private
74
+
75
+ # The stored gem attributes.
76
+ #
77
+ # @return [Hash] hash holding information about the gem
78
+ # @since 0.0.1
79
+ def stored_attributes
80
+ @stored_attributes ||= {}
81
+ end
82
+
83
+ end
84
+
85
+ end
86
+ end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jewel
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Matheus Afonso Martins Moreira
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: redcarpet
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rookie
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: yard
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description:
79
+ email: matheus.a.m.moreira@gmail.com
80
+ executables: []
81
+ extensions: []
82
+ extra_rdoc_files: []
83
+ files:
84
+ - .gitignore
85
+ - .rvmrc
86
+ - Gemfile
87
+ - LICENSE.MPL2
88
+ - README.markdown
89
+ - Rakefile
90
+ - jewel.gemspec
91
+ - lib/jewel.rb
92
+ - lib/jewel/gem.rb
93
+ - lib/jewel/gem/metadata.rb
94
+ homepage: https://github.com/matheusmoreira/jewel
95
+ licenses: []
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ! '>='
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ segments:
107
+ - 0
108
+ hash: 2841041591828843644
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ! '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ segments:
116
+ - 0
117
+ hash: 2841041591828843644
118
+ requirements: []
119
+ rubyforge_project:
120
+ rubygems_version: 1.8.24
121
+ signing_key:
122
+ specification_version: 3
123
+ summary: Easy access to Gem metadata
124
+ test_files: []