pg_gnostic 0.0.4 → 0.1.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.
data/README.rdoc CHANGED
@@ -12,15 +12,10 @@ and then
12
12
 
13
13
  sudo rake gems:install
14
14
 
15
- To install pg_gnostic rake tasks u need add this lines into RAILS_ROOT/Rakefile
16
-
17
- require 'pg_gnostic'
18
- require 'pg_gnostic/tasks'
19
-
20
15
  == FEATURES
21
16
 
22
17
  * add pg views generator
23
- scripts/generate pg_view [--format= ruby|sql] view_name [dependency_view_names]
18
+ rails generate pg_view [--format= ruby|sql] view_name [dependency_view_names]
24
19
  * rake pg: pg:drop_views, pg:functions, pg:views and all in one pg:update
25
20
 
26
21
 
@@ -28,7 +23,9 @@ To install pg_gnostic rake tasks u need add this lines into RAILS_ROOT/Rakefile
28
23
 
29
24
  0.0.2 - backup/restore rakes
30
25
  0.0.3 - add PgGnostic::ViewDefinition#clear_declarations method
31
- 0.0.4 - Updated kung_figure dependency
26
+ 0.0.4 - kung_figure dependency updated
27
+ 0.0.5 - compatibility with Ruby 1.9
28
+ 0.1.0 - converted to Rails 3 format. No backward compatibility with Rails 2.x
32
29
 
33
30
  == TODO
34
31
 
data/Rakefile CHANGED
@@ -24,9 +24,9 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
24
24
  end
25
25
 
26
26
 
27
- PKG_FILES = FileList[ '[a-zA-Z]*', 'generators/**/*', 'lib/**/*', 'rails/**/*', 'tasks/**/*', 'test/**/*' ]
27
+ PKG_FILES = FileList[ '[a-zA-Z]*', 'rails/generators/**/*', 'lib/**/*', 'rails/**/*', 'tasks/**/*', 'test/**/*' ]
28
28
 
29
- require 'lib/pg_gnostic'
29
+ require File.join(File.dirname(__FILE__), 'lib/pg_gnostic')
30
30
  spec = Gem::Specification.new do |s|
31
31
  s.name = "pg_gnostic"
32
32
  s.version = PgGnostic::VERSION
@@ -40,6 +40,8 @@ spec = Gem::Specification.new do |s|
40
40
  s.has_rdoc = false
41
41
  s.extra_rdoc_files = ["README.rdoc"]
42
42
  s.add_dependency('kung_figure')
43
+ s.add_dependency('rails', '>=3.0.0')
44
+ s.add_development_dependency('test-unit')
43
45
  end
44
46
 
45
47
  desc 'Turn this plugin into a gem.'
@@ -0,0 +1,13 @@
1
+ require 'rails/railtie'
2
+
3
+ module PgGnostic
4
+ class Railtie < Rails::Railtie
5
+ generators do
6
+ require File.expand_path(File.join(File.dirname(__FILE__), '../../rails/generators/pg_view/pg_view_generator'))
7
+ end
8
+
9
+ rake_tasks do
10
+ load File.expand_path(File.join(File.dirname(__FILE__),'../..','tasks','pg_gnostic_tasks.rake'))
11
+ end
12
+ end
13
+ end
@@ -56,7 +56,8 @@ module PgGnostic
56
56
  load f
57
57
  end
58
58
  Dir["#{path}/*.sql"].each do |f|
59
- sql = IO.readlines(f,'').to_s
59
+ lines = [IO.readlines(f, '')].flatten
60
+ sql = lines.join
60
61
  view_name = File.basename(f,".sql").to_sym
61
62
  create_view(view_name,:sql=>sql)
62
63
  end
data/lib/pg_gnostic.rb CHANGED
@@ -3,12 +3,14 @@ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname
3
3
  require 'kung_figure'
4
4
  # PgGnostic
5
5
  module PgGnostic
6
- VERSION = "0.0.4"
6
+ VERSION = "0.1.0"
7
7
  include KungFigure
8
8
 
9
9
  autoload :ViewDefinition, 'pg_gnostic/view_definition'
10
10
  autoload :Config, 'pg_gnostic/config'
11
11
 
12
+ require 'pg_gnostic/railtie'
13
+
12
14
  class << self
13
15
  def define
14
16
  yield ViewDefinition
