inesita 0.0.12 → 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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -0
  3. data/README.md +3 -2
  4. data/TODO.md +6 -0
  5. data/inesita.gemspec +9 -9
  6. data/lib/inesita/cli/new.rb +4 -5
  7. data/lib/inesita/cli/template/{Gemfile → Gemfile.tt} +2 -3
  8. data/lib/inesita/cli/template/README.md.tt +1 -0
  9. data/lib/inesita/cli/template/app/application.js.rb.tt +17 -0
  10. data/lib/inesita/cli/template/app/components/description.rb.tt +18 -0
  11. data/lib/inesita/cli/template/app/components/home.rb.tt +17 -0
  12. data/lib/inesita/cli/template/app/components/{layout.rb → layout.rb.tt} +2 -8
  13. data/lib/inesita/cli/template/app/components/navbar.rb.tt +29 -0
  14. data/lib/inesita/cli/template/app/{index.html.slim → index.html.slim.tt} +1 -1
  15. data/lib/inesita/cli/template/app/router.rb.tt +8 -0
  16. data/lib/inesita/cli/template/app/store.rb.tt +15 -0
  17. data/lib/inesita/cli/template/app/{stylesheet.css.sass → stylesheet.css.sass.tt} +0 -0
  18. data/lib/inesita/cli/template/{config.ru → config.ru.tt} +0 -0
  19. data/opal/inesita.rb +4 -0
  20. data/opal/inesita/application.rb +14 -6
  21. data/opal/inesita/component.rb +24 -40
  22. data/opal/inesita/component_withs.rb +27 -0
  23. data/opal/inesita/js_helpers.rb +27 -0
  24. data/opal/inesita/layout.rb +2 -11
  25. data/opal/inesita/router.rb +53 -19
  26. data/opal/inesita/routes.rb +61 -0
  27. data/opal/inesita/store.rb +17 -0
  28. data/opal/virtual_dom_extension.rb +8 -3
  29. metadata +49 -43
  30. data/lib/inesita/cli/template/.gitignore +0 -1
  31. data/lib/inesita/cli/template/app/application.js.rb +0 -17
  32. data/lib/inesita/cli/template/app/components/goodbye.rb +0 -14
  33. data/lib/inesita/cli/template/app/components/home.rb +0 -14
  34. data/lib/inesita/cli/template/app/components/navbar.rb +0 -32
  35. data/lib/inesita/cli/template/app/components/welcome.rb +0 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5533b5f8c2c3de1a92131b746423de17e05889bd
4
- data.tar.gz: 160c6c893e0c498e85949c05512305c302eacf78
3
+ metadata.gz: 64d2e0eb42676d12536c5751ef8896a2b60ed123
4
+ data.tar.gz: dc4a4619b78c7405d54a0a80383996c6df724433
5
5
  SHA512:
6
- metadata.gz: c8c658238dcaf1bb481fc8ce156e62a1651b13f27a4ba65c4980bad1da223ce45f7328a9f89f3175d699c02d0367949145e62fbf433380780c997cf005f24da3
7
- data.tar.gz: 684f108cd653870927d4778b1bdd73ceb032630add80eb5caf4b9f011e9f6dbada77841cacc7b1c805461899e23c87bd55b8de849247649bde6e8afb279c8055
6
+ metadata.gz: 1e008afb399d387e09fce2aaf3ca81503fd5618e4d9bb0949a3aa81993b930f43515acc12d5b0451030c1252c361703b22d4d1aaf2b3a3989dde70a66378addb
7
+ data.tar.gz: 98301a71c7490a38f673ed625152379071b5cf31c4309b1051e1723ad7e416852798bec825faf9bf286c76d481d344ebae24a7abdda130110fe0fdb2d518f24e
data/Gemfile CHANGED
@@ -1,2 +1,5 @@
1
1
  source "https://rubygems.org"
2
+
3
+ gem "opal", github: "opal/opal"
4
+
2
5
  gemspec
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  !!! WORK IN PROGRESS !!!
2
2
 
