ovto 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.gitmodules +3 -0
  4. data/CHANGELOG.md +22 -0
  5. data/Gemfile +7 -0
  6. data/Gemfile.lock +57 -0
  7. data/LICENSE.txt +44 -0
  8. data/README.md +84 -0
  9. data/Rakefile +41 -0
  10. data/book/README.md +1 -0
  11. data/book/SUMMARY.md +13 -0
  12. data/book/api/actions.md +77 -0
  13. data/book/api/app.md +86 -0
  14. data/book/api/component.md +175 -0
  15. data/book/api/fetch.md +42 -0
  16. data/book/api/state.md +97 -0
  17. data/book/guides/debugging.md +23 -0
  18. data/book/guides/development.md +11 -0
  19. data/book/guides/tutorial.md +288 -0
  20. data/book/screenshot.png +0 -0
  21. data/docs/api/Ovto/Actions.html +135 -0
  22. data/docs/api/Ovto/App.html +531 -0
  23. data/docs/api/Ovto/Component/MoreThanOneNode.html +135 -0
  24. data/docs/api/Ovto/Component.html +350 -0
  25. data/docs/api/Ovto/Runtime.html +315 -0
  26. data/docs/api/Ovto/State/MissingValue.html +135 -0
  27. data/docs/api/Ovto/State/UnknownKey.html +135 -0
  28. data/docs/api/Ovto/State.html +699 -0
  29. data/docs/api/Ovto/WiredActions.html +343 -0
  30. data/docs/api/Ovto.html +319 -0
  31. data/docs/api/_index.html +229 -0
  32. data/docs/api/actions.html +398 -0
  33. data/docs/api/app.html +411 -0
  34. data/docs/api/class_list.html +51 -0
  35. data/docs/api/component.html +469 -0
  36. data/docs/api/css/common.css +1 -0
  37. data/docs/api/css/full_list.css +58 -0
  38. data/docs/api/css/style.css +499 -0
  39. data/docs/api/file.README.html +162 -0
  40. data/docs/api/file_list.html +56 -0
  41. data/docs/api/frames.html +17 -0
  42. data/docs/api/index.html +162 -0
  43. data/docs/api/js/app.js +248 -0
  44. data/docs/api/js/full_list.js +216 -0
  45. data/docs/api/js/jquery.js +4 -0
  46. data/docs/api/method_list.html +243 -0
  47. data/docs/api/state.html +430 -0
  48. data/docs/api/top-level-namespace.html +110 -0
  49. data/docs/gitbook/fonts/fontawesome/FontAwesome.otf +0 -0
  50. data/docs/gitbook/fonts/fontawesome/fontawesome-webfont.eot +0 -0
  51. data/docs/gitbook/fonts/fontawesome/fontawesome-webfont.svg +685 -0
  52. data/docs/gitbook/fonts/fontawesome/fontawesome-webfont.ttf +0 -0
  53. data/docs/gitbook/fonts/fontawesome/fontawesome-webfont.woff +0 -0
  54. data/docs/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 +0 -0
  55. data/docs/gitbook/gitbook-plugin-fontsettings/fontsettings.js +240 -0
  56. data/docs/gitbook/gitbook-plugin-fontsettings/website.css +291 -0
  57. data/docs/gitbook/gitbook-plugin-highlight/ebook.css +135 -0
  58. data/docs/gitbook/gitbook-plugin-highlight/website.css +434 -0
  59. data/docs/gitbook/gitbook-plugin-lunr/lunr.min.js +7 -0
  60. data/docs/gitbook/gitbook-plugin-lunr/search-lunr.js +59 -0
  61. data/docs/gitbook/gitbook-plugin-search/lunr.min.js +7 -0
  62. data/docs/gitbook/gitbook-plugin-search/search-engine.js +50 -0
  63. data/docs/gitbook/gitbook-plugin-search/search.css +35 -0
  64. data/docs/gitbook/gitbook-plugin-search/search.js +213 -0
  65. data/docs/gitbook/gitbook-plugin-sharing/buttons.js +90 -0
  66. data/docs/gitbook/gitbook.js +4 -0
  67. data/docs/gitbook/images/apple-touch-icon-precomposed-152.png +0 -0
  68. data/docs/gitbook/images/favicon.ico +0 -0
  69. data/docs/gitbook/style.css +9 -0
  70. data/docs/gitbook/theme.js +4 -0
  71. data/docs/guides/debugging.html +355 -0
  72. data/docs/guides/development.html +361 -0
  73. data/docs/guides/tutorial.html +571 -0
  74. data/docs/index.html +422 -0
  75. data/docs/screenshot.png +0 -0
  76. data/docs/search_index.json +1 -0
  77. data/example/sinatra/Gemfile +6 -0
  78. data/example/sinatra/Gemfile.lock +59 -0
  79. data/example/sinatra/README.md +21 -0
  80. data/example/sinatra/app.rb +18 -0
  81. data/example/sinatra/config.ru +30 -0
  82. data/example/sinatra/ovto/app.rb +171 -0
  83. data/example/sinatra/public/style.css +4 -0
  84. data/example/sinatra/public/todomvc-app-css_index.css +376 -0
  85. data/example/sinatra/public/todomvc-common_base.css +141 -0
  86. data/example/sinatra/views/index.erb +21 -0
  87. data/example/static/Gemfile +3 -0
  88. data/example/static/Gemfile.lock +30 -0
  89. data/example/static/README.md +10 -0
  90. data/example/static/Rakefile +4 -0
  91. data/example/static/app.js +24808 -0
  92. data/example/static/app.rb +43 -0
  93. data/example/static/index.html +11 -0
  94. data/lib/ovto/actions.rb +10 -0
  95. data/lib/ovto/app.rb +58 -0
  96. data/lib/ovto/component.rb +191 -0
  97. data/lib/ovto/fetch.rb +53 -0
  98. data/lib/ovto/runtime.rb +388 -0
  99. data/lib/ovto/state.rb +69 -0
  100. data/lib/ovto/version.rb +3 -0
  101. data/lib/ovto/wired_actions.rb +33 -0
  102. data/lib/ovto.rb +50 -0
  103. data/ovto.gemspec +22 -0
  104. data/screenshot.png +0 -0
  105. metadata +161 -0
