spark_api 1.4.34 → 1.5.3
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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/VERSION +1 -1
- data/lib/spark_api/authentication/api_auth.rb +5 -3
- data/lib/spark_api/authentication/oauth2.rb +2 -1
- data/lib/spark_api/authentication/oauth2_impl/grant_type_base.rb +1 -1
- data/lib/spark_api/client.rb +2 -2
- data/lib/spark_api/models/media.rb +30 -0
- data/lib/spark_api/models/video.rb +108 -0
- data/lib/spark_api/models/virtual_tour.rb +16 -0
- data/lib/spark_api/models.rb +1 -0
- data/lib/spark_api/request.rb +17 -1
- data/lib/spark_api.rb +1 -0
- data/spec/spec_helper.rb +9 -4
- data/spec/unit/spark_api/authentication/api_auth_spec.rb +40 -22
- data/spec/unit/spark_api/authentication/base_auth_spec.rb +3 -3
- data/spec/unit/spark_api/authentication/oauth2_impl/faraday_middleware_spec.rb +1 -1
- data/spec/unit/spark_api/authentication/oauth2_impl/grant_type_base_spec.rb +1 -1
- data/spec/unit/spark_api/authentication/oauth2_impl/single_session_provider_spec.rb +2 -2
- data/spec/unit/spark_api/authentication/oauth2_spec.rb +58 -40
- data/spec/unit/spark_api/authentication_spec.rb +2 -2
- data/spec/unit/spark_api/configuration/yaml_spec.rb +44 -44
- data/spec/unit/spark_api/configuration_spec.rb +56 -57
- data/spec/unit/spark_api/faraday_middleware_spec.rb +12 -12
- data/spec/unit/spark_api/models/account_spec.rb +20 -20
- data/spec/unit/spark_api/models/activity_spec.rb +5 -5
- data/spec/unit/spark_api/models/base_spec.rb +32 -32
- data/spec/unit/spark_api/models/concerns/destroyable_spec.rb +2 -2
- data/spec/unit/spark_api/models/concerns/savable_spec.rb +19 -19
- data/spec/unit/spark_api/models/connect_prefs_spec.rb +1 -1
- data/spec/unit/spark_api/models/constraint_spec.rb +1 -1
- data/spec/unit/spark_api/models/contact_spec.rb +50 -50
- data/spec/unit/spark_api/models/dirty_spec.rb +12 -12
- data/spec/unit/spark_api/models/document_spec.rb +3 -3
- data/spec/unit/spark_api/models/fields_spec.rb +17 -17
- data/spec/unit/spark_api/models/finders_spec.rb +7 -7
- data/spec/unit/spark_api/models/floplan_spec.rb +4 -4
- data/spec/unit/spark_api/models/listing_cart_spec.rb +46 -46
- data/spec/unit/spark_api/models/listing_meta_translations_spec.rb +6 -6
- data/spec/unit/spark_api/models/listing_spec.rb +91 -91
- data/spec/unit/spark_api/models/message_spec.rb +10 -10
- data/spec/unit/spark_api/models/note_spec.rb +10 -10
- data/spec/unit/spark_api/models/notification_spec.rb +6 -6
- data/spec/unit/spark_api/models/open_house_spec.rb +4 -4
- data/spec/unit/spark_api/models/photo_spec.rb +8 -8
- data/spec/unit/spark_api/models/portal_spec.rb +4 -4
- data/spec/unit/spark_api/models/property_types_spec.rb +5 -5
- data/spec/unit/spark_api/models/rental_calendar_spec.rb +13 -11
- data/spec/unit/spark_api/models/rule_spec.rb +2 -2
- data/spec/unit/spark_api/models/saved_search_spec.rb +33 -33
- data/spec/unit/spark_api/models/search_template/quick_search_spec.rb +5 -5
- data/spec/unit/spark_api/models/shared_listing_spec.rb +12 -12
- data/spec/unit/spark_api/models/sort_spec.rb +3 -3
- data/spec/unit/spark_api/models/standard_fields_spec.rb +12 -12
- data/spec/unit/spark_api/models/subresource_spec.rb +18 -18
- data/spec/unit/spark_api/models/system_info_spec.rb +7 -7
- data/spec/unit/spark_api/models/tour_of_home_spec.rb +3 -3
- data/spec/unit/spark_api/models/video_spec.rb +9 -9
- data/spec/unit/spark_api/models/virtual_tour_spec.rb +7 -7
- data/spec/unit/spark_api/models/vow_account_spec.rb +8 -8
- data/spec/unit/spark_api/multi_client_spec.rb +14 -14
- data/spec/unit/spark_api/options_hash_spec.rb +4 -4
- data/spec/unit/spark_api/paginate_spec.rb +71 -71
- data/spec/unit/spark_api/primary_array_spec.rb +5 -5
- data/spec/unit/spark_api/request_spec.rb +79 -63
- data/spec/unit/spark_api_spec.rb +6 -6
- metadata +178 -248
| @@ -64,13 +64,13 @@ describe SparkApi do | |
| 64 64 | 
             
                end
         | 
