spinebox 0.0.14 → 0.0.15

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.
@@ -7,6 +7,8 @@ A ready to use spine.js rack skeleton builder with development server, routes, c
7
7
  * Develop in coffee-script and sass with fantastic sprockets asset serving
8
8
  * Use generators and scaffolding just like with rails
9
9
  * Compile assets and serve the whole app completely static
10
+ * Use partials and helpers in your view just like in rails
11
+ * Compilation only updates actually changed files. This is a premise for delta deployment.
10
12
 
11
13
  h3. Installation
12
14
 
@@ -16,11 +18,7 @@ h3. Usage
16
18
 
17
19
  Create your javascript app or HTML files just as you're used to it.
18
20
 
19
- In the HTML files you can use partials just like in rails:
20
-
21
- bc.. render :partial => "navigation.html"
22
-
23
- h4. Create new project
21
+ h4. Create New Project
24
22
 
25
23
  bc.. # Create new project an start developing
26
24
  $ spinebox new blog
@@ -28,6 +26,17 @@ $ cd blog
28
26
  $ spinebox server
29
27
  $ open http://localhost:3000/index.html
30
28
 
29
+ h4. Use Partials and Helpers
30
+
31
+ Partials are prefixed with a @_@ to declare them a partial. So you can create a @_navigation.html.erb@ and use it, e.g.
32
+ in the @index.html.erb@ with:
33
+
34
+ bc.. <%= render :partial => "index.html" %>
35
+
36
+ p. Helpers are in the helper folder and included by default in any view. So if you want to create special links, etc. that
37
+ you reuse throughout your project simply create a method named @link_to@ in the helper, any any view and partial will have it
38
+ accessible.
39
+
31
40
  h4. Generate models, views and controllers
32
41
 
33
42
  bc.. # Generate a model view and a controller
@@ -12,6 +12,7 @@ module Spinebox
12
12
  Spinebox::Routes.reset!
13
13
  Spinebox.load_config!
14
14
  Spinebox.load_routes!
15
+ Spinebox.load_helpers!
15
16
  end
16
17
 
17
18
  end
@@ -1,6 +1,8 @@
1
1
  module Spinebox
2
2
  module Compiler
3
3
 
4
+ require "digest"
5
+
4
6
  # Compiles the assets and the views into the public folder
5
7
  def self.compile
6
8
  Spinebox.config.concatenate = true
@@ -19,24 +21,42 @@ module Spinebox
19
21
 
20
22
  def self.compile_javascripts
21
23
  asset = Spinebox.assets["application.js"]
22
- asset.write_to(File.join("public/assets", asset.logical_path))
24
+ path = File.join("public/assets", asset.logical_path)
25
+
26
+ write_asset!(asset, path) if asset_updated?(asset, path)
23
27
  end
24
28
 
25
29
  def self.compile_stylesheets
26
30
  asset = Spinebox.assets["application.css"]
27
- asset.write_to(File.join("public/assets", asset.logical_path))
31
+ path = File.join("public/assets", asset.logical_path)
32
+
33
+ write_asset!(asset, path) if asset_updated?(asset, path)
28
34
  end
29
35
 
30
36
  def self.compile_views
31
37
  Spinebox.views.each_logical_path do |logical_path|
32
38
  next if logical_path.start_with?("_")
33
39
  asset = Spinebox.views[logical_path]
34
- asset.write_to(File.join("public", asset.logical_path))
40
+ path = File.join("public", asset.logical_path)
41
+
42
+ write_asset!(asset, path) if asset_updated?(asset, path)
35
43
  end
36
44
  end
37
45
 
38
46
  def self.copy_images
39
- FileUtils.cp_r "app/assets/images/.", "public/assets"
47
+ FileUtils.cp_r "app/assets/images/.", "public/assets", :preserve => true
48
+ end
49
+
50
+ def self.asset_updated?(asset, path)
51
+ return true unless File.exists?(path)
52
+ Digest::SHA2.file(path).hexdigest != Digest::SHA2.hexdigest(asset.to_s)
53
+ end
54
+
55
+ def self.write_asset!(asset, path)
56
+ asset.write_to(path)
57
+ time = Time.now
58
+ File.utime(time, time, path)
59
+ puts path
40
60
  end
41
61
 
42
62
  end
@@ -29,6 +29,7 @@ module Spinebox
29
29
  raise RenderError, "Partial needs a file extension" if params[:partial].split(".").size == 0
30
30
 
31
31
  partial = Spinebox.views["_#{params[:partial]}"]
32
+
32
33
  raise RenderError, "Partial not found" if partial.nil?
33
34
 
34
35
  partial.to_s
@@ -43,21 +44,31 @@ module Spinebox
43
44
 
44
45
  # Build a javascript tag with body options
45
46
  def javascript_tag_for asset, options = {}
