cat 0.1.2 → 0.2.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.
- data/.travis.yml +10 -0
- data/README.rdoc +62 -1
- data/Rakefile +6 -6
- data/VERSION +1 -1
- data/cat.gemspec +3 -2
- data/lib/sandbox.rb +6 -4
- data/spec/cat_spec.rb +6 -6
- metadata +4 -3
data/.travis.yml
ADDED
data/README.rdoc
CHANGED
@@ -1,6 +1,67 @@
|
|
1
1
|
= cat
|
2
2
|
|
3
|
-
|
3
|
+
Create objects in a sandbox
|
4
|
+
|
5
|
+
This project grew out of a project where I needed to create complicated object definitions and didn't
|
6
|
+
want to write it out in classic ruby syntax (clunky and fragile). So, this gem lets you easily generate
|
7
|
+
classes inside a sandbox and clean it out the namespace between tests.
|
8
|
+
|
9
|
+
{<img src="https://secure.travis-ci.org/arches/cat.png?branch=master" alt="Build Status" />}[http://travis-ci.org/arches/cat]
|
10
|
+
|
11
|
+
== Installation
|
12
|
+
|
13
|
+
gem install cat
|
14
|
+
|
15
|
+
== Usage
|
16
|
+
|
17
|
+
require 'cat'
|
18
|
+
|
19
|
+
=== Creating classes
|
20
|
+
|
21
|
+
Add a single class
|
22
|
+
|
23
|
+
> Sandbox.add_class("Foo")
|
24
|
+
> Sandbox::Foo.new
|
25
|
+
=> #<Sandbox::Foo:0x007ff5a2829930>
|
26
|
+
|
27
|
+
Add a subclass
|
28
|
+
|
29
|
+
> Sandbox.add_class("Foo::Bar")
|
30
|
+
> Sandbox::Foo::Bar.new
|
31
|
+
=> #<Sandbox::Foo::Bar:0x007ff5a281f098>
|
32
|
+
|
33
|
+
Add some attributes to a class
|
34
|
+
|
35
|
+
> Sandbox.add_attributes("Foo::Bar", "id", :title)
|
36
|
+
> fb = Sandbox::Foo::Bar.new(id: 10, title: "I like chicken") # it adds an initialize method for you too
|
37
|
+
> fb.id
|
38
|
+
=> 10
|
39
|
+
> fb.title
|
40
|
+
=> "I like chicken"
|
41
|
+
|
42
|
+
Add a method to a class
|
43
|
+
|
44
|
+
> Sandbox.add_method("Foo::Bar", :food, lambda{"I like liver"})
|
45
|
+
> fb = Sandbox::Foo::Bar.new
|
46
|
+
> fb.food
|
47
|
+
=> "I like liver"
|
48
|
+
|
49
|
+
Or do it with a block
|
50
|
+
|
51
|
+
> Sandbox.add_method("Foo::Bar", :food) {"Meow mix meow mix"}
|
52
|
+
> fb = Sandbox::Foo::Bar.new
|
53
|
+
> fb.food
|
54
|
+
=> "Meow mix meow mix"
|
55
|
+
|
56
|
+
Class methods work the same way
|
57
|
+
|
58
|
+
> Sandbox.add_class_method("Foo::Bar", :babar, lambda{"king of elephants"})
|
59
|
+
> Sandbox::Foo::Bar.babar
|
60
|
+
=> "king of elephants"
|
61
|
+
|
62
|
+
When you've cluttered your namespace beyond repair, just delete it all
|
63
|
+
|
64
|
+
> Sandbox.cleanup! # or of course, use the alias Sandbox.scoop! :)
|
4
65
|
|
5
66
|
== Contributing to cat
|
6
67
|
|
data/Rakefile
CHANGED
@@ -25,14 +25,14 @@ Jeweler::Tasks.new do |gem|
|
|
25
25
|
end
|
26
26
|
Jeweler::RubygemsDotOrgTasks.new
|
27
27
|
|
28
|
-
require '
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
test.verbose = true
|
28
|
+
require 'rspec/core/rake_task'
|
29
|
+
|
30
|
+
desc "Run specs"
|
31
|
+
RSpec::Core::RakeTask.new do |t|
|
33
32
|
end
|
34
33
|
|
35
|
-
|
34
|
+
|
35
|
+
task :default => :spec
|
36
36
|
|
37
37
|
require 'rdoc/task'
|
38
38
|
Rake::RDocTask.new do |rdoc|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/cat.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "cat"
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Chris Doyle"]
|
12
|
-
s.date = "2012-04-
|
12
|
+
s.date = "2012-04-27"
|
13
13
|
s.description = "Create objects in a sandbox"
|
14
14
|
s.email = "archslide@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
21
|
".rvmrc",
|
22
|
+
".travis.yml",
|
22
23
|
"Gemfile",
|
23
24
|
"Gemfile.lock",
|
24
25
|
"LICENSE.txt",
|
data/lib/sandbox.rb
CHANGED
@@ -13,9 +13,11 @@ module Sandbox
|
|
13
13
|
attr_accessor *attrs
|
14
14
|
|
15
15
|
# set up the 'initialize' method to assign the attributes
|
16
|
-
define_method(:initialize) do
|
17
|
-
|
18
|
-
|
16
|
+
define_method(:initialize) do |*value_hash|
|
17
|
+
value_hash = value_hash.first
|
18
|
+
value_hash ||= {}
|
19
|
+
value_hash.each do |k, v|
|
20
|
+
instance_variable_set("@#{k.to_s}", v)
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
@@ -50,7 +52,7 @@ module Sandbox
|
|
50
52
|
def self.const_set_from_string(delimited_klasses)
|
51
53
|
# try to const_get before set const_set to avoid "already initialized" warnings
|
52
54
|
delimited_klasses.split("::").inject(self) do |const, klass|
|
53
|
-
const.constants.include?(klass.
|
55
|
+
const.constants.collect(&:to_s).include?(klass.to_s) ? const.const_get(klass) : const.const_set(klass, Class.new)
|
54
56
|
end
|
55
57
|
|
56
58
|
@@created_classes << delimited_klasses.split("::").first
|
data/spec/cat_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require 'sandbox'
|
2
2
|
|
3
3
|
describe Sandbox do
|
4
4
|
|
@@ -12,7 +12,7 @@ describe Sandbox do
|
|
12
12
|
Sandbox.add_class("Foo")
|
13
13
|
constants = Sandbox.created_classes
|
14
14
|
Sandbox.cleanup!
|
15
|
-
Sandbox.created_classes.should == ["Foo"]
|
15
|
+
Sandbox.created_classes.collect(&:to_s).should == ["Foo"]
|
16
16
|
constants.each do |const|
|
17
17
|
Sandbox.constants.should_not include(const)
|
18
18
|
end
|
@@ -22,14 +22,14 @@ describe Sandbox do
|
|
22
22
|
describe "#add_class" do
|
23
23
|
it "creates a class namedspaced under Sandbox" do
|
24
24
|
Sandbox.add_class("Foo")
|
25
|
-
Sandbox.constants.should include(
|
25
|
+
Sandbox.constants.collect(&:to_s).should include("Foo")
|
26
26
|
end
|
27
27
|
|
28
28
|
describe "when you pass a double-colon delimited string" do
|
29
29
|
it "creates nested subclasses" do
|
30
30
|
Sandbox.add_class("Bar::Wood")
|
31
|
-
Sandbox.constants.should include(
|
32
|
-
Sandbox::Bar.constants.should include(
|
31
|
+
Sandbox.constants.collect(&:to_s).should include("Bar")
|
32
|
+
Sandbox::Bar.constants.collect(&:to_s).should include("Wood")
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -49,7 +49,7 @@ describe Sandbox do
|
|
49
49
|
it "adds an initialize method to set attributes with a hash" do
|
50
50
|
Sandbox.add_class("Soap::Ivory::Powdered")
|
51
51
|
Sandbox.add_attributes("Soap::Ivory", "id", :title)
|
52
|
-
ivory = Sandbox::Soap::Ivory.new(id
|
52
|
+
ivory = Sandbox::Soap::Ivory.new(:id => 10, :title => "Toweling off")
|
53
53
|
|
54
54
|
ivory.id.should == 10
|
55
55
|
ivory.title.should == "Toweling off"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -85,6 +85,7 @@ extra_rdoc_files:
|
|
85
85
|
files:
|
86
86
|
- .document
|
87
87
|
- .rvmrc
|
88
|
+
- .travis.yml
|
88
89
|
- Gemfile
|
89
90
|
- Gemfile.lock
|
90
91
|
- LICENSE.txt
|
@@ -110,7 +111,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
110
111
|
version: '0'
|
111
112
|
segments:
|
112
113
|
- 0
|
113
|
-
hash:
|
114
|
+
hash: 1185247395237564071
|
114
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
116
|
none: false
|
116
117
|
requirements:
|