chute 0.0.2
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/.gitignore +5 -0
- data/Gemfile +4 -0
- data/README +125 -0
- data/Rakefile +11 -0
- data/chute.gemspec +22 -0
- data/config/chute.rb +0 -0
- data/lib/chute.rb +22 -0
- data/lib/chute/account.rb +58 -0
- data/lib/chute/app.rb +32 -0
- data/lib/chute/asset.rb +124 -0
- data/lib/chute/bundle.rb +72 -0
- data/lib/chute/chute.rb +203 -0
- data/lib/chute/collection.rb +47 -0
- data/lib/chute/comment.rb +32 -0
- data/lib/chute/exception.rb +7 -0
- data/lib/chute/http_service.rb +114 -0
- data/lib/chute/inbox.rb +41 -0
- data/lib/chute/parcel.rb +45 -0
- data/lib/chute/resource.rb +354 -0
- data/lib/chute/user.rb +113 -0
- data/lib/chute/util.rb +14 -0
- data/lib/chute/version.rb +3 -0
- data/test/test_sudoku.rb +7 -0
- metadata +69 -0
data/lib/chute/chute.rb
ADDED
@@ -0,0 +1,203 @@
|
|
1
|
+
module Chute
|
2
|
+
class GCChute < GCResource
|
3
|
+
|
4
|
+
CHUTE_STATUS = {
|
5
|
+
"401" => "Password Protected",
|
6
|
+
"200" => "Public"
|
7
|
+
}
|
8
|
+
|
9
|
+
attr_accessor :id,
|
10
|
+
:name,
|
11
|
+
:shortcut,
|
12
|
+
:created_at,
|
13
|
+
:updated_at,
|
14
|
+
:assets_count,
|
15
|
+
:members_count,
|
16
|
+
:contributors_count,
|
17
|
+
:moderate_photos,
|
18
|
+
:moderate_members,
|
19
|
+
:moderate_comments,
|
20
|
+
:permission_view,
|
21
|
+
:permission_add_photos,
|
22
|
+
:permission_add_members,
|
23
|
+
:permission_add_comments
|
24
|
+
|
25
|
+
def initialize(attributes = {})
|
26
|
+
super
|
27
|
+
@id = attributes[:id]
|
28
|
+
@name = attributes[:name]
|
29
|
+
@shortcut = attributes[:shortcut]
|
30
|
+
|
31
|
+
@created_at = attributes[:created_at]
|
32
|
+
@updated_at = attributes[:updated_at]
|
33
|
+
|
34
|
+
@assets_count = attributes[:assets_count]
|
35
|
+
@members_count = attributes[:members_count]
|
36
|
+
@contributors_count = attributes[:contributors_count]
|
37
|
+
|
38
|
+
@moderate_photos = attributes[:moderate_photos]
|
39
|
+
@moderate_members = attributes[:moderate_members]
|
40
|
+
@moderate_comments = attributes[:moderate_comments]
|
41
|
+
|
42
|
+
@permission_view = attributes[:permission_view]
|
43
|
+
@permission_add_photos = attributes[:permission_add_photos]
|
44
|
+
@permission_add_members = attributes[:permission_add_members]
|
45
|
+
@permission_add_comments = attributes[:permission_add_comments]
|
46
|
+
end
|
47
|
+
|
48
|
+
# Public: Fetch child chutes for a chute
|
49
|
+
#
|
50
|
+
# Returns GCCollection of GCChute
|
51
|
+
|
52
|
+
def children
|
53
|
+
self.class.perform(self.class.get("/chutes/#{id}/children"))
|
54
|
+
end
|
55
|
+
|
56
|
+
# Public: Send a join request for a chute.
|
57
|
+
#
|
58
|
+
# Password - String, required for password protected chutes.
|
59
|
+
#
|
60
|
+
# Returns membership details and status.
|
61
|
+
# Public Chute - Request accepted.
|
62
|
+
# Password-protected Chute - Password required.
|
63
|
+
# Private Chute - Request for approval sent to admin.
|
64
|
+
|
65
|
+
def join(password=nil)
|
66
|
+
response = self.class.get("/chutes/#{id}/join")
|
67
|
+
response.data
|
68
|
+
end
|
69
|
+
|
70
|
+
# Public: Leave a chute.
|
71
|
+
def leave
|
72
|
+
response = self.class.post("/chutes/#{id}/leave")
|
73
|
+
response.data
|
74
|
+
end
|
75
|
+
|
76
|
+
# Public: Fetch list of chute contributors.
|
77
|
+
def contributors
|
78
|
+
Chute::GCChute.perform(self.class.post("/chutes/#{id}/contributors"))
|
79
|
+
end
|
80
|
+
|
81
|
+
# Public: Fetch assets for a chute
|
82
|
+
#
|
83
|
+
# Returns GCCollection of GCAsset
|
84
|
+
def assets
|
85
|
+
Chute::GCAsset.perform(self.class.get("/chutes/#{id}/assets"))
|
86
|
+
end
|
87
|
+
|
88
|
+
# def add_assets(asset_ids)
|
89
|
+
# response = self.class.post("/chutes/#{id}/add_assets", :asset_ids => "#{asset_ids}")
|
90
|
+
# response.is_success
|
91
|
+
# end
|
92
|
+
|
93
|
+
# Public: Remove assets from a chute
|
94
|
+
#
|
95
|
+
# Example
|
96
|
+
#
|
97
|
+
# Chute::GCChute.remove_assets([1, 23, 56])
|
98
|
+
# # => true
|
99
|
+
#
|
100
|
+
# Returns boolean true or false
|
101
|
+
def remove_assets(asset_ids)
|
102
|
+
response = self.class.post("/chutes/#{id}/assets/remove", :asset_ids => asset_ids)
|
103
|
+
response.is_success
|
104
|
+
end
|
105
|
+
|
106
|
+
# Public: Comment on an asset in a chute
|
107
|
+
#
|
108
|
+
# text - String, comment
|
109
|
+
# asset_id - Identifier of the asset
|
110
|
+
#
|
111
|
+
# Example
|
112
|
+
#
|
113
|
+
# Chute::GCChute.add_comment("Nice Picture", 24)
|
114
|
+
# # => comment
|
115
|
+
#
|
116
|
+
# Returns GCComment instance
|
117
|
+
def add_comment(text, asset_id)
|
118
|
+
comment = Chute::GCComment.new
|
119
|
+
comment.perform(self.class.post("/chutes/#{id}/assets/#{asset_id}/comments", {:comment => "test comment by payal"}))
|
120
|
+
comment
|
121
|
+
end
|
122
|
+
|
123
|
+
# Public: Fetch comments for a asset
|
124
|
+
#
|
125
|
+
# asset_id - Identifier for asset
|
126
|
+
#
|
127
|
+
# Returns GCCollection of GCAsset
|
128
|
+
def comments(asset_id)
|
129
|
+
Chute::GCComment.perform(self.class.get("/chutes/#{id}/assets/#{asset_id}/comments"))
|
130
|
+
end
|
131
|
+
|
132
|
+
# Public: Returns pluralized name of the resource.
|
133
|
+
def resource_name
|
134
|
+
'chutes'
|
135
|
+
end
|
136
|
+
|
137
|
+
# Public: Fetch chute status from its shortcut.
|
138
|
+
# shortcut - String: shortcut of the chute.
|
139
|
+
#
|
140
|
+
# Example
|
141
|
+
#
|
142
|
+
# Chute::GCChute.fetch_status("adsvyh")
|
143
|
+
# # => public, password-protected or inaccessible
|
144
|
+
# Returns public, password-protected or inaccessibles string
|
145
|
+
|
146
|
+
def self.fetch_status(shortcut)
|
147
|
+
chute = Chute::GCChute.new
|
148
|
+
response = get("/chutes/#{shortcut}/public/assets.js")
|
149
|
+
CHUTE_STATUS[response.status] || "InAccessible"
|
150
|
+
end
|
151
|
+
|
152
|
+
# Public: Fetch chute from its shortcut.
|
153
|
+
# shortcut - String: shortcut of the chute.
|
154
|
+
#
|
155
|
+
# Example
|
156
|
+
#
|
157
|
+
# Chute::GCChute.find_by_shortcut("adsvyh")
|
158
|
+
# # => chute
|
159
|
+
# # => false if not found
|
160
|
+
# Returns GCChute.
|
161
|
+
|
162
|
+
def self.find_by_shortcut(shortcut)
|
163
|
+
chute = Chute::GCChute.new
|
164
|
+
chute.perform(get("/chutes/#{shortcut}"))
|
165
|
+
end
|
166
|
+
|
167
|
+
# Public: Fetch chute from its id.
|
168
|
+
# id - Integer: identifier.
|
169
|
+
#
|
170
|
+
# Example
|
171
|
+
#
|
172
|
+
# Chute::GCChute.find_by_id(23)
|
173
|
+
# # => chute
|
174
|
+
# # => false if not found
|
175
|
+
# Returns GCChute.
|
176
|
+
|
177
|
+
def self.find_by_id(id)
|
178
|
+
chute = Chute::GCChute.new
|
179
|
+
chute.perform(get("/chutes/#{id}")) ? chute : false
|
180
|
+
end
|
181
|
+
|
182
|
+
# Public: Fetch all chutes for the user.
|
183
|
+
#
|
184
|
+
# Returns GCCollection of GCChutes.
|
185
|
+
def self.all
|
186
|
+
self.perform(get("/me/chutes"))
|
187
|
+
end
|
188
|
+
|
189
|
+
# Public: Fetch chute heirarchy for the user
|
190
|
+
#
|
191
|
+
# Returns GCCollection of GCChute
|
192
|
+
|
193
|
+
def self.tree
|
194
|
+
perform(get("/chutes/tree"))
|
195
|
+
end
|
196
|
+
|
197
|
+
# Public: Returns pluralized name of the resource.
|
198
|
+
def self.class_path
|
199
|
+
"chutes"
|
200
|
+
end
|
201
|
+
|
202
|
+
end
|
203
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Chute
|
2
|
+
class GCCollection < Array
|
3
|
+
|
4
|
+
# Public: Append an item to collection
|
5
|
+
# single_or_array - Single item or an Array of item
|
6
|
+
#
|
7
|
+
# Example
|
8
|
+
#
|
9
|
+
# gc_collection = Chute::GCChute.all
|
10
|
+
# chute = Chute.new(:name => "New Chute Added")
|
11
|
+
# chute.save
|
12
|
+
#
|
13
|
+
# gc_collection.append(chute)
|
14
|
+
# # => appends the chute to the colection
|
15
|
+
# Returns GCCollection.
|
16
|
+
|
17
|
+
def append(single_or_array)
|
18
|
+
if Array === single_or_array
|
19
|
+
self.concat(single_or_array)
|
20
|
+
else
|
21
|
+
self << single_or_array
|
22
|
+
end
|
23
|
+
self.uniq!
|
24
|
+
end
|
25
|
+
|
26
|
+
# Public: Remove an item to collection
|
27
|
+
# single_or_array - Single item or an Array of item
|
28
|
+
#
|
29
|
+
# Example
|
30
|
+
#
|
31
|
+
# gc_collection = Chute::GCChute.all
|
32
|
+
# chute = Chute.find_by_id(23)
|
33
|
+
#
|
34
|
+
# gc_collection.remove(chute)
|
35
|
+
# # => remove the chute from the colection
|
36
|
+
# Returns GCCollection.
|
37
|
+
|
38
|
+
def remove(single_or_array)
|
39
|
+
if Array === single_or_array
|
40
|
+
self.reject!{|elem| single_or_array.include?(elem)}
|
41
|
+
else
|
42
|
+
self.delete(single_or_array)
|
43
|
+
end
|
44
|
+
self.uniq!
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Chute
|
2
|
+
class GCComment < GCResource
|
3
|
+
attr_accessor :id,
|
4
|
+
:status,
|
5
|
+
:comment
|
6
|
+
|
7
|
+
def initialize(attributes = {})
|
8
|
+
super
|
9
|
+
@id = id
|
10
|
+
@status = status
|
11
|
+
@comment = comment
|
12
|
+
end
|
13
|
+
|
14
|
+
# Public: Returns pluralized name of the resource.
|
15
|
+
def resource_name
|
16
|
+
"comments"
|
17
|
+
end
|
18
|
+
|
19
|
+
def save
|
20
|
+
raise NotImplementedError
|
21
|
+
end
|
22
|
+
|
23
|
+
def update
|
24
|
+
raise NotImplementedError
|
25
|
+
end
|
26
|
+
|
27
|
+
# Public: Returns pluralized name of the resource.
|
28
|
+
def class_path
|
29
|
+
"comments"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
module Chute
|
2
|
+
class GCRequest
|
3
|
+
include HTTParty
|
4
|
+
|
5
|
+
HEADERS = {"authorization" => API_KEY}
|
6
|
+
|
7
|
+
base_uri API_URL
|
8
|
+
|
9
|
+
# Public: Get request to a specific URL.
|
10
|
+
#
|
11
|
+
# url - relative url.
|
12
|
+
# params - parameters hash.
|
13
|
+
# headers - headers hash.
|
14
|
+
#
|
15
|
+
# Returns a GCResponse.
|
16
|
+
|
17
|
+
def get(url, params=nil, header_options=nil)
|
18
|
+
GCResponse.new(GCRequest.get(url, {:body => params, :headers => get_headers(header_options)}))
|
19
|
+
end
|
20
|
+
|
21
|
+
# Public: Post request to a specific URL.
|
22
|
+
#
|
23
|
+
# url - relative url.
|
24
|
+
# params - parameters hash.
|
25
|
+
# headers - headers hash.
|
26
|
+
#
|
27
|
+
# Returns a GCResponse.
|
28
|
+
|
29
|
+
def post(url, params=nil, header_options=nil)
|
30
|
+
GCResponse.new(GCRequest.post(url, {:body => params, :headers => get_headers(header_options)}))
|
31
|
+
end
|
32
|
+
|
33
|
+
# Public: Put request to a specific URL.
|
34
|
+
#
|
35
|
+
# url - relative url.
|
36
|
+
# params - parameters hash.
|
37
|
+
# headers - headers hash.
|
38
|
+
#
|
39
|
+
# Returns a GCResponse.
|
40
|
+
|
41
|
+
def put(url, params=nil, header_options=nil)
|
42
|
+
GCResponse.new(GCRequest.put(url, {:body => params, :headers => get_headers(header_options)}))
|
43
|
+
end
|
44
|
+
|
45
|
+
# Public: Delete request to a specific URL.
|
46
|
+
#
|
47
|
+
# url - relative url.
|
48
|
+
# params - parameters hash.
|
49
|
+
# headers - headers hash.
|
50
|
+
#
|
51
|
+
# Returns a GCResponse.
|
52
|
+
|
53
|
+
def delete(url, params=nil, header_options=nil)
|
54
|
+
GCResponse.new(GCRequest.delete(url, {:body => params, :headers => get_headers(header_options)}))
|
55
|
+
end
|
56
|
+
|
57
|
+
protected
|
58
|
+
|
59
|
+
# Protected: Add custom headers to default header options.
|
60
|
+
#
|
61
|
+
# header_options - Hash, header options.
|
62
|
+
#
|
63
|
+
# Returns final header Hash
|
64
|
+
|
65
|
+
def get_headers(header_options)
|
66
|
+
Hash === header_options ? header_options.merge(HEADERS) : HEADERS
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
class GCResponse
|
72
|
+
attr_reader :raw_response, :data, :errors, :status, :is_success
|
73
|
+
def initialize(attributes = {})
|
74
|
+
@raw_response = attributes
|
75
|
+
@status = attributes.response.code
|
76
|
+
@errors = []
|
77
|
+
parse(attributes.parsed_response)
|
78
|
+
end
|
79
|
+
|
80
|
+
protected
|
81
|
+
|
82
|
+
# Protected: Parse the data from the response
|
83
|
+
#
|
84
|
+
# parsed_response - HTTParty parsed response
|
85
|
+
#
|
86
|
+
# In case,
|
87
|
+
# status code is,
|
88
|
+
# < 300 - successful, set GCResponse.data as the returned data
|
89
|
+
# 401 - failed, Raise UnAuthorized Exception (like API key invalid or missing)
|
90
|
+
# other - failed, set GCResponse.errors as the returned errors
|
91
|
+
#
|
92
|
+
# Returns a GCResponse.
|
93
|
+
|
94
|
+
def parse(parsed_response)
|
95
|
+
if status.to_i <= 300
|
96
|
+
if parsed_response["errors"]
|
97
|
+
@is_success = false
|
98
|
+
parsed_response["errors"].each do |error|
|
99
|
+
@errors << error
|
100
|
+
end
|
101
|
+
else
|
102
|
+
@is_success = true
|
103
|
+
@data = parsed_response["data"]
|
104
|
+
end
|
105
|
+
else
|
106
|
+
@is_success = false
|
107
|
+
@errors << parsed_response["error"]
|
108
|
+
if status == "401"
|
109
|
+
raise Chute::Exceptions::UnAuthorized, parsed_response["error"]
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
data/lib/chute/inbox.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
module Chute
|
2
|
+
class GCInbox
|
3
|
+
|
4
|
+
# Public: Fetch inbox information.
|
5
|
+
#
|
6
|
+
# Returns photo, comments, requests and invite count.
|
7
|
+
def self.info
|
8
|
+
request = GCRequest.new()
|
9
|
+
response = request.get("/#{class_path}")
|
10
|
+
response.data
|
11
|
+
end
|
12
|
+
|
13
|
+
# Public: Fetch list of invitations.
|
14
|
+
def self.invitations
|
15
|
+
request = GCRequest.new()
|
16
|
+
response = request.get("/#{class_path}/invites")
|
17
|
+
response.data
|
18
|
+
end
|
19
|
+
|
20
|
+
# Public: Fetch list of parcels.
|
21
|
+
def self.parcels
|
22
|
+
request = GCRequest.new()
|
23
|
+
Chute::GCParcel.perform(request.get("/#{class_path}/parcels"))
|
24
|
+
end
|
25
|
+
|
26
|
+
# Public: Fetch specific parcel data.
|
27
|
+
# parcel_id - String, Identifier for parcel
|
28
|
+
def self.parcel(parcel_id)
|
29
|
+
request = GCRequest.new()
|
30
|
+
parcel = Chute::GCParcel.new
|
31
|
+
parcel.perform(request.get("/#{class_path}/parcels/#{parcel_id}"))
|
32
|
+
parcel
|
33
|
+
end
|
34
|
+
|
35
|
+
# Public: Resource Name
|
36
|
+
def self.class_path
|
37
|
+
'inbox'
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|