hideable 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012-3 Joe Corcoran
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -8,39 +8,47 @@ A simple way to provide hideability to ActiveRecord models. Mark records as hidd
8
8
 
9
9
  Run the generator to create migrations for all of the models you want to hide:
10
10
 
11
- $ rails generate hideable:migration Foo Bar
12
- $ rake db:migrate
11
+ ```bash
12
+ rails generate hideable:migration Foo Bar
13
+ rake db:migrate
14
+ ```
13
15
 
14
16
  Declare your models `hideable`:
15
17
 
16
- class Foo < ActiveRecord::Base
17
- extend Hideable::ActiveRecord
18
- hideable
19
- end
18
+ ```ruby
19
+ class Foo < ActiveRecord::Base
20
+ extend Hideable::ActiveRecord
21
+ hideable
22
+ end
23
+ ```
20
24
 
21
- This will add `hide!`, `unhide!` and `hidden?` instance methods and `hidden` and `not_hidden` scopes.
25
+ This will add `#hide!`, `#unhide!` and `#hidden?` instance methods and `.hidden` and `.not_hidden` scopes.
22
26
 
23
27
  Hideable is designed to work in a similar way to the `:dependent` option on associations too, if that's what you want.
24
28
 
25
- class Foo < ActiveRecord::Base
26
- has_one :bar
29
+ ```ruby
30
+ class Foo < ActiveRecord::Base
31
+ has_one :bar
27
32
 
28
- extend Hideable::ActiveRecord
29
- hideable :dependent => :hide
30
- end
33
+ extend Hideable::ActiveRecord
34
+ hideable :dependent => :hide
35
+ end
31
36
 
32
- class Bar < ActiveRecord::Base
33
- belongs_to :foo
37
+ class Bar < ActiveRecord::Base
38
+ belongs_to :foo
34
39
 
35
- extend Hideable::ActiveRecord
36
- hideable
37
- end
40
+ extend Hideable::ActiveRecord
41
+ hideable
42
+ end
43
+ ```
38
44
 
39
45
  All models that you wish to hide, including dependents, must be declared as `hideable`.
40
46
 
41
- > foo = Foo.not_hidden.first
42
- > foo.hide
43
- > foo.bar.hidden? #=> true
47
+ ```ruby
48
+ foo = Foo.not_hidden.first
49
+ foo.hide!
50
+ foo.bar.hidden? #=> true
51
+ ```
44
52
 
45
53
  ## Why?
46
54
 
@@ -50,12 +58,12 @@ Knowing that you can hide or unhide a record is often better destroying it for g
50
58
 
51
59
  Install the general dependencies, including all the versions of `activerecord` that `hideable` is tested against.
52
60
 
53
- ```
54
- $ bundle install && rake appraisal:install
61
+ ```bash
62
+ bundle install && rake appraisal:install
55
63
  ```
56
64
 
57
65
  Run tests as follows.
58
66
 
59
- ```
60
- $ rake appraisal
67
+ ```bash
68
+ rake appraisal
61
69
  ```
@@ -3,9 +3,9 @@ module Hideable
3
3
 
4
4
  def hideable(options = {})
5
5
  send :include, InstanceMethods
6
- class_attribute :hide_dependent
7
- self.hide_dependent = options[:dependent] == :hide ? true : false
8
- after_save :update_hideable_dependents
6
+ class_attribute :hide_dependents
7
+ self.hide_dependents = options[:dependent] == :hide ? true : false
8
+ after_save :update_hideable_dependents!, :if => :update_hideable_dependents?
9
9
  end
10
10
 
11
11
  def hidden
@@ -18,26 +18,30 @@ module Hideable
18
18
  self.save!
19
19
  end
20
20
 
21
- private
21
+ def update_hideable_dependents?
22
+ self.hidden_at_changed?
23
+ end
22
24
 
23
- def update_hideable_dependents
24
- self.class.reflect_on_all_associations.each do |reflection|
25
- if update_reflected_record?(reflection)
26
- dependent_records = Array(self.send(reflection.name)).compact
27
- dependent_records.each do |record|
28
- action = self.hidden? ? :hide! : :unhide!
29
- record.send(action) if record.respond_to?(action)
30
- end
25
+ def update_hideable_dependents!
26
+ self.class.reflect_on_all_associations.each do |reflection|
27
+ if update_reflected_record?(reflection)
28
+ dependent_records = Array(self.send(reflection.name)).compact
29
+ dependent_records.each do |record|
30
+ action = self.hidden? ? :hide! : :unhide!
31
+ record.send(action) if record.respond_to?(action)
31
32
  end
32
33
  end
33
34
  end
35
+ end
36
+
37
+ private
34
38
 
35
39
  def update_reflected_record?(reflection)
36
40
  macros = [:has_many, :has_one, :has_and_belongs_to_many]
37
41
  (
38
42
  macros.include?(reflection.macro) &&
39
43
  reflection.options[:through].nil? &&
40
- self.class.hide_dependent == true
44
+ self.class.hide_dependents == true
41
45
  )
42
46
  end
43
47
 
@@ -1,3 +1,3 @@
1
1
  module Hideable
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hideable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-10 00:00:00.000000000 Z
12
+ date: 2013-07-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -104,6 +104,7 @@ files:
104
104
  - lib/hideable/version.rb
105
105
  - lib/hideable.rb
106
106
  - README.md
107
+ - LICENSE.txt
107
108
  homepage: http://rubygems.org/gems/hideable
108
109
  licenses: []
109
110
  post_install_message: