subtle 0.3.4 → 0.3.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/README.md CHANGED
@@ -23,7 +23,7 @@ Or install it yourself as:
23
23
 
24
24
  This feature exists to make the creation of sets of objects with data easily.
25
25
 
26
- * Create an array of symbols of symbols that match the properties on the objects you want, and
26
+ * Create an array of symbols that match the properties on the objects you want, and
27
27
  * Pass a block that returns an array of arrays with matching data.
28
28
 
29
29
  ````ruby
@@ -44,6 +44,21 @@ records[2].first_name # "Dagny"
44
44
  records[2].last_name # "Taggart"
45
45
  ````
46
46
 
47
+ ### Array to Object
48
+
49
+ This feature exists to make the creation of an object with assignable properties easy.
50
+
51
+ * Create an array of symbols that match the properties you want on the object.
52
+
53
+ ````ruby
54
+ person = [:first_name, :last_name].to_object
55
+
56
+ person.first_name = "John"
57
+ person.first_name # Will be John
58
+ person.last_name = "Galt"
59
+ person.last_name # Will be Galt
60
+ ````
61
+
47
62
  ### Safety Proc
48
63
 
49
64
  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.
@@ -1,5 +1,11 @@
1
1
  class Array
2
2
 
3
+ def to_object
4
+ object = Object.new
5
+ self.each { |item| add_reader_for(object, item, nil) }
6
+ object
7
+ end
8
+
3
9
  def to_objects(&blk)
4
10
  records = blk.call
5
11
  return [] if records.empty?
@@ -1,3 +1,3 @@
1
1
  module Subtle
2
- VERSION = "0.3.4"
2
+ VERSION = "0.3.5"
3
3
  end
@@ -1,98 +1,40 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
- describe "arrays to objects" do
3
+ describe "array to object" do
4
4
 
5
5
  [:name, :street].each do |property|
6
6
  describe "with an array with one symbol named #{property.to_s}" do
7
7
  describe "and no data" do
8
8
  before do
9
- @values = [property].to_objects { [] }
9
+ @result = [property].to_object
10
10
  end
11
11
 
12
- it "should return an empty array" do
13
- @values.must_be_empty
12
+ it "should return an object" do
13
+ @result.nil?.must_equal false
14
14
  end
15
- end
16
-
17
- ["Dangy", "Taggart"].each do |name|
18
- describe "and one record with #{name}" do
19
- before do
20
- @values = [property].to_objects { [name] }
21
- end
22
-
23
- it "should return one record" do
24
- @values.count.must_equal 1
25
- end
26
15
 
27
- it "should have a property with the name of Dangy" do
28
- @values[0].send(property).must_equal name
29
- end
30
- end
31
- end
32
-
33
- describe "and two records with John and Howard" do
34
- before do
35
- @values = [property].to_objects {["John", "Howard"]}
36
- end
37
-
38
- it "should return two records" do
39
- @values.count.must_equal 2
40
- end
41
-
42
- it "should set the first to John" do
43
- @values[0].send(property).must_equal "John"
44
- end
45
-
46
- it "should set the second to Howard" do
47
- @values[1].send(property).must_equal "Howard"
16
+ it "should create an attr_accessor for the property" do
17
+ @result.respond_to?(property).must_equal true
18
+ @result.respond_to?("#{property}=".to_sym).must_equal true
48
19
  end
49
20
  end
50
21
  end
22
+ end
51
23
 
52
- describe "with an array with two symbols named first_name and last_name" do
53
- describe "with 'Ellis' and 'Wyatt'" do
54
- before do
55
- @values = [:first_name, :last_name].to_objects { [['Ellis', 'Wyatt']] }
56
- end
57
-
58
- it "should return one record" do
59
- @values.count.must_equal 1
60
- end
61
-
62
- it "should set the first name to Ellis" do
63
- @values[0].first_name.must_equal 'Ellis'
64
- end
65
-
66
- it "should set the last name to Wyatt" do
67
- @values[0].last_name.must_equal 'Wyatt'
68
- end
69
- end
70
-
71
- describe "with 'Ellis' and 'Wyatt', then 'Dagny' and 'Taggart'" do
72
- before do
73
- @values = [:first_name, :last_name].to_objects { [['Ellis', 'Wyatt'], ['Dagny', 'Taggart']] }
74
- end
75
-
76
- it "should return one record" do
77
- @values.count.must_equal 2
78
- end
79
-
80
- it "should set the first name to Ellis on the first record" do
81
- @values[0].first_name.must_equal 'Ellis'
82
- end
83
-
84
- it "should set the last name to Wyatt on the first record" do
85
- @values[0].last_name.must_equal 'Wyatt'
86
- end
24
+ describe "an array with two symbols" do
25
+ before do
26
+ @result = [:first_name, :last_name].to_object
27
+ end
87
28
 
88
- it "should set the first name to Dagny on the second record" do
89
- @values[1].first_name.must_equal 'Dagny'
90
- end
29
+ it "should return an object" do
30
+ @result.nil?.must_equal false
31
+ end
91
32
 
92
- it "should set the last name to Wyatt on the second record" do
93
- @values[1].last_name.must_equal 'Taggart'
94
- end
95
- end
33
+ it "should have both properties set" do
34
+ @result.respond_to?(:first_name).must_equal true
35
+ @result.respond_to?(:first_name=).must_equal true
36
+ @result.respond_to?(:last_name).must_equal true
37
+ @result.respond_to?(:last_name=).must_equal true
96
38
  end
