subtle 0.3.8 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc +1 -1
- data/.travis.yml +0 -1
- data/Gemfile +0 -1
- data/README.md +4 -21
- data/lib/subtle.rb +0 -1
- data/lib/subtle/array_to_objects.rb +26 -15
- data/lib/subtle/lazy_cover.rb +2 -2
- data/lib/subtle/param_constructor.rb +1 -1
- data/lib/subtle/version.rb +1 -1
- data/spec/subtle/array_to_objects_spec.rb +105 -63
- data/spec/subtle/lambda_to_object_spec.rb +3 -3
- data/spec/subtle/lazy_cover_spec.rb +7 -7
- data/spec/subtle/param_constructor_spec.rb +4 -4
- data/spec/subtle/safety_proc_spec.rb +2 -2
- metadata +71 -65
data/.rvmrc
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# development environment upon cd'ing into the directory
|
5
5
|
|
6
6
|
# First we specify our desired <ruby>[@<gemset>], the @gemset name is optional.
|
7
|
-
environment_id="ruby-1.
|
7
|
+
environment_id="ruby-1.8.7-p370@subtle"
|
8
8
|
|
9
9
|
#
|
10
10
|
# Uncomment following line if you want options to be set only for given project.
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,21 +1,6 @@
|
|
1
|
-
# Subtle
|
1
|
+
# Subtle [![Build Status](https://secure.travis-ci.org/darrencauthon/subtle.png?branch=master)](http://travis-ci.org/darrencauthon/subtle)
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
I don't like "grab-bag" method libraries any more than anybody, but also like everybody: I'll make an exception for **MINE**. :)
|
6
|
-
|
7
|
-
## Installation
|
8
|
-
Add this line to your application's Gemfile:
|
9
|
-
|
10
|
-
gem 'subtle'
|
11
|
-
|
12
|
-
And then execute:
|
13
|
-
|
14
|
-
$ bundle
|
15
|
-
|
16
|
-
Or install it yourself as:
|
17
|
-
|
18
|
-
gem install subtle
|
3
|
+
This library contains methods that seem to cut down a litle bit of the code that I write daily.
|
19
4
|
|
20
5
|
## Usage
|
21
6
|
|
@@ -67,8 +52,6 @@ person = [:name].to_object subject
|
|
67
52
|
person.name = "John Galt"
|
68
53
|
person.name # Will be John Galt
|
69
54
|
````
|
70
|
-
|
71
|
-
|
72
55
|
### Safety Proc
|
73
56
|
|
74
57
|
This feature was written because I hate wrapping code in begin/rescue/end blocks. If I have a line of code and I don't particularly care if it fails, I have to wrap it in three more lines of care to stop exceptions.
|
@@ -109,7 +92,7 @@ You can also pass a block to the constructor when it is instantiated, like this:
|
|
109
92
|
````ruby
|
110
93
|
class Person
|
111
94
|
params_constructor do
|
112
|
-
|
95
|
+
@first_name = 'Howard'
|
113
96
|
end
|
114
97
|
attr_accessor :first_name, :last_name
|
115
98
|
end
|
@@ -136,7 +119,7 @@ person.first_name #= Howard
|
|
136
119
|
|
137
120
|
````
|
138
121
|
|
139
|
-
###
|
122
|
+
### Lambda to Object
|
140
123
|
|
141
124
|
I was inspired to write this feature while dealing with some bad Rails code. A programmer wrote a before_filter on ApplicationController that made a big, expensive web service call to pass the users current weather information to the view. This weather information was shown in various places on the site, but there were many pages on the site where the data was not being used at all.
|
142
125
|
|
data/lib/subtle.rb
CHANGED
@@ -1,24 +1,36 @@
|
|
1
1
|
class Array
|
2
2
|
|
3
|
-
def to_object(subject =
|
4
|
-
|
5
|
-
self.each { |item| add_reader_for(subject, item, nil) }
|
3
|
+
def to_object(subject = Object.new)
|
4
|
+
self.each { |field| add_attr_accessor_for(subject, field) }
|
6
5
|
subject
|
7
6
|
end
|
8
7
|
|
9
|
-
def to_objects(&
|
10
|
-
records =
|
8
|
+
def to_objects(type = Object, &block_that_returns_the_records)
|
9
|
+
records = block_that_returns_the_records.call
|
11
10
|
return [] if records.empty?
|
12
|
-
records.map { |record|
|
11
|
+
records.map { |record| turn_this_data_into_a_filled_object(type, record) }
|
13
12
|
end
|
14
13
|
|
15
14
|
private
|
16
15
|
|
17
|
-
def
|
18
|
-
result =
|
19
|
-
|
16
|
+
def turn_this_data_into_a_filled_object(type, record)
|
17
|
+
result = create_the_object(type)
|
18
|
+
fill_the_object_with_the_values(result, record)
|
19
|
+
result
|
20
|
+
end
|
21
|
+
|
22
|
+
def fill_the_object_with_the_values(result, record)
|
23
|
+
self.each_with_index do |field, index|
|
20
24
|
value = get_the_value(record, index)
|
21
|
-
|
25
|
+
result.send("#{field}=".to_sym, value)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_the_object(type)
|
30
|
+
result = type.new
|
31
|
+
return result if type != Object
|
32
|
+
self.each_with_index do |field, index|
|
33
|
+
add_attr_accessor_for(result, field)
|
22
34
|
end
|
23
35
|
result
|
24
36
|
end
|
@@ -28,11 +40,10 @@ class Array
|
|
28
40
|
value[index]
|
29
41
|
end
|
30
42
|
|
31
|
-
def
|
32
|
-
result.instance_variable_set("@#{property_name}", this_value)
|
43
|
+
def add_attr_accessor_for(result, property_name)
|
33
44
|
result.instance_eval("
|
34
|
-
|
35
|
-
|
36
|
-
|
45
|
+
class << self
|
46
|
+
attr_accessor :#{property_name}
|
47
|
+
end")
|
37
48
|
end
|
38
49
|
end
|
data/lib/subtle/lazy_cover.rb
CHANGED
@@ -2,8 +2,8 @@ module Subtle
|
|
2
2
|
class LazyCover < Cover
|
3
3
|
include Subtle::StrictCoverMethods
|
4
4
|
|
5
|
-
def initialize(
|
6
|
-
@block =
|
5
|
+
def initialize(block_that_creates_the_object)
|
6
|
+
@block = block_that_creates_the_object
|
7
7
|
end
|
8
8
|
|
9
9
|
alias :the_original_subject_from_the_base_class :the_original_subject
|
data/lib/subtle/version.rb
CHANGED
@@ -2,98 +2,140 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
2
|
|
3
3
|
describe "arrays to objects" do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
describe "
|
8
|
-
|
9
|
-
|
5
|
+
describe "creating objects with matching attr_accessors and values" do
|
6
|
+
[:name, :street].each do |property|
|
7
|
+
describe "with an array with one symbol named #{property.to_s}" do
|
8
|
+
describe "and no data" do
|
9
|
+
before do
|
10
|
+
@values = [property].to_objects { [] }
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should return an empty array" do
|
14
|
+
@values.must_be_empty
|
15
|
+
end
|
10
16
|
end
|
11
17
|
|
12
|
-
|
13
|
-
|
18
|
+
["Dangy", "Taggart"].each do |name|
|
19
|
+
describe "and one record with #{name}" do
|
20
|
+
before do
|
21
|
+
@values = [property].to_objects { [name] }
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should return one record" do
|
25
|
+
@values.count.must_equal 1
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should have a property with the name of Dangy" do
|
29
|
+
@values[0].send(property).must_equal name
|
30
|
+
end
|
31
|
+
end
|
14
32
|
end
|
15
|
-
end
|
16
33
|
|
17
|
-
|
18
|
-
describe "and one record with #{name}" do
|
34
|
+
describe "and two records with John and Howard" do
|
19
35
|
before do
|
20
|
-
@values = [property].to_objects {
|
36
|
+
@values = [property].to_objects {["John", "Howard"]}
|
21
37
|
end
|
22
38
|
|
23
|
-
it "should return
|
24
|
-
@values.count.must_equal
|
39
|
+
it "should return two records" do
|
40
|
+
@values.count.must_equal 2
|
25
41
|
end
|
26
42
|
|
27
|
-
it "should
|
28
|
-
@values[0].send(property).must_equal
|
43
|
+
it "should set the first to John" do
|
44
|
+
@values[0].send(property).must_equal "John"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should set the second to Howard" do
|
48
|
+
@values[1].send(property).must_equal "Howard"
|
29
49
|
end
|
30
50
|
end
|
31
51
|
end
|
32
52
|
|
33
|
-
describe "
|
34
|
-
|
35
|
-
|
36
|
-
|
53
|
+
describe "with an array with two symbols named first_name and last_name" do
|
54
|
+
describe "with 'Ellis' and 'Wyatt'" do
|
55
|
+
before do
|
56
|
+
@values = [:first_name, :last_name].to_objects { [['Ellis', 'Wyatt']] }
|
57
|
+
end
|
37
58
|
|
38
|
-
|
39
|
-
|
40
|
-
|
59
|
+
it "should return one record" do
|
60
|
+
@values.count.must_equal 1
|
61
|
+
end
|
41
62
|
|
42
|
-
|
43
|
-
|
44
|
-
|
63
|
+
it "should set the first name to Ellis" do
|
64
|
+
@values[0].first_name.must_equal 'Ellis'
|
65
|
+
end
|
45
66
|
|
46
|
-
|
47
|
-
|
67
|
+
it "should set the last name to Wyatt" do
|
68
|
+
@values[0].last_name.must_equal 'Wyatt'
|
69
|
+
end
|
48
70
|
end
|
49
|
-
end
|
50
|
-
end
|
51
71
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
end
|
72
|
+
describe "with 'Ellis' and 'Wyatt', then 'Dagny' and 'Taggart'" do
|
73
|
+
before do
|
74
|
+
@values = [:first_name, :last_name].to_objects { [['Ellis', 'Wyatt'], ['Dagny', 'Taggart']] }
|
75
|
+
end
|
57
76
|
|
58
|
-
|
59
|
-
|
60
|
-
|
77
|
+
it "should return one record" do
|
78
|
+
@values.count.must_equal 2
|
79
|
+
end
|
61
80
|
|
62
|
-
|
63
|
-
|
64
|
-
|
81
|
+
it "should set the first name to Ellis on the first record" do
|
82
|
+
@values[0].first_name.must_equal 'Ellis'
|
83
|
+
end
|
65
84
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
end
|
85
|
+
it "should set the last name to Wyatt on the first record" do
|
86
|
+
@values[0].last_name.must_equal 'Wyatt'
|
87
|
+
end
|
70
88
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
end
|
89
|
+
it "should set the first name to Dagny on the second record" do
|
90
|
+
@values[1].first_name.must_equal 'Dagny'
|
91
|
+
end
|
75
92
|
|
76
|
-
|
77
|
-
|
93
|
+
it "should set the last name to Wyatt on the second record" do
|
94
|
+
@values[1].last_name.must_equal 'Taggart'
|
95
|
+
end
|
78
96
|
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
79
100
|
|
80
|
-
|
81
|
-
|
82
|
-
|
101
|
+
class TestObject
|
102
|
+
attr_accessor :city, :state, :zip
|
103
|
+
end
|
83
104
|
|
84
|
-
|
85
|
-
|
86
|
-
|
105
|
+
describe 'creating objects of a certain type' do
|
106
|
+
describe 'when attr_accessor exists for each property' do
|
107
|
+
before do
|
108
|
+
@results = [:city, :state, :zip].to_objects(TestObject) {[
|
109
|
+
['Olathe', 'KS', '66061'], ['Kansas City', 'MO', '64125']
|
110
|
+
]}
|
111
|
+
end
|
87
112
|
|
88
|
-
|
89
|
-
|
90
|
-
|
113
|
+
it "should return objects of the type provided" do
|
114
|
+
@results[0].class.must_equal TestObject
|
115
|
+
end
|
91
116
|
|
92
|
-
|
93
|
-
|
94
|
-
|
117
|
+
it "should set the properties as expected" do
|
118
|
+
@results[0].city.must_equal 'Olathe'
|
119
|
+
@results[0].state.must_equal 'KS'
|
120
|
+
@results[0].zip.must_equal '66061'
|
121
|
+
@results[1].city.must_equal 'Kansas City'
|
122
|
+
@results[1].state.must_equal 'MO'
|
123
|
+
@results[1].zip.must_equal '64125'
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe 'when attr_accessor does not exist for each property' do
|
129
|
+
it "should throw an exception" do
|
130
|
+
error_thrown = false
|
131
|
+
begin
|
132
|
+
[:something_that_does_not_exist].to_objects(TestObject) {[
|
133
|
+
['value']
|
134
|
+
]}
|
135
|
+
rescue
|
136
|
+
error_thrown = true
|
95
137
|
end
|
138
|
+
error_thrown.must_equal true
|
96
139
|
end
|
97
140
|
end
|
98
|
-
|
99
141
|
end
|
@@ -4,7 +4,7 @@ describe "lambda to object" do
|
|
4
4
|
|
5
5
|
describe "to_object on a lambda that returns nil" do
|
6
6
|
before do
|
7
|
-
@value =
|
7
|
+
@value = lambda { nil }.to_object
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should remember the original value is nil" do
|
@@ -14,7 +14,7 @@ describe "lambda to object" do
|
|
14
14
|
|
15
15
|
describe "to_object on a lambda that returns an integer" do
|
16
16
|
before do
|
17
|
-
@value =
|
17
|
+
@value = lambda { 1 }.to_object
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should remember the original value is 1" do
|
@@ -29,7 +29,7 @@ describe "lambda to object" do
|
|
29
29
|
describe "to_object on a lambda, but never accessing the variable" do
|
30
30
|
before do
|
31
31
|
@was_called = false
|
32
|
-
@value =
|
32
|
+
@value = lambda { raise 'it was called' }.to_object
|
33
33
|
end
|
34
34
|
|
35
35
|
it "should not be called" do
|
@@ -10,12 +10,12 @@ end
|
|
10
10
|
describe Subtle::LazyCover do
|
11
11
|
|
12
12
|
it "should not call the block passed to it" do
|
13
|
-
lazy = Subtle::LazyCover.new(
|
13
|
+
lazy = Subtle::LazyCover.new(lambda { raise 'was called' })
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should call the block passed to it when things are references" do
|
17
17
|
LazyCoverTest.was_called = false
|
18
|
-
lazy = Subtle::LazyCover.new(
|
18
|
+
lazy = Subtle::LazyCover.new(lambda { LazyCoverTest.was_called = true })
|
19
19
|
LazyCoverTest.was_called.must_equal false
|
20
20
|
lazy.to_s
|
21
21
|
LazyCoverTest.was_called.must_equal true
|
@@ -23,7 +23,7 @@ describe Subtle::LazyCover do
|
|
23
23
|
|
24
24
|
it "should call the block passed to it only once" do
|
25
25
|
LazyCoverTest.was_called = 0
|
26
|
-
lazy = Subtle::LazyCover.new(
|
26
|
+
lazy = Subtle::LazyCover.new(lambda { LazyCoverTest.was_called = LazyCoverTest.was_called + 1 })
|
27
27
|
LazyCoverTest.was_called.must_equal 0
|
28
28
|
lazy.to_s
|
29
29
|
LazyCoverTest.was_called.must_equal 1
|
@@ -36,7 +36,7 @@ describe Subtle::LazyCover do
|
|
36
36
|
object = Object.new
|
37
37
|
object.stubs(:defined_method).returns("yes")
|
38
38
|
|
39
|
-
lazy = Subtle::LazyCover.new(
|
39
|
+
lazy = Subtle::LazyCover.new(lambda { object })
|
40
40
|
lazy.defined_method.must_equal "yes"
|
41
41
|
was_called = false
|
42
42
|
begin
|
@@ -49,13 +49,13 @@ describe Subtle::LazyCover do
|
|
49
49
|
|
50
50
|
describe "the original subject" do
|
51
51
|
it "should call the block passed to it" do
|
52
|
-
Subtle::LazyCover.new(
|
53
|
-
Subtle::LazyCover.new(
|
52
|
+
Subtle::LazyCover.new(lambda { 0 }).the_original_subject.must_equal 0
|
53
|
+
Subtle::LazyCover.new(lambda { "x" }).the_original_subject.must_equal "x"
|
54
54
|
end
|
55
55
|
|
56
56
|
it "should only call the block passed to it once" do
|
57
57
|
LazyCoverTest.was_called = 0
|
58
|
-
lazy = Subtle::LazyCover.new(
|
58
|
+
lazy = Subtle::LazyCover.new(lambda { LazyCoverTest.was_called += 1 })
|
59
59
|
lazy.the_original_subject
|
60
60
|
LazyCoverTest.was_called.must_equal 1
|
61
61
|
lazy.the_original_subject
|
@@ -27,7 +27,7 @@ end
|
|
27
27
|
describe "param_constructor" do
|
28
28
|
describe 'just the constructor itself' do
|
29
29
|
it "should let the object be instantiated with a hash" do
|
30
|
-
test = ParamConstructorTest.new(first_name
|
30
|
+
test = ParamConstructorTest.new(:first_name => "John", :last_name => "Galt")
|
31
31
|
test.first_name.must_equal "John"
|
32
32
|
test.last_name.must_equal "Galt"
|
33
33
|
end
|
@@ -40,7 +40,7 @@ describe "param_constructor" do
|
|
40
40
|
|
41
41
|
describe 'pass a block to the constructor' do
|
42
42
|
it "should let the object be instantiated with a hash" do
|
43
|
-
test = SecondParamConstructorTest.new(first_name
|
43
|
+
test = SecondParamConstructorTest.new(:first_name => "Dagny", :last_name => "Roark") do |o|
|
44
44
|
o.first_name = 'Howard'
|
45
45
|
end
|
46
46
|
test.first_name.must_equal 'Howard'
|
@@ -50,14 +50,14 @@ describe "param_constructor" do
|
|
50
50
|
|
51
51
|
describe 'pass a block with the constructor' do
|
52
52
|
it "should let the object be instantiated with a hash" do
|
53
|
-
test = ThirdParamConstructorTest.new(first_name
|
53
|
+
test = ThirdParamConstructorTest.new(:first_name => "Dagny", :last_name => "Roark")
|
54
54
|
test.first_name.must_equal 'expected value'
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
describe 'pass a block with the constructor AND to the constructor' do
|
59
59
|
it "should run both and let the last one win" do
|
60
|
-
test = FourthParamConstructorTest.new(first_name
|
60
|
+
test = FourthParamConstructorTest.new(:first_name => "", :last_name => "") do |o|
|
61
61
|
o.last_name = "second"
|
62
62
|
o.first_name = "first"
|
63
63
|
end
|
@@ -10,7 +10,7 @@ describe "Safety Proc" do
|
|
10
10
|
describe "a proc that will throw an exception" do
|
11
11
|
before do
|
12
12
|
SafetyProc.called = false
|
13
|
-
@proc =
|
13
|
+
@proc = lambda do
|
14
14
|
SafetyProc.called = true
|
15
15
|
raise 'k'
|
16
16
|
end
|
@@ -28,7 +28,7 @@ describe "Safety Proc" do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it "call the block" do
|
31
|
-
@proc =
|
31
|
+
@proc = lambda { raise 'k' }.call_safely { SafetyProc.called = true }
|
32
32
|
SafetyProc.called.must_equal true
|
33
33
|
end
|
34
34
|
end
|
metadata
CHANGED
@@ -1,71 +1,74 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: subtle
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Darren Cauthon
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
+
|
18
|
+
date: 2012-08-17 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
17
22
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
|
22
|
-
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
hash: 3
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
23
30
|
prerelease: false
|
24
|
-
|
31
|
+
type: :runtime
|
32
|
+
name: blankslate
|
33
|
+
requirement: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
25
36
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
hash: 3
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
version: "0"
|
44
|
+
prerelease: false
|
45
|
+
type: :development
|
31
46
|
name: mocha
|
32
|
-
requirement:
|
47
|
+
requirement: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
33
50
|
none: false
|
34
|
-
requirements:
|
35
|
-
- -
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
|
38
|
-
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
hash: 3
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
version: "0"
|
39
58
|
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: rake
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ! '>='
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
54
59
|
type: :development
|
55
|
-
|
56
|
-
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
60
|
+
name: rake
|
61
|
+
requirement: *id003
|
62
62
|
description: A few small updates to make even more concise Ruby.
|
63
|
-
email:
|
63
|
+
email:
|
64
64
|
- darren@cauthon.com
|
65
65
|
executables: []
|
66
|
+
|
66
67
|
extensions: []
|
68
|
+
|
67
69
|
extra_rdoc_files: []
|
68
|
-
|
70
|
+
|
71
|
+
files:
|
69
72
|
- .gitignore
|
70
73
|
- .rvmrc
|
71
74
|
- .travis.yml
|
@@ -93,35 +96,38 @@ files:
|
|
93
96
|
- subtle.gemspec
|
94
97
|
homepage: http://www.github.com/darrencauthon/subtle
|
95
98
|
licenses: []
|
99
|
+
|
96
100
|
post_install_message:
|
97
101
|
rdoc_options: []
|
98
|
-
|
102
|
+
|
103
|
+
require_paths:
|
99
104
|
- lib
|
100
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
101
106
|
none: false
|
102
|
-
requirements:
|
103
|
-
- -
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
|
106
|
-
segments:
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
hash: 3
|
111
|
+
segments:
|
107
112
|
- 0
|
108
|
-
|
109
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
|
+
version: "0"
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
115
|
none: false
|
111
|
-
requirements:
|
112
|
-
- -
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
|
115
|
-
segments:
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
hash: 3
|
120
|
+
segments:
|
116
121
|
- 0
|
117
|
-
|
122
|
+
version: "0"
|
118
123
|
requirements: []
|
124
|
+
|
119
125
|
rubyforge_project:
|
120
126
|
rubygems_version: 1.8.24
|
121
127
|
signing_key:
|
122
128
|
specification_version: 3
|
123
129
|
summary: A few small updates to make even more concise Ruby.
|
124
|
-
test_files:
|
130
|
+
test_files:
|
125
131
|
- spec/spec_helper.rb
|
126
132
|
- spec/subtle/array_to_object_spec.rb
|
127
133
|
- spec/subtle/array_to_objects_spec.rb
|