ruby-bandwidth-iris 2.0.1 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -20,11 +20,11 @@ describe BandwidthIris::TnReservation do
20
20
 
21
21
  describe '#create' do
22
22
  it 'should create a reservation' do
23
- data = {:account_id => "111", :reserved_tn => "000"}
24
- client.stubs.post('/v1.0/accounts/accountId/tnreservation', client.build_xml({:tn_reservation => data})) {|env| [200, {'Location' => '/v1.0/accounts/accountId/tnreservations/1'}, '']}
25
- client.stubs.get('/v1.0/accounts/accountId/tnreservation/1') {|env| [200, {}, Helper.xml['tn_reservation']]}
26
- item = TnReservation.create(client, data)
27
- expect(item[:id]).to eql(1)
23
+ number = "9198975719"
24
+ client.stubs.post('/v1.0/accounts/accountId/tnreservation', client.build_xml({:reservation => {:reserved_tn => number } })) {|env| [200, {'Location' => '/v1.0/accounts/accountId/tnreservations/e34474d6-1d47-486d-af32-be9f2eefdff4'}, '']}
25
+ client.stubs.get('/v1.0/accounts/accountId/tnreservation/e34474d6-1d47-486d-af32-be9f2eefdff4') {|env| [200, {}, Helper.xml['tn_reservation']]}
26
+ item = TnReservation.create(client, number)
27
+ expect(item[:id]).to eql("e34474d6-1d47-486d-af32-be9f2eefdff4")
28
28
  expect(item[:account_id]).to eql(111)
29
29
  end
30
30
  end
@@ -14,16 +14,16 @@
14
14
  tn_sites: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Site><Id>1435</Id><Name>Sales Training</Name></Site>"
15
15
  tn_sip_peers: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><SipPeer><Id>4064</Id><Name>Sales</Name></SipPeer>"
16
16
  tn_rate_center: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><TelephoneNumberResponse><TelephoneNumberDetails><State>CO</State><RateCenter>DENVER</RateCenter></TelephoneNumberDetails></TelephoneNumberResponse>"
17
- tn_reservation: "<?xml version=\"1.0\" encoding=\"utf-8\"?><ReservationResponse><Reservation><Id>1</Id><ReservationId>1</ReservationId><AccountId>111</AccountId><ReservationExpires>0</ReservationExpires><ReservedTn>000</ReservedTn></Reservation></ReservationResponse>"
17
+ tn_reservation: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><ReservationResponse><Reservation><ReservationId>e34474d6-1d47-486d-af32-be9f2eefdff4</ReservationId><AccountId>111</AccountId><ReservationExpires>13157</ReservationExpires><ReservedTn>9198975719</ReservedTn></Reservation></ReservationResponse>"
18
18
  tn_details: "<TelephoneNumberResponse><TelephoneNumberDetails><City>JERSEY CITY</City><Lata>224</Lata><State>NJ</State><FullNumber>2018981023</FullNumber><Tier>0</Tier><VendorId>49</VendorId><VendorName>Bandwidth CLEC</VendorName><RateCenter>JERSEYCITY</RateCenter><Status>Inservice</Status><AccountId>14</AccountId><LastModified>2014-07-30T11:29:37.000Z</LastModified><Features><E911><Status>Success</Status></E911><Lidb><Status>Pending</Status><SubscriberInformation>Fred</SubscriberInformation><UseType>BUSINESS</UseType><Visibility>PUBLIC</Visibility></Lidb><Dlda><Status>Success</Status><SubscriberType>BUSINESS</SubscriberType><ListingType>LISTED</ListingType><ListingName><FirstName>Joe</FirstName><LastName>Smith</LastName></ListingName><ListAddress>true</ListAddress><Address><HouseNumber>12</HouseNumber><StreetName>ELM</StreetName><City>New York</City><StateCode>NY</StateCode><Zip>10007</Zip><Country>United States</Country><AddressType>Dlda</AddressType></Address></Dlda></Features><TnAttributes><TnAttribute>Protected</TnAttribute></TnAttributes></TelephoneNumberDetails></TelephoneNumberResponse>"
