groupdocs 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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