hyper-react 0.12.7 → 0.99.0

Sign up to get free protection for your applications and to get access to all the features.
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