dh_easy 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,328 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ File: README
8
+
9
+ &mdash; Documentation by YARD 0.9.20
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "README";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="file_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+ <span class="title">File: README</span>
41
+
42
+ </div>
43
+
44
+ <div id="search">
45
+
46
+ <a class="full_list_link" id="class_list_link"
47
+ href="class_list.html">
48
+
49
+ <svg width="24" height="24">
50
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
51
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
52
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
53
+ </svg>
54
+ </a>
55
+
56
+ </div>
57
+ <div class="clear"></div>
58
+ </div>
59
+
60
+ <div id="content"><div id='filecontents'>
61
+ <p><a href="http://github.com/DataHenOfficial/dh_easy/releases"><img
62
+ src="https://badge.fury.io/rb/dh_easy.svg"></a> <a href="#license"><img
63
+ src="http://img.shields.io/badge/license-MIT-yellowgreen.svg"></a></p>
64
+
65
+ <h1 id="label-DhEasy">DhEasy</h1>
66
+
67
+ <h2 id="label-Description">Description</h2>
68
+
69
+ <p>DhEasy gem collection allow advance DataHen features possible by including
70
+ a collection of specialized gems.</p>
71
+
72
+ <p>Install gem: <code>ruby gem install &#39;dh_easy&#39; </code></p>
73
+
74
+ <p>Require gem: <code>ruby require &#39;dh_easy&#39; </code></p>
75
+
76
+ <p>Included gems documentation: <code> dh_easy-core:
77
+ http://rubydoc.org/gems/dh_easy-core/frames dh_easy-config:
78
+ http://rubydoc.org/gems/dh_easy-config/frames dh_easy-router:
79
+ http://rubydoc.org/gems/dh_easy-router/frames dh_easy-text:
80
+ http://rubydoc.org/gems/dh_easy-text/frames dh_easy-login:
81
+ http://rubydoc.org/gems/dh_easy-login/frames </code></p>
82
+
83
+ <h2 id="label-How+to+implement">How to implement</h2>
84
+
85
+ <h3 id="label-Sample+DataHen+project">Sample DataHen project</h3>
86
+
87
+ <p>Lets take a simple project without <code>dh_easy</code>:</p>
88
+
89
+ <pre class="code ruby"><code class="ruby"># ./config.yaml
90
+
91
+ seeder:
92
+ file: ./seeder/seeder.rb
93
+ disabled: false
94
+ parsers:
95
+ - page_type: search
96
+ file: ./parsers/search.rb
97
+ disabled: false
98
+ - page_type: product
99
+ file: ./parsers/product.rb
100
+ disabled: false
101
+ </code></pre>
102
+
103
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./seeder/seeder.rb
104
+ </span>
105
+ <span class='id identifier rubyid_pages'>pages</span> <span class='op'>&lt;&lt;</span> <span class='lbrace'>{</span>
106
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>url</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>https://example.com/login.rb?query=food</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
107
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>page_type</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>search</span><span class='tstring_end'>&#39;</span></span>
108
+ <span class='rbrace'>}</span>
109
+ </code></pre>
110
+
111
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./parsers/search.rb
112
+ </span>
113
+ <span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cgi</span><span class='tstring_end'>&#39;</span></span>
114
+
115
+ <span class='id identifier rubyid_html'>html</span> <span class='op'>=</span> <span class='const'>Nokogiri</span><span class='period'>.</span><span class='const'>HTML</span> <span class='id identifier rubyid_content'>content</span>
116
+ <span class='id identifier rubyid_html'>html</span><span class='period'>.</span><span class='id identifier rubyid_css'>css</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>.name</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_element'>element</span><span class='op'>|</span>
117
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span>
118
+ <span class='id identifier rubyid_pages'>pages</span> <span class='op'>&lt;&lt;</span> <span class='lbrace'>{</span>
119
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>url</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>https://example.com/product/</span><span class='embexpr_beg'>#{</span><span class='const'>CGI</span><span class='op'>::</span><span class='id identifier rubyid_escape'>escape</span> <span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
120
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>page_type</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>product</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
121
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>vars</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>name</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_name'>name</span><span class='rbrace'>}</span>
122
+ <span class='rbrace'>}</span>
123
+ <span class='kw'>end</span>
124
+ </code></pre>
125
+
126
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./parsers/product.rb
127
+ </span>
128
+ <span class='id identifier rubyid_html'>html</span> <span class='op'>=</span> <span class='const'>Nokogiri</span><span class='period'>.</span><span class='const'>HTML</span> <span class='id identifier rubyid_content'>content</span>
129
+ <span class='id identifier rubyid_description'>description</span> <span class='op'>=</span> <span class='id identifier rubyid_html'>html</span><span class='period'>.</span><span class='id identifier rubyid_css'>css</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>.description</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span>
130
+ <span class='id identifier rubyid_outputs'>outputs</span> <span class='op'>&lt;&lt;</span> <span class='lbrace'>{</span>
131
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>_collection</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>product</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
132
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>name</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_page'>page</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>vars</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>name</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
133
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>description</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_description'>description</span>
134
+ <span class='rbrace'>}</span>
135
+ </code></pre>
136
+
137
+ <h3 id="label-Adding+dh_easy+to+sample+project">Adding dh_easy to sample project</h3>
138
+
139
+ <p>One of DhEasy&#39;s main feature is to allow users to use classes instead
140
+ of raw scripts with the whole <code>datahen</code> gem contexts (seeder,
141
+ parsers, finishers, etc.) functions and objects integreated directly on our
142
+ classes.</p>
143
+
144
+ <p>Converting seeders, parsers and finishers to DhEasy supported classes is
145
+ quite easy, just wrap your seeders and parsers like this:</p>
146
+
147
+ <pre class="code ruby"><code class="ruby"><span class='kw'>class</span> <span class='const'>MySeeder</span>
148
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Core</span><span class='op'>::</span><span class='const'>Plugin</span><span class='op'>::</span><span class='const'>Seeder</span>
149
+
150
+ <span class='comment'># Create &quot;initialize_hook_*&quot; methods instead of &quot;initialize&quot; method
151
+ </span> <span class='comment'># to prevent overriding the logic behind DhEasy
152
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize_hook_my_seeder'>initialize_hook_my_seeder</span> <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
153
+ <span class='ivar'>@my_param</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:my_param</span><span class='rbracket'>]</span>
154
+ <span class='kw'>end</span>
155
+
156
+ <span class='kw'>def</span> <span class='id identifier rubyid_seed'>seed</span>
157
+
158
+ <span class='comment'># Your seeder code goes here
159
+ </span>
160
+ <span class='kw'>end</span>
161
+ <span class='kw'>end</span>
162
+ </code></pre>
163
+
164
+ <pre class="code ruby"><code class="ruby"><span class='kw'>class</span> <span class='const'>MyParser</span>
165
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Core</span><span class='op'>::</span><span class='const'>Plugin</span><span class='op'>::</span><span class='const'>Parser</span>
166
+
167
+ <span class='comment'># Create &quot;initialize_hook_*&quot; methods instead of &quot;initialize&quot; method
168
+ </span> <span class='comment'># to prevent overriding the logic behind DhEasy
169
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize_hook_my_parser'>initialize_hook_my_parser</span> <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
170
+ <span class='ivar'>@my_param</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:my_param</span><span class='rbracket'>]</span>
171
+ <span class='kw'>end</span>
172
+
173
+ <span class='kw'>def</span> <span class='id identifier rubyid_parse'>parse</span>
174
+
175
+ <span class='comment'># Your parser code goes here
176
+ </span>
177
+ <span class='kw'>end</span>
178
+ <span class='kw'>end</span>
179
+ </code></pre>
180
+
181
+ <pre class="code ruby"><code class="ruby"><span class='kw'>class</span> <span class='const'>MyFinisher</span>
182
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Core</span><span class='op'>::</span><span class='const'>Plugin</span><span class='op'>::</span><span class='const'>Finisher</span>
183
+
184
+ <span class='comment'># Create &quot;initialize_hook_*&quot; methods instead of &quot;initialize&quot; method
185
+ </span> <span class='comment'># to prevent overriding the logic behind DhEasy
186
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize_hook_my_parser'>initialize_hook_my_parser</span> <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
187
+ <span class='ivar'>@my_param</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:my_param</span><span class='rbracket'>]</span>
188
+ <span class='kw'>end</span>
189
+
190
+ <span class='kw'>def</span> <span class='id identifier rubyid_finish'>finish</span>
191
+
192
+ <span class='comment'># Your finisher code goes here
193
+ </span>
194
+ <span class='kw'>end</span>
195
+ <span class='kw'>end</span>
196
+ </code></pre>
197
+
198
+ <p>You can also add <code>initialize_hook_</code> methods to extend the
199
+ default <code>initialize</code> provided by DhEasy plugins.</p>
200
+
201
+ <p>Now let&#39;s try this on our sample project&#39;s seeders and parsers:</p>
202
+
203
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./seeder/seeder.rb
204
+ </span>
205
+ <span class='kw'>module</span> <span class='const'>Seeder</span>
206
+ <span class='kw'>class</span> <span class='const'>Seeder</span>
207
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Core</span><span class='op'>::</span><span class='const'>Plugin</span><span class='op'>::</span><span class='const'>Seeder</span>
208
+
209
+ <span class='kw'>def</span> <span class='id identifier rubyid_seed'>seed</span>
210
+ <span class='id identifier rubyid_pages'>pages</span> <span class='op'>&lt;&lt;</span> <span class='lbrace'>{</span>
211
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>url</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>https://example.com/search?query=food</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
212
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>page_type</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>search</span><span class='tstring_end'>&#39;</span></span>
213
+ <span class='rbrace'>}</span>
214
+ <span class='kw'>end</span>
215
+ <span class='kw'>end</span>
216
+ <span class='kw'>end</span>
217
+ </code></pre>
218
+
219
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./parsers/search.rb
220
+ </span>
221
+ <span class='kw'>module</span> <span class='const'>Parsers</span>
222
+ <span class='kw'>class</span> <span class='const'>Search</span>
223
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Core</span><span class='op'>::</span><span class='const'>Plugin</span><span class='op'>::</span><span class='const'>Parser</span>
224
+
225
+ <span class='kw'>def</span> <span class='id identifier rubyid_parse'>parse</span>
226
+ <span class='id identifier rubyid_html'>html</span> <span class='op'>=</span> <span class='const'>Nokogiri</span><span class='period'>.</span><span class='const'>HTML</span> <span class='id identifier rubyid_content'>content</span>
227
+ <span class='id identifier rubyid_html'>html</span><span class='period'>.</span><span class='id identifier rubyid_css'>css</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>.name</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_element'>element</span><span class='op'>|</span>
228
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span>
229
+ <span class='id identifier rubyid_pages'>pages</span> <span class='op'>&lt;&lt;</span> <span class='lbrace'>{</span>
230
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>url</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>https://example.com/product/</span><span class='embexpr_beg'>#{</span><span class='const'>CGI</span><span class='op'>::</span><span class='id identifier rubyid_escape'>escape</span> <span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
231
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>page_type</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>product</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
232
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>vars</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>name</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_name'>name</span><span class='rbrace'>}</span>
233
+ <span class='rbrace'>}</span>
234
+ <span class='kw'>end</span>
235
+ <span class='kw'>end</span>
236
+ <span class='kw'>end</span>
237
+ <span class='kw'>end</span>
238
+ </code></pre>
239
+
240
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./parsers/product.rb
241
+ </span>
242
+ <span class='kw'>module</span> <span class='const'>Parsers</span>
243
+ <span class='kw'>class</span> <span class='const'>Product</span>
244
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Core</span><span class='op'>::</span><span class='const'>Plugin</span><span class='op'>::</span><span class='const'>Parser</span>
245
+
246
+ <span class='kw'>def</span> <span class='id identifier rubyid_parse'>parse</span>
247
+ <span class='id identifier rubyid_html'>html</span> <span class='op'>=</span> <span class='const'>Nokogiri</span><span class='period'>.</span><span class='const'>HTML</span> <span class='id identifier rubyid_content'>content</span>
248
+ <span class='id identifier rubyid_description'>description</span> <span class='op'>=</span> <span class='id identifier rubyid_html'>html</span><span class='period'>.</span><span class='id identifier rubyid_css'>css</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>.description</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span>
249
+ <span class='id identifier rubyid_outputs'>outputs</span> <span class='op'>&lt;&lt;</span> <span class='lbrace'>{</span>
250
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>_collection</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>product</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
251
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>name</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_page'>page</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>vars</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>name</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
252
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>description</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_description'>description</span>
253
+ <span class='rbrace'>}</span>
254
+ <span class='kw'>end</span>
255
+ <span class='kw'>end</span>
256
+ <span class='kw'>end</span>
257
+ </code></pre>
258
+
259
+ <p>Next step is to add router capabilities to consume these classes. To do
260
+ this, let&#39;s create the routers and require our seeder and parsers
261
+ classes, like this:</p>
262
+
263
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./router/seeder.rb
264
+ </span>
265
+ <span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dh_easy/router</span><span class='tstring_end'>&#39;</span></span>
266
+ <span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>./seeder/seeder</span><span class='tstring_end'>&#39;</span></span>
267
+
268
+ <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Router</span><span class='op'>::</span><span class='const'>Seeder</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='period'>.</span><span class='id identifier rubyid_route'>route</span> <span class='label'>context:</span> <span class='kw'>self</span>
269
+ </code></pre>
270
+
271
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./router/parser.rb
272
+ </span>
273
+ <span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cgi</span><span class='tstring_end'>&#39;</span></span>
274
+ <span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dh_easy/router</span><span class='tstring_end'>&#39;</span></span>
275
+ <span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>./parsers/search</span><span class='tstring_end'>&#39;</span></span>
276
+ <span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>./parsers/product</span><span class='tstring_end'>&#39;</span></span>
277
+
278
+ <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Router</span><span class='op'>::</span><span class='const'>Parser</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='period'>.</span><span class='id identifier rubyid_route'>route</span> <span class='label'>context:</span> <span class='kw'>self</span>
279
+ </code></pre>
280
+
281
+ <p>Now lets create our <code>./dh_easy.yaml</code> config file to link our
282
+ routers to our new seeder and parsers classes:</p>
283
+
284
+ <pre class="code ruby"><code class="ruby"># ./dh_easy.yaml
285
+
286
+ router:
287
+ parser:
288
+ routes:
289
+ - page_type: search
290
+ class: Parsers::Search
291
+ - page_type: product
292
+ class: Parsers::Product
293
+
294
+ seeder:
295
+ routes:
296
+ - class: Seeder::Seeder
297
+ </code></pre>
298
+
299
+ <p>Finally, we need to modify our <code>./config.yaml</code> to use our
300
+ routers:</p>
301
+
302
+ <pre class="code ruby"><code class="ruby"># ./config.yaml
303
+
304
+ seeder:
305
+ file: ./router/seeder.rb
306
+ disabled: false
307
+
308
+ parsers:
309
+ - page_type: search
310
+ file: ./router/parser.rb
311
+ disabled: false
312
+ - page_type: product
313
+ file: ./router/parser.rb
314
+ disabled: false
315
+ </code></pre>
316
+
317
+ <p>Hurray! you have successfullly implemented DhEasy on your project.</p>
318
+ </div></div>
319
+
320
+ <div id="footer">
321
+ Generated on Wed Dec 4 23:26:20 2019 by
322
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
323
+ 0.9.20 (ruby-2.5.3).
324
+ </div>
325
+
326
+ </div>
327
+ </body>
328
+ </html>
@@ -0,0 +1,56 @@
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>File 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">File 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="file">
45
+
46
+
47
+ <li id="object_README" class="odd">
48
+ <div class="item"><span class="object_link"><a href="index.html" title="README">README</a></span></div>
49
+ </li>
50
+
51
+
52
+
53
+ </ul>
54
+ </div>
55
+ </body>
56
+ </html>
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Documentation by YARD 0.9.20</title>
6
+ </head>
7
+ <script type="text/javascript" charset="utf-8">
8
+ var match = unescape(window.location.hash).match(/^#!(.+)/);
9
+ var name = match ? match[1] : 'index.html';
10
+ name = name.replace(/^(\w+):\/\//, '').replace(/^\/\//, '');
11
+ window.top.location = name;
12
+ </script>
13
+ <noscript>
14
+ <h1>Oops!</h1>
15
+ <h2>YARD requires JavaScript!</h2>
16
+ </noscript>
17
+ </html>
@@ -0,0 +1,328 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ File: README
8
+
9
+ &mdash; Documentation by YARD 0.9.20
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "README";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+ <span class="title">File: README</span>
41
+
42
+ </div>
43
+
44
+ <div id="search">
45
+
46
+ <a class="full_list_link" id="class_list_link"
47
+ href="class_list.html">
48
+
49
+ <svg width="24" height="24">
50
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
51
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
52
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
53
+ </svg>
54
+ </a>
55
+
56
+ </div>
57
+ <div class="clear"></div>
58
+ </div>
59
+
60
+ <div id="content"><div id='filecontents'>
61
+ <p><a href="http://github.com/DataHenOfficial/dh_easy/releases"><img
62
+ src="https://badge.fury.io/rb/dh_easy.svg"></a> <a href="#license"><img
63
+ src="http://img.shields.io/badge/license-MIT-yellowgreen.svg"></a></p>
64
+
65
+ <h1 id="label-DhEasy">DhEasy</h1>
66
+
67
+ <h2 id="label-Description">Description</h2>
68
+
69
+ <p>DhEasy gem collection allow advance DataHen features possible by including
70
+ a collection of specialized gems.</p>
71
+
72
+ <p>Install gem: <code>ruby gem install &#39;dh_easy&#39; </code></p>
73
+
74
+ <p>Require gem: <code>ruby require &#39;dh_easy&#39; </code></p>
75
+
76
+ <p>Included gems documentation: <code> dh_easy-core:
77
+ http://rubydoc.org/gems/dh_easy-core/frames dh_easy-config:
78
+ http://rubydoc.org/gems/dh_easy-config/frames dh_easy-router:
79
+ http://rubydoc.org/gems/dh_easy-router/frames dh_easy-text:
80
+ http://rubydoc.org/gems/dh_easy-text/frames dh_easy-login:
81
+ http://rubydoc.org/gems/dh_easy-login/frames </code></p>
82
+
83
+ <h2 id="label-How+to+implement">How to implement</h2>
84
+
85
+ <h3 id="label-Sample+DataHen+project">Sample DataHen project</h3>
86
+
87
+ <p>Lets take a simple project without <code>dh_easy</code>:</p>
88
+
89
+ <pre class="code ruby"><code class="ruby"># ./config.yaml
90
+
91
+ seeder:
92
+ file: ./seeder/seeder.rb
93
+ disabled: false
94
+ parsers:
95
+ - page_type: search
96
+ file: ./parsers/search.rb
97
+ disabled: false
98
+ - page_type: product
99
+ file: ./parsers/product.rb
100
+ disabled: false
101
+ </code></pre>
102
+
103
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./seeder/seeder.rb
104
+ </span>
105
+ <span class='id identifier rubyid_pages'>pages</span> <span class='op'>&lt;&lt;</span> <span class='lbrace'>{</span>
106
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>url</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>https://example.com/login.rb?query=food</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
107
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>page_type</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>search</span><span class='tstring_end'>&#39;</span></span>
108
+ <span class='rbrace'>}</span>
109
+ </code></pre>
110
+
111
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./parsers/search.rb
112
+ </span>
113
+ <span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cgi</span><span class='tstring_end'>&#39;</span></span>
114
+
115
+ <span class='id identifier rubyid_html'>html</span> <span class='op'>=</span> <span class='const'>Nokogiri</span><span class='period'>.</span><span class='const'>HTML</span> <span class='id identifier rubyid_content'>content</span>
116
+ <span class='id identifier rubyid_html'>html</span><span class='period'>.</span><span class='id identifier rubyid_css'>css</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>.name</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_element'>element</span><span class='op'>|</span>
117
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span>
118
+ <span class='id identifier rubyid_pages'>pages</span> <span class='op'>&lt;&lt;</span> <span class='lbrace'>{</span>
119
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>url</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>https://example.com/product/</span><span class='embexpr_beg'>#{</span><span class='const'>CGI</span><span class='op'>::</span><span class='id identifier rubyid_escape'>escape</span> <span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
120
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>page_type</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>product</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
121
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>vars</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>name</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_name'>name</span><span class='rbrace'>}</span>
122
+ <span class='rbrace'>}</span>
123
+ <span class='kw'>end</span>
124
+ </code></pre>
125
+
126
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./parsers/product.rb
127
+ </span>
128
+ <span class='id identifier rubyid_html'>html</span> <span class='op'>=</span> <span class='const'>Nokogiri</span><span class='period'>.</span><span class='const'>HTML</span> <span class='id identifier rubyid_content'>content</span>
129
+ <span class='id identifier rubyid_description'>description</span> <span class='op'>=</span> <span class='id identifier rubyid_html'>html</span><span class='period'>.</span><span class='id identifier rubyid_css'>css</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>.description</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span>
130
+ <span class='id identifier rubyid_outputs'>outputs</span> <span class='op'>&lt;&lt;</span> <span class='lbrace'>{</span>
131
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>_collection</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>product</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
132
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>name</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_page'>page</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>vars</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>name</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
133
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>description</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_description'>description</span>
134
+ <span class='rbrace'>}</span>
135
+ </code></pre>
136
+
137
+ <h3 id="label-Adding+dh_easy+to+sample+project">Adding dh_easy to sample project</h3>
138
+
139
+ <p>One of DhEasy&#39;s main feature is to allow users to use classes instead
140
+ of raw scripts with the whole <code>datahen</code> gem contexts (seeder,
141
+ parsers, finishers, etc.) functions and objects integreated directly on our
142
+ classes.</p>
143
+
144
+ <p>Converting seeders, parsers and finishers to DhEasy supported classes is
145
+ quite easy, just wrap your seeders and parsers like this:</p>
146
+
147
+ <pre class="code ruby"><code class="ruby"><span class='kw'>class</span> <span class='const'>MySeeder</span>
148
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Core</span><span class='op'>::</span><span class='const'>Plugin</span><span class='op'>::</span><span class='const'>Seeder</span>
149
+
150
+ <span class='comment'># Create &quot;initialize_hook_*&quot; methods instead of &quot;initialize&quot; method
151
+ </span> <span class='comment'># to prevent overriding the logic behind DhEasy
152
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize_hook_my_seeder'>initialize_hook_my_seeder</span> <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
153
+ <span class='ivar'>@my_param</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:my_param</span><span class='rbracket'>]</span>
154
+ <span class='kw'>end</span>
155
+
156
+ <span class='kw'>def</span> <span class='id identifier rubyid_seed'>seed</span>
157
+
158
+ <span class='comment'># Your seeder code goes here
159
+ </span>
160
+ <span class='kw'>end</span>
161
+ <span class='kw'>end</span>
162
+ </code></pre>
163
+
164
+ <pre class="code ruby"><code class="ruby"><span class='kw'>class</span> <span class='const'>MyParser</span>
165
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Core</span><span class='op'>::</span><span class='const'>Plugin</span><span class='op'>::</span><span class='const'>Parser</span>
166
+
167
+ <span class='comment'># Create &quot;initialize_hook_*&quot; methods instead of &quot;initialize&quot; method
168
+ </span> <span class='comment'># to prevent overriding the logic behind DhEasy
169
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize_hook_my_parser'>initialize_hook_my_parser</span> <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
170
+ <span class='ivar'>@my_param</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:my_param</span><span class='rbracket'>]</span>
171
+ <span class='kw'>end</span>
172
+
173
+ <span class='kw'>def</span> <span class='id identifier rubyid_parse'>parse</span>
174
+
175
+ <span class='comment'># Your parser code goes here
176
+ </span>
177
+ <span class='kw'>end</span>
178
+ <span class='kw'>end</span>
179
+ </code></pre>
180
+
181
+ <pre class="code ruby"><code class="ruby"><span class='kw'>class</span> <span class='const'>MyFinisher</span>
182
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Core</span><span class='op'>::</span><span class='const'>Plugin</span><span class='op'>::</span><span class='const'>Finisher</span>
183
+
184
+ <span class='comment'># Create &quot;initialize_hook_*&quot; methods instead of &quot;initialize&quot; method
185
+ </span> <span class='comment'># to prevent overriding the logic behind DhEasy
186
+ </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize_hook_my_parser'>initialize_hook_my_parser</span> <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
187
+ <span class='ivar'>@my_param</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:my_param</span><span class='rbracket'>]</span>
188
+ <span class='kw'>end</span>
189
+
190
+ <span class='kw'>def</span> <span class='id identifier rubyid_finish'>finish</span>
191
+
192
+ <span class='comment'># Your finisher code goes here
193
+ </span>
194
+ <span class='kw'>end</span>
195
+ <span class='kw'>end</span>
196
+ </code></pre>
197
+
198
+ <p>You can also add <code>initialize_hook_</code> methods to extend the
199
+ default <code>initialize</code> provided by DhEasy plugins.</p>
200
+
201
+ <p>Now let&#39;s try this on our sample project&#39;s seeders and parsers:</p>
202
+
203
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./seeder/seeder.rb
204
+ </span>
205
+ <span class='kw'>module</span> <span class='const'>Seeder</span>
206
+ <span class='kw'>class</span> <span class='const'>Seeder</span>
207
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Core</span><span class='op'>::</span><span class='const'>Plugin</span><span class='op'>::</span><span class='const'>Seeder</span>
208
+
209
+ <span class='kw'>def</span> <span class='id identifier rubyid_seed'>seed</span>
210
+ <span class='id identifier rubyid_pages'>pages</span> <span class='op'>&lt;&lt;</span> <span class='lbrace'>{</span>
211
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>url</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>https://example.com/search?query=food</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
212
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>page_type</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>search</span><span class='tstring_end'>&#39;</span></span>
213
+ <span class='rbrace'>}</span>
214
+ <span class='kw'>end</span>
215
+ <span class='kw'>end</span>
216
+ <span class='kw'>end</span>
217
+ </code></pre>
218
+
219
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./parsers/search.rb
220
+ </span>
221
+ <span class='kw'>module</span> <span class='const'>Parsers</span>
222
+ <span class='kw'>class</span> <span class='const'>Search</span>
223
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Core</span><span class='op'>::</span><span class='const'>Plugin</span><span class='op'>::</span><span class='const'>Parser</span>
224
+
225
+ <span class='kw'>def</span> <span class='id identifier rubyid_parse'>parse</span>
226
+ <span class='id identifier rubyid_html'>html</span> <span class='op'>=</span> <span class='const'>Nokogiri</span><span class='period'>.</span><span class='const'>HTML</span> <span class='id identifier rubyid_content'>content</span>
227
+ <span class='id identifier rubyid_html'>html</span><span class='period'>.</span><span class='id identifier rubyid_css'>css</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>.name</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_element'>element</span><span class='op'>|</span>
228
+ <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='id identifier rubyid_element'>element</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span>
229
+ <span class='id identifier rubyid_pages'>pages</span> <span class='op'>&lt;&lt;</span> <span class='lbrace'>{</span>
230
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>url</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>https://example.com/product/</span><span class='embexpr_beg'>#{</span><span class='const'>CGI</span><span class='op'>::</span><span class='id identifier rubyid_escape'>escape</span> <span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
231
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>page_type</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>product</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
232
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>vars</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>name</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_name'>name</span><span class='rbrace'>}</span>
233
+ <span class='rbrace'>}</span>
234
+ <span class='kw'>end</span>
235
+ <span class='kw'>end</span>
236
+ <span class='kw'>end</span>
237
+ <span class='kw'>end</span>
238
+ </code></pre>
239
+
240
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./parsers/product.rb
241
+ </span>
242
+ <span class='kw'>module</span> <span class='const'>Parsers</span>
243
+ <span class='kw'>class</span> <span class='const'>Product</span>
244
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Core</span><span class='op'>::</span><span class='const'>Plugin</span><span class='op'>::</span><span class='const'>Parser</span>
245
+
246
+ <span class='kw'>def</span> <span class='id identifier rubyid_parse'>parse</span>
247
+ <span class='id identifier rubyid_html'>html</span> <span class='op'>=</span> <span class='const'>Nokogiri</span><span class='period'>.</span><span class='const'>HTML</span> <span class='id identifier rubyid_content'>content</span>
248
+ <span class='id identifier rubyid_description'>description</span> <span class='op'>=</span> <span class='id identifier rubyid_html'>html</span><span class='period'>.</span><span class='id identifier rubyid_css'>css</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>.description</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_text'>text</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span>
249
+ <span class='id identifier rubyid_outputs'>outputs</span> <span class='op'>&lt;&lt;</span> <span class='lbrace'>{</span>
250
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>_collection</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>product</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
251
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>name</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_page'>page</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>vars</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>name</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
252
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>description</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_description'>description</span>
253
+ <span class='rbrace'>}</span>
254
+ <span class='kw'>end</span>
255
+ <span class='kw'>end</span>
256
+ <span class='kw'>end</span>
257
+ </code></pre>
258
+
259
+ <p>Next step is to add router capabilities to consume these classes. To do
260
+ this, let&#39;s create the routers and require our seeder and parsers
261
+ classes, like this:</p>
262
+
263
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./router/seeder.rb
264
+ </span>
265
+ <span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dh_easy/router</span><span class='tstring_end'>&#39;</span></span>
266
+ <span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>./seeder/seeder</span><span class='tstring_end'>&#39;</span></span>
267
+
268
+ <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Router</span><span class='op'>::</span><span class='const'>Seeder</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='period'>.</span><span class='id identifier rubyid_route'>route</span> <span class='label'>context:</span> <span class='kw'>self</span>
269
+ </code></pre>
270
+
271
+ <pre class="code ruby"><code class="ruby"><span class='comment'># ./router/parser.rb
272
+ </span>
273
+ <span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cgi</span><span class='tstring_end'>&#39;</span></span>
274
+ <span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>dh_easy/router</span><span class='tstring_end'>&#39;</span></span>
275
+ <span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>./parsers/search</span><span class='tstring_end'>&#39;</span></span>
276
+ <span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>./parsers/product</span><span class='tstring_end'>&#39;</span></span>
277
+
278
+ <span class='const'><span class='object_link'><a href="DhEasy.html" title="DhEasy (module)">DhEasy</a></span></span><span class='op'>::</span><span class='const'>Router</span><span class='op'>::</span><span class='const'>Parser</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='period'>.</span><span class='id identifier rubyid_route'>route</span> <span class='label'>context:</span> <span class='kw'>self</span>
279
+ </code></pre>
280
+
281
+ <p>Now lets create our <code>./dh_easy.yaml</code> config file to link our
282
+ routers to our new seeder and parsers classes:</p>
283
+
284
+ <pre class="code ruby"><code class="ruby"># ./dh_easy.yaml
285
+
286
+ router:
287
+ parser:
288
+ routes:
289
+ - page_type: search
290
+ class: Parsers::Search
291
+ - page_type: product
292
+ class: Parsers::Product
293
+
294
+ seeder:
295
+ routes:
296
+ - class: Seeder::Seeder
297
+ </code></pre>
298
+
299
+ <p>Finally, we need to modify our <code>./config.yaml</code> to use our
300
+ routers:</p>
301
+
302
+ <pre class="code ruby"><code class="ruby"># ./config.yaml
303
+
304
+ seeder:
305
+ file: ./router/seeder.rb
306
+ disabled: false
307
+
308
+ parsers:
309
+ - page_type: search
310
+ file: ./router/parser.rb
311
+ disabled: false
312
+ - page_type: product
313
+ file: ./router/parser.rb
314
+ disabled: false
315
+ </code></pre>
316
+
317
+ <p>Hurray! you have successfullly implemented DhEasy on your project.</p>
318
+ </div></div>
319
+
320
+ <div id="footer">
321
+ Generated on Wed Dec 4 23:26:20 2019 by
322
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
323
+ 0.9.20 (ruby-2.5.3).
324
+ </div>
325
+
326
+ </div>
327
+ </body>
328
+ </html>