@@ -0,0 +1,5 @@
1
+ Description:
2
+ Generate pg view file
3
+
4
+ Example:
5
+ rails generate pg_view users
@@ -0,0 +1,34 @@
1
+ require 'pg_gnostic'
2
+
3
+ class PgViewGenerator < Rails::Generators::Base
4
+ desc "Generates pg view file"
5
+ class_option :format, :default => 'ruby', :aliases => "-f", :banner => 'sql | ruby'
6
+ argument :view_name, :required => true, :banner => "view name"
7
+ argument :dependencies, :type => :array, :required => false, :banner => "depends on views"
8
+ source_root File.dirname(__FILE__)
9
+
10
+ attr_reader :nest_in_module, :class_name, :dependencies, :prefix_view_name
11
+
12
+ def init_parameters
13
+ @view_name = self.view_name
14
+ @model_name = @view_name.singularize
15
+ @model_file_name = @model_name.underscore
16
+ @class_name = @model_name.classify
17
+ @dependencies = self.dependencies
18
+ @nest_in_module = PgGnostic.config.view_model.nest_in_module
19
+ @prefix_view_name = PgGnostic.config.view_model.prefix_view_name
20
+ end
21
+
22
+ def generate
23
+ model_path = PgGnostic.config.view_model.model_path
24
+ empty_directory 'db/views'
25
+ empty_directory model_path
26
+ case options[:format]
27
+ when 'sql'
28
+ template "templates/view.sql", File.join('db/views', "#{@view_name}.sql")
29
+ when 'ruby'
30
+ template "templates/view.rb", File.join('db/views', "#{@view_name}.rb")
31
+ end
32
+ template "templates/model.rb", File.join(model_path, "#{@model_file_name}.rb")
33
+ end
34
+ end
data/test/config_test.rb CHANGED
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
2
2
 
3
3
  class PgGnosticViewUtilsTest < ActiveSupport::TestCase
4
4
  def test_default_config
data/test/db/schema.rb CHANGED
@@ -1,13 +1,13 @@
1
1
  ActiveRecord::Schema.define(:version => 0) do
2
2
  create_table :users do |t|
3
- t.string :last_name, :limit => 25
4
- t.string :first_name, :limit => 25
5
- t.string :middle_name, :limit => 25
6
- t.string :name, :limit => 25
7
- t.string :login, :limit => 40
8
- t.string :email, :limit => 100
9
- t.string :crypted_password, :limit => 40
10
- t.string :salt, :limit => 40
3
+ t.string :last_name, :limit => 25
4
+ t.string :first_name, :limit => 25
5
+ t.string :middle_name, :limit => 25
6
+ t.string :name, :limit => 25
7
+ t.string :login, :limit => 40
8
+ t.string :email, :limit => 100
9
+ t.string :crypted_password, :limit => 40
10
+ t.string :salt, :limit => 40
11
11
  t.datetime :last_login_datetime
12
12
  t.datetime :deleted_at
13
13
  t.timestamps
@@ -1,8 +1,8 @@
1
1
  PgGnostic.define do |d|
2
- d.named_fields :my_exclude_fields,'crypted_password','salt','last_login_datetime','deleted_at'
3
2
  d.create_view :view_users,:depends_on=>[:other_users], :sql=><<-SQL
4
3
  SELECT
5
- <%= users.* :exclude=>[timestamps,'id',my_exclude_fields] %>
4
+ name, first_name, last_name
6
5
  FROM users
7
6
  SQL
8
7
  end
8
+ # vim:ft=sql
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
2
2
 
3
3
  class PgGnosticTest < ActiveSupport::TestCase
4
4
  # Replace this with your real tests.
data/test/test_helper.rb CHANGED
@@ -1,31 +1,26 @@
1
1
  require 'rubygems'
2
2
  require 'kung_figure'
3
+
3
4
  def path(path)
4
- File.join(File.dirname(__FILE__),path)
5
+ File.join(File.dirname(__FILE__), path).to_s
5
6
  end
6
7
 
7
8
  $:.unshift(path('../lib'))
9
+ require "test/unit"
8
10
  require 'pg_gnostic'
9
11
  require 'active_support'
10
12
  require 'active_support/test_case'
11
- require "rails_generator"
12
13
  require "active_record"
13
- require 'rails_generator/scripts/generate'
14
- require "test/unit"
14
+ require 'rails'
15
+ require "rails/generators"
15
16
 
17
+ #Test::Unit.run = true
16
18
 
17
19
  GEM_ROOT= path('..')
18
- Rails::Generator::Base.default_options :collision => :ask, :quiet => false
19
- Rails::Generator::Base.reset_sources
20
- Rails::Generator::Base.append_sources(Rails::Generator::PathSource.new(:plugin, "#{GEM_ROOT}/generators/"))
21
20
 
22
21
  class GeneratorTest < ActiveSupport::TestCase
23
- def generate(*args)
24
- Rails::Generator::Scripts::Generate.new.run(args, :destination=>fake_rails_root)
25
- end
26
-
27
22
  def read(path)
28
- IO.readlines("#{fake_rails_root}/#{path}",'').to_s
23
+ [IO.readlines("#{fake_rails_root}/#{path}", '')].flatten.join
29
24
  end