46
- "<script src='assets/#{asset.logical_path}#{"?body=1" if options[:body]}' type='text/javascript'></script>"
47
+ "<script src='/assets/#{asset.logical_path}#{"?body=1" if options[:body]}' type='text/javascript'></script>"
47
48
  end
48
49
 
49
50
  # Build a stylesheet link with body options
50
51
  def stylesheet_tag_for asset, new_options = {}
51
52
  options = { :media => "all", :rel => "stylesheet" }.merge!(new_options)
52
- "<link href='assets/#{asset.logical_path}#{"?body=1" if options[:body]}' media='#{options[:media]}' rel='#{options[:rel]}' type='text/css'>"
53
+ "<link href='/assets/#{asset.logical_path}#{"?body=1" if options[:body]}' media='#{options[:media]}' rel='#{options[:rel]}' type='text/css'>"
53
54
  end
54
55
 
55
56
  end
56
57
 
57
- # Include ERB context in the ERB evaluation of sprockets
58
- module ::Sprockets
59
- class Context
60
- include Spinebox::ERBContext
58
+ class << self
59
+
60
+ # Load helpers and include into sprockets context
61
+ def load_helpers!
62
+ Spinebox::ERBContext.class_eval do
63
+ Dir["app/helpers/*"].each do |helper|
64
+ require("./#{helper}")
65
+ include Spinebox.const_get(File.basename(helper, ".rb").classify)
66
+ end
67
+ end
68
+
69
+ ::Sprockets::Context.instance_eval do
70
+ include Spinebox::ERBContext
71
+ end
61
72
  end
62
73
  end
63
74
 
@@ -0,0 +1,9 @@
1
+ module Spinebox
2
+ module LinkHelper
3
+
4
+ def link_to title, link
5
+ "<a href='#{link}'>#{title}</a>"
6
+ end
7
+
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Spinebox
2
- VERSION = "0.0.14"
2
+ VERSION = "0.0.15"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spinebox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.15
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-11-28 00:00:00.000000000 Z
13
+ date: 2012-12-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: sprockets
17
- requirement: &70228460900940 !ruby/object:Gem::Requirement
17
+ requirement: &70299237085840 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 2.1.2
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70228460900940
25
+ version_requirements: *70299237085840
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rack
28
- requirement: &70228460900440 !ruby/object:Gem::Requirement
28
+ requirement: &70299237085260 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.4.1
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70228460900440
36
+ version_requirements: *70299237085260
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: coffee-script
39
- requirement: &70228460899980 !ruby/object:Gem::Requirement
39
+ requirement: &70299237084800 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 1.2.0
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *70228460899980
47
+ version_requirements: *70299237084800
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: eco
50
- requirement: &70228460899520 !ruby/object:Gem::Requirement
50
+ requirement: &70299237084320 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 1.0.0
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *70228460899520
58
+ version_requirements: *70299237084320
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: sass
61
- requirement: &70228460899020 !ruby/object:Gem::Requirement
61
+ requirement: &70299237106620 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: 3.1.15
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *70228460899020
69
+ version_requirements: *70299237106620
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: colorize
72
- requirement: &70228460898540 !ruby/object:Gem::Requirement
72
+ requirement: &70299237106160 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: 0.5.8
78
78
  type: :runtime
79
79
  prerelease: false
80
- version_requirements: *70228460898540
80
+ version_requirements: *70299237106160
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: activesupport
83
- requirement: &70228460897940 !ruby/object:Gem::Requirement
83
+ requirement: &70299237105700 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: 3.2.2
89
89
  type: :runtime
90
90
  prerelease: false
91
- version_requirements: *70228460897940
91
+ version_requirements: *70299237105700
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: thin
94
- requirement: &70228460920140 !ruby/object:Gem::Requirement
94
+ requirement: &70299237105240 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,7 +99,7 @@ dependencies:
99
99
  version: 1.3.1
100
100
  type: :runtime
101
101
  prerelease: false
102
- version_requirements: *70228460920140
102
+ version_requirements: *70299237105240
103
103
  description: A ready to use spine.js rack skeleton builder with development server,
104
104
  routes, config and precompile support
105
105
  email:
@@ -149,6 +149,7 @@ files:
149
149
  - lib/spinebox/templates/app/app/assets/javascripts/lib/spine/route.coffee
150
150
  - lib/spinebox/templates/app/app/assets/javascripts/lib/spine/spine.coffee
151
151
  - lib/spinebox/templates/app/app/assets/stylesheets/application.css.scss
152
+ - lib/spinebox/templates/app/app/helpers/link_helper.rb
152
153
  - lib/spinebox/templates/app/app/views/_partial.html.erb
153
154
  - lib/spinebox/templates/app/app/views/index.html.erb
154
155
  - lib/spinebox/templates/app/config.ru