gorm 0.0.3 → 0.0.4

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.
@@ -1,30 +1,35 @@
1
+ $LOAD_PATH << File.join(File.dirname(__FILE__))
1
2
  require 'gorm/schema'
3
+ require 'gorm/version'
4
+ require 'cog'
2
5
 
6
+ # Inject this tools templates onto the cog template lookup path
7
+ # Do not remove this line
8
+ Cog::Config.instance.tool_templates_path = File.expand_path(File.join(__FILE__, '..', '..', 'cog', 'templates'))
9
+
10
+ # Set the template which is used to create generators for this tool
11
+ # Do not remove this line
12
+ Cog::Config.instance.tool_generator_template = 'gorm/generator.rb'
13
+
14
+ # Custom cog tool gorm
3
15
  module Gorm
4
16
 
5
17
  # Creates a Schema under the given package +path+ and makes it available to a
6
18
  # block that can then define it using the Schema::SchemaDefinitionMethods.
19
+ #
7
20
  # ==== Arguments
8
21
  # * +path+ - A / separated path where the source files should be generated.
9
22
  # Do not include any file extension, they will be added automatically
10
23
  # depending on the target language.
24
+ #
11
25
  # ==== Options
12
26
  # * <tt>:namespace</tt> - If provided, all generated classes will be placed
13
27
  # inside this namespace.
14
28
  def self.schema(path, opt={}, &block) # :yields: s
15
29
  s = Schema.new path, opt
16
30
  block.call s unless s.nil?
17
- s.generate!
31
+ s.generate
18
32
  nil
19
33
  end
20
34
 
21
- def self.template_path(subpath) # :nodoc:
22
- spec = Gem.loaded_specs['gorm']
23
- prefix = if spec.nil?
24
- File.expand_path File.join(File.dirname(__FILE__), '..')
25
- else
26
- spec.gem_dir
27
- end
28
- File.join prefix, 'templates', subpath
29
- end
30
35
  end
@@ -1,14 +1,13 @@
1
1
  require 'gorm/migration'
2
2
  require 'gorm/table'
3
- # $LOAD_PATH << File.join(File.dirname(__FILE__), '../../../cog/lib')
4
- require 'cog/mixins/uses_templates'
3
+ require 'cog'
5
4
 
6
5
  module Gorm
7
6
 
8
7
  # A collection of migrations which cumulatively defines a database schema.
9
8
  class Schema
10
9
 
11
- include Cog::Mixins::UsesTemplates
10
+ include Cog::Generator
12
11
 
13
12
  # Where to place the generated code.
14
13
  attr_reader :output_path
@@ -40,11 +39,9 @@ module Gorm
40
39
  end
41
40
 
42
41
  # Generate the ORM source code
43
- def generate!
42
+ def generate
44
43
  [:cpp, :h].each do |ext|
45
- stamp Gorm::template_path("schema.#{ext}"),
46
- :use_absolute_path => true,
47
- :target => "#{@output_path}.#{ext}"
44
+ stamp "gorm/schema.#{ext}", "#{@output_path}.#{ext}"
48
45
  end
49
46
  @tables.values.each {|t| t.generate! }
50
47
  end
@@ -1,13 +1,13 @@
1
1
  require 'gorm/column'
2
2
  require 'active_support/core_ext'
3
- require 'cog/mixins/uses_templates'
3
+ require 'cog'
4
4
 
5
5
  module Gorm
6
6
 
7
7
  # Represents a table in a Schema.
8
8
  class Table
9
9
 
10
- include Cog::Mixins::UsesTemplates
10
+ include Cog::Generator
11
11
 
12
12
  # The name of the table in the database
13
13
  attr_reader :table_name
@@ -31,9 +31,7 @@ module Gorm
31
31
  # Generate the ORM source code
32
32
  def generate!
33
33
  [:cpp, :h].each do |ext|
