Skip to content

Commit 70c62e5

Browse files
committed
Use create(Rules|Extensions) for symmetry with createDatabase
This eliminates the 'initialize' member function in the Extension class. The constructor should handle what is needed to initialize the class. Signed-off-by: Shaun Ruffell <[email protected]>
1 parent f872d81 commit 70c62e5

File tree

6 files changed

+39
-23
lines changed

6 files changed

+39
-23
lines changed

src/Extensions.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
#include <algorithm>
3737

3838
////////////////////////////////////////////////////////////////////////////////
39-
void Extensions::initialize (const std::string& location)
39+
Extensions::Extensions (const std::string& location)
4040
{
4141
// Scan extension directory.
4242
Directory d (location);
@@ -47,7 +47,9 @@ void Extensions::initialize (const std::string& location)
4747
std::sort (_scripts.begin (), _scripts.end ());
4848
}
4949
else
50+
{
5051
throw std::string ("Extension directory not readable: ") + d._data;
52+
}
5153
}
5254

5355
////////////////////////////////////////////////////////////////////////////////
@@ -57,7 +59,7 @@ void Extensions::debug ()
5759
}
5860

5961
////////////////////////////////////////////////////////////////////////////////
60-
std::vector <std::string> Extensions::all () const
62+
const std::vector <std::string>& Extensions::all () const
6163
{
6264
return _scripts;
6365
}

src/Extensions.h

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,15 @@
3333
class Extensions
3434
{
3535
public:
36-
Extensions () = default;
37-
void initialize (const std::string&);
36+
Extensions () = delete;
37+
Extensions (const std::string&);
38+
Extensions (const Extensions&) = delete;
39+
Extensions (Extensions&&) = default;
40+
Extensions& operator= (const Extensions&) = delete;
41+
Extensions& operator= (Extensions&&) = default;
42+
3843
void debug ();
39-
std::vector <std::string> all () const;
44+
const std::vector <std::string>& all () const;
4045
int callExtension (const std::string&, const std::vector <std::string>&, std::vector <std::string>&) const;
4146
std::string dump () const;
4247

src/Rules.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ class Rules
3838
{
3939
public:
4040
Rules ();
41+
Rules (const Rules&) = delete;
42+
Rules (Rules&&) = default;
43+
Rules& operator= (const Rules&) = delete;
44+
Rules& operator= (Rules&&) = default;
45+
4146
void load (const std::string&, int next = 1);
4247
std::string file () const;
4348

src/init.cpp

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,9 @@ void initializeEntities (CLI& cli)
120120
}
121121

122122
////////////////////////////////////////////////////////////////////////////////
123-
void initializeRules (const CLI& cli, Rules& rules)
123+
Rules createRules (const CLI& cli)
124124
{
125+
Rules rules;
125126
// Rose tint my world, make me safe from my trouble and pain.
126127
rules.set ("color", isatty (STDOUT_FILENO) ? "on" : "off");
127128

@@ -210,6 +211,8 @@ void initializeRules (const CLI& cli, Rules& rules)
210211
debug (format ("Configuration override {1} = {2}", arg.attribute ("name"), arg.attribute ("value")));
211212
}
212213
}
214+
215+
return rules;
213216
}
214217

215218
////////////////////////////////////////////////////////////////////////////////
@@ -229,23 +232,30 @@ Database createDatabase (Rules& rules)
229232
}
230233

231234
////////////////////////////////////////////////////////////////////////////////
232-
void initializeExtensions (
233-
CLI& cli,
234-
const Rules& rules,
235-
Extensions& extensions)
235+
Extensions createExtensions (CLI& cli, const Rules& rules)
236236
{
237+
237238
Directory extDir (rules.get ("temp.db"));
238239
extDir += "extensions";
239240

240-
extensions.initialize (extDir._data);
241+
Extensions extensions {extDir._data};
241242

242243
// Add extensions as CLI entities.
243-
for (auto& ext : extensions.all ())
244-
cli.entity ("extension", File (ext).name ());
244+
for (const auto& ext : extensions.all ())
245+
{
246+
cli.entity ("extension", Path (ext).name ());
247+
}
248+
249+
// Re-analyze command because of the new extension entities.
250+
cli.analyze ();
245251

246252
// Extensions have a debug mode.
247253
if (rules.getBoolean ("debug"))
254+
{
248255
extensions.debug ();
256+
}
257+
258+
return extensions;
249259
}
250260

251261
////////////////////////////////////////////////////////////////////////////////

src/timew.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,9 @@ int main (int argc, const char** argv)
8181
cli.analyze ();
8282

8383
// Prepare the database, but do not read data.
84-
Rules rules;
85-
initializeRules (cli, rules);
84+
Rules rules = createRules (cli);
8685
Database database = createDatabase (rules);
87-
88-
// Load extension script info.
89-
// Re-analyze command because of the new extension entities.
90-
Extensions extensions;
91-
initializeExtensions (cli, rules, extensions);
92-
cli.analyze ();
86+
Extensions extensions = createExtensions (cli, rules);
9387

9488
// Dispatch to commands.
9589
status = dispatchCommand (cli, database, rules, extensions);

src/timew.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ bool validate (const CLI& cli, const Rules& rules, Database&, Interval&);
6464
// init.cpp
6565
bool lightweightVersionCheck (int, const char**);
6666
void initializeEntities (CLI&);
67-
void initializeRules (const CLI&, Rules&);
67+
Rules createRules (const CLI&);
6868
Database createDatabase (Rules&);
69-
void initializeExtensions (CLI&, const Rules&, Extensions&);
69+
Extensions createExtensions (CLI&, const Rules&);
7070
int dispatchCommand (const CLI&, Database&, Rules&, const Extensions&);
7171

7272
// helper.cpp

0 commit comments

Comments
 (0)