| 65 65 |  | 
| 66 66 | 
             
                it "should raised exception when token is expired" do
         | 
| 67 | 
            -
                  expect { @connection.get('/expired')}.to raise_error(SparkApi::PermissionDenied){ |e| e.code. | 
| 67 | 
            +
                  expect { @connection.get('/expired')}.to raise_error(SparkApi::PermissionDenied){ |e| expect(e.code).to eq(SparkApi::ResponseCodes::SESSION_TOKEN_EXPIRED) }
         | 
| 68 68 | 
             
                end
         | 
| 69 69 |  | 
| 70 70 | 
             
                it "should raised exception on error" do
         | 
| 71 | 
            -
                  expect { @connection.get('/methodnotallowed')}.to raise_error(SparkApi::NotAllowed){ |e| e.message. | 
| 72 | 
            -
                  expect { @connection.get('/epicfail')}.to raise_error(SparkApi::ClientError){ |e| e.status. | 
| 73 | 
            -
                  expect { @connection.get('/unknownerror')}.to raise_error(SparkApi::ClientError){ |e| e.status. | 
| 71 | 
            +
                  expect { @connection.get('/methodnotallowed')}.to raise_error(SparkApi::NotAllowed){ |e| expect(e.message).to eq("Method Not Allowed") }
         | 
| 72 | 
            +
                  expect { @connection.get('/epicfail')}.to raise_error(SparkApi::ClientError){ |e| expect(e.status).to be(500) }
         | 
| 73 | 
            +
                  expect { @connection.get('/unknownerror')}.to raise_error(SparkApi::ClientError){ |e| expect(e.status).to be(499) }
         | 
| 74 74 | 
             
                end
         | 
| 75 75 |  | 
| 76 76 | 
             
                it "should raised exception on invalid responses" do
         | 
| @@ -81,20 +81,20 @@ describe SparkApi do | |
| 81 81 |  | 
| 82 82 | 
             
                it "should give me a session response" do
         | 
| 83 83 | 
             
                  response = @connection.post('/session').body
         | 
| 84 | 
            -
                  response.success. | 
| 84 | 
            +
                  expect(response.success).to eq(true)
         | 
| 85 85 | 
             
                  session = SparkApi::Authentication::Session.new(response.results[0])
         | 
| 86 | 
            -
                  session.auth_token. | 
| 86 | 
            +
                  expect(session.auth_token).to eq("xxxxx")
         | 
| 87 87 | 
             
                end
         | 
| 88 88 |  | 
| 89 89 | 
             
                it "should give me an api response" do
         | 
| 90 90 | 
             
                  response = @connection.get('/system').body
         | 
| 91 | 
            -
                  response.success. | 
| 92 | 
            -
                  response.results.length. | 
| 91 | 
            +
                  expect(response.success).to eq(true)
         | 
| 92 | 
            +
                  expect(response.results.length).to be > 0 
         | 
| 93 93 | 
             
                end
         | 
| 94 94 |  | 
| 95 95 | 
             
                it "should include the errors in the response" do
         | 
| 96 96 | 
             
                  expect { @connection.get('/badresourcerequest')}.to raise_error(SparkApi::BadResourceRequest){ |e| 
         | 
| 97 | 
            -
                    e.errors. | 
| 97 | 
            +
                    expect(e.errors).to eq("Some errors and stuff.")
         | 
| 98 98 | 
             
                  }
         | 
| 99 99 | 
             
                end
         | 
| 100 100 |  | 
| @@ -111,7 +111,7 @@ describe SparkApi do | |
| 111 111 | 
             
                    :response_headers => {}
         | 
| 112 112 | 
             
                  }
         | 
| 113 113 |  | 
| 114 | 
            -
                  middleware.decompress_body(env). | 
| 114 | 
            +
                  expect(middleware.decompress_body(env)).to eq("UNCOMPRESSED")
         | 
| 115 115 | 
             
                end
         | 
| 116 116 |  | 
| 117 117 | 
             
                it "should unzip gzipped data" do
         | 
| @@ -129,7 +129,7 @@ describe SparkApi do | |
| 129 129 | 
             
                    }
         | 
| 130 130 | 
             
                  }
         | 
| 131 131 |  | 
| 132 | 
            -
                  middleware.decompress_body(env). | 
| 132 | 
            +
                  expect(middleware.decompress_body(env)).to eq(bod)
         | 
| 133 133 | 
             
                end
         | 
| 134 134 |  | 
| 135 135 | 
             
                it "should inflate deflated data" do
         | 
| @@ -143,7 +143,7 @@ describe SparkApi do | |
| 143 143 | 
             
                    }
         | 
