joosy-rails 1.0.0.RC3 → 1.0.0.alpha.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b016a6a7c669a93ca9001180b54f7cee5f50396
4
- data.tar.gz: f095247de533a249b723ff1ec38698af7336047e
3
+ metadata.gz: c4c118e1c080d32f38f9771960ad21bcd6f37d87
4
+ data.tar.gz: 749289c198631be8237ad36432705a01264b20c8
5
5
  SHA512:
6
- metadata.gz: c8b473d0426f26d4318d7a76ef17d1c295ce54a321b8c072d765c8f1111c6cae677c1ce31422da492c9f5bb79eb4f5a65df6b3a13ab050ce416ddd00901d762e
7
- data.tar.gz: 9dc3dbd2aff34b0ac6abee733c9c9805889d707f5b7d0a45182fd034937bcc1bd47980f96abb0f148703cab65e17da1a3fecfda42777073d891ed81ad802f442
6
+ metadata.gz: 81c3f9fb848175736b1f4a3ff1768d4641a25aa093826faa446eb44aeae747f119f243b7fcee04adc13e6f7400911e20d5653b557131cb8f8724aca5aef2c21f
7
+ data.tar.gz: 9a04ec21874424f969dc329d700a2a91458f1c80a0f69af005a717faab183340a00de9f80c50e2758e10fa9569650152f2c67e323502205736d6e564dac79d93
data/README.md CHANGED
@@ -1,21 +1,6 @@
1
- # Joosy::Rails
1
+ # Joosy::Rails
2
2
 