30
25
 
31
26
  def assert_file(file)
@@ -92,4 +87,4 @@ class TestDbUtils
92
87
  ActiveRecord::Base.connection.drop_database config[:database]
93
88
  end
94
89
  end
95
- end
90
+ end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
2
2
  #ActiveRecord::Base.logger=Logger.new(STDOUT)
3
3
 
4
4
  TestDbUtils.ensure_schema
@@ -39,8 +39,6 @@ class PgGnosticViewUtilsTest < ActiveSupport::TestCase
39
39
  assert_contain_field(OtherUser,'name')
40
40
  assert_not_contain_field(OtherUser,'id')
41
41
  assert_not_contain_field(OtherUser,'created_at')
42
- assert_not_contain_field(OtherUser,'crypted_password')
43
- assert_not_contain_field(OtherUser,'deleted_at')
44
42
  end
45
43
 
46
44
  def test_clear_definitions
@@ -1,43 +1,48 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), "../rails/generators/pg_view/pg_view_generator"))
2
3
 
3
- class PgGnosticViewsGeneratorTest < GeneratorTest
4
+ class PgGnosticViewsGeneratorTest < GeneratorTest
4
5
  def test_generates_definition
5
- PgGnostic.clear_config!
6
- generate 'pg_view','users','roles'
7
- assert_file 'db/views/users.rb'
8
- result = read 'db/views/users.rb'
9
- assert_match(/view_users/, result)
10
- assert_match(/view_roles/, result)
11
- assert_match(/PgGnostic.define/, result)
12
- assert_match(/depends_on/, result)
13
- assert_file 'app/model/views/user.rb'
14
- result = read 'app/model/views/user.rb'
15
- assert_match(/class User < ActiveRecord::Base/, result)
6
+ FileUtils.chdir fake_rails_root do
7
+ PgGnostic.clear_config!
8
+ PgViewGenerator.new(['users', 'roles']).invoke_all
9
+ assert_file 'db/views/users.rb'
10
+ result = read 'db/views/users.rb'
11
+ assert_match(/view_users/, result)
12
+ assert_match(/view_roles/, result)
13
+ assert_match(/PgGnostic.define/, result)
14
+ assert_match(/depends_on/, result)
15
+ assert_file 'app/model/views/user.rb'
16
+ result = read 'app/model/views/user.rb'
17
+ assert_match(/class User < ActiveRecord::Base/, result)
16
18
 
17
- generate 'pg_view','roles','--format','sql'
18
- assert_file 'db/views/roles.sql'
19
- result = read 'db/views/roles.sql'
20
- assert_file 'app/model/views/role.rb'
21
- result = read 'app/model/views/role.rb'
22
- assert_match(/class Role < ActiveRecord::Base/, result)
19
+ PgViewGenerator.new(['roles'], {:format => 'sql'}).invoke_all
20
+ assert_file 'db/views/roles.sql'
21
+ result = read 'db/views/roles.sql'
22
+ assert_file 'app/model/views/role.rb'
23
+ result = read 'app/model/views/role.rb'
24
+ assert_match(/class Role < ActiveRecord::Base/, result)
25
+ end
23
26
  end
24
27
 
25
28
  def test_gen_with_changed_config
26
- PgGnostic.clear_config!
27
- PgGnostic.config.view_model.nest_in_module 'PgViews'
28
- generate 'pg_view','users','roles'
29
- assert_file 'app/model/pg_views/user.rb'
30
- result = read 'app/model/pg_views/user.rb'
31
- assert_match(/module PgViews/, result)
29
+ FileUtils.chdir fake_rails_root do
30
+ PgGnostic.clear_config!
31
+ PgGnostic.config.view_model.nest_in_module 'PgViews'
32
+ PgViewGenerator.new(['users', 'roles']).invoke_all
33
+ assert_file 'app/model/pg_views/user.rb'
34
+ result = read 'app/model/pg_views/user.rb'
35
+ assert_match(/module PgViews/, result)
32
36
 
33
- PgGnostic.configure do
34
- view_model do
35
- nest_in_module ''
37
+ PgGnostic.configure do
38
+ view_model do
39
+ nest_in_module ''
40
+ end
36
41
  end
42
+ PgViewGenerator.new(['users', 'roles']).invoke_all
43
+ assert_file 'app/model/user.rb'
44
+ result = read 'app/model/user.rb'
45
+ assert_no_match(/module/, result)
37
46
  end
38
- generate 'pg_view','users','roles'
39
- assert_file 'app/model/user.rb'
40
- result = read 'app/model/user.rb'
41
- assert_no_match(/module/, result)
42
47
  end
