throughcheckboxes 0.0.4 → 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,5 @@
1
1
  pkg/*
2
2
  *.gem
3
3
  .bundle
4
+ .yardoc
5
+ doc
@@ -1,3 +1,41 @@
1
- Very beta rails gem. No docs, no tests.
1
+ h2. Introduction
2
2
 
3
- I'll try to provide them soon.
3
+ This gem will help you to handle _has_many :through_ associations when you
4
+ need to add/remove these ones with checkboxes. If you think
5
+ about this type of situation you do the same steps for each association you
6
+ have to handle with checkboxes. I exctracted this gem from a project
7
+ where I had to handle about ten associations with checkboxes.
8
+
9
+ h2. How to use it
10
+
11
+ The best way to describe throughcheckboxes is to show some code:
12
+
13
+ In your model:
14
+
15
+ <pre>
16
+ class User < ActiveRecord::Base
17
+
18
+ # adds your associations
19
+ checkboxes_for :groups
20
+ end
21
+ </pre>
22
+
23
+ In your view:
24
+
25
+ <pre>
26
+ <%= form_for @user do |f| %>
27
+ <%= f.error_messages %>
28
+ <%= f.checkboxes_for :groups %>
29
+ </p>
30
+ <p><%= f.submit %></p>
31
+ <% end %>
32
+ </pre>
33
+
34
+ and that's all. Now, when you submit your form you get the
35
+ has_many :through association updated.
36
+
37
+ h2. Roadmap
38
+
39
+ * write tests
40
+ * write options for helper
41
+ * write more helpers
@@ -1,11 +1,17 @@
1
1
  module ThroughCheckboxes
2
2
 
3
+ # This module contains all the methods that _concern_ with
4
+ # ActiveRecord::Base.
3
5
  module Checkboxesfor
4
6
 
5
7
  extend ActiveSupport::Concern
6
8
 
7
9
  module ClassMethods
8
10
 
11
+ # Use it in your model for the relations you need to
12
+ # handle with checkboxes.
13
+ # @return [nil]
14
+ # @raise ThroughCheckboxesNameError If any relation is not valid.
9
15
  def checkboxes_for(*relations)
10
16
 
11
17
  klass = self
@@ -1,12 +1,21 @@
1
1
  module ThroughCheckboxes
2
2
 
3
- module Core
3
+ module Core # This module contains utility methods for both extensions and helpers.
4
4
 
5
5
  class ThroughCheckboxesNameError < StandardError; end
6
6
 
7
- def self.validate(klass, *relations)
7
+ # Checks the validity of the relations
8
+ # on a given class.
9
+ # A relation will be valid:
10
+ # * It exists
11
+ # * It's an _has_many
12
+ # * It uses the _through_ option
13
+ # @todo makes error raised more specific
14
+ # @raise ThroughCheckboxesNameError Generic Error
15
+ # @return [boolean] It returns _true_, it raises an exception if the validation fails.
16
+ def validate(klass, *relations)
8
17
  for relation in relations
9
- unless (klass.reflections[relation].present? &&
18
+ unless (klass.reflections[relation].present? &&
10
19
  klass.reflections[relation].macro == :has_many &&
11
20
  klass.reflections[relation].options[:through].present?)
12
21
  raise ThroughCheckboxesNameError, "#{relation} isn't an has_many :through for model #{klass}, check it out please."
@@ -14,16 +23,24 @@ module ThroughCheckboxes
14
23
  end
15
24
  end
16
25
 
17
- def self.relation_klass(klass, relation)
26
+ # Returns the class of a relation of
27
+ # of a given class.
28
+ # It cares about the _source_ option of the
29
+ # _has_many_.
30
+ # @return [class]
31
+ def relation_klass(klass, relation)
18
32
  source=klass.reflections[relation].options[:source]
19
33
  relation_klass = source.present? ? source.to_s : relation.to_s
20
34
  relation_klass.classify.constantize
21
35
  end
22
36
 
23
- def self.field_name(relation)
37
+ # Returns a pattern name for the attr_accessor used for handling checkboxes.
38
+ # @return [String]
39
+ def field_name(relation)
24
40
  "#{relation}_ids"
25
41
  end
26
42
 
43
+ extend self
27
44
 
28
45
  end
29
46
 
@@ -1,3 +1,3 @@
1
- module Throughcheckboxes
2
- VERSION = "0.0.4"
1
+ module ThroughCheckboxes
2
+ VERSION = "0.0.5"
3
3
  end
@@ -4,7 +4,7 @@ require "throughcheckboxes/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "throughcheckboxes"
7
- s.version = Throughcheckboxes::VERSION
7
+ s.version = ThroughCheckboxes::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["lucapette"]
10
10
  s.email = ["lucapette@gmail.com"]
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: throughcheckboxes
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.4
5
+ version: 0.0.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - lucapette
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-13 00:00:00 +01:00
13
+ date: 2011-03-19 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies: []
16
16