mack-orm 0.8.0.101 → 0.8.1
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/lib/mack-orm.rb
CHANGED
@@ -3,6 +3,7 @@ require 'genosaurus'
|
|
3
3
|
require 'configatron'
|
4
4
|
|
5
5
|
configatron.mack.set_default(:disable_transactional_tests, false)
|
6
|
+
configatron.mack.database.pagination.set_default(:results_per_page, 10)
|
6
7
|
|
7
8
|
base = File.join(File.dirname(__FILE__), "mack-orm")
|
8
9
|
require File.join(base, "database")
|
@@ -11,8 +12,54 @@ require File.join(base, "generators")
|
|
11
12
|
require File.join(base, "genosaurus_helpers")
|
12
13
|
require File.join(base, "model_column")
|
13
14
|
require File.join(base, "test_extensions")
|
15
|
+
require File.join(base, "paginator")
|
14
16
|
require File.join(base, "scaffold_generator", "scaffold_generator")
|
15
17
|
|
16
18
|
Mack::Environment.after_class_method(:load) do
|
17
19
|
Mack::Database.establish_connection(Mack.env)
|
18
|
-
end
|
20
|
+
end
|
21
|
+
|
22
|
+
Mack::Portlet::Unpacker.registered_items[:migrations] = Proc.new do |force|
|
23
|
+
local_files = Dir.glob(Mack::Paths.migrations('**/*')).sort
|
24
|
+
num = '001'
|
25
|
+
unless local_files.empty?
|
26
|
+
num = File.basename(local_files.last).match(/(\d+)_.+/).captures.first
|
27
|
+
end
|
28
|
+
files = []
|
29
|
+
Mack.search_path(:db, false).each do |path|
|
30
|
+
files << Dir.glob(File.join(path, 'migrations', '**/*'))
|
31
|
+
end
|
32
|
+
files = files.flatten.compact.uniq.sort
|
33
|
+
files.each do |f|
|
34
|
+
fname = File.basename(f)
|
35
|
+
base = fname.match(/\d+_(.+)/).captures.first
|
36
|
+
if local_files.include?(/\d+_#{base}/) && !force
|
37
|
+
puts "Skipping: #{base}"
|
38
|
+
elsif local_files.include?(/\d+_#{base}/) && force
|
39
|
+
local_files.each do |lf|
|
40
|
+
if lf.match(/\d+_#{base}/)
|
41
|
+
n = lf.match(/(\d+)_#{base}/).captures.first
|
42
|
+
puts "Overwriting: #{base}"
|
43
|
+
src = File.read(f)
|
44
|
+
src.scan(/migration\D+\d+/).each do |line|
|
45
|
+
src.gsub!(line, line.gsub(/\d+/, n))
|
46
|
+
end
|
47
|
+
File.open(lf, 'w') do |w|
|
48
|
+
w.puts src
|
49
|
+
end
|
50
|
+
break
|
51
|
+
end
|
52
|
+
end
|
53
|
+
else
|
54
|
+
puts "Creating: #{"#{num}_#{base}"}"
|
55
|
+
num = num.succ
|
56
|
+
src = File.read(f)
|
57
|
+
src.scan(/migration\D+\d+/).each do |line|
|
58
|
+
src.gsub!(line, line.gsub(/\d+/, num))
|
59
|
+
end
|
60
|
+
File.open(Mack::Paths.migrations("#{num}_#{base}"), 'w') do |w|
|
61
|
+
w.puts src
|
62
|
+
end # File.open
|
63
|
+
end # if
|
64
|
+
end # files.each
|
65
|
+
end # Proc
|
@@ -23,7 +23,16 @@ module Mack
|
|
23
23
|
|
24
24
|
# Returns a list of the all migration files.
|
25
25
|
def self.migration_files
|
26
|
-
|
26
|
+
allmigs = {}
|
27
|
+
Mack.search_path_local_first(:db).each do |path|
|
28
|
+
Dir.glob(File.join(path, 'migrations', '*.rb')).each do |f|
|
29
|
+
base = File.basename(f).match(/\d+_(.+)/).captures.first.downcase
|
30
|
+
unless allmigs[base]
|
31
|
+
allmigs[base] = f
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
allmigs.collect {|k,v| v}.sort
|
27
36
|
end
|
28
37
|
|
29
38
|
end # Migrations
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Mack
|
2
|
+
module Database
|
3
|
+
|
4
|
+
# Creates a new Mack::Database::Paginator class and calls the paginate method on it.
|
5
|
+
def self.paginate(klass, options = {}, query_options = {})
|
6
|
+
paginator = Mack::Database::Paginator.new(klass, options, query_options)
|
7
|
+
paginator.paginate
|
8
|
+
end
|
9
|
+
|
10
|
+
# This class provides a clean API for doing database pagination.
|
11
|
+
# The paginate methods needs to be implemented by the ORM developer.
|
12
|
+
class Paginator
|
13
|
+
|
14
|
+
# The Class that all queries will be called on
|
15
|
+
attr_accessor :klass
|
16
|
+
# Options for the Paginator itself
|
17
|
+
attr_accessor :options
|
18
|
+
# Options for the queries to be run
|
19
|
+
attr_accessor :query_options
|
20
|
+
# The total rows returned by the Paginator
|
21
|
+
attr_accessor :total_results
|
22
|
+
# The total pages available
|
23
|
+
attr_accessor :total_pages
|
24
|
+
# The actual records themselves
|
25
|
+
attr_accessor :results
|
26
|
+
# The current page in the pagination. Default is 1.
|
27
|
+
attr_accessor :current_page
|
28
|
+
# The number of results to be returned per page.
|
29
|
+
attr_accessor :results_per_page
|
30
|
+
|
31
|
+
# Takes the Class that all queries will be run on, options for the Paginator,
|
32
|
+
# and options for the queries that are going to be run.
|
33
|
+
def initialize(klass, options = {}, query_options = {})
|
34
|
+
self.klass = klass
|
35
|
+
self.options = options
|
36
|
+
self.query_options = query_options
|
37
|
+
self.current_page = (self.options.delete(:current_page) || 1).to_i
|
38
|
+
self.results_per_page = (self.options.delete(:results_per_page) || configatron.mack.database.pagination.results_per_page).to_i
|
39
|
+
end
|
40
|
+
|
41
|
+
# Implement this method in your ORM package. It should return <tt>self</tt> and set the following
|
42
|
+
# accessors: <tt>total_results</tt>, <tt>total_pages</tt>, <tt>results</tt>.
|
43
|
+
def paginate
|
44
|
+
raise NoMethodError.new('paginate')
|
45
|
+
end
|
46
|
+
|
47
|
+
# Is there a next page?
|
48
|
+
def has_next?
|
49
|
+
return self.current_page != self.total_pages && self.total_pages > 1
|
50
|
+
end
|
51
|
+
|
52
|
+
# Is there a previous page?
|
53
|
+
def has_previous?
|
54
|
+
return self.current_page != 1 && self.total_pages > 1
|
55
|
+
end
|
56
|
+
|
57
|
+
# The starting index for this group of results.
|
58
|
+
# Useful for building things like:
|
59
|
+
# Displaying 11 - 20 of 56 results.
|
60
|
+
def start_index
|
61
|
+
return 0 if self.total_results == 0
|
62
|
+
si = ((self.current_page - 1) * self.results_per_page)
|
63
|
+
return (si >= 0 ? si + 1 : 0)
|
64
|
+
end
|
65
|
+
|
66
|
+
# The ending index for this group of results.
|
67
|
+
# Useful for building things like:
|
68
|
+
# Displaying 11 - 20 of 56 results.
|
69
|
+
def end_index
|
70
|
+
ei = self.current_page * self.results_per_page
|
71
|
+
return (ei < self.total_results ? ei : self.total_results)
|
72
|
+
end
|
73
|
+
|
74
|
+
def ==(other) # :nodoc:
|
75
|
+
self.results == other.results
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
@@ -8,7 +8,7 @@ class ScaffoldGenerator < Genosaurus
|
|
8
8
|
|
9
9
|
def setup # :nodoc:
|
10
10
|
@name_singular = param(:name).singular.underscore
|
11
|
-
@name_plural =
|
11
|
+
@name_plural = @name_singular.plural.underscore
|
12
12
|
@name_singular_camel = @name_singular.camelcase
|
13
13
|
@name_plural_camel = @name_plural.camelcase
|
14
14
|
@test_framework = configatron.mack.testing_framework
|
@@ -4,7 +4,7 @@ namespace :test do
|
|
4
4
|
desc "Sets up your testing environment"
|
5
5
|
task :setup do
|
6
6
|
ENV["MACK_ENV"] = "test"
|
7
|
-
|
7
|
+
Mack.reset_logger!
|
8
8
|
Rake::Task["db:recreate"].invoke
|
9
9
|
Mack::Database.dump_structure("development", :default)
|
10
10
|
Mack::Database.load_structure(Mack::Paths.db("development_schema_structure.sql"))
|
@@ -18,7 +18,7 @@ namespace :test do
|
|
18
18
|
if respond_to?(:run_factories)
|
19
19
|
# auto require factories:
|
20
20
|
Dir.glob(Mack::Paths.test("factories", "**/*.rb")).each do |f|
|
21
|
-
require f
|
21
|
+
require File.expand_path(f)
|
22
22
|
end
|
23
23
|
run_factories(:init)
|
24
24
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mack-orm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- markbates
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-10-
|
12
|
+
date: 2008-10-26 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -27,6 +27,7 @@ files:
|
|
27
27
|
- lib/mack-orm/generators.rb
|
28
28
|
- lib/mack-orm/genosaurus_helpers.rb
|
29
29
|
- lib/mack-orm/model_column.rb
|
30
|
+
- lib/mack-orm/paginator.rb
|
30
31
|
- lib/mack-orm/scaffold_generator/manifest.yml
|
31
32
|
- lib/mack-orm/scaffold_generator/scaffold_generator.rb
|
32
33
|
- lib/mack-orm/scaffold_generator/templates/app/controllers/controller.rb.template
|