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