34
- stamp Gorm::template_path("table.#{ext}"),
35
- :use_absolute_path => true,
36
- :target => "#{@output_path}.#{ext}"
34
+ stamp "gorm/table.#{ext}", "#{@output_path}.#{ext}"
37
35
  end
38
36
  end
39
37
 
@@ -0,0 +1,5 @@
1
+ module Gorm
2
+ unless const_defined? :VERSION
3
+ VERSION = '0.0.4' # :nodoc:
4
+ end
5
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gorm
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kevin Tonon
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-10-27 00:00:00 Z
18
+ date: 2012-11-05 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rake
@@ -77,26 +77,20 @@ dependencies:
77
77
  version_requirements: *id004
78
78
  description:
79
79
  email: kevin@betweenconcepts.com
80
- executables:
81
- - gorm
80
+ executables: []
81
+
82
82
  extensions: []
83
83
 
84
84
  extra_rdoc_files: []
85
85
 
86
86
  files:
87
- - bin/gorm
88
87
  - LICENSE
89
- - templates/example_database.rb
90
- - templates/schema.cpp.erb
91
- - templates/schema.h.erb
92
- - templates/table.cpp.erb
93
- - templates/table.h.erb
94
88
  - lib/gorm/column.rb
95
89
  - lib/gorm/migration.rb
96
90
  - lib/gorm/schema.rb
97
91
  - lib/gorm/table.rb
92
+ - lib/gorm/version.rb
98
93
  - lib/gorm.rb
99
- - lib/gorm_version.rb
100
94
  homepage: https://github.com/ktonon/gorm
101
95
  licenses: []
102
96
 
