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.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.travis.yml +7 -0
- data/.yardopts +1 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/LICENSE +21 -0
- data/README.md +267 -0
- data/Rakefile +22 -0
- data/dh_easy.gemspec +52 -0
- data/doc/DhEasy.html +148 -0
- data/doc/_index.html +107 -0
- data/doc/class_list.html +51 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +58 -0
- data/doc/css/style.css +496 -0
- data/doc/file.README.html +328 -0
- data/doc/file_list.html +56 -0
- data/doc/frames.html +17 -0
- data/doc/index.html +328 -0
- data/doc/js/app.js +303 -0
- data/doc/js/full_list.js +216 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +51 -0
- data/doc/top-level-namespace.html +110 -0
- data/lib/dh_easy.rb +10 -0
- data/lib/dh_easy/version.rb +4 -0
- metadata +227 -0
|
@@ -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
|
+
— 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> »
|
|
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 'dh_easy' </code></p>
|
|
73
|
+
|
|
74
|
+
<p>Require gem: <code>ruby require 'dh_easy' </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'><<</span> <span class='lbrace'>{</span>
|
|
106
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>url</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>https://example.com/login.rb?query=food</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
107
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>page_type</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>search</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>cgi</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>.name</span><span class='tstring_end'>'</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'><<</span> <span class='lbrace'>{</span>
|
|
119
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>url</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>"</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'>"</span></span><span class='comma'>,</span>
|
|
120
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>page_type</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>product</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
121
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>vars</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>name</span><span class='tstring_end'>'</span></span> <span class='op'>=></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'>'</span><span class='tstring_content'>.description</span><span class='tstring_end'>'</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'><<</span> <span class='lbrace'>{</span>
|
|
131
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>_collection</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>product</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
132
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>name</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='id identifier rubyid_page'>page</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>vars</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>name</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
|
|
133
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>description</span><span class='tstring_end'>'</span></span> <span class='op'>=></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'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 "initialize_hook_*" methods instead of "initialize" 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 "initialize_hook_*" methods instead of "initialize" 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 "initialize_hook_*" methods instead of "initialize" 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's try this on our sample project'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'><<</span> <span class='lbrace'>{</span>
|
|
211
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>url</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>https://example.com/search?query=food</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
212
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>page_type</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>search</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>.name</span><span class='tstring_end'>'</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'><<</span> <span class='lbrace'>{</span>
|
|
230
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>url</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>"</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'>"</span></span><span class='comma'>,</span>
|
|
231
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>page_type</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>product</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
232
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>vars</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>name</span><span class='tstring_end'>'</span></span> <span class='op'>=></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'>'</span><span class='tstring_content'>.description</span><span class='tstring_end'>'</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'><<</span> <span class='lbrace'>{</span>
|
|
250
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>_collection</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>product</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
251
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>name</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='id identifier rubyid_page'>page</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>vars</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>name</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
|
|
252
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>description</span><span class='tstring_end'>'</span></span> <span class='op'>=></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'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'>'</span><span class='tstring_content'>dh_easy/router</span><span class='tstring_end'>'</span></span>
|
|
266
|
+
<span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>./seeder/seeder</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>cgi</span><span class='tstring_end'>'</span></span>
|
|
274
|
+
<span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>dh_easy/router</span><span class='tstring_end'>'</span></span>
|
|
275
|
+
<span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>./parsers/search</span><span class='tstring_end'>'</span></span>
|
|
276
|
+
<span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>./parsers/product</span><span class='tstring_end'>'</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>
|
data/doc/file_list.html
ADDED
|
@@ -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>
|
data/doc/frames.html
ADDED
|
@@ -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>
|
data/doc/index.html
ADDED
|
@@ -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
|
+
— 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> »
|
|
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 'dh_easy' </code></p>
|
|
73
|
+
|
|
74
|
+
<p>Require gem: <code>ruby require 'dh_easy' </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'><<</span> <span class='lbrace'>{</span>
|
|
106
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>url</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>https://example.com/login.rb?query=food</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
107
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>page_type</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>search</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>cgi</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>.name</span><span class='tstring_end'>'</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'><<</span> <span class='lbrace'>{</span>
|
|
119
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>url</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>"</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'>"</span></span><span class='comma'>,</span>
|
|
120
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>page_type</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>product</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
121
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>vars</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>name</span><span class='tstring_end'>'</span></span> <span class='op'>=></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'>'</span><span class='tstring_content'>.description</span><span class='tstring_end'>'</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'><<</span> <span class='lbrace'>{</span>
|
|
131
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>_collection</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>product</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
132
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>name</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='id identifier rubyid_page'>page</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>vars</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>name</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
|
|
133
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>description</span><span class='tstring_end'>'</span></span> <span class='op'>=></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'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 "initialize_hook_*" methods instead of "initialize" 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 "initialize_hook_*" methods instead of "initialize" 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 "initialize_hook_*" methods instead of "initialize" 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's try this on our sample project'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'><<</span> <span class='lbrace'>{</span>
|
|
211
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>url</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>https://example.com/search?query=food</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
212
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>page_type</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>search</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>.name</span><span class='tstring_end'>'</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'><<</span> <span class='lbrace'>{</span>
|
|
230
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>url</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>"</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'>"</span></span><span class='comma'>,</span>
|
|
231
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>page_type</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>product</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
232
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>vars</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>name</span><span class='tstring_end'>'</span></span> <span class='op'>=></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'>'</span><span class='tstring_content'>.description</span><span class='tstring_end'>'</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'><<</span> <span class='lbrace'>{</span>
|
|
250
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>_collection</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>product</span><span class='tstring_end'>'</span></span><span class='comma'>,</span>
|
|
251
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>name</span><span class='tstring_end'>'</span></span> <span class='op'>=></span> <span class='id identifier rubyid_page'>page</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>vars</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>name</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
|
|
252
|
+
<span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>description</span><span class='tstring_end'>'</span></span> <span class='op'>=></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'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'>'</span><span class='tstring_content'>dh_easy/router</span><span class='tstring_end'>'</span></span>
|
|
266
|
+
<span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>./seeder/seeder</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>cgi</span><span class='tstring_end'>'</span></span>
|
|
274
|
+
<span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>dh_easy/router</span><span class='tstring_end'>'</span></span>
|
|
275
|
+
<span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>./parsers/search</span><span class='tstring_end'>'</span></span>
|
|
276
|
+
<span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>./parsers/product</span><span class='tstring_end'>'</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>
|