lanes 0.0.8 → 0.1.0
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/client/lanes/components/ChoicesInput.coffee +1 -1
- data/client/lanes/components/grid/Grid.coffee +4 -4
- data/client/lanes/components/grid/PopOverEditor.coffee +1 -1
- data/client/lanes/components/popover/PopOver.coffee +3 -3
- data/client/lanes/components/record_finder/RecordFinder.coffee +4 -4
- data/client/lanes/components/select_field/SelectField.coffee +1 -1
- data/client/lanes/extension/Base.coffee +1 -1
- data/client/lanes/extension/Extensions.coffee +3 -3
- data/client/lanes/extension/GlAccounts.coffee +2 -2
- data/client/lanes/lib/namespace.coffee +1 -1
- data/client/lanes/minimal.js +1 -1
- data/client/lanes/{data/Model.coffee → models/Base.coffee} +29 -47
- data/client/lanes/models/Bootstrap.coffee +8 -0
- data/client/lanes/{data → models}/ChangeSet.coffee +3 -3
- data/client/lanes/{data → models}/Collection.coffee +20 -40
- data/client/lanes/{data → models}/Config.coffee +2 -2
- data/client/lanes/{data → models}/PubSub.coffee +4 -3
- data/client/lanes/{data → models}/Query.coffee +7 -7
- data/client/lanes/{data → models}/Screens.coffee +12 -12
- data/client/lanes/models/Sync.coffee +86 -0
- data/client/lanes/{data → models}/User.coffee +8 -8
- data/client/lanes/{data → models}/index.js +1 -1
- data/client/lanes/{data → models}/mixins/HasCodeField.coffee +2 -2
- data/client/lanes/screens/Base.coffee +1 -1
- data/client/lanes/screens/ChangeListener.coffee +1 -1
- data/client/lanes/screens/Instance.coffee +3 -3
- data/client/lanes/screens/screen-definitions.js.erb +2 -2
- data/client/lanes/views/Base.coffee +10 -10
- data/client/lanes/views/ModelObserver.coffee +1 -1
- data/client/lanes/views/PubSub.coffee +4 -4
- data/client/lanes/views/Viewport.coffee +1 -1
- data/client/lanes/workspace/ActiveScreensSwitcher.coffee +1 -1
- data/client/lanes/workspace/Pages.coffee +2 -2
- data/client/lanes/workspace/ScreensMenu.coffee +1 -1
- data/lanes.gemspec +2 -1
- data/lib/lanes/command/generate_model.rb +6 -7
- data/lib/lanes/command/named_command.rb +1 -1
- data/lib/lanes/command/templates/client/index.js +1 -1
- data/lib/lanes/command/templates/client/{data → models}/Model.coffee +3 -7
- data/lib/lanes/command/templates/client/views/View.coffee +1 -1
- data/lib/lanes/command/templates/spec/client/models/ModelSpec.coffee +5 -0
- data/lib/lanes/command/update_model.rb +4 -11
- data/lib/lanes/command.rb +4 -3
- data/lib/lanes/version.rb +1 -1
- data/spec/helpers/lanes-helpers.coffee +5 -4
- data/spec/lanes/{data/ModelSpec.coffee → models/BaseSpec.coffee} +23 -11
- data/spec/lanes/{data → models}/PubSubSpec.coffee +6 -6
- data/views/specs.erb +1 -4
- metadata +19 -20
- data/client/lanes/data/Bootstrap.coffee +0 -8
- data/client/lanes/data/Sync.coffee +0 -63
- data/lib/lanes/command/templates/spec/client/data/ModelSpec.coffee +0 -5
- data/lib/lanes/spec_asset_expander.rb +0 -43
@@ -1,17 +1,17 @@
|
|
1
1
|
|
2
|
-
describe "Model Suite", ->
|
2
|
+
describe "Base Model Suite", ->
|
3
3
|
Model = undefined
|
4
4
|
Collection = undefined
|
5
5
|
class Color
|
6
6
|
constructor: -> super
|
7
7
|
props: { id: 'integer', rgb: 'string' }
|
8
|
-
Lanes.
|
8
|
+
Lanes.Models.Base.extend(Color)
|
9
9
|
|
10
10
|
makeModel = (props,args={})->
|
11
11
|
_.extend(Model.prototype, props)
|
12
|
-
Lanes.
|
12
|
+
Lanes.Models.Base.extend(Model)
|
13
13
|
Collection::model = Model
|
14
|
-
Lanes.
|
14
|
+
Lanes.Models.Collection.extend(Collection)
|
15
15
|
collection = new Collection
|
16
16
|
return collection.add(new Model(args))
|
17
17
|
|
@@ -35,7 +35,7 @@ describe "Model Suite", ->
|
|
35
35
|
expect(model.isDirty()).toBeFalse()
|
36
36
|
model.foo = 'baz' # session prop
|
37
37
|
expect(model.isDirty()).toBeFalse()
|
38
|
-
expect(model.
|
38
|
+
expect(model.unsavedModels()).toBeEmptyObject()
|
39
39
|
model.set( saved: 'true' )
|
40
40
|
expect(model.isDirty()).toBeTrue()
|
41
41
|
|
@@ -83,7 +83,7 @@ describe "Model Suite", ->
|
|
83
83
|
|
84
84
|
}, { foo: 'one, two, three'} )
|
85
85
|
expect(model.isDirty()).toBeTrue()
|
86
|
-
expect(model.
|
86
|
+
expect(model.unsavedModels()).toEqual( foo: 'one, two, three' )
|
87
87
|
model.save()
|
88
88
|
expect(model.sync).toHaveBeenCalledWith('create', model, jasmine.any(Object))
|
89
89
|
model.id=11
|
@@ -111,6 +111,23 @@ describe "Model Suite", ->
|
|
111
111
|
expect(options).toHaveTrue('ignoreUnsaved')
|
112
112
|
expect(options).toHaveNumberWithinRange('limit',1,1)
|
113
113
|
|
114
|
+
it "creates a Collection property", ->
|
115
|
+
model = makeModel({})
|
116
|
+
expect(Model.Collection::model).toEqual(Model)
|
117
|
+
|
118
|
+
it "loads using where", ->
|
119
|
+
model = makeModel({
|
120
|
+
props:
|
121
|
+
{ id: 'integer', title: 'string' }
|
122
|
+
})
|
123
|
+
syncSucceedWith([
|
124
|
+
{ id: 1, title: 'first value' }
|
125
|
+
{ id: 2, title: 'second value' }
|
126
|
+
])
|
127
|
+
collection = model.where(title: 'first value')
|
128
|
+
options = model.sync.lastOptions()
|
129
|
+
expect(options.query).toEqual({title:'first value'})
|
130
|
+
expect(collection.length).toEqual(2)
|
114
131
|
|
115
132
|
it "can be destroyed", ->
|
116
133
|
model = makeModel({
|
@@ -145,8 +162,3 @@ describe "Model Suite", ->
|
|
145
162
|
expect(model.sync).toHaveBeenCalledWith('read', model, jasmine.any(Object))
|
146
163
|
options = model.sync.lastOptions()
|
147
164
|
expect(options.include).toEqual(['color'])
|
148
|
-
|
149
|
-
it "assigns an inverse collection property", ->
|
150
|
-
model = makeModel({})
|
151
|
-
expect(Model::Collection).toEqual(Collection)
|
152
|
-
|
@@ -4,18 +4,18 @@ describe "PubSub Suite", ->
|
|
4
4
|
it "checks in/out a model when it binds to a view", ->
|
5
5
|
view = new Lanes.Testing.View
|
6
6
|
model = new Lanes.Testing.Model(id:1)
|
7
|
-
spyOn(Lanes.
|
8
|
-
spyOn(Lanes.
|
7
|
+
spyOn(Lanes.Models.PubSub,'add').and.callThrough()
|
8
|
+
spyOn(Lanes.Models.PubSub,'remove')
|
9
9
|
view.model = model
|
10
|
-
expect(Lanes.
|
10
|
+
expect(Lanes.Models.PubSub.add).toHaveBeenCalledWith(model)
|
11
11
|
expect(Lanes.Vendor.MessageBus.subscribe)
|
12
12
|
.toHaveBeenCalledWith("/test/1", jasmine.any(Function))
|
13
13
|
view.unset('model')
|
14
|
-
expect(Lanes.
|
14
|
+
expect(Lanes.Models.PubSub.remove).toHaveBeenCalledWith(model)
|
15
15
|
|
16
16
|
it "can retrieve a model after checkin", ->
|
17
17
|
model = new Lanes.Testing.Model(id: 11, name:'bar')
|
18
|
-
Lanes.
|
19
|
-
checkin = Lanes.
|
18
|
+
Lanes.Models.PubSub.add(model)
|
19
|
+
checkin = Lanes.Models.PubSub.instanceFor(Lanes.Testing.Model, 11)
|
20
20
|
expect(checkin).toEqual(model)
|
21
21
|
|
data/views/specs.erb
CHANGED
@@ -5,18 +5,15 @@
|
|
5
5
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui"/>
|
7
7
|
<title>Lanes Specs</title>
|
8
|
-
|
9
8
|
<%= javascript_tag 'lanes/workspace.js' %>
|
10
|
-
|
11
9
|
<% specs.css_files.each do |css_file| %>
|
12
10
|
<link rel="stylesheet" href="<%= css_file %>" type="text/css" media="screen"/>
|
13
11
|
<% end %>
|
14
|
-
|
15
12
|
<% specs.js_files.each do | js_file | %>
|
16
13
|
<script src="<%= js_file %>" type="text/javascript"></script>
|
17
14
|
<% end %>
|
18
15
|
<script type="text/javascript">
|
19
|
-
Lanes.
|
16
|
+
Lanes.Models.Bootstrap.initialize( <%= client_bootstrap_data %> );
|
20
17
|
</script>
|
21
18
|
|
22
19
|
</head>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lanes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Stitt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -502,18 +502,6 @@ files:
|
|
502
502
|
- client/lanes/components/select_field/SelectField.coffee
|
503
503
|
- client/lanes/components/select_field/index.js
|
504
504
|
- client/lanes/components/select_field/select_field.scss
|
505
|
-
- client/lanes/data/Bootstrap.coffee
|
506
|
-
- client/lanes/data/ChangeSet.coffee
|
507
|
-
- client/lanes/data/Collection.coffee
|
508
|
-
- client/lanes/data/Config.coffee
|
509
|
-
- client/lanes/data/Model.coffee
|
510
|
-
- client/lanes/data/PubSub.coffee
|
511
|
-
- client/lanes/data/Query.coffee
|
512
|
-
- client/lanes/data/Screens.coffee
|
513
|
-
- client/lanes/data/Sync.coffee
|
514
|
-
- client/lanes/data/User.coffee
|
515
|
-
- client/lanes/data/index.js
|
516
|
-
- client/lanes/data/mixins/HasCodeField.coffee
|
517
505
|
- client/lanes/extension/Base.coffee
|
518
506
|
- client/lanes/extension/EarlyExtensions.js.erb
|
519
507
|
- client/lanes/extension/Extensions.coffee
|
@@ -538,6 +526,18 @@ files:
|
|
538
526
|
- client/lanes/lib/utilFunctions.coffee
|
539
527
|
- client/lanes/minimal.js
|
540
528
|
- client/lanes/minimal.scss.erb
|
529
|
+
- client/lanes/models/Base.coffee
|
530
|
+
- client/lanes/models/Bootstrap.coffee
|
531
|
+
- client/lanes/models/ChangeSet.coffee
|
532
|
+
- client/lanes/models/Collection.coffee
|
533
|
+
- client/lanes/models/Config.coffee
|
534
|
+
- client/lanes/models/PubSub.coffee
|
535
|
+
- client/lanes/models/Query.coffee
|
536
|
+
- client/lanes/models/Screens.coffee
|
537
|
+
- client/lanes/models/Sync.coffee
|
538
|
+
- client/lanes/models/User.coffee
|
539
|
+
- client/lanes/models/index.js
|
540
|
+
- client/lanes/models/mixins/HasCodeField.coffee
|
541
541
|
- client/lanes/plugins/ResizeSensor.js
|
542
542
|
- client/lanes/plugins/index.js
|
543
543
|
- client/lanes/plugins/overlay.coffee
|
@@ -811,8 +811,8 @@ files:
|
|
811
811
|
- lib/lanes/command/templates/client/Extension.coffee
|
812
812
|
- lib/lanes/command/templates/client/components/.gitkeep
|
813
813
|
- lib/lanes/command/templates/client/components/Component.coffee
|
814
|
-
- lib/lanes/command/templates/client/data/Model.coffee
|
815
814
|
- lib/lanes/command/templates/client/index.js
|
815
|
+
- lib/lanes/command/templates/client/models/Model.coffee
|
816
816
|
- lib/lanes/command/templates/client/screens/Screen.coffee
|
817
817
|
- lib/lanes/command/templates/client/screens/index.js
|
818
818
|
- lib/lanes/command/templates/client/screens/layout.html
|
@@ -834,7 +834,7 @@ files:
|
|
834
834
|
- lib/lanes/command/templates/lib/namespace/version.rb
|
835
835
|
- lib/lanes/command/templates/public/.gitkeep
|
836
836
|
- lib/lanes/command/templates/spec/client/Screen.coffee
|
837
|
-
- lib/lanes/command/templates/spec/client/
|
837
|
+
- lib/lanes/command/templates/spec/client/models/ModelSpec.coffee
|
838
838
|
- lib/lanes/command/templates/spec/client/views/ViewSpec.coffee
|
839
839
|
- lib/lanes/command/templates/spec/fixtures/namespace/model.yml
|
840
840
|
- lib/lanes/command/templates/spec/namespace/model_spec.rb
|
@@ -874,7 +874,6 @@ files:
|
|
874
874
|
- lib/lanes/rails_engine.rb
|
875
875
|
- lib/lanes/rake_tasks.rb
|
876
876
|
- lib/lanes/screens.rb
|
877
|
-
- lib/lanes/spec_asset_expander.rb
|
878
877
|
- lib/lanes/spec_helper.rb
|
879
878
|
- lib/lanes/strings.rb
|
880
879
|
- lib/lanes/testing_models.rb
|
@@ -905,8 +904,8 @@ files:
|
|
905
904
|
- spec/helpers/jasmine-jquery.js
|
906
905
|
- spec/helpers/jasmine-matchers.js
|
907
906
|
- spec/helpers/lanes-helpers.coffee
|
908
|
-
- spec/lanes/
|
909
|
-
- spec/lanes/
|
907
|
+
- spec/lanes/models/BaseSpec.coffee
|
908
|
+
- spec/lanes/models/PubSubSpec.coffee
|
910
909
|
- spec/lanes/views/BaseSpec.coffee
|
911
910
|
- spec/numbers_spec.rb
|
912
911
|
- spec/strings_spec.rb
|
@@ -927,7 +926,7 @@ files:
|
|
927
926
|
- yard_ext/templates/default/method_details/setup.rb
|
928
927
|
- yard_ext/validators.rb
|
929
928
|
- yard_ext/visible_id_handler.rb
|
930
|
-
homepage: http://
|
929
|
+
homepage: http://lanesframework.org/
|
931
930
|
licenses:
|
932
931
|
- MIT
|
933
932
|
metadata: {}
|
@@ -1,63 +0,0 @@
|
|
1
|
-
|
2
|
-
# a simple reimplentation
|
3
|
-
# to use traffic cop
|
4
|
-
methodMap = {
|
5
|
-
'create': 'POST',
|
6
|
-
'update': 'PUT',
|
7
|
-
'patch': 'PATCH',
|
8
|
-
'delete': 'DELETE',
|
9
|
-
'read': 'GET'
|
10
|
-
}
|
11
|
-
|
12
|
-
getValue = (object, prop)->
|
13
|
-
if !(object && object[prop])
|
14
|
-
return null;
|
15
|
-
return if _.isFunction(object[prop]) then object[prop]() else object[prop];
|
16
|
-
|
17
|
-
|
18
|
-
urlError = ->
|
19
|
-
throw new Error('A "url" property or function must be specified')
|
20
|
-
|
21
|
-
|
22
|
-
paramsMap = {
|
23
|
-
fields : 'f'
|
24
|
-
with : 'w'
|
25
|
-
query : 'q'
|
26
|
-
include : 'i'
|
27
|
-
order : 'o'
|
28
|
-
limit : 'l'
|
29
|
-
start : 's'
|
30
|
-
format : 'df'
|
31
|
-
}
|
32
|
-
|
33
|
-
Lanes.Data.Sync = (method, model, options={})->
|
34
|
-
|
35
|
-
query = {}
|
36
|
-
for key, value of options
|
37
|
-
query[ paramsMap[key] ] = value if paramsMap[key]
|
38
|
-
|
39
|
-
# Default JSON-request options.
|
40
|
-
params = {
|
41
|
-
type: methodMap[method]
|
42
|
-
dataType: "json"
|
43
|
-
data: query
|
44
|
-
}
|
45
|
-
|
46
|
-
# Ensure that we have a URL.
|
47
|
-
params.url = _.result(model, "url") or urlError() unless options.url
|
48
|
-
params.url += '.json'
|
49
|
-
params.headers = {
|
50
|
-
X_CSRF_TOKEN: Lanes.Data.Config.csrf_token
|
51
|
-
}
|
52
|
-
params.contentType = "application/json"
|
53
|
-
if options.data || _.contains(['create','update','patch'], method)
|
54
|
-
params.data = JSON.stringify( options.data || model.dataForSave(options) )
|
55
|
-
delete options.data
|
56
|
-
|
57
|
-
# Don't process data on a non-GET request.
|
58
|
-
#params.processData = false if params.type isnt "GET"
|
59
|
-
|
60
|
-
# Make the request, allowing the user to override any Ajax options.
|
61
|
-
xhr = options.xhr = Lanes.$.ajax(_.extend(params, options))
|
62
|
-
model.trigger "request", model, xhr, options
|
63
|
-
xhr
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module Lanes
|
2
|
-
class SpecAssetExpander
|
3
|
-
|
4
|
-
def expand(src_dir, src_path)
|
5
|
-
pathname = src_path.gsub(/^\/?assets\//, '').gsub(/\.js$/, '')
|
6
|
-
|
7
|
-
asset_bundle.assets(pathname).flat_map { |asset|
|
8
|
-
"/#{asset.gsub(/^\//, '')}?body=true"
|
9
|
-
}
|
10
|
-
end
|
11
|
-
|
12
|
-
private
|
13
|
-
|
14
|
-
def asset_bundle
|
15
|
-
return AssetBundle.new
|
16
|
-
end
|
17
|
-
|
18
|
-
class AssetBundle
|
19
|
-
def assets(pathname)
|
20
|
-
context.get_original_assets(pathname)
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def context
|
26
|
-
@context ||= ActionView::Base.new.extend(GetOriginalAssetsHelper)
|
27
|
-
end
|
28
|
-
|
29
|
-
module GetOriginalAssetsHelper
|
30
|
-
def get_original_assets(pathname)
|
31
|
-
assets_environment.find_asset(pathname).to_a.map do |processed_asset|
|
32
|
-
case processed_asset.content_type
|
33
|
-
when "text/css"
|
34
|
-
path_to_stylesheet(processed_asset.logical_path, debug: true)
|
35
|
-
when "application/javascript"
|
36
|
-
path_to_javascript(processed_asset.logical_path, debug: true)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|