konstruct 0.9.1 → 1.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 47a7e483bdf66eea90939bc07987b9282cc3c1cb
4
- data.tar.gz: 5b24e1634b7a0c6815ee559a1d31cbd52728138d
3
+ metadata.gz: eea3b69e1b18ba332817635e57c28aa3abe6811b
4
+ data.tar.gz: f999fd8311e6a205ef5397550cb664050768d783
5
5
  SHA512:
6
- metadata.gz: e5efbe44fafe5ef72d82905a70fe0ec2d8c5dc08adaaa916c2f3723db911294e9192c0dbd14dd5ca30abc92a5ce897758a6927f06492ee850fa7f883007bfe6c
7
- data.tar.gz: 8bd43f73eabbfdf6962cc761b712c5857f2e0fe3319394f3b912f04ce8d32c9222b2325698b2f32cbc97481224077d72a198f4172580cad0a6b05df3a566a2d1
6
+ metadata.gz: 8cbca349807f4f55af993c785186b960318637ffb05284093e595458ebabe4fabb3d8aae49b561d6c7fa32dab4b4109259866571c17119cf5ca5f00199737071
7
+ data.tar.gz: 418700fe2bfaf813edbbf86631f771b1de014f4acac03d47e5ff2ad1bd97f6289ffd7a218732cc020223553b52898306708f26d9bf1e824fe333d88281eb6a0e
data/README.md CHANGED
@@ -4,13 +4,12 @@
4
4
 
5
5
  The Konstruct Cli provides tools to make working with Konstruct painless and quick. You can access documentation, build a new project structure and scaffold a new site with simple to use commands.
6
6
 
7
- ### Features
7
+ ### Key Features
8
8
 
9
9
  - Set up a new project structure in seconds.
10
10
  - Scaffold out a new HTML, Jekyll or Angular site in seconds.
11
11
  - Gulp in a central location.
12
- - Browserify JS architecture.
13
- - Usage statistics (local only). *Coming Soon*
12
+ - Develop with Browserify & PostCSS.
14
13
  - Quick link to Konstruct Documentation.
15
14
 
16
15
  ## Installation
@@ -18,38 +17,51 @@ The Konstruct Cli provides tools to make working with Konstruct painless and qui
18
17
  You can install Konstruct Cli by running:
19
18
 
20
19
  $ gem install konstruct
21
-
22
- When it's installed simply run:
23
-
24
- $ konstruct
25
20
 
26
- ## Usage
21
+ ## Commands
27
22
 
28
23
  The Cli has a few very simple commands. If you get stuck simply `$ konstruct --help` for help. You can also get instructions for every command with `$ konstruct [COMMAND] --help`
29
24
 
30
- ### Available Commands
25
+ ### Konstruct Commands
31
26
 