97
39
  end
98
40
 
@@ -0,0 +1,99 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "arrays to objects" do
4
+
5
+ [:name, :street].each do |property|
6
+ describe "with an array with one symbol named #{property.to_s}" do
7
+ describe "and no data" do
8
+ before do
9
+ @values = [property].to_objects { [] }
10
+ end
11
+
12
+ it "should return an empty array" do
13
+ @values.must_be_empty
14
+ end
15
+ end
16
+
17
+ ["Dangy", "Taggart"].each do |name|
18
+ describe "and one record with #{name}" do
19
+ before do
20
+ @values = [property].to_objects { [name] }
21
+ end
22
+
23
+ it "should return one record" do
24
+ @values.count.must_equal 1
25
+ end
26
+
27
+ it "should have a property with the name of Dangy" do
28
+ @values[0].send(property).must_equal name
29
+ end
30
+ end
31
+ end
32
+
33
+ describe "and two records with John and Howard" do
34
+ before do
35
+ @values = [property].to_objects {["John", "Howard"]}
36
+ end
37
+
38
+ it "should return two records" do
39
+ @values.count.must_equal 2
40
+ end
41
+
42
+ it "should set the first to John" do
43
+ @values[0].send(property).must_equal "John"
44
+ end
45
+
46
+ it "should set the second to Howard" do
47
+ @values[1].send(property).must_equal "Howard"
48
+ end
49
+ end
50
+ end
51
+
52
+ describe "with an array with two symbols named first_name and last_name" do
53
+ describe "with 'Ellis' and 'Wyatt'" do
54
+ before do
55
+ @values = [:first_name, :last_name].to_objects { [['Ellis', 'Wyatt']] }
56
+ end
57
+
58
+ it "should return one record" do
59
+ @values.count.must_equal 1
60
+ end
61
+
62
+ it "should set the first name to Ellis" do
63
+ @values[0].first_name.must_equal 'Ellis'
64
+ end
65
+
66
+ it "should set the last name to Wyatt" do
67
+ @values[0].last_name.must_equal 'Wyatt'
68
+ end
69
+ end
70
+
71
+ describe "with 'Ellis' and 'Wyatt', then 'Dagny' and 'Taggart'" do
72
+ before do
73
+ @values = [:first_name, :last_name].to_objects { [['Ellis', 'Wyatt'], ['Dagny', 'Taggart']] }
74
+ end
75
+
76
+ it "should return one record" do
77
+ @values.count.must_equal 2
78
+ end
79
+
80
+ it "should set the first name to Ellis on the first record" do
81
+ @values[0].first_name.must_equal 'Ellis'
82
+ end
83
+
84
+ it "should set the last name to Wyatt on the first record" do
85
+ @values[0].last_name.must_equal 'Wyatt'
86
+ end
87
+
88
+ it "should set the first name to Dagny on the second record" do
89
+ @values[1].first_name.must_equal 'Dagny'
90
+ end
91
+
92
+ it "should set the last name to Wyatt on the second record" do
93
+ @values[1].last_name.must_equal 'Taggart'
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: subtle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
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-08-02 00:00:00.000000000 Z
12
+ date: 2012-08-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: blankslate
@@ -75,7 +75,7 @@ files:
75
75
  - README.md
76
76
  - Rakefile
77
77
  - lib/subtle.rb
78
- - lib/subtle/array_to_object.rb
78
+ - lib/subtle/array_to_objects.rb
79
79
  - lib/subtle/cover.rb
80
80
  - lib/subtle/lambda_to_object.rb
81
81
  - lib/subtle/lazy_cover.rb
@@ -84,6 +84,7 @@ files:
84
84
  - lib/subtle/version.rb
85
85
  - spec/spec_helper.rb
86
86
  - spec/subtle/array_to_object_spec.rb
87
+ - spec/subtle/array_to_objects_spec.rb
87
88
  - spec/subtle/cover_spec.rb
88
89
  - spec/subtle/lambda_to_object_spec.rb
89
90
  - spec/subtle/lazy_cover_spec.rb
@@ -104,7 +105,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
105
  version: '0'
105
106
  segments:
106
107
  - 0
107
- hash: 867729927420554654
108
+ hash: -1455677586639048133
108
109
  required_rubygems_version: !ruby/object:Gem::Requirement
109
110
  none: false
110
111
  requirements:
@@ -113,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
114
  version: '0'
114
115
  segments:
115
116
  - 0
116
- hash: 867729927420554654
117
+ hash: -1455677586639048133
117
118
  requirements: []
118
119
  rubyforge_project:
119
120
  rubygems_version: 1.8.24
@@ -123,6 +124,7 @@ summary: A few small updates to make even more concise Ruby.
123
124
  test_files:
124
125
  - spec/spec_helper.rb
125
126
  - spec/subtle/array_to_object_spec.rb
127
+ - spec/subtle/array_to_objects_spec.rb
126
128
  - spec/subtle/cover_spec.rb
127
129
  - spec/subtle/lambda_to_object_spec.rb
128
130
  - spec/subtle/lazy_cover_spec.rb