| 144 144 | 
             
                  }
         | 
| 145 145 |  | 
| 146 | 
            -
                  middleware.decompress_body(env). | 
| 146 | 
            +
                  expect(middleware.decompress_body(env)).to eq(bod)
         | 
| 147 147 | 
             
                end
         | 
| 148 148 | 
             
              end
         | 
| 149 149 |  | 
| @@ -101,20 +101,20 @@ describe Account do | |
| 101 101 |  | 
| 102 102 | 
             
                it "should respond to attributes" do
         | 
| 103 103 | 
             
                  ['Name','Id','Mls','MlsId','Office'].each do |k|
         | 
| 104 | 
            -
                    (@account.send k.to_sym). | 
| 104 | 
            +
                    expect(@account.send k.to_sym).to be_a(String)
         | 
| 105 105 | 
             
                  end
         | 
| 106 106 | 
             
                end
         | 
| 107 107 |  | 
| 108 108 | 
             
                it "should have primary subresources" do
         | 
| 109 | 
            -
                  @account.emails.primary.Address. | 
| 110 | 
            -
                  @account.phones.primary.Number. | 
| 111 | 
            -
                  @account.addresses.primary.Address. | 
| 112 | 
            -
                  @account.websites.primary.Uri. | 
| 109 | 
            +
                  expect(@account.emails.primary.Address).to eq("work@test.com")
         | 
| 110 | 
            +
                  expect(@account.phones.primary.Number).to eq("701-555-1212")
         | 
| 111 | 
            +
                  expect(@account.addresses.primary.Address).to eq("101 Main Ave, Phoenix, AZ 12345")
         | 
| 112 | 
            +
                  expect(@account.websites.primary.Uri).to eq("http://iamthebestagent.com")
         | 
| 113 113 | 
             
                end
         | 
| 114 114 |  | 
| 115 115 | 
             
                it "should be able to provide a primary image" do
         | 
| 116 | 
            -
                  @account.primary_img("Photo").Name. | 
| 117 | 
            -
                  @account.primary_img("Logo").Name. | 
| 116 | 
            +
                  expect(@account.primary_img("Photo").Name).to eq('My Photo 1')
         | 
| 117 | 
            +
                  expect(@account.primary_img("Logo").Name).to eq('1 My Logo')
         | 
| 118 118 | 
             
                end
         | 
| 119 119 |  | 
| 120 120 | 
             
                after(:each) do
         | 
| @@ -131,19 +131,19 @@ describe Account do | |
| 131 131 | 
             
                  on_get_it "should get my account" do
         | 
| 132 132 | 
             
                    stub_api_get("/my/account", 'accounts/my.json')
         | 
| 133 133 | 
             
                    account = Account.my
         | 
| 134 | 
            -
                    account.Id. | 
| 135 | 
            -
                    account.websites.first.Name. | 
| 134 | 
            +
                    expect(account.Id).to eq("20000426173054342350000000")
         | 
| 135 | 
            +
                    expect(account.websites.first.Name).to eq('My Work Website')
         | 
| 136 136 | 
             
                  end
         | 
| 137 137 |  | 
| 138 138 | 
             
                  on_put_it "should save my portal account" do
         | 
| 139 139 | 
             
                    stub_api_get("/my/account", 'accounts/my_portal.json')
         | 
| 140 140 | 
             
                    stub_api_put("/my/account", 'accounts/my_save.json', 'accounts/my_put.json')
         | 
