hyper-react 0.12.7 → 0.99.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.
Files changed (129) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +48 -34
  3. data/CODE_OF_CONDUCT.md +49 -0
  4. data/Gemfile +5 -6
  5. data/README.md +47 -98
  6. data/Rakefile +6 -28
  7. data/hyper-react.gemspec +36 -43
  8. data/lib/hyper-react.rb +4 -73
  9. data/lib/react/version.rb +3 -0
  10. metadata +91 -249
  11. data/.codeclimate.yml +0 -27
  12. data/.rubocop.yml +0 -1159
  13. data/.travis.yml +0 -62
  14. data/Appraisals +0 -31
  15. data/CHANGELOG.md +0 -143
  16. data/LICENSE +0 -19
  17. data/UPGRADING.md +0 -24
  18. data/component-name-lookup.md +0 -145
  19. data/config.ru +0 -26
  20. data/gemfiles/opal_0.10_react_13.gemfile +0 -15
  21. data/gemfiles/opal_0.10_react_14.gemfile +0 -15
  22. data/gemfiles/opal_0.10_react_15.gemfile +0 -15
  23. data/gemfiles/opal_0.8_react_13.gemfile +0 -15
  24. data/gemfiles/opal_0.8_react_14.gemfile +0 -15
  25. data/gemfiles/opal_0.8_react_15.gemfile +0 -15
  26. data/gemfiles/opal_0.9_react_13.gemfile +0 -15
  27. data/gemfiles/opal_0.9_react_14.gemfile +0 -15
  28. data/gemfiles/opal_0.9_react_15.gemfile +0 -15
  29. data/gemfiles/opal_master_react_15.gemfile +0 -16
  30. data/lib/generators/reactive_ruby/test_app/templates/assets/javascripts/components.rb +0 -3
  31. data/lib/generators/reactive_ruby/test_app/templates/assets/javascripts/test_application.rb +0 -2
  32. data/lib/generators/reactive_ruby/test_app/templates/boot.rb.erb +0 -6
  33. data/lib/generators/reactive_ruby/test_app/templates/script/rails +0 -5
  34. data/lib/generators/reactive_ruby/test_app/templates/test_application.rb.erb +0 -13
  35. data/lib/generators/reactive_ruby/test_app/templates/views/components/hello_world.rb +0 -11
  36. data/lib/generators/reactive_ruby/test_app/templates/views/components/todo.rb +0 -14
  37. data/lib/generators/reactive_ruby/test_app/templates/views/layouts/test_layout.html.erb +0 -0
  38. data/lib/generators/reactive_ruby/test_app/test_app_generator.rb +0 -111
  39. data/lib/rails-helpers/top_level_rails_component.rb +0 -54
  40. data/lib/react-sources/react-server.js +0 -2
  41. data/lib/react/api.rb +0 -173
  42. data/lib/react/callbacks.rb +0 -41
  43. data/lib/react/children.rb +0 -30
  44. data/lib/react/component.rb +0 -168
  45. data/lib/react/component/api.rb +0 -50
  46. data/lib/react/component/base.rb +0 -13
  47. data/lib/react/component/class_methods.rb +0 -189
  48. data/lib/react/component/dsl_instance_methods.rb +0 -23
  49. data/lib/react/component/params.rb +0 -6
  50. data/lib/react/component/props_wrapper.rb +0 -78
  51. data/lib/react/component/should_component_update.rb +0 -94
  52. data/lib/react/component/tags.rb +0 -129
  53. data/lib/react/config.rb +0 -5
  54. data/lib/react/config/client.rb.erb +0 -19
  55. data/lib/react/config/server.rb +0 -23
  56. data/lib/react/element.rb +0 -169
  57. data/lib/react/event.rb +0 -76
  58. data/lib/react/ext/hash.rb +0 -9
  59. data/lib/react/ext/opal-jquery/element.rb +0 -26
  60. data/lib/react/ext/string.rb +0 -8
  61. data/lib/react/hash.rb +0 -13
  62. data/lib/react/native_library.rb +0 -87
  63. data/lib/react/object.rb +0 -15
  64. data/lib/react/react-source-browser.rb +0 -3
  65. data/lib/react/react-source-server.rb +0 -3
  66. data/lib/react/react-source.rb +0 -20
  67. data/lib/react/ref_callback.rb +0 -31
  68. data/lib/react/rendering_context.rb +0 -144
  69. data/lib/react/server.rb +0 -23
  70. data/lib/react/state_wrapper.rb +0 -23
  71. data/lib/react/test.rb +0 -16
  72. data/lib/react/test/dsl.rb +0 -17
  73. data/lib/react/test/matchers/render_html_matcher.rb +0 -56
  74. data/lib/react/test/rspec.rb +0 -15
  75. data/lib/react/test/session.rb +0 -37
  76. data/lib/react/test/utils.rb +0 -25
  77. data/lib/react/top_level.rb +0 -118
  78. data/lib/react/top_level_render.rb +0 -29
  79. data/lib/react/validator.rb +0 -136
  80. data/lib/reactive-ruby/component_loader.rb +0 -50
  81. data/lib/reactive-ruby/isomorphic_helpers.rb +0 -212
  82. data/lib/reactive-ruby/rails.rb +0 -7
  83. data/lib/reactive-ruby/rails/component_mount.rb +0 -46
  84. data/lib/reactive-ruby/rails/controller_helper.rb +0 -15
  85. data/lib/reactive-ruby/rails/railtie.rb +0 -33
  86. data/lib/reactive-ruby/serializers.rb +0 -15
  87. data/lib/reactive-ruby/server_rendering/contextual_renderer.rb +0 -42
  88. data/lib/reactive-ruby/version.rb +0 -3
  89. data/lib/reactrb/auto-import.rb +0 -27
  90. data/lib/reactrb/deep-compare.rb +0 -24
  91. data/lib/reactrb/new-event-name-convention.rb +0 -11
  92. data/logo1.png +0 -0
  93. data/logo2.png +0 -0
  94. data/logo3.png +0 -0
  95. data/path_release_steps.md +0 -9
  96. data/spec/controller_helper_spec.rb +0 -34
  97. data/spec/index.html.erb +0 -11
  98. data/spec/react/callbacks_spec.rb +0 -138
  99. data/spec/react/children_spec.rb +0 -76
  100. data/spec/react/component/base_spec.rb +0 -32
  101. data/spec/react/component_spec.rb +0 -884
  102. data/spec/react/dsl_spec.rb +0 -303
  103. data/spec/react/element_spec.rb +0 -136
  104. data/spec/react/event_spec.rb +0 -24
  105. data/spec/react/native_library_spec.rb +0 -322
  106. data/spec/react/observable_spec.rb +0 -42
  107. data/spec/react/opal_jquery_extensions_spec.rb +0 -68
  108. data/spec/react/param_declaration_spec.rb +0 -269
  109. data/spec/react/react_spec.rb +0 -215
  110. data/spec/react/refs_callback_spec.rb +0 -56
  111. data/spec/react/server_spec.rb +0 -25
  112. data/spec/react/state_spec.rb +0 -55
  113. data/spec/react/test/dsl_spec.rb +0 -43
  114. data/spec/react/test/matchers/render_html_matcher_spec.rb +0 -83
  115. data/spec/react/test/rspec_spec.rb +0 -62
  116. data/spec/react/test/session_spec.rb +0 -88
  117. data/spec/react/test/utils_spec.rb +0 -28
  118. data/spec/react/top_level_component_spec.rb +0 -101
  119. data/spec/react/tutorial/tutorial_spec.rb +0 -36
  120. data/spec/react/validator_spec.rb +0 -124
  121. data/spec/reactive-ruby/component_loader_spec.rb +0 -77
  122. data/spec/reactive-ruby/isomorphic_helpers_spec.rb +0 -160
  123. data/spec/reactive-ruby/rails/asset_pipeline_spec.rb +0 -10
  124. data/spec/reactive-ruby/rails/component_mount_spec.rb +0 -66
  125. data/spec/reactive-ruby/server_rendering/contextual_renderer_spec.rb +0 -35
  126. data/spec/spec_helper.rb +0 -149
  127. data/spec/support/react/spec_helpers.rb +0 -44
  128. data/spec/vendor/es5-shim.min.js +0 -6
  129. data/spec/vendor/jquery-2.2.4.min.js +0 -4