data/bin/gorm DELETED
@@ -1,72 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'gli'
3
- require 'cog'
4
- require 'fileutils'
5
- begin # XXX: Remove this begin/rescue before distributing your app
6
- require 'gorm'
7
- rescue LoadError
8
- STDERR.puts "In development, you need to use `bundle exec bin/todo` to run your app"
9
- STDERR.puts "At install-time, RubyGems will make sure lib, etc. are in the load path"
10
- STDERR.puts "Feel free to remove this message from bin/gorm now"
11
- exit 64
12
- end
13
-
14
- include GLI::App
15
-
16
- program_desc 'A code-Generating Object Relational Mapper for use with Qt and SQLite'
17
-
18
- version Gorm::VERSION
19
-
20
- desc 'Initialize gorm with a project'
21
- command :init do |c|
22
- c.action do |global_options,options,args|
23
- include Cog::Mixins::UsesTemplates
24
- unless File.exists? 'Cogfile'
25
- FileUtils.cp File.join(Cog::Config.gem_dir, 'Default.cogfile'), 'Cogfile'
26
- puts 'Created ./Cogfile'
27
- end
28
- config = Cog::Config.for_project
29
- unless File.exists? config.generator_dir
30
- FileUtils.mkdir_p config.generator_dir
31
- puts "Created #{config.generator_dir}"
32
- end
33
- db_source = File.join(config.generator_dir, 'database.rb')
34
- unless File.exists? db_source
35
- FileUtils.cp Gorm.template_path('example_database.rb'), db_source
36
- puts "Created #{db_source}"
37
- end
38
- puts "You may want to edit the Cogfile and change app_dir..."
39
- end
40
- end
41
-
42
- desc 'Generate source files from the database.rb file'
43
- command :generate do |c|
44
- c.action do |global_options,options,args|
45
- config = Cog::Config.for_project
46
- db_source = File.join(config.generator_dir, 'database')
47
- require db_source
48
- end
49
- end
50
-
51
- pre do |global,command,options,args|
52
- # Pre logic here
53
- # Return true to proceed; false to abourt and not call the
54
- # chosen command
55
- # Use skips_pre before a command to skip this block
56
- # on that command only
57
- true
58
- end
59
-
60
- post do |global,command,options,args|
61
- # Post logic here
62
- # Use skips_post before a command to skip this
63
- # block on that command only
64
- end
65
-
66
- on_error do |exception|
67
- # Error logic here
68
- # return false to skip default error handling
69
- true
70
- end
71
-
72
- exit run(ARGV)
@@ -1,3 +0,0 @@
1
- module Gorm
2
- VERSION = '0.0.3'
3
- end
@@ -1,12 +0,0 @@
1
- require 'gorm'
2
-
3
- Gorm.schema 'MyApp/Database', :namespace => 'MyApp' do |s|
4
-
5
- s.migration do |m|
6
- m.create_table :widgets do |t|
7
- t.string :name
8
- t.integer :size
9
- end
10
- end
11
-
12
- end
@@ -1,124 +0,0 @@
1
- <%= generated_warning %>
2
-
3
- #include "<%= output_path %>.h"
4
- #include "Bump/Bump.h"
5
- #include <QFile>
6
- #include <QtSql>
7
-
8
- using namespace <%= namespace %>;
9
-
10
- const QString DATABASE_FILENAME = "<%= namespace %>.sqlite";
11
-
12
- <%= class_name %>::<%= class_name %>(QObject *parent) :
13
- QObject(parent)
14
- {
15
- }
16
-
17
- <%= class_name %>::~<%= class_name %>()
18
- {
19
- }
20
-
21
- bool <%= class_name %>::open()
22
- {
23
- _qDatabase = QSqlDatabase::addDatabase("QSQLITE");
24
- _qDatabase.setDatabaseName(sandboxPath(DATABASE_FILENAME));
25
- return _qDatabase.open() && updateSchema();
26
- }
27
-
28
- bool <%= class_name %>::close()
29
- {
30
- _qDatabase.close();
31
- return true;
32
- }
33
-
34
- bool <%= class_name %>::erase()
35
- {
36
- _qDatabase.close();
37
- return QFile::remove(sandboxPath(DATABASE_FILENAME));
38
- }
39
-
40
- bool <%= class_name %>::updateSchema()
41
- {
42
- int nextVersion;
43
- int version = currentSchemaVersion();
44
- while (version < APP_SCHEMA_VERSION)
45
- {
46
- if (!applyIncrementalMigration(version + 1))
47
- {
48
- qCritical() << "Could not apply incremental migration" << QString::number(version + 1)
49
- << _qDatabase.lastError();
50
- return false;
51
- }
52
- nextVersion = currentSchemaVersion();
53
- if (nextVersion <= version)
54
- {
55
- qCritical() << "Incremental migration failed to increment the database schema number";
56
- return false;
57
- }
58
- version = nextVersion;
59
- }
60
- return true;
61
- }
62
-
63
- int <%= class_name %>::currentSchemaVersion() const
64
- {
65
- Q_ASSERT(_qDatabase.isOpen() && _qDatabase.isValid());
66
- if (_qDatabase.tables().count() == 0) return -1;
67
- QSqlQuery query;
68
- if (!query.exec("SELECT schema_version FROM meta WHERE id = 1") || !query.next())
69
- {
70
- qCritical() << "Unable to determine the current database schema version. The database is corrupt.";
71
- abort();
72
- }
73
- return query.value(0).toInt();
74
- }
75
-
76
- bool <%= class_name %>::applyIncrementalMigration(int migrationVersion)
77
- {
78
- switch(migrationVersion)
79
- {
80
- <% migrations.each do |m| %>
81
- case <%= m.index %>: return <%= m.method_call %>;
82
- <% end %>
83
- default:
84
- qCritical() << "No such schema migration version" << QString::number(migrationVersion);
85
- return false;
86
- }
87
- }
88
-
89
- <% migrations.each do |m| %>
90
- <%= m.method_stub :qualify => true %>
91
- {
92
- QSqlQuery query;
93
- _qDatabase.transaction();
94
- // TODO: migration body
95
- query.exec("UPDATE meta SET schema_version = <%= m.index %> WHERE id = 1");
96
- return _qDatabase.commit();
97
- }
98
- <% end %>
99
-
100
- // bool <%= class_name %>::applyMigration0()
101
- // {
102
- // QSqlQuery query;
103
- // _qDatabase.transaction();
104
- // query.exec("CREATE TABLE meta (id INTEGER PRIMARY KEY, schema_version INTEGER)");
105
- // query.exec("INSERT INTO meta VALUES (1, 1);");
106
- // return _qDatabase.commit();
107
- // }
108
- //
109
- // bool <%= class_name %>::applyMigration1()
110
- // {
111
- // QSqlQuery query;
112
- // _qDatabase.transaction();
113
- // query.exec("CREATE TABLE file_types (id INTEGER PRIMARY KEY, name VARCHAR(256))");
114
- // query.exec("CREATE TABLE file_type_recognizers (id INTEGER PRIMARY KEY, file_type_id INTEGER, extension VARCHAR(16), path_pattern TEXT)");
115
- // query.exec("CREATE TABLE matchers (id INTEGER PRIMARY KEY, file_type_id INTEGER, pattern TEXT)");
116
- // query.exec("INSERT INTO file_types VALUES (NULL, 'Bump Log')");
117
- // int fileTypeId = query.lastInsertId().toInt();
118
- // query.prepare("INSERT INTO matchers VALUES (NULL, ?, ?)");
119
- // query.bindValue(0, fileTypeId);
120
- // query.bindValue(1, "(?P<year>\\d{4})-(?P<month>\\d{2})-(?P<day>\\d{2})");
121
- // query.exec();
122
- // query.exec("UPDATE meta SET schema_version = 2 WHERE id = 1");
123
- // return _qDatabase.commit();
124
- // }
@@ -1,76 +0,0 @@
1
- <%= generated_warning %>
2
-
3
- <%= include_guard_begin include_guard_name %>
4
-
5
- #include <QObject>
6
- #include <QString>
7
- #include <QSqlDatabase>
8
-
9
- <%= namespace_begin namespace %>
10
-
11
-
12
- class <%= class_name %> : public QObject
13
- {
14
- Q_OBJECT
15
- QSqlDatabase _qDatabase;
16
-
17
- /** The schema version required by this release of the app. */
18
- static const int APP_SCHEMA_VERSION = <%= app_schema_version %>;
19
-
20
- public:
21
-
22
- explicit <%= class_name %>(QObject *parent = 0);
23
- virtual ~<%= class_name %>();
24
-
25
- /** Open the database. */
26
- bool open();
27
-
28
- /** Close the database. */
29
- bool close();
30
-
31
- /** Erase the database. */
32
- bool erase();
33
-
34
- private:
35
-
36
- /**
37
- Apply the given incremental migration.
38
- @param migrationVersion An integer indicating which migration to apply.
39
- A migration version of 1 applies the migration which takes the database
40
- from schema version 0 to 1. A migration version of 2 takes it from 1 to
41
- 2, and so on.
42
- @returns @c false if the migration could not be applied.
43
- */
44
- bool applyIncrementalMigration(int migrationVersion);
45
-
46
- /**
47
- The schema version of the current database.
48
- Schema versions start at 0 and increase at integer intervals. Schema
49
- version -1 has a special meaning: the database is empty. Schema version
50
- 0 installs a meta table for keeping track of the current database schema.
51
- Schema version 1 is the schema used by the first release of the app,
52
- version 2 by the second release, and so on.
53
- @returns The schema version.
54
- */
55
- int currentSchemaVersion() const;
56
-
57
- /**
58
- Update the database schema if necessary.
59
- @returns @c false if the update failed.
60
- */
61
- bool updateSchema();
62
-
63
- private: // Schema Migrations
64
- <% migrations.each do |m| %>
65
- <%= m.method_stub %>;
66
- <% end %>
67
-
68
- signals:
69
-
70
- public slots:
71
-
72
- };
73
-
74
-
75
- <%= namespace_end namespace %>
76
- <%= include_guard_end %>
File without changes
File without changes