| 141 141 | 
             
                    account = Account.my
         | 
| 142 | 
            -
                    account.Id. | 
| 143 | 
            -
                    account.GetEmailUpdates. | 
| 142 | 
            +
                    expect(account.Id).to eq("20110426173054342350000000")
         | 
| 143 | 
            +
                    expect(account.GetEmailUpdates).to eq(false)
         | 
| 144 144 | 
             
                    account.GetEmailUpdates = true
         | 
| 145 145 | 
             
                    account.save!
         | 
| 146 | 
            -
                    account.GetEmailUpdates. | 
| 146 | 
            +
                    expect(account.GetEmailUpdates).to eq(true)
         | 
| 147 147 | 
             
                  end
         | 
| 148 148 | 
             
                end
         | 
| 149 149 |  | 
| @@ -151,10 +151,10 @@ describe Account do | |
| 151 151 | 
             
                  on_get_it "should get all accounts" do
         | 
| 152 152 | 
             
                    stub_api_get("/accounts", 'accounts/all.json')
         | 
| 153 153 | 
             
                    accounts = Account.get
         | 
| 154 | 
            -
                    accounts. | 
| 155 | 
            -
                    accounts.length. | 
| 156 | 
            -
                    accounts.first.Id. | 
| 157 | 
            -
                    accounts.last.Id. | 
| 154 | 
            +
                    expect(accounts).to be_an(Array)
         | 
| 155 | 
            +
                    expect(accounts.length).to eq(3)
         | 
| 156 | 
            +
                    expect(accounts.first.Id).to eq("20000426173054342350000000")
         | 
| 157 | 
            +
                    expect(accounts.last.Id).to eq("20110126173054382350000000")
         | 
| 158 158 | 
             
                  end
         | 
| 159 159 | 
             
                  on_put_it "should save password" do
         | 
| 160 160 | 
             
                    stub_api_get("/my/account", 'accounts/my.json')
         | 
| @@ -162,7 +162,7 @@ describe Account do | |
| 162 162 | 
             
                    stub_api_put("/accounts/#{account.Id}", 'accounts/password_save.json', 'accounts/my.json')
         | 
| 163 163 | 
             
                    account.Password = "1"
         | 
| 164 164 | 
             
                    account.PasswordValidation = "1"
         | 
| 165 | 
            -
                    account.save. | 
| 165 | 
            +
                    expect(account.save).to be(true)
         | 
| 166 166 | 
             
                  end   
         | 
| 167 167 | 
             
                end
         | 
| 168 168 |  | 
| @@ -170,10 +170,10 @@ describe Account do | |
| 170 170 | 
             
                  on_get_it "should all office accounts" do
         | 
| 171 171 | 
             
                    stub_api_get("/accounts/by/office/20030426173014239760000000", 'accounts/office.json')
         | 
| 172 172 | 
             
                    accounts = Account.by_office("20030426173014239760000000")
         | 
| 173 | 
            -
                    accounts. | 
| 174 | 
            -
                    accounts.length. | 
| 173 | 
            +
                    expect(accounts).to be_an(Array)
         | 
| 174 | 
            +
                    expect(accounts.length).to eq(2)
         | 
| 175 175 | 
             
                    accounts.each do |account|
         | 
| 176 | 
            -
                      accounts.first.OfficeId. | 
| 176 | 
            +
                      expect(accounts.first.OfficeId).to eq("20030426173014239760000000")
         | 
| 177 177 | 
             
                    end
         | 
| 178 178 | 
             
                  end
         | 
| 179 179 | 
             
                end
         | 
| @@ -10,9 +10,9 @@ describe Activity do | |
| 10 10 | 
             
                it "gets a current user's activities" do
         | 
| 11 11 | 
             
                  s = stub_api_get("/activities", "activities/get.json")
         | 
| 12 12 | 
             
                  activities = Activity.get
         | 
| 13 | 
            -
                  activities. | 
| 14 | 
            -
                  activities.size. | 
| 15 | 
            -
                  s. | 
| 13 | 
            +
                  expect(activities).to be_an(Array)
         | 
| 14 | 
            +
                  expect(activities.size).to eq(2)
         | 
| 15 | 
            +
                  expect(s).to have_been_requested
         | 
| 16 16 | 
             
                end
         | 
| 17 17 | 
             
              end
         | 
| 18 18 |  | 
| @@ -21,8 +21,8 @@ describe Activity do | |
| 21 21 | 
             
                it "gets an individual activity" do
         | 
