inesita 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a4f6109fc15e7bd31378ca4936813572ede6fcd7
4
- data.tar.gz: 0093982d7f8c2e465766746f71fef462a9e82103
3
+ metadata.gz: 0a100bdbff9cff050c8c7d021a19b8b88c283ae9
4
+ data.tar.gz: c78e1c5b340878e330c44a147d1a519f7866b62f
5
5
  SHA512:
6
- metadata.gz: 3c56b82fd98cec517334f977bda6f7a40bd166b1091c3ad23a21a2dfbedf63c49aa27158a11047f28e598a6a88a48bfdbad77fe55b6a5e82a08a424a8bdb6b8c
7
- data.tar.gz: f29604ebbe6ca8963b8be80dbdba463b4e834f02f3b4bfef75202d22faa25042f3fc914c16e68ee5d79faa0168c349a06bc0c33bd86bdbe11a1885799f27b7b8
6
+ metadata.gz: db700496d73df68d26fd7a1cd540e7dad97846cf08af992fd89d184e0d2244b41a652aef7a2ad9e5cf0c81153d10644ce76cdd484b922a5936f89b268e7fed79
7
+ data.tar.gz: fae967b5907aefbe7c28832b5658a5a2529ff5914eef9a0d3a8a7ab94392017989948bf42f523d9966f5f2f2abd6ffa1992b89320eeee6b4620d9c2791f89b57
data/README.md CHANGED
@@ -11,22 +11,24 @@ Install Inesita
11
11
  ```sh
12
12
  $ gem install inesita
13
13
  ```
14
-
15
14
  Generate Inesita new app
16
15
 
17
16
  ```sh
18
17
  $ inesita new my_app
19
18
  ```
20
-
21
19
  Launch Inesita server
22
20
 
23
21
  ```sh
24
22
  $ cd my_app
25
23
  $ bundle exec inesita server
26
24
  ```
