dh_easy 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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>