e9_rails 0.0.3 → 0.0.5

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/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  pkg/*
2
2
  *.gem
3
3
  .bundle
4
+ *.swp
@@ -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
@@ -1,3 +1,3 @@
1
1
  module E9Rails
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.5"
3
3
  end
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
- - 3
9
- version: 0.0.3
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-10 00:00:00 -05:00
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