opencomponents-rails 0.1.0
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 +7 -0
- data/LICENSE +22 -0
- data/README.md +74 -0
- data/lib/opencomponents-rails.rb +1 -0
- data/lib/opencomponents/rails.rb +6 -0
- data/lib/opencomponents/rails/engine.rb +4 -0
- data/lib/opencomponents/rails/railtie.rb +20 -0
- data/lib/opencomponents/rails/renderer.rb +66 -0
- data/lib/opencomponents/rails/version.rb +5 -0
- data/opencomponents-rails.gemspec +24 -0
- metadata +101 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6d47325974d4ae94b62bf8fcb3ae04451fc25b51
|
4
|
+
data.tar.gz: 0de0e3246eb1f39ec2e895ddbf971c7aeb94fdb9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1f7f02a3300533e112efdc920cede57711ae24395e707f9403846dccd4649657d68ca6ff584bdc988e6f99b947e3ecbfb7115a1e4de8a25cf3bc76f70d006ab9
|
7
|
+
data.tar.gz: ca4d058d2b3cb2e838d2297546c3386ce4b5221049febcaa019d22f65c37fea57fa062ec61cf3bf33c5e06768f1674a2256229fb1d468eb6dae6b7d50ea72aa3
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 OpenTable
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
22
|
+
|
data/README.md
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# OpenComponents::Rails
|
2
|
+
[][1]
|
3
|
+
|
4
|
+
[1]:https://travis-ci.org/opentable/opencomponents-rails
|
5
|
+
|
6
|
+
OpenComponents for Rails. This gem provides view helper methods for component
|
7
|
+
rendering on both server- and client-side.
|
8
|
+
|
9
|
+
## Getting Started
|
10
|
+
Add the gem to your Gemfile and run `bundle install`:
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
gem 'opencomponents-rails'
|
14
|
+
```
|
15
|
+
|
16
|
+
### Configuration
|
17
|
+
All configuration options are set through Rails environment configuration files.
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
# production.rb
|
21
|
+
|
22
|
+
# Sets the registry URL to fetch components from. Defaults to http://localhost:3030.
|
23
|
+
config.opencomponents.registry = 'http://my.awesome.registry'
|
24
|
+
|
25
|
+
# Determines whether rendering should be handed off to the browser if server-side
|
26
|
+
# rendering fails. Defaults to true.
|
27
|
+
config.opencomponents.enable_client_failover = true
|
28
|
+
|
29
|
+
# Sets the timeout length (in seconds) for registry requests. Defaults to 5.
|
30
|
+
config.opencomponents.request_timeout = 10
|
31
|
+
```
|
32
|
+
|
33
|
+
## Rendering
|
34
|
+
`OpenComponents::Rails` supports both server- and client-side rendering of components.
|
35
|
+
By default, the gem will fall back to client-side rendering if a server-side registry
|
36
|
+
request times out. If client-side failover if disabled, an error will be raised instead.
|
37
|
+
This is configurable using the `enable_client_failover` option.
|
38
|
+
|
39
|
+
### Client-Side Rendering
|
40
|
+
The OpenComponents client-side javascript library is bundled with this gem for inclusion
|
41
|
+
in the asset compilation process. To enable client-side rendering through the asset
|
42
|
+
pipeline, add the library to your javascript manifest:
|
43
|
+
|
44
|
+
```javascript
|
45
|
+
//= require opencomponents
|
46
|
+
```
|
47
|
+
|
48
|
+
Once that's done, you can use the `oc_component_tag` method in your views. You can either
|
49
|
+
pass the method a fully formed `href` attribute or use the same options as `OpenComponents`
|
50
|
+
[Renderer][2].
|
51
|
+
```erb
|
52
|
+
<%= oc_component_tag('my-sweet-component', href: 'http://localhost:3030/my-sweet-component/1.0.1?name=Zan') %>
|
53
|
+
|
54
|
+
<%= oc_component_tag('my-sweet-component', params: {name: 'Zan'}, version: '1.0.1') %>
|
55
|
+
```
|
56
|
+
|
57
|
+
Components using this tag will be automatically rendered on DOM load.
|
58
|
+
|
59
|
+
### Server-Side Rendering
|
60
|
+
In your view, simply call `render_component`:
|
61
|
+
|
62
|
+
```erb
|
63
|
+
<%= render_component('my-sweet-component', params: {name: 'Zan'}, version: '1.0.1') %>
|
64
|
+
```
|
65
|
+
|
66
|
+
The method accepts the same options as the `OpenComponents` [Renderer][2].
|
67
|
+
|
68
|
+
[2]:http://www.rubydoc.info/gems/opencomponents/OpenComponents/Renderer
|
69
|
+
|
70
|
+
## Contributing
|
71
|
+
Would be pretty cool of you. Open an Issue or PR if you find bugs or have ideas for improvements.
|
72
|
+
|
73
|
+
## License
|
74
|
+
Copyright 2015 OpenTable. See LICENSE for details.
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'opencomponents/rails'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module OpenComponents::Rails
|
2
|
+
class Railtie < ::Rails::Railtie
|
3
|
+
config.opencomponents = ActiveSupport::OrderedOptions.new
|
4
|
+
|
5
|
+
config.opencomponents.registry = OpenComponents::DEFAULT_REGISTRY
|
6
|
+
config.opencomponents.enable_client_failover = true
|
7
|
+
config.opencomponents.request_timeout = OpenComponents::DEFAULT_TIMEOUT
|
8
|
+
|
9
|
+
initializer 'opencomponents.configure' do |app|
|
10
|
+
OpenComponents.configure do |config|
|
11
|
+
config.registry = app.config.opencomponents.registry
|
12
|
+
config.timeout = app.config.opencomponents.request_timeout
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
initializer 'opencomponents.view_helpers' do
|
17
|
+
ActionView::Base.send :include, OpenComponents::Rails::Renderer
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module OpenComponents::Rails
|
2
|
+
module Renderer
|
3
|
+
include ::OpenComponents::Renderer
|
4
|
+
|
5
|
+
include ::ActionView::Helpers::TagHelper
|
6
|
+
|
7
|
+
# Returns a rendered component.
|
8
|
+
#
|
9
|
+
# render_component('my-component')
|
10
|
+
# # => <oc-component href="http://localhost:3030/my-component">...</oc-component>
|
11
|
+
#
|
12
|
+
# Also accepts options for "params", "version", and "headers".
|
13
|
+
#
|
14
|
+
# render_component('my-component',
|
15
|
+
# params: {name: 'Zan'},
|
16
|
+
# version: '1.0.2',
|
17
|
+
# headers: {accept_language: 'emoji'}
|
18
|
+
# )
|
19
|
+
# # => <oc-component href="http://localhost:3030/my-component/1.0.2?name=Zan">...</oc-component>
|
20
|
+
#
|
21
|
+
# Raises an error if the registry request times out and client failover is
|
22
|
+
# disabled, otherwise will return an unrendered <oc-component> tag for
|
23
|
+
# client-side rendered.
|
24
|
+
def render_component(component, opts = {})
|
25
|
+
super(component, opts).html_safe
|
26
|
+
rescue OpenComponents::RegistryTimeout
|
27
|
+
config = ::Rails.application.config.opencomponents
|
28
|
+
|
29
|
+
raise unless config.enable_client_failover
|
30
|
+
|
31
|
+
oc_component_tag(component, opts)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns an unrendered oc-component tag for client-side rendering.
|
35
|
+
#
|
36
|
+
# oc_component_tag('my-component')
|
37
|
+
# # => <oc-component href="localhost:3030/my-component" />
|
38
|
+
#
|
39
|
+
# Also accepts options for "href", "params", and "version". "params" and
|
40
|
+
# "version" are ignored if "href" is passed to the method. If no href is
|
41
|
+
# passed, the method attempts to build a valid URL using the configured
|
42
|
+
# OC registry, component name, and params and version if they're available.
|
43
|
+
#
|
44
|
+
# oc_component_tag('my-component', params: {name: 'Zan'}, version: '1.0.2')
|
45
|
+
# # => <oc-component href="http://localhost:3030/my-component/1.0.2?name=Zan">
|
46
|
+
#
|
47
|
+
# oc_component_tag('my-component', href: 'http://some.registry/my-component')
|
48
|
+
# # => <oc-component href="http://some.registry/my-component" />
|
49
|
+
def oc_component_tag(component, opts = {})
|
50
|
+
opts = opts.with_indifferent_access
|
51
|
+
options = opts.reject { |k, _| %w(params version).include? k }
|
52
|
+
|
53
|
+
unless options[:href]
|
54
|
+
registry = ::Rails.application.config.opencomponents.registry
|
55
|
+
|
56
|
+
options[:href] = File.join(
|
57
|
+
registry, component, opts[:version].to_s
|
58
|
+
)
|
59
|
+
|
60
|
+
options[:href] << "?#{opts[:params].to_param}" if opts[:params]
|
61
|
+
end
|
62
|
+
|
63
|
+
tag('oc-component', options)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
4
|
+
require 'opencomponents/rails/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.required_ruby_version = '>= 1.9.3'
|
8
|
+
|
9
|
+
spec.add_dependency 'opencomponents', '~> 0.4.0'
|
10
|
+
spec.add_dependency 'railties', '~> 4.1', '< 5.0.0.alpha'
|
11
|
+
spec.add_development_dependency 'bundler', '~> 1.10'
|
12
|
+
|
13
|
+
spec.authors = ['Todd Bealmear']
|
14
|
+
spec.description = %q{Renders OpenComponents in your Rails views.}
|
15
|
+
spec.email = ['tbealmear@opentable.com']
|
16
|
+
spec.files = %w(LICENSE README.md opencomponents-rails.gemspec)
|
17
|
+
spec.files += Dir.glob('lib/**/*.rb')
|
18
|
+
spec.homepage = 'https://github.com/opentable/opencomponents-rails'
|
19
|
+
spec.licenses = ['MIT']
|
20
|
+
spec.name = 'opencomponents-rails'
|
21
|
+
spec.require_paths = ['lib']
|
22
|
+
spec.summary = spec.description
|
23
|
+
spec.version = OpenComponents::Rails::VERSION
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: opencomponents-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Todd Bealmear
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: opencomponents
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.4.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.4.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: railties
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.1'
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 5.0.0.alpha
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '4.1'
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 5.0.0.alpha
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: bundler
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.10'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '1.10'
|
61
|
+
description: Renders OpenComponents in your Rails views.
|
62
|
+
email:
|
63
|
+
- tbealmear@opentable.com
|
64
|
+
executables: []
|
65
|
+
extensions: []
|
66
|
+
extra_rdoc_files: []
|
67
|
+
files:
|
68
|
+
- LICENSE
|
69
|
+
- README.md
|
70
|
+
- lib/opencomponents-rails.rb
|
71
|
+
- lib/opencomponents/rails.rb
|
72
|
+
- lib/opencomponents/rails/engine.rb
|
73
|
+
- lib/opencomponents/rails/railtie.rb
|
74
|
+
- lib/opencomponents/rails/renderer.rb
|
75
|
+
- lib/opencomponents/rails/version.rb
|
76
|
+
- opencomponents-rails.gemspec
|
77
|
+
homepage: https://github.com/opentable/opencomponents-rails
|
78
|
+
licenses:
|
79
|
+
- MIT
|
80
|
+
metadata: {}
|
81
|
+
post_install_message:
|
82
|
+
rdoc_options: []
|
83
|
+
require_paths:
|
84
|
+
- lib
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.9.3
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
requirements: []
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 2.2.2
|
98
|
+
signing_key:
|
99
|
+
specification_version: 4
|
100
|
+
summary: Renders OpenComponents in your Rails views.
|
101
|
+
test_files: []
|