silicon 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +0 -7
- data/lib/silicon/app.rb +6 -3
- data/lib/silicon/generators/cli.rb +38 -3
- data/lib/silicon/generators/templates/Gemfile +4 -0
- data/lib/silicon/generators/templates/{app.rb → app/app.rb} +0 -0
- data/lib/silicon/generators/templates/{app.routes → app/app.routes} +0 -0
- data/lib/silicon/generators/templates/config.ru +10 -1
- data/lib/silicon/loaders/dependency_loader.rb +8 -1
- data/lib/silicon/routing/builder.rb +2 -2
- data/lib/silicon/routing/matcher.rb +1 -1
- data/lib/silicon/routing/route.rb +6 -2
- data/lib/silicon/template_registry.rb +8 -1
- data/lib/silicon/version.rb +1 -1
- data/silicon.gemspec +2 -1
- metadata +21 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b42a17f2843d05d79a364238d2acab60af7b58fb
|
4
|
+
data.tar.gz: 3ef558e06e125ce333da1076ecf95e07deed709b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6090adf8bb5518c4da8239908592d7be26aa35f7ae3af6c2b9c0d8ac2d2bb586ea5a99c9a2ac9e289820046c03400022d34a79d1b6090ca341c489c4258eeeeb
|
7
|
+
data.tar.gz: a9892ea638f31505e4df44368e26bee167c93ee040bdff42f70b2f58b8e01f6a1836f6308d57362b31c13b3c63154721ae2541d5bb39595211b6df727baefcb5
|
data/README.md
CHANGED
@@ -347,13 +347,6 @@ Or install it yourself as:
|
|
347
347
|
|
348
348
|
## Development
|
349
349
|
|
350
|
-
Before making any contributions please make sure you are agree:
|
351
|
-
|
352
|
-
* 3 lines of code is better than 100 for the same functionality implementation, 0 lines is the best.
|
353
|
-
* Keep initial idea as simple as it possible. Plugins for additional functionality are more preferable.
|
354
|
-
* Do not use comments for obvious code; if your code is not obvious then try to make it obvious -
|
355
|
-
extract method, variable, perform more steps to make it more clear.
|
356
|
-
|
357
350
|
Usual, but always helpful steps:
|
358
351
|
|
359
352
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/silicon/app.rb
CHANGED
@@ -15,6 +15,8 @@ require 'silicon/routing/routing'
|
|
15
15
|
|
16
16
|
module Silicon
|
17
17
|
class App
|
18
|
+
attr_reader :routes
|
19
|
+
|
18
20
|
def initialize(container = Hypo::Container.new)
|
19
21
|
@container = container
|
20
22
|
|
@@ -43,7 +45,8 @@ module Silicon
|
|
43
45
|
|
44
46
|
def register_dependencies
|
45
47
|
instances = {
|
46
|
-
config_file_path: 'silicon.
|
48
|
+
config_file_path: 'silicon.yml',
|
49
|
+
silicon_env: ENV['SILICON_ENV'] || 'development'
|
47
50
|
}
|
48
51
|
|
49
52
|
instances.keys.each do |name|
|
@@ -83,8 +86,8 @@ module Silicon
|
|
83
86
|
end
|
84
87
|
|
85
88
|
def parse_routes
|
86
|
-
routes = @route_parser.parse
|
87
|
-
@route_matcher = Routing::Matcher.new(routes)
|
89
|
+
@routes = @route_parser.parse
|
90
|
+
@route_matcher = Routing::Matcher.new(@routes)
|
88
91
|
end
|
89
92
|
end
|
90
93
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'thor'
|
2
|
+
require 'terminal-table'
|
2
3
|
|
3
4
|
module Silicon
|
4
5
|
class CLI < Thor
|
@@ -8,15 +9,49 @@ module Silicon
|
|
8
9
|
File.dirname(__FILE__)
|
9
10
|
end
|
10
11
|
|
11
|
-
desc 'new NAME', '
|
12
|
+
desc 'new NAME', 'Create new Silicon application'
|
12
13
|
def new(name)
|
13
|
-
copy_file 'templates/app.rb', "#{name}/app/app.rb"
|
14
|
-
copy_file 'templates/app.routes', "#{name}/app/app.routes"
|
14
|
+
copy_file 'templates/app/app.rb', "#{name}/app/app.rb"
|
15
|
+
copy_file 'templates/app/app.routes', "#{name}/app/app.routes"
|
15
16
|
copy_file 'templates/silicon.yml', "#{name}/silicon.yml"
|
16
17
|
copy_file 'templates/config.ru', "#{name}/config.ru"
|
17
18
|
copy_file 'templates/views/show_welcome.json.jbuilder', "#{name}/app/views/show_welcome.json.jbuilder"
|
18
19
|
copy_file 'templates/actions/common/handle_errors.rb', "#{name}/app/actions/common/handle_errors.rb"
|
20
|
+
copy_file 'templates/Gemfile', "#{name}/Gemfile"
|
19
21
|
template 'templates/actions/welcome.tt', "#{name}/app/actions/welcome.rb", {app_name: name}
|
22
|
+
|
23
|
+
inside name do
|
24
|
+
run 'bundle'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
desc 'routes', 'Show Silicon application routes'
|
29
|
+
def routes
|
30
|
+
require './app/app'
|
31
|
+
app = App.new
|
32
|
+
|
33
|
+
headings = ['HTTP Verb', 'Path', 'Action Chain']
|
34
|
+
rows = app.routes.map do |route|
|
35
|
+
indent = ''
|
36
|
+
commands = []
|
37
|
+
route.commands.each_with_index do |c, index|
|
38
|
+
indent += ' ' if c.sequential? && index > 0
|
39
|
+
|
40
|
+
prefix = '->' if c.sequential?
|
41
|
+
prefix = '=>' if c.parallel?
|
42
|
+
prefix = '=*' if c.async?
|
43
|
+
|
44
|
+
commands << "#{indent} #{prefix} #{c.name}"
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
commands = commands.join("\n")
|
49
|
+
[route.http_verb, route.path, commands]
|
50
|
+
end
|
51
|
+
|
52
|
+
table = Terminal::Table.new(headings: headings, rows: rows)
|
53
|
+
table.style = {all_separators: true}
|
54
|
+
puts table
|
20
55
|
end
|
21
56
|
end
|
22
57
|
end
|
File without changes
|
File without changes
|
@@ -1,8 +1,17 @@
|
|
1
1
|
require 'rack'
|
2
|
-
require '
|
2
|
+
require 'rack/cors'
|
3
|
+
require './app/app'
|
3
4
|
|
4
5
|
use Rack::Parser, :content_types => {
|
5
6
|
'application/json' => Proc.new { |body| ::MultiJson.decode body }
|
6
7
|
}
|
7
8
|
|
9
|
+
use Rack::Cors do
|
10
|
+
# Setup your CORS policy
|
11
|
+
end
|
12
|
+
|
13
|
+
if ENV['SILICON_ENV'] == 'development' || ENV['SILICON_ENV'] == ''
|
14
|
+
use Rack::Reloader
|
15
|
+
end
|
16
|
+
|
8
17
|
run App.new
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module Silicon
|
2
2
|
class DependencyLoader
|
3
|
-
def initialize(container, type_loader)
|
3
|
+
def initialize(container, type_loader, silicon_env)
|
4
4
|
@container = container
|
5
|
+
@type_loader = type_loader
|
5
6
|
@types = type_loader.load_types
|
7
|
+
@silicon_env = silicon_env
|
6
8
|
end
|
7
9
|
|
8
10
|
def load_components
|
11
|
+
if @silicon_env == 'development'
|
12
|
+
# every time reload types in development mode
|
13
|
+
@types = @type_loader.load_types
|
14
|
+
end
|
15
|
+
|
9
16
|
@types.each do |type|
|
10
17
|
@container.register(type).using_lifetime(:scope).bound_to(:silicon_request)
|
11
18
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'silicon/routing/route'
|
1
|
+
require 'silicon/routing/route'
|
2
2
|
|
3
3
|
module Silicon
|
4
4
|
module Routing
|
@@ -14,7 +14,7 @@ module Silicon
|
|
14
14
|
result = []
|
15
15
|
|
16
16
|
node = sections.node
|
17
|
-
restore_hierarchy(node, nil,node.to_hash)
|
17
|
+
restore_hierarchy(node, nil, node.to_hash)
|
18
18
|
|
19
19
|
@route_params.each do |route|
|
20
20
|
if route[:actions]
|
@@ -6,12 +6,16 @@ module Silicon
|
|
6
6
|
|
7
7
|
def initialize(hash)
|
8
8
|
@http_verb = hash[:http_verb]
|
9
|
-
|
9
|
+
|
10
|
+
@path = hash[:path].sub('.', '/').sub('//', '/')
|
11
|
+
|
10
12
|
@params = hash[:params]
|
11
13
|
@commands = hash[:commands]
|
12
14
|
@view = hash[:view]
|
13
15
|
@http_status = hash[:http_status]
|
14
|
-
|
16
|
+
|
17
|
+
@segments = @path.split('/').concat(['/'])
|
18
|
+
|
15
19
|
@catch = hash[:catch]
|
16
20
|
end
|
17
21
|
end
|
@@ -1,11 +1,18 @@
|
|
1
1
|
module Silicon
|
2
2
|
class TemplateRegistry
|
3
|
-
def initialize(template_loader, silicon_config)
|
3
|
+
def initialize(template_loader, silicon_config, silicon_env)
|
4
|
+
@template_loader = template_loader
|
4
5
|
@templates = template_loader.load_templates
|
5
6
|
@config = silicon_config
|
7
|
+
@silicon_env = silicon_env
|
6
8
|
end
|
7
9
|
|
8
10
|
def get(name, type)
|
11
|
+
if @silicon_env == 'development'
|
12
|
+
# every time reload templates in development mode
|
13
|
+
@templates = @template_loader.load_templates
|
14
|
+
end
|
15
|
+
|
9
16
|
directory = @config[:path][:views]
|
10
17
|
template_path = File.join(directory, name + ".#{type}")
|
11
18
|
match = @templates.keys.find{|k| k.include? template_path}
|
data/lib/silicon/version.rb
CHANGED
data/silicon.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ['vova.kalinkin@gmail.com']
|
11
11
|
|
12
12
|
spec.summary = 'Silicon is a minimalistic web API framework.'
|
13
|
-
spec.description = 'The philosophy of Silicon is to provide
|
13
|
+
spec.description = 'The philosophy of Silicon is to provide minimalistic' \
|
14
14
|
' middleware between your model and API client.'
|
15
15
|
|
16
16
|
spec.homepage = 'https://github.com/cylon-v/silicon'
|
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.add_dependency 'treetop', '~> 1.6.8'
|
37
37
|
spec.add_dependency 'jbuilder', '~> 2.7.0'
|
38
38
|
spec.add_dependency 'rack-parser', '~> 0.7.0'
|
39
|
+
spec.add_dependency 'terminal-table', '~> 1.8.0'
|
39
40
|
|
40
41
|
spec.add_development_dependency 'bundler', '~> 1.15'
|
41
42
|
spec.add_development_dependency 'rake', '~> 10.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: silicon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Kalinkin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-01-
|
11
|
+
date: 2018-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hypo
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 0.7.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: terminal-table
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 1.8.0
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.8.0
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: bundler
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,8 +178,8 @@ dependencies:
|
|
164
178
|
- - "~>"
|
165
179
|
- !ruby/object:Gem::Version
|
166
180
|
version: '0.15'
|
167
|
-
description: The philosophy of Silicon is to provide
|
168
|
-
model and API client.
|
181
|
+
description: The philosophy of Silicon is to provide minimalistic middleware between
|
182
|
+
your model and API client.
|
169
183
|
email:
|
170
184
|
- vova.kalinkin@gmail.com
|
171
185
|
executables:
|
@@ -194,10 +208,11 @@ files:
|
|
194
208
|
- lib/silicon/errors/view_engine_error.rb
|
195
209
|
- lib/silicon/extensions/hash.rb
|
196
210
|
- lib/silicon/generators/cli.rb
|
211
|
+
- lib/silicon/generators/templates/Gemfile
|
197
212
|
- lib/silicon/generators/templates/actions/common/handle_errors.rb
|
198
213
|
- lib/silicon/generators/templates/actions/welcome.tt
|
199
|
-
- lib/silicon/generators/templates/app.rb
|
200
|
-
- lib/silicon/generators/templates/app.routes
|
214
|
+
- lib/silicon/generators/templates/app/app.rb
|
215
|
+
- lib/silicon/generators/templates/app/app.routes
|
201
216
|
- lib/silicon/generators/templates/config.ru
|
202
217
|
- lib/silicon/generators/templates/silicon.yml
|
203
218
|
- lib/silicon/generators/templates/views/show_welcome.json.jbuilder
|