Guest User

Untitled

a guest
Sep 2nd, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. package Dancer::Plugin::Teng;
  2.  
  3. BEGIN {
  4. $Dancer::Plugin::Teng::VERSION = '0.1';
  5. }
  6.  
  7. use strict;
  8. use warnings;
  9. use Dancer::Plugin;
  10. use DBI;
  11. use Teng;
  12. use Teng::Schema::Loader;
  13.  
  14. my $schemas = {};
  15.  
  16. register teng => sub {
  17. my $name = shift;
  18. my $cfg = plugin_setting;
  19.  
  20. if (not defined $name) {
  21. ($name) = keys %$cfg or die "No schemas are configured";
  22. }
  23.  
  24. if ($schemas->{$name}) {
  25. my $dbh = $schemas->{$name}->dbh;
  26. if (!$dbh->ping) {
  27. $dbh->disconnect;
  28. delete $schemas->{$name};
  29. } else {
  30. return $schemas->{$name};
  31. }
  32. }
  33. #return $schemas->{$name} if $schemas->{$name};
  34.  
  35. my $options = $cfg->{$name} or die "The schema $name is not configured";
  36.  
  37. my @conn_info = $options->{connect_info}
  38. ? @{$options->{connect_info}}
  39. : @$options{qw(dsn user pass options)};
  40.  
  41. # pckg should be deprecated
  42. my $schema_class = $options->{schema_class} || $options->{pckg};
  43.  
  44. if ($schema_class) {
  45. $schema_class =~ s/-/::/g;
  46. eval "use $schema_class";
  47. if ( my $err = $@ ) {
  48. die "error while loading $schema_class : $err";
  49. }
  50. $schemas->{$name} = $schema_class->connect({
  51. connect_info => \@conn_info,
  52. on_connect_do => $options->{on_connect_do},
  53. });
  54. } else {
  55. my $dbh = DBI->connect(@conn_info);
  56. my $schema = Teng::Schema::Loader->load(
  57. dbh => $dbh,
  58. namespace => 'MyAPP::DB',
  59. );
  60. $schemas->{$name} = Teng->new(
  61. connect_info => \@conn_info,
  62. on_connect_do => $options->{on_connect_do},
  63. schema => $schema,
  64. );
  65. }
  66.  
  67. return $schemas->{$name};
  68. };
  69.  
  70. register_plugin;
  71.  
  72. 1;
  73.  
  74. __END__
  75.  
  76. plugins:
  77. Teng:
  78. conn1:
  79. dsn: dbi:mysql:database=db1;host=localhost
  80. user: root
  81. pass:
  82. options:
  83. RaiseError: 1
  84. PrintError: 0
  85. AutoCommit: 1
  86. on_connect_do: ["SET NAMES utf8"]
  87. conn2:
  88. dsn: dbi:mysql:database=db2;host=localhost
  89. user: root
  90. pass:
  91. options:
  92. RaiseError: 1
  93. PrintError: 0
  94. AutoCommit: 1
  95. on_connect_do: ["SET NAMES utf8"]
Add Comment
Please, Sign In to add comment