backbone-relational-hal-rails 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YTg0NWU1NDg4N2RiYTk1MTdmNDU0NjM4YTI2NmE3ODY0NTJiNjMwNA==
4
+ Y2Y4OTA2MmEwMjUzMzA3M2UzMTIwMDg0MmU5ZDQ4MmNhNTNlY2E2Mw==
5
5
  data.tar.gz: !binary |-
6
- OTQ1Y2Q5MWI4ZTFjYzY1ZGFmNTQyNmYxZDExZGI0Yjc0ZWQzMDliYw==
6
+ MGM1MTQ5YjRiYzk5MDU4ODhmMzQzNzY1MjUwZTAzZGM5ZTFmMGY0ZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NzMxODExOTg2ZmNhM2VhNjU4NTIzMjU0Njc1ZTI4YWViMjIzMTM1YzgwOWY1
10
- MTkwNjQxMjg4NWIyMGVmN2ExYTRhNjRjMGU4MWZiNGJlNzM4ZjY3NjI4Y2Iw
11
- ODVjMTgxM2VjNzhmOTU3NmE4Mzc2Mzk4YjIzMzNmNWZiZGRhM2M=
9
+ ZTJkMjc4MDM0N2VjN2E1ZTE2MTkyYzEzZWRlNGI1ZGJiOGU5MjFiZjJlYmJm
10
+ MjQ0ZjE1NTRjMDVjODAyZmYzOGVkN2E3MWQxMGU2NDNkNDM5YTYyNDkxNTU0
11
+ OGYyZTMzMGE2YWNlZTM2MzhmM2VkNTVkYmU4YWUxODU3MDY0ZjE=
12
12
  data.tar.gz: !binary |-
13
- ZDU5ZWE5N2ViOTQxZTMyY2U2NDhhZTM2NzEzMjhkYjhlNTdiM2NhZTIxOWRh
14
- ZDBhNDkzZTYwMjI0MTMwMTMxZWE4NjA0MzI5ODlmZjcyZWM0YjIyNGNlZDg2
15
- MjllN2M1YzYyYzg3MTUwNGY2MzJhNTQ2YjI0ZTY0ODkxODQyNzg=
13
+ MDA4ZWE3ZTFhZTBiYjk5M2IwMTA2YmFlYTViY2RhYjdiNDY2YWEwMGQ2OGZj
14
+ NmZhNzZhMzU2ODVlYzA2MzA0ODY2ZGIxZDFlYTZiY2IyZjljNzUxZDI2ZTBh
15
+ NWJjODExZDZiNGY3OTg0ZWJjZjJiZGEwNDFkZDI0ZmE1Y2IxYmY=
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -1,6 +1,6 @@
1
1
  module BackboneRelationalHal
2
2
  module Rails
3
- VERSION = "0.1.1"
4
- BACKBONE_RELATIONAL_HAL_VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
+ BACKBONE_RELATIONAL_HAL_VERSION = "0.1.2"
5
5
  end
6
6
  end
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * backbone-relational-hal v0.1.1
2
+ * backbone-relational-hal v0.1.2
3
3
  * Copyright (c) 2014 Simon Oulevay
4
4
  * Distributed under MIT license
5
5
  * https://github.com/AlphaHydrae/backbone-relational-hal