@@ -0,0 +1,243 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
5
+ <meta charset="utf-8" />
6
+
7
+ <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
8
+
9
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
10
+
11
+
12
+
13
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
14
+
15
+ <script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
16
+
17
+
18
+ <title>Method List</title>
19
+ <base id="base_target" target="_parent" />
20
+ </head>
21
+ <body>
22
+ <div id="content">
23
+ <div class="fixed_header">
24
+ <h1 id="full_list_header">Method List</h1>
25
+ <div id="full_list_nav">
26
+
27
+ <span><a target="_self" href="class_list.html">
28
+ Classes
29
+ </a></span>
30
+
31
+ <span><a target="_self" href="method_list.html">
32
+ Methods
33
+ </a></span>
34
+
35
+ <span><a target="_self" href="file_list.html">
36
+ Files
37
+ </a></span>
38
+
39
+ </div>
40
+
41
+ <div id="search">Search: <input type="text" /></div>
42
+ </div>
43
+
44
+ <ul id="full_list" class="method">
45
+
46
+
47
+ <li class="odd ">
48
+ <div class="item">
49
+ <span class='object_link'><a href="Ovto/State.html#[]-instance_method" title="Ovto::State#[] (method)">#[]</a></span>
50
+ <small>Ovto::State</small>
51
+ </div>
52
+ </li>
53
+
54
+
55
+ <li class="even ">
56
+ <div class="item">
57
+ <span class='object_link'><a href="Ovto/App.html#_set_state-instance_method" title="Ovto::App#_set_state (method)">#_set_state</a></span>
58
+ <small>Ovto::App</small>
59
+ </div>
60
+ </li>
61
+
62
+
63
+ <li class="odd ">
64
+ <div class="item">
65
+ <span class='object_link'><a href="Ovto/Component.html#hash_to_js_obj-class_method" title="Ovto::Component.hash_to_js_obj (method)">hash_to_js_obj</a></span>
66
+ <small>Ovto::Component</small>
67
+ </div>
68
+ </li>
69
+
70
+
71
+ <li class="even ">
72
+ <div class="item">
73
+ <span class='object_link'><a href="Ovto/State.html#inherited-class_method" title="Ovto::State.inherited (method)">inherited</a></span>
74
+ <small>Ovto::State</small>
75
+ </div>
76
+ </li>
77
+
78
+
79
+ <li class="odd ">
80
+ <div class="item">
81
+ <span class='object_link'><a href="Ovto/App.html#initialize-instance_method" title="Ovto::App#initialize (method)">#initialize</a></span>
82
+ <small>Ovto::App</small>
83
+ </div>
84
+ </li>
85
+
86
+
87
+ <li class="even ">
88
+ <div class="item">
89
+ <span class='object_link'><a href="Ovto/State.html#initialize-instance_method" title="Ovto::State#initialize (method)">#initialize</a></span>
90
+ <small>Ovto::State</small>
91
+ </div>
92
+ </li>
93
+
94
+
95
+ <li class="odd ">
96
+ <div class="item">
97
+ <span class='object_link'><a href="Ovto/Component.html#initialize-instance_method" title="Ovto::Component#initialize (method)">#initialize</a></span>
98
+ <small>Ovto::Component</small>
99
+ </div>
100
+ </li>
101
+
102
+
103
+ <li class="even ">
104
+ <div class="item">
105
+ <span class='object_link'><a href="Ovto/Runtime.html#initialize-instance_method" title="Ovto::Runtime#initialize (method)">#initialize</a></span>
106
+ <small>Ovto::Runtime</small>
107
+ </div>
108
+ </li>
109
+
110
+
111
+ <li class="odd ">
112
+ <div class="item">
113
+ <span class='object_link'><a href="Ovto/WiredActions.html#initialize-instance_method" title="Ovto::WiredActions#initialize (method)">#initialize</a></span>
114
+ <small>Ovto::WiredActions</small>
115
+ </div>
116
+ </li>
117
+
118
+
119
+ <li class="even ">
120
+ <div class="item">
121
+ <span class='object_link'><a href="Ovto.html#inspect-class_method" title="Ovto.inspect (method)">inspect</a></span>
122
+ <small>Ovto</small>
123
+ </div>
124
+ </li>
125
+
126
+
127
+ <li class="odd ">
128
+ <div class="item">
129
+ <span class='object_link'><a href="Ovto/State.html#inspect-instance_method" title="Ovto::State#inspect (method)">#inspect</a></span>
130
+ <small>Ovto::State</small>
131
+ </div>
132
+ </li>
133
+
134
+
135
+ <li class="even ">
136
+ <div class="item">
137
+ <span class='object_link'><a href="Ovto/State.html#item-class_method" title="Ovto::State.item (method)">item</a></span>
138
+ <small>Ovto::State</small>
139
+ </div>
140
+ </li>
141
+
142
+
143
+ <li class="odd ">
144
+ <div class="item">
145
+ <span class='object_link'><a href="Ovto/State.html#item_specs-class_method" title="Ovto::State.item_specs (method)">item_specs</a></span>
146
+ <small>Ovto::State</small>
147
+ </div>
148
+ </li>
149
+
150
+
151
+ <li class="even ">
152
+ <div class="item">
153
+ <span class='object_link'><a href="Ovto.html#log_error-class_method" title="Ovto.log_error (method)">log_error</a></span>
154
+ <small>Ovto</small>
155
+ </div>
156
+ </li>
157
+
158
+
159
+ <li class="odd ">
160
+ <div class="item">
161
+ <span class='object_link'><a href="Ovto/State.html#merge-instance_method" title="Ovto::State#merge (method)">#merge</a></span>
162
+ <small>Ovto::State</small>
163
+ </div>
164
+ </li>
165
+
166
+
167
+ <li class="even ">
168
+ <div class="item">
169
+ <span class='object_link'><a href="Ovto/WiredActions.html#method_missing-instance_method" title="Ovto::WiredActions#method_missing (method)">#method_missing</a></span>
170
+ <small>Ovto::WiredActions</small>
171
+ </div>
172
+ </li>
173
+
174
+
175
+ <li class="odd ">
176
+ <div class="item">
177
+ <span class='object_link'><a href="Ovto/Component.html#render-instance_method" title="Ovto::Component#render (method)">#render</a></span>
178
+ <small>Ovto::Component</small>
179
+ </div>
180
+ </li>
181
+
182
+
183
+ <li class="even ">
184
+ <div class="item">
185
+ <span class='object_link'><a href="Ovto/WiredActions.html#respond_to%3F-instance_method" title="Ovto::WiredActions#respond_to? (method)">#respond_to?</a></span>
186
+ <small>Ovto::WiredActions</small>
187
+ </div>
188
+ </li>
189
+
190
+
191
+ <li class="odd ">
192
+ <div class="item">
193
+ <span class='object_link'><a href="Ovto/App.html#run-instance_method" title="Ovto::App#run (method)">#run</a></span>
194
+ <small>Ovto::App</small>
195
+ </div>
196
+ </li>
197
+
198
+
199
+ <li class="even ">
200
+ <div class="item">
201
+ <span class='object_link'><a href="Ovto/Runtime.html#run-instance_method" title="Ovto::Runtime#run (method)">#run</a></span>
202
+ <small>Ovto::Runtime</small>
203
+ </div>
204
+ </li>
205
+
206
+
207
+ <li class="odd ">
208
+ <div class="item">
209
+ <span class='object_link'><a href="Ovto/App.html#run-class_method" title="Ovto::App.run (method)">run</a></span>
210
+ <small>Ovto::App</small>
211
+ </div>
212
+ </li>
213
+
214
+
215
+ <li class="even ">
216
+ <div class="item">
217
+ <span class='object_link'><a href="Ovto/Runtime.html#scheduleRender-instance_method" title="Ovto::Runtime#scheduleRender (method)">#scheduleRender</a></span>
218
+ <small>Ovto::Runtime</small>
219
+ </div>
220
+ </li>
221
+
222
+
223
+ <li class="odd ">
224
+ <div class="item">
225
+ <span class='object_link'><a href="Ovto/App.html#state-instance_method" title="Ovto::App#state (method)">#state</a></span>
226
+ <small>Ovto::App</small>
227
+ </div>
228
+ </li>
229
+
230
+
231
+ <li class="even ">
232
+ <div class="item">
233
+ <span class='object_link'><a href="Ovto/State.html#to_h-instance_method" title="Ovto::State#to_h (method)">#to_h</a></span>
234
+ <small>Ovto::State</small>
235
+ </div>
236
+ </li>
237
+
238
+
239
+
240
+ </ul>
241
+ </div>
242
+ </body>
243
+ </html>
@@ -0,0 +1,430 @@
1
+
2
+ <!DOCTYPE HTML>
3
+ <html lang="" >
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
7
+ <title>State · GitBook</title>
8
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
9
+ <meta name="description" content="">
10
+ <meta name="generator" content="GitBook 3.2.3">
11
+
12
+
13
+
14
+
15
+ <link rel="stylesheet" href="../gitbook/style.css">
16
+
17
+
18
+
19
+
20
+ <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
21
+
22
+
23
+
24
+ <link rel="stylesheet" href="../gitbook/gitbook-plugin-search/search.css">
25
+
26
+
27
+
28
+ <link rel="stylesheet" href="../gitbook/gitbook-plugin-fontsettings/website.css">
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+ <meta name="HandheldFriendly" content="true"/>
53
+ <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
54
+ <meta name="apple-mobile-web-app-capable" content="yes">
55
+ <meta name="apple-mobile-web-app-status-bar-style" content="black">
56
+ <link rel="apple-touch-icon-precomposed" sizes="152x152" href="../gitbook/images/apple-touch-icon-precomposed-152.png">
57
+ <link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">
58
+
59
+
60
+ <link rel="next" href="actions.html" />
61
+
62
+
63
+ <link rel="prev" href="app.html" />
64
+
65
+
66
+ </head>
67
+ <body>
68
+
69
+ <div class="book">
70
+ <div class="book-summary">
71
+
72
+
73
+ <div id="book-search-input" role="search">
74
+ <input type="text" placeholder="Type to search" />
75
+ </div>
76
+
77
+
78
+ <nav role="navigation">
79
+
80
+
81
+
82
+ <ul class="summary">
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+ <li class="chapter " data-level="1.1" data-path="../">
93
+
94
+ <a href="../">
95
+
96
+
97
+ Introduction
98
+
99
+ </a>
100
+
101
+
102
+
103
+ </li>
104
+
105
+ <li class="chapter " data-level="1.2" data-path="../guides/tutorial.html">
106
+
107
+ <a href="../guides/tutorial.html">
108
+
109
+
110
+ Getting Started
111
+
112
+ </a>
113
+
114
+
115
+
116
+ </li>
117
+
118
+ <li class="chapter " data-level="1.3" >
119
+
120
+ <span>
121
+
122
+
123
+ API
124
+
125
+ </span>
126
+
127
+
128
+
129
+ <ul class="articles">
130
+
131
+
132
+ <li class="chapter " data-level="1.3.1" data-path="app.html">
133
+
134
+ <a href="app.html">
135
+
136
+
137
+ App
138
+
139
+ </a>
140
+
141
+
142
+
143
+ </li>
144
+
145
+ <li class="chapter active" data-level="1.3.2" data-path="state.html">
146
+
147
+ <a href="state.html">
148
+
149
+
150
+ State
151
+
152
+ </a>
153
+
154
+
155
+
156
+ </li>
157
+
158
+ <li class="chapter " data-level="1.3.3" data-path="actions.html">
159
+
160
+ <a href="actions.html">
161
+
162
+
163
+ Actions
164
+
165
+ </a>
166
+
167
+
168
+
169
+ </li>
170
+
171
+ <li class="chapter " data-level="1.3.4" data-path="component.html">
172
+
173
+ <a href="component.html">
174
+
175
+
176
+ Component
177
+
178
+ </a>
179
+
180
+
181
+
182
+ </li>
183
+
184
+
185
+ </ul>
186
+
187
+ </li>
188
+
189
+ <li class="chapter " data-level="1.4" >
190
+
191
+ <span>
192
+
193
+
194
+ Guides
195
+
196
+ </span>
197
+
198
+
199
+
200
+ <ul class="articles">
201
+
202
+
203
+ <li class="chapter " data-level="1.4.1" data-path="../guides/debugging.html">
204
+
205
+ <a href="../guides/debugging.html">
206
+
207
+
208
+ Debugging
209
+
210
+ </a>
211
+
212
+
213
+
214
+ </li>
215
+
216
+ <li class="chapter " data-level="1.4.2" data-path="../guides/development.html">
217
+
218
+ <a href="../guides/development.html">
219
+
220
+
221
+ Development
222
+
223
+ </a>
224
+
225
+
226
+
227
+ </li>
228
+
229
+
230
+ </ul>
231
+
232
+ </li>
233
+
234
+
235
+
236
+
237
+ <li class="divider"></li>
238
+
239
+ <li>
240
+ <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
241
+ Published with GitBook
242
+ </a>
243
+ </li>
244
+ </ul>
245
+
246
+
247
+ </nav>
248
+
249
+
250
+ </div>
251
+
252
+ <div class="book-body">
253
+
254
+ <div class="body-inner">
255
+
256
+
257
+
258
+ <div class="book-header" role="navigation">
259
+
260
+
261
+ <!-- Title -->
262
+ <h1>
263
+ <i class="fa fa-circle-o-notch fa-spin"></i>
264
+ <a href=".." >State</a>
265
+ </h1>
266
+ </div>
267
+
268
+
269
+
270
+
271
+ <div class="page-wrapper" tabindex="-1" role="main">
272
+ <div class="page-inner">
273
+
274
+ <div id="book-search-results">
275
+ <div class="search-noresults">
276
+
277
+ <section class="normal markdown-section">
278
+
279
+ <h1 id="ovtostate">Ovto::State</h1>
280
+ <p><code>Ovto::State</code> is like a hash, but members are accessible with name rather than <code>[]</code>.</p>
281
+ <h2 id="example">Example</h2>
282
+ <pre><code class="lang-rb"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">State</span> &lt; Ovto::State</span>
283
+ item <span class="hljs-symbol">:foo</span>
284
+ item <span class="hljs-symbol">:bar</span>
285
+ <span class="hljs-keyword">end</span>
286
+
287
+ state = State.new(<span class="hljs-symbol">foo:</span> <span class="hljs-number">1</span>, <span class="hljs-symbol">bar:</span> <span class="hljs-number">2</span>)
288
+ state.foo <span class="hljs-comment">#=&gt; 1</span>
289
+ state.bar <span class="hljs-comment">#=&gt; 2</span>
290
+ </code></pre>
291
+ <h2 id="default-value">Default value</h2>
292
+ <pre><code class="lang-rb"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">State</span> &lt; Ovto::State</span>
293
+ item <span class="hljs-symbol">:foo</span>, <span class="hljs-symbol">default:</span> <span class="hljs-number">1</span>
294
+ item <span class="hljs-symbol">:bar</span>, <span class="hljs-symbol">default:</span> <span class="hljs-number">2</span>
295
+ <span class="hljs-keyword">end</span>
296
+
297
+ state = State.new
298
+ state.foo <span class="hljs-comment">#=&gt; 1</span>
299
+ state.bar <span class="hljs-comment">#=&gt; 2</span>
300
+ </code></pre>
301
+ <h2 id="immutable">Immutable</h2>
302
+ <p>State objects are immutable. i.e. you cannot update value of a key. Instead, use <code>State#merge</code>.</p>
303
+ <pre><code class="lang-rb">state = State.new(<span class="hljs-symbol">foo:</span> <span class="hljs-number">1</span>, <span class="hljs-symbol">bar:</span> <span class="hljs-number">2</span>)
304
+ new_state = state.merge(<span class="hljs-symbol">bar:</span> <span class="hljs-number">3</span>)
305
+ new_state.foo <span class="hljs-comment">#=&gt; 1</span>
306
+ new_state.bar <span class="hljs-comment">#=&gt; 3</span>
307
+ </code></pre>
308
+ <h2 id="nesting-state">Nesting state</h2>
309
+ <p>For practical apps, you can nest State like this.</p>
310
+ <pre><code class="lang-rb"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Book</span> &lt; Ovto::State</span>
311
+ item <span class="hljs-symbol">:title</span>
312
+ item <span class="hljs-symbol">:author</span>
313
+ <span class="hljs-keyword">end</span>
314
+
315
+ <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">State</span> &lt; Ovto::State</span>
316
+ item <span class="hljs-symbol">:books</span>, []
317
+ <span class="hljs-keyword">end</span>
318
+
319
+ book = Book.new(<span class="hljs-string">&apos;Hello world&apos;</span>, <span class="hljs-string">&apos;taro&apos;</span>)
320
+ state = State.new(<span class="hljs-symbol">books:</span> [book])
321
+ </code></pre>
322
+ <h2 id="defining-instance-methods-of-state">Defining instance methods of state</h2>
323
+ <p>You can define instance methods of state.</p>
324
+ <pre><code class="lang-rb"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Book</span> &lt; Ovto::State</span>
325
+ item <span class="hljs-symbol">:title</span>
326
+ item <span class="hljs-symbol">:author</span>
327
+
328
+ <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">to_text</span></span>
329
+ <span class="hljs-string">&quot;<span class="hljs-subst">#{<span class="hljs-keyword">self</span>.title}</span> (<span class="hljs-subst">#{<span class="hljs-keyword">self</span>.author}</span>)&quot;</span>
330
+ <span class="hljs-keyword">end</span>
331
+ <span class="hljs-keyword">end</span>
332
+
333
+ book = Book.new(<span class="hljs-string">&apos;Hello world&apos;</span>, <span class="hljs-string">&apos;taro&apos;</span>)
334
+ book.to_text <span class="hljs-comment">#=&gt; &quot;Hello world (taro)&quot;</span>
335
+ </code></pre>
336
+ <h2 id="defining-class-methods-of-state">Defining class methods of state</h2>
337
+ <p>Ovto does not have a class like <code>StateList</code>. Just use Array to represent a list of state.</p>
338
+ <p>You can define class methods to manipulate a list of state.</p>
339
+ <pre><code class="lang-rb"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Book</span> &lt; Ovto::State</span>
340
+ item <span class="hljs-symbol">:title</span>
341
+ item <span class="hljs-symbol">:author</span>
342
+
343
+ <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">self</span>.<span class="hljs-title">of_author</span><span class="hljs-params">(books, author)</span></span>
344
+ books.select{|x| x.author == author}
345
+ <span class="hljs-keyword">end</span>
346
+ <span class="hljs-keyword">end</span>
347
+
348
+ <span class="hljs-comment"># Example</span>
349
+ taro_books = Book.of_author(books, <span class="hljs-string">&quot;taro&quot;</span>)
350
+ </code></pre>
351
+
352
+
353
+ </section>
354
+
355
+ </div>
356
+ <div class="search-results">
357
+ <div class="has-results">
358
+
359
+ <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
360
+ <ul class="search-results-list"></ul>
361
+
362
+ </div>
363
+ <div class="no-results">
364
+
365
+ <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
366
+
367
+ </div>
368
+ </div>
369
+ </div>
370
+
371
+ </div>
372
+ </div>
373
+
374
+ </div>
375
+
376
+
377
+
378
+ <a href="app.html" class="navigation navigation-prev " aria-label="Previous page: App">
379
+ <i class="fa fa-angle-left"></i>
380
+ </a>
381
+
382
+
383
+ <a href="actions.html" class="navigation navigation-next " aria-label="Next page: Actions">
384
+ <i class="fa fa-angle-right"></i>
385
+ </a>
386
+
387
+
388
+
389
+ </div>
390
+
391
+ <script>
392
+ var gitbook = gitbook || [];
393
+ gitbook.push(function() {
394
+ gitbook.page.hasChanged({"page":{"title":"State","level":"1.3.2","depth":2,"next":{"title":"Actions","level":"1.3.3","depth":2,"path":"api/actions.md","ref":"api/actions.md","articles":[]},"previous":{"title":"App","level":"1.3.1","depth":2,"path":"api/app.md","ref":"api/app.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"api/state.md","mtime":"2018-05-11T06:21:35.000Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-01T12:07:18.151Z"},"basePath":"..","book":{"language":""}});
395
+ });
396
+ </script>
397
+ </div>
398
+
399
+
400
+ <script src="../gitbook/gitbook.js"></script>
401
+ <script src="../gitbook/theme.js"></script>
402
+
403
+
404
+ <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
405
+
406
+
407
+
408
+ <script src="../gitbook/gitbook-plugin-search/search.js"></script>
409
+
410
+
411
+
412
+ <script src="../gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
413
+
414
+
415
+
416
+ <script src="../gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
417
+
418
+
419
+
420
+ <script src="../gitbook/gitbook-plugin-sharing/buttons.js"></script>
421
+
422
+
423
+
424
+ <script src="../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
425
+
426
+
427
+
428
+ </body>
429
+ </html>
430
+