| 22 22 | 
             
                  s = stub_api_get("/activities/#{id}", "activities/get.json")
         | 
| 23 23 | 
             
                  activity = Activity.find(id)
         | 
| 24 | 
            -
                  activity. | 
| 25 | 
            -
                  s. | 
| 24 | 
            +
                  expect(activity).to be_an(Activity)
         | 
| 25 | 
            +
                  expect(s).to have_been_requested
         | 
| 26 26 | 
             
                end
         | 
| 27 27 | 
             
              end
         | 
| 28 28 |  | 
| @@ -22,31 +22,31 @@ describe MyExampleModel, "Example model" do | |
| 22 22 | 
             
              end
         | 
| 23 23 |  | 
| 24 24 | 
             
              it "should be persisted" do
         | 
| 25 | 
            -
                @model.persisted | 
| 25 | 
            +
                expect(@model.persisted?).to eq(true)
         | 
| 26 26 | 
             
              end
         | 
| 27 27 |  | 
| 28 28 | 
             
              it "should not be persisted" do
         | 
| 29 29 | 
             
                @new_model = MyExampleModel.new()
         | 
| 30 | 
            -
                @new_model.persisted | 
| 30 | 
            +
                expect(@new_model.persisted?).to eq(false)
         | 
| 31 31 | 
             
              end
         | 
| 32 32 |  | 
| 33 33 | 
             
              it "should parse and return ResourceUri without v1" do
         | 
| 34 | 
            -
                @model.resource_uri. | 
| 34 | 
            +
                expect(@model.resource_uri).to eq("/some/place/20101230223226074201000000")
         | 
| 35 35 | 
             
              end
         | 
| 36 36 |  | 
| 37 37 | 
             
              it "should parse and return the correct path for a persisted resource" do
         | 
| 38 | 
            -
                @model.path. | 
| 38 | 
            +
                expect(@model.path).to eq("/some/place")
         | 
| 39 39 | 
             
              end
         | 
| 40 40 |  | 
| 41 41 | 
             
              it "should parse and return the correct path" do
         | 
| 42 42 | 
             
                @model = MyExampleModel.new
         | 
| 43 | 
            -
                @model.path. | 
| 43 | 
            +
                expect(@model.path).to eq("/test/example")
         | 
| 44 44 | 
             
              end
         | 
| 45 45 |  | 
| 46 46 | 
             
              it "should parse and return the correct path for resource with a parent" do
         | 
| 47 47 | 
             
                @model = MyExampleModel.new
         | 
| 48 48 | 
             
                @model.parent = Contact.new({ :Id => "20101230223226074201000000" })
         | 
| 49 | 
            -
                @model.path. | 
| 49 | 
            +
                expect(@model.path).to eq("/contacts/20101230223226074201000000/test/example")
         | 
| 50 50 | 
             
              end
         | 
| 51 51 |  | 
| 52 52 | 
             
            end
         | 
| @@ -55,16 +55,16 @@ describe Base, "Base model" do | |
| 55 55 |  | 
| 56 56 | 
             
              describe "class methods" do
         | 
| 57 57 | 
             
                it "should set the element name" do
         | 
| 58 | 
            -
                  MyExampleModel.element_name. | 
| 59 | 
            -
                  MyDefaultModel.element_name. | 
| 58 | 
            +
                  expect(MyExampleModel.element_name).to eq("example")
         | 
| 59 | 
            +
                  expect(MyDefaultModel.element_name).to eq("resource")
         | 
| 60 60 | 
             
                end
         | 
| 61 61 | 
             
                it "should set the prefix" do
         | 
| 62 | 
            -
                  MyExampleModel.prefix. | 
| 63 | 
            -
                  MyDefaultModel.prefix. | 
| 62 | 
            +
                  expect(MyExampleModel.prefix).to eq("/test/")
         | 
| 63 | 
            +
                  expect(MyDefaultModel.prefix).to eq("/")
         | 
| 64 64 | 
             
                end
         | 
| 65 65 | 
             
                it "should set the path" do
         | 
| 66 | 
            -
                  MyExampleModel.path. | 
| 67 | 
            -
                  MyDefaultModel.path. | 
| 66 | 
            +
                  expect(MyExampleModel.path).to eq("/test/example")
         | 
| 67 | 
            +
                  expect(MyDefaultModel.path).to eq("/resource")
         | 
