lattice 0.0.0 → 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 +7 -0
- data/.rspec +4 -0
- data/.travis.yml +3 -0
- data/CHANGES.md +3 -0
- data/Gemfile +9 -0
- data/Guardfile +9 -0
- data/README.md +33 -15
- data/Rakefile +3 -0
- data/lattice.gemspec +4 -5
- data/lib/lattice.rb +2 -2
- data/lib/lattice/resource.rb +63 -0
- data/lib/lattice/version.rb +1 -1
- data/logo.png +0 -0
- data/spec/lattice/resource_spec.rb +77 -0
- data/spec/spec_helper.rb +2 -0
- data/tasks/rspec.task +7 -0
- metadata +63 -52
- data/spec/fixtures/application/Appfile +0 -2
- data/spec/fixtures/application/README.md +0 -4
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bd35aad62903ddaf3add6cde5a20a9e9f602190c
|
4
|
+
data.tar.gz: 72ba50be9460b11da83f35bb40352d571f63a009
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 173ccef41e001527e66488f192d3ed69b0374a050397ec3bdf60b846a185eb906d20c6ecdcf54002743c00dfa562bf13b4881f592f4879da411f03a40f64af77
|
7
|
+
data.tar.gz: 6267e585042de5076c09998f6ca4e3ff640d7682b45e9337746576c6d726444a2ea4c98ad35bd44a012e8948e6d5d68e24a2eedb65ce566dd5910780f63d5c1b
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/CHANGES.md
ADDED
data/Gemfile
CHANGED
@@ -1,4 +1,13 @@
|
|
1
1
|
source 'http://rubygems.org'
|
2
2
|
|
3
|
+
gem 'celluloid', github: 'celluloid/celluloid'
|
4
|
+
gem 'reel', github: 'celluloid/reel'
|
5
|
+
|
6
|
+
gem 'webmachine', github: 'seancribbs/webmachine-ruby'
|
7
|
+
|
3
8
|
# Specify your gem's dependencies in lattice.gemspec
|
4
9
|
gemspec
|
10
|
+
|
11
|
+
group :development do
|
12
|
+
gem 'guard-rspec'
|
13
|
+
end
|
data/Guardfile
ADDED
data/README.md
CHANGED
@@ -1,23 +1,40 @@
|
|
1
|
-
Lattice
|
2
|
-
|
1
|
+

