zendesk_api 0.1.7 → 0.1.8
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/.yardopts +1 -1
- data/Gemfile.lock +3 -1
- data/Rakefile +1 -0
- data/Readme.md +38 -0
- data/lib/zendesk_api.rb +2 -3
- data/lib/zendesk_api/actions.rb +9 -2
- data/lib/zendesk_api/association.rb +28 -54
- data/lib/zendesk_api/client.rb +20 -5
- data/lib/zendesk_api/collection.rb +31 -16
- data/lib/zendesk_api/configuration.rb +1 -0
- data/lib/zendesk_api/helpers.rb +1 -0
- data/lib/zendesk_api/lru_cache.rb +1 -0
- data/lib/zendesk_api/middleware/request/etag_cache.rb +1 -0
- data/lib/zendesk_api/middleware/request/retry.rb +2 -0
- data/lib/zendesk_api/middleware/request/upload.rb +1 -0
- data/lib/zendesk_api/middleware/response/callback.rb +1 -0
- data/lib/zendesk_api/middleware/response/deflate.rb +1 -0
- data/lib/zendesk_api/middleware/response/gzip.rb +2 -0
- data/lib/zendesk_api/middleware/response/logger.rb +1 -0
- data/lib/zendesk_api/middleware/response/parse_iso_dates.rb +1 -0
- data/lib/zendesk_api/rescue.rb +2 -0
- data/lib/zendesk_api/resource.rb +11 -6
- data/lib/zendesk_api/resources.rb +319 -0
- data/lib/zendesk_api/sideloading.rb +1 -0
- data/lib/zendesk_api/track_changes.rb +3 -2
- data/lib/zendesk_api/trackie.rb +1 -0
- data/lib/zendesk_api/version.rb +1 -1
- data/spec/association_spec.rb +1 -1
- data/spec/client_spec.rb +13 -2
- data/spec/collection_spec.rb +7 -7
- data/spec/data_resource_spec.rb +53 -66
- data/spec/read_resource_spec.rb +1 -1
- data/spec/resource_spec.rb +6 -6
- data/spec/spec_helper.rb +1 -1
- data/util/resource_handler.rb +68 -0
- data/util/verb_handler.rb +16 -0
- data/zendesk_api.gemspec +3 -2
- metadata +27 -12
- data/lib/zendesk_api/resources/forum.rb +0 -51
- data/lib/zendesk_api/resources/misc.rb +0 -79
- data/lib/zendesk_api/resources/ticket.rb +0 -97
- data/lib/zendesk_api/resources/user.rb +0 -59
@@ -1,6 +1,6 @@
|
|
1
|
-
# Shamelessly stolen and modified from https://github.com/archan937/dirty_hashy
|
2
|
-
|
3
1
|
module ZendeskAPI
|
2
|
+
# Shamelessly stolen and modified from https://github.com/archan937/dirty_hashy
|
3
|
+
# @private
|
4
4
|
module TrackChanges
|
5
5
|
def self.included(base)
|
6
6
|
base.method_defined?(:regular_writer).tap do |defined|
|
@@ -17,6 +17,7 @@ module ZendeskAPI
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
# @private
|
20
21
|
module InstanceMethods
|
21
22
|
def clear_changes
|
22
23
|
each do |k, v|
|
data/lib/zendesk_api/trackie.rb
CHANGED
data/lib/zendesk_api/version.rb
CHANGED
data/spec/association_spec.rb
CHANGED
@@ -8,7 +8,7 @@ describe ZendeskAPI::Association do
|
|
8
8
|
context "has" do
|
9
9
|
before do
|
10
10
|
ZendeskAPI::TestResource.associations.clear
|
11
|
-
ZendeskAPI::TestResource.has :child, :class =>
|
11
|
+
ZendeskAPI::TestResource.has :child, :class => ZendeskAPI::TestResource::TestChild
|
12
12
|
end
|
13
13
|
|
14
14
|
it "should cache an set object" do
|
data/spec/client_spec.rb
CHANGED
@@ -117,7 +117,7 @@ describe ZendeskAPI::Client do
|
|
117
117
|
context "with a logger" do
|
118
118
|
let(:out){ StringIO.new }
|
119
119
|
subject { Logger.new(out) }
|
120
|
-
|
120
|
+
|
121
121
|
it "should log" do
|
122
122
|
@client.connection.builder.handlers.should include(ZendeskAPI::Middleware::Response::Logger)
|
123
123
|
end
|
@@ -154,8 +154,19 @@ describe ZendeskAPI::Client do
|
|
154
154
|
|
155
155
|
context "resources" do
|
156
156
|
it "should return an instance of ZendeskAPI::Collection if there is no method" do
|
157
|
+
subject.instance_variable_get(:@resource_cache)["tickets"].should be_nil
|
158
|
+
|
157
159
|
subject.tickets.should be_instance_of(ZendeskAPI::Collection)
|
158
|
-
|
160
|
+
|
161
|
+
subject.instance_variable_get(:@resource_cache)["tickets"].should_not be_empty
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should not cache calls with different options" do
|
165
|
+
subject.search(:query => 'abc').should_not == subject.search(:query => '123')
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should cache calls with the same options" do
|
169
|
+
subject.search(:query => 'abc').should == subject.search(:query => 'abc')
|
159
170
|
end
|
160
171
|
end
|
161
172
|
|
data/spec/collection_spec.rb
CHANGED
@@ -408,7 +408,7 @@ describe ZendeskAPI::Collection do
|
|
408
408
|
|
409
409
|
context "singular id on resource" do
|
410
410
|
before(:each) do
|
411
|
-
ZendeskAPI::TestResource.has
|
411
|
+
ZendeskAPI::TestResource.has ZendeskAPI::NilResource
|
412
412
|
|
413
413
|
stub_json_request(:get, %r{test_resources\?include=nil_resources}, json(
|
414
414
|
:test_resources => [{ :id => 1, :nil_resource_id => 4 }],
|
@@ -431,7 +431,7 @@ describe ZendeskAPI::Collection do
|
|
431
431
|
|
432
432
|
context "plural ids on resource" do
|
433
433
|
before(:each) do
|
434
|
-
ZendeskAPI::TestResource.has_many
|
434
|
+
ZendeskAPI::TestResource.has_many ZendeskAPI::NilResource
|
435
435
|
|
436
436
|
stub_json_request(:get, %r{test_resources\?include=nil_resources}, json(
|
437
437
|
:test_resources => [{ :id => 1, :nil_resource_ids => [1, 4] }],
|
@@ -454,7 +454,7 @@ describe ZendeskAPI::Collection do
|
|
454
454
|
|
455
455
|
context "ids in side load" do
|
456
456
|
before(:each) do
|
457
|
-
ZendeskAPI::TestResource.has_many
|
457
|
+
ZendeskAPI::TestResource.has_many ZendeskAPI::NilResource
|
458
458
|
|
459
459
|
stub_json_request(:get, %r{test_resources\?include=nil_resources}, json(
|
460
460
|
:test_resources => [{ :id => 1 }],
|
@@ -476,7 +476,7 @@ describe ZendeskAPI::Collection do
|
|
476
476
|
|
477
477
|
context "id in side load" do
|
478
478
|
before(:each) do
|
479
|
-
ZendeskAPI::TestResource.has
|
479
|
+
ZendeskAPI::TestResource.has ZendeskAPI::NilResource
|
480
480
|
|
481
481
|
stub_json_request(:get, %r{test_resources\?include=nil_resources}, json(
|
482
482
|
:test_resources => [{ :id => 1 }],
|
@@ -498,7 +498,7 @@ describe ZendeskAPI::Collection do
|
|
498
498
|
|
499
499
|
context "with name as key" do
|
500
500
|
before(:each) do
|
501
|
-
ZendeskAPI::TestResource.has
|
501
|
+
ZendeskAPI::TestResource.has ZendeskAPI::NilResource, :include_key => :name
|
502
502
|
|
503
503
|
stub_json_request(:get, %r{test_resources\?include=nil_resources}, json(
|
504
504
|
:test_resources => [{ :id => 1, :nil_resource_id => 4 }],
|
@@ -521,8 +521,8 @@ describe ZendeskAPI::Collection do
|
|
521
521
|
|
522
522
|
context "sub-loading" do
|
523
523
|
before(:each) do
|
524
|
-
ZendeskAPI::TestResource.has
|
525
|
-
ZendeskAPI::TestResource::TestChild.has
|
524
|
+
ZendeskAPI::TestResource.has ZendeskAPI::TestResource::TestChild
|
525
|
+
ZendeskAPI::TestResource::TestChild.has ZendeskAPI::NilResource
|
526
526
|
|
527
527
|
stub_json_request(:get, %r{test_resources\?include=nil_resources}, json(
|
528
528
|
:test_resources => [{ :id => 1, :test_child => { :nil_resource_id => 4 } }],
|
data/spec/data_resource_spec.rb
CHANGED
@@ -1,21 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe ZendeskAPI::DataResource do
|
4
|
-
context "ZendeskAPI.get_class" do
|
5
|
-
it "should create a new class if there is none" do
|
6
|
-
ZendeskAPI.const_defined?("Blergh").should be_false
|
7
|
-
ZendeskAPI.get_class(:blergh).should == ZendeskAPI::Blergh
|
8
|
-
end
|
9
|
-
|
10
|
-
it "should find the class if it exists" do
|
11
|
-
ZendeskAPI.get_class(:tickets).should == ZendeskAPI::Tickets
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should handle 'nil' be passed in" do
|
15
|
-
ZendeskAPI.get_class(nil).should be_false
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
4
|
specify "singular resource name" do
|
20
5
|
ZendeskAPI::Ticket.singular_resource_name.should == "ticket"
|
21
6
|
ZendeskAPI::TicketField.singular_resource_name.should == "ticket_field"
|
@@ -72,23 +57,20 @@ describe ZendeskAPI::DataResource do
|
|
72
57
|
end
|
73
58
|
|
74
59
|
context "has" do
|
75
|
-
before(:each) { ZendeskAPI::TestResource.has
|
60
|
+
before(:each) { ZendeskAPI::TestResource.has ZendeskAPI::TestResource }
|
76
61
|
|
77
62
|
context "class methods" do
|
78
63
|
subject { ZendeskAPI::TestResource }
|
79
|
-
it "should define a method with the same name" do
|
80
|
-
subject.instance_methods.map(&:to_s).should include("foo")
|
81
|
-
end
|
82
64
|
|
83
|
-
it "should
|
84
|
-
|
65
|
+
it "should define a method with the same name" do
|
66
|
+
subject.instance_methods.map(&:to_s).should include("test_resource")
|
85
67
|
end
|
86
68
|
|
87
69
|
context "with explicit class name" do
|
88
|
-
before(:all) { ZendeskAPI::TestResource.has :baz, :class =>
|
70
|
+
before(:all) { ZendeskAPI::TestResource.has :baz, :class => ZendeskAPI::TestResource }
|
89
71
|
|
90
|
-
it "should
|
91
|
-
|
72
|
+
it "should define a method with the same name" do
|
73
|
+
subject.instance_methods.map(&:to_s).should include("baz")
|
92
74
|
end
|
93
75
|
end
|
94
76
|
end
|
@@ -96,82 +78,83 @@ describe ZendeskAPI::DataResource do
|
|
96
78
|
context "instance method" do
|
97
79
|
context "with no side-loading" do
|
98
80
|
subject { ZendeskAPI::TestResource.new(client, :id => 1) }
|
99
|
-
before(:each) { stub_json_request(:get, %r{test_resources/\d+/
|
81
|
+
before(:each) { stub_json_request(:get, %r{test_resources/\d+/test_resource}, json(:test_resource => {})) }
|
100
82
|
|
101
83
|
it "should attempt to grab the resource from the host" do
|
102
|
-
subject.
|
84
|
+
subject.test_resource.should be_instance_of(ZendeskAPI::TestResource)
|
103
85
|
end
|
104
86
|
|
105
87
|
it "should pass the path on to the resource" do
|
106
|
-
subject.
|
88
|
+
subject.test_resource.path.should == "test_resources"
|
107
89
|
end
|
108
90
|
|
109
91
|
context "with a client error" do
|
110
|
-
before(:each) { stub_request(:get, %r{test_resources/\d+/
|
92
|
+
before(:each) { stub_request(:get, %r{test_resources/\d+/test_resource}).to_return(:status => 500) }
|
111
93
|
|
112
94
|
it "should handle it properly" do
|
113
|
-
expect { silence_logger{ subject.
|
95
|
+
expect { silence_logger{ subject.test_resource.should be_nil } }.to_not raise_error
|
114
96
|
end
|
115
97
|
end
|
116
|
-
|
98
|
+
|
117
99
|
context "with an explicit path set" do
|
118
100
|
before(:each) do
|
119
|
-
ZendeskAPI::TestResource.has
|
120
|
-
stub_json_request(:get, %r{test_resources/\d+/blergh}, json(:
|
101
|
+
ZendeskAPI::TestResource.has ZendeskAPI::TestResource, :path => "blergh"
|
102
|
+
stub_json_request(:get, %r{test_resources/\d+/blergh}, json(:test_resource => {}))
|
121
103
|
end
|
122
104
|
|
123
105
|
it "should call the right path" do
|
124
|
-
subject.
|
106
|
+
subject.test_resource.should be_instance_of(ZendeskAPI::TestResource)
|
125
107
|
end
|
126
108
|
end
|
127
109
|
end
|
128
110
|
|
129
111
|
context "with side-loading of resource" do
|
130
|
-
let(:
|
131
|
-
subject { ZendeskAPI::TestResource.new(client, :
|
112
|
+
let(:test_resource) { { :message => "FOO_OBJ" } }
|
113
|
+
subject { ZendeskAPI::TestResource.new(client, :test_resource => test_resource).test_resource }
|
114
|
+
|
115
|
+
it "should load the correct instance" do
|
116
|
+
subject.should be_instance_of(ZendeskAPI::TestResource)
|
117
|
+
end
|
132
118
|
|
133
119
|
it "should load foo from the hash" do
|
134
|
-
subject.
|
120
|
+
subject.message.should == "FOO_OBJ"
|
135
121
|
end
|
136
122
|
end
|
137
123
|
|
138
124
|
context "with side-loading of id" do
|
139
|
-
subject { ZendeskAPI::TestResource.new(client, :
|
125
|
+
subject { ZendeskAPI::TestResource.new(client, :test_resource_id => 1) }
|
140
126
|
before(:each) do
|
141
|
-
stub_json_request(:get, %r{
|
127
|
+
stub_json_request(:get, %r{test_resources/1}, json("test_resource" => {}))
|
142
128
|
end
|
143
129
|
|
144
130
|
it "should find foo_id and load it from the api" do
|
145
|
-
subject.
|
131
|
+
subject.test_resource
|
146
132
|
end
|
147
133
|
|
148
134
|
it "should handle nil response from find api" do
|
149
|
-
ZendeskAPI::
|
150
|
-
subject.
|
151
|
-
subject.
|
135
|
+
ZendeskAPI::TestResource.should_receive(:find).twice.and_return(nil)
|
136
|
+
subject.test_resource.should be_nil
|
137
|
+
subject.test_resource
|
152
138
|
end
|
153
139
|
end
|
154
140
|
end
|
155
141
|
end
|
156
142
|
|
157
143
|
context "has_many" do
|
158
|
-
before(:each) { ZendeskAPI::TestResource.has_many
|
144
|
+
before(:each) { ZendeskAPI::TestResource.has_many ZendeskAPI::TestResource }
|
159
145
|
|
160
146
|
context "class methods" do
|
161
147
|
subject { ZendeskAPI::TestResource }
|
162
|
-
it "should define a method with the same name" do
|
163
|
-
subject.instance_methods.map(&:to_s).should include("bars")
|
164
|
-
end
|
165
148
|
|
166
|
-
it "should
|
167
|
-
|
149
|
+
it "should define a method with the same name" do
|
150
|
+
subject.instance_methods.map(&:to_s).should include("test_resources")
|
168
151
|
end
|
169
152
|
|
170
153
|
context "with explicit class name" do
|
171
|
-
before(:each) { ZendeskAPI::TestResource.has_many :cats, :class =>
|
154
|
+
before(:each) { ZendeskAPI::TestResource.has_many :cats, :class => ZendeskAPI::TestResource }
|
172
155
|
|
173
|
-
it "should
|
174
|
-
|
156
|
+
it "should define a method with the same name" do
|
157
|
+
subject.instance_methods.map(&:to_s).should include("cats")
|
175
158
|
end
|
176
159
|
end
|
177
160
|
end
|
@@ -181,46 +164,50 @@ describe ZendeskAPI::DataResource do
|
|
181
164
|
subject { ZendeskAPI::TestResource.new(client, :id => 1) }
|
182
165
|
|
183
166
|
it "should not attempt to grab the resource from the host" do
|
184
|
-
subject.
|
167
|
+
subject.test_resources.should be_instance_of(ZendeskAPI::Collection)
|
185
168
|
end
|
186
169
|
|
187
170
|
it "should pass the path on to the resource" do
|
188
|
-
subject.
|
171
|
+
subject.test_resources.path.should == "test_resources/1/test_resources"
|
189
172
|
end
|
190
173
|
|
191
174
|
context "with an explicit path set" do
|
192
175
|
before(:each) do
|
193
|
-
ZendeskAPI::TestResource.has_many
|
176
|
+
ZendeskAPI::TestResource.has_many ZendeskAPI::TestResource, :path => "blargh"
|
194
177
|
end
|
195
178
|
|
196
179
|
it "should call the right path" do
|
197
|
-
subject.
|
180
|
+
subject.test_resources.path.should == "test_resources/1/blargh"
|
198
181
|
end
|
199
182
|
end
|
200
183
|
end
|
201
184
|
|
202
185
|
context "with side-loading of resource" do
|
203
|
-
let(:
|
204
|
-
subject { ZendeskAPI::TestResource.new(client, :
|
186
|
+
let(:test_resources) { [{ :message => "FOO_OBJ" }] }
|
187
|
+
subject { ZendeskAPI::TestResource.new(client, :test_resources => test_resources).test_resources.first }
|
188
|
+
|
189
|
+
it "should properly create instance" do
|
190
|
+
subject.message.should == "FOO_OBJ"
|
191
|
+
end
|
205
192
|
|
206
|
-
it "should map bars onto
|
207
|
-
subject.
|
193
|
+
it "should map bars onto TestResource class" do
|
194
|
+
subject.should be_instance_of(ZendeskAPI::TestResource)
|
208
195
|
end
|
209
196
|
end
|
210
197
|
|
211
198
|
context "with side-loading of id" do
|
212
|
-
let(:
|
213
|
-
subject { ZendeskAPI::TestResource.new(client, :
|
199
|
+
let(:test_resource_ids) { [1, 2, 3] }
|
200
|
+
subject { ZendeskAPI::TestResource.new(client, :test_resource_ids => test_resource_ids) }
|
214
201
|
|
215
202
|
it "should find foo_id and load it from the api" do
|
216
|
-
ZendeskAPI::
|
217
|
-
subject.
|
203
|
+
ZendeskAPI::TestResource.should_receive(:find).with(client, kind_of(Hash)).exactly(test_resource_ids.length).times
|
204
|
+
subject.test_resources
|
218
205
|
end
|
219
206
|
|
220
207
|
it "should handle nil response from find api" do
|
221
|
-
ZendeskAPI::
|
222
|
-
subject.
|
223
|
-
subject.
|
208
|
+
ZendeskAPI::TestResource.should_receive(:find).with(client, kind_of(Hash)).exactly(test_resource_ids.length).times.and_return(nil)
|
209
|
+
subject.test_resources.should be_empty
|
210
|
+
subject.test_resources # Test expectations
|
224
211
|
end
|
225
212
|
end
|
226
213
|
end
|
data/spec/read_resource_spec.rb
CHANGED
@@ -28,7 +28,7 @@ describe ZendeskAPI::ReadResource do
|
|
28
28
|
"nil_resources" => [{ :id => 1, :name => :bye }, { :id => 2, :name => :hi }]
|
29
29
|
))
|
30
30
|
|
31
|
-
subject.has
|
31
|
+
subject.has ZendeskAPI::NilResource
|
32
32
|
@resource = subject.find(client, :id => id, :include => :nil_resource)
|
33
33
|
end
|
34
34
|
|
data/spec/resource_spec.rb
CHANGED
@@ -114,8 +114,8 @@ describe ZendeskAPI::Resource do
|
|
114
114
|
context "with unused associations" do
|
115
115
|
before do
|
116
116
|
ZendeskAPI::TestResource.associations.clear
|
117
|
-
ZendeskAPI::TestResource.has :child, :class =>
|
118
|
-
ZendeskAPI::TestResource.has_many :children, :class =>
|
117
|
+
ZendeskAPI::TestResource.has :child, :class => ZendeskAPI::TestResource::TestChild
|
118
|
+
ZendeskAPI::TestResource.has_many :children, :class => ZendeskAPI::TestResource::TestChild
|
119
119
|
end
|
120
120
|
|
121
121
|
it "should not touch them" do
|
@@ -155,7 +155,7 @@ describe ZendeskAPI::Resource do
|
|
155
155
|
context "has" do
|
156
156
|
before(:each) do
|
157
157
|
ZendeskAPI::TestResource.associations.clear
|
158
|
-
ZendeskAPI::TestResource.has :child, :class =>
|
158
|
+
ZendeskAPI::TestResource.has :child, :class => ZendeskAPI::TestResource::TestChild
|
159
159
|
stub_json_request(:put, %r{test_resources})
|
160
160
|
subject.child = { :id => 2 }
|
161
161
|
end
|
@@ -181,7 +181,7 @@ describe ZendeskAPI::Resource do
|
|
181
181
|
context "has_many" do
|
182
182
|
before(:each) do
|
183
183
|
ZendeskAPI::TestResource.associations.clear
|
184
|
-
ZendeskAPI::TestResource.has_many :children, :class =>
|
184
|
+
ZendeskAPI::TestResource.has_many :children, :class => ZendeskAPI::TestResource::TestChild
|
185
185
|
|
186
186
|
stub_json_request(:put, %r{test_resources})
|
187
187
|
stub_json_request(:get, %r{children}, json(:test_children => []))
|
@@ -236,7 +236,7 @@ describe ZendeskAPI::Resource do
|
|
236
236
|
|
237
237
|
context "true" do
|
238
238
|
before(:each) do
|
239
|
-
ZendeskAPI::TestResource.has :nil, :class =>
|
239
|
+
ZendeskAPI::TestResource.has :nil, :class => ZendeskAPI::NilResource, :inline => true
|
240
240
|
|
241
241
|
subject.nil = { :abc => :def }
|
242
242
|
subject.save_associations
|
@@ -249,7 +249,7 @@ describe ZendeskAPI::Resource do
|
|
249
249
|
|
250
250
|
context "create" do
|
251
251
|
before(:each) do
|
252
|
-
ZendeskAPI::TestResource.has :nil, :class =>
|
252
|
+
ZendeskAPI::TestResource.has :nil, :class => ZendeskAPI::NilResource, :inline => :create
|
253
253
|
subject.nil = { :abc => :def }
|
254
254
|
end
|
255
255
|
|
data/spec/spec_helper.rb
CHANGED
@@ -85,7 +85,7 @@ RSpec.configure do |c|
|
|
85
85
|
|
86
86
|
c.before(:each) do
|
87
87
|
ZendeskAPI::TestResource.associations.clear
|
88
|
-
ZendeskAPI::TestResource.has_many :children, :class =>
|
88
|
+
ZendeskAPI::TestResource.has_many :children, :class => ZendeskAPI::TestResource::TestChild
|
89
89
|
end
|
90
90
|
|
91
91
|
c.before(:each) do
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'zendesk_api'
|
2
|
+
|
3
|
+
class ResourceHandler < YARD::Handlers::Ruby::Base
|
4
|
+
handles method_call(:has), method_call(:has_many)
|
5
|
+
|
6
|
+
def process
|
7
|
+
many = statement.jump(:ident).source == "has_many"
|
8
|
+
|
9
|
+
klass = get_klass(statement)
|
10
|
+
|
11
|
+
if klass
|
12
|
+
begin
|
13
|
+
klass = klass.split("::").inject(ZendeskAPI) do |p,k|
|
14
|
+
p.const_get(k)
|
15
|
+
end
|
16
|
+
rescue NameError
|
17
|
+
parent = ZendeskAPI.const_get(namespace.to_s.split('::').last)
|
18
|
+
klass = parent.const_get(klass)
|
19
|
+
end
|
20
|
+
|
21
|
+
name = statement.parameters.first.jump(:ident).source
|
22
|
+
else
|
23
|
+
klass = statement.parameters.first.source
|
24
|
+
|
25
|
+
begin
|
26
|
+
klass = ZendeskAPI.const_get(klass)
|
27
|
+
rescue NameError
|
28
|
+
parent = ZendeskAPI.const_get(namespace.to_s.split('::').last)
|
29
|
+
klass = parent.const_get(klass)
|
30
|
+
end
|
31
|
+
|
32
|
+
name = many ? klass.resource_name : klass.singular_resource_name
|
33
|
+
end
|
34
|
+
|
35
|
+
reader = YARD::CodeObjects::MethodObject.new(namespace, name)
|
36
|
+
register(reader)
|
37
|
+
reader.dynamic = true
|
38
|
+
reader.docstring.add_tag(YARD::Tags::Tag.new(:return, "The associated object", klass.name))
|
39
|
+
|
40
|
+
if many
|
41
|
+
reader.signature = "def #{name}=(options = {})"
|
42
|
+
reader.parameters = [['options', {}]]
|
43
|
+
reader.docstring.add_tag(YARD::Tags::Tag.new(:param, "Options to pass to the collection object", "Hash", "options"))
|
44
|
+
end
|
45
|
+
|
46
|
+
writer = YARD::CodeObjects::MethodObject.new(namespace, "#{name}=")
|
47
|
+
register(writer)
|
48
|
+
writer.signature = "def #{name}=(value)"
|
49
|
+
writer.parameters = [['value', nil]]
|
50
|
+
writer.dynamic = true
|
51
|
+
writer.docstring.add_tag(YARD::Tags::Tag.new(:return, "The associated object", klass.name))
|
52
|
+
writer.docstring.add_tag(YARD::Tags::Tag.new(:param, "The associated object or its attributes", "Hash or #{klass.name}", "value"))
|
53
|
+
end
|
54
|
+
|
55
|
+
def get_klass(statement)
|
56
|
+
statement.traverse do |node|
|
57
|
+
if node.type == :assoc && node.jump(:kw).source == "class"
|
58
|
+
classes = node.traverse do |value|
|
59
|
+
if value.type == :const_path_ref || value.type == :var_ref
|
60
|
+
return value.source
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
nil
|
67
|
+
end
|
68
|
+
end
|