tao_on_rails 1.0.0.beta.1 → 2.0.0.pre.beta.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 +5 -5
- data/README.md +3 -3
- data/lib/tao_on_rails/action_view/helpers.rb +1 -1
- data/lib/tao_on_rails/base_component.rb +121 -0
- data/lib/tao_on_rails/version.rb +1 -1
- metadata +7 -20
- data/lib/generators/tao/component/USAGE +0 -10
- data/lib/generators/tao/component/component_generator.rb +0 -20
- data/lib/generators/tao/component/templates/component.rb.erb +0 -3
- data/lib/generators/tao/install/USAGE +0 -12
- data/lib/generators/tao/install/install_generator.rb +0 -37
- data/lib/generators/tao/install/templates/app/assets/javascripts/application.coffee +0 -12
- data/lib/generators/tao/install/templates/app/assets/stylesheets/_globals.scss +0 -1
- data/lib/generators/tao/install/templates/app/assets/stylesheets/application.scss +0 -2
- data/lib/generators/tao/install/templates/app/components/application_component.rb +0 -7
- data/lib/generators/tao/install/templates/app/views/layouts/application.html.erb +0 -20
- data/lib/tao_on_rails/components/base.rb +0 -136
- data/lib/tao_on_rails/components/page_component.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '0936b90ad1be05db3bc4a5c682d0145b1ccc4e5e43c3a2fb75e7837ee13cff0c'
|
4
|
+
data.tar.gz: 692a92c12c21146d1a25ee95b9b921b0964f4fb0f2d36540862395a74026706a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 112afbb785cb36242dba2ab4c2e9d085018824c891ef13984b9d6ac84ee84fa835d179824818901c6c26d31262d135e79ae38610a281624c28fa706c9eda355d
|
7
|
+
data.tar.gz: f3364403b5ca39a42ca533dfb2934a9fca7d1890fe16936f7712e2392e582ffe15c4c56a80ccd5d1b7daebef27a40d843a8ab5b0c8d378fe1b2be7c8841747bc
|
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# Tao on Rails [](https://travis-ci.org/mycolorway/tao_on_rails)
|
2
2
|
|
3
|
-
|
3
|
+
Tao on Rails provide both frontend and backend component solution for rails project.
|
4
4
|
|
5
|
-
##
|
5
|
+
## Frontend Components
|
6
6
|
|
7
|
-
|
7
|
+
## Backend Components
|
8
8
|
|
9
9
|
## Contributing
|
10
10
|
|
@@ -16,7 +16,7 @@ module TaoOnRails
|
|
16
16
|
load_tao_components
|
17
17
|
::ActiveSupport.run_load_hooks(:tao_components, self)
|
18
18
|
|
19
|
-
TaoOnRails::
|
19
|
+
TaoOnRails::BaseComponent.descendants.each do |klass|
|
20
20
|
module_eval %Q{
|
21
21
|
def #{klass.tag_name.underscore} *args, &block
|
22
22
|
#{klass.name}.new(self, *args).render(&block)
|
@@ -0,0 +1,121 @@
|
|
1
|
+
module TaoOnRails
|
2
|
+
class BaseComponent
|
3
|
+
|
4
|
+
attr_reader :options, :view
|
5
|
+
|
6
|
+
delegate :component_name, :tag_prefix, :template_paths, :template_name, to: :class
|
7
|
+
|
8
|
+
def initialize view, options = {}
|
9
|
+
@view = view
|
10
|
+
@options = merge_options default_options, options
|
11
|
+
template_paths.unshift(@options.delete(:template_path)) if @options.key?(:template_path)
|
12
|
+
@tag_name = @options.delete(:tag_name)
|
13
|
+
end
|
14
|
+
|
15
|
+
def render &block
|
16
|
+
if template = find_template
|
17
|
+
render_template template, &block
|
18
|
+
else
|
19
|
+
view.content_tag tag_name, nil, html_options, &block
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def render_template(template, &block)
|
24
|
+
if template.is_a?(String) || template.is_a?(Symbol)
|
25
|
+
template = find_template(template)
|
26
|
+
end
|
27
|
+
|
28
|
+
if template
|
29
|
+
if block_given?
|
30
|
+
block_content = view.capture(&block)
|
31
|
+
template.render(view, {component: self, block_given: true}) do |*name|
|
32
|
+
view._layout_for(*name) {block_content}
|
33
|
+
end
|
34
|
+
else
|
35
|
+
template.render(view, {component: self})
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def html_options
|
41
|
+
@html_options ||= transform_html_options options
|
42
|
+
end
|
43
|
+
|
44
|
+
def tag_name
|
45
|
+
@tag_name || self.class.tag_name
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.tag_name
|
49
|
+
@tag_name ||= "#{self.tag_prefix}-#{self.component_name.to_s.dasherize}"
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.component_name
|
53
|
+
@component_name ||= self.name.underscore.split('/').map(&:singularize).join('_')
|
54
|
+
.gsub(/(.+)_component$/, '\1')
|
55
|
+
.gsub(/^#{Regexp.quote(self.tag_prefix.to_s.underscore)}_(.+)/, '\1')
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.tag_prefix
|
59
|
+
:tao
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.template_paths
|
63
|
+
@template_paths ||= [
|
64
|
+
"components/#{self.name.deconstantize.underscore}",
|
65
|
+
"#{self.name.deconstantize.underscore}/components"
|
66
|
+
]
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.template_name
|
70
|
+
@template_name ||= self.name.demodulize.underscore.gsub(/(.+)_component$/, '\1')
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def default_options
|
76
|
+
{}
|
77
|
+
end
|
78
|
+
|
79
|
+
def merge_options options, other_options
|
80
|
+
options.merge(other_options) { |key, old_val, new_val|
|
81
|
+
if key.to_s == 'class'
|
82
|
+
old_val = old_val.split(' ') if old_val.is_a? String
|
83
|
+
new_val = new_val.split(' ') if new_val.is_a? String
|
84
|
+
Array(old_val) + Array(new_val)
|
85
|
+
elsif old_val.is_a?(Hash) && old_val.is_a?(Hash)
|
86
|
+
old_val.merge! new_val
|
87
|
+
else
|
88
|
+
new_val
|
89
|
+
end
|
90
|
+
}
|
91
|
+
end
|
92
|
+
|
93
|
+
def transform_html_options options, other_options = nil
|
94
|
+
if other_options
|
95
|
+
options = merge_options options, other_options
|
96
|
+
end
|
97
|
+
|
98
|
+
options.transform_keys { |key|
|
99
|
+
key.to_s.dasherize.to_sym
|
100
|
+
}.transform_values { |value|
|
101
|
+
case value
|
102
|
+
when true
|
103
|
+
''
|
104
|
+
when false
|
105
|
+
nil
|
106
|
+
else
|
107
|
+
value
|
108
|
+
end
|
109
|
+
}
|
110
|
+
end
|
111
|
+
|
112
|
+
def find_template(name = template_name)
|
113
|
+
view.lookup_context.find_all(name, template_paths, true, template_keys, formats: [:html]).first
|
114
|
+
end
|
115
|
+
|
116
|
+
def template_keys
|
117
|
+
@template_keys ||= [:component, :block_given]
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|
data/lib/tao_on_rails/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tao_on_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.pre.beta.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Siyuan Liu
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2019-01-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -59,9 +59,8 @@ dependencies:
|
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 1.2.1
|
62
|
-
description:
|
63
|
-
for
|
64
|
-
your page with the new Custom Elements v1 API.
|
62
|
+
description: Tao on Rails provide frontend component based on Custom Elements v1 and
|
63
|
+
backend component for rendering.
|
65
64
|
email:
|
66
65
|
- farthinker@mycolorway.com
|
67
66
|
- t@mycolorway.com
|
@@ -72,20 +71,9 @@ files:
|
|
72
71
|
- LICENSE
|
73
72
|
- README.md
|
74
73
|
- Rakefile
|
75
|
-
- lib/generators/tao/component/USAGE
|
76
|
-
- lib/generators/tao/component/component_generator.rb
|
77
|
-
- lib/generators/tao/component/templates/component.rb.erb
|
78
|
-
- lib/generators/tao/install/USAGE
|
79
|
-
- lib/generators/tao/install/install_generator.rb
|
80
|
-
- lib/generators/tao/install/templates/app/assets/javascripts/application.coffee
|
81
|
-
- lib/generators/tao/install/templates/app/assets/stylesheets/_globals.scss
|
82
|
-
- lib/generators/tao/install/templates/app/assets/stylesheets/application.scss
|
83
|
-
- lib/generators/tao/install/templates/app/components/application_component.rb
|
84
|
-
- lib/generators/tao/install/templates/app/views/layouts/application.html.erb
|
85
74
|
- lib/tao_on_rails.rb
|
86
75
|
- lib/tao_on_rails/action_view/helpers.rb
|
87
|
-
- lib/tao_on_rails/
|
88
|
-
- lib/tao_on_rails/components/page_component.rb
|
76
|
+
- lib/tao_on_rails/base_component.rb
|
89
77
|
- lib/tao_on_rails/engine.rb
|
90
78
|
- lib/tao_on_rails/version.rb
|
91
79
|
homepage: https://github.com/mycolorway/tao_on_rails
|
@@ -107,9 +95,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
95
|
- !ruby/object:Gem::Version
|
108
96
|
version: 1.3.1
|
109
97
|
requirements: []
|
110
|
-
|
111
|
-
rubygems_version: 2.6.14
|
98
|
+
rubygems_version: 3.0.1
|
112
99
|
signing_key:
|
113
100
|
specification_version: 4
|
114
|
-
summary: The
|
101
|
+
summary: The component solution for Rails project
|
115
102
|
test_files: []
|
@@ -1,10 +0,0 @@
|
|
1
|
-
Description:
|
2
|
-
Generate controller files
|
3
|
-
|
4
|
-
Example:
|
5
|
-
`rails generate tao:component posts/autosave`
|
6
|
-
|
7
|
-
Create file:
|
8
|
-
app/components/posts/autosave_component.rb
|
9
|
-
app/assets/javascripts/posts/components/autosave.coffee
|
10
|
-
app/assets/stylesheets/posts/components/autosave.scss
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'rails/generators'
|
2
|
-
|
3
|
-
module Tao
|
4
|
-
module Generators
|
5
|
-
|
6
|
-
class ComponentGenerator < Rails::Generators::NamedBase
|
7
|
-
source_root File.expand_path('../templates', __FILE__)
|
8
|
-
|
9
|
-
check_class_collision suffix: "Component"
|
10
|
-
|
11
|
-
attr_reader :component_name
|
12
|
-
|
13
|
-
def create_component_file
|
14
|
-
@component_name = class_name.underscore.split('/').map(&:singularize).join('_')
|
15
|
-
template "component.rb.erb", File.join('app/components', class_path, "#{file_name}_component.rb")
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
Description:
|
2
|
-
install files of tao.
|
3
|
-
|
4
|
-
Example:
|
5
|
-
`rails generate tao:install`
|
6
|
-
|
7
|
-
Create or update files:
|
8
|
-
app/assets/javascripts/application.coffee
|
9
|
-
app/assets/stylesheets/application.scss
|
10
|
-
app/assets/stylesheets/_globals.scss
|
11
|
-
app/views/layouts/application.html.erb
|
12
|
-
app/components/application_component.rb
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'rails/generators'
|
2
|
-
|
3
|
-
module Tao
|
4
|
-
module Generators
|
5
|
-
class InstallGenerator < Rails::Generators::Base
|
6
|
-
source_root File.expand_path('../templates', __FILE__)
|
7
|
-
|
8
|
-
def install_tao
|
9
|
-
assert_rails_version
|
10
|
-
|
11
|
-
gem 'tao_on_rails'
|
12
|
-
|
13
|
-
# remove_file 'app/assets/javascripts/cable.js'
|
14
|
-
# remove_file 'app/assets/javascripts/application.js'
|
15
|
-
# remove_file 'app/assets/stylesheets/application.css'
|
16
|
-
#
|
17
|
-
# template 'app/assets/javascripts/application.coffee'
|
18
|
-
# template 'app/assets/stylesheets/application.scss'
|
19
|
-
# template 'app/assets/stylesheets/_globals.scss'
|
20
|
-
#
|
21
|
-
# template 'app/views/layouts/application.html.erb', force: true
|
22
|
-
|
23
|
-
template 'app/components/application_component.rb'
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def assert_rails_version
|
29
|
-
requirement = Gem::Requirement.new('>= 5.0.0')
|
30
|
-
rails_version = Gem::Version.new(Rails::VERSION::STRING)
|
31
|
-
return if requirement.satisfied_by?(rails_version)
|
32
|
-
fail Rails::Generators::Error, 'Rails >= 5.0.0 is required'
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
// put global sass variables, mixins, functions here
|
@@ -1,20 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<meta charset="utf-8">
|
5
|
-
<title><%%= content_for(:title) || 'A Tao on Rails Project' %></title>
|
6
|
-
<%%= csrf_meta_tags %>
|
7
|
-
|
8
|
-
<%%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
|
9
|
-
<%%= content_for(:stylesheet) %>
|
10
|
-
|
11
|
-
<%%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
|
12
|
-
<%%= content_for(:javascript) %>
|
13
|
-
</head>
|
14
|
-
|
15
|
-
<body>
|
16
|
-
<%%= tao_page layout: 'default' do %>
|
17
|
-
<%%= yield %>
|
18
|
-
<%% end %>
|
19
|
-
</body>
|
20
|
-
</html>
|
@@ -1,136 +0,0 @@
|
|
1
|
-
module TaoOnRails
|
2
|
-
module Components
|
3
|
-
class Base
|
4
|
-
|
5
|
-
attr_reader :options, :view
|
6
|
-
|
7
|
-
delegate :component_name, :tag_prefix, :template_paths, :template_name, to: :class
|
8
|
-
|
9
|
-
def initialize view, options = {}
|
10
|
-
@view = view
|
11
|
-
@options = merge_options default_options, options
|
12
|
-
template_paths.unshift(@options.delete(:template_path)) if @options.key?(:template_path)
|
13
|
-
@tag_name = @options.delete(:tag_name)
|
14
|
-
end
|
15
|
-
|
16
|
-
def render &block
|
17
|
-
if template = find_template
|
18
|
-
render_template template, &block
|
19
|
-
else
|
20
|
-
view.content_tag tag_name, nil, html_options, &block
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def render_template(template, &block)
|
25
|
-
if template.is_a?(String) || template.is_a?(Symbol)
|
26
|
-
template = find_template(template)
|
27
|
-
end
|
28
|
-
|
29
|
-
if template
|
30
|
-
if block_given?
|
31
|
-
block_content = view.capture(&block)
|
32
|
-
template.render(view, {component: self, block_given: true}) do |*name|
|
33
|
-
view._layout_for(*name) {block_content}
|
34
|
-
end
|
35
|
-
else
|
36
|
-
template.render(view, {component: self})
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def translate key, options = {}
|
42
|
-
keys = [].tap do |result|
|
43
|
-
component_class = self.class
|
44
|
-
until component_class == TaoOnRails::Components::Base
|
45
|
-
scope = component_class.name.underscore.split('/').join('.').gsub(/(.+)_component$/, '\1')
|
46
|
-
result << "#{scope}.#{key}".to_sym
|
47
|
-
component_class = component_class.superclass
|
48
|
-
end
|
49
|
-
end
|
50
|
-
I18n.t(keys.shift, options.merge!(default: keys))
|
51
|
-
end
|
52
|
-
alias_method :t, :translate
|
53
|
-
|
54
|
-
def html_options
|
55
|
-
@html_options ||= transform_html_options options
|
56
|
-
end
|
57
|
-
|
58
|
-
def tag_name
|
59
|
-
@tag_name || self.class.tag_name
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.tag_name
|
63
|
-
@tag_name ||= "#{self.tag_prefix}-#{self.component_name.to_s.dasherize}"
|
64
|
-
end
|
65
|
-
|
66
|
-
def self.component_name
|
67
|
-
@component_name ||= self.name.underscore.split('/').map(&:singularize).join('_')
|
68
|
-
.gsub(/(.+)_component$/, '\1')
|
69
|
-
.gsub(/^#{Regexp.quote(self.tag_prefix.to_s.underscore)}_(.+)/, '\1')
|
70
|
-
end
|
71
|
-
|
72
|
-
def self.tag_prefix
|
73
|
-
:tao
|
74
|
-
end
|
75
|
-
|
76
|
-
def self.template_paths
|
77
|
-
@template_paths ||= [
|
78
|
-
"components/#{self.name.deconstantize.underscore}",
|
79
|
-
"#{self.name.deconstantize.underscore}/components"
|
80
|
-
]
|
81
|
-
end
|
82
|
-
|
83
|
-
def self.template_name
|
84
|
-
@template_name ||= self.name.demodulize.underscore.gsub(/(.+)_component$/, '\1')
|
85
|
-
end
|
86
|
-
|
87
|
-
private
|
88
|
-
|
89
|
-
def default_options
|
90
|
-
{}
|
91
|
-
end
|
92
|
-
|
93
|
-
def merge_options options, other_options
|
94
|
-
options.merge(other_options) { |key, old_val, new_val|
|
95
|
-
if key.to_s == 'class'
|
96
|
-
old_val = old_val.split(' ') if old_val.is_a? String
|
97
|
-
new_val = new_val.split(' ') if new_val.is_a? String
|
98
|
-
Array(old_val) + Array(new_val)
|
99
|
-
elsif old_val.is_a?(Hash) && old_val.is_a?(Hash)
|
100
|
-
old_val.merge! new_val
|
101
|
-
else
|
102
|
-
new_val
|
103
|
-
end
|
104
|
-
}
|
105
|
-
end
|
106
|
-
|
107
|
-
def transform_html_options options, other_options = nil
|
108
|
-
if other_options
|
109
|
-
options = merge_options options, other_options
|
110
|
-
end
|
111
|
-
|
112
|
-
options.transform_keys { |key|
|
113
|
-
key.to_s.dasherize.to_sym
|
114
|
-
}.transform_values { |value|
|
115
|
-
case value
|
116
|
-
when true
|
117
|
-
''
|
118
|
-
when false
|
119
|
-
nil
|
120
|
-
else
|
121
|
-
value
|
122
|
-
end
|
123
|
-
}
|
124
|
-
end
|
125
|
-
|
126
|
-
def find_template(name = template_name)
|
127
|
-
view.lookup_context.find_all(name, template_paths, true, template_keys, formats: [:html]).first
|
128
|
-
end
|
129
|
-
|
130
|
-
def template_keys
|
131
|
-
@template_keys ||= [:component, :block_given]
|
132
|
-
end
|
133
|
-
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module TaoOnRails
|
2
|
-
module Components
|
3
|
-
class PageComponent < Base
|
4
|
-
attr_reader :page_id
|
5
|
-
|
6
|
-
def initialize view, options = {}
|
7
|
-
@page_id = view.page_id
|
8
|
-
super
|
9
|
-
end
|
10
|
-
|
11
|
-
def render &block
|
12
|
-
view.content_tag "#{view.page_id}-page", options, &block
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.component_name
|
16
|
-
:page
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def default_options
|
22
|
-
{class: ['tao-page', "#{@page_id}-page"]}
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|