3
- <a href="http://joosy.ws"><img src="http://f.cl.ly/items/3X0f2K1z3r1X3K162W2c/logo.png" align="right" /></a>
4
-
5
- [![Gem Version](https://badge.fury.io/rb/joosy-rails.png)](http://badge.fury.io/rb/joosy-rails)
6
- [![Dependency Status](https://gemnasium.com/joosy/joosy-rails.png)](https://gemnasium.com/joosy/joosy-rails)
7
-
8
- The bindings between **[Joosy](http://joosy.ws) framework** and [Rails](http://rubyonrails.org).
9
-
10
- If you are seeking for information about Joosy, start with [official site](http://joosy.ws), [guides](http://guides.joosy.ws) or [central repository](https://github.com/joosy/joosy/).
11
-
12
- ## Capabilities
13
-
14
- * Full assets integration
15
- * Generators
16
- * Built-in serving controller
17
- * Routes helpers
18
- * Automatic Joosy Resources generation
3
+ TODO: Write a gem description
19
4
 
20
5
  ## Installation
21
6
 
@@ -27,56 +12,18 @@ And then execute:
27
12
 
28
13
  $ bundle
29
14
 
30
- ## Usage
31
-
32
- ### Generators
33
-
34
- #### rails g joosy:application (NAME)
35
-
36
- Generates basic application and patches route to make it loadable straight away.
37
-
38
- By default an application will be generated directly at `app/assets/javascripts`. If you want to isolate it a bit more, pass in the `NAME` argument &mdash; then it will appear at `app/assets/javascripts/NAME`.
39
-
40
- #### rails g joosy:layout NAME (APPLICATION)
41
-
42
- Generates Joosy layout. `NAME` can contain slashes to automatically generate corresponding path and namespace.
43
-
44
- Note that if the application was initially generated with the usage of `NAME` option, you should pass it here as the second parameter (APPLICATION).
45
-
46
- #### rails g joosy:page NAME (APPLICATION)
15
+ Or install it yourself as:
47
16
 
48
- Generates Joosy page. `NAME` can contain slashes to automatically generate corresponding path and namespace.
17
+ $ gem install joosy-rails
49
18
 
50
- Note that if the application was initially generated with the usage of `NAME` option, you should pass it here as the second parameter (APPLICATION).
51
-
52
- #### rails g joosy:widget NAME (APPLICATION)
53
-
54
- Generates Joosy widget. `NAME` can contain slashes to automatically generate corresponding path and namespace.
55
-
56
- Note that if the application was initially generated with the usage of `NAME` option, you should pass it here as the second parameter (APPLICATION).
57
-
58
- #### rails g joosy:controller NAME (--copy)
59
-
60
- Generates a controller serving Joosy application using the NAME given.
61
-
62
- By default a controller will inherit from internal `Joosy::Rails::ServeController`. If instead you want to patch it from the ground, use `--copy` option that will make generator to create raw controller that inherits from `ActionController::Base`.
63
-
64
- ### Serving controller and helpers
65
-
66
- This gem provides `joosy` routing helper which can be used in the following way:
67
-
68
- ```ruby
69
- joosy '/', application: 'dummy'
70
- ```
71
-
72
- This will map your `dummy` Joosy application to the root url. The `application` option is optional. It should reflect path to application from `app/assets/javascript` (use the value that you passed into the NAME of `rails g joosy:application`).
73
-
74
- ## Maintainers
75
-
76
- * Boris Staal, [@inossidabile](http://staal.io)
19
+ ## Usage
77
20
 
78
- ## License
21
+ TODO: Write usage instructions here
79
22
 
80
- Copyright 2013 [Boris Staal](http://staal.io)
23
+ ## Contributing
81
24
 
82
- It is free software, and may be redistributed under the terms of MIT license.
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
@@ -0,0 +1,26 @@
1
+ module Joosy
2
+ module PreloadersHelper
3
+ def javascript_preload_tag(name)
4
+ code = javascript_include_tag name
5
+ resources = code.scan(/(?:href|src)=['"]([^'"]+)['"]/).flatten
6
+
7
+ resources.map do |resource|
8
+ uri = URI.parse resource
9
+ path = ::Rails.root.to_s + "/public" + uri.path
10
+ size = File.size(path) rescue 0
11
+ [resource, size]
12
+ end.to_json.html_safe
13
+ end
14
+
15
+ def require_joosy_preloader_for(app_asset, options={})
16
+ preloader_asset = "joosy/preloaders/#{options[:preloader] || 'caching'}"
17
+ force_preloader = options[:force] || false
18
+
19
+ if force_preloader
20
+ require_asset preloader_asset
21
+ else
22
+ require_asset Rails.env == 'development' ? app_asset : preloader_asset
23
+ end
24
+ end
25
+ end
26
+ end
data/joosy-rails.gemspec CHANGED
@@ -18,12 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'joosy', '>= 1.2.0.beta.4'
21
+ spec.add_dependency 'joosy', '>= 1.2.0.alpha'
22
22
  spec.add_dependency 'sprockets'
23
23
  spec.add_dependency 'execjs'
24
- spec.add_dependency 'activesupport'
25
- spec.add_dependency 'thor'
24
+ spec.add_dependency 'ejs'
26
25
 
27
- spec.add_dependency 'sugar-rails'
28
- spec.add_dependency 'jquery-form-rails'
26
+ spec.add_development_dependency 'rake'
29
27
  end
@@ -0,0 +1,21 @@
1
+ require 'sprockets'
2
+ require 'execjs'
3
+ require 'ejs'
4
+
5
+ module Joosy
6
+ module Generators
7
+ def self.pregenerate(generator, arguments)
8
+ environment = Sprockets::Environment.new
9
+ environment.append_path Joosy.generators_path
10
+
11
+ source = environment['base.js'].to_s
12
+ source << environment["#{generator}.js"].to_s
13
+ source << <<-JS
14
+ Generator.prototype.version = function(){return '#{Joosy::VERSION}'};
15
+ JS
16
+
17
+ arguments = arguments.join("','")
18
+ ExecJS.compile(source).eval("new Generator('#{arguments}').generate()")
19
+ end
20
+ end
21
+ end
@@ -3,22 +3,10 @@ require 'rails/engine'
3
3
  module Joosy
4
4
  module Rails
5
5
  class Engine < ::Rails::Engine
6
- cattr_accessor :resources
7
- self.resources = []
8
-
9
6
  initializer 'joosy.extend.sprockets' do |app|
10
7
  Joosy.assets_paths.each{|p| app.assets.append_path p}
11
8
  end
12
-
13
- initializer 'joosy.routing' do |app|
14
- app.routes.prepend do
15
- Engine.resources = []
16
- end
17
- end
18
-
19
- def route_dependencies
20
- ::Rails.application.routes_reloader.paths
21
- end
22
9
  end
23
10
  end
24
11
  end
12
+
@@ -0,0 +1,15 @@
1
+ module Joosy
2
+ module Rails
3
+ module Sprockets
4
+ module Asset
5
+ def dependencies_with_sizes
6
+ dependencies = to_a.map do |dependency|
7
+ [dependency.logical_path, dependency.to_s.length]
8
+ end
9
+
10
+ Hash[*dependencies.flatten]
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,5 +1,5 @@
1
1
  module Joosy
2
2
  module Rails
3
- VERSION = "1.0.0.RC3"
3
+ VERSION = "1.0.0.alpha.1"
4
4
  end
5
5
  end
data/lib/joosy/rails.rb CHANGED
@@ -1,9 +1,24 @@
1
- require 'sugar-rails'
2
- require 'jquery-form-rails'
3
- require 'haml_coffee_assets'
4
1
  require 'joosy'
5
2
 
6
3
  require 'joosy/rails/version'
7
- require 'joosy/rails/controller'
4
+ require 'joosy/rails/sprockets'
8
5
  require 'joosy/rails/engine'
9
- require 'joosy/rails/routing'
6
+
7
+ module Joosy
8
+ module Rails
9
+ def self.resources(namespaces=nil)
10
+ predefined = {}
11
+ filtered_resources = Joosy::Rails::Engine.resources
12
+ if namespaces
13
+ namespaces = Array.wrap namespaces
14
+ filtered_resources = filtered_resources.select{|key, _| namespaces.include? key }
15
+ end
16
+ filtered_resources.each do |namespace, resources|
17
+ next unless resources && resources.size > 0
18
+ joosy_namespace = namespace.to_s.camelize.split('::').join('.')
19
+ predefined[joosy_namespace] = resources
20
+ end
21
+ predefined
22
+ end
23
+ end
24
+ end
@@ -1,47 +1,30 @@
1
- require_relative './base'
1
+ require 'joosy/generators'
2
2
 
3
3
  module Joosy
4
4
  module Generators
5
- class ApplicationGenerator < Base
6
- argument :name, type: :string, optional: true
7
-
8
- def create_application
9
- dependencies = <<-COFFEE
10
- #= require hamlcoffee
11
- #= require jquery
12
- #= require joosy
13
- #= require joosy/resources
14
- #= require joosy/railties
15
- #= require sugar
16
- COFFEE
17
-
18
- @options = {
19
- 'dependencies' => dependencies,
20
- 'html5' => true,
21
- 'prefix' => name || ''
22
- }
23
-
24
- directory 'application', Pathname.new('app/assets/javascripts/').join(name || '')
25
- end
26
-
27
- def create_bindings
28
- self.destination_root = ::Rails.root
29
-
30
- if !name
31
- index = ::Rails.root.join('app/assets/javascripts/application.js')
32
-
33
- if File.exists?(index)
34
- copy_file index, 'app/assets/javascripts/application.js-old'
35
- remove_file index
5
+ class ApplicationGenerator < ::Rails::Generators::Base
6
+ source_root Joosy.templates_path
7
+
8
+ argument :name, :type => :string
9
+
10
+ def create_files
11
+ self.destination_root = ::Rails.root.join('app/assets/javascripts/').join(name)
12
+ instructions = Joosy::Generators.pregenerate('project/base', [name])
13
+
14
+ instructions.each do |i|
15
+ case i[0]
16
+ when 'file'
17
+ create_file i[1]
18
+ when 'copy'
19
+ copy_file i[2], i[1]
20
+ when 'template'
21
+ source = File.expand_path(find_in_source_paths(i[2]))
22
+
23
+ create_file i[1] do
24
+ EJS.evaluate(File.read(source), i[3])
25
+ end
36
26
  end
37
27
  end
38
-
39
- layout = 'joosy'
40
- layout << "/#{name}" if name
41
- erb_template File.expand_path('../templates/layout.html.erb', __FILE__), "app/views/layouts/#{layout}.html.erb"
42
-
43
- application = name ? ", application: '#{name}'" : ''
44
- route "joosy '/#{name}'#{application}"
45
28
  end
46
29
  end
47
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: joosy-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.RC3
4
+ version: 1.0.0.alpha.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Boris Staal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-11 00:00:00.000000000 Z
11
+ date: 2013-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: joosy
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.2.0.beta.4
19
+ version: 1.2.0.alpha
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: 1.2.0.beta.4
26
+ version: 1.2.0.alpha
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sprockets
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: activesupport
56
+ name: ejs
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '>='
@@ -67,41 +67,13 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: thor
70
+ name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '>='
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: sugar-rails
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'
97
- - !ruby/object:Gem::Dependency
98
- name: jquery-form-rails
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - '>='
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :runtime
76
+ type: :development
105
77
  prerelease: false
106
78
  version_requirements: !ruby/object:Gem::Requirement
107
79
  requirements:
@@ -120,24 +92,14 @@ files:
120
92
  - LICENSE.txt
121
93
  - README.md
122
94
  - Rakefile
123
- - app/assets/javascripts/joosy/railties.coffee.erb
124
- - app/assets/javascripts/joosy/resource_loader.coffee
95
+ - app/helpers/joosy/preloaders_helper.rb
125
96
  - joosy-rails.gemspec
97
+ - lib/joosy/generators.rb
126
98
  - lib/joosy/rails.rb
127
- - lib/joosy/rails/controller.rb
128
99
  - lib/joosy/rails/engine.rb
129
- - lib/joosy/rails/routing.rb
100
+ - lib/joosy/rails/sprockets.rb
130
101
  - lib/joosy/rails/version.rb
131
102
  - lib/rails/generators/joosy/application_generator.rb
132
- - lib/rails/generators/joosy/base.rb
133
- - lib/rails/generators/joosy/controller_generator.rb
134
- - lib/rails/generators/joosy/layout_generator.rb
135
- - lib/rails/generators/joosy/page_generator.rb
136
- - lib/rails/generators/joosy/resource_generator.rb
137
- - lib/rails/generators/joosy/templates/controller.rb
138
- - lib/rails/generators/joosy/templates/layout.html.erb
139
- - lib/rails/generators/joosy/widget_generator.rb
140
- - vendor/ejs.js
141
103
  homepage: http://github.com/joosy/rails
142
104
  licenses:
143
105
  - MIT
@@ -158,9 +120,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
120
  version: 1.3.1
159
121
  requirements: []
160
122
  rubyforge_project:
161
- rubygems_version: 2.0.3
123
+ rubygems_version: 2.0.2
162
124
  signing_key:
163
125
  specification_version: 4
164
126
  summary: Joosy Rails ties
165
127
  test_files: []
166
- has_rdoc:
@@ -1,13 +0,0 @@
1
- #= require ./resource_loader
2
-
3
- <%
4
- Joosy::Rails::Engine.route_dependencies.each do |path|
5
- depend_on path
6
- end
7
- %>
8
-
9
- routes = <%= Joosy::Rails::Engine.resources.to_json %>
10
-
11
- Joosy.ResourceLoader.loadResources routes
12
-
13
-
@@ -1,37 +0,0 @@
1
- #= require joosy/resources
2
-
3
- Joosy.ResourceLoader =
4
- defineResource: (name, path, parent) ->
5
- class @[name] extends parent
6
- @entity name.underscore()
7
- @source path
8
-
9
- namespaceFromLevels: (levels) ->
10
- levels.map((x) ->
11
- res = x.replace(/^\//, '').split('/')
12
- if res.length > 1
13
- # resource, has second (mask) part
14
- res = res[0].singularize()
15
- else
16
- # scope
17
- res = res[0]
18
- res.camelize()
19
- ).join('.')
20
-
21
- loadResources: (routes) ->
22
- for route in routes
23
- levels = route.match /\/[^\/]+(\/:[^\/]+)?/g
24
- continue unless Object.isArray(levels)
25
- rootPath = levels.pop()
26
- name = rootPath.replace(/^\//, '').singularize().camelize()
27
-
28
- parent = if window[name] && Joosy.Module.hasAncestor(window[name], Joosy.Resources.REST)
29
- window[name]
30
- else if !window[name]
31
- @defineResource.call window, name, rootPath, Joosy.Resources.REST
32
- else
33
- Joosy.Resources.REST
34
-
35
- if (ns = @namespaceFromLevels(levels)) != ''
36
- Joosy.namespace ns, ->
37
- Joosy.ResourceLoader.defineResource.call @, name, route, parent
@@ -1,13 +0,0 @@
1
- module Joosy
2
- module Rails
3
- class ServeController < ActionController::Base
4
- def index
5
- @prefix = request.env['SCRIPT_NAME']
6
- layout = 'joosy'
7
- layout << "/#{params[:application]}" if params[:application]
8
-
9
- render text: '', layout: layout
10
- end
11
- end
12
- end
13
- end
@@ -1,41 +0,0 @@
1
- require 'action_dispatch/routing/mapper'
2
-
3
- module ActionDispatch::Routing
4
- class Mapper
5
- module Resources
6
- class JoosyResource
7
- def initialize(context)
8
- @context = context
9
- end
10
-
11
- def method_missing(name, *args, &block)
12
- @context.send(name, *args, &block)
13
- end
14
-
15
- def resources(*args, &block)
16
- @context.resources(*args) do
17
- scope = @context.instance_eval { @scope }
18
- Joosy::Rails::Engine.resources << "#{scope[:path]}/#{scope[:scope_level_resource].path}"
19
- @context.joosy_resources(&block)
20
- end
21
- end
22
- end
23
-
24
- def joosy_resources(&block)
25
- JoosyResource.new(self).instance_eval(&block) if block_given?
26
- end
27
- end
28
-
29
- def joosy(route, options={})
30
- extender = route.last == '/' ? '(*x)' : '(/*x)'
31
-
32
- get route,
33
- controller: options[:controller] || 'joosy/rails/serve',
34
- action: options[:action] || 'index',
35
- as: (options[:application] ? "joosy_#{options[:application]}" : "joosy"),
36
- defaults: {route: route, application: options[:application]},
37
- anchor: false,
38
- format: false
39
- end
40
- end
41
- end
@@ -1,61 +0,0 @@
1
- require 'active_support/all'
2
- require 'sprockets'
3
- require 'execjs'
4
-
5
- module Joosy
6
- module Generators
7
- class Base < ::Rails::Generators::Base
8
- no_tasks do
9
- class <<self
10
- attr_accessor :kind
11
- end
12
-
13
- alias_method :erb_template, :template
14
-
15
- def template(source, destination=nil, config={})
16
- destination ||= source
17
- source = File.expand_path(find_in_source_paths(source.to_s))
18
- context = instance_eval('binding')
19
-
20
- create_file destination, nil, config do
21
- self.class.ejs ::File.read(source), @options
22
- end
23
- end
24
- end
25
-
26
- protected
27
-
28
- def self.sprockets
29
- return @sprockets if @sprockets
30
-
31
- @sprockets = Sprockets::Environment.new
32
- @sprockets.append_path File.expand_path('../../../../../vendor/', __FILE__)
33
- @sprockets
34
- end
35
-
36
- def self.ejs(template, data)
37
- ExecJS.compile(sprockets['ejs'].to_s).eval("ejs.compile(#{template.to_json})(#{data.to_json})")
38
- end
39
-
40
- def self.source_root
41
- Joosy.templates_path
42
- end
43
- end
44
-
45
- class Entity < Base
46
- argument :name, type: :string
47
- argument :application, type: :string, optional: true
48
-
49
- def create_files
50
- @options = {
51
- 'name' => name,
52
- 'namespace' => name.split('/')[0..-2].map(&:camelize).join('/'),
53
- 'view' => name.split('/').last.underscore,
54
- 'klass' => name.split('/').last.camelize
55
- }
56
-
57
- directory self.class.kind, Pathname.new('app/assets/javascripts/').join(application || '')
58
- end
59
- end
60
- end
61
- end
@@ -1,18 +0,0 @@
1
- module Joosy
2
- module Generators
3
- class ControllerGenerator < ::Rails::Generators::Base
4
- argument :name, type: :string
5
- class_option :copy, :default => false, :type => :boolean, :desc => 'Indicates whether internal controller should be copied'
6
-
7
- source_root ::Rails.root
8
-
9
- def create_files
10
- if options["copy"]
11
- template File.expand_path('../../../../joosy/rails/controller.rb', __FILE__), "app/controller/joosy/rails/serve_controller.rb"
12
- else
13
- template File.expand_path('../templates/controller.rb', __FILE__), "app/controllers/#{name.underscore}_controller.rb"
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,9 +0,0 @@
1
- require_relative './base'
2
-
3
- module Joosy
4
- module Generators
5
- class LayoutGenerator < Entity
6
- self.kind = 'layout'
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- require_relative './base'
2
-
3
- module Joosy
4
- module Generators
5
- class PageGenerator < Entity
6
- self.kind = 'page'
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- require_relative './base'
2
-
3
- module Joosy
4
- module Generators
5
- class ResourceGenerator < Entity
6
- self.kind = 'resource'
7
- end
8
- end
9
- end
@@ -1,2 +0,0 @@
1
- class <%= name.camelize %>Controller < Joosy::Rails::ServeController
2
- end
@@ -1,19 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title></title>
5
- <script type="text/javascript">
6
- window.JoosyEnvironment = {
7
- router: {
8
- prefix: <%= '<%= raw @prefix.to_json %'+'>' %>
9
- }
10
- }
11
- </script>
12
-
13
- <%= "<%= stylesheet_link_tag 'application', :media => 'all' %"+'>' %>
14
- <%= "<%= javascript_include_tag '#{name}#{'/' if name}application' %"+'>' %>
15
- <%= '<%= csrf_meta_tags %'+'>' %>
16
- </head>
17
- <body>
18
- </body>
19
- </html>
@@ -1,9 +0,0 @@
1
- require_relative './base'
2
-
3
- module Joosy
4
- module Generators
5
- class WidgetGenerator < Entity
6
- self.kind = 'widget'
7
- end
8
- end
9
- end
data/vendor/ejs.js DELETED
@@ -1,581 +0,0 @@
1
- ejs = (function(){
2
-
3
- // CommonJS require()
4
-
5
- function require(p){
6
- if ('fs' == p) return {};
7
- var path = require.resolve(p)
8
- , mod = require.modules[path];
9
- if (!mod) throw new Error('failed to require "' + p + '"');
10
- if (!mod.exports) {
11
- mod.exports = {};
12
- mod.call(mod.exports, mod, mod.exports, require.relative(path));
13
- }
14
- return mod.exports;
15
- }
16
-
17
- require.modules = {};
18
-
19
- require.resolve = function (path){
20
- var orig = path
21
- , reg = path + '.js'
22
- , index = path + '/index.js';
23
- return require.modules[reg] && reg
24
- || require.modules[index] && index
25
- || orig;
26
- };
27
-
28
- require.register = function (path, fn){
29
- require.modules[path] = fn;
30
- };
31
-
32
- require.relative = function (parent) {
33
- return function(p){
34
- if ('.' != p.substr(0, 1)) return require(p);
35
-
36
- var path = parent.split('/')
37
- , segs = p.split('/');
38
- path.pop();
39
-
40
- for (var i = 0; i < segs.length; i++) {
41
- var seg = segs[i];
42
- if ('..' == seg) path.pop();
43
- else if ('.' != seg) path.push(seg);
44
- }
45
-
46
- return require(path.join('/'));
47
- };
48
- };
49
-
50
-
51
- require.register("ejs.js", function(module, exports, require){
52
-
53
- /*!
54
- * EJS
55
- * Copyright(c) 2012 TJ Holowaychuk <tj@vision-media.ca>
56
- * MIT Licensed
57
- */
58
-
59
- /**
60
- * Module dependencies.
61
- */
62
-
63
- var utils = require('./utils')
64
- , fs = require('fs');
65
-
66
- /**
67
- * Library version.
68
- */
69
-
70
- exports.version = '0.7.2';
71
-
72
- /**
73
- * Filters.
74
- *
75
- * @type Object
76
- */
77
-
78
- var filters = exports.filters = require('./filters');
79
-
80
- /**
81
- * Intermediate js cache.
82
- *
83
- * @type Object
84
- */
85
-
86
- var cache = {};
87
-
88
- /**
89
- * Clear intermediate js cache.
90
- *
91
- * @api public
92
- */
93
-
94
- exports.clearCache = function(){
95
- cache = {};
96
- };
97
-
98
- /**
99
- * Translate filtered code into function calls.
100
- *
101
- * @param {String} js
102
- * @return {String}
103
- * @api private
104
- */
105
-
106
- function filtered(js) {
107
- return js.substr(1).split('|').reduce(function(js, filter){
108
- var parts = filter.split(':')
109
- , name = parts.shift()
110
- , args = parts.shift() || '';
111
- if (args) args = ', ' + args;
112
- return 'filters.' + name + '(' + js + args + ')';
113
- });
114
- };
115
-
116
- /**
117
- * Re-throw the given `err` in context to the
118
- * `str` of ejs, `filename`, and `lineno`.
119
- *
120
- * @param {Error} err
121
- * @param {String} str
122
- * @param {String} filename
123
- * @param {String} lineno
124
- * @api private
125
- */
126
-
127
- function rethrow(err, str, filename, lineno){
128
- var lines = str.split('\n')
129
- , start = Math.max(lineno - 3, 0)
130
- , end = Math.min(lines.length, lineno + 3);
131
-
132
- // Error context
133
- var context = lines.slice(start, end).map(function(line, i){
134
- var curr = i + start + 1;
135
- return (curr == lineno ? ' >> ' : ' ')
136
- + curr
137
- + '| '
138
- + line;
139
- }).join('\n');
140
-
141
- // Alter exception message
142
- err.path = filename;
143
- err.message = (filename || 'ejs') + ':'
144
- + lineno + '\n'
145
- + context + '\n\n'
146
- + err.message;
147
-
148
- throw err;
149
- }
150
-
151
- /**
152
- * Parse the given `str` of ejs, returning the function body.
153
- *
154
- * @param {String} str
155
- * @return {String}
156
- * @api public
157
- */
158
-
159
- var parse = exports.parse = function(str, options){
160
- var options = options || {}
161
- , open = options.open || exports.open || '<%'
162
- , close = options.close || exports.close || '%>';
163
-
164
- var buf = [
165
- "var buf = [];"
166
- , "\nwith (locals) {"
167
- , "\n buf.push('"
168
- ];
169
-
170
- var lineno = 1;
171
-
172
- var consumeEOL = false;
173
- for (var i = 0, len = str.length; i < len; ++i) {
174
- if (str.slice(i, open.length + i) == open) {
175
- i += open.length
176
-
177
- var prefix, postfix, line = '__stack.lineno=' + lineno;
178
- switch (str.substr(i, 1)) {
179
- case '=':
180
- prefix = "', escape((" + line + ', ';
181
- postfix = ")), '";
182
- ++i;
183
- break;
184
- case '-':
185
- prefix = "', (" + line + ', ';
186
- postfix = "), '";
187
- ++i;
188
- break;
189
- default:
190
- prefix = "');" + line + ';';
191
- postfix = "; buf.push('";
192
- }
193
-
194
- var end = str.indexOf(close, i)
195
- , js = str.substring(i, end)
196
- , start = i
197
- , n = 0;
198
-
199
- if ('-' == js[js.length-1]){
200
- js = js.substring(0, js.length - 2);
201
- consumeEOL = true;
202
- }
203
-
204
- while (~(n = js.indexOf("\n", n))) n++, lineno++;
205
- if (js.substr(0, 1) == ':') js = filtered(js);
206
- buf.push(prefix, js, postfix);
207
- i += end - start + close.length - 1;
208
-
209
- } else if (str.substr(i, 1) == "\\") {
210
- buf.push("\\\\");
211
- } else if (str.substr(i, 1) == "'") {
212
- buf.push("\\'");
213
- } else if (str.substr(i, 1) == "\r") {
214
- buf.push(" ");
215
- } else if (str.substr(i, 1) == "\n") {
216
- if (consumeEOL) {
217
- consumeEOL = false;
218
- } else {
219
- buf.push("\\n");
220
- lineno++;
221
- }
222
- } else {
223
- buf.push(str.substr(i, 1));
224
- }
225
- }
226
-
227
- buf.push("');\n}\nreturn buf.join('');");
228
- return buf.join('');
229
- };
230
-
231
- /**
232
- * Compile the given `str` of ejs into a `Function`.
233
- *
234
- * @param {String} str
235
- * @param {Object} options
236
- * @return {Function}
237
- * @api public
238
- */
239
-
240
- var compile = exports.compile = function(str, options){
241
- options = options || {};
242
-
243
- var input = JSON.stringify(str)
244
- , filename = options.filename
245
- ? JSON.stringify(options.filename)
246
- : 'undefined';
247
-
248
- // Adds the fancy stack trace meta info
249
- str = [
250
- 'var __stack = { lineno: 1, input: ' + input + ', filename: ' + filename + ' };',
251
- rethrow.toString(),
252
- 'try {',
253
- exports.parse(str, options),
254
- '} catch (err) {',
255
- ' rethrow(err, __stack.input, __stack.filename, __stack.lineno);',
256
- '}'
257
- ].join("\n");
258
-
259
- if (options.debug) console.log(str);
260
- var fn = new Function('locals, filters, escape', str);
261
- return function(locals){
262
- return fn.call(this, locals, filters, utils.escape);
263
- }
264
- };
265
-
266
- /**
267
- * Render the given `str` of ejs.
268
- *
269
- * Options:
270
- *
271
- * - `locals` Local variables object
272
- * - `cache` Compiled functions are cached, requires `filename`
273
- * - `filename` Used by `cache` to key caches
274
- * - `scope` Function execution context
275
- * - `debug` Output generated function body
276
- * - `open` Open tag, defaulting to "<%"
277
- * - `close` Closing tag, defaulting to "%>"
278
- *
279
- * @param {String} str
280
- * @param {Object} options
281
- * @return {String}
282
- * @api public
283
- */
284
-
285
- exports.render = function(str, options){
286
- var fn
287
- , options = options || {};
288
-
289
- if (options.cache) {
290
- if (options.filename) {
291
- fn = cache[options.filename] || (cache[options.filename] = compile(str, options));
292
- } else {
293
- throw new Error('"cache" option requires "filename".');
294
- }
295
- } else {
296
- fn = compile(str, options);
297
- }
298
-
299
- options.__proto__ = options.locals;
300
- return fn.call(options.scope, options);
301
- };
302
-
303
- /**
304
- * Render an EJS file at the given `path` and callback `fn(err, str)`.
305
- *
306
- * @param {String} path
307
- * @param {Object|Function} options or callback
308
- * @param {Function} fn
309
- * @api public
310
- */
311
-
312
- exports.renderFile = function(path, options, fn){
313
- var key = path + ':string';
314
-
315
- if ('function' == typeof options) {
316
- fn = options, options = {};
317
- }
318
-
319
- options.filename = path;
320
-
321
- try {
322
- var str = options.cache
323
- ? cache[key] || (cache[key] = fs.readFileSync(path, 'utf8'))
324
- : fs.readFileSync(path, 'utf8');
325
-
326
- fn(null, exports.render(str, options));
327
- } catch (err) {
328
- fn(err);
329
- }
330
- };
331
-
332
- // express support
333
-
334
- exports.__express = exports.renderFile;
335
-
336
- /**
337
- * Expose to require().
338
- */
339
-
340
- if (require.extensions) {
341
- require.extensions['.ejs'] = function(module, filename) {
342
- source = require('fs').readFileSync(filename, 'utf-8');
343
- module._compile(compile(source, {}), filename);
344
- };
345
- } else if (require.registerExtension) {
346
- require.registerExtension('.ejs', function(src) {
347
- return compile(src, {});
348
- });
349
- }
350
-
351
- }); // module: ejs.js
352
-
353
- require.register("filters.js", function(module, exports, require){
354
-
355
- /*!
356
- * EJS - Filters
357
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
358
- * MIT Licensed
359
- */
360
-
361
- /**
362
- * First element of the target `obj`.
363
- */
364
-
365
- exports.first = function(obj) {
366
- return obj[0];
367
- };
368
-
369
- /**
370
- * Last element of the target `obj`.
371
- */
372
-
373
- exports.last = function(obj) {
374
- return obj[obj.length - 1];
375
- };
376
-
377
- /**
378
- * Capitalize the first letter of the target `str`.
379
- */
380
-
381
- exports.capitalize = function(str){
382
- str = String(str);
383
- return str[0].toUpperCase() + str.substr(1, str.length);
384
- };
385
-
386
- /**
387
- * Downcase the target `str`.
388
- */
389
-
390
- exports.downcase = function(str){
391
- return String(str).toLowerCase();
392
- };
393
-
394
- /**
395
- * Uppercase the target `str`.
396
- */
397
-
398
- exports.upcase = function(str){
399
- return String(str).toUpperCase();
400
- };
401
-
402
- /**
403
- * Sort the target `obj`.
404
- */
405
-
406
- exports.sort = function(obj){
407
- return Object.create(obj).sort();
408
- };
409
-
410
- /**
411
- * Sort the target `obj` by the given `prop` ascending.
412
- */
413
-
414
- exports.sort_by = function(obj, prop){
415
- return Object.create(obj).sort(function(a, b){
416
- a = a[prop], b = b[prop];
417
- if (a > b) return 1;
418
- if (a < b) return -1;
419
- return 0;
420
- });
421
- };
422
-
423
- /**
424
- * Size or length of the target `obj`.
425
- */
426
-
427
- exports.size = exports.length = function(obj) {
428
- return obj.length;
429
- };
430
-
431
- /**
432
- * Add `a` and `b`.
433
- */
434
-
435
- exports.plus = function(a, b){
436
- return Number(a) + Number(b);
437
- };
438
-
439
- /**
440
- * Subtract `b` from `a`.
441
- */
442
-
443
- exports.minus = function(a, b){
444
- return Number(a) - Number(b);
445
- };
446
-
447
- /**
448
- * Multiply `a` by `b`.
449
- */
450
-
451
- exports.times = function(a, b){
452
- return Number(a) * Number(b);
453
- };
454
-
455
- /**
456
- * Divide `a` by `b`.
457
- */
458
-
459
- exports.divided_by = function(a, b){
460
- return Number(a) / Number(b);
461
- };
462
-
463
- /**
464
- * Join `obj` with the given `str`.
465
- */
466
-
467
- exports.join = function(obj, str){
468
- return obj.join(str || ', ');
469
- };
470
-
471
- /**
472
- * Truncate `str` to `len`.
473
- */
474
-
475
- exports.truncate = function(str, len){
476
- str = String(str);
477
- return str.substr(0, len);
478
- };
479
-
480
- /**
481
- * Truncate `str` to `n` words.
482
- */
483
-
484
- exports.truncate_words = function(str, n){
485
- var str = String(str)
486
- , words = str.split(/ +/);
487
- return words.slice(0, n).join(' ');
488
- };
489
-
490
- /**
491
- * Replace `pattern` with `substitution` in `str`.
492
- */
493
-
494
- exports.replace = function(str, pattern, substitution){
495
- return String(str).replace(pattern, substitution || '');
496
- };
497
-
498
- /**
499
- * Prepend `val` to `obj`.
500
- */
501
-
502
- exports.prepend = function(obj, val){
503
- return Array.isArray(obj)
504
- ? [val].concat(obj)
505
- : val + obj;
506
- };
507
-
508
- /**
509
- * Append `val` to `obj`.
510
- */
511
-
512
- exports.append = function(obj, val){
513
- return Array.isArray(obj)
514
- ? obj.concat(val)
515
- : obj + val;
516
- };
517
-
518
- /**
519
- * Map the given `prop`.
520
- */
521
-
522
- exports.map = function(arr, prop){
523
- return arr.map(function(obj){
524
- return obj[prop];
525
- });
526
- };
527
-
528
- /**
529
- * Reverse the given `obj`.
530
- */
531
-
532
- exports.reverse = function(obj){
533
- return Array.isArray(obj)
534
- ? obj.reverse()
535
- : String(obj).split('').reverse().join('');
536
- };
537
-
538
- /**
539
- * Get `prop` of the given `obj`.
540
- */
541
-
542
- exports.get = function(obj, prop){
543
- return obj[prop];
544
- };
545
-
546
- /**
547
- * Packs the given `obj` into json string
548
- */
549
- exports.json = function(obj){
550
- return JSON.stringify(obj);
551
- };
552
- }); // module: filters.js
553
-
554
- require.register("utils.js", function(module, exports, require){
555
-
556
- /*!
557
- * EJS
558
- * Copyright(c) 2010 TJ Holowaychuk <tj@vision-media.ca>
559
- * MIT Licensed
560
- */
561
-
562
- /**
563
- * Escape the given string of `html`.
564
- *
565
- * @param {String} html
566
- * @return {String}
567
- * @api private
568
- */
569
-
570
- exports.escape = function(html){
571
- return String(html)
572
- .replace(/&(?!\w+;)/g, '&amp;')
573
- .replace(/</g, '&lt;')
574
- .replace(/>/g, '&gt;')
575
- .replace(/"/g, '&quot;');
576
- };
577
-
578
- }); // module: utils.js
579
-
580
- return require("ejs");
581
- })();