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 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