43
- end
48
+ end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_gnostic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - niquola
@@ -9,19 +14,50 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-09-10 00:00:00 +04:00
17
+ date: 2010-11-18 00:00:00 +03:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: kung_figure
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :runtime
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: rails
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 3
43
+ - 0
44
+ - 0
45
+ version: 3.0.0
17
46
  type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: test-unit
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
20
53
  requirements:
21
54
  - - ">="
22
55
  - !ruby/object:Gem::Version
56
+ segments:
57
+ - 0
23
58
  version: "0"
24
- version:
59
+ type: :development
60
+ version_requirements: *id003
25
61
  description:
26
62
  email: niquola@gmail.com
27
63
  executables: []
@@ -34,13 +70,13 @@ files:
34
70
  - README.rdoc
35
71
  - Rakefile
36
72
  - MIT-LICENSE
37
- - generators/pg_view/USAGE
38
- - generators/pg_view/pg_view_generator.rb
39
- - generators/pg_view/templates/model.rb
40
- - generators/pg_view/templates/view.sql
41
- - generators/pg_view/templates/view.rb
73
+ - rails/generators/pg_view/USAGE
74
+ - rails/generators/pg_view/pg_view_generator.rb
75
+ - rails/generators/pg_view/templates/model.rb
76
+ - rails/generators/pg_view/templates/view.sql
77
+ - rails/generators/pg_view/templates/view.rb
78
+ - lib/pg_gnostic/railtie.rb
42
79
  - lib/pg_gnostic/config.rb
43
- - lib/pg_gnostic/tasks.rb
44
80
  - lib/pg_gnostic/view_definition.rb
45
81
  - lib/pg_gnostic.rb
46
82
  - tasks/pg_gnostic_tasks.rake
@@ -67,21 +103,25 @@ rdoc_options: []
67
103
  require_paths:
68
104
  - lib
69
105
  required_ruby_version: !ruby/object:Gem::Requirement
106
+ none: false
70
107
  requirements:
71
108
  - - ">="
72
109
  - !ruby/object:Gem::Version
110
+ segments:
111
+ - 0
73
112
  version: "0"
74
- version:
75
113
  required_rubygems_version: !ruby/object:Gem::Requirement
114
+ none: false
76
115
  requirements:
77
116
  - - ">="
78
117
  - !ruby/object:Gem::Version
118
+ segments:
119
+ - 0
79
120
  version: "0"
80
- version:
81
121
  requirements: []
82
122
 
83
123
  rubyforge_project:
84
- rubygems_version: 1.3.5
124
+ rubygems_version: 1.3.7
85
125
  signing_key:
86
126
  specification_version: 3
87
127
  summary: Rails plugin for postgres
@@ -1,5 +0,0 @@
1
- Description:
2
- Generate pg view file
3
-
4
- Modules Example:
5
- `./script/generate pg_view users
@@ -1,50 +0,0 @@
1
- $:.unshift(path('../lib'))
2
- require 'pg_gnostic'
3
- class PgViewGenerator < Rails::Generator::Base
4
- default_options :format => 'ruby'
5
- def manifest
6
- record do |m|
7
- unless args.size > 0
8
- puts "require view name"
9
- exit 1
10
- end
11
- parse_args
12
- model_path = PgGnostic.config.view_model.model_path
13
- m.directory File.join('db/views')
14
- m.directory File.join(model_path)
15
- case options[:format]
16
- when 'sql':
17
- m.template "view.sql", File.join('db/views',"#{@view_name}.sql"), :assigns=>@assigns
18
- when 'ruby':
19
- m.template "view.rb", File.join('db/views',"#{@view_name}.rb"), :assigns=>@assigns
20
- end
21
- m.template "model.rb", File.join(model_path,"#{@model_file_name}.rb"), :assigns=>@assigns
22
- end
23
- end
24
-
25
- def parse_args
26
- @view_name = args.shift.pluralize
27
- @model_name = @view_name.singularize
28
- @model_file_name = @model_name.underscore
29
- @class_name = @model_name.classify
30
- @dependencies = args if args.length > 0
31
- @assigns = {
32
- :view_name=>@view_name,
33
- :class_name=>@class_name,
34
- :dependencies=>@dependencies,
35
- :nest_in_module=>PgGnostic.config.view_model.nest_in_module,
36
- :prefix_view_name=>PgGnostic.config.view_model.prefix_view_name
37
- }
38
- end
39
-
40
- protected
41
- def banner
42
- "Usage: #{$0} #{spec.name} ViewName"
43
- end
44
-
45
- def add_options!(opt)
46
- opt.separator ''
47
- opt.separator 'Options:'
48
- opt.on("-f","--format=ruby", String, "sql | ruby","Default ruby") { |v| options[:format] = v }
49
- end
50
- end
@@ -1 +0,0 @@
1
- load File.join(File.dirname(__FILE__),'../..','tasks','pg_gnostic_tasks.rake')