obsidian 0.0.4 → 0.0.5
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/History.txt +4 -0
- data/Manifest.txt +4 -0
- data/Rakefile +2 -10
- data/lib/obsidian.rb +1 -1
- data/lib/obsidian/extensions/object.rb +31 -0
- data/lib/obsidian/extensions/try.rb +16 -0
- data/obsidian.gemspec +12 -10
- data/test/test_helper.rb +1 -2
- data/test/units/obsidian/object_extensions_test.rb +29 -0
- data/test/units/obsidian/spec_test.rb +2 -2
- data/test/units/obsidian/try_test.rb +13 -0
- metadata +15 -5
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -5,6 +5,8 @@ README.rdoc
|
|
5
5
|
README.txt
|
6
6
|
Rakefile
|
7
7
|
lib/obsidian.rb
|
8
|
+
lib/obsidian/extensions/object.rb
|
9
|
+
lib/obsidian/extensions/try.rb
|
8
10
|
lib/obsidian/rails/helper_test.rb
|
9
11
|
lib/obsidian/rails/model_update_tracker.rb
|
10
12
|
lib/obsidian/spec.rb
|
@@ -13,7 +15,9 @@ lib/obsidian/spec/set_spec_helper.rb
|
|
13
15
|
obsidian.gemspec
|
14
16
|
test/obsidian_test.rb
|
15
17
|
test/test_helper.rb
|
18
|
+
test/units/obsidian/object_extensions_test.rb
|
16
19
|
test/units/obsidian/rails/model_update_tracker_test.rb
|
17
20
|
test/units/obsidian/spec/map_spec_helper_test.rb
|
18
21
|
test/units/obsidian/spec/set_spec_helper_test.rb
|
19
22
|
test/units/obsidian/spec_test.rb
|
23
|
+
test/units/obsidian/try_test.rb
|
data/Rakefile
CHANGED
@@ -5,9 +5,6 @@ require 'rake/rdoctask'
|
|
5
5
|
require 'hoe'
|
6
6
|
require 'lib/obsidian'
|
7
7
|
|
8
|
-
desc 'Default: run unit tests.'
|
9
|
-
task :default => :test
|
10
|
-
|
11
8
|
hoe = Hoe.new('obsidian', Obsidian::VERSION) do |p|
|
12
9
|
p.rubyforge_name = "thinkrelevance"
|
13
10
|
p.description = "It's metastable"
|
@@ -18,6 +15,7 @@ hoe = Hoe.new('obsidian', Obsidian::VERSION) do |p|
|
|
18
15
|
p.email = "opensource@thinkrelevance.com"
|
19
16
|
p.url = "http://opensource.thinkrelevance.com"
|
20
17
|
p.rdoc_pattern = /^(lib|bin|ext)|txt|rdoc$/
|
18
|
+
p.test_globs = "test/**/*_test.rb"
|
21
19
|
end
|
22
20
|
|
23
21
|
# Override RDoc to use allison template, and also use our .rdoc README as the main page instead of the default README.txt
|
@@ -35,13 +33,6 @@ Rake::RDocTask.new(:docs) do |rd|
|
|
35
33
|
title = "#{hoe.rubyforge_name}'s " + title if hoe.rubyforge_name != hoe.name
|
36
34
|
end
|
37
35
|
|
38
|
-
desc 'Test obsidian.'
|
39
|
-
Rake::TestTask.new(:test) do |t|
|
40
|
-
t.libs << 'lib'
|
41
|
-
t.pattern = 'test/**/*_test.rb'
|
42
|
-
t.verbose = true
|
43
|
-
end
|
44
|
-
|
45
36
|
begin
|
46
37
|
require 'rcov'
|
47
38
|
require "rcov/rcovtask"
|
@@ -72,3 +63,4 @@ rescue LoadError
|
|
72
63
|
puts 'sudo gem install rcov # if you want the rcov tasks'
|
73
64
|
end
|
74
65
|
end
|
66
|
+
|
data/lib/obsidian.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
# Metaclass goodness thanks to why:
|
2
|
+
# see: http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html
|
3
|
+
module Obsidian
|
4
|
+
module Extensions
|
5
|
+
module Object
|
6
|
+
# The hidden singleton lurks behind everyone
|
7
|
+
def metaclass
|
8
|
+
class << self
|
9
|
+
self
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def meta_eval &blk
|
14
|
+
metaclass.instance_eval &blk
|
15
|
+
end
|
16
|
+
|
17
|
+
# Adds methods to a metaclass
|
18
|
+
def meta_def name, &blk
|
19
|
+
meta_eval { define_method name, &blk }
|
20
|
+
end
|
21
|
+
|
22
|
+
# Defines an instance method within a class
|
23
|
+
def class_def name, &blk
|
24
|
+
class_eval { define_method name, &blk }
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
Object.class_eval { include Obsidian::Extensions::Object }
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Obsidian
|
2
|
+
module Extensions
|
3
|
+
module Try
|
4
|
+
# Instead of
|
5
|
+
# @person ? @person.name : nil
|
6
|
+
# Use try:
|
7
|
+
# @person.try(:name)
|
8
|
+
def try(method)
|
9
|
+
send method if respond_to? method
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
Object.class_eval { include Obsidian::Extensions::Try }
|
data/obsidian.gemspec
CHANGED
@@ -1,34 +1,36 @@
|
|
1
|
-
(in /Users/rsanheim/src/relevance/
|
1
|
+
(in /Users/rsanheim/src/relevance/obsidian)
|
2
|
+
# -*- encoding: utf-8 -*-
|
3
|
+
|
2
4
|
Gem::Specification.new do |s|
|
3
5
|
s.name = %q{obsidian}
|
4
|
-
s.version = "0.0.
|
6
|
+
s.version = "0.0.5"
|
5
7
|
|
6
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
7
9
|
s.authors = ["Relevance"]
|
8
|
-
s.date = %q{2008-
|
10
|
+
s.date = %q{2008-10-30}
|
9
11
|
s.description = %q{It's metastable}
|
10
12
|
s.email = %q{opensource@thinkrelevance.com}
|
11
13
|
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
|
12
|
-
s.files = ["History.txt", "LICENSE", "Manifest.txt", "README.rdoc", "README.txt", "Rakefile", "lib/obsidian.rb", "lib/obsidian/rails/helper_test.rb", "lib/obsidian/rails/model_update_tracker.rb", "lib/obsidian/spec.rb", "lib/obsidian/spec/map_spec_helper.rb", "lib/obsidian/spec/set_spec_helper.rb", "test/obsidian_test.rb", "test/test_helper.rb", "test/units/obsidian/rails/model_update_tracker_test.rb", "test/units/obsidian/spec/map_spec_helper_test.rb", "test/units/obsidian/spec/set_spec_helper_test.rb", "test/units/obsidian/spec_test.rb"]
|
14
|
+
s.files = ["History.txt", "LICENSE", "Manifest.txt", "README.rdoc", "README.txt", "Rakefile", "lib/obsidian.rb", "lib/obsidian/rails/helper_test.rb", "lib/obsidian/rails/model_update_tracker.rb", "lib/obsidian/spec.rb", "lib/obsidian/spec/map_spec_helper.rb", "lib/obsidian/spec/set_spec_helper.rb", "obsidian.gemspec", "test/obsidian_test.rb", "test/test_helper.rb", "test/units/obsidian/rails/model_update_tracker_test.rb", "test/units/obsidian/spec/map_spec_helper_test.rb", "test/units/obsidian/spec/set_spec_helper_test.rb", "test/units/obsidian/spec_test.rb", "test/units/obsidian/object_extensions_test.rb", "test/units/obsidian/try_test.rb"]
|
13
15
|
s.has_rdoc = true
|
14
16
|
s.homepage = %q{http://opensource.thinkrelevance.com}
|
15
17
|
s.rdoc_options = ["--main", "README.txt"]
|
16
18
|
s.require_paths = ["lib"]
|
17
19
|
s.rubyforge_project = %q{thinkrelevance}
|
18
|
-
s.rubygems_version = %q{1.
|
20
|
+
s.rubygems_version = %q{1.3.0}
|
19
21
|
s.summary = %q{It's metastable}
|
20
|
-
s.test_files = ["test/
|
22
|
+
s.test_files = ["test/obsidian_test.rb", "test/units/obsidian/object_extensions_test.rb", "test/units/obsidian/rails/model_update_tracker_test.rb", "test/units/obsidian/spec/map_spec_helper_test.rb", "test/units/obsidian/spec/set_spec_helper_test.rb", "test/units/obsidian/spec_test.rb", "test/units/obsidian/try_test.rb"]
|
21
23
|
|
22
24
|
if s.respond_to? :specification_version then
|
23
25
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
26
|
s.specification_version = 2
|
25
27
|
|
26
|
-
if
|
27
|
-
s.add_development_dependency(%q<hoe>, [">= 1.
|
28
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
29
|
+
s.add_development_dependency(%q<hoe>, [">= 1.8.1"])
|
28
30
|
else
|
29
|
-
s.add_dependency(%q<hoe>, [">= 1.
|
31
|
+
s.add_dependency(%q<hoe>, [">= 1.8.1"])
|
30
32
|
end
|
31
33
|
else
|
32
|
-
s.add_dependency(%q<hoe>, [">= 1.
|
34
|
+
s.add_dependency(%q<hoe>, [">= 1.8.1"])
|
33
35
|
end
|
34
36
|
end
|
data/test/test_helper.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "../..", "test_helper.rb")
|
2
|
+
require 'obsidian/extensions/object'
|
3
|
+
|
4
|
+
describe "object extensions" do
|
5
|
+
it "should get metaclass" do
|
6
|
+
obj = Object.new
|
7
|
+
metaklass = (class << obj; self; end;)
|
8
|
+
obj.metaclass.should == metaklass
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should be able to add methods to the meta class" do
|
12
|
+
obj = Object.new
|
13
|
+
obj.meta_def(:speak) { "bark!" }
|
14
|
+
obj.should.respond_to :speak
|
15
|
+
|
16
|
+
another_obj = Object.new
|
17
|
+
another_obj.should.not.respond_to :speak
|
18
|
+
end
|
19
|
+
|
20
|
+
class Foo; end
|
21
|
+
|
22
|
+
it "should be able to define instance methods from the class" do
|
23
|
+
Foo.class_def(:hi) { "hello!" }
|
24
|
+
Foo.new.hi.should == "hello!"
|
25
|
+
Foo.should.not.respond_to :hi
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
end
|
@@ -26,7 +26,7 @@ describe "Obsidian::Spec find_calling_line" do
|
|
26
26
|
it "can parse a stack trace to find the caller of a method" do
|
27
27
|
file, line_no = nest_1("nest_1")
|
28
28
|
file.should.match %r{spec_test.rb$}
|
29
|
-
line_no.should.match
|
29
|
+
line_no.should.match(/^\d+$/)
|
30
30
|
end
|
31
31
|
it "returns nil if a method does not exist" do
|
32
32
|
file, line_no = nest_1("not_a_real_method_name")
|
@@ -43,7 +43,7 @@ describe "Obsidian::Spec read_calling_line" do
|
|
43
43
|
nest_2(name)
|
44
44
|
end
|
45
45
|
it "can parse a stack trace to find the caller of a method" do
|
46
|
-
nest_1("nest_1").should.match
|
46
|
+
nest_1("nest_1").should.match(/nest_1\("nest_1"\)/)
|
47
47
|
end
|
48
48
|
it "returns nil if a method does not exist" do
|
49
49
|
nest_1("not_a_real_method_name").should.be nil
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "../..", "test_helper.rb")
|
2
|
+
require 'obsidian/extensions/try'
|
3
|
+
|
4
|
+
describe "try object extension" do
|
5
|
+
|
6
|
+
it "is equivalent to @foo ? @foo.meth : nil" do
|
7
|
+
["my string", Array.new, nil].each do |val|
|
8
|
+
@foo = val
|
9
|
+
@foo.try(:length).should == (@foo ? @foo.length : nil)
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: obsidian
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Relevance
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-10-30 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 1.
|
23
|
+
version: 1.8.1
|
24
24
|
version:
|
25
25
|
description: It's metastable
|
26
26
|
email: opensource@thinkrelevance.com
|
@@ -40,6 +40,8 @@ files:
|
|
40
40
|
- README.txt
|
41
41
|
- Rakefile
|
42
42
|
- lib/obsidian.rb
|
43
|
+
- lib/obsidian/extensions/object.rb
|
44
|
+
- lib/obsidian/extensions/try.rb
|
43
45
|
- lib/obsidian/rails/helper_test.rb
|
44
46
|
- lib/obsidian/rails/model_update_tracker.rb
|
45
47
|
- lib/obsidian/spec.rb
|
@@ -48,10 +50,12 @@ files:
|
|
48
50
|
- obsidian.gemspec
|
49
51
|
- test/obsidian_test.rb
|
50
52
|
- test/test_helper.rb
|
53
|
+
- test/units/obsidian/object_extensions_test.rb
|
51
54
|
- test/units/obsidian/rails/model_update_tracker_test.rb
|
52
55
|
- test/units/obsidian/spec/map_spec_helper_test.rb
|
53
56
|
- test/units/obsidian/spec/set_spec_helper_test.rb
|
54
57
|
- test/units/obsidian/spec_test.rb
|
58
|
+
- test/units/obsidian/try_test.rb
|
55
59
|
has_rdoc: true
|
56
60
|
homepage: http://opensource.thinkrelevance.com
|
57
61
|
post_install_message:
|
@@ -75,9 +79,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
79
|
requirements: []
|
76
80
|
|
77
81
|
rubyforge_project: thinkrelevance
|
78
|
-
rubygems_version: 1.
|
82
|
+
rubygems_version: 1.3.0
|
79
83
|
signing_key:
|
80
84
|
specification_version: 2
|
81
85
|
summary: It's metastable
|
82
86
|
test_files:
|
83
|
-
- test/
|
87
|
+
- test/obsidian_test.rb
|
88
|
+
- test/units/obsidian/object_extensions_test.rb
|
89
|
+
- test/units/obsidian/rails/model_update_tracker_test.rb
|
90
|
+
- test/units/obsidian/spec/map_spec_helper_test.rb
|
91
|
+
- test/units/obsidian/spec/set_spec_helper_test.rb
|
92
|
+
- test/units/obsidian/spec_test.rb
|
93
|
+
- test/units/obsidian/try_test.rb
|