27
-
28
25
  Go to [http://localhost:9292/](http://localhost:9292/)
29
26
 
27
+ To build your application to `public` dir
28
+
29
+ ```sh
30
+ $ bundle exec inesita build
31
+ ```
30
32
  ## examples
31
33
 
32
34
  [More detailed example](https://github.com/fazibear/inesita-example)
data/inesita.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'inesita'
3
- s.version = '0.0.4'
3
+ s.version = '0.0.5'
4
4
  s.authors = [ 'Michał Kalbarczyk' ]
5
5
  s.email = 'fazibear@gmail.com'
6
6
  s.homepage = 'http://github.com/fazibear/inesita'
@@ -17,5 +17,6 @@ Gem::Specification.new do |s|
17
17
  s.add_dependency 'slim'
18
18
  s.add_dependency 'sass'
19
19
  s.add_dependency 'thor'
20
+ s.add_dependency 'rack-rewrite'
20
21
  s.add_development_dependency 'rake'
21
22
  end
@@ -13,18 +13,11 @@ class InesitaCLI < Thor
13
13
  desc: 'force overwrite'
14
14
 
15
15
  def new(project_dir)
16
- empty_directory project_dir, force: options[:force]
17
- copy_file 'template/.gitignore', File.join(project_dir, '.gitignore'), force: options[:force]
18
- copy_file 'template/config.ru', File.join(project_dir, 'config.ru'), force: options[:force]
19
- copy_file 'template/Gemfile', File.join(project_dir, 'Gemfile'), force: options[:force]
20
-
21
- empty_directory File.join(project_dir, 'app'), force: options[:force]
22
- copy_file 'template/app/index.html.slim', File.join(project_dir, 'app', 'index.html.slim'), force: options[:force]
23
- copy_file 'template/app/application.js.rb', File.join(project_dir, 'app', 'application.js.rb'), force: options[:force]
24
- copy_file 'template/app/application.css.sass', File.join(project_dir, 'app', 'application.css.sass'), force: options[:force]
25
-
26
- empty_directory File.join(project_dir, 'app', 'components'), force: options[:force]
27
- copy_file 'template/app/components/welcome_component.rb', File.join(project_dir, 'app', 'components', 'welcome_controller.rb'), force: options[:force]
16
+ Dir.glob("#{File.dirname(__FILE__)}/template/**/*", File::FNM_DOTMATCH).each do |file|
17
+ next if File.directory?(file)
18
+ path = file.split('/')
19
+ copy_file file, File.join(project_dir, path[path.index('template')+1..-1].join('/')), force: options[:force]
20
+ end
28
21
 
29
22
  inside project_dir do
30
23
  run 'bundle install'
@@ -1 +1,4 @@
1
1
  @import "bootstrap"
2
+
3
+ body
4
+ margin: 10px 0
@@ -3,8 +3,20 @@ require 'opal'
3
3
  require 'browser'
4
4
  require 'inesita'
5
5
 
6
- require_tree './components'
6
+ require 'components/navbar'
7
+ require 'components/layout'
8
+ require 'components/home'
9
+ require 'components/welcome'
10
+ require 'components/goodbye'
7
11
 
8
12
  $document.ready do
9
- WelcomeComponent.new.mount($document['app'])
13
+ Inesita::Application.new(
14
+ routes: {
15
+ '/' => Home,
16
+ '/welcome' => Welcome,
17
+ '/goodbye' => Goodbye
18
+ },
19
+ mount: $document.body,
20
+ layout: Layout
21
+ ).run
10
22
  end
@@ -0,0 +1,13 @@
1
+ class Goodbye
2
+ include Inesita::Component
3
+ def render
4
+ div class: 'jumbotron text-center' do
5
+ h1 do
6
+ text "Bye, Bye ..."
7
+ end
8
+ h4 do
9
+ text 'This is a sample component'
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ class Home
2
+ include Inesita::Component
3
+ def render
4
+ div class: 'jumbotron text-center' do
5
+ h1 do
6
+ text "I'm Home !"
7
+ end
8
+ h4 do
9
+ text 'This is a sample component'
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ class Layout
2
+ include Inesita::Layout
3
+
4
+ component :navbar, NavBar.new
5
+
6
+ def render
7
+ div do
8
+ div class: 'container' do
9
+ component navbar
10
+ component outlet
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,32 @@
1
+ class NavBar
2
+ include Inesita::Component
3
+
4
+ def render
5
+ nav class: 'navbar navbar-default' do
6
+ div class: 'container' do
7
+ div class: 'navbar-header' do
8
+ span class: 'navbar-brand' do
9
+ text 'Inesita'
10
+ end
11
+ ul class: 'nav navbar-nav' do
12
+ li do
13
+ a href: '/' do
14
+ text 'Home'
15
+ end
16
+ end
17
+ li do
18
+ a href: '/welcome' do
19
+ text 'Welcome'
20
+ end
21
+ end
22
+ li do
23
+ a href: '/goodbye' do
24
+ text 'Goodbye'
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,4 +1,4 @@
1
- class WelcomeComponent
1
+ class Welcome
2
2
  include Inesita::Component
3
3
  def render
4
4
  div class: 'jumbotron text-center' do
@@ -2,17 +2,13 @@ doctype html
2
2
  html
3
3
  head
4
4
  title Inesita
5
- link href='application.css' rel='stylesheet' type='text/css'
6
- - if $SCRIPT_FILES
5
+ - if $DEVELOPMENT_MODE
6
+ link href=asset_path('application.css') rel='stylesheet' type='text/css'
7
7
  - $SCRIPT_FILES.each do |file|
8
- script src=file
8
+ script src=asset_path(file)
9
9
  - else
10
+ link href='application.css' rel='stylesheet' type='text/css'
10
11
  script src='application.js'
11
12
  javascript:
12
13
  #{{$LOAD_ASSETS_CODE}}
13
14
  body
14
- nav.navbar.navbar-inverse
15
- .container
16
- .navbar-header
17
- a.navbar-brand Project Name
18
- #app.container
@@ -1,6 +1,9 @@
1
+ require 'rack/rewrite'
2
+
1
3
  module Inesita
2
4
  module Server
3
5
  SOURCE_MAP_PREFIX = '/__OPAL_MAPS__'
6
+ ASSETS_PREFIX = '/__ASSETS__'
4
7
 
5
8
  module_function
6
9
 
@@ -25,7 +28,7 @@ module Inesita
25
28
 
26
29
  s.context_class.class_eval do
27
30
  def asset_path(path, options = {})
28
- "#{path}"
31
+ $DEVELOPMENT_MODE ? "#{ASSETS_PREFIX}/#{path}" : path
29
32
  end
30
33
  end
31
34
  end
@@ -33,7 +36,7 @@ module Inesita
33
36
 
34
37
  def set_global_vars(assets, debug = false)
35
38
  $LOAD_ASSETS_CODE = Opal::Processor.load_asset_code(assets, 'application.js')
36
- if debug
39
+ if $DEVELOPMENT_MODE
37
40
  $SCRIPT_FILES = (assets['application.js'].dependencies + [assets['application.self.js']]).map(&:logical_path)
38
41
  end
39
42
  end
@@ -43,13 +46,22 @@ module Inesita
43
46
  Opal::SourceMapServer.new(sprockets, SOURCE_MAP_PREFIX)
44
47
  end
45
48
 
49
+ def development_mode
50
+ $DEVELOPMENT_MODE = ENV['DEVELOPMENT_MODE'] || true
51
+ end
52
+
46
53
  def create
54
+ development_mode
47
55
  assets_app = assets
48
56
  source_maps_app = source_maps(assets_app)
49
57
  set_global_vars(assets_app, true)
50
58
 
51
59
  Rack::Builder.new do
52
- map '/' do
60
+ use Rack::Rewrite do
61
+ rewrite %r[^(?!#{ASSETS_PREFIX}|#{SOURCE_MAP_PREFIX}).*], ASSETS_PREFIX
62
+ end
63
+
64
+ map ASSETS_PREFIX do
53
65
  run assets_app
54
66
  end
55
67
 
data/opal/inesita.rb CHANGED
@@ -1,3 +1,6 @@
1
1
  require 'virtual_dom'
2
2
  require 'virtual_dom_extension'
3
3
  require 'inesita/component'
4
+ require 'inesita/router'
5
+ require 'inesita/application'
6
+ require 'inesita/layout'
@@ -0,0 +1,32 @@
1
+ module Inesita
2
+ class Application
3
+ include Inesita::Component
4
+ class << self; attr_accessor :main; end
5
+
6
+ attr_reader :layout
7
+
8
+ def initialize(options)
9
+ raise 'Mount point missing' unless options[:mount]
10
+ raise 'Routes missing' unless options[:routes]
11
+
12
+ @router = Router.new(options[:routes])
13
+ @mount = options[:mount]
14
+ @layout = options[:layout]
15
+
16
+ if @layout
17
+ self.class.component :layout_component, @layout.new(@router)
18
+ else
19
+ self.class.component :router_component, @router
20
+ end
21
+ end
22
+
23
+ def render
24
+ component layout ? layout_component : router_component
25
+ end
26
+
27
+ def run
28
+ Application.main = self
29
+ mount(@mount)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,13 @@
1
+ module Inesita
2
+ module Layout
3
+ def self.included(base)
4
+ base.include(Component)
5
+ end
6
+
7
+ attr_reader :outlet
8
+
9
+ def initialize(outlet)
10
+ @outlet = outlet
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,39 @@
1
+ module Inesita
2
+ class Router
3
+ include Inesita::Component
4
+ attr_reader :routes
5
+
6
+ def initialize(routes)
7
+ default_component = routes.values.first.new
8
+ default_component.parent(self)
9
+
10
+ @routes = Hash.new(routes['/'].new)
11
+ routes.map do |route, component|
12
+ @routes[route] = component.new
13
+ @routes[route].parent(self)
14
+ end
15
+ end
16
+
17
+ def render
18
+ component routes[url]
19
+ end
20
+
21
+ def url
22
+ `document.location.pathname`
23
+ end
24
+
25
+ def mount
26
+ `window.onpopstate = function(){#{self.handle_link}}`
27
+ `window.addEventListener("hashchange", function(){#{self.handle_link}})`
28
+ super
29
+ end
30
+
31
+
32
+ def self.handle_link(path)
33
+ `window.history.pushState({}, null, #{path})`
34
+ Application.main.update
35
+ false
36
+ end
37
+
38
+ end
39
+ end
@@ -3,5 +3,14 @@ module VirtualDOM
3
3
  def component(comp)
4
4
  @nodes << NodeFactory.new(comp.method(:render), comp).nodes.first
5
5
  end
6
+
7
+ def a(params, &block)
8
+ params = { onclick: -> { Inesita::Router.handle_link(params[:href]) } }.merge(params) if params[:href]
9
+ @nodes << VirtualNode.new(
10
+ 'a',
11
+ process_params(params),
12
+ block ? NodeFactory.new(block, @parent).nodes : []
13
+ ).vnode
14
+ end
6
15
  end
7
16
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inesita
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michał Kalbarczyk
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rack-rewrite
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: rake
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -116,12 +130,19 @@ files:
116
130
  - lib/inesita/cli/template/Gemfile
117
131
  - lib/inesita/cli/template/app/application.css.sass
118
132
  - lib/inesita/cli/template/app/application.js.rb
119
- - lib/inesita/cli/template/app/components/welcome_component.rb
133
+ - lib/inesita/cli/template/app/components/goodbye.rb
134
+ - lib/inesita/cli/template/app/components/home.rb
135
+ - lib/inesita/cli/template/app/components/layout.rb
136
+ - lib/inesita/cli/template/app/components/navbar.rb
137
+ - lib/inesita/cli/template/app/components/welcome.rb
120
138
  - lib/inesita/cli/template/app/index.html.slim
121
139
  - lib/inesita/cli/template/config.ru
122
140
  - lib/inesita/server.rb
123
141
  - opal/inesita.rb
142
+ - opal/inesita/application.rb
124
143
  - opal/inesita/component.rb
144
+ - opal/inesita/layout.rb
145
+ - opal/inesita/router.rb
125
146
  - opal/virtual_dom_extension.rb
126
147
  homepage: http://github.com/fazibear/inesita
127
148
  licenses: []