|
2
|
+
==========
|
3
|
+
[](http://travis-ci.org/celluloid/lattice)
|
4
|
+
[](https://codeclimate.com/github/celluloid/lattice)
|
3
5
|
|
4
|
-
Lattice is
|
5
|
-
|
6
|
-
|
6
|
+
Lattice is an actor-based web framework for Ruby built on top of
|
7
|
+
[Celluloid][celluloid], [Reel][reel], and [Webmachine][webmachine]. Designed
|
8
|
+
from the ground up for realtime applications, end-to-end streaming, and
|
9
|
+
Websockets, Lattice provides solutions to some of the biggest pain points in
|
10
|
+
web application development today.
|
11
|
+
|
12
|
+
[celluloid]: https://github.com/celluloid/celluloid/
|
13
|
+
[reel]: https://github.com/celluloid/reel
|
14
|
+
[webmachine]: https://github.com/seancribbs/webmachine-ruby/
|
15
|
+
|
16
|
+
## Features
|
7
17
|
|
8
18
|
* Resources: the main glue type between Lattice and the web, resources provide
|
9
19
|
an HTTP endpoint for interacting with entities in the system. Resources are
|
10
20
|
in fact a special type of component, one which forms an entry point into the
|
11
|
-
system.
|
21
|
+
system. Lattice uses [Webmachine](https://github.com/seancribbs/webmachine-ruby)
|
22
|
+
as its resource framework.
|
23
|
+
|
24
|
+
## Vaporware Features (Coming Soon™!)
|
25
|
+
|
26
|
+
* Cells: Lattice's go-to domain model object. Cells represent data dependencies
|
27
|
+
of resources, or are resources themselves. Every Cell is a Celluloid actor,
|
28
|
+
which makes them multithreaded and allows them to compute in parallel (at least
|
29
|
+
on modern Ruby interpreters such as JRuby and Rubinius which don't have a Global
|
30
|
+
Interpreter Lock). They can also do scatter/gather-type I/O operations, making
|
31
|
+
them ideal for querying multiple services in parallel when computing a response.
|
32
|
+
Cells map data dependencies into "slots" which can be used by renderers to compute
|
33
|
+
representations of data within the system, an idea which combines Celluloid's
|
34
|
+
[futures][futures] with an API similar to [decent_exposure][decent_exposure].
|
12
35
|
|
13
|
-
|
14
|
-
|
15
|
-
analogous to "models" in frameworks like Rails, components are the natural
|
16
|
-
abstraction Lattice provides for subdividing the work needed to compute a
|
17
|
-
representation of a particular resource, and are where things like database
|
18
|
-
interactions and additional queries to external services should take place.
|
19
|
-
Components map data dependencies into "slots" which can be used by renderers
|
20
|
-
to compute representations of data within the system.
|
36
|
+
[futures]: https://github.com/celluloid/celluloid/wiki/futures
|
37
|
+
[decent_exposure]: https://github.com/voxdolo/decent_exposure
|
21
38
|
|
22
39
|
* Renderers: translate data within the system, as fetched by components, into
|
23
40
|
a requested representation. Renderers handle the specifics of dynamically
|
@@ -31,4 +48,5 @@ built on the following primitives:
|
|
31
48
|
Copyright
|
32
49
|
---------
|
33
50
|
|
34
|
-
Copyright ©
|
51
|
+
Copyright © 2013 Tony Arcieri. Distributed under the MIT license.
|
52
|
+
See LICENSE.txt for further details.
|
data/Rakefile
CHANGED
data/lattice.gemspec
CHANGED
@@ -15,11 +15,10 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.require_paths = ['lib']
|
16
16
|
gem.version = Lattice::VERSION
|
17
17
|
|
18
|
-
gem.add_dependency 'celluloid'
|
19
|
-
gem.add_dependency '
|
20
|
-
gem.add_dependency '
|
21
|
-
gem.add_dependency '
|
22
|
-
gem.add_dependency 'activesupport'
|
18
|
+
gem.add_dependency 'celluloid', '>= 0.15.1'
|
19
|
+
gem.add_dependency 'reel', '>= 0.4.0'
|
20
|
+
gem.add_dependency 'webmachine', '~> 1.2.0'
|
21
|
+
gem.add_dependency 'activesupport', '~> 4.0.0'
|
23
22
|
|
24
23
|
gem.add_development_dependency 'rake'
|
25
24
|
gem.add_development_dependency "rspec", ">= 2.7.0"
|
data/lib/lattice.rb
CHANGED
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'webmachine'
|
2
|
+
require 'active_support/core_ext/class/attribute'
|
3
|
+
|
4
|
+
module Lattice
|
5
|
+
class Resource < Webmachine::Resource
|
6
|
+
class_attribute :allowed_methods
|
7
|
+
class_attribute :content_types_accepted
|
8
|
+
class_attribute :content_types_provided
|
9
|
+
class_attribute :encodings_provided
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def allow_method(*methods)
|
13
|
+
self.allowed_methods ||= []
|
14
|
+
self.allowed_methods += methods.map(&:to_s).map(&:upcase)
|
15
|
+
end
|
16
|
+
alias allow allow_method
|
17
|
+
|
18
|
+
def accept_content_type(content_types)
|
19
|
+
content_types.each do |key, value|
|
20
|
+
self.content_types_accepted ||= []
|
21
|
+
content_types_accepted << [key, value]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
alias accept accept_content_type
|
25
|
+
|
26
|
+
def provide_content_type(content_types)
|
27
|
+
content_types.each do |key, value|
|
28
|
+
self.content_types_provided ||= []
|
29
|
+
content_types_provided << [key, value]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def provide_encoding(encodings)
|
34
|
+
self.encodings_provided ||= {}
|
35
|
+
encodings_provided.merge!(encodings)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def allowed_methods
|
40
|
+
methods = self.class.allowed_methods
|
41
|
+
return methods if methods && !methods.empty?
|
42
|
+
super
|
43
|
+
end
|
44
|
+
|
45
|
+
def content_types_accepted
|
46
|
+
types = self.class.content_types_accepted
|
47
|
+
return types if types && !types.empty?
|
48
|
+
super
|
49
|
+
end
|
50
|
+
|
51
|
+
def content_types_provided
|
52
|
+
types = self.class.content_types_provided
|
53
|
+
return types if types && !types.empty?
|
54
|
+
super
|
55
|
+
end
|
56
|
+
|
57
|
+
def encodings_provided
|
58
|
+
encodings = self.class.encodings_provided
|
59
|
+
return encodings if encodings && !encodings.empty?
|
60
|
+
super
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/lattice/version.rb
CHANGED
data/logo.png
ADDED
Binary file
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Lattice::Resource do
|
4
|
+
context "allowable methods" do
|
5
|
+
it "can be declared with `allow_method'" do
|
6
|
+
klass = Class.new(described_class) do
|
7
|
+
allow_method :get
|
8
|
+
allow_method :post
|
9
|
+
end
|
10
|
+
|
11
|
+
klass.allowed_methods.should eq %W[GET POST]
|
12
|
+
end
|
13
|
+
|
14
|
+
it "can be declared with `allow'" do
|
15
|
+
klass = Class.new(described_class) do
|
16
|
+
allow :get
|
17
|
+
allow :post
|
18
|
+
end
|
19
|
+
|
20
|
+
klass.allowed_methods.should eq %W[GET POST]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "acceptable content types" do
|
25
|
+
it "can be declared with `accept_content_type'" do
|
26
|
+
klass = Class.new(described_class) do
|
27
|
+
accept_content_type "application/json" => :to_json
|
28
|
+
accept_content_type "text/xml" => :to_xml
|
29
|
+
end
|
30
|
+
|
31
|
+
klass.content_types_accepted.should eq [
|
32
|
+
["application/json", :to_json],
|
33
|
+
["text/xml", :to_xml]
|
34
|
+
]
|
35
|
+
end
|
36
|
+
|
37
|
+
it "can be declared with `accept'" do
|
38
|
+
klass = Class.new(described_class) do
|
39
|
+
accept "application/json" => :to_json
|
40
|
+
accept "text/xml" => :to_xml
|
41
|
+
end
|
42
|
+
|
43
|
+
klass.content_types_accepted.should eq [
|
44
|
+
["application/json", :to_json],
|
45
|
+
["text/xml", :to_xml]
|
46
|
+
]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "provided content types" do
|
51
|
+
it "can be declared with `provide_content_type'" do
|
52
|
+
klass = Class.new(described_class) do
|
53
|
+
provide_content_type "application/json" => :to_json
|
54
|
+
provide_content_type "text/xml" => :to_xml
|
55
|
+
end
|
56
|
+
|
57
|
+
klass.content_types_provided.should eq [
|
58
|
+
["application/json", :to_json],
|
59
|
+
["text/xml", :to_xml]
|
60
|
+
]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context "provided encodings" do
|
65
|
+
it "can be declared with `provide_encoding'" do
|
66
|
+
klass = Class.new(described_class) do
|
67
|
+
provide_encoding 'gzip' => :encode_gzip
|
68
|
+
provide_encoding 'identity' => :encode_identity
|
69
|
+
end
|
70
|
+
|
71
|
+
klass.encodings_provided.should eq({
|
72
|
+
'gzip' => :encode_gzip,
|
73
|
+
'identity' => :encode_identity
|
74
|
+
})
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
data/spec/spec_helper.rb
ADDED
data/tasks/rspec.task
ADDED
metadata
CHANGED
@@ -1,93 +1,99 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lattice
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Tony Arcieri
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-09-15 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: celluloid
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
version: 0.15.1
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: dcell
|
27
|
-
requirement: &70140403517400 !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
29
23
|
requirements:
|
30
|
-
- -
|
24
|
+
- - '>='
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
33
|
-
type: :runtime
|
34
|
-
prerelease: false
|
35
|
-
version_requirements: *70140403517400
|
26
|
+
version: 0.15.1
|
36
27
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
requirement:
|
39
|
-
none: false
|
28
|
+
name: reel
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
40
30
|
requirements:
|
41
|
-
- -
|
31
|
+
- - '>='
|
42
32
|
- !ruby/object:Gem::Version
|
43
|
-
version:
|
33
|
+
version: 0.4.0
|
44
34
|
type: :runtime
|
45
35
|
prerelease: false
|
46
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.4.0
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
42
|
name: webmachine
|
49
|
-
requirement:
|
50
|
-
none: false
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
51
44
|
requirements:
|
52
|
-
- -
|
45
|
+
- - ~>
|
53
46
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
47
|
+
version: 1.2.0
|
55
48
|
type: :runtime
|
56
49
|
prerelease: false
|
57
|
-
version_requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.2.0
|
58
55
|
- !ruby/object:Gem::Dependency
|
59
56
|
name: activesupport
|
60
|
-
requirement:
|
61
|
-
none: false
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
62
58
|
requirements:
|
63
|
-
- -
|
59
|
+
- - ~>
|
64
60
|
- !ruby/object:Gem::Version
|
65
|
-
version:
|
61
|
+
version: 4.0.0
|
66
62
|
type: :runtime
|
67
63
|
prerelease: false
|
68
|
-
version_requirements:
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 4.0.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
|
-
requirement:
|
72
|
-
none: false
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
73
72
|
requirements:
|
74
|
-
- -
|
73
|
+
- - '>='
|
75
74
|
- !ruby/object:Gem::Version
|
76
75
|
version: '0'
|
77
76
|
type: :development
|
78
77
|
prerelease: false
|
79
|
-
version_requirements:
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
80
83
|
- !ruby/object:Gem::Dependency
|
81
84
|
name: rspec
|
82
|
-
requirement:
|
83
|
-
none: false
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
84
86
|
requirements:
|
85
|
-
- -
|
87
|
+
- - '>='
|
86
88
|
- !ruby/object:Gem::Version
|
87
89
|
version: 2.7.0
|
88
90
|
type: :development
|
89
91
|
prerelease: false
|
90
|
-
version_requirements:
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 2.7.0
|
91
97
|
description: A concurrent realtime web framework for Ruby
|
92
98
|
email:
|
93
99
|
- tony.arcieri@gmail.com
|
@@ -96,41 +102,46 @@ extensions: []
|
|
96
102
|
extra_rdoc_files: []
|
97
103
|
files:
|
98
104
|
- .gitignore
|
105
|
+
- .rspec
|
106
|
+
- .travis.yml
|
107
|
+
- CHANGES.md
|
99
108
|
- Gemfile
|
109
|
+
- Guardfile
|
100
110
|
- LICENSE.txt
|
101
111
|
- README.md
|
102
112
|
- Rakefile
|
103
113
|
- lattice.gemspec
|
104
114
|
- lib/lattice.rb
|
115
|
+
- lib/lattice/resource.rb
|
105
116
|
- lib/lattice/version.rb
|
106
|
-
-
|
107
|
-
- spec/
|
117
|
+
- logo.png
|
118
|
+
- spec/lattice/resource_spec.rb
|
119
|
+
- spec/spec_helper.rb
|
120
|
+
- tasks/rspec.task
|
108
121
|
homepage: https://github.com/tarcieri/lattice
|
109
122
|
licenses: []
|
123
|
+
metadata: {}
|
110
124
|
post_install_message:
|
111
125
|
rdoc_options: []
|
112
126
|
require_paths:
|
113
127
|
- lib
|
114
128
|
required_ruby_version: !ruby/object:Gem::Requirement
|
115
|
-
none: false
|
116
129
|
requirements:
|
117
|
-
- -
|
130
|
+
- - '>='
|
118
131
|
- !ruby/object:Gem::Version
|
119
132
|
version: '0'
|
120
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
134
|
requirements:
|
123
|
-
- -
|
135
|
+
- - '>='
|
124
136
|
- !ruby/object:Gem::Version
|
125
137
|
version: '0'
|
126
138
|
requirements: []
|
127
139
|
rubyforge_project:
|
128
|
-
rubygems_version:
|
140
|
+
rubygems_version: 2.0.3
|
129
141
|
signing_key:
|
130
|
-
specification_version:
|
142
|
+
specification_version: 4
|
131
143
|
summary: Lattice is a pervasively multithreaded web framework for Ruby which makes
|
132
144
|
building realtime web applications with WebSockets simple and fun
|
133
145
|
test_files:
|
134
|
-
- spec/
|
135
|
-
- spec/
|
136
|
-
has_rdoc:
|
146
|
+
- spec/lattice/resource_spec.rb
|
147
|
+
- spec/spec_helper.rb
|