3
- # Inesita [![Gem Version](https://badge.fury.io/rb/inesita.svg)](http://badge.fury.io/rb/inesita) [![Code Climate](https://codeclimate.com/github/fazibear/opal-virtual-dom/badges/gpa.svg)](https://codeclimate.com/github/fazibear/inesita)
3
+ # Inesita [![Gem Version](https://badge.fury.io/rb/inesita.svg)](http://badge.fury.io/rb/inesita) [![Code Climate](https://codeclimate.com/github/inesita-rb/inesita/badges/gpa.svg)](https://codeclimate.com/github/inesita-rb/inesita)
4
4
 
5
5
  Frontend web framework for Opal
6
6
 
@@ -31,4 +31,5 @@ $ bundle exec inesita build
31
31
  ```
32
32
  ## examples
33
33
 
34
- [More detailed example](https://github.com/fazibear/inesita-example)
34
+ - [My own playground](https://github.com/inesita-rb/playground)
35
+ - [TodoMVC example](https://github.com/inesita-rb/todomvc)
data/TODO.md ADDED
@@ -0,0 +1,6 @@
1
+ # TODO
2
+
3
+ ## list of thing
4
+
5
+ - [ ] `router.current_url?` should supports also path
6
+ - [ ] helper for dom class
data/inesita.gemspec CHANGED
@@ -1,9 +1,9 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'inesita'
3
- s.version = '0.0.12'
3
+ s.version = '0.1.0'
4
4
  s.authors = [ 'Michał Kalbarczyk' ]
5
5
  s.email = 'fazibear@gmail.com'
6
- s.homepage = 'http://github.com/fazibear/inesita'
6
+ s.homepage = 'http://github.com/inesita-rb/inesita'
7
7
  s.summary = 'Frontend web framework for Opal'
8
8
  s.description = 'Frontent web framework for Opal'
9
9
 
@@ -12,11 +12,11 @@ Gem::Specification.new do |s|
12
12
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
13
13
  s.require_paths = ['lib']
14
14
 
15
- s.add_dependency 'opal'
16
- s.add_dependency 'opal-virtual-dom'
17
- s.add_dependency 'slim'
18
- s.add_dependency 'sass'
19
- s.add_dependency 'thor'
20
- s.add_dependency 'rack-rewrite'
21
- s.add_development_dependency 'rake'
15
+ s.add_dependency 'opal', '~> 0.8'
16
+ s.add_dependency 'opal-virtual-dom', '~> 0.0.5'
17
+ s.add_dependency 'slim', '~> 3.0'
18
+ s.add_dependency 'sass', '~> 3.4'
19
+ s.add_dependency 'thor', '~> 0.19'
20
+ s.add_dependency 'rack-rewrite', '~> 1.5'
21
+ s.add_development_dependency 'rake', '~> 10.4'
22
22
  end
@@ -13,11 +13,10 @@ class InesitaCLI < Thor
13
13
  desc: 'force overwrite'
14
14
 
15
15
  def new(project_dir)
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
16
+ puts 'x'
17
+ directory('template', project_dir, {
18
+ project_name: project_dir
19
+ })
21
20
 
22
21
  inside project_dir do
23
22
  run 'bundle install'
@@ -1,8 +1,7 @@
1
- # A sample Gemfile
2
1
  source "https://rubygems.org"
3
2
 
4
- gem 'opal-browser'
5
- gem 'inesita'
3
+ gem 'opal-browser', '~> 0.2'
4
+ gem 'inesita', '~> 0.1'
6
5
 
7
6
  source 'https://rails-assets.org' do
8
7
  gem 'rails-assets-bootstrap'
@@ -0,0 +1 @@
1
+ # <%= config[:project_name] %>
@@ -0,0 +1,17 @@
1
+ require 'virtual-dom'
2
+ require 'opal'
3
+ require 'browser'
4
+ require 'browser/interval'
5
+ require 'inesita'
6
+
7
+ require 'router'
8
+ require 'store'
9
+ require_tree './components'
10
+
11
+ $document.ready do
12
+ App = Inesita::Application.new(
13
+ router: Router,
14
+ store: Store,
15
+ layout: Layout
16
+ ).mount_to($document.body)
17
+ end
@@ -0,0 +1,18 @@
1
+ class Description
2
+ include Inesita::Component
3
+
4
+ def render
5
+ dom do
6
+ div class: 'jumbotron text-center' do
7
+ p do
8
+ text %{
9
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
10
+ Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
11
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
12
+ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
13
+ }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ class Home
2
+ include Inesita::Component
3
+
4
+ def render
5
+ dom do
6
+ div class: 'jumbotron text-center' do
7
+ img src: 'http://avatars.githubusercontent.com/inesita-rb'
8
+ h1 do
9
+ text "Hello I'm Inesita"
10
+ end
11
+ h4 do
12
+ text 'This is a sample component'
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,16 +1,10 @@
1
1
  class Layout
2
2
  include Inesita::Layout
3
3
 
4
- components :navbar
5
-
6
- def initialize
7
- @navbar ||= NavBar.new
8
- end
9
-
10
4
  def render
11
- div do
5
+ dom do
12
6
  div class: 'container' do
13
- component navbar
7
+ component NavBar
14
8
  component outlet
15
9
  end
16
10
  end
@@ -0,0 +1,29 @@
1
+ class NavBar
2
+ include Inesita::Component
3
+
4
+ def render
5
+ dom do
6
+ nav class: 'navbar navbar-default' do
7
+ div class: 'container' do
8
+ div class: 'navbar-header' do
9
+ span class: 'navbar-brand' do
10
+ text '<%= config[:project_name] %>'
11
+ end
12
+ ul class: 'nav navbar-nav' do
13
+ li class: "#{"active" if router.current_url?(:home)}" do
14
+ a href: router.url_for(:home) do
15
+ text 'Home'
16
+ end
17
+ end
18
+ li class: "#{"active" if router.current_url?(:description)}" do
19
+ a href: router.url_for(:description) do
20
+ text 'Description'
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,7 +1,7 @@
1
1
  doctype html
2
2
  html
3
3
  head
4
- title Inesita
4
+ title <%= config[:project_name] %>
5
5
  - if $DEVELOPMENT_MODE
6
6
  link href=asset_path('stylesheet.css') rel='stylesheet' type='text/css'
7
7
  - $SCRIPT_FILES.each do |file|
@@ -0,0 +1,8 @@
1
+ class Router
2
+ include Inesita::Router
3
+
4
+ def routes
5
+ route '/', to: Home
6
+ route '/description', to: Description
7
+ end
8
+ end
@@ -0,0 +1,15 @@
1
+ class Store
2
+ include Inesita::Store
3
+
4
+ def initialize
5
+ @store = {}
6
+ end
7
+
8
+ def set(key, value)
9
+ @store[key] = value
10
+ end
11
+
12
+ def get(key)
13
+ @store[key]
14
+ end
15
+ end
data/opal/inesita.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  require 'virtual_dom'
2
2
  require 'virtual_dom_extension'
3
+ require 'inesita/js_helpers'
4
+ require 'inesita/component_withs'
3
5
  require 'inesita/component'
6
+ require 'inesita/routes'
4
7
  require 'inesita/router'
8
+ require 'inesita/store'
5
9
  require 'inesita/application'
6
10
  require 'inesita/layout'
@@ -2,20 +2,28 @@ module Inesita
2
2
  class Application
3
3
  include Inesita::Component
4
4
 
5
- components :parent
5
+ attr_reader :root
6
6
 
7
7
  def initialize(options)
8
- raise 'Routes missing' unless options[:routes]
8
+ router = options[:router]
9
+ layout = options[:layout]
10
+ store = options[:store]
9
11
 
10
- @router = Router.new(options[:routes])
11
- @layout = options[:layout]
12
+ raise 'Router missing' unless router
13
+ raise "Invalid #{router} class, should mixin Inesita::Router" unless router.include?(Inesita::Router)
14
+ raise "Invalid #{layout} class, should mixin Inesita::Layout" unless layout.include?(Inesita::Layout)
15
+ raise "Invalid #{store} class, should mixin Inesita::Store" unless store.include?(Inesita::Store)
12
16
 
13
- @parent = @layout ? @layout.create(@router) : @router
17
+ @router = router.new
18
+ @layout = layout.new if layout
19
+
20
+ @root = @layout ? @layout : @router
21
+ @store = store.new.with_root_component(@root).store if store
14
22
  end
15
23
 
16
24
  def render
17
25
  dom do
18
- component parent
26
+ component root
19
27
  end
20
28
  end
21
29
  end
@@ -1,59 +1,43 @@
1
1
  module Inesita
2
2
  module Component
3
3
  include VirtualDOM
4
-
5
- def with_parent(component)
6
- @parent = component
7
- self
8
- end
4
+ include ComponentWiths
9
5
 
10
6
  def dom(&block)
11
- NodeFactory.new(block, self).nodes.first
12
- end
13
-
14
- def setup; end
15
-
16
- def setup_and_render
17
- setup
18
- render
7
+ nodes = NodeFactory.new(block, self).nodes
8
+ @cache_component_counter = nil
9
+ if nodes.length == 1
10
+ nodes.first
11
+ else
12
+ VirtualNode.new('div', {}, nodes).vnode
13
+ end
19
14
  end
20
15
 
21
- def mount(element)
22
- @virtual_dom = setup_and_render
23
- @mount_point = VirtualDOM.create(@virtual_dom)
24
- element.inner_dom = @mount_point
16
+ def mount_to(element)
17
+ @root_component = self
18
+ @virtual_dom = render
19
+ @root_node = VirtualDOM.create(@virtual_dom)
20
+ element.inner_dom = @root_node
25
21
  end
26
22
 
27
- def update_dom!
28
- if @virtual_dom && @mount_point
29
- new_virtual_dom = setup_and_render
23
+ def render_if_root
24
+ if @virtual_dom && @root_node
25
+ new_virtual_dom = render
30
26
  diff = VirtualDOM.diff(@virtual_dom, new_virtual_dom)
31
- VirtualDOM.patch(@mount_point, diff)
27
+ VirtualDOM.patch(@root_node, diff)
32
28
  @virtual_dom = new_virtual_dom
33
- else
34
- @parent.update_dom!
35
29
  end
36
30
  end
37
31
 
38
- def url
39
- `document.location.pathname`
32
+ def update_dom
33
+ @root_component.render_if_root
40
34
  end
41
35
 
42
- def self.included(base)
43
- base.extend(ClassMethods)
44
- end
45
-
46
- module ClassMethods
47
- def components(*attrs)
48
- attrs.flatten.each do |component|
49
- if VirtualDOM::NodeFactory::HTML_TAGS.include?(component)
50
- fail "Forbidden component name '#{component}' in #{self} component"
51
- else
52
- attr_reader component
53
- end
54
- end
55
- attr_reader *attrs.flatten
56
- end
36
+ def cache_component(component, &block)
37
+ @cache_component ||= {}
38
+ @cache_component_counter ||= 0
39
+ @cache_component_counter += 1
40
+ @cache_component["#{component}-#{@cache_component_counter}"] || @cache_component["#{component}-#{@cache_component_counter}"] = block.call
57
41
  end
58
42
  end
59
43
  end
@@ -0,0 +1,27 @@
1
+ module Inesita
2
+ module ComponentWiths
3
+ attr_reader :root_component
4
+ def with_root_component(component)
5
+ @root_component = component
6
+ self
7
+ end
8
+
9
+ attr_reader :router
10
+ def with_router(router)
11
+ @router = router
12
+ self
13
+ end
14
+
15
+ attr_reader :store
16
+ def with_store(store)
17
+ @store = store
18
+ self
19
+ end
20
+
21
+ attr_reader :props
22
+ def with_props(props)
23
+ @props = props
24
+ self
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ module Inesita
2
+ module JSHelpers
3
+ def on_popstate(fn)
4
+ `window.onpopstate = function(){#{fn}}`
5
+ end
6
+
7
+ def on_hashchange(fn)
8
+ `window.addEventListener("hashchange", function(){#{fn}})`
9
+ end
10
+
11
+ def push_state(path)
12
+ `window.history.pushState({}, null, #{path})`
13
+ end
14
+
15
+ def path
16
+ `document.location.pathname`
17
+ end
18
+
19
+ def decode_uri(string)
20
+ `decodeURIComponent(#{string})`
21
+ end
22
+
23
+ def url_query
24
+ `location.search`
25
+ end
26
+ end
27
+ end
@@ -2,19 +2,10 @@ module Inesita
2
2
  module Layout
3
3
  def self.included(base)
4
4
  base.include(Component)
5
- base.extend(ClassMethods)
6
- base.components :outlet
7
5
  end
8
6
 
9
- def with_outlet(outlet)
10
- @outlet = outlet
11
- self
12
- end
13
-
14
- module ClassMethods
15
- def create(outlet)
16
- new.with_outlet(outlet)
17
- end
7
+ def outlet
8
+ @router
18
9
  end
19
10
  end
20
11
  end
@@ -1,38 +1,72 @@
1
1
  module Inesita
2
- class Router
2
+ module Router
3
+ include Inesita::JSHelpers
3
4
  include Inesita::Component
4
- class << self; attr_accessor :handle_browser_history; end
5
5
 
6
- components :routes
6
+ attr_reader :params
7
7
 
8
- def initialize(routes)
9
- default_component = routes.values.first.new
8
+ def initialize
9
+ on_popstate method(:update_dom)
10
+ on_hashchange method(:update_dom)
11
+ @routes = Routes.new
12
+ @url_params = parse_url_params
13
+ routes
14
+ end
10
15
 
11
- @routes = Hash.new(default_component)
12
- routes.map do |route, component|
13
- @routes[route] = component.new
14
- end
16
+ def routes; end
17
+
18
+ def route(*params, &block)
19
+ @routes.route(*params, &block)
20
+ end
15
21
 
16
- handle_browser_history
22
+ def find_component
23
+ @routes.routes.each do |route|
24
+ if params = path.match(route[:regex])
25
+ @params = @url_params.merge(Hash[route[:params].zip(params[1..-1])])
26
+ @component_props = route[:component_props]
27
+ return route[:component]
28
+ end
29
+ end
30
+ fail 'not_found'
17
31
  end
18
32
 
19
33
  def render
20
34
  dom do
21
- component routes[url]
35
+ component find_component, props: @component_props
22
36
  end
23
37
  end
24
38
 
25
- def handle_browser_history
26
- `window.onpopstate = function(){#{update_dom!}}`
27
- `window.addEventListener("hashchange", function(){#{update_dom!}})`
28
- self.class.handle_browser_history = true
39
+ def handle_link(path)
40
+ push_state path
41
+ update_dom
42
+ false
29
43
  end
30
44
 
31
- def self.handle_link(path, component)
32
- `window.history.pushState({}, null, #{path})`
33
- component.update_dom!
34
- false
45
+ def parse_url_params
46
+ params = {}
47
+ url_query[1..-1].split('&').each do |param|
48
+ key, value = param.split('=')
49
+ params[decode_uri(key)] = decode_uri(value)
50
+ end unless url_query.length == 0
51
+ params
35
52
  end
36
53
 
54
+ def url_for(name)
55
+ route = case name
56
+ when String
57
+ @routes.routes.find { |route| route[:name] == name }
58
+ when Object
59
+ @routes.routes.find { |route| route[:component] == name }
60
+ end
61
+ if route
62
+ route[:path]
63
+ else
64
+ raise "Route '#{name}' not found."
65
+ end
66
+ end
67
+
68
+ def current_url?(name)
69
+ path == url_for(name)
70
+ end
37
71
  end
38
72
  end
@@ -0,0 +1,61 @@
1
+ module Inesita
2
+ class Routes
3
+ attr_reader :routes, :route_names
4
+
5
+ def initialize(parent = nil)
6
+ @parent = parent
7
+ @routes = []
8
+ end
9
+
10
+ def route(*params, &block)
11
+ path = params.first.delete('/')
12
+ path = @parent ? "#{@parent}/#{path}" : "/#{path}"
13
+ component = params.last[:to]
14
+ name = params.last[:as]
15
+ component_props = params.last[:props]
16
+
17
+ add_subroutes(path, &block) if block_given?
18
+ add_route(name, path, component, component_props) if component
19
+ end
20
+
21
+ def add_route(name, path, component, component_props)
22
+ @routes << {
23
+ path: path,
24
+ component: component,
25
+ component_props: component_props,
26
+ name: name || component.to_s.downcase
27
+ }.merge(params_and_regex(path))
28
+ end
29
+
30
+ def add_subroutes(path, &block)
31
+ subroutes = Routes.new(path)
32
+ subroutes.instance_exec(&block)
33
+ @routes += subroutes.routes
34
+ end
35
+
36
+ def params_and_regex(path)
37
+ regex = ['^']
38
+ params = []
39
+ parts = path.split('/')
40
+ if parts.empty?
41
+ regex << '\/'
42
+ else
43
+ parts.each do |part|
44
+ next if part.empty?
45
+ regex << '\/'
46
+ if part[0] == ':'
47
+ params << part[1..-1]
48
+ regex << '([^\/]+)'
49
+ else
50
+ regex << part
51
+ end
52
+ end
53
+ end
54
+ regex << '$'
55
+ {
56
+ regex: Regexp.new(regex.join),
57
+ params: params
58
+ }
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,17 @@
1
+ module Inesita
2
+ module Store
3
+ def store
4
+ self
5
+ end
6
+
7
+ def update_dom
8
+ root_component.update_dom
9
+ end
10
+
11
+ attr_reader :root_component
12
+ def with_root_component(component)
13
+ @root_component = component
14
+ self
15
+ end
16
+ end
17
+ end
@@ -1,12 +1,17 @@
1
1
  module VirtualDOM
2
2
  class NodeFactory
3
- def component(comp)
3
+ def component(comp, opts = {})
4
4
  fail "Component is nil in #{@parent.class} class" if comp.nil?
5
- @nodes << comp.with_parent(@parent).setup_and_render
5
+ @nodes << @parent.cache_component(comp) do
6
+ (comp.is_a?(Class) ? comp.new : comp)
7
+ .with_root_component(@parent.root_component)
8
+ .with_router(@parent.router)
9
+ .with_store(@parent.store)
10
+ end.with_props(opts[:props] || {}).render
6
11
  end
7
12
 
8
13
  def a(params, &block)
9
- params = { onclick: -> { Inesita::Router.handle_link(params[:href], @parent) } }.merge(params) if params[:href] && Inesita::Router.handle_browser_history
14
+ params = { onclick: -> { @parent.router.handle_link(params[:href]) } }.merge(params) if params[:href] && @parent.router
10
15
  @nodes << VirtualNode.new(
11
16
  'a',
12
17
  process_params(params),
metadata CHANGED
@@ -1,113 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inesita
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michał Kalbarczyk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-09 00:00:00.000000000 Z
11
+ date: 2015-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '0.8'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '0.8'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: opal-virtual-dom
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 0.0.5
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 0.0.5
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: slim
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '3.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '3.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: sass
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '3.4'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '3.4'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: thor
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '0.19'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '0.19'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rack-rewrite
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '1.5'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: '1.5'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0'
103
+ version: '10.4'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0'
110
+ version: '10.4'
111
111
  description: Frontent web framework for Opal
112
112
  email: fazibear@gmail.com
113
113
  executables:
@@ -119,6 +119,7 @@ files:
119
119
  - Gemfile
120
120
  - README.md
121
121
  - Rakefile
122
+ - TODO.md
122
123
  - bin/inesita
123
124
  - inesita.gemspec
124
125
  - lib/inesita.rb
@@ -126,25 +127,30 @@ files:
126
127
  - lib/inesita/cli/build.rb
127
128
  - lib/inesita/cli/new.rb
128
129
  - lib/inesita/cli/server.rb
129
- - lib/inesita/cli/template/.gitignore
130
- - lib/inesita/cli/template/Gemfile
131
- - lib/inesita/cli/template/app/application.js.rb
132
- - lib/inesita/cli/template/app/components/goodbye.rb
133
- - lib/inesita/cli/template/app/components/home.rb
134
- - lib/inesita/cli/template/app/components/layout.rb
135
- - lib/inesita/cli/template/app/components/navbar.rb
136
- - lib/inesita/cli/template/app/components/welcome.rb
137
- - lib/inesita/cli/template/app/index.html.slim
138
- - lib/inesita/cli/template/app/stylesheet.css.sass
139
- - lib/inesita/cli/template/config.ru
130
+ - lib/inesita/cli/template/Gemfile.tt
131
+ - lib/inesita/cli/template/README.md.tt
132
+ - lib/inesita/cli/template/app/application.js.rb.tt
133
+ - lib/inesita/cli/template/app/components/description.rb.tt
134
+ - lib/inesita/cli/template/app/components/home.rb.tt
135
+ - lib/inesita/cli/template/app/components/layout.rb.tt
136
+ - lib/inesita/cli/template/app/components/navbar.rb.tt
137
+ - lib/inesita/cli/template/app/index.html.slim.tt
138
+ - lib/inesita/cli/template/app/router.rb.tt
139
+ - lib/inesita/cli/template/app/store.rb.tt
140
+ - lib/inesita/cli/template/app/stylesheet.css.sass.tt
141
+ - lib/inesita/cli/template/config.ru.tt
140
142
  - lib/inesita/server.rb
141
143
  - opal/inesita.rb
142
144
  - opal/inesita/application.rb
143
145
  - opal/inesita/component.rb
146
+ - opal/inesita/component_withs.rb
147
+ - opal/inesita/js_helpers.rb
144
148
  - opal/inesita/layout.rb
145
149
  - opal/inesita/router.rb
150
+ - opal/inesita/routes.rb
151
+ - opal/inesita/store.rb
146
152
  - opal/virtual_dom_extension.rb
147
- homepage: http://github.com/fazibear/inesita
153
+ homepage: http://github.com/inesita-rb/inesita
148
154
  licenses: []
149
155
  metadata: {}
150
156
  post_install_message:
@@ -163,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
169
  version: '0'
164
170
  requirements: []
165
171
  rubyforge_project:
166
- rubygems_version: 2.4.5
172
+ rubygems_version: 2.4.8
167
173
  signing_key:
168
174
  specification_version: 4
169
175
  summary: Frontend web framework for Opal
@@ -1 +0,0 @@
1
- /public
@@ -1,17 +0,0 @@
1
- require 'virtual-dom'
2
- require 'opal'
3
- require 'browser'
4
- require 'inesita'
5
-
6
- require_tree './components'
7
-
8
- $document.ready do
9
- Inesita::Application.new(
10
- routes: {
11
- '/' => Home,
12
- '/welcome' => Welcome,
13
- '/goodbye' => Goodbye
14
- },
15
- layout: Layout
16
- ).mount($document.body)
17
- end
@@ -1,14 +0,0 @@
1
- class Goodbye
2
- include Inesita::Component
3
-
4
- def render
5
- div class: 'jumbotron text-center' do
6
- h1 do
7
- text "Bye, Bye ..."
8
- end
9
- h4 do
10
- text 'This is a sample component'
11
- end
12
- end
13
- end
14
- end
@@ -1,14 +0,0 @@
1
- class Home
2
- include Inesita::Component
3
-
4
- def render
5
- div class: 'jumbotron text-center' do
6
- h1 do
7
- text "I'm Home !"
8
- end
9
- h4 do
10
- text 'This is a sample component'
11
- end
12
- end
13
- end
14
- end
@@ -1,32 +0,0 @@
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 class: "#{"active" if url == '/'}" do
13
- a href: '/' do
14
- text 'Home'
15
- end
16
- end
17
- li class: "#{"active" if url == '/welcome'}" do
18
- a href: '/welcome' do
19
- text 'Welcome'
20
- end
21
- end
22
- li class: "#{"active" if url == '/goodbye'}" 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,14 +0,0 @@
1
- class Welcome
2
- include Inesita::Component
3
-
4
- def render
5
- div class: 'jumbotron text-center' do
6
- h1 do
7
- text "Hi, I'm Inesita"
8
- end
9
- h4 do
10
- text 'This is a sample component'
11
- end
12
- end
13
- end
14
- end