| 68 68 | 
             
                end
         | 
| 69 69 | 
             
                describe "finders" do
         | 
| 70 70 | 
             
                  before(:each) do
         | 
| @@ -72,11 +72,11 @@ describe Base, "Base model" do | |
| 72 72 | 
             
                    stub_api_get("/test/example", 'base.json')
         | 
| 73 73 | 
             
                  end
         | 
| 74 74 | 
             
                  it "should get all results" do
         | 
| 75 | 
            -
                    MyExampleModel.get.length. | 
| 75 | 
            +
                    expect(MyExampleModel.get.length).to eq(2)
         | 
| 76 76 | 
             
                  end
         | 
| 77 77 | 
             
                  it "should get first result" do
         | 
| 78 | 
            -
                    MyExampleModel.first.Id. | 
| 79 | 
            -
                    MyExampleModel.first.Id. | 
| 78 | 
            +
                    expect(MyExampleModel.first.Id).to eq(1)
         | 
| 79 | 
            +
                    expect(MyExampleModel.first.Id).to eq(MyExampleModel.first.id)
         | 
| 80 80 | 
             
                  end
         | 
| 81 81 | 
             
                end
         | 
| 82 82 | 
             
              end
         | 
| @@ -89,71 +89,71 @@ describe Base, "Base model" do | |
| 89 89 | 
             
                end
         | 
| 90 90 |  | 
| 91 91 | 
             
                it "should access existing attributes" do
         | 
| 92 | 
            -
                  @model.Name. | 
| 92 | 
            +
                  expect(@model.Name).to eq('My Example')
         | 
| 93 93 | 
             
                end
         | 
| 94 94 |  | 
| 95 95 | 
             
                it "should raise errors on access to non-existant attributes" do
         | 
| 96 | 
            -
                   | 
| 96 | 
            +
                  expect { @model.Nonsense }.to raise_error(NoMethodError)
         | 
| 97 97 | 
             
                end
         | 
| 98 98 |  | 
| 99 99 | 
             
                it "should set existing attributes" do
         | 
| 100 100 | 
             
                  new_name = 'John Jacob Jingleheimerschmidt'
         | 
| 101 101 | 
             
                  @model.Name = new_name
         | 
| 102 | 
            -
                  @model.Name. | 
| 102 | 
            +
                  expect(@model.Name).to eq(new_name)
         | 
| 103 103 | 
             
                end
         | 
| 104 104 |  | 
| 105 105 | 
             
                it "should set non-existant attributes" do
         | 
| 106 106 | 
             
                  nonsense = 'nonsense'
         | 
| 107 107 | 
             
                  @model.Nonsense = nonsense
         | 
| 108 | 
            -
                  @model.Nonsense. | 
| 108 | 
            +
                  expect(@model.Nonsense).to eq(nonsense)
         | 
| 109 109 | 
             
                end
         | 
| 110 110 |  | 
| 111 111 | 
             
                it "should return a boolean for a predicate for an existing attribute" do
         | 
| 112 | 
            -
                  @model.Name | 
| 112 | 
            +
                  expect(@model.Name?).to satisfy { |p| [true, false].include?(p) }
         | 
| 113 113 | 
             
                end
         | 
| 114 114 |  | 
| 115 115 | 
             
                it "should return a boolean for whether or not a model is persisted through the api" do
         | 
| 116 | 
            -
                  @model.persisted | 
| 116 | 
            +
                  expect(@model.persisted?).to satisfy { |p| [true, false].include?(p) }
         | 
| 117 117 | 
             
                end
         | 
| 118 118 |  | 
| 119 119 | 
             
                it "should raise an Error for a predicate for a non-existant attribute" do
         | 
| 120 | 
            -
                   | 
| 120 | 
            +
                  expect { @model.Nonsense? }.to raise_error(NoMethodError)
         | 
| 121 121 | 
             
                end
         | 
| 122 122 |  | 
| 123 123 | 
             
                it "should repond_to existing attributes" do
         | 
| 124 | 
            -
                  @model. | 
| 124 | 
            +
                  expect(@model).to respond_to(:Name)
         | 
| 125 125 | 
             
                end
         | 
| 126 126 |  | 
| 127 127 | 
             
                it "should not respond_to non-existant attributes" do
         | 
| 128 | 
            -
                  @model. | 
