rest_model 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -3,3 +3,4 @@
3
3
  .bundle
4
4
  Gemfile.lock
5
5
  pkg/*
6
+ *.DS_Store
data/README.md CHANGED
@@ -1,19 +1,37 @@
1
1
  # RestModel
2
2
 
3
- **Map from one or more input hashes** to instances of your model classes.
3
+ [ THE INTERNETS ]
4
4
 
5
- **Map to restful responses** from these model instances. (Some hypermedia magic happens here).
5
+ /\ ||
6
+ || ||
7
+ || \/
8
+ #resource .new
9
+ .resources #update_attributes
10
+
11
+ Your < RestModel
12
+
13
+ #to_source .from_source
14
+ || /\
15
+ || ||
16
+ \/ ||
17
+
18
+ SOURCE
19
+
20
+
21
+ ### Map _from a data source_ to instances of your model class.
22
+
23
+ ### Map _to RESTful responses_ from these model instances.
6
24
 
7
25
  ## Usage
8
26
 
9
- ### Input hash to model
27
+ ### Source hash to model instances
10
28
 
11
29
  Given you have:
12
30
 
13
31
  input = {
14
32
  "result" => [
15
33
  {
16
- "id" => 1938713897398,
34
+ "id" => "1938713897398",
17
35
  "login" => "jsmith180",
18
36
  "username" => "John Smith",
19
37
  "personal_info" => {
@@ -22,7 +40,7 @@ Given you have:
22
40
  }
23
41
  },
24
42
  {
25
- "id" => 92171987391873,
43
+ "id" => "92171987391873",
26
44
  "login" => "john_appleseed",
27
45
  "username" => "John Appleseed",
28
46
  "personal_info" => {
@@ -33,19 +51,19 @@ Given you have:
33
51
  ]
34
52
  }
35
53
 
36
- And you want to transform this input in some instances of a `class User; attr_accessor :id, :login, :name, :birth; end`
54
+ And you want to transform this in some instances of a `class User; attr_accessor :id, :login, :name, :birth; end`
37
55
 
38
56
  With RestModel you can parse the input to instances of `User`:
39
57
 
40
- users = User.parse(input, :result) # starts looking input hash from 'result' key
58
+ users = User.from_source(input, start_key: 'result') # starts looking hash from 'result' key
41
59
 
42
60
  Just define your `User` class like this:
43
61
 
44
62
  class User < RestModel
45
63
  id
46
64
  property :login
47
- property :name, field: :username # input hash key is different from resource key
48
- property :birth, field: 'personal_info/birth_date' # digg hash path defined by '/', the last being the key
65
+ property :name, field: :username # source key is different from model property
66
+ property :birth, field: 'personal_info.birth_date' # digg hash path defined by '.', the last being the key
49
67
  end
50
68
 
51
69
  ### Model instances array to restful response hash
@@ -56,14 +74,14 @@ Just define your `User` class like this:
56
74
  {
57
75
  entries: [
58
76
  {
59
- id: 1938713897398,
77
+ id: "1938713897398",
60
78
  login: "jsmith180",
61
79
  name: "John Smith",
62
80
  birth: "1999-02-10",
63
81
  href: "http://app/api/users/1938713897398"
64
82
  },
65
83
  {
66
- id: 92171987391873,
84
+ id: "92171987391873",
67
85
  login: "john_appleseed",
68
86
  name: "John Appleseed",
69
87
  birth: "1999-02-10",
@@ -78,7 +96,7 @@ Just define your `User` class like this:
78
96
  =>
79
97
 
80
98
  {
81
- id: 1938713897398,
99
+ id: "1938713897398",
82
100
  login: "jsmith180",
83
101
  name: "John Smith",
84
102
  birth: "1999-02-10",
@@ -101,7 +119,7 @@ Just define your `User` class like this:
101
119
  end
102
120
 
103
121
  {
104
- id: 1938713897398,
122
+ id: '1938713897398',
105
123
  address: {
106
124
  street: 'rest_client st.',
107
125
  number: '39',
@@ -127,16 +145,16 @@ Just define your `User` class like this:
127
145
  end
128
146
 
129
147
  {
130
- id: 739819813719387,
148
+ id: '739819813719387',
131
149
  items: [
132
150
  {
133
- item_id: 1738917139871,
151
+ item_id: '1738917139871',
134
152
  quantity: 18,
135
153
  unit_price: 0.2,
136
154
  amount: 3.6
137
155
  },
138
156
  {
139
- item_id: 3987187398782,
157
+ item_id: '3987187398782',
140
158
  quantity: 1,
141
159
  unit_price: 39.9,
142
160
  amount: 39.9
@@ -159,7 +177,7 @@ Just define your `User` class like this:
159
177
  end
160
178
 
161
179
  {
162
- id: 19837139879,
180
+ id: '19837139879',
163
181
  login: 'jsmith180',
164
182
  link: [
165
183
  {
@@ -181,10 +199,10 @@ Just define your `User` class like this:
181
199
 
182
200
  If you want your api to handle `http://app/api/users/19371897318937?include[]=avatar&include[]=guilda`
183
201
 
184
- user = User.parse(input, include: [avatar_input, guilda_input]).first
202
+ user = User.from_source(input, include: [avatar_input, guilda_input]).first
185
203
 
186
204
  {
187
- id: 19837139879,
205
+ id: '19837139879',
188
206
  login: 'jsmith180',
189
207
  avatar: {
190
208
  name: 'K1ll3r',
@@ -0,0 +1,14 @@
1
+ $:.push 'examples'; require 'helper'
2
+
3
+ class Item < RestModel
4
+ property :id, type: Integer
5
+ end
6
+
7
+ class Root < RestModel
8
+ embeds_many :items
9
+ end
10
+
11
+ @root = Root.parse({items: [{id: 2000}, {id: 2001}]}).first
12
+ @root.update_attributes({items: [{id: 3000}]})
13
+
14
+ inspect_rest_model(@root)
@@ -0,0 +1,14 @@
1
+ $:.push 'examples'; require 'helper'
2
+
3
+ class Root < RestModel
4
+ embeds_one :item
5
+ end
6
+
7
+ class Item < RestModel
8
+ properties :id, :name
9
+ end
10
+
11
+ @root = Root.parse({item: {id: 2000}}).first
12
+ @root.update_attributes({item: {name: "name"}})
13
+
14
+ inspect_rest_model(@root)
@@ -0,0 +1,17 @@
1
+ $:.push 'examples'; require 'helper'
2
+
3
+ class Service < RestModel
4
+ property :name
5
+ belongs_to :customer
6
+ end
7
+
8
+ class Customer < RestModel
9
+ id field: :customer_id, type: Integer
10
+ property :login
11
+ has_many :services
12
+ end
13
+
14
+ @root = Customer.parse({customer_id: 123, login: 'jackiechan2010'}).first
15
+ @root.update_attributes({services: [{name: "new_service_name"}]})
16
+
17
+ inspect_rest_model(@root)
@@ -0,0 +1,17 @@
1
+ $:.push 'examples'; require 'helper'
2
+
3
+ class Billing < RestModel
4
+ property :login
5
+ belongs_to :customer
6
+ end
7
+
8
+ class Customer < RestModel
9
+ id field: :customer_id, type: Integer
10
+ property :login
11
+ has_one :billing
12
+ end
13
+
14
+ @root = Customer.parse({customer_id: 123, login: 'jackiechan2010'}).first
15
+ @root.update_attributes({billing: {login: "new_billing_login"}})
16
+
17
+ inspect_rest_model(@root)
@@ -0,0 +1,10 @@
1
+ $:.push 'examples'; require 'helper'
2
+
3
+ class Customer < RestModel
4
+ property :login
5
+ end
6
+
7
+ @root = Customer.parse({login: 'jackiechan2010'}).first
8
+ @root.update_attributes(login: 'newjackiechan2010')
9
+
10
+ inspect_rest_model(@root)
@@ -35,8 +35,23 @@ class RestModel
35
35
  end
36
36
 
37
37
  def update_from_hash(resource, attrs)
38
- one? ? resource.update_attributes(attrs)
39
- : resource.map {|item| item.update_attributes(item)}
38
+ if one?
39
+ resource.update_attributes(attrs)
40
+ else
41
+ if resource.count > attrs.count
42
+ resource = resource.to(attrs.count - 1)
43
+ end
44
+
45
+ attrs.each_with_index do |item, index|
46
+ if index < resource.count
47
+ resource[index].update_attributes(item)
48
+ else
49
+ resource << create_from_hash(item)
50
+ end
51
+ end
52
+
53
+ resource
54
+ end
40
55
  end
41
56
  end
42
57
  end
@@ -1,3 +1,3 @@
1
1
  class RestModel
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/rest_model.rb CHANGED
@@ -4,6 +4,7 @@ require "active_support/concern"
4
4
  require "active_support/core_ext/class/attribute_accessors"
5
5
  require "active_support/core_ext/object/try"
6
6
  require "active_support/core_ext/array/wrap"
7
+ require "active_support/core_ext/array/access"
7
8
  require "active_support/core_ext/hash/slice"
8
9
  require "active_support/core_ext/hash/indifferent_access"
9
10
 
@@ -2,56 +2,76 @@
2
2
 
3
3
  require "spec_helper"
4
4
 
5
- describe_example "embeds_many/simple" do
6
- it "parses first embedded item" do
7
- root.items[0].id.should == 2000
8
- end
5
+ describe "embeds_many" do
6
+ describe_example "embeds_many/simple" do
7
+ it "parses first embedded item" do
8
+ root.items[0].id.should == 2000
9
+ end
9
10
 
10
- it "parses second embedded item" do
11
- root.items[1].id.should == 2001
11
+ it "parses second embedded item" do
12
+ root.items[1].id.should == 2001
13
+ end
12
14
  end
13
- end
14
15
 
15
- describe_example "embeds_many/invisible" do
16
- it "parses invisible items correctly" do
17
- root.locale.should == "pt-BR"
18
- root.names.should == {"en"=>"Woot", "pt-BR"=>"Úia", "es"=>"Me gusta"}
16
+ describe_example "embeds_many/invisible" do
17
+ it "parses invisible items correctly" do
18
+ root.locale.should == "pt-BR"
19
+ root.names.should == {"en"=>"Woot", "pt-BR"=>"Úia", "es"=>"Me gusta"}
20
+ end
21
+
22
+ it "doesn't show embedded items in resource" do
23
+ root.resource.should_not have_key("locale")
24
+ root.resource.should_not have_key("names")
25
+ end
19
26
  end
20
27
 
21
- it "doesn't show embedded items in resource" do
22
- root.resource.should_not have_key("locale")
23
- root.resource.should_not have_key("names")
28
+ describe_example "embeds_many/with_array" do
29
+ it "parses items" do
30
+ root.items.should == ["a", "b"]
31
+ end
24
32
  end
25
- end
26
33
 
27
- describe_example "embeds_many/with_array" do
28
- it ""
29
- end
34
+ describe_example "embeds_many/with_class_name" do
35
+ it "parses embedded item" do
36
+ root.items.first.id.should == 2000
37
+ end
38
+ end
30
39
 
31
- describe_example "embeds_many/with_class_name" do
32
- it "parses embedded item" do
33
- root.items[0].id.should == 2000
40
+ describe_example "embeds_many/with_fields" do
41
+ it "parses fields" do
42
+ root.items.should == ["i1", "i2", "i3"]
43
+ end
34
44
  end
35
- end
36
45
 
37
- describe_example "embeds_many/with_if" do
38
- context "when an embeddable has a conditional proc (:if)" do
39
- context "and it evaluates to true" do
40
- it "parses embedded item" do
41
- root_with_items.items.first.id.should == "2000"
46
+ describe_example "embeds_many/with_if" do
47
+ context "when an embeddable has a conditional proc (:if)" do
48
+ context "and it evaluates to true" do
49
+ it "parses embedded item" do
50
+ root_with_items.items.first.id.should == "2000"
51
+ end
42
52
  end
43
- end
44
53
 
45
- context "and it evaluates to false" do
46
- it "doesn't parse embedded item" do
47
- root_without_items.items.should_not be
54
+ context "and it evaluates to false" do
55
+ it "doesn't parse embedded item" do
56
+ root_without_items.items.should_not be
57
+ end
48
58
  end
49
59
  end
50
60
  end
51
- end
52
61
 
53
- describe_example "embeds_many/with_start_key" do
54
- it "parses embedded items" do
55
- root.items.first.id.should == "2000"
62
+ describe_example "embeds_many/with_nil_value" do
63
+ it "has items nil" do
64
+ root.items.should_not be
65
+ end
66
+
67
+ it "returns an empty items list" do
68
+ root.resource[:items].should == []
69
+ end
70
+ end
71
+
72
+ describe_example "embeds_many/with_start_key" do
73
+ it "parses embedded items" do
74
+ root.items.first.id.should == "2000"
75
+ end
56
76
  end
57
77
  end
@@ -1,41 +1,43 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe_example "embeds_one/simple" do
4
- it 'parses embedded item' do
5
- root.item.id.should == "2000"
6
- end
7
- end
8
-
9
- describe_example "embeds_one/with_class_name" do
10
- context 'when a different class name is used for embeddable' do
3
+ describe "embeds_one" do
4
+ describe_example "embeds_one/simple" do
11
5
  it 'parses embedded item' do
12
6
  root.item.id.should == "2000"
13
7
  end
14
8
  end
15
- end
16
9
 
17
- describe_example "embeds_one/with_if" do
18
- context 'when an embeddable has a conditional proc (:if)' do
19
- context 'and it evaluates to true' do
10
+ describe_example "embeds_one/with_class_name" do
11
+ context 'when a different class name is used for embeddable' do
20
12
  it 'parses embedded item' do
21
- root_with_item.id.should == "1"
22
- root_with_item.item.id.should == "2000"
13
+ root.item.id.should == "2000"
23
14
  end
24
15
  end
16
+ end
17
+
18
+ describe_example "embeds_one/with_if" do
19
+ context 'when an embeddable has a conditional proc (:if)' do
20
+ context 'and it evaluates to true' do
21
+ it 'parses embedded item' do
22
+ root_with_item.id.should == "1"
23
+ root_with_item.item.id.should == "2000"
24
+ end
25
+ end
25
26
 
26
- context 'and it evaluates to false' do
27
- it "doesn't parse embedded item" do
28
- root_without_item.id.should == "100"
29
- root_without_item.item.should_not be
27
+ context 'and it evaluates to false' do
28
+ it "doesn't parse embedded item" do
29
+ root_without_item.id.should == "100"
30
+ root_without_item.item.should_not be
31
+ end
30
32
  end
31
33
  end
32
34
  end
33
- end
34
35
 
35
- describe_example "embeds_one/with_start_key" do
36
- context 'when there is a start key to parse input' do
37
- it 'parses embedded item' do
38
- root.item.id.should == "2000"
36
+ describe_example "embeds_one/with_start_key" do
37
+ context 'when there is a start key to parse input' do
38
+ it 'parses embedded item' do
39
+ root.item.id.should == "2000"
40
+ end
39
41
  end
40
42
  end
41
43
  end
@@ -1,26 +1,28 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe_example "has_many/simple" do
4
- it 'parses properly' do
5
- root.id.should == 123
6
- root.login.should == 'jackiechan2010'
7
- end
8
-
9
- describe "#resource" do
10
- subject {root.resource}
11
-
12
- it 'has a link' do
13
- subject[:link].should be_an(Array)
3
+ describe "has_many" do
4
+ describe_example "has_many/simple" do
5
+ it 'parses properly' do
6
+ root.id.should == 123
7
+ root.login.should == 'jackiechan2010'
14
8
  end
15
9
 
16
- [:services, :billing, :devops].each do |rel|
17
- it "has a #{rel} relation" do
18
- subject[:link].any? {|l| l[:rel] == rel}.should be_true
10
+ describe "#resource" do
11
+ subject {root.resource}
12
+
13
+ it 'has a link' do
14
+ subject[:link].should be_an(Array)
19
15
  end
20
16
 
21
- it "has a href for #{rel} relation" do
22
- link = subject[:link].find {|l| l[:rel] == rel}
23
- link[:href].should =~ %r{/customers/123/#{rel}}
17
+ [:services, :billing, :devops].each do |rel|
18
+ it "has a #{rel} relation" do
19
+ subject[:link].any? {|l| l[:rel] == rel}.should be_true
20
+ end
21
+
22
+ it "has a href for #{rel} relation" do
23
+ link = subject[:link].find {|l| l[:rel] == rel}
24
+ link[:href].should =~ %r{/customers/123/#{rel}}
25
+ end
24
26
  end
25
27
  end
26
28
  end
@@ -6,64 +6,60 @@ def it_parses_property
6
6
  end
7
7
  end
8
8
 
9
- describe_example 'properties/simple' do
10
- it_parses_property
11
- end
12
-
13
- describe_example 'properties/with_field' do
14
- context 'when input has a different name for the property' do
9
+ describe "properties" do
10
+ describe_example 'properties/simple' do
15
11
  it_parses_property
16
12
  end
17
- end
18
13
 
19
- describe_example 'properties/with_field_path' do
20
- context 'when input has a different path for the property' do
21
- it_parses_property
14
+ describe_example 'properties/with_field' do
15
+ context 'when input has a different name for the property' do
16
+ it_parses_property
17
+ end
22
18
  end
23
- end
24
19
 
25
- describe_example 'properties/with_id' do
26
- context 'when property is an id' do
27
- it 'parses id' do
28
- root.id.should == "2000"
20
+ describe_example 'properties/with_field_path' do
21
+ context 'when input has a different path for the property' do
22
+ it_parses_property
29
23
  end
30
24
  end
31
- end
32
25
 
33
- describe_example 'properties/with_if' do
34
- context 'when a property has a conditional proc (:if)' do
35
- context 'and it evaluates to true' do
36
- it 'parses property' do
37
- root_with_description.description.should == "description"
26
+ describe_example 'properties/with_id' do
27
+ context 'when property is an id' do
28
+ it 'parses id' do
29
+ root.id.should == "2000"
38
30
  end
39
31
  end
32
+ end
40
33
 
41
- context 'and it evaluates to false' do
42
- it "doesn't parse property" do
43
- root_without_description.description.should_not be
34
+ describe_example 'properties/with_if' do
35
+ context 'when a property has a conditional proc (:if)' do
36
+ context 'and it evaluates to true' do
37
+ it 'parses property' do
38
+ root_with_description.description.should == "description"
39
+ end
44
40
  end
45
- end
46
- end
47
- end
48
41
 
49
- describe_example 'properties/with_key_converter' do
50
- after do
51
- RestModel::Configuration.configure do |c|
52
- c.convert_input_keys = nil
42
+ context 'and it evaluates to false' do
43
+ it "doesn't parse property" do
44
+ root_without_description.description.should_not be
45
+ end
46
+ end
53
47
  end
54
48
  end
55
49
 
56
- context 'when a diferent key converter is configured on rest model' do
57
- it_parses_property
50
+ describe_example 'properties/with_key_converter' do
51
+ context 'when a diferent key converter is configured on rest model' do
52
+ it_parses_property
53
+ end
58
54
  end
59
- end
60
55
 
61
- describe_example 'properties/with_two_key_converters' do
62
- context 'when key converters are configured for each class' do
63
- it_parses_property
56
+ describe_example 'properties/with_two_key_converters' do
57
+ context 'when key converters are configured for each class' do
58
+ it_parses_property
64
59
 
65
- it 'parses other property with different key converter' do
66
- root.product.unit_price.should == 29.9
60
+ it 'parses other property with different key converter' do
61
+ root.product.unit_price.should == 29.9
62
+ end
67
63
  end
68
64
  end
69
65
  end
@@ -1,12 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe_example 'summarization/simple' do
4
- subject {root[:entries].first}
3
+ describe "summarization" do
4
+ describe_example 'summarization/simple' do
5
+ subject {root[:entries].first}
5
6
 
6
- it 'summarizes resources' do
7
- subject.keys.count.should == 3
8
- subject[:id].should == '138911938'
9
- subject[:login].should == 'jackiechan2010'
10
- subject[:href].should == 'http://example.com/customers/138911938'
7
+ it 'summarizes resources' do
8
+ subject.keys.count.should == 3
9
+ subject[:id].should == '138911938'
10
+ subject[:login].should == 'jackiechan2010'
11
+ subject[:href].should == 'http://example.com/customers/138911938'
12
+ end
11
13
  end
12
14
  end
@@ -0,0 +1,40 @@
1
+ # encoding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ describe "update_attributes" do
6
+ describe_example "update_attributes/embeds_one" do
7
+ it "updates customer item name" do
8
+ root.item.id.should == "2000"
9
+ root.item.name.should == "name"
10
+ end
11
+ end
12
+
13
+ describe_example "update_attributes/simple" do
14
+ it "updates customer login" do
15
+ root.login.should == "newjackiechan2010"
16
+ end
17
+ end
18
+
19
+ describe_example "update_attributes/embeds_many" do
20
+ it "updates customer items" do
21
+ root.items.count.should == 1
22
+ root.items.first.id.should == 3000
23
+ end
24
+ end
25
+
26
+ describe_example "update_attributes/has_one" do
27
+ it "updates customer billing" do
28
+ root.billing.should_not be_nil
29
+ root.billing.login.should == "new_billing_login"
30
+ end
31
+ end
32
+
33
+ describe_example "update_attributes/has_many" do
34
+ it "updates customer services" do
35
+ root.services.should_not be_nil
36
+ root.services.count.should == 1
37
+ root.services.first.name.should == "new_service_name"
38
+ end
39
+ end
40
+ end
@@ -1,15 +1,15 @@
1
1
  module Examples
2
- def describe_example(file, &block)
3
- describe "example #{file}" do
2
+ def describe_example(file, tags = {}, &block)
3
+ describe "example #{file}", tags do
4
4
  [:Root, :Item, :Customer, :Entry].each do |klass|
5
5
  Examples.send(:remove_const, klass) if Examples.const_defined?(klass)
6
6
  end
7
7
 
8
- # silently {
9
-
10
- eval File.read("examples/#{file}.rb")
8
+ RestModel::Configuration.configure do |c|
9
+ c.convert_input_keys = RestModel::Configuration::DefaultHandler
10
+ end
11
11
 
12
- # }
12
+ silently {eval File.read("examples/#{file}.rb")}
13
13
 
14
14
  variables = instance_variables.reject {|var| var.to_s =~ /metadata$/}
15
15
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rest_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,11 +11,11 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2011-10-04 00:00:00.000000000Z
14
+ date: 2011-10-05 00:00:00.000000000Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
18
- requirement: &70114893435640 !ruby/object:Gem::Requirement
18
+ requirement: &70140255570300 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ~>
@@ -23,10 +23,10 @@ dependencies:
23
23
  version: '3.0'
24
24
  type: :runtime
25
25
  prerelease: false
26
- version_requirements: *70114893435640
26
+ version_requirements: *70140255570300
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: i18n
29
- requirement: &70114893432760 !ruby/object:Gem::Requirement
29
+ requirement: &70140255569800 !ruby/object:Gem::Requirement
30
30
  none: false
31
31
  requirements:
32
32
  - - ! '>='
@@ -34,10 +34,10 @@ dependencies:
34
34
  version: '0.5'
35
35
  type: :runtime
36
36
  prerelease: false
37
- version_requirements: *70114893432760
37
+ version_requirements: *70140255569800
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: rspec
40
- requirement: &70114893430600 !ruby/object:Gem::Requirement
40
+ requirement: &70140255569300 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
43
  - - ~>
@@ -45,10 +45,10 @@ dependencies:
45
45
  version: '2.6'
46
46
  type: :development
47
47
  prerelease: false
48
- version_requirements: *70114893430600
48
+ version_requirements: *70140255569300
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: guard
51
- requirement: &70114893428100 !ruby/object:Gem::Requirement
51
+ requirement: &70140255568780 !ruby/object:Gem::Requirement
52
52
  none: false
53
53
  requirements:
54
54
  - - ~>
@@ -56,10 +56,10 @@ dependencies:
56
56
  version: '0.5'
57
57
  type: :development
58
58
  prerelease: false
59
- version_requirements: *70114893428100
59
+ version_requirements: *70140255568780
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: guard-rspec
62
- requirement: &70114893425000 !ruby/object:Gem::Requirement
62
+ requirement: &70140255568100 !ruby/object:Gem::Requirement
63
63
  none: false
64
64
  requirements:
65
65
  - - ~>
@@ -67,10 +67,10 @@ dependencies:
67
67
  version: '0.4'
68
68
  type: :development
69
69
  prerelease: false
70
- version_requirements: *70114893425000
70
+ version_requirements: *70140255568100
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: growl
73
- requirement: &70114893423020 !ruby/object:Gem::Requirement
73
+ requirement: &70140255567560 !ruby/object:Gem::Requirement
74
74
  none: false
75
75
  requirements:
76
76
  - - ~>
@@ -78,7 +78,7 @@ dependencies:
78
78
  version: '1.0'
79
79
  type: :development
80
80
  prerelease: false
81
- version_requirements: *70114893423020
81
+ version_requirements: *70140255567560
82
82
  description: ''
83
83
  email:
84
84
  - victorcrodrigues@gmail.com
@@ -136,6 +136,11 @@ files:
136
136
  - examples/to_input/with_fields.rb
137
137
  - examples/to_input/without_key.rb
138
138
  - examples/to_input/without_nil.rb
139
+ - examples/update_attributes/embeds_many.rb
140
+ - examples/update_attributes/embeds_one.rb
141
+ - examples/update_attributes/has_many.rb
142
+ - examples/update_attributes/has_one.rb
143
+ - examples/update_attributes/simple.rb
139
144
  - lib/rest_model.rb
140
145
  - lib/rest_model/configuration.rb
141
146
  - lib/rest_model/key.rb
@@ -174,6 +179,7 @@ files:
174
179
  - spec/integration/has_many_spec.rb
175
180
  - spec/integration/property_spec.rb
176
181
  - spec/integration/summarization_spec.rb
182
+ - spec/integration/update_attributes_spec.rb
177
183
  - spec/spec_helper.rb
178
184
  - spec/support/examples.rb
179
185
  - spec/support/out.rb
@@ -231,6 +237,7 @@ test_files:
231
237
  - spec/integration/has_many_spec.rb
232
238
  - spec/integration/property_spec.rb
233
239
  - spec/integration/summarization_spec.rb
240
+ - spec/integration/update_attributes_spec.rb
234
241
  - spec/spec_helper.rb
235
242
  - spec/support/examples.rb
236
243
  - spec/support/out.rb