32
- #### Scaffold
33
-
34
- $ konstruct scaffold
27
+ * [$ konstruct folders](#)
28
+ * [$ konstruct create](#)
29
+ * [$ konstruct refresh](#)
30
+ * [$ konstruct watch](#)
31
+ * [$ konstruct serve](#)
32
+ * [$ konstruct documentation](#documentation)
33
+
34
+ #### Folders
35
+
36
+ $ konstruct folders
35
37
 
36
- Scaffolds out a new site based on your choice of technology (Static html, Jekyll or Angularjs), installs default dependencies & initialises your new site with your GIT repository.
38
+ Scaffolds a set of project folders from a template to help you organise your project better.
39
+
40
+ **Customize Template**: You can customize the folder structure in `~/.konstruct/config.yml`.
37
41
 
38
- #### Develop
42
+ #### Create
43
+
44
+ $ konstruct create [options]
39
45
 
40
- $ konstruct develop
46
+ **Options:**
47
+ * --sudo : Run NPM install as root if your node installation requires root privileges.
41
48
 
42
- Determines the type of site you are building, and runs a centrally installed gulp task accordingly.
49
+ Creates a new Konstruct starter project through an interactive wizard.
43
50
 
44
- #### Project
51
+ #### Refresh
45
52
 
46
- $ konstruct project
53
+ $ konstruct refresh [options]
54
+
55
+ **Options:**
56
+ * --sudo : Run NPM install as root if your node installation requires root privileges.
47
57
 
48
- The project command builds a basic starter project template for common website projects. It builds common folders to ensure your project is tidy and organised.
58
+ Refreshes the project by installing dependencies again. Useful if you inherit a repo from another developer.
59
+
60
+ #### Watch
49
61
 
50
- #### Stat
62
+ $ konstruct watch
51
63
 
52
- This feature is coming soon.
64
+ Runs the global Gulp tools from your current working directory.
53
65
 
54
66
  #### Documentation
55
67
 
@@ -57,12 +69,6 @@ This feature is coming soon.
57
69
 
58
70
  Loads up the [Konstruct Documentation](http://konstruct.github.io/) in your default browser.
59
71
 
60
- #### Init
61
-
62
- $ konstruct init
63
-
64
- Initialises the Cli by installing any libraries and extensions you might require to work with Konstruct. This command only runs once (usually when you run `$ konstruct` for the first time), and then simply displays a welcome screen.
65
-
66
72
  ## Contributing
67
73
 
68
74
  Bug reports and pull requests are welcome on GitHub at https://github.com/konstruct/konstruct.cli. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
@@ -17,15 +17,15 @@ Gem::Specification.new do |spec|
17
17
  spec.files = `git ls-files`.split("\n")
18
18
  spec.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
19
19
  spec.require_paths = ['lib']
20
-
21
- dependencies = ['commander', 'minigit', 'paint', 'launchy', 'json']
22
-
20
+
21
+ dependencies = ['commander', 'minigit', 'paint', 'launchy', 'json', 'xml-simple']
22
+
23
23
  dependencies.each { |d|
24
-
24
+
25
25
  spec.add_dependency d
26
-
26
+
27
27
  }
28
28
 
29
29
  spec.add_development_dependency "bundler", "~> 1.11"
30
30
  spec.add_development_dependency "rake", "~> 10.0"
31
- end
31
+ end
@@ -1,56 +1,63 @@
1
- # KONSTRUCT CLI [ KONSTRUCT MODULE ] ==================================================================================
1
+ # KONSTRUCT CLI [ DEVELOPMENT TASKS ] ==========================================
2
2
 
3
- # ====== INDEX =======================================================================================================
3
+ # ====== INDEX ================================================================
4
4
  # ==
5
- # == A. SKELETON PROJECT CREATOR
5
+ # == 1. WATCH
6
6
  # ==
7
- # ====== INDEX =======================================================================================================
8
-
9
- # A. SKELETON PROJECT CREATOR +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7
+ # ====== INDEX ================================================================
10
8
 
11
9
  module Konstruct
12
-
13
- class Cli
14
-
15
- def develop(path)
16
-
17
- # B.1. INITIALISE FUNCTIONS -------------------------------------------------------------------------------
18
-
19
- msg = Util::Message.new()
20
- fs = Util::FS.new()
21
- gulp = Util::Gulp.new()
22
-
23
- # B.1. END ------------------------------------------------------------------------------------------------
24
-
25
- # B.2. DETERMINE WHAT TOOL TO RUN -------------------------------------------------------------------------
26
-
27
- site = fs.read_json(path)
28
- type = site['type']
29
-
30
- if type == "Default" || type == "Angular"
31
-
32
- serving = true
33
-
34
- gulp.default(path, serving)
35
-
36
- end
37
-
38
- if type == "Jekyll"
39
-
40
- serving = false
41
-
42
- gulp.default(path, serving)
43
-
44
- end
45
-
46
- # B.2. END ------------------------------------------------------------------------------------------------
47
-
48
- end
49
-
10
+
11
+ class Develop
12
+
13
+ # 1. WATCH +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
14
+
15
+ def watch(path)
16
+
17
+ # 1.1. INITIALISE FUNCTIONS ----------------------------------------------
18
+
19
+ msg = Util::Message.new()
20
+ fs = Util::FS.new()
21
+ gulp = Util::Gulp.new()
22
+
23
+ # 1.1. END ---------------------------------------------------------------
24
+
25
+ # 1.2. RUN DEV TASK ------------------------------------------------------
26
+
27
+ site = fs.read_project(path)
28
+
29
+ type = site['type']
30
+
31
+ if type == :html
32
+
33
+ stream = "html"
34
+
35
+ end
36
+
37
+ if type == :angular
38
+
39
+ stream = "angular"
40
+
41
+ end
42
+
43
+ if type == :jekyll
44
+
45
+ stream = "jekyll"
46
+
47
+ end
48
+
49
+ gulp.default(path, stream)
50
+
51
+ # 1.2. END ---------------------------------------------------------------
52
+
50
53
  end
51
-
54
+
55
+ # 1. END +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
56
+
57
+ end
58
+
52
59
  end
53
60
 
54
- # B. END ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
61
+ # B. END +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
55
62
 
56
- # END OF FILE =========================================================================================================
63
+ # END OF FILE ==================================================================
@@ -1,90 +1,342 @@
1
- # KONSTRUCT CLI [ KONSTRUCT MODULE ] ==================================================================================
1
+ # KONSTRUCT CLI [ KONSTRUCT MODULE ] ===========================================
2
2
 
3
- # ====== INDEX =======================================================================================================
3
+ # ====== INDEX ================================================================
4
4
  # ==
5
- # == A. SKELETON PROJECT CREATOR
5
+ # == 1. FOLDERS
6
+ # == 2. CREATE
7
+ # == 3. REFRESH
6
8
  # ==
7
- # ====== INDEX =======================================================================================================
8
-
9
- # A. SKELETON PROJECT CREATOR +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
9
+ # ====== INDEX ================================================================
10
10
 
11
11
  module Konstruct
12
-
13
- class Cli
14
-
15
- def new_project(path)
16
-
17
- # B.1. INITIALISE FUNCTIONS -------------------------------------------------------------------------------
18
-
19
- msg = Util::Message.new()
20
- fs = Util::FS.new()
21
-
22
- # B.1. END ------------------------------------------------------------------------------------------------
23
-
24
- msg.heading("CREATING SKELETON PROJECT STRUCTURE")
25
-
26
- # B.2. IS YOUR DIRECTORY EMPTY? ---------------------------------------------------------------------------
27
-
28
- puts fs.clear_directory(path)
29
-
30
- # B.2. END ------------------------------------------------------------------------------------------------
31
-
32
- # B.3. CREATE SKELETON ------------------------------------------------------------------------------------
33
-
34
- # B.3.1. FOLDER STRUCTURE
35
-
36
- structure = ['1--ci', '2--design', '3--working', '4--www']
37
-
38
- # B.3.1. END
39
-
40
- # B.3.2. CONFIRM BUILD
41
-
42
- puts Paint["The following directory structure will be created for you:", "999999"]
43
-
44
- puts ""
45
-
46
- structure.each { |f|
47
-
48
- puts Paint["-- #{ f }", "999999"]
49
-
50
- }
51
-
52
- puts ""
53
-
54
- choice = choose("Do you want to install the structure above?", :yes, :no)
55
-
56
- # B.3.2. END
57
-
58
- # B.3.3. BUILD STRUCTURE
59
-
60
- if choice == :yes
61
-
62
- structure.each { |f|
63
-
64
- Dir.mkdir "#{ path }/#{ f }"
65
-
66
- }
67
-
68
- msg.success('Successfully created your skeleton. Go do something awesome!')
69
-
70
- exit(0)
71
-
72
- else
73
-
74
- exit(0)
75
-
76
- end
77
-
78
- # B.3.7. END
79
-
80
- # B.3. END ------------------------------------------------------------------------------------------------
81
-
12
+
13
+ class Project
14
+
15
+ # 1. FOLDERS +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16
+
17
+ def folders(path)
18
+
19
+ # 1.1. INIT FUNCTIONS ----------------------------------------------------
20
+
21
+ msg = Util::Message.new()
22
+ fs = Util::FS.new()
23
+
24
+ # 1.1. END ---------------------------------------------------------------
25
+
26
+ # 1.2. HEADING -----------------------------------------------------------
27
+
28
+ msg.heading("CREATING PROJECT FOLDER STRUCTURE")
29
+
30
+ # 1.2. END ---------------------------------------------------------------
31
+
32
+ # 1.3. EMPTY DIRECTORY ---------------------------------------------------
33
+
34
+ puts fs.clear_directory(path)
35
+
36
+ # 1.3. END ---------------------------------------------------------------
37
+
38
+ # 1.4. SET FOLDER STRUCTURE ----------------------------------------------
39
+
40
+ config_dir = File.expand_path('~/.konstruct')
41
+
42
+ hash = YAML.load_file("#{config_dir}/config.yml")
43
+
44
+ structure = hash["folders"]
45
+
46
+ # 1.4. END ---------------------------------------------------------------
47
+
48
+ # 1.5. CONFIRM FOLDER STRUCTURE ------------------------------------------
49
+
50
+ puts Paint["Folders location:", "999999"]
51
+ puts Paint["-- #{ path }", "999999"]
52
+ puts ""
53
+ puts Paint["Folder structure:", "999999"]
54
+
55
+ structure.each { |f|
56
+ puts Paint["-- #{ f }", "999999"]
57
+ }
58
+
59
+ puts ""
60
+ choice = choose("Do you want to install the structure above?", :yes, :no)
61
+
62
+ # 1.5. END ---------------------------------------------------------------
63
+
64
+ # 1.6. BUILD FOLDERS -----------------------------------------------------
65
+
66
+ if choice == :yes
67
+
68
+ structure.each { |f|
69
+
70
+ Dir.mkdir "#{ path }/#{ f }"
71
+
72
+ }
73
+
74
+ msg.success('Installed Folders')
75
+
76
+ exit(0)
77
+
78
+ else
79
+
80
+ exit(0)
81
+
82
+ end
83
+
84
+ # 1.6. END ---------------------------------------------------------------
85
+
86
+ end
87
+
88
+ # 1. END +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
89
+
90
+ # 2. CREATE ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
91
+
92
+ def create(path, sudo)
93
+
94
+ # 2.1. INIT FUNCTIONS ----------------------------------------------------
95
+
96
+ msg = Util::Message.new()
97
+ fs = Util::FS.new()
98
+ git = Util::Git.new()
99
+
100
+ config = fs.read_config
101
+
102
+ recipe = config["recipes"]
103
+ repo = config["repo"]
104
+ assets = config["paths"]
105
+
106
+ # 2.1. END ---------------------------------------------------------------
107
+
108
+ # 2.2. HEADING -----------------------------------------------------------
109
+
110
+ msg.heading("CREATE NEW KONSTRUCT PROJECT")
111
+
112
+ # 2.2. END ---------------------------------------------------------------
113
+
114
+ # 2.3. IS YOUR DIRECTORY EMPTY? ------------------------------------------
115
+
116
+ fs.clear_directory(path)
117
+
118
+ # 2.3. END ---------------------------------------------------------------
119
+
120
+ # 2.4. INSTALL BOILERPLATE -----------------------------------------------
121
+
122
+ type = choose("What type of site are you building?", :html, :jekyll, :angular)
123
+
124
+ if type == :html
125
+
126
+ recipe["html"].each do |key, val|
127
+ git.install("#{path}#{val[0]}", "#{repo}#{val[1]}", val[2], val[3])
128
+ msg.success("Installed #{ key }");
129
+ end
130
+
131
+ end
132
+
133
+ if type == :jekyll
134
+
135
+ recipe["jekyll"].each do |key, val|
136
+ git.install("#{path}#{val[0]}", "#{repo}#{val[1]}", val[2], val[3])
137
+ msg.success("Installed #{ key }");
138
+ end
139
+
140
+ end
141
+
142
+ if type == :angular
143
+
144
+ recipe["angular"].each do |key, val|
145
+ git.install("#{path}#{val[0]}", "#{repo}#{val[1]}", val[2], val[3])
146
+ msg.success("Installed #{ key }");
147
+ end
148
+
149
+ end
150
+
151
+
152
+
153
+ # 2.4. END ---------------------------------------------------------------
154
+
155
+ # 2.7. INSTALL NPM ASSETS ------------------------------------------------
156
+
157
+ if sudo
158
+
159
+ msg.warning("Installing NPM as root is not advisable. You should fix
160
+ your installation of nodeJS to not require root privileges!")
161
+ msg.paragraph("Installing NPM Assets. This might take a while.")
162
+
163
+ FileUtils.cd("#{path}/assets") do
164
+ `sudo npm install`
82
165
  end
83
-
166
+
167
+ else
168
+
169
+ msg.paragraph("Installing NPM Assets. This might take a while.")
170
+
171
+ FileUtils.cd("#{path}/assets") do
172
+ `npm install`
173
+ end
174
+
175
+ end
176
+
177
+ msg.success("Installed NPM Assets")
178
+
179
+ # 2.7. END ---------------------------------------------------------------
180
+
181
+ # 2.8. SET UP NEW GIT REPOSITORY -----------------------------------------
182
+
183
+ want_git = choose("Want to initialise a git repository?", :Yes, :No)
184
+
185
+ if want_git == :Yes
186
+
187
+ git.init(path)
188
+
189
+ has_remote = choose("Do you already have a remote git repository?", :Yes, :No)
190
+
191
+ if has_remote == :Yes
192
+
193
+ remote_url = ask("Remote Url:")
194
+
195
+ git.remote(path, remote_url)
196
+ git.add(path)
197
+
198
+ msg.success("Initialised your git repo")
199
+
200
+ end
201
+
202
+ end
203
+
204
+ # 2.8. END ---------------------------------------------------------------
205
+
206
+ # 2.9. INSTALL .konstruct ------------------------------------------------
207
+
208
+ date = Time.new
209
+ date_installed = "#{ date.year }-#{ date.month }-#{ date.day }"
210
+
211
+ file_data = {
212
+
213
+ "konstruct_version" => Konstruct::VERSION,
214
+ "date_installed" => date_installed,
215
+ "type" => type
216
+
217
+ }
218
+
219
+ File.open("#{path}/.konstruct.yml","w") do |f|
220
+ f.write(file_data.to_yaml)
221
+ end
222
+
223
+ msg.success("Created #{path}/.konstruct.yml")
224
+
225
+ # 2.9. END ---------------------------------------------------------------
226
+
227
+ # 2.5. SEND BUILD DATA TO ANALYTICS --------------------------------------
228
+
229
+ # TODO
230
+
231
+ # 2.5. END ---------------------------------------------------------------
232
+
233
+ # 2.6. THANKS FOR INSTALLING ---------------------------------------------
234
+
235
+ puts ""
236
+ puts ""
237
+ puts Paint[' $III7IIIIIIIIIIIIIIIIIIIIIIIIII: ', "#de544b"]
238
+ puts Paint[' ZZZZZZ$7IIIIIIIIIIIIIIIIIIIIIIII ', "#de544b"]
239
+ puts Paint[' ZZZZZZZZZZZZ$7IIIIIIIIIIIIIIIIII ', "#de544b"]
240
+ puts Paint[' ZZZZZZZZZZZZZZZZZZZ$IIIIIIIIIIII~', "#de544b"]
241
+ puts Paint[' ZZZZZZZZZZZZZZZZZZZZZZZ:,:+IIIIII', "#de544b"]
242
+ puts Paint[' ZZZZZZZZZZZZZZZZZZZZZZ. :?', "#de544b"]
243
+ puts Paint[' I$ZZZZZZZZZZZZZZZZZZ7 ', "#de544b"]
244
+ puts Paint[' III$ZZZZZZZZZZZZZZZ~ ', "#de544b"]
245
+ puts Paint[' IIIII7ZZZZZZZZZZZZ ', "#de544b"]
246
+ puts Paint[' IIIIIII7ZZZZZZZZ$ ', "#de544b"]
247
+ puts Paint[' IIIIIIIIIIZZZZZ: ', "#de544b"]
248
+ puts Paint[' IIIIIIIIIIIIZI ', "#de544b"]
249
+ puts Paint[' IIIIIIIIIIIIII ', "#de544b"]
250
+ puts Paint[' IIIIIIIIIIIIIIII= ', "#de544b"]
251
+ puts Paint[' IIIIIIIIIIIIIIIII7= ', "#de544b"]
252
+ puts Paint[' IIIIIIIIIIIIIIIIIIII~ ', "#de544b"]
253
+ puts Paint[' IIIIIIIIIIIIIIIIIIIIII= ', "#de544b"]
254
+ puts Paint[' IIIIIIIIIIIIIIIIIIIIIII7~ ', "#de544b"]
255
+ puts Paint[' IIIIIIIIIIIIIIIIIIIIIIIIIII.. ', "#de544b"]
256
+ puts Paint[' IIIIIIIIIIIIIIIIIIIIIIIIIIII7 ', "#de544b"]
257
+ puts Paint[' IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII,.', "#de544b"]
258
+ puts Paint[' IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII7', "#de544b"]
259
+ puts ""
260
+ puts ""
261
+ puts Paint[" GO BUILD SOMETHING AWESOME!", "#999999"]
262
+ puts ""
263
+ puts Paint[" Successfully installed your #{type} site.", "#999999"]
264
+ puts ""
265
+ puts Paint[" You can run the developer tools with '$ konstruct watch'
266
+ or '$ konstruct documentation' to get help.", "#999999"]
267
+ puts ""
268
+
269
+ exit(0)
270
+
271
+ # 2.6. END ---------------------------------------------------------------
272
+
273
+ end
274
+
275
+ # 2. END +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
276
+
277
+ # 3. END +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
278
+
279
+ def refresh(path, sudo)
280
+
281
+ # 3.1. INSTALL NPM ASSETS ------------------------------------------------
282
+
283
+ if sudo
284
+
285
+ msg.warning("Installing NPM as root is not advisable. You should fix your
286
+ installation of nodeJS to not require root privileges!")
287
+ msg.paragraph("Refreshing NPM Assets. This might take a while.")
288
+
289
+ FileUtils.cd("#{path}/assets") do
290
+ `sudo npm install`
291
+ end
292
+
293
+ else
294
+
295
+ msg.paragraph("Refreshing NPM Assets. This might take a while.")
296
+
297
+ FileUtils.cd("#{path}/assets") do
298
+ `npm install`
299
+ end
300
+
301
+ end
302
+
303
+ msg.success("Refreshed NPM Assets")
304
+
305
+ # 3.1. END ---------------------------------------------------------------
306
+
84
307
  end
85
-
86
- end
87
308
 
88
- # B. END ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
309
+ # 3. END +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
310
+
311
+ # 3. END +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
312
+
313
+ def documentation
314
+
315
+ # B.1. INITIALISE FUNCTIONS ----------------------------------------------
316
+
317
+ msg = Util::Message.new()
318
+
319
+ # B.1. END ---------------------------------------------------------------
320
+
321
+ msg.heading("KONSTRUCT DOCUMENTATION")
322
+
323
+ # B.2. IS YOUR DIRECTORY EMPTY? ------------------------------------------
324
+
325
+ puts Paint["Opening documentation in your default browser!", "999999"]
326
+ puts ""
327
+
328
+ Launchy.open( "http://konstruct.github.io/" )
329
+
330
+ exit(0)
331
+
332
+ # B.3. END ---------------------------------------------------------------
333
+
334
+ end
335
+
336
+ # 3. END +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
337
+
338
+ end
339
+
340
+ end
89
341
 
90
- # END OF FILE =========================================================================================================
342
+ # END OF FILE ==================================================================