19
19
  port_in: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><LnpOrderResponse><OrderId>d28b36f7-fa96-49eb-9556-a40fca49f7c6</OrderId><Status><Code>201</Code><Description>Order request received. Please use the order id to check the status of your order later.</Description></Status><ProcessingStatus>PENDING_DOCUMENTS</ProcessingStatus><LoaAuthorizingPerson>John Doe</LoaAuthorizingPerson><Subscriber><SubscriberType>BUSINESS</SubscriberType><BusinessName>Acme Corporation</BusinessName><ServiceAddress><HouseNumber>1623</HouseNumber><StreetName>Brockton Ave #1</StreetName><City>Los Angeles</City><StateCode>CA</StateCode><Zip>90025</Zip><Country>USA</Country></ServiceAddress></Subscriber><BillingTelephoneNumber>6882015002</BillingTelephoneNumber><ListOfPhoneNumbers><PhoneNumber>6882015025</PhoneNumber><PhoneNumber>6882015026</PhoneNumber></ListOfPhoneNumbers><Triggered>false</Triggered><BillingType>PORTIN</BillingType></LnpOrderResponse>"
20
20
  notes: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Notes><Note><Id>11299</Id><UserId>customer</UserId><Description>Test</Description><LastDateModifier>2014-11-20T07:08:47.000Z</LastDateModifier></Note><Note><Id>11301</Id><UserId>customer</UserId><Description>Test1</Description><LastDateModifier>2014-11-20T07:11:36.000Z</LastDateModifier></Note></Notes>"
21
21
  files: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><fileListResponse><fileCount>6</fileCount><fileData><FileName>d28b36f7-fa96-49eb-9556-a40fca49f7c6-1416231534986.txt</FileName><FileMetaData><DocumentType>LOA</DocumentType></FileMetaData></fileData><fileData><FileName>d28b36f7-fa96-49eb-9556-a40fca49f7c6-1416231558768.txt</FileName><FileMetaData><DocumentType>LOA</DocumentType></FileMetaData></fileData><fileData><FileName>d28b36f7-fa96-49eb-9556-a40fca49f7c6-1416231581134.txt</FileName><FileMetaData><DocumentType>LOA</DocumentType></FileMetaData></fileData><fileData><FileName>d28b36f7-fa96-49eb-9556-a40fca49f7c6-1416231629005.txt</FileName><FileMetaData><DocumentType>LOA</DocumentType></FileMetaData></fileData><fileData><FileName>d28b36f7-fa96-49eb-9556-a40fca49f7c6-1416231699462.txt</FileName><FileMetaData><DocumentType>LOA</DocumentType></FileMetaData></fileData><fileData><FileName>d28b36f7-fa96-49eb-9556-a40fca49f7c6-1416232756923.txt</FileName><FileMetaData><DocumentType>LOA</DocumentType></FileMetaData></fileData><resultCode>0</resultCode><resultMessage>LOA file list successfully returned</resultMessage></fileListResponse>"
22
22
  file_metadata: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><FileMetaData><DocumentType>LOA</DocumentType></FileMetaData>"
23
23
  file_created: "<?xml version=\"1.0\" encoding=\"utf-8\"?><FileResult><filename>test.txt</filename></FileResult>"
24
- order: "<?xml version=\"1.0\" encoding=\"utf-8\"?><OrderResponse><Order><id>101</id><Name>Test</Name><SiteId>10</SiteId><OrderCreateDate>2014-12-03T15:50:05.575549+03:00</OrderCreateDate><CustomerOrderId>11</CustomerOrderId></Order><CreatedByUser>test</CreatedByUser><CompletedQuantity>1</CompletedQuantity><FailedQuantity>0</FailedQuantity><PendingQuantity>0</PendingQuantity><OrderCompleteDate>0001-01-01T00:00:00</OrderCompleteDate></OrderResponse>"
25
24
  orders: "<?xml version=\"1.0\" encoding=\"utf-8\"?><OrderResponse><Orders><Order><id>101</id><Name>Test</Name><SiteId>10</SiteId><OrderCreateDate>2014-12-03T15:50:05.575549+03:00</OrderCreateDate><CustomerOrderId>11</CustomerOrderId></Order><CreatedByUser>test</CreatedByUser><CompletedQuantity>1</CompletedQuantity><FailedQuantity>0</FailedQuantity><PendingQuantity>0</PendingQuantity><OrderCompleteDate>0001-01-01T00:00:00</OrderCompleteDate></Orders></OrderResponse>"
