ende 0.2.9 → 0.2.10

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.
Files changed (143) hide show
  1. checksums.yaml +4 -4
  2. data/lib/assets/javascripts/aura/extensions/devise.js.coffee +2 -2
  3. data/lib/assets/javascripts/widgets/viewer/main.js.coffee +1 -1
  4. data/lib/ende/version.rb +1 -1
  5. data/vendor/assets/components/build.js +638 -133
  6. data/vendor/components/indefinido-indemma/.gitignore +14 -0
  7. data/vendor/components/indefinido-indemma/.gitignore~ +2 -0
  8. data/vendor/components/indefinido-indemma/.ruby-gemset +1 -0
  9. data/vendor/components/indefinido-indemma/.ruby-version +1 -0
  10. data/vendor/components/indefinido-indemma/Gemfile +13 -0
  11. data/vendor/components/indefinido-indemma/Guardfile +39 -0
  12. data/vendor/components/indefinido-indemma/History.md +0 -0
  13. data/vendor/components/indefinido-indemma/Readme.md +447 -0
  14. data/vendor/components/indefinido-indemma/build/development.js +340 -0
  15. data/vendor/components/indefinido-indemma/build/release.js +22039 -0
  16. data/vendor/components/indefinido-indemma/build/test.js +22039 -0
  17. data/vendor/components/indefinido-indemma/component.json +7 -3
  18. data/vendor/components/indefinido-indemma/components/chaijs-assertion-error/component.json +18 -0
  19. data/vendor/components/indefinido-indemma/components/chaijs-assertion-error/index.js +110 -0
  20. data/vendor/components/indefinido-indemma/components/chaijs-chai/component.json +47 -0
  21. data/vendor/components/indefinido-indemma/components/chaijs-chai/index.js +1 -0
  22. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/assertion.js +130 -0
  23. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/core/assertions.js +1270 -0
  24. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/interface/assert.js +1080 -0
  25. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/interface/expect.js +12 -0
  26. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/interface/should.js +76 -0
  27. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/addChainableMethod.js +94 -0
  28. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/addMethod.js +37 -0
  29. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/addProperty.js +40 -0
  30. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/eql.js +129 -0
  31. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/flag.js +32 -0
  32. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/getActual.js +19 -0
  33. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/getEnumerableProperties.js +25 -0
  34. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/getMessage.js +49 -0
  35. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/getName.js +20 -0
  36. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/getPathValue.js +102 -0
  37. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/getProperties.js +35 -0
  38. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/index.js +108 -0
  39. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/inspect.js +320 -0
  40. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/objDisplay.js +48 -0
  41. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/overwriteMethod.js +51 -0
  42. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/overwriteProperty.js +54 -0
  43. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/test.js +26 -0
  44. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/transferFlags.js +44 -0
  45. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai/utils/type.js +45 -0
  46. data/vendor/components/indefinido-indemma/components/chaijs-chai/lib/chai.js +80 -0
  47. data/vendor/components/indefinido-indemma/components/component-bind/component.json +14 -0
  48. data/vendor/components/indefinido-indemma/components/component-bind/index.js +24 -0
  49. data/vendor/components/indefinido-indemma/components/component-jquery/component.json +14 -0
  50. data/vendor/components/indefinido-indemma/components/component-jquery/index.js +9601 -0
  51. data/vendor/components/indefinido-indemma/components/component-type/component.json +18 -0
  52. data/vendor/components/indefinido-indemma/components/component-type/index.js +32 -0
  53. data/vendor/components/indefinido-indemma/components/indefinido-advisable/component.json +21 -0
  54. data/vendor/components/indefinido-indemma/components/indefinido-advisable/index.js +1 -0
  55. data/vendor/components/indefinido-indemma/components/indefinido-advisable/lib/advisable.js +60 -0
  56. data/vendor/components/indefinido-indemma/components/indefinido-observable/component.json +25 -0
  57. data/vendor/components/indefinido-indemma/components/indefinido-observable/components/cjohansen-sinon/sinon.js +4290 -0
  58. data/vendor/components/indefinido-indemma/components/indefinido-observable/index.js +1 -0
  59. data/vendor/components/indefinido-indemma/components/indefinido-observable/lib/adapters/rivets.js +26 -0
  60. data/vendor/components/indefinido-indemma/components/indefinido-observable/lib/observable.js +323 -0
  61. data/vendor/components/indefinido-indemma/components/indefinido-observable/vendor/shims/accessors-legacy.js +92 -0
  62. data/vendor/components/indefinido-indemma/components/indefinido-observable/vendor/shims/accessors.js +173 -0
  63. data/vendor/components/indefinido-indemma/components/indefinido-observable/vendor/shims/array.indexOf.js +8 -0
  64. data/vendor/components/indefinido-indemma/components/indefinido-observable/vendor/shims/object.create.js +77 -0
  65. data/vendor/components/indefinido-indemma/components/kapit-observe-utils/component.json +13 -0
  66. data/vendor/components/indefinido-indemma/components/paulmillr-es6-shim/component.json +17 -0
  67. data/vendor/components/indefinido-indemma/components/paulmillr-es6-shim/es6-shim.js +996 -0
  68. data/vendor/components/indefinido-indemma/components/pluma-assimilate/component.json +25 -0
  69. data/vendor/components/indefinido-indemma/components/pluma-assimilate/dist/assimilate.js +127 -0
  70. data/vendor/components/indefinido-indemma/karma.conf.js +86 -0
  71. data/vendor/components/indefinido-indemma/lib/record/associable.js +229 -82
  72. data/vendor/components/indefinido-indemma/lib/record/errors.js +1 -0
  73. data/vendor/components/indefinido-indemma/lib/record/persistable.js +32 -0
  74. data/vendor/components/indefinido-indemma/lib/record/queryable.js +32 -0
  75. data/vendor/components/indefinido-indemma/lib/record/resource.js +12 -4
  76. data/vendor/components/indefinido-indemma/lib/record/rest.js +1 -1
  77. data/vendor/components/indefinido-indemma/lib/record/restfulable.js +38 -27
  78. data/vendor/components/indefinido-indemma/lib/record/scopable.js +15 -2
  79. data/vendor/components/indefinido-indemma/lib/record/storable.js +48 -0
  80. data/vendor/components/indefinido-indemma/lib/record/validatable.js +10 -5
  81. data/vendor/components/indefinido-indemma/lib/record/validations/cpf.js +1 -1
  82. data/vendor/components/indefinido-indemma/lib/record.js +15 -12
  83. data/vendor/components/indefinido-indemma/spec/record/associable_spec.js +137 -0
  84. data/vendor/components/indefinido-indemma/spec/record/persistable_spec.js +36 -0
  85. data/vendor/components/indefinido-indemma/spec/record/queryable_spec.js +33 -0
  86. data/vendor/components/indefinido-indemma/spec/record/resource_spec.js +93 -0
  87. data/vendor/components/indefinido-indemma/spec/record/rest_spec.js +32 -0
  88. data/vendor/components/indefinido-indemma/spec/record/restfulable_spec.js +288 -0
  89. data/vendor/components/indefinido-indemma/spec/record/scopable_spec.js +212 -0
  90. data/vendor/components/indefinido-indemma/spec/record/storable_spec.js +53 -0
  91. data/vendor/components/indefinido-indemma/spec/record/translationable.js +28 -0
  92. data/vendor/components/indefinido-indemma/spec/record/validatable_spec.js +111 -0
  93. data/vendor/components/indefinido-indemma/spec/record/validations/associated_spec.js +43 -0
  94. data/vendor/components/indefinido-indemma/spec/record/validations/confirmation_spec.js +36 -0
  95. data/vendor/components/indefinido-indemma/spec/record/validations/cpf_spec.js +35 -0
  96. data/vendor/components/indefinido-indemma/spec/record/validations/presence_spec.js +28 -0
  97. data/vendor/components/indefinido-indemma/spec/record/validations/remote_spec.js +87 -0
  98. data/vendor/components/indefinido-indemma/spec/record/validations/type_spec.js +48 -0
  99. data/vendor/components/indefinido-indemma/spec/record_spec.js +37 -0
  100. data/vendor/components/indefinido-indemma/spec/spec_helper.js +11 -0
  101. data/vendor/components/indefinido-indemma/spec/support/value_objects/phone.js +45 -0
  102. data/vendor/components/indefinido-indemma/src/lib/extensions/rivets.coffee +17 -0
  103. data/vendor/components/indefinido-indemma/src/lib/record/associable.coffee +342 -0
  104. data/vendor/components/indefinido-indemma/src/lib/record/errors.coffee +20 -0
  105. data/vendor/components/indefinido-indemma/src/lib/record/maid.coffee +16 -0
  106. data/vendor/components/indefinido-indemma/src/lib/record/persistable.coffee +27 -0
  107. data/vendor/components/indefinido-indemma/src/lib/record/queryable.coffee +29 -0
  108. data/vendor/components/indefinido-indemma/src/lib/record/resource.coffee +106 -0
  109. data/vendor/components/indefinido-indemma/src/lib/record/rest.coffee +28 -0
  110. data/vendor/components/indefinido-indemma/src/lib/record/restfulable.coffee +348 -0
  111. data/vendor/components/indefinido-indemma/src/lib/record/scopable.coffee +275 -0
  112. data/vendor/components/indefinido-indemma/src/lib/record/storable.coffee +46 -0
  113. data/vendor/components/indefinido-indemma/src/lib/record/translationable.coffee +18 -0
  114. data/vendor/components/indefinido-indemma/src/lib/record/validatable.coffee +217 -0
  115. data/vendor/components/indefinido-indemma/src/lib/record/validations/associated.coffee +32 -0
  116. data/vendor/components/indefinido-indemma/src/lib/record/validations/confirmation.coffee +19 -0
  117. data/vendor/components/indefinido-indemma/src/lib/record/validations/cpf.coffee +58 -0
  118. data/vendor/components/indefinido-indemma/src/lib/record/validations/presence.coffee +19 -0
  119. data/vendor/components/indefinido-indemma/src/lib/record/validations/remote.coffee +65 -0
  120. data/vendor/components/indefinido-indemma/src/lib/record/validations/type.coffee +32 -0
  121. data/vendor/components/indefinido-indemma/src/lib/record.coffee +136 -0
  122. data/vendor/components/indefinido-indemma/src/spec/record/associable_spec.coffee +130 -0
  123. data/vendor/components/indefinido-indemma/src/spec/record/persistable_spec.coffee +30 -0
  124. data/vendor/components/indefinido-indemma/src/spec/record/queryable_spec.coffee +27 -0
  125. data/vendor/components/indefinido-indemma/src/spec/record/resource_spec.coffee +69 -0
  126. data/vendor/components/indefinido-indemma/src/spec/record/rest_spec.coffee +22 -0
  127. data/vendor/components/indefinido-indemma/src/spec/record/restfulable_spec.coffee +207 -0
  128. data/vendor/components/indefinido-indemma/src/spec/record/scopable_spec.coffee +191 -0
  129. data/vendor/components/indefinido-indemma/src/spec/record/storable_spec.coffee +40 -0
  130. data/vendor/components/indefinido-indemma/src/spec/record/translationable.coffee +19 -0
  131. data/vendor/components/indefinido-indemma/src/spec/record/validatable_spec.coffee +100 -0
  132. data/vendor/components/indefinido-indemma/src/spec/record/validations/associated_spec.coffee +35 -0
  133. data/vendor/components/indefinido-indemma/src/spec/record/validations/confirmation_spec.coffee +25 -0
  134. data/vendor/components/indefinido-indemma/src/spec/record/validations/cpf_spec.coffee +28 -0
  135. data/vendor/components/indefinido-indemma/src/spec/record/validations/presence_spec.coffee +24 -0
  136. data/vendor/components/indefinido-indemma/src/spec/record/validations/remote_spec.coffee +74 -0
  137. data/vendor/components/indefinido-indemma/src/spec/record/validations/type_spec.coffee +33 -0
  138. data/vendor/components/indefinido-indemma/src/spec/record_spec.coffee +23 -0
  139. data/vendor/components/indefinido-indemma/src/spec/spec_helper.coffee +9 -0
  140. data/vendor/components/indefinido-indemma/src/spec/support/value_objects/phone.coffee +30 -0
  141. data/vendor/components/indefinido-indemma/vendor/object/mixin.js +196 -0
  142. data/vendor/components/indefinido-indemma/vendor/owl/pluralize.js +190 -0
  143. metadata +130 -2