| 128 | 
            +
                  expect(@model).not_to respond_to(:Nonsense)
         | 
| 129 129 | 
             
                end
         | 
| 130 130 |  | 
| 131 131 | 
             
                it "should respond_to a setter for an existing attribute" do
         | 
| 132 | 
            -
                  @model. | 
| 132 | 
            +
                  expect(@model).to respond_to(:Name=)
         | 
| 133 133 | 
             
                end
         | 
| 134 134 |  | 
| 135 135 | 
             
                it "should respond_to a setter for a non-existant attribute" do
         | 
| 136 | 
            -
                  @model. | 
| 136 | 
            +
                  expect(@model).to respond_to(:Nonsense=)
         | 
| 137 137 | 
             
                end
         | 
| 138 138 |  | 
| 139 139 | 
             
                it "should respond_to a predicate for an existing attribute" do
         | 
| 140 | 
            -
                  @model. | 
| 140 | 
            +
                  expect(@model).to respond_to(:Name?)
         | 
| 141 141 | 
             
                end
         | 
| 142 142 |  | 
| 143 143 | 
             
                it "should not respond_to a predicate for a non-existant attribute" do
         | 
| 144 | 
            -
                  @model. | 
| 144 | 
            +
                  expect(@model).not_to respond_to(:Nonsense?)
         | 
| 145 145 | 
             
                end
         | 
| 146 146 |  | 
| 147 147 | 
             
                it "should respond_to methods inherited from parent classes" do
         | 
| 148 | 
            -
                  @model. | 
| 148 | 
            +
                  expect(@model).to respond_to(:freeze)
         | 
| 149 149 | 
             
                end
         | 
| 150 150 |  | 
| 151 151 | 
             
                it "should respond_to a will_change! method for an existing attribute" do
         | 
| 152 | 
            -
                  @model. | 
| 152 | 
            +
                  expect(@model).to respond_to(:Name_will_change!)
         | 
| 153 153 | 
             
                end
         | 
| 154 154 |  | 
| 155 155 | 
             
                it "should not respond_to a will_change! method for a non-existant attribute" do
         | 
| 156 | 
            -
                  @model. | 
| 156 | 
            +
                  expect(@model).not_to respond_to(:Nonsense_will_change!)
         | 
| 157 157 | 
             
                end
         | 
| 158 158 |  | 
| 159 159 | 
             
              end
         | 
| @@ -161,7 +161,7 @@ describe Base, "Base model" do | |
| 161 161 | 
             
              describe "to_partial_path" do
         | 
| 162 162 | 
             
                it "should return the partial path" do
         | 
| 163 163 | 
             
                  model = MyExampleModel.new()
         | 
| 164 | 
            -
                  model.to_partial_path. | 
| 164 | 
            +
                  expect(model.to_partial_path).to eq("my_example_models/my_example_model")
         | 
| 165 165 | 
             
                end
         | 
| 166 166 | 
             
              end
         | 
| 167 167 |  | 
| @@ -17,7 +17,7 @@ describe Concerns::Destroyable, "Destroyable Concern" do | |
| 17 17 | 
             
              describe 'destroyed?' do
         | 
| 18 18 |  | 
| 19 19 | 
             
                it "should not be destroyed" do
         | 
| 20 | 
            -
                  @model.destroyed | 
| 20 | 
            +
                  expect(@model.destroyed?).to eq(false)
         | 
| 21 21 | 
             
                end
         | 
| 22 22 | 
             
              end
         | 
| 23 23 |  | 
| @@ -27,7 +27,7 @@ describe Concerns::Destroyable, "Destroyable Concern" do | |
| 27 27 | 
             
                  stub_api_delete("/some/place/20101230223226074201000000")
         | 
| 28 28 | 
             
                  @model = MyExampleModel.first
         | 
| 29 29 | 
             
                  @model.destroy
         | 
| 30 | 
            -
                  @model.destroyed | 
| 30 | 
            +
                  expect(@model.destroyed?).to eq(true)
         | 
| 31 31 | 
             
                end
         | 
| 32 32 |  | 
| 33 33 | 
             
              end
         | 
| @@ -31,9 +31,9 @@ describe Concerns::Savable, "Model" do | |
| 31 31 | 
             
              it "should be creatable" do
         | 
| 32 32 | 
             
                @model = MyExampleModel.new({ :Name => "my name" })
         | 
