e9_rails 0.0.3 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/lib/e9_rails/active_record/attribute_searchable.rb +23 -0
- data/lib/e9_rails/active_record/inheritable_options.rb +58 -0
- data/lib/e9_rails/active_record/sti.rb +29 -0
- data/lib/e9_rails/helpers/pagination.rb +57 -0
- data/lib/e9_rails/helpers/title.rb +43 -0
- data/lib/e9_rails/version.rb +1 -1
- data/lib/e9_rails.rb +8 -0
- metadata +8 -3
data/.gitignore
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
module E9Rails::ActiveRecord
|
2
|
+
module AttributeSearchable
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
scope :attr_like, lambda {|*args| where(attr_like_scope_condition(*args)) }
|
7
|
+
scope :any_attrs_like, lambda {|*args| where(any_attrs_like_scope_conditions(*args)) }
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
def attr_like_scope_condition(attr_name, string, opts = {})
|
12
|
+
matcher = opts.delete(:matcher) || "%%%s%%"
|
13
|
+
arel_table[attr_name].matches(matcher % string)
|
14
|
+
end
|
15
|
+
|
16
|
+
def any_attrs_like_scope_conditions(*args)
|
17
|
+
opts = args.extract_options!
|
18
|
+
string = args.pop
|
19
|
+
args.flatten.map {|attr_name| attr_like_scope_condition(attr_name, string, opts) }.inject(&:or)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'active_model/naming'
|
2
|
+
require 'active_model/translation'
|
3
|
+
require 'active_support/hash_with_indifferent_access'
|
4
|
+
|
5
|
+
module E9Rails::ActiveRecord
|
6
|
+
module InheritableOptions
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
serialize :options
|
11
|
+
|
12
|
+
class_inheritable_accessor :options_parameters
|
13
|
+
self.options_parameters = []
|
14
|
+
|
15
|
+
class_inheritable_accessor :options_class
|
16
|
+
self.options_class = Options
|
17
|
+
|
18
|
+
self.options_class.lookup_ancestors = lookup_ancestors
|
19
|
+
end
|
20
|
+
|
21
|
+
def options=(hash={})
|
22
|
+
write_attribute(:options, hash)
|
23
|
+
end
|
24
|
+
|
25
|
+
def options
|
26
|
+
self.class.options_class.new( (read_attribute(:options) || {}).reverse_merge(Hash[options_parameters.zip([nil])]), self)
|
27
|
+
end
|
28
|
+
|
29
|
+
class Options < HashWithIndifferentAccess
|
30
|
+
extend ActiveModel::Naming
|
31
|
+
extend ActiveModel::Translation
|
32
|
+
|
33
|
+
class_inheritable_accessor :lookup_ancestors
|
34
|
+
|
35
|
+
attr_reader :base
|
36
|
+
|
37
|
+
class << self
|
38
|
+
def name; 'Options' end
|
39
|
+
def i18n_scope; :activerecord end
|
40
|
+
end
|
41
|
+
|
42
|
+
def initialize(hash, base)
|
43
|
+
merge!(hash)
|
44
|
+
@base = base
|
45
|
+
class << self; self; end.class_eval do
|
46
|
+
hash.each do |k, v|
|
47
|
+
define_method(k) { self[k] }
|
48
|
+
define_method("#{k}=") do |v|
|
49
|
+
self[k] = v
|
50
|
+
@base.options = Hash[self]
|
51
|
+
self[k]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module E9Rails::ActiveRecord
|
2
|
+
module STI
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
scope :of_type, lambda {|*types| where(:type => types.flatten.map {|t| t.to_s.classify }) }
|
7
|
+
scope :not_of_type, lambda {|*types| where(arel_table[:type].in(types.flatten.map {|t| t.to_s.classify }).not) }
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
def subclasses
|
12
|
+
@_subclasses ||= begin
|
13
|
+
# TODO is there a simpler, existing way of finding subclass types with STI
|
14
|
+
|
15
|
+
# TODO make this work with the new arel rewrite (#map is no longer a method)
|
16
|
+
#klasses = arel_table.project(Arel::Distinct.new(arel_table[:type])).map {|r| r.tuple.first }
|
17
|
+
klasses = connection.select_values("select distinct(type) from #{table_name}")
|
18
|
+
klasses.map! {|k| k.constantize rescue next }
|
19
|
+
klasses.compact!
|
20
|
+
klasses
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def subclasses_with_ancestor(mod)
|
25
|
+
subclasses.select {|klass| klass.ancestors.include?(mod) }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module E9Rails::Helpers
|
2
|
+
module Pagination
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
class_inheritable_accessor :pagination_page_param
|
7
|
+
self.pagination_page_param = :page
|
8
|
+
|
9
|
+
class_inheritable_accessor :pagination_per_page_param
|
10
|
+
self.pagination_per_page_param = :per_page
|
11
|
+
|
12
|
+
class_inheritable_accessor :pagination_per_page_default
|
13
|
+
self.pagination_per_page_default = 10
|
14
|
+
|
15
|
+
class_inheritable_accessor :pagination_feed_per_page_default
|
16
|
+
self.pagination_feed_per_page_default = 50
|
17
|
+
|
18
|
+
before_filter :pagination_parameters
|
19
|
+
|
20
|
+
helper_method :paging_page, :pagination_per_page, :paging?
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def pagination_per_page
|
26
|
+
if request.format.to_s =~ /rss/
|
27
|
+
self.class.pagination_feed_per_page_default
|
28
|
+
else
|
29
|
+
self.class.pagination_per_page_default
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def pagination_parameters
|
34
|
+
@pagination_parameters ||= pagination_defaults.dup.tap do |opts|
|
35
|
+
if page = params[self.class.pagination_page_param]
|
36
|
+
opts[self.class.pagination_page_param] = page
|
37
|
+
end
|
38
|
+
|
39
|
+
if per_page = params.delete(self.class.pagination_per_page_param)
|
40
|
+
opts[self.class.pagination_per_page_param] = per_page
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def paging_page
|
46
|
+
pagination_parameters[self.class.pagination_page_param] || 1
|
47
|
+
end
|
48
|
+
|
49
|
+
def paging?
|
50
|
+
!!params[self.class.pagination_page_param]
|
51
|
+
end
|
52
|
+
|
53
|
+
def pagination_defaults
|
54
|
+
{ self.class.pagination_page_param => 1, self.class.pagination_per_page_param => pagination_per_page }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module E9Rails::Helpers
|
2
|
+
module Title
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
helper HelperMethods
|
7
|
+
end
|
8
|
+
|
9
|
+
module HelperMethods
|
10
|
+
def meta_title(title = nil, options = {})
|
11
|
+
[
|
12
|
+
title || @_title,
|
13
|
+
respond_to?(:site_name) ? send(:site_name) : nil
|
14
|
+
].flatten.compact.map {|t| sanitize(t) }.join(options[:delimiter] || ' - ').html_safe
|
15
|
+
end
|
16
|
+
|
17
|
+
def title(*args)
|
18
|
+
options = args.extract_options!
|
19
|
+
|
20
|
+
if !args.empty?
|
21
|
+
@_title = args.dup
|
22
|
+
base_title = sanitize(args.shift)
|
23
|
+
|
24
|
+
options[:class] = [options[:class], 'title'].compact.join(' ')
|
25
|
+
options[:class].concat(' error') if options[:error]
|
26
|
+
|
27
|
+
unless options[:hide_title]
|
28
|
+
content = base_title
|
29
|
+
content = content_tag(options[:inner_tag], content) if options[:inner_tag]
|
30
|
+
|
31
|
+
content_tag(:h1, options.slice(:id, :class)) do
|
32
|
+
''.tap do |html|
|
33
|
+
html.concat options[:prepend] if options[:prepend]
|
34
|
+
html.concat content
|
35
|
+
html.concat options[:append] if options[:append]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/e9_rails/version.rb
CHANGED
data/lib/e9_rails.rb
CHANGED
@@ -6,5 +6,13 @@ module E9Rails
|
|
6
6
|
module Helpers
|
7
7
|
autoload :Translation, 'e9_rails/helpers/translation'
|
8
8
|
autoload :ResourceErrorMessages, 'e9_rails/helpers/resource_error_messages'
|
9
|
+
autoload :Title, 'e9_rails/helpers/title'
|
10
|
+
autoload :Pagination, 'e9_rails/helpers/pagination'
|
11
|
+
end
|
12
|
+
|
13
|
+
module ActiveRecord
|
14
|
+
autoload :STI, 'e9_rails/active_record/sti'
|
15
|
+
autoload :AttributeSearchable, 'e9_rails/active_record/attribute_searchable'
|
16
|
+
autoload :InheritableOptions, 'e9_rails/active_record/inheritable_options'
|
9
17
|
end
|
10
18
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 5
|
9
|
+
version: 0.0.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Travis Cox
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-03-
|
17
|
+
date: 2011-03-25 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -61,7 +61,12 @@ files:
|
|
61
61
|
- Rakefile
|
62
62
|
- e9_rails.gemspec
|
63
63
|
- lib/e9_rails.rb
|
64
|
+
- lib/e9_rails/active_record/attribute_searchable.rb
|
65
|
+
- lib/e9_rails/active_record/inheritable_options.rb
|
66
|
+
- lib/e9_rails/active_record/sti.rb
|
67
|
+
- lib/e9_rails/helpers/pagination.rb
|
64
68
|
- lib/e9_rails/helpers/resource_error_messages.rb
|
69
|
+
- lib/e9_rails/helpers/title.rb
|
65
70
|
- lib/e9_rails/helpers/translation.rb
|
66
71
|
- lib/e9_rails/version.rb
|
67
72
|
has_rdoc: true
|