@@ -0,0 +1,14 @@
1
+ # Coverage reports
2
+
3
+ # Emacs Temporary Files
4
+ *~
5
+ *#
6
+ .#*
7
+
8
+ # Eclipse
9
+ .directory
10
+ .project
11
+ .loadpath
12
+
13
+ # Mac OS X Files
14
+ .DS_*
@@ -0,0 +1,2 @@
1
+ components
2
+ build
@@ -0,0 +1 @@
1
+ ruby-2.0.0-p195
@@ -0,0 +1,13 @@
1
+ # A sample Gemfile
2
+ source "https://rubygems.org"
3
+
4
+
5
+ group :development do
6
+ # gem 'libv8'
7
+ gem 'guard'
8
+ gem 'guard-coffeescript'
9
+ gem 'guard-shell'
10
+ gem "guard-bundler"
11
+ gem "rb-fsevent", :require => false
12
+ gem "growl", "~> 1.0"
13
+ end
@@ -0,0 +1,39 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'bundler' do
5
+ watch('Gemfile')
6
+ # Uncomment next line if Gemfile contain `gemspec' command
7
+ # watch(/^.+\.gemspec/)
8
+ end
9
+
10
+ guard 'coffeescript', :input => 'src', :output => '.', :bare => true
11
+ # Add files and commands to this file, like the example:
12
+ # watch(%r{file/path}) { `command(s)` }
13
+ #
14
+ guard 'shell' do
15
+ watch(/src\/lib\/(.*).coffee/) { |m|
16
+ puts ' Building release component'
17
+ puts `component-build --verbose --name release`
18
+
19
+ puts ' Building development component'
20
+ puts `component-build --verbose --name development --dev`
21
+
22
+ puts ' Building tests component'
23
+ puts `component-build --verbose --name test --dev`
24
+ }
25
+
26
+ watch(/component.json/) { |m|
27
+ puts ' Installing possible new components'
28
+ puts `component install`
29
+
30
+ puts ' Building release component'
31
+ puts `component-build --verbose --name release`
32
+
33
+ puts ' Building development component'
34
+ puts `component-build --verbose --name development --dev`
35
+
36
+ puts ' Building tests component'
37
+ puts `component-build --verbose --name test`
38
+ }
39
+ end
File without changes
@@ -0,0 +1,447 @@
1
+
2
+ indemma
3
+ =======
4
+
5
+ Indemma (mind picture → memory), client side, ES5 observable and REST, extensible modular data model.
6
+
7
+ Current version 0.1.0
8
+
9
+ Summary
10
+ -------
11
+
12
+ - We are tired of calling .attr on our models.
13
+ - We are tired of using templates
14
+ - We want a decent kind of polyfill to view models and rest clients until polymer is out of beta
15
+ - Requirements
16
+ - ES5 Getters and Setters (Shim ships with component, IE 10+)
17
+ - ES7 Observer (Shim ships with component, IE ?+)
18
+
19
+ Installation
20
+ ------------
21
+
22
+ $ component install indefinido/indemma
23
+
24
+ Usage
25
+ -----
26
+
27
+ ### Basic Functionality (Query, Observable, Advisable)
28
+
29
+ Basic functionality: Just a copy of [ActiveRecord Interface](https://github.com/rails/rails/blob/master/activerecord) on javascript.
30
+
31
+ #### Model
32
+
33
+ ```javascript
34
+
35
+ require('indemma');
36
+
37
+ var person = model.call({
38
+ resource: 'person',
39
+ record: {
40
+ after_initialize: [] // Callbacks
41
+
42
+ // Default attributes
43
+ avatar: "assets/images/layout/avatar_placeholder.png"
44
+ }
45
+ });
46
+
47
+ // In the future will return a promise object
48
+ // for now it doesn't, i know it's bad
49
+ person.create({name: "Arthur Philip Dent"}, {name: "Ford Perfect"});
50
+
51
+ // some time passed here
52
+
53
+ person.find(1) // {name: "Arthur Philip Dent", subscribe: ..., before: ..., after: ..., ... }
54
+
55
+ person.all() // [{name: "Arthur Philip Dent", subscribe: ..., ... }, {name: "Ford Perfect", subscribe: ..., ... }]
56
+
57
+ // TODO active record interface like: person.where(attribute: value)
58
+ ```
59
+
60
+ #### Record
61
+
62
+ ```javascript
63
+
64
+ require('indemma');
65
+
66
+ var person = model.call({resource: 'person'}),
67
+
68
+ arthur = person({
69
+ name : function () { return this.firstname + " " + this.surname; },
70
+ firstname: "Arthur Philip",
71
+ surname : "Dent",
72
+ species : "Humam"
73
+ });
74
+
75
+ // Subscribe to all changes
76
+ arthur.subscribe(function (updates) {
77
+ var i = updates.length, update;
78
+ while (i--) {
79
+ update = updates[i];
80
+ console.log(update.name, update.type, update.oldValue, '→', update.object[update.name]); // also this[update.name]
81
+ }
82
+ });
83
+
84
+ // Subscribe to single property change
85
+ arthur.subscribe('firstname', function ( update) {
86
+ console.log( update.name, update.type, update.oldValue, '→', update.object[ update.name]); // also this[ update.name]
87
+ });
88
+
89
+ // Advice function calls
90
+ arthur.after('name', function () {
91
+ console.log('excuted after arthur.name()');
92
+ });
93
+
94
+ arthur.firstname = "Arthur Philip Dent";
95
+ delete arthur.name
96
+ ```
97
+
98
+ ### Extensions
99
+
100
+ #### Associations
101
+
102
+ Basic active record like associations
103
+
104
+ ```javascript
105
+ require('indemma');
106
+
107
+ // Activate association support
108
+ require('indemma/lib/record/associations'); // Working on to be require('indemma/association')
109
+ model.associable();
110
+
111
+ var person = model.call({
112
+ resource: 'person',
113
+ has_many: 'towels' // Yes! Say no to camelcase!
114
+ }),
115
+
116
+ towel = model.call({
117
+ resource: 'towel',
118
+ belongs_to: 'person'
119
+ })
120
+
121
+ // Lets have our data
122
+
123
+ arthur = person({
124
+ name : function () { return this.firstname + " " + this.surname; },
125
+ firstname: "Arthur Philip",
126
+ surname : "Dent",
127
+ species : "Humam"
128
+ });
129
+
130
+ // Magic (⚡) and Science (☣) happening now
131
+ microfiber_towel = arthur.towels.create({
132
+ material : 'microfiber',
133
+ color : 'orange',
134
+ functions_amount: Infinity
135
+ });
136
+
137
+
138
+ arthur.towels[0] === microfiber_towel // true
139
+ arthur.towels.length // 1
140
+
141
+ microfiber_towel.person_id // 1
142
+ microfiber_towel.person = person({name: "Ford"}) // 1
143
+ microfiber_towel.person_id // 2 (This may vary depending on storage)
144
+ arthur.towels.length // 0
145
+ ```
146
+
147
+ TODO table with all available methods per association
148
+
149
+
150
+ Nested Attributes
151
+
152
+ ```javascript
153
+ require('indemma');
154
+
155
+ // Activate association support
156
+ require('indemma/lib/record/associations'); // Working on to be require('indemma/association')
157
+ model.associable();
158
+
159
+ var person = model.call({
160
+ resource: 'person',
161
+ nest_attributes: 'towel'
162
+ }),
163
+
164
+ towel = model.call({
165
+ resource: 'towel'
166
+ }),
167
+
168
+ arthur = person({
169
+ name : function () { return this.firstname + " " + this.surname; },
170
+ firstname: "Arthur Philip",
171
+ surname : "Dent",
172
+ species : "Humam"
173
+ });
174
+
175
+ arthur.towel_attributes = { material: 'microfiber', functions: Infinity }
176
+ arthur.towels[0]; // { material: 'microfiber', functions: Infinity } (Still in beta)
177
+
178
+ ```
179
+
180
+ #### Restful
181
+
182
+ ```javascript
183
+
184
+ require('indemma');
185
+
186
+ // Activate restful support
187
+ // Compatible with default rails json rendering e.g. render :json => @person
188
+ // Depends on resourceful module
189
+ require('indemma/lib/record/restful'); // Working on to be require('indemma/restful')
190
+
191
+ var person = model.call({
192
+ resource: 'person'
193
+ }),
194
+
195
+ arthur = person({
196
+ name : function () { return this.firstname + " " + this.surname; },
197
+ firstname: "Arthur Philip",
198
+ surname : "Dent",
199
+ species : "Humam"
200
+ });
201
+
202
+ // ⚡ + ☣ again
203
+ arthur.save(); // POST /people
204
+
205
+ // ... some time passes
206
+ arthur.species = "Homo Sapiens Sapiens";
207
+ arthur.save(); // PUT /people/1
208
+
209
+ // serialization
210
+ arthur.json(); // {name: "Arthur Philip Dent", firstname: "Arthur Philip", surname: "Dent", species: "Humam"}
211
+
212
+ ```
213
+
214
+ #### Resourcefull
215
+
216
+ Inflection and resource modules together.
217
+
218
+ ```javascript
219
+
220
+ require('indemma/lib/record/resource'); // Working on to be require('indemma/resourceable')
221
+
222
+ var person = model.call({
223
+ resource: {
224
+ name : 'person',
225
+ param_name: 'guy',
226
+ scope : 'world'
227
+ // singular: true // Works as singular resource too =D
228
+ }
229
+ }),
230
+
231
+ arthur = person({
232
+ name : "Arthur Philip",
233
+ species: "Humam"
234
+ });
235
+
236
+ // Also sets the accept header to application/json
237
+
238
+ arthur.save(); // POST /world/person?guy[name]=Arthur Philip&guy[species]=Human
239
+
240
+ ```
241
+
242
+ #### Scopable
243
+
244
+ Active Record like scopes and some finders
245
+
246
+ ```javascript
247
+ require('indemma/lib/record/scopable'); // Working on to be require('indemma/scopable)
248
+
249
+ // Sintax is up to change yet
250
+ var person = model.call({
251
+ resource: 'person',
252
+ $gender: String,
253
+ $age: Number
254
+ $towel_ids: Array
255
+
256
+ // $towel: function () {} // Runtime scope builders to come
257
+ });
258
+
259
+ // Also sets the accept header to application/json
260
+
261
+ person.all(); // GET /people
262
+ person.gender('m'); // GET /people?gender=m
263
+ person.age(32); // GET /people?age=32
264
+ person.none.age(32); // GET /people
265
+ person.towel_ids(1, 2, 3); // GET /people?towel_ids[]=1&towel_ids[]=2&towel_ids[]=3
266
+
267
+ ```
268
+
269
+ #### Maid
270
+
271
+ TODO make documentation
272
+
273
+ #### Storage (Persistance, Queryable & Storeable)
274
+
275
+ TODO make documentation
276
+
277
+ ### Validations support
278
+
279
+ ```javascript
280
+ require('indemma');
281
+
282
+ // model definition
283
+ var person = model.call({
284
+ resource : 'person',
285
+
286
+ email : 'Email', // By default uses type validation
287
+ age : Number,
288
+ birthday : {type: Number},
289
+
290
+ // You can use builtin validators sintax
291
+ validates_presence_of : 'age',
292
+ validates_remotely : 'email', // Remote validator will do POST /people/validate?person[email]=arthur@earth.com
293
+
294
+ // Coming soon!
295
+ // validates : {name: {beginsWith: 'arthur', presence: true}} // Or you can use the object syntax
296
+
297
+ });
298
+
299
+
300
+ arthur = person({
301
+ name: "Arthur Philip Dent",
302
+ });
303
+
304
+
305
+ arthur.email = "arthur@earth.com";// "arthur@earth.com"
306
+ arthur.valid; // true
307
+
308
+ arthur.email = "wrong@@";
309
+ arthur.valid; // false
310
+
311
+ // When calling valid attribute will trigger validations
312
+ arthur.errors; // [ email: ["Email 'wrongg@@' is in an invalid format.", "..."]
313
+ arthur.errors.messages.email; // "Email 'wrongg@@' is in an invalid format."
314
+
315
+ // When using remote validations use the returned deferred
316
+ arthur.validate(function (record, validation_results...) {
317
+ alert(record.errors.messages.email);
318
+ });
319
+
320
+ <div>
321
+ <input class="invalid" data-value="user.email" data-class-invalid="user.errors.messages.email" />
322
+ </div>
323
+
324
+ // Validators reference
325
+ person.validators // [ {attribute_name: 'email', type: 'Email', ... } , ... ]
326
+
327
+
328
+ // Suport for custom validators coming soon!
329
+ // person.validators.phone = function (record, attribute, value) {... }
330
+
331
+ ```
332
+
333
+ #### Adapters
334
+
335
+ ##### Rivets
336
+
337
+ ```javascript
338
+ require('indemma');
339
+
340
+ // Activate restful support
341
+ // Requires observer-shim
342
+ // Compatible with default rails json rendering e.g. render :json => @person
343
+ require('indemma/lib/record/rivets'); // Working on to be require('indemma/adapters/rivets')
344
+
345
+ var person = model.call({resource: 'person'}),
346
+
347
+ arthur = person({
348
+ name : function () { return this.firstname + " " + this.surname; },
349
+ firstname: "Arthur Philip",
350
+ surname : "Dent",
351
+ species : "Humam"
352
+ }),
353
+
354
+ template = '<div class="person">' +
355
+ ' <span data-html="person.name"></span> ' +
356
+ ' <span data-html="person.species"></span> ' +
357
+ '</div>';
358
+
359
+ document.body.innerHTML = template;
360
+ element = document.body.children[0];
361
+
362
+ arthur.tie(element); // equivalent to rivets.bind(element, {person: arthur});
363
+
364
+ arthur.species = "Homo Sapiens";
365
+
366
+ ```
367
+
368
+ ## TODO
369
+
370
+ Move API to a custom page or the github wiki
371
+
372
+ ## Tests!
373
+
374
+ A medium part of tests has been written, but more on the go!
375
+ You can help by implementing the body of some spec
376
+
377
+
378
+ ### Define property on steroids sintax support
379
+
380
+ With setter on steroids
381
+
382
+ ```javascript
383
+ require('indemma');
384
+
385
+ // model definition
386
+ var person = model.call({
387
+ resource : 'person',
388
+ name : {
389
+ set : function (name) { this.name = name.split(' '); },
390
+ get : function (name) { this.name.join(' '); }
391
+ },
392
+ firstname: {
393
+ get : function () { this.name[0] },
394
+ }
395
+ });
396
+
397
+ arthur = person({
398
+ name: "Arthur Philip Dent",
399
+ species : "Humam"
400
+ });
401
+
402
+ arthur.firstname // Arthur
403
+ ```
404
+
405
+ ### Inflections support
406
+
407
+ ```javascript
408
+ require('indemma');
409
+
410
+ var person = model.call({resource: 'person'});
411
+ person.plural // 'people'
412
+
413
+ ```
414
+
415
+ ### Storage extension
416
+
417
+ ```javascript
418
+ require('indemma');
419
+
420
+ model.storable()
421
+
422
+ arthur = person({
423
+ name: "Arthur Philip Dent",
424
+ species : "Humam",
425
+ });
426
+
427
+ arthur.save() // Store on selected storage (localStorage, memory, etc ...)
428
+ ```
429
+
430
+ ### Single extensions call option
431
+
432
+ ```javascript
433
+ require('indemma');
434
+
435
+ model(['advisable', 'observable', 'restfulable', 'maid', ... ]);
436
+ ```
437
+
438
+ Credits
439
+ -------
440
+
441
+ Built upon the lovely [coffeescript](http://coffeescript.org/) language
442
+ Building with [the prototypal paradigm](http://ericleads.com/2013/02/fluent-javascript-three-different-kinds-of-prototypal-oo) library [stampit](https://github.com/dilvie/stampit)
443
+
444
+
445
+
446
+
447
+ This project rocks and uses [WTFP-LICENSE](http://www.wtfpl.net)