| 33 33 | 
             
                s = stub_api_post("/test/example", { :MyExampleModels => [ @model.attributes ] }, "base.json")
         | 
| 34 | 
            -
                @model.save. | 
| 35 | 
            -
                @model.persisted | 
| 36 | 
            -
                s. | 
| 34 | 
            +
                expect(@model.save).to eq(true)
         | 
| 35 | 
            +
                expect(@model.persisted?).to eq(true)
         | 
| 36 | 
            +
                expect(s).to have_been_requested
         | 
| 37 37 | 
             
              end
         | 
| 38 38 |  | 
| 39 39 | 
             
              it "should be updatable" do
         | 
| @@ -41,37 +41,37 @@ describe Concerns::Savable, "Model" do | |
| 41 41 | 
             
                @model = MyExampleModel.first
         | 
| 42 42 | 
             
                @model.Name = "new name"
         | 
| 43 43 | 
             
                s = stub_api_put("/some/place/20101230223226074201000000", @model.dirty_attributes)
         | 
| 44 | 
            -
                @model.save. | 
| 45 | 
            -
                @model.persisted | 
| 46 | 
            -
                s. | 
| 44 | 
            +
                expect(@model.save).to eq(true)
         | 
| 45 | 
            +
                expect(@model.persisted?).to eq(true)
         | 
| 46 | 
            +
                expect(s).to have_been_requested
         | 
| 47 47 | 
             
              end
         | 
| 48 48 |  | 
| 49 49 | 
             
              it "should allow the pluralize method to be overriden" do
         | 
| 50 50 | 
             
                @model = MyOtherExampleModel.new({ :Name => "my name" })
         | 
| 51 51 | 
             
                s = stub_api_post("/test/example", { :MyOtherExampleModelThatIsPluralized => [ @model.attributes ] }, "base.json")
         | 
| 52 | 
            -
                @model.save. | 
| 53 | 
            -
                @model.persisted | 
| 54 | 
            -
                s. | 
| 52 | 
            +
                expect(@model.save).to eq(true)
         | 
| 53 | 
            +
                expect(@model.persisted?).to eq(true)
         | 
| 54 | 
            +
                expect(s).to have_been_requested
         | 
| 55 55 | 
             
              end
         | 
| 56 56 |  | 
| 57 57 | 
             
              it "should not pluralize the resource if it already is" do
         | 
| 58 58 | 
             
                @model = MyPluralizedModels.new({ :Name => "my name" })
         | 
| 59 59 | 
             
                s = stub_api_post("/test/example", { :MyPluralizedModels => [ @model.attributes ] }, "base.json")
         | 
| 60 | 
            -
                @model.save. | 
| 61 | 
            -
                @model.persisted | 
| 62 | 
            -
                s. | 
| 60 | 
            +
                expect(@model.save).to eq(true)
         | 
| 61 | 
            +
                expect(@model.persisted?).to eq(true)
         | 
| 62 | 
            +
                expect(s).to have_been_requested
         | 
| 63 63 | 
             
              end
         | 
| 64 64 |  | 
| 65 65 | 
             
              it "merges any attributes that come back in the response" do
         | 
| 66 66 | 
             
                @model = MyExampleModel.new({ :Name => "my name" })
         | 
| 67 67 | 
             
                s = stub_api_post("/test/example", { :MyExampleModels => [ @model.attributes ] }, "base.json")
         | 
| 68 | 
            -
                @model.save. | 
| 69 | 
            -
                @model.persisted | 
| 70 | 
            -
                @model.Id. | 
| 71 | 
            -
                @model.ResourceUri. | 
| 72 | 
            -
                @model.Name. | 
| 73 | 
            -
                @model.Test. | 
| 74 | 
            -
                s. | 
| 68 | 
            +
                expect(@model.save).to eq(true)
         | 
| 69 | 
            +
                expect(@model.persisted?).to eq(true)
         | 
| 70 | 
            +
                expect(@model.Id).to eq(1)
         | 
| 71 | 
            +
                expect(@model.ResourceUri).to eq("/v1/some/place/20101230223226074201000000")
         | 
| 72 | 
            +
                expect(@model.Name).to eq("My Example")
         | 
| 73 | 
            +
                expect(@model.Test).to eq(true)
         | 
| 74 | 
            +
                expect(s).to have_been_requested
         | 
| 75 75 | 
             
              end
         | 
| 76 76 |  | 
| 77 77 | 
             
              describe "update_attributes" do
         |