active_null 1.0.0 → 1.1.0

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