active_null 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 34802b6bb45c168b836473546d630a125fe6b116
4
- data.tar.gz: db5beef0d960320f86938d4a04cc38b22d9be4bd
2
+ SHA256:
3
+ metadata.gz: 43176e04bb964761222c58d11c0aeef9fcdcbbc11cc67845bbd08867f7ea919a
4
+ data.tar.gz: 806ba32adadf898cc76a82707fb6f94fc20ed9be961f4322d33e9f87bcd69118
5
5
  SHA512:
6
- metadata.gz: 53077a09ae14ecb32e5ef97df52b7178580fabde3cb0f9e5136219e9e6fdabae7eefa200986d95c899a76c76ec682d237a222ebcac9f978422979d82377c6d9d
7
- data.tar.gz: d9a9dbf632553cf2eaa5ec794b17a1fd83b3f510cd77d81eeaa94d47c1cd5960fb3c2ca2b88f641f83279b48ada6168af5fbf1d28c1b1fbd52d0218c317e0011
6
+ metadata.gz: 457eb6028294ebd1a5c55f11db46a1400cda19dffa12222e73d9007245da2bd600873f0233315d3b0edeafffea3b146032fc43fbd7c2b8705e0696351307fcda
7
+ data.tar.gz: 465e65a8cf576925d29733a6d857e772b9941741c368d6c2e09be955fe3999a43ba27480c90a6154ab84967308c334ac13227dfd929aaae877c11b16c9ec4cd0
data/README.md CHANGED
@@ -96,6 +96,21 @@ You can then safely do something like:
96
96
  @post = Post.find_by(id: 1).decorate
97
97
  ```
98
98
 
99
+ You can also define an alias for your `null` method for convenience
100
+
101
+ ```ruby
102
+ class User < ActiveRecord::Base
103
+ extend ActiveNull
104
+
105
+ null_model(:guest)
106
+ end
107
+
108
+ User.first # => <User>
109
+ User.null # => <null:User>
110
+ User.guest # => <null:User>
111
+ ```
112
+
113
+
99
114
  ## Contributing
100
115
 
101
116
  1. Fork it ( https://github.com/Originate/active_null/fork )
data/active_null.gemspec CHANGED
@@ -7,10 +7,10 @@ Gem::Specification.new do |spec|
7
7
  spec.name = 'active_null'
8
8
  spec.version = ActiveNull::VERSION
9
9
  spec.authors = ['alexpeachey']
10
- spec.email = ['alex.peachey@originate.com']
10
+ spec.email = ['alex.peachey@gmail.com']
11
11
  spec.summary = %q{Make ActiveRecord null model aware.}
12
12
  spec.description = %q{Make ActiveRecord null model aware.}
13
- spec.homepage = 'https://github.com/Originate/active_null'
13
+ spec.homepage = 'https://github.com/alexpeachey/active_null'
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency 'rake'
25
25
  spec.add_development_dependency 'rspec'
26
26
  spec.add_development_dependency 'activerecord', '~> 4.2'
27
- spec.add_development_dependency 'sqlite3'
27
+ spec.add_development_dependency 'sqlite3', '~> 1.3.6'
28
28
  spec.add_development_dependency 'draper', '~> 2.1'
29
29
  spec.add_development_dependency 'coveralls'
30
30
  end
data/lib/active_null.rb CHANGED
@@ -14,10 +14,16 @@ module ActiveNull
14
14
  @polymorphic_null_defaults || {}
15
15
  end
16
16
 
17
- def null_model(&block)
17
+ def null_model(method_name=nil, &block)
18
18
  @null_model_overrides = if block_given?
19
19
  Module.new.tap { |m| m.module_eval(&block) }
20
20
  end
21
+
22
+ if method_name
23
+ singleton_class.class_eval do
24
+ define_method(method_name) { null }
25
+ end
26
+ end
21
27
  end
22
28
 
23
29
  def find_by(*args, &block)
@@ -92,12 +92,22 @@ module ActiveNull
92
92
  end
93
93
 
94
94
  def full_name
95
- return name if model.parent == Object
96
- "#{model.parent.name}::#{name}"
95
+ return name if module_parent == Object
96
+ "#{module_parent_name}::#{name}"
97
97
  end
98
98
 
99
99
  def set_null_model(null)
100
- model.parent.const_set name, null
100
+ module_parent.const_set name, null
101
+ end
102
+
103
+ private
104
+
105
+ def module_parent
106
+ @module_parent ||= model.try(:module_parent) || model.parent
107
+ end
108
+
109
+ def module_parent_name
110
+ @module_parent_name ||= model.try(:module_parent_name) || model.parent.name
101
111
  end
102
112
  end
103
113
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveNull
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
@@ -21,6 +21,11 @@ describe ActiveNull do
21
21
  specify { expect(Test::TestModel.null).to be_instance_of(Test::NullTestModel) }
22
22
  end
23
23
 
24
+ describe '.guest' do
25
+ specify { expect(User.null).to be_instance_of(NullUser) }
26
+ specify { expect(User.guest).to be_instance_of(NullUser) }
27
+ end
28
+
24
29
  describe '.null_model' do
25
30
  specify { expect(Post.null.override).to eq 'I am an override.' }
26
31
  end
data/spec/models.rb CHANGED
@@ -15,6 +15,8 @@ end
15
15
  class User < ActiveRecord::Base
16
16
  extend ActiveNull
17
17
  has_many :comments, as: :author
18
+
19
+ null_model(:guest)
18
20
  end
19
21
 
20
22
  class Comment < ActiveRecord::Base
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_null
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - alexpeachey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-25 00:00:00.000000000 Z
11
+ date: 2020-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: naught
@@ -84,16 +84,16 @@ dependencies:
84
84
  name: sqlite3
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: 1.3.6
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: 1.3.6
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: draper
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -124,7 +124,7 @@ dependencies:
124
124
  version: '0'
125
125
  description: Make ActiveRecord null model aware.
126
126
  email:
127
- - alex.peachey@originate.com
127
+ - alex.peachey@gmail.com
128
128
  executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
@@ -145,7 +145,7 @@ files:
145
145
  - spec/null_spec.rb
146
146
  - spec/schema.rb
147
147
  - spec/spec_helper.rb
148
- homepage: https://github.com/Originate/active_null
148
+ homepage: https://github.com/alexpeachey/active_null
149
149
  licenses:
150
150
  - MIT
151
151
  metadata: {}
@@ -164,8 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
164
164
  - !ruby/object:Gem::Version
165
165
  version: '0'
166
166
  requirements: []
167
- rubyforge_project:
168
- rubygems_version: 2.4.6
167
+ rubygems_version: 3.0.3
169
168
  signing_key:
170
169
  specification_version: 4
171
170
  summary: Make ActiveRecord null model aware.