@@ -1,23 +0,0 @@
1
- module React
2
- module Server
3
- def self.render_to_string(element)
4
- if !(`typeof ReactDOMServer === 'undefined'`)
5
- React::RenderingContext.build { `ReactDOMServer.renderToString(#{element.to_n})` } # v0.15+
6
- elsif !(`typeof React.renderToString === 'undefined'`)
7
- React::RenderingContext.build { `React.renderToString(#{element.to_n})` }
8
- else
9
- raise "renderToString is not defined. In React >= v15 you must import it with ReactDOMServer"
10
- end
11
- end
12
-
13
- def self.render_to_static_markup(element)
14
- if !(`typeof ReactDOMServer === 'undefined'`)
15
- React::RenderingContext.build { `ReactDOMServer.renderToStaticMarkup(#{element.to_n})` } # v0.15+
16
- elsif !(`typeof React.renderToString === 'undefined'`)
17
- React::RenderingContext.build { `React.renderToStaticMarkup(#{element.to_n})` }
18
- else
19
- raise "renderToStaticMarkup is not defined. In React >= v15 you must import it with ReactDOMServer"
20
- end
21
- end
22
- end
23
- end
@@ -1,23 +0,0 @@
1
- module HyperStore
2
- class StateWrapper < BaseStoreClass # < BasicObject
3
-
4
- def [](state)
5
- `#{__from__.instance_variable_get('@native')}.state[#{state}] || #{nil}`
6
- end
7
-
8
- def []=(state, new_value)
9
- `#{__from__.instance_variable_get('@native')}.state[#{state}] = new_value`
10
- end
11
-
12
- alias pre_component_method_missing method_missing
13
-
14
- def method_missing(method, *args)
15
- if method =~ /\!$/ && __from__.respond_to?(:deprecation_warning)
16
- __from__.deprecation_warning("The mutator 'state.#{method}' has been deprecated. Use 'mutate.#{method.gsub(/\!$/,'')}' instead.")
17
- __from__.mutate.__send__(method.gsub(/\!$/,''), *args)
18
- else
19
- pre_component_method_missing(method, *args)
20
- end
21
- end
22
- end
23
- end
@@ -1,16 +0,0 @@
1
- require 'react/test/session'
2
- require 'react/test/dsl'
3
-
4
- module React
5
- module Test
6
- class << self
7
- def current_session
8
- @current_session ||= Session.new
9
- end
10
-
11
- def reset_session!
12
- @current_session = nil
13
- end
14
- end
15
- end
16
- end
@@ -1,17 +0,0 @@
1
- require 'react/test'
2
-
3
- module React
4
- module Test
5
- module DSL
6
- def component
7
- React::Test.current_session
8
- end
9
-
10
- Session::DSL_METHODS.each do |method|
11
- define_method method do |*args, &block|
12
- component.public_send(method, *args, &block)
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,56 +0,0 @@
1
- module React
2
- module Test
3
- module Matchers
4
- class RenderHTMLMatcher
5
- def initialize(expected)
6
- @expected = expected
7
- @params = {}
8
- end
9
-
10
- def with_params(params)
11
- @params = params
12
- self
13
- end
14
-
15
- def matches?(component)
16
- @component = component
17
- @actual = render_to_html
18
- @expected == @actual
19
- end
20
-
21
- def failure_message
22
- failure_string
23
- end
24
-
25
- def failure_message_when_negated
26
- failure_string(:negative)
27
- end
28
-
29
- alias negative_failure_message failure_message_when_negated
30
-
31
- private
32
-
33
- def render_to_html
34
- element = React.create_element(@component, @params)
35
- React::Server.render_to_static_markup(element)
36
- end
37
-
38
- def failure_string(negative = false)
39
- str = "expected '#{@component.name}' with params '#{@params}' to "
40
- str = str + "not " if negative
41
- str = str + "render '#{@expected}', but '#{@actual}' was rendered."
42
- str
43
- end
44
- end
45
-
46
- def render_static_html(*args)
47
- RenderHTMLMatcher.new(*args)
48
- end
49
-
50
- def render(*args)
51
- %x{ console.error("Warning: `render` matcher is deprecated in favor of `render_static_html`."); }
52
- RenderHTMLMatcher.new(*args)
53
- end
54
- end
55
- end
56
- end
@@ -1,15 +0,0 @@
1
- require 'react/test/dsl'
2
- require 'react/test/matchers/render_html_matcher'
3
-
4
- RSpec.configure do |config|
5
- config.include React::Test::DSL, type: :component
6
- config.include React::Test::Matchers, type: :component
7
-
8
- config.after do
9
- React::Test.reset_session!
10
- end
11
-
12
- config.before do
13
- # nothing yet
14
- end
15
- end
@@ -1,37 +0,0 @@
1
- module React
2
- module Test
3
- class Session
4
- DSL_METHODS = %i[mount instance update_params html].freeze
5
-
6
- def mount(component_klass, params = {})
7
- @element = React.create_element(component_klass, params)
8
- instance
9
- end
10
-
11
- def instance
12
- unless @instance
13
- @container = `document.createElement('div')`
14
- @instance = React.render(@element, @container)
15
- end
16
- @instance
17
- end
18
-
19
- def update_params(params, &block)
20
- cloned_element = React::Element.new(`React.cloneElement(#{@element.to_n}, #{params.to_n})`)
21
- React.render(cloned_element, @container, &block)
22
- nil
23
- end
24
-
25
- def html
26
- html = `#@container.innerHTML`
27
- %x{
28
- var REGEX_REMOVE_ROOT_IDS = /\s?data-reactroot="[^"]*"/g;
29
- var REGEX_REMOVE_IDS = /\s?data-reactid="[^"]+"/g;
30
- html = html.replace(REGEX_REMOVE_ROOT_IDS, '');
31
- html = html.replace(REGEX_REMOVE_IDS, '');
32
- }
33
- return html
34
- end
35
- end
36
- end
37
- end
@@ -1,25 +0,0 @@
1
- module React
2
- module Test
3
- class Utils
4
- `var ReactTestUtils = React.addons.TestUtils`
5
-
6
- def self.render_into_document(element, options = {})
7
- raise "You should pass a valid React::Element" unless React.is_valid_element?(element)
8
- native_instance = `ReactTestUtils.renderIntoDocument(#{element.to_n})`
9
-
10
- if `#{native_instance}._getOpalInstance !== undefined`
11
- `#{native_instance}._getOpalInstance()`
12
- elsif `ReactTestUtils.isDOMComponent(#{native_instance}) && React.findDOMNode !== undefined`
13
- `React.findDOMNode(#{native_instance})`
14
- else
15
- native_instance
16
- end
17
- end
18
-
19
- def self.simulate(event, element, params = {})
20
- simulator = Native(`ReactTestUtils.Simulate`)
21
- simulator[event.to_s].call(`element.$dom_node === undefined` ? element : element.dom_node, params)
22
- end
23
- end
24
- end
25
- end
@@ -1,118 +0,0 @@
1
- require "native"
2
- require 'active_support/core_ext/object/try'
3
- require 'react/component/tags'
4
- require 'react/component/base'
5
-
6
- module React
7
-
8
- ATTRIBUTES = %w(accept acceptCharset accessKey action allowFullScreen allowTransparency alt
9
- async autoComplete autoPlay cellPadding cellSpacing charSet checked classID
10
- className cols colSpan content contentEditable contextMenu controls coords
11
- crossOrigin data dateTime defer dir disabled download draggable encType form
12
- formAction formEncType formMethod formNoValidate formTarget frameBorder height
13
- hidden href hrefLang htmlFor httpEquiv icon id label lang list loop manifest
14
- marginHeight marginWidth max maxLength media mediaGroup method min multiple
15
- muted name noValidate open pattern placeholder poster preload radioGroup
16
- readOnly rel required role rows rowSpan sandbox scope scrolling seamless
17
- selected shape size sizes span spellCheck src srcDoc srcSet start step style
18
- tabIndex target title type useMap value width wmode dangerouslySetInnerHTML) +
19
- #SVG ATTRIBUTES
20
- %w(clipPath cx cy d dx dy fill fillOpacity fontFamily
21
- fontSize fx fy gradientTransform gradientUnits markerEnd
22
- markerMid markerStart offset opacity patternContentUnits
23
- patternUnits points preserveAspectRatio r rx ry spreadMethod
24
- stopColor stopOpacity stroke strokeDasharray strokeLinecap
25
- strokeOpacity strokeWidth textAnchor transform version
26
- viewBox x1 x2 x xlinkActuate xlinkArcrole xlinkHref xlinkRole
27
- xlinkShow xlinkTitle xlinkType xmlBase xmlLang xmlSpace y1 y2 y)
28
- HASH_ATTRIBUTES = %w(data aria)
29
- HTML_TAGS = React::Component::Tags::HTML_TAGS
30
-
31
- def self.html_tag?(name)
32
- tags = HTML_TAGS
33
- %x{
34
- for(var i = 0; i < tags.length; i++) {
35
- if(tags[i] === name)
36
- return true;
37
- }
38
- return false;
39
- }
40
- end
41
-
42
- def self.html_attr?(name)
43
- attrs = ATTRIBUTES
44
- %x{
45
- for(var i = 0; i < attrs.length; i++) {
46
- if(attrs[i] === name)
47
- return true;
48
- }
49
- return false;
50
- }
51
- end
52
-
53
- def self.create_element(type, properties = {}, &block)
54
- React::API.create_element(type, properties, &block)
55
- end
56
-
57
- def self.render(element, container)
58
- %x{
59
- console.error(
60
- "Warning: Using deprecated behavior of `React.render`,",
61
- "require \"react/top_level_render\" to get the correct behavior."
62
- );
63
- }
64
- container = `container.$$class ? container[0] : container`
65
- if !(`typeof ReactDOM === 'undefined'`)
66
- component = Native(`ReactDOM.render(#{element.to_n}, container, function(){#{yield if block_given?}})`) # v0.15+
67
- elsif !(`typeof React.renderToString === 'undefined'`)
68
- component = Native(`React.render(#{element.to_n}, container, function(){#{yield if block_given?}})`)
69
- else
70
- raise "render is not defined. In React >= v15 you must import it with ReactDOM"
71
- end
72
-
73
- component.class.include(React::Component::API)
74
- component
75
- end
76
-
77
- def self.is_valid_element(element)
78
- %x{ console.error("Warning: `is_valid_element` is deprecated in favor of `is_valid_element?`."); }
79
- element.kind_of?(React::Element) && `React.isValidElement(#{element.to_n})`
80
- end
81
-
82
- def self.is_valid_element?(element)
83
- element.kind_of?(React::Element) && `React.isValidElement(#{element.to_n})`
84
- end
85
-
86
- def self.render_to_string(element)
87
- %x{ console.error("Warning: `React.render_to_string` is deprecated in favor of `React::Server.render_to_string`."); }
88
- if !(`typeof ReactDOMServer === 'undefined'`)
89
- React::RenderingContext.build { `ReactDOMServer.renderToString(#{element.to_n})` } # v0.15+
90
- elsif !(`typeof React.renderToString === 'undefined'`)
91
- React::RenderingContext.build { `React.renderToString(#{element.to_n})` }
92
- else
93
- raise "renderToString is not defined. In React >= v15 you must import it with ReactDOMServer"
94
- end
95
- end
96
-
97
- def self.render_to_static_markup(element)
98
- %x{ console.error("Warning: `React.render_to_static_markup` is deprecated in favor of `React::Server.render_to_static_markup`."); }
99
- if !(`typeof ReactDOMServer === 'undefined'`)
100
- React::RenderingContext.build { `ReactDOMServer.renderToStaticMarkup(#{element.to_n})` } # v0.15+
101
- elsif !(`typeof React.renderToString === 'undefined'`)
102
- React::RenderingContext.build { `React.renderToStaticMarkup(#{element.to_n})` }
103
- else
104
- raise "renderToStaticMarkup is not defined. In React >= v15 you must import it with ReactDOMServer"
105
- end
106
- end
107
-
108
- def self.unmount_component_at_node(node)
109
- if !(`typeof ReactDOM === 'undefined'`)
110
- `ReactDOM.unmountComponentAtNode(node.$$class ? node[0] : node)` # v0.15+
111
- elsif !(`typeof React.renderToString === 'undefined'`)
112
- `React.unmountComponentAtNode(node.$$class ? node[0] : node)`
113
- else
114
- raise "unmountComponentAtNode is not defined. In React >= v15 you must import it with ReactDOM"
115
- end
116
- end
117
-
118
- end
@@ -1,29 +0,0 @@
1
- module React
2
- def self.render(element, container)
3
- container = `container.$$class ? container[0] : container`
4
-
5
- cb = %x{
6
- function(){
7
- setTimeout(function(){
8
- #{yield if block_given?}
9
- }, 0)
10
- }
11
- }
12
-
13
- if !(`typeof ReactDOM === 'undefined'`)
14
- native = `ReactDOM.render(#{element.to_n}, container, cb)` # v0.15+
15
- elsif !(`typeof React.renderToString === 'undefined'`)
16
- native = `React.render(#{element.to_n}, container, cb)`
17
- else
18
- raise "render is not defined. In React >= v15 you must import it with ReactDOM"
19
- end
20
-
21
- if `#{native}._getOpalInstance !== undefined`
22
- `#{native}._getOpalInstance()`
23
- elsif `React.findDOMNode !== undefined && #{native}.nodeType === undefined`
24
- `React.findDOMNode(#{native})`
25
- else
26
- native
27
- end
28
- end
29
- end
@@ -1,136 +0,0 @@
1
- module React
2
- class Validator
3
- attr_accessor :errors
4
- attr_reader :props_wrapper
5
- private :errors, :props_wrapper
6
-
7
- def initialize(props_wrapper = Class.new(Component::PropsWrapper))
8
- @props_wrapper = props_wrapper
9
- end
10
-
11
- def self.build(&block)
12
- self.new.build(&block)
13
- end
14
-
15
- def build(&block)
16
- instance_eval(&block)
17
- self
18
- end
19
-
20
- def requires(name, options = {})
21
- options[:required] = true
22
- define_rule(name, options)
23
- end
24
-
25
- def optional(name, options = {})
26
- options[:required] = false
27
- define_rule(name, options)
28
- end
29
-
30
- def allow_undefined_props=(allow)
31
- @allow_undefined_props = allow
32
- end
33
-
34
- def undefined_props(props)
35
- self.allow_undefined_props = true
36
- props.reject { |name, value| rules[name] }
37
- end
38
-
39
- def validate(props)
40
- self.errors = []
41
- validate_undefined(props) unless allow_undefined_props?
42
- props = coerce_native_hash_values(defined_props(props))
43
- validate_required(props)
44
- props.each do |name, value|
45
- validate_types(name, value)
46
- validate_allowed(name, value)
47
- end
48
- errors
49
- end
50
-
51
- def default_props
52
- rules
53
- .select {|key, value| value.keys.include?("default") }
54
- .inject({}) {|memo, (k,v)| memo[k] = v[:default]; memo}
55
- end
56
-
57
- private
58
-
59
- def defined_props(props)
60
- props.select { |name| rules.keys.include?(name) }
61
- end
62
-
63
- def allow_undefined_props?
64
- !!@allow_undefined_props
65
- end
66
-
67
- def rules
68
- @rules ||= { children: { required: false } }
69
- end
70
-
71
- def define_rule(name, options = {})
72
- rules[name] = coerce_native_hash_values(options)
73
- props_wrapper.define_param(name, options[:type])
74
- end
75
-
76
- def errors
77
- @errors ||= []
78
- end
79
-
80
- def validate_types(prop_name, value)
81
- return unless klass = rules[prop_name][:type]
82
- if !klass.is_a?(Array)
83
- allow_nil = !!rules[prop_name][:allow_nil]
84
- type_check("`#{prop_name}`", value, klass, allow_nil)
85
- elsif klass.length > 0
86
- validate_value_array(prop_name, value)
87
- else
88
- allow_nil = !!rules[prop_name][:allow_nil]
89
- type_check("`#{prop_name}`", value, Array, allow_nil)
90
- end
91
- end
92
-
93
- def type_check(prop_name, value, klass, allow_nil)
94
- return if allow_nil && value.nil?
95
- return if value.is_a?(klass)
96
- return if klass.respond_to?(:_react_param_conversion) &&
97
- klass._react_param_conversion(value, :validate_only)
98
- errors << "Provided prop #{prop_name} could not be converted to #{klass}"
99
- end
100
-
101
- def validate_allowed(prop_name, value)
102
- return unless values = rules[prop_name][:values]
103
- return if values.include?(value)
104
- errors << "Value `#{value}` for prop `#{prop_name}` is not an allowed value"
105
- end
106
-
107
- def validate_required(props)
108
- (rules.keys - props.keys).each do |name|
109
- next unless rules[name][:required]
110
- errors << "Required prop `#{name}` was not specified"
111
- end
112
- end
113
-
114
- def validate_undefined(props)
115
- (props.keys - rules.keys).each do |prop_name|
116
- errors << "Provided prop `#{prop_name}` not specified in spec"
117
- end
118
- end
119
-
120
- def validate_value_array(name, value)
121
- klass = rules[name][:type]
122
- allow_nil = !!rules[name][:allow_nil]
123
- value.each_with_index do |item, index|
124
- type_check("`#{name}`[#{index}]", Native(item), klass[0], allow_nil)
125
- end
126
- rescue NoMethodError
127
- errors << "Provided prop `#{name}` was not an Array"
128
- end
129
-
130
- def coerce_native_hash_values(hash)
131
- hash.each do |key, value|
132
- hash[key] = Native(value)
133
- end
134
- end
135
- end
136
- end