bobkit 0.0.1 → 0.0.2

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: 9039d57140e0dab71277e153eb1903e9a9eb3f2b
4
- data.tar.gz: 2b43616ca5a43085b55191fa701063983d7becfe
3
+ metadata.gz: 7db6c694ea1adaf5fec4c8dab145d0204744aca3
4
+ data.tar.gz: 369d8e39afb9dea61523f7f8208283946d840b9f
5
5
  SHA512:
6
- metadata.gz: e7e2b9b3f6823f05544a6dee29a64f5728c2bbfea54c432375679de276ce4c10abcf298b61b00c77eb5b0f251718f9eff6d65ba4ca513c32efe93280d9d82a8e
7
- data.tar.gz: afd8794e232ecfa91b5a7d0b1e478c6654f673c4c7ffc7609b6a4bb5af26a03756369cb31f39f6968e1f6d71f52fd0e3b029b300a453b70a98114a3116862e56
6
+ metadata.gz: ed1294af999ff86255b1fd08091085478b19c3440955c706b220de5ed0dd86b029b3be09974cc9a36376a3691d5b8201fa2842600cc0a6214bc9134b1712a458
7
+ data.tar.gz: f88938070983f3e62cbf2705449a66de85b4d5512624851d93e1b76b03ee85728b79634e94d42930a6a44d6ff10a171c93db607062e182a51c065ec653641890
data/README.md CHANGED
@@ -1,13 +1,203 @@
1
1
  Bobkit - Site Generation Toolkit
2
2
  ==================================================
3
3
 