26
-
25
+ create_order_response: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><OrderResponse><Order><CustomerOrderId>123456789</CustomerOrderId><Name>Local Order</Name><OrderCreateDate>2020-05-19T00:40:38.093Z</OrderCreateDate><BackOrderRequested>false</BackOrderRequested><id>a7af704e-2ec0-4c4d-9dc5-1b77fa62c92a</id><CombinedSearchAndOrderType><AreaCode>919</AreaCode><EnableLCA>false</EnableLCA><Quantity>1</Quantity></CombinedSearchAndOrderType><PartialAllowed>true</PartialAllowed><SiteId>29976</SiteId></Order><OrderStatus>RECEIVED</OrderStatus></OrderResponse>"
26
+ order: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><OrderResponse><CompletedQuantity>1</CompletedQuantity><CreatedByUser>test</CreatedByUser><LastModifiedDate>2020-05-18T15:31:07.069Z</LastModifiedDate><OrderCompleteDate>2020-05-18T15:31:07.069Z</OrderCompleteDate><Order><Name>Test</Name><OrderCreateDate>2020-05-18T15:31:05.435Z</OrderCreateDate><PeerId>577561</PeerId><BackOrderRequested>false</BackOrderRequested><AreaCodeSearchAndOrderType><AreaCode>919</AreaCode><Quantity>1</Quantity></AreaCodeSearchAndOrderType><PartialAllowed>true</PartialAllowed><SiteId>1234</SiteId></Order><OrderStatus>COMPLETE</OrderStatus><CompletedNumbers><TelephoneNumber><FullNumber>9194464166</FullNumber></TelephoneNumber></CompletedNumbers><Summary>1 number ordered in (919)</Summary><FailedQuantity>0</FailedQuantity></OrderResponse>"
27
27
  order_area_codes: "<TelephoneDetailsReports><TelephoneDetailsReport><AreaCode>888</AreaCode><Count>1</Count></TelephoneDetailsReport></TelephoneDetailsReports>"
28
28
  order_npa_nxx: "<?xml version=\"1.0\" encoding=\"utf-8\"?><TelephoneDetailsReports><TelephoneDetailsReport><NPA-NXX>888424</NPA-NXX><Count>1</Count></TelephoneDetailsReport></TelephoneDetailsReports>"
29
29
  order_totals: "<?xml version=\"1.0\" encoding=\"utf-8\"?><TelephoneDetailsReports><TelephoneDetailsReport><NPA-NXX>888424</NPA-NXX><Count>1</Count></TelephoneDetailsReport></TelephoneDetailsReports>"
@@ -46,3 +46,16 @@
46
46
  lsr_orders: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><LsrOrders><TotalCount>5</TotalCount><LsrOrderSummary><accountId>9999999</accountId><CountOfTNs>2</CountOfTNs><CustomerOrderId>FineCustomerid</CustomerOrderId><userId>team_ua</userId><lastModifiedDate>2015-03-02T09:10:16.193Z</lastModifiedDate><OrderType>lsr</OrderType><OrderDate>2015-03-25T11:44:42.941Z</OrderDate><OrderStatus>PENDING</OrderStatus><ActualFocDate>2015-03-25</ActualFocDate><BillingTelephoneNumber>2526795000</BillingTelephoneNumber><CreatedByUser>lsrOnlyUser</CreatedByUser><OrderId>7d644c88-ef23-4307-96ab-20253666d0c7</OrderId><Pon>ATT-011515-324234</Pon><PonVersion>0</PonVersion><RequestedFocDate>2015-11-15</RequestedFocDate></LsrOrderSummary><!-- SNIP --><LsrOrderSummary><accountId>9999999</accountId><CountOfTNs>2</CountOfTNs><CustomerOrderId>MyId5</CustomerOrderId><lastModifiedDate>2015-03-03T14:07:19.926Z</lastModifiedDate><OrderType>lsr</OrderType><OrderDate>2015-03-25T11:44:42.941Z</OrderDate><OrderStatus>NEW</OrderStatus><ActualFocDate>2015-03-25</ActualFocDate><BillingTelephoneNumber>2526795000</BillingTelephoneNumber><CreatedByUser>lsrOnlyUser</CreatedByUser><OrderId>00cf7e08-cab0-4515-9a77-2d0a7da09415</OrderId><Pon>testpon1002</Pon><PonVersion>0</PonVersion><RequestedFocDate>2015-11-15</RequestedFocDate></LsrOrderSummary></LsrOrders>"
47
47
  account: "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><AccountResponse><Account><AccountId>14</AccountId><CompanyName>CWI Hosting</CompanyName><AccountType>Business</AccountType><NenaId></NenaId><Tiers><Tier>0</Tier></Tiers><Address><HouseNumber>60</HouseNumber><HouseSuffix></HouseSuffix><PreDirectional></PreDirectional><StreetName>Pine</StreetName><StreetSuffix>St</StreetSuffix><PostDirectional></PostDirectional><AddressLine2></AddressLine2><City>Denver</City><StateCode>CO</StateCode><Zip>80016</Zip><PlusFour></PlusFour><County></County><Country>United States</Country><AddressType>Service</AddressType></Address><Contact><FirstName>Sanjay</FirstName><LastName>Rao</LastName><Phone>9195441234</Phone><Email>srao@bandwidth.com</Email></Contact><ReservationAllowed>true</ReservationAllowed><LnpEnabled>true</LnpEnabled><AltSpid>X455</AltSpid><SPID>9999</SPID><PortCarrierType>WIRELINE</PortCarrierType></Account></AccountResponse>"
