motion-addressbook 0.0.1 → 0.1.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/Gemfile.lock +1 -1
- data/README.md +46 -14
- data/lib/motion-addressbook/version.rb +1 -1
- data/motion/address_book/multi_value.rb +7 -7
- data/motion/address_book/person.rb +135 -20
- data/spec/address_book/person_spec.rb +155 -22
- data/spec/helpers/bacon_matchers.rb +11 -0
- data/spec/helpers/person_helpers.rb +5 -0
- metadata +8 -4
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -20,36 +20,68 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
###
|
23
|
+
### Instantiating a person object
|
24
|
+
|
25
|
+
There are 3 ways to instantiate a person object
|
26
|
+
|
27
|
+
### To get a new person not yet connected to the iOS Address Book
|
24
28
|
|
25
29
|
```ruby
|
26
|
-
|
27
|
-
|
28
|
-
# #<AddressBook::Person:0x6d550a0 @attributes={:first_name=>"Laurent", :last_name=>"Sansonetti", :job_title=>nil, :department=>nil, :organization=>"HipByte"} @ab_person=#<__NSCFType:0x6df97d0>>]
|
30
|
+
AddressBook::Person.new
|
31
|
+
# => #<AddressBook::Person:0x8c67ca0 @attributes={:first_name=>nil, :last_name=>nil, :job_title=>nil, :department=>nil, :organization=>nil} @new_record=true @ab_person=#<__NSCFType:0x6d832e0>>
|
29
32
|
```
|
30
33
|
|
34
|
+
### To get a list of existing people from the iOS Address Book
|
31
35
|
|
32
|
-
|
36
|
+
Get all people with `.all`
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
AddressBook::Person.all
|
40
|
+
# => [#<AddressBook::Person:0x6d55e90 @attributes={:first_name=>"Alex", :last_name=>"Rothenberg", :job_title=>nil, :department=>nil, :organization=>nil} @ab_person=#<__NSCFType:0x6df8bf0>>,
|
41
|
+
# #<AddressBook::Person:0x6d550a0 @attributes={:first_name=>"Laurent", :last_name=>"Sansonetti", :job_title=>nil, :department=>nil, :organization=>"HipByte"} @ab_person=#<__NSCFType:0x6df97d0>>]
|
42
|
+
```
|
43
|
+
|
44
|
+
Get a list of all people matching one attribute with `.find_all_by_XXX`
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
AddressBook::Person.find_all_by_email('alex@example.com')
|
48
|
+
# => [#<AddressBook::Person:0x6d55e90 @attributes={:first_name=>"Alex", :last_name=>"Rothenberg", :job_title=>nil, :department=>nil, :organization=>nil} @ab_person=#<__NSCFType:0x6df8bf0>>]
|
49
|
+
```
|
50
|
+
|
51
|
+
Get the first person matching one attribute with `find_by_XXX`
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
AddressBook::Person.find_by_email('alex@example.com')
|
55
|
+
# => #<AddressBook::Person:0x6d55e90 @attributes={:first_name=>"Alex", :last_name=>"Rothenberg", :job_title=>nil, :department=>nil, :organization=>nil} @ab_person=#<__NSCFType:0x6df8bf0>>
|
56
|
+
```
|
57
|
+
|
58
|
+
Get a list of all people matching several attributes with `.where`
|
33
59
|
|
34
60
|
```ruby
|
35
|
-
|
36
|
-
|
61
|
+
AddressBook::Person.where(:email => 'alex@example.com', :first_name => 'Alex')
|
62
|
+
# => [#<AddressBook::Person:0x6d55e90 @attributes={:first_name=>"Alex", :last_name=>"Rothenberg", :job_title=>nil, :department=>nil, :organization=>nil} @ab_person=#<__NSCFType:0x6df8bf0>>]
|
37
63
|
```
|
38
64
|
|
39
|
-
|
65
|
+
To look for an existing person or get a new one if none is found `find_or_new_by_XXX`
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
AddressBook::Person.find_or_new_by_email('alex@example.com')
|
69
|
+
# => #<AddressBook::Person:0xe4e3a80 @attributes={:first_name=>"Alex", :last_name=>"Rothenberg", :job_title=>nil, :department=>nil, :organization=>nil} @ab_person=#<__NSCFType:0xe4bbef0>>
|
70
|
+
```
|
71
|
+
|
72
|
+
### Create a new Contact and save in Contacts app
|
40
73
|
|
41
74
|
```ruby
|
42
|
-
|
43
|
-
|
44
|
-
# => 'Rothenberg'
|
75
|
+
AddressBook::Person.create(:first_name => 'Alex', :last_name => 'Rothenberg', :email => 'alex@example.com')
|
76
|
+
# => #<AddressBook::Person:0xe4e3a80 @attributes={:first_name=>"Alex", :last_name=>"Rothenberg", :job_title=>nil, :department=>nil, :organization=>nil} @ab_person=#<__NSCFType:0xe4bbef0>>
|
45
77
|
```
|
46
78
|
|
47
79
|
### Update existing contact
|
48
80
|
|
49
81
|
```ruby
|
50
|
-
|
51
|
-
|
52
|
-
|
82
|
+
alex = AddressBook::Person.find_by_email('alex@example.com')
|
83
|
+
alex.job_title = 'RubyMotion Developer'
|
84
|
+
alex.save
|
53
85
|
```
|
54
86
|
|
55
87
|
## Contributing
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module AddressBook
|
2
2
|
class MultiValue
|
3
3
|
attr_reader :multivalueIdentifier, :ab_multi_values
|
4
|
-
|
4
|
+
|
5
5
|
def initialize(ab_multi_values=nil)
|
6
6
|
@ab_multi_values = ab_multi_values ? ABMultiValueCreateMutableCopy(ab_multi_values) : ABMultiValueCreateMutable(KABMultiStringPropertyType)
|
7
7
|
# @ab_multi_values = ABMultiValueCreateMutable(KABMultiStringPropertyType)
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
def set(ab_label, value)
|
11
11
|
return if values.include? value #temp because blank? not working
|
12
12
|
if blank?(ab_label)
|
@@ -22,25 +22,25 @@ module AddressBook
|
|
22
22
|
set(ab_label, value)
|
23
23
|
end
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
def values
|
27
27
|
ABMultiValueCopyArrayOfAllValues(@ab_multi_values) || []
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
def include? value
|
31
31
|
return false if values.nil?
|
32
32
|
values.include? value
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
private
|
36
36
|
def blank?(ab_label)
|
37
37
|
index_for(ab_label) == -1
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
def index_for(ab_label)
|
41
41
|
return -1 # Keep getting this error :( <ArgumentError: invalid value for Integer: "_$!<Work>!$_">
|
42
42
|
# ABMultiValueGetIndexForIdentifier(@ab_multi_values, ab_label)
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
end
|
46
46
|
end
|
@@ -2,9 +2,15 @@ module AddressBook
|
|
2
2
|
class Person
|
3
3
|
attr_reader :attributes, :error, :ab_person
|
4
4
|
|
5
|
-
def initialize(attributes, ab_person = nil)
|
5
|
+
def initialize(attributes={}, ab_person = nil)
|
6
6
|
@attributes = attributes
|
7
|
-
|
7
|
+
if ab_person.nil?
|
8
|
+
@new_record = true
|
9
|
+
else
|
10
|
+
@ab_person = ab_person
|
11
|
+
load_ab_person
|
12
|
+
@new_record = false
|
13
|
+
end
|
8
14
|
end
|
9
15
|
|
10
16
|
def self.all
|
@@ -24,9 +30,22 @@ module AddressBook
|
|
24
30
|
ABAddressBookAddRecord(address_book, ab_person, error)
|
25
31
|
ABAddressBookSave(address_book, error )
|
26
32
|
@address_book = nil #force refresh
|
33
|
+
@new_record = false
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.where(conditions)
|
37
|
+
all.select do |person|
|
38
|
+
person.meets? conditions
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def meets?(conditions)
|
43
|
+
conditions.keys.all? do |attribute|
|
44
|
+
send(attribute) == conditions[attribute]
|
45
|
+
end
|
27
46
|
end
|
28
47
|
|
29
|
-
def attribute_map
|
48
|
+
def self.attribute_map
|
30
49
|
{ :first_name => KABPersonFirstNameProperty,
|
31
50
|
:last_name => KABPersonLastNameProperty,
|
32
51
|
:job_title => KABPersonJobTitleProperty,
|
@@ -34,22 +53,95 @@ module AddressBook
|
|
34
53
|
:organization => KABPersonOrganizationProperty
|
35
54
|
}
|
36
55
|
end
|
56
|
+
def attribute_map
|
57
|
+
self.class.attribute_map
|
58
|
+
end
|
37
59
|
|
38
60
|
def method_missing(name, *args)
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
set_field(attribute_map[attribute_name], args.first)
|
44
|
-
attributes[attribute_name] = args.first
|
45
|
-
else
|
46
|
-
attributes[attribute_name] ||= get_field(attribute_map[attribute_name])
|
47
|
-
end
|
61
|
+
if attribute_name = getter?(name)
|
62
|
+
get(attribute_name)
|
63
|
+
elsif attribute_name = setter?(name)
|
64
|
+
set(attribute_name, args.first)
|
48
65
|
else
|
49
66
|
super
|
50
67
|
end
|
51
68
|
end
|
52
69
|
|
70
|
+
def self.method_missing(name, *args)
|
71
|
+
if attribute_name = all_finder?(name)
|
72
|
+
find_all_by(attribute_name, args.first)
|
73
|
+
elsif attribute_name = first_finder?(name)
|
74
|
+
find_by(attribute_name, args.first)
|
75
|
+
elsif attribute_name = finder_or_new?(name)
|
76
|
+
find_or_new_by(attribute_name, args.first)
|
77
|
+
else
|
78
|
+
super
|
79
|
+
end
|
80
|
+
end
|
81
|
+
def self.is_attribute?(attribute_name)
|
82
|
+
return false if attribute_name.nil?
|
83
|
+
attribute_map.include?(attribute_name.to_sym) || [:email, :phone_number].include?( attribute_name.to_sym)
|
84
|
+
end
|
85
|
+
|
86
|
+
def getter?(method_name)
|
87
|
+
if self.class.is_attribute? method_name
|
88
|
+
method_name
|
89
|
+
else
|
90
|
+
nil
|
91
|
+
end
|
92
|
+
end
|
93
|
+
def setter?(method_name)
|
94
|
+
method_name.to_s =~ /^(\w*)=$/
|
95
|
+
if self.class.is_attribute? $1
|
96
|
+
$1
|
97
|
+
else
|
98
|
+
nil
|
99
|
+
end
|
100
|
+
end
|
101
|
+
def self.all_finder?(method_name)
|
102
|
+
method_name.to_s =~ /^find_all_by_(\w*)$/
|
103
|
+
if is_attribute? $1
|
104
|
+
$1
|
105
|
+
else
|
106
|
+
nil
|
107
|
+
end
|
108
|
+
end
|
109
|
+
def self.first_finder?(method_name)
|
110
|
+
method_name.to_s =~ /^find_by_(\w*)$/
|
111
|
+
if is_attribute? $1
|
112
|
+
$1
|
113
|
+
else
|
114
|
+
nil
|
115
|
+
end
|
116
|
+
end
|
117
|
+
def self.finder_or_new?(method_name)
|
118
|
+
method_name.to_s =~ /^find_or_new_by_(\w*)$/
|
119
|
+
if is_attribute? $1
|
120
|
+
$1
|
121
|
+
else
|
122
|
+
nil
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def get(attribute_name)
|
127
|
+
attributes[attribute_name.to_sym] ||= get_field(attribute_map[attribute_name])
|
128
|
+
end
|
129
|
+
|
130
|
+
def set(attribute_name, value)
|
131
|
+
set_field(attribute_map[attribute_name.to_sym], value)
|
132
|
+
attributes[attribute_name.to_sym] = value
|
133
|
+
end
|
134
|
+
|
135
|
+
def self.find_all_by(attribute_name, criteria)
|
136
|
+
where({attribute_name.to_sym => criteria})
|
137
|
+
end
|
138
|
+
def self.find_by(attribute_name, criteria)
|
139
|
+
find_all_by(attribute_name, criteria).first
|
140
|
+
end
|
141
|
+
def self.find_or_new_by(attribute_name, criteria)
|
142
|
+
find_by(attribute_name, criteria) || new({attribute_name.to_sym => criteria})
|
143
|
+
end
|
144
|
+
|
53
145
|
def photo
|
54
146
|
ABPersonCopyImageData(ab_person)
|
55
147
|
end
|
@@ -74,11 +166,18 @@ module AddressBook
|
|
74
166
|
def email_values
|
75
167
|
emails.values
|
76
168
|
end
|
169
|
+
|
170
|
+
# UGH - kinda arbitrary way to deal with multiple values. DO SOMETHING BETTER.
|
171
|
+
def email
|
172
|
+
@attributes[:email] ||= email_values.first
|
173
|
+
end
|
174
|
+
def phone_number
|
175
|
+
@attributes[:phone_number] ||= phone_number_values.first
|
176
|
+
end
|
77
177
|
|
78
178
|
# private
|
79
179
|
|
80
|
-
def load_ab_person
|
81
|
-
@ab_person = ab_person || find_or_new
|
180
|
+
def load_ab_person
|
82
181
|
set_field(KABPersonFirstNameProperty, attributes[:first_name ]) unless attributes[:first_name ].nil?
|
83
182
|
set_field(KABPersonLastNameProperty, attributes[:last_name ]) unless attributes[:last_name ].nil?
|
84
183
|
set_field(KABPersonJobTitleProperty, attributes[:job_title ]) unless attributes[:job_title ].nil?
|
@@ -104,16 +203,32 @@ module AddressBook
|
|
104
203
|
MultiValue.new(ABRecordCopyValue(ab_person, field))
|
105
204
|
end
|
106
205
|
|
206
|
+
def ab_person
|
207
|
+
if @ab_person.nil?
|
208
|
+
@ab_person = new_ab_person
|
209
|
+
load_ab_person
|
210
|
+
end
|
211
|
+
@ab_person
|
212
|
+
end
|
213
|
+
|
107
214
|
def find_or_new
|
108
215
|
if new_record?
|
109
|
-
|
110
|
-
ABAddressBookAddRecord(address_book, ab_person, error )
|
111
|
-
ab_person
|
216
|
+
new_ab_person
|
112
217
|
else
|
113
218
|
existing_record
|
114
219
|
end
|
115
220
|
end
|
116
221
|
|
222
|
+
def new_ab_person
|
223
|
+
ab_person = ABPersonCreate()
|
224
|
+
# ABAddressBookAddRecord(address_book, ab_person, error )
|
225
|
+
ab_person
|
226
|
+
end
|
227
|
+
|
228
|
+
def new_record?
|
229
|
+
!!@new_record
|
230
|
+
end
|
231
|
+
|
117
232
|
def existing_records
|
118
233
|
potential_matches = ABAddressBookCopyPeopleWithName(address_book, attributes[:first_name])
|
119
234
|
potential_matches.select do |record|
|
@@ -125,9 +240,9 @@ module AddressBook
|
|
125
240
|
def exists?
|
126
241
|
!new_record?
|
127
242
|
end
|
128
|
-
def new_record?
|
129
|
-
|
130
|
-
end
|
243
|
+
# def new_record?
|
244
|
+
# existing_record.nil?
|
245
|
+
# end
|
131
246
|
def existing_record
|
132
247
|
# what if there are more than one match? email should be unique but ...
|
133
248
|
existing_records.first
|
@@ -1,4 +1,8 @@
|
|
1
|
+
def unique_email
|
2
|
+
"alex_#{Time.now.to_i}@example.com"
|
3
|
+
end
|
1
4
|
describe AddressBook::Person do
|
5
|
+
|
2
6
|
describe '.all' do
|
3
7
|
before do
|
4
8
|
@person = AddressBook::Person.create({:first_name => 'Alex', :last_name=>'Rothenberg'})
|
@@ -7,19 +11,94 @@ describe AddressBook::Person do
|
|
7
11
|
all_names = AddressBook::Person.all.map do |person|
|
8
12
|
[person.first_name, person.last_name]
|
9
13
|
end
|
10
|
-
all_names.should.include? ['Alex', 'Rothenberg']
|
14
|
+
all_names.should.include? ['Alex', 'Rothenberg']
|
11
15
|
end
|
12
|
-
|
13
|
-
it 'should get bigger when we create another' do
|
16
|
+
|
17
|
+
it 'should get bigger when we create another' do
|
14
18
|
initial_people_count = AddressBook::Person.all.size
|
15
19
|
@person = AddressBook::Person.create({:first_name => 'Alex2', :last_name=>'Rothenberg2'})
|
16
20
|
AddressBook::Person.all.size.should == (initial_people_count + 1)
|
17
21
|
end
|
18
22
|
end
|
19
23
|
|
24
|
+
describe 'ways of creating and finding people' do
|
25
|
+
describe 'new' do
|
26
|
+
before do
|
27
|
+
@alex = AddressBook::Person.new(:first_name => 'Alex', :last_name => 'Testy', :email => 'alex@example.com')
|
28
|
+
end
|
29
|
+
it 'should create but not save in the address book' do
|
30
|
+
@alex.should.be.new_record
|
31
|
+
@alex.first_name.should == 'Alex'
|
32
|
+
@alex.last_name.should == 'Testy'
|
33
|
+
@alex.email_values.should == ['alex@example.com']
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe 'existing' do
|
38
|
+
before do
|
39
|
+
AddressBook::Person.create(:first_name => 'Alex', :last_name => 'Testy', :email => 'alex@example.com')
|
40
|
+
end
|
41
|
+
describe '.find_by_all_email' do
|
42
|
+
it 'should find matches' do
|
43
|
+
alexes = AddressBook::Person.find_all_by_email 'alex@example.com'
|
44
|
+
alexes.should.not.be.empty
|
45
|
+
alexes.each do |alex|
|
46
|
+
alex.email.should == 'alex@example.com'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
it 'should give empty list when nothing matches' do
|
50
|
+
alexes = AddressBook::Person.find_all_by_email unique_email
|
51
|
+
alexes.should == []
|
52
|
+
end
|
53
|
+
end
|
54
|
+
describe '.find_by_email' do
|
55
|
+
it 'should find match' do
|
56
|
+
alex = AddressBook::Person.find_by_email 'alex@example.com'
|
57
|
+
alex.email.should == 'alex@example.com'
|
58
|
+
end
|
59
|
+
it 'should give empty list when nothing matches' do
|
60
|
+
alexes = AddressBook::Person.find_by_email unique_email
|
61
|
+
alexes.should.be.nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
describe '.where' do
|
65
|
+
it 'should find matches' do
|
66
|
+
alexes = AddressBook::Person.where(:email => 'alex@example.com')
|
67
|
+
alexes.should.not.be.empty
|
68
|
+
alexes.each do |alex|
|
69
|
+
alex.email.should == 'alex@example.com'
|
70
|
+
end
|
71
|
+
end
|
72
|
+
it 'should give empty list when nothing matches' do
|
73
|
+
alexes = AddressBook::Person.where(:email => unique_email)
|
74
|
+
alexes.should == []
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# describe 'new or existing' do
|
80
|
+
# before do
|
81
|
+
# AddressBook::Person.create(:first_name => 'Alex', :last_name => 'Testy', :email => 'alex@example.com')
|
82
|
+
# end
|
83
|
+
# it 'should find an existing person' do
|
84
|
+
# alex = AddressBook::Person.find_or_new_by_email('alex@example.com')
|
85
|
+
# alex.should.not.be.new_record
|
86
|
+
# alex.email.should == 'alex@example.com'
|
87
|
+
# alex.first_name.should == 'Alex'
|
88
|
+
# alex.last_name.should == 'Testy'
|
89
|
+
# end
|
90
|
+
# it 'should return new person when no match found' do
|
91
|
+
# never_before_used_email = unique_email
|
92
|
+
# alex = AddressBook::Person.find_or_new_by_email(never_before_used_email)
|
93
|
+
# alex.should.be.new_record
|
94
|
+
# alex.email.should == never_before_used_email
|
95
|
+
# alex.first_name.should == nil
|
96
|
+
# end
|
97
|
+
# end
|
98
|
+
end
|
99
|
+
|
20
100
|
describe 'save' do
|
21
101
|
before do
|
22
|
-
unique_email = "alex_#{Time.now.to_i}@example.com"
|
23
102
|
@attributes = {:first_name=>'Alex', :last_name=>'Testy',
|
24
103
|
:job_title => 'Developer', :department => 'Development', :organization => 'The Company',
|
25
104
|
:mobile_phone => '123 456 7890', :office_phone => '987 654 3210',
|
@@ -73,7 +152,6 @@ describe AddressBook::Person do
|
|
73
152
|
@ab_person.photo = data
|
74
153
|
UIImagePNGRepresentation(@ab_person.photo).should.equal data
|
75
154
|
end
|
76
|
-
|
77
155
|
end
|
78
156
|
|
79
157
|
it 'should be able to get the phone numbers' do
|
@@ -100,7 +178,7 @@ describe AddressBook::Person do
|
|
100
178
|
@attributes[:job_title ] = 'i got promoted'
|
101
179
|
@attributes[:office_phone] = '111 222 3333'
|
102
180
|
# @attributes[:department ] = nil
|
103
|
-
@ab_person = AddressBook::Person.
|
181
|
+
@ab_person = AddressBook::Person.find_or_new_by_email(@attributes[:email])
|
104
182
|
end
|
105
183
|
|
106
184
|
it 'should know it is not new' do
|
@@ -110,23 +188,12 @@ describe AddressBook::Person do
|
|
110
188
|
end
|
111
189
|
|
112
190
|
describe 'updating' do
|
113
|
-
before do
|
114
|
-
@ab_person.save
|
115
|
-
@new_ab_person = AddressBook::Person.new :first_name=>@attributes[:first_name], :email => @attributes[:email]
|
116
|
-
end
|
117
191
|
it 'should be able to get each of the single value fields' do
|
118
|
-
@
|
119
|
-
@new_ab_person.
|
120
|
-
@new_ab_person.
|
121
|
-
@new_ab_person.
|
122
|
-
@
|
123
|
-
end
|
124
|
-
it 'should be able to get the phone numbers (we never delete and just add - not sure if this is "right")' do
|
125
|
-
@new_ab_person.phone_number_values.should.equal [@attributes[:mobile_phone], '987 654 3210', @attributes[:office_phone]]
|
126
|
-
end
|
127
|
-
|
128
|
-
it 'should be able to get the emails' do
|
129
|
-
@new_ab_person.email_values.should.equal [@attributes[:email] ]
|
192
|
+
@ab_person.save
|
193
|
+
@new_ab_person = AddressBook::Person.find_by_email @ab_person.email
|
194
|
+
@new_ab_person.first_name = 'New First Name'
|
195
|
+
@new_ab_person.save
|
196
|
+
AddressBook::Person.find_by_email(@ab_person.email).first_name.should == 'New First Name'
|
130
197
|
end
|
131
198
|
end
|
132
199
|
|
@@ -134,4 +201,70 @@ describe AddressBook::Person do
|
|
134
201
|
|
135
202
|
end
|
136
203
|
|
204
|
+
describe 'method missing magic' do
|
205
|
+
before do
|
206
|
+
@person = AddressBook::Person.new
|
207
|
+
end
|
208
|
+
describe 'getters' do
|
209
|
+
it 'should have a getter for each attribute' do
|
210
|
+
@person.getter?('first_name' ).should.be truthy
|
211
|
+
@person.getter?('last_name' ).should.be truthy
|
212
|
+
@person.getter?('job_title' ).should.be truthy
|
213
|
+
@person.getter?('department' ).should.be truthy
|
214
|
+
@person.getter?('organization').should.be truthy
|
215
|
+
end
|
216
|
+
it 'should know what is not a getter' do
|
217
|
+
@person.getter?('nonesense' ).should.be falsey
|
218
|
+
@person.getter?('first_name=' ).should.be falsey
|
219
|
+
@person.getter?('find_all_by_email').should.be falsey
|
220
|
+
@person.getter?('find_by_email' ).should.be falsey
|
221
|
+
end
|
222
|
+
end
|
223
|
+
describe 'setters' do
|
224
|
+
it 'should have a setter for each attribute' do
|
225
|
+
@person.setter?('first_name=' ).should.be truthy
|
226
|
+
@person.setter?('last_name=' ).should.be truthy
|
227
|
+
@person.setter?('job_title=' ).should.be truthy
|
228
|
+
@person.setter?('department=' ).should.be truthy
|
229
|
+
@person.setter?('organization=').should.be truthy
|
230
|
+
end
|
231
|
+
it 'should know what is not a setter' do
|
232
|
+
@person.setter?('nonesense=' ).should.be falsey
|
233
|
+
@person.setter?('first_name' ).should.be falsey
|
234
|
+
@person.setter?('find_all_by_email').should.be falsey
|
235
|
+
@person.setter?('find_by_email' ).should.be falsey
|
236
|
+
end
|
237
|
+
end
|
238
|
+
describe 'all_finders' do
|
239
|
+
it 'should have a finder for each attribute' do
|
240
|
+
AddressBook::Person.all_finder?('find_all_by_first_name' ).should.be truthy
|
241
|
+
AddressBook::Person.all_finder?('find_all_by_last_name' ).should.be truthy
|
242
|
+
AddressBook::Person.all_finder?('find_all_by_job_title' ).should.be truthy
|
243
|
+
AddressBook::Person.all_finder?('find_all_by_department' ).should.be truthy
|
244
|
+
AddressBook::Person.all_finder?('find_all_by_organization').should.be truthy
|
245
|
+
end
|
246
|
+
it 'should know what is not a finder' do
|
247
|
+
AddressBook::Person.all_finder?('nonesense' ).should.be falsey
|
248
|
+
AddressBook::Person.all_finder?('first_name' ).should.be falsey
|
249
|
+
AddressBook::Person.all_finder?('first_name=' ).should.be falsey
|
250
|
+
AddressBook::Person.all_finder?('find_by_email').should.be falsey
|
251
|
+
end
|
252
|
+
end
|
253
|
+
describe 'first_finders' do
|
254
|
+
it 'should have a finder for each attribute' do
|
255
|
+
AddressBook::Person.first_finder?('find_by_first_name' ).should.be truthy
|
256
|
+
AddressBook::Person.first_finder?('find_by_last_name' ).should.be truthy
|
257
|
+
AddressBook::Person.first_finder?('find_by_job_title' ).should.be truthy
|
258
|
+
AddressBook::Person.first_finder?('find_by_department' ).should.be truthy
|
259
|
+
AddressBook::Person.first_finder?('find_by_organization').should.be truthy
|
260
|
+
end
|
261
|
+
it 'should know what is not a finder' do
|
262
|
+
AddressBook::Person.first_finder?('nonesense' ).should.be falsey
|
263
|
+
AddressBook::Person.first_finder?('first_name' ).should.be falsey
|
264
|
+
AddressBook::Person.first_finder?('first_name=' ).should.be falsey
|
265
|
+
AddressBook::Person.first_finder?('find_all_by_email').should.be falsey
|
266
|
+
end
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
137
270
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion-addressbook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.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-
|
12
|
+
date: 2012-08-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bubble-wrap
|
@@ -79,6 +79,8 @@ files:
|
|
79
79
|
- motion/address_book/person.rb
|
80
80
|
- spec/address_book/multi_value_spec.rb
|
81
81
|
- spec/address_book/person_spec.rb
|
82
|
+
- spec/helpers/bacon_matchers.rb
|
83
|
+
- spec/helpers/person_helpers.rb
|
82
84
|
homepage: ''
|
83
85
|
licenses: []
|
84
86
|
post_install_message:
|
@@ -93,7 +95,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
93
95
|
version: '0'
|
94
96
|
segments:
|
95
97
|
- 0
|
96
|
-
hash:
|
98
|
+
hash: 2222188653506619315
|
97
99
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
100
|
none: false
|
99
101
|
requirements:
|
@@ -102,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
104
|
version: '0'
|
103
105
|
segments:
|
104
106
|
- 0
|
105
|
-
hash:
|
107
|
+
hash: 2222188653506619315
|
106
108
|
requirements: []
|
107
109
|
rubyforge_project:
|
108
110
|
rubygems_version: 1.8.24
|
@@ -112,3 +114,5 @@ summary: A RubyMotion wrapper around the iOS Address Book framework
|
|
112
114
|
test_files:
|
113
115
|
- spec/address_book/multi_value_spec.rb
|
114
116
|
- spec/address_book/person_spec.rb
|
117
|
+
- spec/helpers/bacon_matchers.rb
|
118
|
+
- spec/helpers/person_helpers.rb
|