4
+ [![Gem](https://img.shields.io/gem/v/bobkit.svg?style=flat-square)](https://rubygems.org/gems/bobkit)
5
+ [![Travis](https://img.shields.io/travis/DannyBen/bobkit.svg?style=flat-square)](https://travis-ci.org/DannyBen/bobkit)
6
+ [![Code Climate](https://img.shields.io/codeclimate/github/DannyBen/bobkit.svg?style=flat-square)](https://codeclimate.com/github/DannyBen/bobkit)
7
+ [![Gemnasium](https://img.shields.io/gemnasium/DannyBen/bobkit.svg?style=flat-square)](https://gemnasium.com/DannyBen/bobkit)
8
+
9
+ ---
10
+
11
+ Bobkit is a lightweight tookit for generating static websites with Slim, SCSS
12
+ and CoffeeScript.
13
+
14
+ The design intentions were:
15
+
16
+ - To provide easy to use wrapper methods for Slim, SCSS and CoffeeScript
17
+ - To not impose any directory structure (this is not a blog generator...).
18
+ - To allow you to use standard ruby for generating your site.
19
+ - To be packaged as a library, and not a command line tool.
20
+ - To provide sensible default locations that are easily overridable.
21
+ - To add `render` and `layout` support to Slim (Rails-like).
22
+ - To add `@import 'globbing/*`` support to SCSS (Rails-like).
23
+
24
+ ---
25
+
26
+
27
+
28
+ Install
29
+ --------------------------------------------------
30
+
31
+ `gem install bobkit`
32
+
33
+ Or with Bundler:
34
+
35
+ `gem 'bobkit'`
36
+
37
+
38
+
39
+ Usage
40
+ --------------------------------------------------
41
+
42
+ The basic usage pattern is this:
43
+
44
+ - Create a ruby file and include Bobkit
45
+ - Create your input folders (for Slim templates, SCSS files etc.)
46
+ wherever you want (or use the default locations, see below).
47
+ - In your Ruby script, call Bobkit methods to generate your site.
48
+
49
+ ### Example
50
+
51
+ ```ruby
52
+ require 'bobkit'
53
+ include Bobkit::Actions
54
+
55
+ # Convert Slim to HTML string
56
+ html = render 'youtube', video: 'hi9tOILaiNs'
57
+ puts html
58
+
59
+ # Convert Slim to HTML file
60
+ # This will use 'templates/youtube.slim', with the layout file
61
+ # `templates/layouts/default.slim` and will generate 'output/bobcat.html'.
62
+ render 'youtube', layout: 'default', video: 'hi9tOILaiNs', output: 'bobcat'
63
+
64
+ # Compile SCSS
65
+ # This will convert `styles/main.scss` to `output/css/style.css`
66
+ compile_css 'main', output: 'style'
67
+ ```
68
+
69
+ See more examples in the [Examples folder][1]
70
+
71
+
72
+ Reference
73
+ --------------------------------------------------
74
+
75
+ ### Setting folder locations and options
76
+
77
+ Bobkit has defaults for everything, but you can easily change them.
78
+ Each of these methods can be called with or without a parameter. When
79
+ called without a parameter, it will simply return the value.
80
+
81
+ ```ruby
82
+ # Location of source Slim templates. Default: "templates"
83
+ templates_folder 'views'
84
+
85
+ # Location of source Slim templates for layouts.
86
+ # Default: "#{templates_folder}/layouts"
87
+ layouts_folder 'my_layouts'
88
+
89
+ # Location of the source SCSS files. Default: "styles"
90
+ styles_folder 'styles'
91
+
92
+ # Output location. Default: "output"
93
+ output_folder 'site'
94
+
95
+ # Output location for CSS. Default: "#{output_folder}/css"
96
+ css_output_folder "#{output_folder}/stylesheets"
97
+
98
+ # Location of other source asset files (images etc.). Default: 'assets'
99
+ assets_folder 'files'
100
+
101
+ # Output location for assets. Default: "#{output_folder}/assets"
102
+ assets_output_folder 'images'
103
+
104
+ # Options for Slim generation.
105
+ slim_options pretty: true, disable_escape: true
106
+
107
+ # Options for SCSS generation.
108
+ scss_options cache: true, syntax: :scss, style: :nested
109
+
110
+ # Restore all settings to defaults
111
+ use_defaults
112
+ ```
113
+
114
+
115
+ ### Slim
116
+
117
+ ```ruby
118
+ # You can set a scope before calling any `render`
119
+ scope CatVideo.new
120
+ html = render 'cats'
121
+
122
+ # You can use a hash as scope
123
+ scope email: 'bob@kit.com', name: 'Bob'
124
+ html = render 'user'
125
+
126
+ # You can send a scope directly to `render`
127
+ html = render 'user', email: 'bob@kit.com', name: 'Bob'
128
+
129
+ # You can render with a layout
130
+ html = render 'user', layout: 'default', email: 'bob@kit.com'
131
+
132
+ # You can save to a file in the `output_folder`
133
+ render 'user', layout: 'default', email: 'bob@kit.com', output: 'bob'
134
+ ```
135
+
136
+
137
+ ### SCSS
138
+
139
+ ```ruby
140
+ # You can compile SCSS to a CSS string, to do as you please with it
141
+ css = compile_css 'style'
142
+
143
+ # You can compile SCSS directly to a file
144
+ compile_css 'style', output: 'main'
145
+ ```
146
+
147
+ ### CoffeeScript
148
+
149
+ ```ruby
150
+ # You can compile CoffeeScript to a Javascript string
151
+ js = compile_js 'script'
152
+
153
+ # You can compile CoffeeScript directly to a file
154
+ compile_js 'script', output: 'main'
155
+ ```
156
+
157
+
158
+ ### Asset helpers
159
+
160
+ Anything other than CSS, Javascript and HTML is considered an asset.
161
+ These are some helpers to help you move them acount from input to output
162
+ folders.
163
+
164
+ ```ruby
165
+ # Copy a file from the `assets_folder` to the `assets_output_folder`
166
+ copy_asset 'presskit.zip'
167
+
168
+ # Copy a folder
169
+ copy_asset 'images'
170
+ ```
171
+
172
+
173
+ ### Low level file and folder helpers
174
+
175
+ If you want more control over what the `copy_asset` method provides, you
176
+ can use any of these methods.
177
+
178
+ ```ruby
179
+ # Copy a file - needed parent folders will be created as needed
180
+ copy_file 'exact/path.zip', 'exact/output/file.zip'
181
+
182
+ # Copy a folder - needed parent folders will be created as needed
183
+ copy_file 'exact/path', 'exact/output/folder'
184
+
185
+ # Create folder, and any of the needed parent folders
186
+ create_folder 'my_folder'
187
+
188
+ # Create folder for a file, with any of the needed parent folders
189
+ create_folder_for 'some/folder/with/file.png'
190
+ ```
191
+
4
192
 
5
193
  Todo
6
194
  --------------------------------------------------
7
195
 
8
- [ ] Clean repo
9
- [ ] Publish gem
10
- [ ] Full test coverage
11
- [ ] copy_asset (file and folder)
12
- [ ] CoffeeScript
13
- [ ] Documentation
196
+ - [ ] YAML loader (data_folder?)
197
+ - [ ] CSV Loader (data_folder?)
198
+ - [ ] Maybe: Include file watcher and auto generate
199
+ - [ ] Maybe: Render from/to Markdown
200
+ - [ ] Maybe: Render to JSON
201
+
202
+
203
+ [1]: https://github.com/DannyBen/bobkit/tree/master/examples
data/lib/bobkit.rb CHANGED
@@ -1,9 +1,16 @@
1
1
  require 'fileutils'
2
2
  require 'sass'
3
+ require 'sass-globbing'
3
4
  require 'slim'
5
+ require 'coffee_script'
4
6
 
7
+ require 'bobkit/options_base'
8
+ require 'bobkit/location_options'
5
9
  require 'bobkit/file_helpers'
6
- require 'bobkit/sass_extra'
7
- require 'bobkit/slim_extra'
10
+ require 'bobkit/sass_bridge'
11
+ require 'bobkit/slim_bridge'
12
+ require 'bobkit/coffee_bridge'
13
+ require 'bobkit/assets'
14
+
8
15
  require 'bobkit/scope'
9
16
  require 'bobkit/actions'
@@ -1,27 +1,11 @@
1
1
  module Bobkit
2
2
  module Actions
3
- include SassExtra
4
- include SlimExtra
5
-
6
- def templates_folder(path=nil)
7
- setopt :templates_folder, path, 'templates'
8
- end
9
-
10
- def layouts_folder(path=nil)
11
- setopt :layouts_folder, path, "#{templates_folder}/layouts"
12
- end
13
-
14
- def styles_folder(path=nil)
15
- setopt :styles_folder, path, 'styles'
16
- end
17
-
18
- def output_folder(path=nil)
19
- setopt :output_folder, path, 'output'
20
- end
21
-
22
- def css_output_folder(path=nil)
23
- setopt :css_output_folder, path, "#{output_folder}/css"
24
- end
3
+ include OptionsBase
4
+ include LocationOptions
5
+ include SassBridge
6
+ include SlimBridge
7
+ include CoffeeBridge
8
+ include Assets
25
9
 
26
10
  def slim_options(options=nil)
27
11
  setopt :slim_options, options, slim_defaults
@@ -35,10 +19,6 @@ module Bobkit
35
19
  scope ? setopt(:scope, Scope.new(scope)) : options[:scope]
36
20
  end
37
21
 
38
- def use_defaults
39
- @@options = {}
40
- end
41
-
42
22
  protected
43
23
 
44
24
  def slim_defaults
@@ -46,17 +26,9 @@ module Bobkit
46
26
  end
47
27
 
48
28
  def scss_defaults
49
- { cache: true, syntax: :scss, style: :nested }
29
+ { cache: true, syntax: :scss, style: :nested,
30
+ load_paths: [styles_folder] }
50
31
  end
51
32
 
52
- def setopt(key, value=nil, default=nil)
53
- options[key] = value if value
54
- options[key] ||= default
55
- options[key]
56
- end
57
-
58
- def options
59
- @@options ||= {}
60
- end
61
33
  end
62
34
  end
@@ -0,0 +1,14 @@
1
+ module Bobkit
2
+ module Assets
3
+ include FileHelpers
4
+
5
+ def copy_asset(source, target=nil)
6
+ if target
7
+ target = "#{output_folder}/#{target}"
8
+ else
9
+ target = "#{assets_output_folder}/#{source}"
10
+ end
11
+ copy_entry "#{assets_folder}/#{source}", target
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ module Bobkit
2
+ module CoffeeBridge
3
+ include FileHelpers
4
+
5
+ def compile_js(file, options={})
6
+ @file = "#{coffee_folder}/#{file}.coffee"
7
+ content = CoffeeScript.compile File.read @file
8
+ output = options[:output]
9
+ create_file "#{js_output_folder}/#{output}.js", content if output
10
+ content
11
+ end
12
+ end
13
+ end
@@ -1,13 +1,24 @@
1
1
  module Bobkit
2
2
  module FileHelpers
3
+ def create_folder(path)
4
+ FileUtils.mkdir_p(path) unless File.directory?(path)
5
+ end
6
+
7
+ def create_folder_for(path)
8
+ create_folder File.dirname(path)
9
+ end
10
+
3
11
  def create_file(path, content)
4
12
  create_folder_for path
5
13
  File.write path, content
6
14
  end
7
15
 
8
- def create_folder_for(path)
9
- dir = File.dirname path
10
- FileUtils.mkdir_p(dir) unless File.directory?(dir)
16
+ def copy_file(source, target)
17
+ create_folder_for target
18
+ FileUtils.copy_entry source, target
11
19
  end
20
+ alias_method :copy_folder, :copy_file
21
+ alias_method :copy_entry, :copy_file
22
+
12
23
  end
13
24
  end
@@ -0,0 +1,41 @@
1
+ module Bobkit
2
+ module LocationOptions
3
+ include OptionsBase
4
+
5
+ def templates_folder(path=nil)
6
+ setopt :templates_folder, path, 'templates'
7
+ end
8
+
9
+ def layouts_folder(path=nil)
10
+ setopt :layouts_folder, path, "#{templates_folder}/layouts"
11
+ end
12
+
13
+ def styles_folder(path=nil)
14
+ setopt :styles_folder, path, 'styles'
15
+ end
16
+
17
+ def coffee_folder(path=nil)
18
+ setopt :coffee_folder, path, 'coffee'
19
+ end
20
+
21
+ def output_folder(path=nil)
22
+ setopt :output_folder, path, 'output'
23
+ end
24
+
25
+ def css_output_folder(path=nil)
26
+ setopt :css_output_folder, path, "#{output_folder}/css"
27
+ end
28
+
29
+ def js_output_folder(path=nil)
30
+ setopt :js_output_folder, path, "#{output_folder}/js"
31
+ end
32
+
33
+ def assets_folder(path=nil)
34
+ setopt :assets_folder, path, 'assets'
35
+ end
36
+
37
+ def assets_output_folder(path=nil)
38
+ setopt :assets_output_folder, path, "#{output_folder}/assets"
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,19 @@
1
+ module Bobkit
2
+ module OptionsBase
3
+ def use_defaults
4
+ @@options = {}
5
+ end
6
+
7
+ protected
8
+
9
+ def setopt(key, value=nil, default=nil)
10
+ options[key] = value if value
11
+ options[key] ||= default
12
+ options[key]
13
+ end
14
+
15
+ def options
16
+ @@options ||= {}
17
+ end
18
+ end
19
+ end
@@ -1,10 +1,11 @@
1
1
  module Bobkit
2
- module SassExtra
2
+ module SassBridge
3
3
  include FileHelpers
4
4
 
5
5
  def compile_css(file, options={})
6
6
  @file = "#{styles_folder}/#{file}.scss"
7
- content = Sass::Engine.new(File.read(@file), scss_options).render
7
+ extended_options = scss_options.merge({ filename: @file })
8
+ content = Sass::Engine.new(File.read(@file), extended_options).render
8
9
  output = options[:output]
9
10
  create_file "#{css_output_folder}/#{output}.css", content if output
10
11
  content
data/lib/bobkit/scope.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Bobkit
2
2
  class Scope
3
- include SlimExtra
3
+ include SlimBridge
4
4
 
5
5
  def initialize(scope)
6
6
  @scope = scope
@@ -1,5 +1,5 @@
1
1
  module Bobkit
2
- module SlimExtra
2
+ module SlimBridge
3
3
  include FileHelpers
4
4
 
5
5
  def render(options={}, extra_options={})
@@ -1,3 +1,3 @@
1
1
  module Bobkit
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bobkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-15 00:00:00.000000000 Z
11
+ date: 2016-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: slim
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sass-globbing
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: coffee-script
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.4'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.4'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: runfile
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +94,21 @@ dependencies:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
96
  version: '0.4'
69
- description: Site Generation Toolkit with Slim, SCSS and CoffeeScript
97
+ - !ruby/object:Gem::Dependency
98
+ name: byebug
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '8.2'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '8.2'
111
+ description: Lightweight Site Generation Toolkit with Slim, SCSS and CoffeeScript
70
112
  email: db@dannyben.com
71
113
  executables: []
72
114
  extensions: []
@@ -75,10 +117,14 @@ files:
75
117
  - README.md
76
118
  - lib/bobkit.rb
77
119
  - lib/bobkit/actions.rb
120
+ - lib/bobkit/assets.rb
121
+ - lib/bobkit/coffee_bridge.rb
78
122
  - lib/bobkit/file_helpers.rb
79
- - lib/bobkit/sass_extra.rb
123
+ - lib/bobkit/location_options.rb
124
+ - lib/bobkit/options_base.rb
125
+ - lib/bobkit/sass_bridge.rb
80
126
  - lib/bobkit/scope.rb
81
- - lib/bobkit/slim_extra.rb
127
+ - lib/bobkit/slim_bridge.rb
82
128
  - lib/bobkit/version.rb
83
129
  homepage: https://github.com/DannyBen/bobkit
84
130
  licenses: