view_component_storybook 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -12
- data/lib/view_component/storybook.rb +1 -1
- data/lib/view_component/storybook/{knobs.rb → controls.rb} +2 -2
- data/lib/view_component/storybook/{knobs → controls}/array_config.rb +10 -8
- data/lib/view_component/storybook/{knobs/knob_config.rb → controls/control_config.rb} +19 -8
- data/lib/view_component/storybook/{knobs → controls}/date_config.rb +13 -13
- data/lib/view_component/storybook/{knobs → controls}/number_config.rb +12 -10
- data/lib/view_component/storybook/{knobs → controls}/object_config.rb +2 -2
- data/lib/view_component/storybook/{knobs → controls}/options_config.rb +7 -5
- data/lib/view_component/storybook/{knobs → controls}/simple_config.rb +4 -4
- data/lib/view_component/storybook/dsl.rb +1 -1
- data/lib/view_component/storybook/dsl/controls_dsl.rb +81 -0
- data/lib/view_component/storybook/dsl/story_dsl.rb +4 -4
- data/lib/view_component/storybook/stories.rb +0 -3
- data/lib/view_component/storybook/story_config.rb +9 -7
- data/lib/view_component/storybook/version.rb +1 -1
- metadata +10 -10
- data/lib/view_component/storybook/dsl/knobs_dsl.rb +0 -81
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 69b5a85793ed8d4ecfe45be21c90a95894f001403ea9a6c086c9822e5b4fca4d
|
4
|
+
data.tar.gz: 15b8f5b6430c46b5a3cd453602c4705dea94784b574f6d3a1a9b1ab39c40d1bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '091149f57b05dc6bf82b1dac987ab6dbaaa6655e8c0833517eb575d8ce8abb05e75b8919a63799ad4efaa5da1722fbf5bee7f34c4680a12f969c6996532e53f7'
|
7
|
+
data.tar.gz: bf0f10bc68bc35197ca9485efbc3fe18bcad98b110df969f3219daeaeb4797f1c1e7c6eb4ce3aeb737246571227c91c466b4d7c63dd4ff141c0a3962b47caf29
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@ The ViewComponent::Storybook gem provides Ruby api for writing stories describin
|
|
4
4
|
|
5
5
|
## Features
|
6
6
|
* A Ruby DSL for writing Stories describing View Components
|
7
|
-
* A Rails controller backend for Storybook Server compatible with
|
7
|
+
* A Rails controller backend for Storybook Server compatible with Strobook Controls Addon parameters
|
8
8
|
* Coming Soon: Rake tasks to watch View Components and Stories and trigger Storybook hot reloading
|
9
9
|
|
10
10
|
## Installation
|
@@ -18,9 +18,9 @@ The ViewComponent::Storybook gem provides Ruby api for writing stories describin
|
|
18
18
|
|
19
19
|
### Storybook Installation
|
20
20
|
|
21
|
-
1. Add Storybook server as a dev dependedncy. The Storybook
|
21
|
+
1. Add Storybook server as a dev dependedncy. The Storybook Controls addon isn't needed but is strongly recommended
|
22
22
|
```sh
|
23
|
-
yarn add @storybook/server @storybook/addon-
|
23
|
+
yarn add @storybook/server @storybook/addon-controls --dev
|
24
24
|
```
|
25
25
|
2. Add an NPM script to your package.json in order to start the storybook later in this guide
|
26
26
|
```json
|
@@ -30,28 +30,27 @@ The ViewComponent::Storybook gem provides Ruby api for writing stories describin
|
|
30
30
|
}
|
31
31
|
}
|
32
32
|
```
|
33
|
-
3. Create the .storybook/main.js file to configure Storybook to find the json stories the gem creates. Also configure the
|
33
|
+
3. Create the .storybook/main.js file to configure Storybook to find the json stories the gem creates. Also configure the Controls addon:
|
34
34
|
```javascript
|
35
35
|
module.exports = {
|
36
36
|
stories: ['../test/components/**/*.stories.json'],
|
37
37
|
addons: [
|
38
|
-
'@storybook/addon-
|
38
|
+
'@storybook/addon-controls',
|
39
39
|
],
|
40
40
|
};
|
41
41
|
```
|
42
42
|
4. Create the .storybook/preview.js file to configure Storybook with the Rails application url to call for the html content of the stories
|
43
43
|
```javascript
|
44
|
-
import { addParameters } from '@storybook/server';
|
45
44
|
|
46
|
-
|
45
|
+
export const parameters = {
|
47
46
|
server: {
|
48
47
|
url: `http://localhost:3000/rails/stories`,
|
49
48
|
},
|
50
|
-
}
|
49
|
+
};
|
51
50
|
```
|
52
51
|
|
53
52
|
|
54
|
-
Note: `@storybook/server` will be part of the upcoming Storybook 6.0 release. Until that is released you'll need to use an [
|
53
|
+
Note: `@storybook/server` will be part of the upcoming Storybook 6.0 release. Until that is released you'll need to use an [rc release](https://github.com/storybookjs/storybook/releases/tag/v6.0.0-rc.14)
|
55
54
|
|
56
55
|
## Usage
|
57
56
|
|
@@ -74,13 +73,13 @@ We can write a stories desecibing the `ButtonComponent`
|
|
74
73
|
```ruby
|
75
74
|
class ButtonComponentStories < ViewComponent::Storybook::Stories
|
76
75
|
story(:with_short_text) do
|
77
|
-
|
76
|
+
controls do
|
78
77
|
text(:button_text, 'OK')
|
79
78
|
end
|
80
79
|
end
|
81
80
|
|
82
81
|
story(:with_long_text) do
|
83
|
-
|
82
|
+
controls do
|
84
83
|
text(:button_text, 'Push Me Please!')
|
85
84
|
end
|
86
85
|
end
|
@@ -121,7 +120,7 @@ Coming Soon
|
|
121
120
|
|
122
121
|
#### Parameters
|
123
122
|
#### Layout
|
124
|
-
####
|
123
|
+
#### Controls
|
125
124
|
|
126
125
|
|
127
126
|
## Development
|
@@ -4,10 +4,10 @@ require "active_support/dependencies/autoload"
|
|
4
4
|
|
5
5
|
module ViewComponent
|
6
6
|
module Storybook
|
7
|
-
module
|
7
|
+
module Controls
|
8
8
|
extend ActiveSupport::Autoload
|
9
9
|
|
10
|
-
autoload :
|
10
|
+
autoload :ControlConfig
|
11
11
|
autoload :SimpleConfig
|
12
12
|
autoload :NumberConfig
|
13
13
|
autoload :OptionsConfig
|
@@ -2,21 +2,17 @@
|
|
2
2
|
|
3
3
|
module ViewComponent
|
4
4
|
module Storybook
|
5
|
-
module
|
6
|
-
class ArrayConfig <
|
5
|
+
module Controls
|
6
|
+
class ArrayConfig < ControlConfig
|
7
7
|
attr_reader :separator
|
8
8
|
|
9
9
|
validates :value, :separator, presence: true
|
10
10
|
|
11
|
-
def initialize(component, param, value, separator = ",", name: nil
|
12
|
-
super(component, param, value, name: name
|
11
|
+
def initialize(component, param, value, separator = ",", name: nil)
|
12
|
+
super(component, param, value, name: name)
|
13
13
|
@separator = separator
|
14
14
|
end
|
15
15
|
|
16
|
-
def to_csf_params
|
17
|
-
super.merge(value: value, separator: separator)
|
18
|
-
end
|
19
|
-
|
20
16
|
def type
|
21
17
|
:array
|
22
18
|
end
|
@@ -28,6 +24,12 @@ module ViewComponent
|
|
28
24
|
super(param)
|
29
25
|
end
|
30
26
|
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def csf_control_params
|
31
|
+
super.merge(separator: separator)
|
32
|
+
end
|
31
33
|
end
|
32
34
|
end
|
33
35
|
end
|
@@ -2,28 +2,28 @@
|
|
2
2
|
|
3
3
|
module ViewComponent
|
4
4
|
module Storybook
|
5
|
-
module
|
6
|
-
class
|
5
|
+
module Controls
|
6
|
+
class ControlConfig
|
7
7
|
include ActiveModel::Validations
|
8
8
|
|
9
|
-
attr_reader :component, :param, :value, :name
|
9
|
+
attr_reader :component, :param, :value, :name
|
10
10
|
|
11
11
|
validates :component, :param, presence: true
|
12
12
|
validates :param, inclusion: { in: ->(knob_config) { knob_config.component_params } }, unless: -> { component.nil? }
|
13
13
|
|
14
|
-
def initialize(component, param, value, name: nil
|
14
|
+
def initialize(component, param, value, name: nil)
|
15
15
|
@component = component
|
16
16
|
@param = param
|
17
17
|
@value = value
|
18
18
|
@name = name || param.to_s.humanize.titlecase
|
19
|
-
@group_id = group_id
|
20
19
|
end
|
21
20
|
|
22
21
|
def to_csf_params
|
23
22
|
validate!
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
{
|
24
|
+
args: { param => csf_value },
|
25
|
+
argTypes: { param => { control: csf_control_params, name: name } }
|
26
|
+
}
|
27
27
|
end
|
28
28
|
|
29
29
|
def value_from_param(param)
|
@@ -33,6 +33,17 @@ module ViewComponent
|
|
33
33
|
def component_params
|
34
34
|
@component_params ||= component && component.instance_method(:initialize).parameters.map(&:last)
|
35
35
|
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
# provide extension points for subclasses to vary the value
|
40
|
+
def csf_value
|
41
|
+
value
|
42
|
+
end
|
43
|
+
|
44
|
+
def csf_control_params
|
45
|
+
{ type: type }
|
46
|
+
end
|
36
47
|
end
|
37
48
|
end
|
38
49
|
end
|
@@ -2,21 +2,12 @@
|
|
2
2
|
|
3
3
|
module ViewComponent
|
4
4
|
module Storybook
|
5
|
-
module
|
6
|
-
class DateConfig <
|
5
|
+
module Controls
|
6
|
+
class DateConfig < ControlConfig
|
7
7
|
validates :value, presence: true
|
8
8
|
|
9
|
-
def initialize(component, param, value, name: nil
|
10
|
-
super(component, param, value, name: name
|
11
|
-
end
|
12
|
-
|
13
|
-
def to_csf_params
|
14
|
-
csf_params = super
|
15
|
-
params_value = value
|
16
|
-
params_value = params_value.in_time_zone if params_value.is_a?(Date)
|
17
|
-
params_value = params_value.iso8601 if params_value.is_a?(Time)
|
18
|
-
csf_params[:value] = params_value
|
19
|
-
csf_params
|
9
|
+
def initialize(component, param, value, name: nil)
|
10
|
+
super(component, param, value, name: name)
|
20
11
|
end
|
21
12
|
|
22
13
|
def type
|
@@ -30,6 +21,15 @@ module ViewComponent
|
|
30
21
|
super(param)
|
31
22
|
end
|
32
23
|
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def csf_value
|
28
|
+
params_value = value
|
29
|
+
params_value = params_value.in_time_zone if params_value.is_a?(Date)
|
30
|
+
params_value = params_value.iso8601 if params_value.is_a?(Time)
|
31
|
+
params_value
|
32
|
+
end
|
33
33
|
end
|
34
34
|
end
|
35
35
|
end
|
@@ -2,14 +2,14 @@
|
|
2
2
|
|
3
3
|
module ViewComponent
|
4
4
|
module Storybook
|
5
|
-
module
|
6
|
-
class NumberConfig <
|
5
|
+
module Controls
|
6
|
+
class NumberConfig < ControlConfig
|
7
7
|
attr_reader :options
|
8
8
|
|
9
9
|
validates :value, presence: true
|
10
10
|
|
11
|
-
def initialize(component, param, value, options = {}, name: nil
|
12
|
-
super(component, param, value, name: name
|
11
|
+
def initialize(component, param, value, options = {}, name: nil)
|
12
|
+
super(component, param, value, name: name)
|
13
13
|
@options = options
|
14
14
|
end
|
15
15
|
|
@@ -17,12 +17,6 @@ module ViewComponent
|
|
17
17
|
:number
|
18
18
|
end
|
19
19
|
|
20
|
-
def to_csf_params
|
21
|
-
params = super
|
22
|
-
params[:options] = options unless options.empty?
|
23
|
-
params
|
24
|
-
end
|
25
|
-
|
26
20
|
def value_from_param(param)
|
27
21
|
if param.is_a?(String) && param.present?
|
28
22
|
(param.to_f % 1) > 0 ? param.to_f : param.to_i
|
@@ -30,6 +24,14 @@ module ViewComponent
|
|
30
24
|
super(param)
|
31
25
|
end
|
32
26
|
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def csf_control_params
|
31
|
+
params = super
|
32
|
+
params[:options] = options unless options.empty?
|
33
|
+
params
|
34
|
+
end
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
module ViewComponent
|
4
4
|
module Storybook
|
5
|
-
module
|
6
|
-
class OptionsConfig <
|
5
|
+
module Controls
|
6
|
+
class OptionsConfig < ControlConfig
|
7
7
|
TYPES = %i[select radios].freeze
|
8
8
|
|
9
9
|
attr_reader :type, :options
|
@@ -12,13 +12,15 @@ module ViewComponent
|
|
12
12
|
validates :type, inclusion: { in: TYPES }, unless: -> { type.nil? }
|
13
13
|
validates :value, inclusion: { in: ->(config) { config.options.values } }, unless: -> { options.nil? || value.nil? }
|
14
14
|
|
15
|
-
def initialize(type, component, param, options, default_value, name: nil
|
16
|
-
super(component, param, default_value, name: name
|
15
|
+
def initialize(type, component, param, options, default_value, name: nil)
|
16
|
+
super(component, param, default_value, name: name)
|
17
17
|
@type = type
|
18
18
|
@options = options
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
private
|
22
|
+
|
23
|
+
def csf_control_params
|
22
24
|
super.merge(options: options)
|
23
25
|
end
|
24
26
|
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
module ViewComponent
|
4
4
|
module Storybook
|
5
|
-
module
|
6
|
-
class SimpleConfig <
|
5
|
+
module Controls
|
6
|
+
class SimpleConfig < ControlConfig
|
7
7
|
TYPES = %i[text boolean color].freeze
|
8
8
|
BOOLEAN_VALUES = [true, false].freeze
|
9
9
|
|
@@ -15,8 +15,8 @@ module ViewComponent
|
|
15
15
|
validates :type, presence: true
|
16
16
|
validates :type, inclusion: { in: TYPES }, unless: -> { type.nil? }
|
17
17
|
|
18
|
-
def initialize(type, component, param, value, name: nil
|
19
|
-
super(component, param, value, name: name
|
18
|
+
def initialize(type, component, param, value, name: nil)
|
19
|
+
super(component, param, value, name: name)
|
20
20
|
@type = type
|
21
21
|
end
|
22
22
|
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ViewComponent
|
4
|
+
module Storybook
|
5
|
+
module Dsl
|
6
|
+
class ControlsDsl
|
7
|
+
attr_reader :component, :controls
|
8
|
+
|
9
|
+
def initialize(component)
|
10
|
+
@component = component
|
11
|
+
@controls = []
|
12
|
+
end
|
13
|
+
|
14
|
+
def text(param, value, name: nil)
|
15
|
+
controls << Controls::SimpleConfig.new(:text, component, param, value, name: name)
|
16
|
+
end
|
17
|
+
|
18
|
+
def boolean(param, value, name: nil)
|
19
|
+
controls << Controls::SimpleConfig.new(:boolean, component, param, value, name: name)
|
20
|
+
end
|
21
|
+
|
22
|
+
def number(param, value, options = {}, name: nil)
|
23
|
+
controls << Controls::NumberConfig.new(component, param, value, options, name: name)
|
24
|
+
end
|
25
|
+
|
26
|
+
def color(param, value, name: nil)
|
27
|
+
controls << Controls::SimpleConfig.new(:color, component, param, value, name: name)
|
28
|
+
end
|
29
|
+
|
30
|
+
def object(param, value, name: nil)
|
31
|
+
controls << Controls::ObjectConfig.new(component, param, value, name: name)
|
32
|
+
end
|
33
|
+
|
34
|
+
def select(param, options, value, name: nil)
|
35
|
+
controls << Controls::OptionsConfig.new(:select, component, param, options, value, name: name)
|
36
|
+
end
|
37
|
+
|
38
|
+
def radios(param, options, value, name: nil)
|
39
|
+
controls << Controls::OptionsConfig.new(:radios, component, param, options, value, name: name)
|
40
|
+
end
|
41
|
+
|
42
|
+
def array(param, value, separator = ",", name: nil)
|
43
|
+
controls << Controls::ArrayConfig.new(component, param, value, separator, name: name)
|
44
|
+
end
|
45
|
+
|
46
|
+
def date(param, value, name: nil)
|
47
|
+
controls << Controls::DateConfig.new(component, param, value, name: name)
|
48
|
+
end
|
49
|
+
|
50
|
+
def respond_to_missing?(_method)
|
51
|
+
true
|
52
|
+
end
|
53
|
+
|
54
|
+
def method_missing(method, *args)
|
55
|
+
value = args.first
|
56
|
+
knob_method = case value
|
57
|
+
when Date
|
58
|
+
:date
|
59
|
+
when Array
|
60
|
+
:array
|
61
|
+
when Hash
|
62
|
+
:object
|
63
|
+
when Numeric
|
64
|
+
:number
|
65
|
+
when TrueClass, FalseClass
|
66
|
+
:boolean
|
67
|
+
when String
|
68
|
+
:text
|
69
|
+
end
|
70
|
+
if knob_method
|
71
|
+
send(knob_method, method, *args)
|
72
|
+
else
|
73
|
+
super
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
Controls = ViewComponent::Storybook::Controls
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -12,10 +12,10 @@ module ViewComponent
|
|
12
12
|
@story_config.parameters = params
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
18
|
-
@story_config.
|
15
|
+
def controls(&block)
|
16
|
+
controls_dsl = ControlsDsl.new(story_config.component)
|
17
|
+
controls_dsl.instance_eval(&block)
|
18
|
+
@story_config.controls = controls_dsl.controls
|
19
19
|
end
|
20
20
|
|
21
21
|
def layout(layout)
|
@@ -26,10 +26,7 @@ module ViewComponent
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def to_csf_params
|
29
|
-
stories_csf = story_configs.map(&:to_csf_params)
|
30
|
-
|
31
29
|
csf_params = { title: title }
|
32
|
-
csf_params[:addons] = ["knobs"] if stories_csf.any? { |csf| csf.key?(:knobs) }
|
33
30
|
csf_params[:parameters] = parameters if parameters.present?
|
34
31
|
csf_params[:stories] = story_configs.map(&:to_csf_params)
|
35
32
|
csf_params
|
@@ -6,28 +6,30 @@ module ViewComponent
|
|
6
6
|
include ActiveModel::Validations
|
7
7
|
|
8
8
|
attr_reader :id, :name, :component
|
9
|
-
attr_accessor :
|
9
|
+
attr_accessor :controls, :parameters, :layout, :content_block
|
10
10
|
|
11
11
|
def initialize(id, name, component, layout)
|
12
12
|
@id = id
|
13
13
|
@name = name
|
14
14
|
@component = component
|
15
15
|
@layout = layout
|
16
|
-
@
|
16
|
+
@controls = []
|
17
17
|
end
|
18
18
|
|
19
19
|
def to_csf_params
|
20
20
|
csf_params = { name: name, parameters: { server: { id: id } } }
|
21
21
|
csf_params.deep_merge!(parameters: parameters) if parameters.present?
|
22
|
-
|
22
|
+
controls.each do |control|
|
23
|
+
csf_params.deep_merge!(control.to_csf_params)
|
24
|
+
end
|
23
25
|
csf_params
|
24
26
|
end
|
25
27
|
|
26
28
|
def values_from_params(params)
|
27
|
-
|
28
|
-
value =
|
29
|
-
value =
|
30
|
-
[
|
29
|
+
controls.map do |control|
|
30
|
+
value = control.value_from_param(params[control.param])
|
31
|
+
value = control.value if value.nil? # nil only not falsey
|
32
|
+
[control.param, value]
|
31
33
|
end.to_h
|
32
34
|
end
|
33
35
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: view_component_storybook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Palmer
|
@@ -162,18 +162,18 @@ files:
|
|
162
162
|
- app/controllers/view_component/storybook/stories_controller.rb
|
163
163
|
- app/views/view_component/storybook/stories/show.html.erb
|
164
164
|
- lib/view_component/storybook.rb
|
165
|
+
- lib/view_component/storybook/controls.rb
|
166
|
+
- lib/view_component/storybook/controls/array_config.rb
|
167
|
+
- lib/view_component/storybook/controls/control_config.rb
|
168
|
+
- lib/view_component/storybook/controls/date_config.rb
|
169
|
+
- lib/view_component/storybook/controls/number_config.rb
|
170
|
+
- lib/view_component/storybook/controls/object_config.rb
|
171
|
+
- lib/view_component/storybook/controls/options_config.rb
|
172
|
+
- lib/view_component/storybook/controls/simple_config.rb
|
165
173
|
- lib/view_component/storybook/dsl.rb
|
166
|
-
- lib/view_component/storybook/dsl/
|
174
|
+
- lib/view_component/storybook/dsl/controls_dsl.rb
|
167
175
|
- lib/view_component/storybook/dsl/story_dsl.rb
|
168
176
|
- lib/view_component/storybook/engine.rb
|
169
|
-
- lib/view_component/storybook/knobs.rb
|
170
|
-
- lib/view_component/storybook/knobs/array_config.rb
|
171
|
-
- lib/view_component/storybook/knobs/date_config.rb
|
172
|
-
- lib/view_component/storybook/knobs/knob_config.rb
|
173
|
-
- lib/view_component/storybook/knobs/number_config.rb
|
174
|
-
- lib/view_component/storybook/knobs/object_config.rb
|
175
|
-
- lib/view_component/storybook/knobs/options_config.rb
|
176
|
-
- lib/view_component/storybook/knobs/simple_config.rb
|
177
177
|
- lib/view_component/storybook/stories.rb
|
178
178
|
- lib/view_component/storybook/story_config.rb
|
179
179
|
- lib/view_component/storybook/tasks/write_stories_json.rake
|
@@ -1,81 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ViewComponent
|
4
|
-
module Storybook
|
5
|
-
module Dsl
|
6
|
-
class KnobsDsl
|
7
|
-
attr_reader :component, :knobs
|
8
|
-
|
9
|
-
def initialize(component)
|
10
|
-
@component = component
|
11
|
-
@knobs = []
|
12
|
-
end
|
13
|
-
|
14
|
-
def text(param, value, group_id: nil, name: nil)
|
15
|
-
knobs << Knobs::SimpleConfig.new(:text, component, param, value, group_id: group_id, name: name)
|
16
|
-
end
|
17
|
-
|
18
|
-
def boolean(param, value, group_id: nil, name: nil)
|
19
|
-
knobs << Knobs::SimpleConfig.new(:boolean, component, param, value, group_id: group_id, name: name)
|
20
|
-
end
|
21
|
-
|
22
|
-
def number(param, value, options = {}, group_id: nil, name: nil)
|
23
|
-
knobs << Knobs::NumberConfig.new(component, param, value, options, group_id: group_id, name: name)
|
24
|
-
end
|
25
|
-
|
26
|
-
def color(param, value, group_id: nil, name: nil)
|
27
|
-
knobs << Knobs::SimpleConfig.new(:color, component, param, value, group_id: group_id, name: name)
|
28
|
-
end
|
29
|
-
|
30
|
-
def object(param, value, group_id: nil, name: nil)
|
31
|
-
knobs << Knobs::ObjectConfig.new(component, param, value, group_id: group_id, name: name)
|
32
|
-
end
|
33
|
-
|
34
|
-
def select(param, options, value, group_id: nil, name: nil)
|
35
|
-
knobs << Knobs::OptionsConfig.new(:select, component, param, options, value, group_id: group_id, name: name)
|
36
|
-
end
|
37
|
-
|
38
|
-
def radios(param, options, value, group_id: nil, name: nil)
|
39
|
-
knobs << Knobs::OptionsConfig.new(:radios, component, param, options, value, group_id: group_id, name: name)
|
40
|
-
end
|
41
|
-
|
42
|
-
def array(param, value, separator = ",", group_id: nil, name: nil)
|
43
|
-
knobs << Knobs::ArrayConfig.new(component, param, value, separator, group_id: group_id, name: name)
|
44
|
-
end
|
45
|
-
|
46
|
-
def date(param, value, group_id: nil, name: nil)
|
47
|
-
knobs << Knobs::DateConfig.new(component, param, value, group_id: group_id, name: name)
|
48
|
-
end
|
49
|
-
|
50
|
-
def respond_to_missing?(_method)
|
51
|
-
true
|
52
|
-
end
|
53
|
-
|
54
|
-
def method_missing(method, *args)
|
55
|
-
value = args.first
|
56
|
-
knob_method = case value
|
57
|
-
when Date
|
58
|
-
:date
|
59
|
-
when Array
|
60
|
-
:array
|
61
|
-
when Hash
|
62
|
-
:object
|
63
|
-
when Numeric
|
64
|
-
:number
|
65
|
-
when TrueClass, FalseClass
|
66
|
-
:boolean
|
67
|
-
when String
|
68
|
-
:text
|
69
|
-
end
|
70
|
-
if knob_method
|
71
|
-
send(knob_method, method, *args)
|
72
|
-
else
|
73
|
-
super
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
Knobs = ViewComponent::Storybook::Knobs
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|