volt 0.8.13 → 0.8.14
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 +4 -4
- data/Readme.md +3 -3
- data/VERSION +1 -1
- data/lib/volt/cli.rb +3 -18
- data/lib/volt/cli/generate.rb +26 -0
- data/lib/volt/extra_core/string.rb +2 -2
- data/lib/volt/models/url.rb +2 -3
- data/spec/extra_core/string_transformation_test_cases.rb +41 -0
- data/spec/extra_core/string_transformations_spec.rb +49 -0
- data/volt.gemspec +1 -1
- metadata +9 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ef1ff0f6f37905ecc83687721e258cd17b7da32
|
4
|
+
data.tar.gz: c6cf6a5c1df1ccf476185e6abd0df31271775bfc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19ef4e5c647e1897197d327cc27106b533b474cc5d668c41823f3833d0a8bb59f4884fa9399d740b0872725d09c0b67a88935275867f996dfdf47d4ca64c1eea
|
7
|
+
data.tar.gz: cfe27008bccf191c05ae9e7dd2ab6a1d39dc52d724d09f2707ccd5c4271eb54887d5f3b4761dc0d7914b270ff8b91314385f6ee670ed5e23e00b892d4cd6bb35
|
data/Readme.md
CHANGED
@@ -15,9 +15,9 @@ Instead of syncing data between the client and server via HTTP, Volt uses a pers
|
|
15
15
|
Pages HTML is written in a template language where you can put ruby between ```{{``` and ```}}```. Volt uses data flow/reactive programming to automatically and intelligently propagate changes to the DOM (or any other code wanting to know when a value updates). When something in the DOM changes, Volt intelligently updates only the nodes that need to be changed.
|
16
16
|
|
17
17
|
See some demo videos here:
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
- [Volt Todos Example](https://www.youtube.com/watch?v=Tg-EtRnMz7o)
|
19
|
+
- [Build a Blog with Volt](https://www.youtube.com/watch?v=c478sMlhx1o)
|
20
|
+
** Note: The blog video is outdated, expect an updated version soon.
|
21
21
|
|
22
22
|
Check out demo apps:
|
23
23
|
- https://github.com/voltrb/todos3
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.8.
|
1
|
+
0.8.14
|
data/lib/volt/cli.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
require 'thor'
|
3
3
|
require 'volt/extra_core/extra_core'
|
4
|
+
require 'volt/cli/generate'
|
4
5
|
|
5
6
|
class CLI < Thor
|
6
7
|
include Thor::Actions
|
7
8
|
|
9
|
+
register(Generate, 'generate', 'generate GENERATOR [args]', 'Run a generator.')
|
10
|
+
|
8
11
|
desc "new PROJECT_NAME", "generates a new project."
|
9
12
|
def new(name)
|
10
13
|
# Grab the current volt version
|
@@ -78,24 +81,6 @@ class CLI < Thor
|
|
78
81
|
NewGem.new(self, name, options)
|
79
82
|
end
|
80
83
|
|
81
|
-
desc "model NAME COMPONENT", "Creates a model named NAME in the component named COMPONENT"
|
82
|
-
method_option :name, :type => :string, :banner => "The name of the model."
|
83
|
-
method_option :component, :type => :string, :default => 'main', :banner => "The component the model should be created in.", :required => false
|
84
|
-
def model(name, component='main')
|
85
|
-
output_file = Dir.pwd + "/app/#{component.underscore}/models/#{name.underscore.singularize}.rb"
|
86
|
-
template("model/model.rb.tt", output_file, {model_name: name.camelize.singularize})
|
87
|
-
end
|
88
|
-
|
89
|
-
desc "component NAME", "Creates a component named NAME in the app folder."
|
90
|
-
method_option :name, :type => :string, :banner => "The name of the component."
|
91
|
-
def component(name)
|
92
|
-
name = name.underscore
|
93
|
-
component_folder = Dir.pwd + "/app/#{name}"
|
94
|
-
@component_name = name
|
95
|
-
directory("component", component_folder, {component_name: name})
|
96
|
-
end
|
97
|
-
|
98
|
-
|
99
84
|
def self.source_root
|
100
85
|
File.expand_path(File.join(File.dirname(__FILE__), '../../templates'))
|
101
86
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Generate < Thor
|
2
|
+
include Thor::Actions
|
3
|
+
|
4
|
+
desc "model NAME COMPONENT", "Creates a model named NAME in the component named COMPONENT"
|
5
|
+
method_option :name, :type => :string, :banner => "The name of the model."
|
6
|
+
method_option :component, :type => :string, :default => 'main', :banner => "The component the model should be created in.", :required => false
|
7
|
+
def model(name, component='main')
|
8
|
+
output_file = Dir.pwd + "/app/#{component.underscore}/models/#{name.underscore.singularize}.rb"
|
9
|
+
template("model/model.rb.tt", output_file, {model_name: name.camelize.singularize})
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "component NAME", "Creates a component named NAME in the app folder."
|
13
|
+
method_option :name, :type => :string, :banner => "The name of the component."
|
14
|
+
def component(name)
|
15
|
+
name = name.underscore
|
16
|
+
component_folder = Dir.pwd + "/app/#{name}"
|
17
|
+
@component_name = name
|
18
|
+
directory("component", component_folder, {component_name: name})
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
def self.source_root
|
23
|
+
File.expand_path(File.join(File.dirname(__FILE__), '../../../templates'))
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -6,9 +6,9 @@ class String
|
|
6
6
|
|
7
7
|
# Turns a string into the camel case version. If it is already camel case, it should
|
8
8
|
# return the same string.
|
9
|
-
def camelize
|
9
|
+
def camelize(first_letter = :upper)
|
10
10
|
new_str = self.gsub(/_[a-z]/) { |a| a[1].upcase }
|
11
|
-
new_str = new_str[0].capitalize + new_str[1..-1]
|
11
|
+
new_str = new_str[0].capitalize + new_str[1..-1] if first_letter == :upper
|
12
12
|
|
13
13
|
return new_str
|
14
14
|
end
|
data/lib/volt/models/url.rb
CHANGED
@@ -38,10 +38,9 @@ class URL
|
|
38
38
|
matcher = url.match(/^(#{protocol[0..-2]})[:]\/\/([^\/]+)(.*)$/)
|
39
39
|
self.scheme = matcher[1]
|
40
40
|
host, port = matcher[2].split(':')
|
41
|
-
port ||= 80
|
42
41
|
|
43
42
|
self.host = host
|
44
|
-
self.port = port
|
43
|
+
self.port = (port || 80).to_i
|
45
44
|
|
46
45
|
path = matcher[3]
|
47
46
|
path, fragment = path.split('#', 2)
|
@@ -61,7 +60,7 @@ class URL
|
|
61
60
|
|
62
61
|
# Full url rebuilds the url from it's constituent parts
|
63
62
|
def full_url
|
64
|
-
if port
|
63
|
+
if port && port != 80
|
65
64
|
host_with_port = "#{host}:#{port}"
|
66
65
|
else
|
67
66
|
host_with_port = host
|
@@ -0,0 +1,41 @@
|
|
1
|
+
CamelToUnderscore = {
|
2
|
+
"Product" => "product",
|
3
|
+
"SpecialGuest" => "special_guest",
|
4
|
+
"ApplicationController" => "application_controller",
|
5
|
+
"Area51Controller" => "area51_controller"
|
6
|
+
}
|
7
|
+
|
8
|
+
UnderscoreToLowerCamel = {
|
9
|
+
"product" => "product",
|
10
|
+
"special_guest" => "specialGuest",
|
11
|
+
"application_controller" => "applicationController",
|
12
|
+
"area51_controller" => "area51Controller"
|
13
|
+
}
|
14
|
+
|
15
|
+
SymbolToLowerCamel = {
|
16
|
+
:product => 'product',
|
17
|
+
:special_guest => 'specialGuest',
|
18
|
+
:application_controller => 'applicationController',
|
19
|
+
:area51_controller => 'area51Controller'
|
20
|
+
}
|
21
|
+
|
22
|
+
CamelToUnderscoreWithoutReverse = {
|
23
|
+
"HTMLTidy" => "html_tidy",
|
24
|
+
"HTMLTidyGenerator" => "html_tidy_generator",
|
25
|
+
"FreeBSD" => "free_bsd",
|
26
|
+
"HTML" => "html",
|
27
|
+
"ForceXMLController" => "force_xml_controller",
|
28
|
+
}
|
29
|
+
|
30
|
+
CamelWithModuleToUnderscoreWithSlash = {
|
31
|
+
"Admin::Product" => "admin/product",
|
32
|
+
"Users::Commission::Department" => "users/commission/department",
|
33
|
+
"UsersSection::CommissionDepartment" => "users_section/commission_department",
|
34
|
+
}
|
35
|
+
|
36
|
+
UnderscoresToDashes = {
|
37
|
+
"street" => "street",
|
38
|
+
"street_address" => "street-address",
|
39
|
+
"person_street_address" => "person-street-address"
|
40
|
+
}
|
41
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'extra_core/string_transformation_test_cases'
|
4
|
+
require 'volt/extra_core/string'
|
5
|
+
|
6
|
+
describe "#camelize" do
|
7
|
+
CamelToUnderscore.each do |camel, underscore|
|
8
|
+
it "camelizes" do
|
9
|
+
expect(underscore.camelize).to eq(camel)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
it "camelizes lower" do
|
14
|
+
expect('capital_city'.camelize(:lower)).to eq('capitalCity')
|
15
|
+
end
|
16
|
+
|
17
|
+
it "camelizes upper" do
|
18
|
+
expect('capital_city'.camelize(:upper)).to eq('CapitalCity')
|
19
|
+
end
|
20
|
+
|
21
|
+
it "camelizes upper default" do
|
22
|
+
expect('capital_city'.camelize).to eq('CapitalCity')
|
23
|
+
end
|
24
|
+
|
25
|
+
UnderscoreToLowerCamel.each do |underscored, lower_camel|
|
26
|
+
it "camelizes lower" do
|
27
|
+
expect(underscored.camelize(:lower)).to eq(lower_camel)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
UnderscoresToDashes.each do |underscored, dasherized|
|
32
|
+
it "dasherizes" do
|
33
|
+
expect(underscored.dasherize).to eq(dasherized)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
CamelToUnderscore.each do |camel, underscore|
|
38
|
+
it "underscores" do
|
39
|
+
expect(camel.underscore).to eq(underscore)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
it "underscores acronyms" do
|
44
|
+
expect("HTMLTidy".underscore).to eq("html_tidy")
|
45
|
+
expect("HTMLTidyGenerator".underscore).to eq("html_tidy_generator")
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
data/volt.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
|
-
spec.add_dependency "thor", "~> 0.
|
22
|
+
spec.add_dependency "thor", "~> 0.19.0"
|
23
23
|
spec.add_dependency "pry", "~> 0.9.12.0"
|
24
24
|
spec.add_dependency "rack", "~> 1.5.0"
|
25
25
|
spec.add_dependency "sprockets-sass", "~> 1.0.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: volt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Stout
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.19.0
|
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.19.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: pry
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -379,6 +379,7 @@ files:
|
|
379
379
|
- lib/volt/boot.rb
|
380
380
|
- lib/volt/cli.rb
|
381
381
|
- lib/volt/cli/asset_compile.rb
|
382
|
+
- lib/volt/cli/generate.rb
|
382
383
|
- lib/volt/cli/new_gem.rb
|
383
384
|
- lib/volt/config.rb
|
384
385
|
- lib/volt/console.rb
|
@@ -511,6 +512,8 @@ files:
|
|
511
512
|
- spec/apps/kitchen_sink/public/index.html
|
512
513
|
- spec/controllers/reactive_accessors_spec.rb
|
513
514
|
- spec/extra_core/inflector_spec.rb
|
515
|
+
- spec/extra_core/string_transformation_test_cases.rb
|
516
|
+
- spec/extra_core/string_transformations_spec.rb
|
514
517
|
- spec/integration/bindings_spec.rb
|
515
518
|
- spec/integration/templates_spec.rb
|
516
519
|
- spec/models/model_spec.rb
|
@@ -634,6 +637,8 @@ test_files:
|
|
634
637
|
- spec/apps/kitchen_sink/public/index.html
|
635
638
|
- spec/controllers/reactive_accessors_spec.rb
|
636
639
|
- spec/extra_core/inflector_spec.rb
|
640
|
+
- spec/extra_core/string_transformation_test_cases.rb
|
641
|
+
- spec/extra_core/string_transformations_spec.rb
|
637
642
|
- spec/integration/bindings_spec.rb
|
638
643
|
- spec/integration/templates_spec.rb
|
639
644
|
- spec/models/model_spec.rb
|