48
48
  import_tn_checker: '<?xml version="1.0" encoding="UTF-8"?><ImportTnCheckerPayload><TelephoneNumbers><TelephoneNumber>5554443333</TelephoneNumber><TelephoneNumber>5553334444</TelephoneNumber></TelephoneNumbers></ImportTnCheckerPayload>'
49
+ csr: '<?xml version="1.0" encoding="UTF-8"?><CsrResponse><Status>RECEIVED</Status></CsrResponse>'
50
+ application: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ApplicationProvisioningResponse><Application><ApplicationId>d1</ApplicationId></Application></ApplicationProvisioningResponse>'
51
+ applicationList: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ApplicationProvisioningResponse><ApplicationList><Application><ApplicationId>d1</ApplicationId></Application><Application><ApplicationId>d2</ApplicationId></Application></ApplicationList></ApplicationProvisioningResponse>'
52
+ applicationListOne: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ApplicationProvisioningResponse><ApplicationList><Application><ApplicationId>d1</ApplicationId></Application></ApplicationList></ApplicationProvisioningResponse>'
53
+ applicationSippeers: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><AssociatedSipPeersResponse><AssociatedSipPeers><AssociatedSipPeer><SiteId>1</SiteId></AssociatedSipPeer><AssociatedSipPeer><SiteId>2</SiteId></AssociatedSipPeer></AssociatedSipPeers></AssociatedSipPeersResponse>'
54
+ applicationSippeersOne: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><AssociatedSipPeersResponse><AssociatedSipPeers><AssociatedSipPeer><SiteId>1</SiteId></AssociatedSipPeer></AssociatedSipPeers></AssociatedSipPeersResponse>'
55
+ sippeerOriginationSettings: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><SipPeerOriginationSettingsResponse><SipPeerOriginationSettings><VoiceProtocol>HTTP</VoiceProtocol><HttpSettings><HttpVoiceV2AppId>469ebbac-4459-4d98-bc19-a038960e787f</HttpVoiceV2AppId></HttpSettings></SipPeerOriginationSettings></SipPeerOriginationSettingsResponse>'
56
+ sippeerTerminationSettings: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><SipPeerTerminationSettingsResponse><SipPeerTerminationSettings><VoiceProtocol>HTTP</VoiceProtocol><HttpSettings><HttpVoiceV2AppId>469ebbac-4459-4d98-bc19-a038960e787f</HttpVoiceV2AppId></HttpSettings></SipPeerTerminationSettings></SipPeerTerminationSettingsResponse>'
57
+ sippeerSmsFeature: '<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?><SipPeerSmsFeatureResponse><SipPeerSmsFeature><SipPeerSmsFeatureSettings><TollFree>true</TollFree><ShortCode>true</ShortCode></SipPeerSmsFeatureSettings><SmppHosts><SmppHost><HostName>54.10.88.146</HostName></SmppHost></SmppHosts></SipPeerSmsFeature></SipPeerSmsFeatureResponse>'
58
+ sippeerMmsFeature: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><MmsFeatureResponse><MmsFeature><MmsSettings><Protocol>MM4</Protocol></MmsSettings></MmsFeature></MmsFeatureResponse>'
59
+ sippeerMmsFeatureMmsSettings: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><MmsFeatureMmsSettingsResponse><MmsSettings><Protocol>MM4</Protocol></MmsSettings></MmsFeatureMmsSettingsResponse>'
60
+ messagingApplicationSettings: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ApplicationsSettingsResponse><ApplicationsSettings><HttpMessagingV2AppId>4a4ca6c1-156b-4fca-84e9-34e35e2afc32</HttpMessagingV2AppId></ApplicationsSettings></ApplicationsSettingsResponse>'
61
+ sippeerMessageSettings: '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><SipPeerMessagingSettingsResponse><SipPeerMessagingSettings><BreakOutCountries><Country>CAN</Country></BreakOutCountries></SipPeerMessagingSettings></SipPeerMessagingSettingsResponse>'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-bandwidth-iris
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Belchikov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-26 00:00:00.000000000 Z
11
+ date: 2020-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder
@@ -157,20 +157,24 @@ files:
157
157
  - examples/city.rb
158
158
  - examples/config.yml.example
159
159
  - examples/covered-rate-center.rb
160
+ - examples/create_reservation_and_order.rb
160
161
  - examples/loa.pdf
161
162
  - examples/order.rb
163
+ - examples/order_number.rb
162
164
  - examples/port-in.rb
163
165
  - examples/sip_peer.rb
164
166
  - examples/site.rb
165
167
  - examples/tn.rb
166
168
  - lib/bandwidth-iris/account.rb
167
169
  - lib/bandwidth-iris/api_item.rb
170
+ - lib/bandwidth-iris/applications.rb
168
171
  - lib/bandwidth-iris/available_npa_nxx.rb
169
172
  - lib/bandwidth-iris/available_number.rb
170
173
  - lib/bandwidth-iris/city.rb
171
174
  - lib/bandwidth-iris/client.rb
172
175
  - lib/bandwidth-iris/client_wrapper.rb
173
176
  - lib/bandwidth-iris/covered_rate_center.rb
177
+ - lib/bandwidth-iris/csr.rb
174
178
  - lib/bandwidth-iris/disc_number.rb
175
179
  - lib/bandwidth-iris/disconnect.rb
176
180
  - lib/bandwidth-iris/dlda.rb
@@ -188,6 +192,7 @@ files:
188
192
  - lib/bandwidth-iris/rate_center.rb
189
193
  - lib/bandwidth-iris/remove_imported_tn_orders.rb
190
194
  - lib/bandwidth-iris/sip_peer.rb
195
+ - lib/bandwidth-iris/sip_peer_products.rb
191
196
  - lib/bandwidth-iris/site.rb
192
197
  - lib/bandwidth-iris/subscription.rb
193
198
  - lib/bandwidth-iris/tn.rb
@@ -197,11 +202,13 @@ files:
197
202
  - lib/ruby-bandwidth-iris.rb
198
203
  - ruby-bandwidth-iris.gemspec
199
204
  - spec/bandwidth-iris/account_spec.rb
205
+ - spec/bandwidth-iris/application_spec.rb
200
206
  - spec/bandwidth-iris/available_npa_nxx_spec.rb
201
207
  - spec/bandwidth-iris/available_number_spec.rb
202
208
  - spec/bandwidth-iris/city_spec.rb
203
209
  - spec/bandwidth-iris/client_spec.rb
204
210
  - spec/bandwidth-iris/covered_rate_center_spec.rb
211
+ - spec/bandwidth-iris/csr_spec.rb
205
212
  - spec/bandwidth-iris/disc_number_spec.rb
206
213
  - spec/bandwidth-iris/disconnect_spec.rb
207
214
  - spec/bandwidth-iris/dlda_spec.rb
@@ -217,6 +224,7 @@ files:
217
224
  - spec/bandwidth-iris/port_out_spec.rb
218
225
  - spec/bandwidth-iris/rate_center_spec.rb
219
226
  - spec/bandwidth-iris/remove_imported_tn_orders_spec.rb
227
+ - spec/bandwidth-iris/sip_peer_products_spec.rb
220
228
  - spec/bandwidth-iris/sip_peer_spec.rb
221
229
  - spec/bandwidth-iris/site_spec.rb
222
230
  - spec/bandwidth-iris/subscription_spec.rb
@@ -250,11 +258,13 @@ specification_version: 4
250
258
  summary: Gem for integrating to Bandwidth's Iris API
251
259
  test_files:
252
260
  - spec/bandwidth-iris/account_spec.rb
261
+ - spec/bandwidth-iris/application_spec.rb
253
262
  - spec/bandwidth-iris/available_npa_nxx_spec.rb
254
263
  - spec/bandwidth-iris/available_number_spec.rb
255
264
  - spec/bandwidth-iris/city_spec.rb
256
265
  - spec/bandwidth-iris/client_spec.rb
257
266
  - spec/bandwidth-iris/covered_rate_center_spec.rb
267
+ - spec/bandwidth-iris/csr_spec.rb
258
268
  - spec/bandwidth-iris/disc_number_spec.rb
259
269
  - spec/bandwidth-iris/disconnect_spec.rb
260
270
  - spec/bandwidth-iris/dlda_spec.rb
@@ -270,6 +280,7 @@ test_files:
270
280
  - spec/bandwidth-iris/port_out_spec.rb
271
281
  - spec/bandwidth-iris/rate_center_spec.rb
272
282
  - spec/bandwidth-iris/remove_imported_tn_orders_spec.rb
283
+ - spec/bandwidth-iris/sip_peer_products_spec.rb
273
284
  - spec/bandwidth-iris/sip_peer_spec.rb
274
285
  - spec/bandwidth-iris/site_spec.rb
275
286
  - spec/bandwidth-iris/subscription_spec.rb