backbone-relational-hal-rails 0.1.1 → 0.1.2

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 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.