groupdocs 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.
Files changed (129) hide show
  1. data/.travis.yml +5 -0
  2. data/Gemfile +3 -0
  3. data/README.md +141 -0
  4. data/Rakefile +9 -0
  5. data/groupdocs.gemspec +28 -0
  6. data/lib/groupdocs.rb +53 -0
  7. data/lib/groupdocs/api.rb +3 -0
  8. data/lib/groupdocs/api/entity.rb +113 -0
  9. data/lib/groupdocs/api/helpers.rb +5 -0
  10. data/lib/groupdocs/api/helpers/access_helper.rb +56 -0
  11. data/lib/groupdocs/api/helpers/actions_helper.rb +48 -0
  12. data/lib/groupdocs/api/helpers/rest_helper.rb +89 -0
  13. data/lib/groupdocs/api/helpers/status_helper.rb +48 -0
  14. data/lib/groupdocs/api/helpers/url_helper.rb +89 -0
  15. data/lib/groupdocs/api/request.rb +73 -0
  16. data/lib/groupdocs/api/sugar/lookup.rb +48 -0
  17. data/lib/groupdocs/datasource.rb +162 -0
  18. data/lib/groupdocs/datasource/field.rb +44 -0
  19. data/lib/groupdocs/document.rb +513 -0
  20. data/lib/groupdocs/document/annotation.rb +215 -0
  21. data/lib/groupdocs/document/annotation/reply.rb +167 -0
  22. data/lib/groupdocs/document/change.rb +35 -0
  23. data/lib/groupdocs/document/field.rb +27 -0
  24. data/lib/groupdocs/document/metadata.rb +26 -0
  25. data/lib/groupdocs/document/rectangle.rb +24 -0
  26. data/lib/groupdocs/document/view.rb +36 -0
  27. data/lib/groupdocs/errors.rb +10 -0
  28. data/lib/groupdocs/job.rb +201 -0
  29. data/lib/groupdocs/questionnaire.rb +221 -0
  30. data/lib/groupdocs/questionnaire/execution.rb +120 -0
  31. data/lib/groupdocs/questionnaire/page.rb +43 -0
  32. data/lib/groupdocs/questionnaire/question.rb +75 -0
  33. data/lib/groupdocs/questionnaire/question/answer.rb +10 -0
  34. data/lib/groupdocs/storage.rb +37 -0
  35. data/lib/groupdocs/storage/file.rb +248 -0
  36. data/lib/groupdocs/storage/folder.rb +314 -0
  37. data/lib/groupdocs/storage/package.rb +42 -0
  38. data/lib/groupdocs/user.rb +50 -0
  39. data/lib/groupdocs/version.rb +3 -0
  40. data/spec/groupdocs/api/entity_spec.rb +54 -0
  41. data/spec/groupdocs/api/helpers/access_helper_spec.rb +89 -0
  42. data/spec/groupdocs/api/helpers/actions_helper_spec.rb +51 -0
  43. data/spec/groupdocs/api/helpers/rest_helper_spec.rb +187 -0
  44. data/spec/groupdocs/api/helpers/status_helper_spec.rb +85 -0
  45. data/spec/groupdocs/api/helpers/url_helper_spec.rb +93 -0
  46. data/spec/groupdocs/api/request_spec.rb +85 -0
  47. data/spec/groupdocs/datasource/field_spec.rb +50 -0
  48. data/spec/groupdocs/datasource_spec.rb +156 -0
  49. data/spec/groupdocs/document/annotation/reply_spec.rb +179 -0
  50. data/spec/groupdocs/document/annotation_spec.rb +226 -0
  51. data/spec/groupdocs/document/change_spec.rb +35 -0
  52. data/spec/groupdocs/document/field_spec.rb +31 -0
  53. data/spec/groupdocs/document/metadata_spec.rb +26 -0
  54. data/spec/groupdocs/document/rectangle_spec.rb +34 -0
  55. data/spec/groupdocs/document/view_spec.rb +36 -0
  56. data/spec/groupdocs/document_spec.rb +509 -0
  57. data/spec/groupdocs/errors_spec.rb +7 -0
  58. data/spec/groupdocs/job_spec.rb +196 -0
  59. data/spec/groupdocs/questionnaire/execution_spec.rb +136 -0
  60. data/spec/groupdocs/questionnaire/page_spec.rb +50 -0
  61. data/spec/groupdocs/questionnaire/question/answer_spec.rb +11 -0
  62. data/spec/groupdocs/questionnaire/question_spec.rb +84 -0
  63. data/spec/groupdocs/questionnaire_spec.rb +217 -0
  64. data/spec/groupdocs/storage/file_spec.rb +242 -0
  65. data/spec/groupdocs/storage/folder_spec.rb +310 -0
  66. data/spec/groupdocs/storage/package_spec.rb +41 -0
  67. data/spec/groupdocs/storage_spec.rb +27 -0
  68. data/spec/groupdocs/user_spec.rb +53 -0
  69. data/spec/groupdocs_spec.rb +56 -0
  70. data/spec/spec_helper.rb +46 -0
  71. data/spec/support/files/resume.pdf +0 -0
  72. data/spec/support/json/annotation_collaborators_set.json +16 -0
  73. data/spec/support/json/annotation_create.json +12 -0
  74. data/spec/support/json/annotation_list.json +32 -0
  75. data/spec/support/json/annotation_remove.json +9 -0
  76. data/spec/support/json/annotation_replies_create.json +9 -0
  77. data/spec/support/json/annotation_replies_get.json +25 -0
  78. data/spec/support/json/comparison_changes.json +46 -0
  79. data/spec/support/json/comparison_compare.json +8 -0
  80. data/spec/support/json/comparison_document.json +10 -0
  81. data/spec/support/json/datasource_add.json +8 -0
  82. data/spec/support/json/datasource_get.json +22 -0
  83. data/spec/support/json/datasource_remove.json +8 -0
  84. data/spec/support/json/datasource_update.json +8 -0
  85. data/spec/support/json/document_access_info_get.json +14 -0
  86. data/spec/support/json/document_convert.json +8 -0
  87. data/spec/support/json/document_datasource.json +10 -0
  88. data/spec/support/json/document_fields.json +34 -0
  89. data/spec/support/json/document_formats.json +8 -0
  90. data/spec/support/json/document_metadata.json +15 -0
  91. data/spec/support/json/document_questionnaire_create.json +9 -0
  92. data/spec/support/json/document_questionnaires.json +23 -0
  93. data/spec/support/json/document_sharers_remove.json +8 -0
  94. data/spec/support/json/document_sharers_set.json +16 -0
  95. data/spec/support/json/document_views.json +32 -0
  96. data/spec/support/json/file_compress.json +8 -0
  97. data/spec/support/json/file_copy.json +14 -0
  98. data/spec/support/json/file_delete.json +5 -0
  99. data/spec/support/json/file_move.json +14 -0
  100. data/spec/support/json/file_upload.json +8 -0
  101. data/spec/support/json/folder_create.json +8 -0
  102. data/spec/support/json/folder_delete.json +5 -0
  103. data/spec/support/json/folder_list.json +21 -0
  104. data/spec/support/json/folder_move.json +8 -0
  105. data/spec/support/json/folder_sharers_get.json +16 -0
  106. data/spec/support/json/folder_sharers_remove.json +8 -0
  107. data/spec/support/json/folder_sharers_set.json +16 -0
  108. data/spec/support/json/job_add_url.json +8 -0
  109. data/spec/support/json/job_create.json +8 -0
  110. data/spec/support/json/job_documents.json +39 -0
  111. data/spec/support/json/job_file_add.json +8 -0
  112. data/spec/support/json/job_update.json +7 -0
  113. data/spec/support/json/jobs_get.json +52 -0
  114. data/spec/support/json/package_create.json +7 -0
  115. data/spec/support/json/questionnaire_create.json +8 -0
  116. data/spec/support/json/questionnaire_datasources.json +26 -0
  117. data/spec/support/json/questionnaire_execution_create.json +9 -0
  118. data/spec/support/json/questionnaire_execution_status_set.json +8 -0
  119. data/spec/support/json/questionnaire_execution_update.json +8 -0
  120. data/spec/support/json/questionnaire_executions.json +24 -0
  121. data/spec/support/json/questionnaire_get.json +14 -0
  122. data/spec/support/json/questionnaire_remove.json +8 -0
  123. data/spec/support/json/questionnaire_update.json +8 -0
  124. data/spec/support/json/questionnaires_get.json +22 -0
  125. data/spec/support/json/storage_info.json +10 -0
  126. data/spec/support/shared_examples/api/entity.rb +37 -0
  127. data/spec/support/shared_examples/api/helpers/status_helper.rb +12 -0
  128. data/spec/support/shared_examples/api/sugar/lookup.rb +57 -0
  129. metadata +356 -0
