jewel 0.0.1

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