the-city-admin 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/lib/api/address.rb +51 -0
- data/lib/api/address_list.rb +62 -0
- data/lib/api/api_object.rb +100 -0
- data/lib/api/barcode.rb +43 -0
- data/lib/api/checkin.rb +37 -0
- data/lib/api/checkin_list.rb +62 -0
- data/lib/api/family.rb +47 -0
- data/lib/api/family_member.rb +28 -0
- data/lib/api/group.rb +162 -0
- data/lib/api/group_address.rb +31 -0
- data/lib/api/group_address_list.rb +63 -0
- data/lib/api/group_checkin.rb +36 -0
- data/lib/api/group_checkin_list.rb +63 -0
- data/lib/api/group_event_attendance.rb +28 -0
- data/lib/api/group_event_attendance_list.rb +63 -0
- data/lib/api/group_export.rb +22 -0
- data/lib/api/group_export_list.rb +63 -0
- data/lib/api/group_invitation.rb +26 -0
- data/lib/api/group_invitation_list.rb +63 -0
- data/lib/api/group_list.rb +74 -0
- data/lib/api/group_role.rb +27 -0
- data/lib/api/group_role_list.rb +62 -0
- data/lib/api/group_tag.rb +20 -0
- data/lib/api/group_tag_list.rb +62 -0
- data/lib/api/metric.rb +50 -0
- data/lib/api/metric_list.rb +72 -0
- data/lib/api/metric_measurement.rb +29 -0
- data/lib/api/metric_measurement_list.rb +62 -0
- data/lib/api/role.rb +43 -0
- data/lib/api/role_list.rb +73 -0
- data/lib/api/skill.rb +21 -0
- data/lib/api/skill_list.rb +73 -0
- data/lib/api/skilled_user_id_list.rb +73 -0
- data/lib/api/skilled_user_list.rb +73 -0
- data/lib/api/tag.rb +32 -0
- data/lib/api/tag_group_list.rb +73 -0
- data/lib/api/tag_list.rb +73 -0
- data/lib/api/terminology.rb +32 -0
- data/lib/api/terminology_list.rb +73 -0
- data/lib/api/user.rb +207 -0
- data/lib/api/user_address.rb +31 -0
- data/lib/api/user_address_list.rb +62 -0
- data/lib/api/user_admin_privilege.rb +28 -0
- data/lib/api/user_admin_privilege_list.rb +63 -0
- data/lib/api/user_barcode.rb +20 -0
- data/lib/api/user_count.rb +40 -0
- data/lib/api/user_family_list.rb +71 -0
- data/lib/api/user_family_member.rb +28 -0
- data/lib/api/user_invitation.rb +26 -0
- data/lib/api/user_invitation_list.rb +63 -0
- data/lib/api/user_list.rb +72 -0
- data/lib/api/user_note.rb +31 -0
- data/lib/api/user_note_list.rb +63 -0
- data/lib/api/user_process.rb +21 -0
- data/lib/api/user_process_list.rb +63 -0
- data/lib/api/user_role.rb +34 -0
- data/lib/api/user_role_list.rb +74 -0
- data/lib/api/user_skill.rb +22 -0
- data/lib/api/user_skill_list.rb +74 -0
- data/lib/api/web_hook.rb +34 -0
- data/lib/api/web_hook_list.rb +74 -0
- data/lib/auto_load.rb +23 -0
- data/lib/cachers/cache_adapter.rb +50 -0
- data/lib/cachers/file/json_cache.rb +135 -0
- data/lib/common.rb +124 -0
- data/lib/exceptions.rb +5 -0
- data/lib/readers/address_list_reader.rb +21 -0
- data/lib/readers/address_reader.rb +22 -0
- data/lib/readers/api_reader.rb +28 -0
- data/lib/readers/checkin_list_reader.rb +21 -0
- data/lib/readers/checkin_reader.rb +22 -0
- data/lib/readers/family_reader.rb +21 -0
- data/lib/readers/group_address_list_reader.rb +25 -0
- data/lib/readers/group_checkin_list_reader.rb +25 -0
- data/lib/readers/group_event_attendance_list_reader.rb +25 -0
- data/lib/readers/group_export_list_reader.rb +25 -0
- data/lib/readers/group_invitation_list_reader.rb +23 -0
- data/lib/readers/group_list_reader.rb +25 -0
- data/lib/readers/group_reader.rb +21 -0
- data/lib/readers/group_role_list_reader.rb +23 -0
- data/lib/readers/group_tag_list_reader.rb +23 -0
- data/lib/readers/metric_list_reader.rb +22 -0
- data/lib/readers/metric_measurement_list_reader.rb +21 -0
- data/lib/readers/metric_measurement_reader.rb +22 -0
- data/lib/readers/metric_reader.rb +21 -0
- data/lib/readers/role_list_reader.rb +21 -0
- data/lib/readers/skill_list_reader.rb +21 -0
- data/lib/readers/skilled_user_id_list_reader.rb +22 -0
- data/lib/readers/skilled_user_list_reader.rb +22 -0
- data/lib/readers/tag_group_list_reader.rb +22 -0
- data/lib/readers/tag_list_reader.rb +22 -0
- data/lib/readers/tag_reader.rb +22 -0
- data/lib/readers/terminology_list_reader.rb +22 -0
- data/lib/readers/terminology_reader.rb +22 -0
- data/lib/readers/user_address_list_reader.rb +25 -0
- data/lib/readers/user_admin_privilege_list_reader.rb +23 -0
- data/lib/readers/user_count_reader.rb +32 -0
- data/lib/readers/user_family_list_reader.rb +24 -0
- data/lib/readers/user_invitation_list_reader.rb +23 -0
- data/lib/readers/user_list_reader.rb +25 -0
- data/lib/readers/user_note_list_reader.rb +23 -0
- data/lib/readers/user_process_list_reader.rb +23 -0
- data/lib/readers/user_reader.rb +24 -0
- data/lib/readers/user_role_list_reader.rb +23 -0
- data/lib/readers/user_skill_list_reader.rb +23 -0
- data/lib/readers/web_hook_list_reader.rb +21 -0
- data/lib/the_city_admin.rb +82 -0
- data/lib/writers/api_writer.rb +54 -0
- data/lib/writers/family_writer.rb +25 -0
- data/lib/writers/group_address_writer.rb +32 -0
- data/lib/writers/group_writer.rb +25 -0
- data/lib/writers/metric_measurement_writer.rb +25 -0
- data/lib/writers/metric_writer.rb +29 -0
- data/lib/writers/skill_writer.rb +25 -0
- data/lib/writers/tag_writer.rb +27 -0
- data/lib/writers/terminology_writer.rb +19 -0
- data/lib/writers/user_address_writer.rb +32 -0
- data/lib/writers/user_admin_privilege_writer.rb +24 -0
- data/lib/writers/user_invitation_writer.rb +23 -0
- data/lib/writers/user_note_writer.rb +25 -0
- data/lib/writers/user_role_writer.rb +28 -0
- data/lib/writers/user_skill_writer.rb +23 -0
- data/lib/writers/user_writer.rb +46 -0
- data/lib/writers/web_hook_writer.rb +20 -0
- metadata +184 -0
data/lib/api/tag_list.rb
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module TheCity
|
|
2
|
+
|
|
3
|
+
class TagList
|
|
4
|
+
|
|
5
|
+
include Enumerable
|
|
6
|
+
|
|
7
|
+
attr_reader :total_entries, :total_pages, :per_page, :current_page
|
|
8
|
+
|
|
9
|
+
# Constructor.
|
|
10
|
+
#
|
|
11
|
+
# @param options A hash of options for loading the list.
|
|
12
|
+
#
|
|
13
|
+
# Options:
|
|
14
|
+
# :page - The page number to get.
|
|
15
|
+
# :reader - The Reader to use to load the data.
|
|
16
|
+
#
|
|
17
|
+
#
|
|
18
|
+
# Examples:
|
|
19
|
+
# TagList.new
|
|
20
|
+
#
|
|
21
|
+
# TagList.new({:page => 2})
|
|
22
|
+
#
|
|
23
|
+
def initialize(options = {})
|
|
24
|
+
options[:page] ||= 1
|
|
25
|
+
reader = options[:reader] || TheCity::TagListReader.new(options)
|
|
26
|
+
@json_data = reader.load_feed
|
|
27
|
+
|
|
28
|
+
@total_entries = @json_data['total_entries']
|
|
29
|
+
@total_pages = @json_data['total_pages']
|
|
30
|
+
@per_page = @json_data['per_page']
|
|
31
|
+
@current_page = @json_data['current_page']
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# All the tags in the list.
|
|
36
|
+
#
|
|
37
|
+
# @return array of tag names.
|
|
38
|
+
def all_tags
|
|
39
|
+
return [] if @json_data['tags'].nil?
|
|
40
|
+
@json_data['tags'].collect { |tag| tag['name'] }
|
|
41
|
+
end
|
|
42
|
+
alias :tags :all_tags
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# Get the specified tag.
|
|
46
|
+
#
|
|
47
|
+
# @param index The index of the tag to get.
|
|
48
|
+
#
|
|
49
|
+
# @return [Tag]
|
|
50
|
+
def [](index)
|
|
51
|
+
Tag.new( @json_data['tags'][index] ) if @json_data['tags'][index]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
# This method is needed for Enumerable.
|
|
56
|
+
def each &block
|
|
57
|
+
@json_data['tags'].each{ |tag| yield( Tag.new(tag) )}
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# Alias the count method
|
|
62
|
+
alias :size :count
|
|
63
|
+
|
|
64
|
+
# Checks if the list is empty.
|
|
65
|
+
#
|
|
66
|
+
# @return True on empty, false otherwise.
|
|
67
|
+
def empty?
|
|
68
|
+
@json_data['tags'].empty?
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module TheCity
|
|
2
|
+
|
|
3
|
+
class Terminology < ApiObject
|
|
4
|
+
|
|
5
|
+
tc_attr_accessor :term,
|
|
6
|
+
:label
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# Loads the terminology by the specified term.
|
|
10
|
+
#
|
|
11
|
+
# @param term The term of the Terminology to load.
|
|
12
|
+
#
|
|
13
|
+
# Returns a new {Terminology} object.
|
|
14
|
+
def self.load_by_term(term)
|
|
15
|
+
reader = TerminologyReader.new(term)
|
|
16
|
+
self.new(reader.load_feed)
|
|
17
|
+
rescue
|
|
18
|
+
nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Constructor.
|
|
22
|
+
#
|
|
23
|
+
# @param json_data JSON data of the Terminology.
|
|
24
|
+
def initialize(json_data)
|
|
25
|
+
@writer_object = TerminologyWriter
|
|
26
|
+
self.term = json_data.keys[0]
|
|
27
|
+
self.label = json_data.values[0]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module TheCity
|
|
2
|
+
|
|
3
|
+
class TerminologyList
|
|
4
|
+
|
|
5
|
+
include Enumerable
|
|
6
|
+
|
|
7
|
+
attr_reader :total_entries, :total_pages, :per_page, :current_page
|
|
8
|
+
|
|
9
|
+
# Constructor.
|
|
10
|
+
#
|
|
11
|
+
# @param options A hash of options for loading the list.
|
|
12
|
+
#
|
|
13
|
+
# Options:
|
|
14
|
+
# :page - The page number to get.
|
|
15
|
+
# :reader - The Reader to use to load the data.
|
|
16
|
+
#
|
|
17
|
+
#
|
|
18
|
+
# Examples:
|
|
19
|
+
# TerminologyList.new
|
|
20
|
+
#
|
|
21
|
+
# TerminologyList.new({:page => 2})
|
|
22
|
+
#
|
|
23
|
+
def initialize(options = {})
|
|
24
|
+
options[:page] ||= 1
|
|
25
|
+
reader = options[:reader] || TheCity::TerminologyListReader.new(options)
|
|
26
|
+
@json_data = reader.load_feed
|
|
27
|
+
|
|
28
|
+
@total_entries = @json_data['total_entries']
|
|
29
|
+
@total_pages = @json_data['total_pages']
|
|
30
|
+
@per_page = @json_data['per_page']
|
|
31
|
+
@current_page = @json_data['current_page']
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# All the terms in the list.
|
|
36
|
+
#
|
|
37
|
+
# @return array of term names.
|
|
38
|
+
def all_labels
|
|
39
|
+
return [] if @json_data['labels'].nil?
|
|
40
|
+
@json_data['labels'].collect { |label| label.values[0] }
|
|
41
|
+
end
|
|
42
|
+
alias :labels :all_labels
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# Get the specified tag.
|
|
46
|
+
#
|
|
47
|
+
# @param index The index of the tag to get.
|
|
48
|
+
#
|
|
49
|
+
# @return [Tag]
|
|
50
|
+
def [](index)
|
|
51
|
+
Terminology.new( @json_data['labels'][index] ) if @json_data['labels'][index]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
# This method is needed for Enumerable.
|
|
56
|
+
def each &block
|
|
57
|
+
@json_data['labels'].each{ |tag| yield( Terminology.new(tag) )}
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# Alias the count method
|
|
62
|
+
alias :size :count
|
|
63
|
+
|
|
64
|
+
# Checks if the list is empty.
|
|
65
|
+
#
|
|
66
|
+
# @return True on empty, false otherwise.
|
|
67
|
+
def empty?
|
|
68
|
+
@json_data['labels'].empty?
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
data/lib/api/user.rb
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
module TheCity
|
|
2
|
+
|
|
3
|
+
class User < ApiObject
|
|
4
|
+
Gender = {:male => 'Male', :female => 'Female'}
|
|
5
|
+
PhoneType = {:home => 'Home', :work => 'Work', :mobile => 'Mobile'}
|
|
6
|
+
MaritalStatus = {:never_married => 'Never Married', :engaged => 'Engaged',
|
|
7
|
+
:married => 'Married', :separated => 'Separated',
|
|
8
|
+
:divorced => 'Divorced', :remarried => 'Re-Married',
|
|
9
|
+
:widowed => 'Widowed', :cohabiting => 'Cohabiting'}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
tc_attr_accessor :admin_url,
|
|
13
|
+
:api_url,
|
|
14
|
+
:internal_url,
|
|
15
|
+
:updated_at,
|
|
16
|
+
:last_logged_in,
|
|
17
|
+
:secondary_phone,
|
|
18
|
+
:last_engaged,
|
|
19
|
+
:title,
|
|
20
|
+
:internal_url,
|
|
21
|
+
:id,
|
|
22
|
+
:first,
|
|
23
|
+
:primary_campus_name,
|
|
24
|
+
:last,
|
|
25
|
+
:head_of_household,
|
|
26
|
+
:nickname,
|
|
27
|
+
:active,
|
|
28
|
+
:primary_phone_type,
|
|
29
|
+
:primary_phone,
|
|
30
|
+
:member_since,
|
|
31
|
+
:birthdate,
|
|
32
|
+
:email_bouncing,
|
|
33
|
+
:secondary_phone_type,
|
|
34
|
+
:primary_campus_id,
|
|
35
|
+
:contact_updated_at,
|
|
36
|
+
:type,
|
|
37
|
+
:staff,
|
|
38
|
+
:created_at,
|
|
39
|
+
:gender,
|
|
40
|
+
:external_id_1,
|
|
41
|
+
:external_id_2,
|
|
42
|
+
:external_id_3,
|
|
43
|
+
:middle,
|
|
44
|
+
:email
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
# Loads the user by the specified ID.
|
|
48
|
+
#
|
|
49
|
+
# @param user_id The ID of the user to load.
|
|
50
|
+
#
|
|
51
|
+
# Returns a new {User} object.
|
|
52
|
+
def self.load_by_id(user_id)
|
|
53
|
+
reader = UserReader.new(user_id)
|
|
54
|
+
self.new(reader.load_feed)
|
|
55
|
+
rescue
|
|
56
|
+
nil
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# Constructor.
|
|
61
|
+
#
|
|
62
|
+
# @param json_data (optional) The object that has the data. This can be a {UserReader} or Hash object.
|
|
63
|
+
# @param options (optional) Options for including more information.
|
|
64
|
+
def initialize(json_data = nil, options = {})
|
|
65
|
+
@writer_object = UserWriter
|
|
66
|
+
initialize_from_json_object(json_data) unless json_data.nil?
|
|
67
|
+
|
|
68
|
+
@address_list = nil
|
|
69
|
+
@family_list = nil
|
|
70
|
+
@note_list = nil
|
|
71
|
+
@role_list = nil
|
|
72
|
+
@skill_list = nil
|
|
73
|
+
@process_list = nil
|
|
74
|
+
@invitation_list = nil
|
|
75
|
+
@admin_privilege_list = nil
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
# The first and last name of the user.
|
|
80
|
+
#
|
|
81
|
+
# @return A string of the full name
|
|
82
|
+
def full_name
|
|
83
|
+
use_name = self.nickname.to_s.empty? ? self.first : self.nickname
|
|
84
|
+
[use_name, self.last].compact.join(' ')
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
# Address information.
|
|
89
|
+
#
|
|
90
|
+
# @param force_reload (optional) Data is cached on first call. If data needs to be
|
|
91
|
+
# reloaded from the server on a subsequent call then
|
|
92
|
+
# a force reload is need.
|
|
93
|
+
#
|
|
94
|
+
# @return [UserAddressList]
|
|
95
|
+
def addresses(force_reload = false)
|
|
96
|
+
unless force_reload
|
|
97
|
+
return @address_list unless @address_list.nil?
|
|
98
|
+
end
|
|
99
|
+
return nil unless self.id
|
|
100
|
+
|
|
101
|
+
@address_list = UserAddressList.new({:user_id => self.id})
|
|
102
|
+
return @address_list
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
# The family information.
|
|
107
|
+
#
|
|
108
|
+
# @return [UserFamilyList]
|
|
109
|
+
def family(force_reload = false)
|
|
110
|
+
unless force_reload
|
|
111
|
+
return @family_list unless @user_list.nil?
|
|
112
|
+
end
|
|
113
|
+
return nil unless self.id
|
|
114
|
+
|
|
115
|
+
@family_list = UserFamilyList.new({:user_id => self.id})
|
|
116
|
+
return @family_list
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
# The notes for this user.
|
|
121
|
+
#
|
|
122
|
+
# @return [UserNoteList]
|
|
123
|
+
def notes(force_reload = false)
|
|
124
|
+
unless force_reload
|
|
125
|
+
return @note_list unless @note_list.nil?
|
|
126
|
+
end
|
|
127
|
+
return nil unless self.id
|
|
128
|
+
|
|
129
|
+
@note_list = UserNoteList.new({:user_id => self.id})
|
|
130
|
+
return @note_list
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
# The roles for this user.
|
|
135
|
+
#
|
|
136
|
+
# @return [UserRoleList]
|
|
137
|
+
def roles(force_reload = false)
|
|
138
|
+
unless force_reload
|
|
139
|
+
return @role_list unless @role_list.nil?
|
|
140
|
+
end
|
|
141
|
+
return nil unless self.id
|
|
142
|
+
|
|
143
|
+
@role_list = UserRoleList.new({:user_id => self.id})
|
|
144
|
+
return @role_list
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
# The skills for this user.
|
|
149
|
+
#
|
|
150
|
+
# @return [UserSkillList]
|
|
151
|
+
def skills(force_reload = false)
|
|
152
|
+
unless force_reload
|
|
153
|
+
return @skill_list unless @skill_list.nil?
|
|
154
|
+
end
|
|
155
|
+
return nil unless self.id
|
|
156
|
+
|
|
157
|
+
@skill_list = UserSkillList.new({:user_id => self.id})
|
|
158
|
+
return @skill_list
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
# The processes for this user.
|
|
163
|
+
#
|
|
164
|
+
# @return [UserProcessList]
|
|
165
|
+
def processes(force_reload = false)
|
|
166
|
+
unless force_reload
|
|
167
|
+
return @process_list unless @process_list.nil?
|
|
168
|
+
end
|
|
169
|
+
return nil unless self.id
|
|
170
|
+
|
|
171
|
+
@process_list = UserProcessList.new({:user_id => self.id})
|
|
172
|
+
return @process_list
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
# The invitations for this user.
|
|
177
|
+
#
|
|
178
|
+
# @return [UserInvitationList]
|
|
179
|
+
def invitations(force_reload = false)
|
|
180
|
+
unless force_reload
|
|
181
|
+
return @invitation_list unless @invitation_list.nil?
|
|
182
|
+
end
|
|
183
|
+
return nil unless self.id
|
|
184
|
+
|
|
185
|
+
@invitation_list = UserInvitationList.new({:user_id => self.id})
|
|
186
|
+
return @invitation_list
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
# The invitations for this user.
|
|
191
|
+
#
|
|
192
|
+
# @return [UserAdminPrivilegeList]
|
|
193
|
+
def admin_privileges(force_reload = false)
|
|
194
|
+
unless force_reload
|
|
195
|
+
return @admin_privilege_list unless @admin_privilege_list.nil?
|
|
196
|
+
end
|
|
197
|
+
return nil unless self.id
|
|
198
|
+
|
|
199
|
+
@admin_privilege_list = UserAdminPrivilegeList.new({:user_id => self.id})
|
|
200
|
+
return @admin_privilege_list
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module TheCity
|
|
2
|
+
|
|
3
|
+
class UserAddress < ApiObject
|
|
4
|
+
|
|
5
|
+
tc_attr_accessor :city,
|
|
6
|
+
:created_at,
|
|
7
|
+
:id,
|
|
8
|
+
:latitude,
|
|
9
|
+
:location_type,
|
|
10
|
+
:longitude,
|
|
11
|
+
:privacy,
|
|
12
|
+
:state,
|
|
13
|
+
:street,
|
|
14
|
+
:updated_at,
|
|
15
|
+
:user_id,
|
|
16
|
+
:zipcode
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# Constructor.
|
|
20
|
+
#
|
|
21
|
+
# @param json_data (optional) JSON data of the user address.
|
|
22
|
+
def initialize(json_data = nil)
|
|
23
|
+
@writer_object = UserAddressWriter
|
|
24
|
+
initialize_from_json_object(json_data) unless json_data.nil?
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
module TheCity
|
|
2
|
+
|
|
3
|
+
class UserAddressList
|
|
4
|
+
|
|
5
|
+
include Enumerable
|
|
6
|
+
|
|
7
|
+
attr_reader :total_entries, :total_pages, :per_page, :current_page
|
|
8
|
+
|
|
9
|
+
# Constructor.
|
|
10
|
+
#
|
|
11
|
+
# @param options A hash of options for loading the list.
|
|
12
|
+
#
|
|
13
|
+
# Options:
|
|
14
|
+
# :user_id - The ID of the user to load the addresses for. (required)
|
|
15
|
+
# :page - The page number to get.
|
|
16
|
+
# :reader - The Reader to use to load the data.
|
|
17
|
+
#
|
|
18
|
+
#
|
|
19
|
+
# Examples:
|
|
20
|
+
# UserAddressList.new({:user_id => 12345})
|
|
21
|
+
#
|
|
22
|
+
# UserAddressList.new({:user_id => 12345, :page => 2})
|
|
23
|
+
#
|
|
24
|
+
def initialize(options = {})
|
|
25
|
+
reader = options[:reader] || TheCity::UserAddressListReader.new(options)
|
|
26
|
+
@json_data = reader.load_feed
|
|
27
|
+
|
|
28
|
+
@total_entries = @json_data['total_entries']
|
|
29
|
+
@total_pages = @json_data['total_pages']
|
|
30
|
+
@per_page = @json_data['per_page']
|
|
31
|
+
@current_page = @json_data['current_page']
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# Get the specified note.
|
|
36
|
+
#
|
|
37
|
+
# @param index The index of the note to get.
|
|
38
|
+
#
|
|
39
|
+
# @return [UserAddress]
|
|
40
|
+
def [](index)
|
|
41
|
+
UserAddress.new( @json_data['addresses'][index] ) if @json_data['addresses'][index]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# This method is needed for Enumerable.
|
|
46
|
+
def each &block
|
|
47
|
+
@json_data['addresses'].each{ |address| yield( UserAddress.new(address) )}
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
# Alias the count method
|
|
52
|
+
alias :size :count
|
|
53
|
+
|
|
54
|
+
# Checks if the list is empty.
|
|
55
|
+
#
|
|
56
|
+
# @return True on empty, false otherwise.
|
|
57
|
+
def empty?
|
|
58
|
+
@json_data['addresses'].empty?
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|