@@ -0,0 +1,314 @@
1
+ module GroupDocs
2
+ module Storage
3
+ class Folder < GroupDocs::Api::Entity
4
+
5
+ extend GroupDocs::Api::Sugar::Lookup
6
+ include GroupDocs::Api::Helpers::Access
7
+
8
+ #
9
+ # Creates folder on server.
10
+ #
11
+ # @param [String] path Path of folder to create starting with "/"
12
+ # @param [Hash] access Access credentials
13
+ # @option access [String] :client_id
14
+ # @option access [String] :private_key
15
+ # @return [GroupDocs::Storage::Folder] Created folder
16
+ #
17
+ # @raise [ArgumentError] If path does not start with /
18
+ #
19
+ def self.create!(path, access = {})
20
+ path.chars.first == '/' or raise ArgumentError, "Path should start with /: #{path.inspect}"
21
+
22
+ json = GroupDocs::Api::Request.new do |request|
23
+ request[:access] = access
24
+ request[:method] = :POST
25
+ request[:path] = "/storage/{{client_id}}/paths#{path}"
26
+ end.execute!
27
+
28
+ GroupDocs::Storage::Folder.new(json)
29
+ end
30
+
31
+ #
32
+ # Returns an array of all folders on server starting with given path.
33
+ #
34
+ # @param [String] path Starting path to look for folders
35
+ # @param [Hash] access Access credentials
36
+ # @option access [String] :client_id
37
+ # @option access [String] :private_key
38
+ # @return [Array<GroupDocs::Storage::Folder>]
39
+ #
40
+ def self.all!(path = '/', access = {})
41
+ folders = Array.new
42
+ folder = GroupDocs::Storage::Folder.new(path: path)
43
+ folder.list!({}, access).each do |entity|
44
+ if entity.is_a?(GroupDocs::Storage::Folder)
45
+ folders << entity
46
+ folders += all!("#{path}/#{entity.name}".gsub(/[\/]{2}/, '/'), access)
47
+ end
48
+ end
49
+
50
+ folders
51
+ end
52
+
53
+ #
54
+ # Returns a list of all directories and files in the path.
55
+ #
56
+ # @param [String] path Path of directory to list starting from root ('/')
57
+ # @param [Hash] options Hash of options
58
+ # @option options [Integer] :page Page to start with
59
+ # @option options [Integer] :count How many items to list
60
+ # @option options [String] :order_by Field name to sort by
61
+ # @option options [Boolean] :order_asc Set to true to return in ascending order
62
+ # @param [Hash] access Access credentials
63
+ # @option access [String] :client_id
64
+ # @option access [String] :private_key
65
+ # @return [Array<GroupDocs::Storage::Folder, GroupDocs::Storage::File>]
66
+ #
67
+ # @raise [ArgumentError] If path does not start with /
68
+ #
69
+ def self.list!(path = '/', options = {}, access = {})
70
+ path.chars.first == '/' or raise ArgumentError, "Path should start with /: #{path.inspect}"
71
+ new(path: path).list!(options, access)
72
+ end
73
+
74
+ # @attr [Integer] id
75
+ attr_accessor :id
76
+ # @attr [Integer] size
77
+ attr_accessor :size
78
+ # @attr [Integer] folder_count
79
+ attr_accessor :folder_count
80
+ # @attr [Integer] file_count
81
+ attr_accessor :file_count
82
+ # @attr [Time] created_on
83
+ attr_accessor :created_on
84
+ # @attr [Time] modified_on
85
+ attr_accessor :modified_on
86
+ # @attr [String] url
87
+ attr_accessor :url
88
+ # @attr [String] name
89
+ attr_accessor :name
90
+ # @attr [String] path
91
+ attr_accessor :path
92
+ # @attr [Integer] version
93
+ attr_accessor :version
94
+ # @attr [Integer] type
95
+ attr_accessor :type
96
+ # @attr [Integer] access
97
+ attr_accessor :access
98
+
99
+ #
100
+ # Converts timestamp which is return by API server to Time object.
101
+ #
102
+ # @return [Time]
103
+ #
104
+ def created_on
105
+ Time.at(@created_on)
106
+ end
107
+
108
+ #
109
+ # Converts timestamp which is return by API server to Time object.
110
+ #
111
+ # @return [Time]
112
+ #
113
+ def modified_on
114
+ Time.at(@modified_on)
115
+ end
116
+
117
+ #
118
+ # Converts access mode to human-readable format.
119
+ #
120
+ # @return [Symbol]
121
+ #
122
+ def access
123
+ parse_access_mode(@access)
124
+ end
125
+
126
+ #
127
+ # Moves folder contents to given path.
128
+ #
129
+ # @param [String] path Destination to move contents to
130
+ # @param [Hash] access Access credentials
131
+ # @option access [String] :client_id
132
+ # @option access [String] :private_key
133
+ # @return [String] Moved to folder path
134
+ #
135
+ # @raise [ArgumentError] If path does not start with /
136
+ #
137
+ def move!(path, access = {})
138
+ path.chars.first == '/' or raise ArgumentError, "Path should start with /: #{path.inspect}"
139
+
140
+ GroupDocs::Api::Request.new do |request|
141
+ request[:access] = access
142
+ request[:method] = :PUT
143
+ request[:headers] = { :'Groupdocs-Move' => name }
144
+ request[:path] = "/storage/{{client_id}}/folders#{path}"
145
+ end.execute!
146
+
147
+ path
148
+ end
149
+
150
+ #
151
+ # Renames folder to new one.
152
+ #
153
+ # @param [String] name New name
154
+ # @param [Hash] access Access credentials
155
+ # @option access [String] :client_id
156
+ # @option access [String] :private_key
157
+ # @return [String] New name
158
+ #
159
+ def rename!(name, access = {})
160
+ move!("/#{name}", access).sub(/^\//, '')
161
+ end
162
+
163
+ #
164
+ # Copies folder contents to a destination path.
165
+ #
166
+ # @param [String] path Path of directory to copy to starting from root ('/')
167
+ # @param [Hash] access Access credentials
168
+ # @option access [String] :client_id
169
+ # @option access [String] :private_key
170
+ # @return [String] Copied to folder path
171
+ #
172
+ # @raise [ArgumentError] If path does not start with /
173
+ #
174
+ def copy!(path, access = {})
175
+ path.chars.first == '/' or raise ArgumentError, "Path should start with /: #{path.inspect}"
176
+
177
+ GroupDocs::Api::Request.new do |request|
178
+ request[:access] = access
179
+ request[:method] = :PUT
180
+ request[:headers] = { :'Groupdocs-Copy' => name }
181
+ request[:path] = "/storage/{{client_id}}/folders#{path}"
182
+ end.execute!
183
+
184
+ path
185
+ end
186
+
187
+ #
188
+ # Returns an array of files and folders.
189
+ #
190
+ # @param [Hash] options Hash of options
191
+ # @option options [Integer] :page Page to start with
192
+ # @option options [Integer] :count How many items to list
193
+ # @option options [String] :order_by Field name to sort by
194
+ # @option options [Boolean] :order_asc Set to true to return in ascending order
195
+ # @param [Hash] access Access credentials
196
+ # @option access [String] :client_id
197
+ # @option access [String] :private_key
198
+ # @return [Array<GroupDocs::Storage::Folder, GroupDocs::Storage::File>]
199
+ #
200
+ def list!(options = {}, access = {})
201
+ query_path = "#{path}/#{name}"
202
+ query_path.gsub!(/[\/]{2}/, '/')
203
+
204
+ api = GroupDocs::Api::Request.new do |request|
205
+ request[:access] = access
206
+ request[:method] = :GET
207
+ request[:path] = "/storage/{{client_id}}/folders#{query_path}"
208
+ end
209
+ api.add_params(options)
210
+ json = api.execute!
211
+
212
+ json[:entities].map do |entity|
213
+ entity.merge!(path: path)
214
+ if entity[:dir]
215
+ GroupDocs::Storage::Folder.new(entity)
216
+ else
217
+ GroupDocs::Storage::File.new(entity)
218
+ end
219
+ end
220
+ end
221
+
222
+ #
223
+ # Creates folder on server.
224
+ #
225
+ # @param [Hash] access Access credentials
226
+ # @option access [String] :client_id
227
+ # @option access [String] :private_key
228
+ #
229
+ def create!(access = {})
230
+ self.class.create!("/#{name}", access)
231
+ end
232
+
233
+ #
234
+ # Deletes folder from server.
235
+ #
236
+ # @param [Hash] access Access credentials
237
+ # @option access [String] :client_id
238
+ # @option access [String] :private_key
239
+ #
240
+ def delete!(access = {})
241
+ GroupDocs::Api::Request.new do |request|
242
+ request[:access] = access
243
+ request[:method] = :DELETE
244
+ request[:path] = "/storage/{{client_id}}/folders/#{name}"
245
+ end.execute!
246
+ end
247
+
248
+ #
249
+ # Returns an array of users a folder is shared with.
250
+ #
251
+ # @param [Hash] access Access credentials
252
+ # @option access [String] :client_id
253
+ # @option access [String] :private_key
254
+ # @return [Array<GroupDocs::User>]
255
+ #
256
+ def sharers!(access = {})
257
+ json = GroupDocs::Api::Request.new do |request|
258
+ request[:access] = access
259
+ request[:method] = :GET
260
+ request[:path] = "/doc/{{client_id}}/folders/#{id}/sharers"
261
+ end.execute!
262
+
263
+ json[:shared_users].map do |user|
264
+ GroupDocs::User.new(user)
265
+ end
266
+ end
267
+
268
+ #
269
+ # Sets folder sharers to given emails.
270
+ #
271
+ # If empty array or nil passed, clears sharers.
272
+ #
273
+ # @param [Array] emails List of email addresses to share with
274
+ # @param [Hash] access Access credentials
275
+ # @option access [String] :client_id
276
+ # @option access [String] :private_key
277
+ # @return [Array<GroupDocs::User>]
278
+ #
279
+ def sharers_set!(emails, access = {})
280
+ if emails.nil? || emails.empty?
281
+ sharers_clear!(access)
282
+ else
283
+ json = GroupDocs::Api::Request.new do |request|
284
+ request[:access] = access
285
+ request[:method] = :PUT
286
+ request[:path] = "/doc/{{client_id}}/folders/#{id}/sharers"
287
+ request[:request_body] = emails
288
+ end.execute!
289
+
290
+ json[:shared_users].map do |user|
291
+ GroupDocs::User.new(user)
292
+ end
293
+ end
294
+ end
295
+
296
+ #
297
+ # Clears sharers list.
298
+ #
299
+ # @param [Hash] access Access credentials
300
+ # @option access [String] :client_id
301
+ # @option access [String] :private_key
302
+ # @return nil
303
+ #
304
+ def sharers_clear!(access = {})
305
+ GroupDocs::Api::Request.new do |request|
306
+ request[:access] = access
307
+ request[:method] = :DELETE
308
+ request[:path] = "/doc/{{client_id}}/folders/#{id}/sharers"
309
+ end.execute![:shared_users]
310
+ end
311
+
312
+ end # Folder
313
+ end # Storage
314
+ end # GroupDocs
@@ -0,0 +1,42 @@
1
+ module GroupDocs
2
+ module Storage
3
+ class Package < GroupDocs::Api::Entity
4
+
5
+ # @attr [String] name Package name
6
+ attr_accessor :name
7
+ # @attr [Array] objects Storage entities to be packed
8
+ attr_accessor :objects
9
+
10
+ #
11
+ # Appends object to be packed.
12
+ #
13
+ # @param [GroupDocs::Storage::File, GroupDocs::Storage::Folder] object
14
+ #
15
+ def add(object)
16
+ @objects ||= Array.new
17
+ @objects << object
18
+ end
19
+ alias_method :<<, :add
20
+
21
+ #
22
+ # Creates package on server.
23
+ #
24
+ # @param [Hash] access Access credentials
25
+ # @option access [String] :client_id
26
+ # @option access [String] :private_key
27
+ # @return [String] URL of package for downloading
28
+ #
29
+ def create!(access = {})
30
+ json = GroupDocs::Api::Request.new do |request|
31
+ request[:access] = access
32
+ request[:method] = :POST
33
+ request[:path] = "/storage/{{client_id}}/packages/#{name}.zip"
34
+ request[:request_body] = @objects.map(&:name)
35
+ end.execute!
36
+
37
+ json[:url]
38
+ end
39
+
40
+ end # Package
41
+ end # Storage
42
+ end # GroupDocs
@@ -0,0 +1,50 @@
1
+ module GroupDocs
2
+ class User < GroupDocs::Api::Entity
3
+
4
+ # @attr [Integer] id
5
+ attr_accessor :id
6
+ # @attr [String] guid
7
+ attr_accessor :guid
8
+ # @attr [String] nickname
9
+ attr_accessor :nickname
10
+ # @attr [String] first_name
11
+ attr_accessor :first_name
12
+ # @attr [String] last_name
13
+ attr_accessor :last_name
14
+ # @attr [String] primary_email
15
+ attr_accessor :primary_email
16
+ # @attr [String] private_key
17
+ attr_accessor :private_key
18
+ # @attr [String] password_salt
19
+ attr_accessor :password_salt
20
+ # @attr [Integer] claimed_id
21
+ attr_accessor :claimed_id
22
+ # @attr [String] token
23
+ attr_accessor :token
24
+ # @attr [String] storage
25
+ attr_accessor :storage
26
+ # @attr [String] photo
27
+ attr_accessor :photo
28
+ # @attr [Boolean] active
29
+ attr_accessor :active
30
+ # @attr [Boolean] news_enabled
31
+ attr_accessor :news_enabled
32
+ # @attr [Time] signed_up_on
33
+ attr_accessor :signed_up_on
34
+
35
+ #
36
+ # Converts timestamp which is return by API server to Time object.
37
+ #
38
+ # @return [Time]
39
+ #
40
+ def signed_up_on
41
+ Time.at(@signed_up_on)
42
+ end
43
+
44
+ # Compatibility with response JSON
45
+ alias_method :pkey=, :private_key=
46
+ alias_method :pswd_salt=, :password_salt=
47
+ alias_method :signedupOn=, :signed_up_on=
48
+
49
+ end # User
50
+ end # GroupDocs
@@ -0,0 +1,3 @@
1
+ module GroupDocs
2
+ VERSION = "0.1.0"
3
+ end # GroupDocs
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe GroupDocs::Api::Entity do
4
+ before(:each) do
5
+ # make sure necessary attribute exist
6
+ described_class.class_eval('attr_accessor :id, :test')
7
+ subject.id = 1
8
+ end
9
+
10
+ describe '#to_hash' do
11
+ it 'converts object attributes to hash' do
12
+ subject.test = 'Test'
13
+ subject.to_hash.should == { id: 1, test: 'Test' }
14
+ end
15
+
16
+ it 'converts attribute to hash if it is object' do
17
+ object = described_class.new(id: 1)
18
+ object.should_receive(:to_hash).and_return({ id: 1 })
19
+ subject.test = object
20
+ subject.to_hash.should == { id: 1, test: { id: 1 } }
21
+ end
22
+
23
+ it 'converts attribute to hash if it is array' do
24
+ object1 = described_class.new(id: 1)
25
+ object2 = described_class.new(id: 2)
26
+ object1.should_receive(:to_hash).and_return({ id: 1 })
27
+ object2.should_receive(:to_hash).and_return({ id: 2 })
28
+ subject.test = [object1, object2]
29
+ subject.to_hash.should == { id: 1, test: [{ id: 1 }, { id: 2 }] }
30
+ end
31
+ end
32
+
33
+ describe '#inspect' do
34
+ it 'uses accessors instead of instance variables' do
35
+ subject.instance_variable_set(:@test1, 1)
36
+ subject.instance_variable_set(:@test2, 1)
37
+ subject.instance_eval('def test1; { fire: 1 }.invert[@test1] end')
38
+ subject.instance_eval('def test2; { 1 => "fire" }[@test2] end')
39
+ subject.inspect.should include('@test1=:fire')
40
+ subject.inspect.should include('@test2="fire"')
41
+ end
42
+
43
+ it 'uses only not-nil instance variables' do
44
+ subject.instance_variable_set(:@test, nil)
45
+ subject.inspect.should_not include('@test')
46
+ end
47
+ end
48
+
49
+ describe '#variable_to_accessor' do
50
+ it 'converts instance variable symbol to accessor method symbol' do
51
+ subject.send(:variable_to_accessor, :@test).should == :test
52
+ end
53
+ end
54
+ end