@@ -24,6 +24,11 @@ var HalLink = RelationalModel.extend({
24
24
  return href;
25
25
  },
26
26
 
27
+ tag: function(contents, options) {
28
+ options = options || {};
29
+ return $('<a />').attr('href', this.href(options.href))[options.html ? 'html' : 'text'](contents);
30
+ },
31
+
27
32
  model: function(options) {
28
33
  options = _.extend({}, options);
29
34
 
@@ -70,17 +75,53 @@ var HalResourceLinks = RelationalModel.extend({
70
75
 
71
76
  var HalModelEmbedded = RelationalModel.extend({
72
77
 
78
+ toJSON: function() {
79
+ return _.omit(RelationalModel.prototype.toJSON.apply(this, arguments), 'id');
80
+ },
81
+
73
82
  embedded: function(rel) {
74
- return this.get(rel);
83
+ return this.get(rel) || null;
75
84
  }
76
85
  });
77
86
 
87
+ var n = 1;
88
+
78
89
  var HalResource = Backbone.RelationalHalResource = RelationalModel.extend({
79
90
 
91
+ initialize: function(attrs, options) {
92
+
93
+ this.halEmbeddedId = n++;
94
+
95
+ if (this.has('_embedded') && !this.get('_embedded').id) {
96
+ this.get('_embedded').set({ id: this.halEmbeddedId }, { silent: true });
97
+ }
98
+
99
+ _.extend(this, _.pick(options || {}, 'halUrlTemplate'));
100
+
101
+ this.initializeResource.apply(this, arguments);
102
+ },
103
+
104
+ initializeResource: function() {},
105
+
106
+ parse: function(response) {
107
+
108
+ if (response._embedded) {
109
+ response._embedded.id = this.halEmbeddedId;
110
+ }
111
+
112
+ return response;
113
+ },
114
+
80
115
  url: function() {
81
116
 
82
117
  if (this.hasLink('self')) {
83
- return this.link('self').href();
118
+
119
+ var options = {};
120
+ if (this.halUrlTemplate) {
121
+ options.template = _.result(this, 'halUrlTemplate');
122
+ }
123
+
124
+ return this.link('self').href(options);
84
125
  } else if (this._cachedHalUrl) {
85
126
  return this._cachedHalUrl;
86
127
  }
@@ -161,18 +202,34 @@ var HalResource = Backbone.RelationalHalResource = RelationalModel.extend({
161
202
 
162
203
  var relationalHalResourceExtend = HalResource.extend;
163
204
 
164
- HalResource.extend = function(options) {
205
+ var customExtend = function(options) {
165
206
 
166
207
  options = _.defaults({}, options, {
167
- relations: [],
168
- halEmbedded: []
208
+ relations: []
169
209
  });
170
210
 
171
- var embedded = HalModelEmbedded.extend({
211
+ var embeddedRelations;
212
+ if (_.isArray(options.halEmbedded)) {
213
+ embeddedRelations = _.map(options.halEmbedded, function(rel) {
214
+ return _.clone(rel);
215
+ });
216
+ } else if (_.isObject(options.halEmbedded)) {
217
+ embeddedRelations = _.reduce(options.halEmbedded, function(memo, rel, key) {
218
+ memo.push(_.extend({}, rel, { key: key }));
219
+ return memo;
220
+ }, []);
221
+ } else if (typeof(options.halEmbedded) != 'undefined') {
222
+ throw new Error('halEmbedded must be an array or object');
223
+ } else {
224
+
225
+ var previousEmbedded = _.findWhere(this.prototype.relations, { key: '_embedded' });
226
+ if (previousEmbedded && previousEmbedded.relatedModel) {
227
+ embeddedRelations = (previousEmbedded.relatedModel.prototype.relations || []).slice();
228
+ }
229
+ }
172
230
 
173
- relations: _.map(options.halEmbedded, function(halEmbedded) {
174
- return _.clone(halEmbedded);
175
- })
231
+ var EmbeddedModel = HalModelEmbedded.extend({
232
+ relations: embeddedRelations
176
233
  });
177
234
 
178
235
  options.relations.push({
@@ -186,13 +243,18 @@ HalResource.extend = function(options) {
186
243
  options.relations.push({
187
244
  type: Backbone.HasOne,
188
245
  key: '_embedded',
189
- relatedModel: embedded,
246
+ relatedModel: EmbeddedModel,
190
247
  includeInJSON: false
191
248
  });
192
249
 
193
- return relationalHalResourceExtend.call(HalResource, options);
250
+ var res = relationalHalResourceExtend.call(this, options);
251
+ res.extend = customExtend;
252
+
253
+ return res;
194
254
  };
195
255
 
256
+ HalResource.extend = customExtend;
257
+
196
258
  Backbone.originalSync = Backbone.sync;
197
259
 
198
260
  Backbone.sync = function(method, model, options) {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: backbone-relational-hal-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Oulevay
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-04 00:00:00.000000000 Z
11
+ date: 2014-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
64
  version: '0'
65
65
  requirements: []
66
66
  rubyforge_project:
67
- rubygems_version: 2.2.0
67
+ rubygems_version: 2.2.1
68
68
  signing_key:
69
69
  specification_version: 4
70
70
  summary: Backbone-relational-hal assets for Ruby on Rails.