null_and_void 1.2 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 58b39812153fc58e40a5fc785eeecbb11f5b6505
4
+ data.tar.gz: 392b568d86fe7b7a3271c7c440346147dccf52b0
5
+ SHA512:
6
+ metadata.gz: aacd733afcbf39f5f7dcec15ca0b10d2731633a7e580135f5bde4e0dceea42f7018bc2092ee4d61eaa2f1db0081d280c2df7132c10acc2a5db53583570b52e32
7
+ data.tar.gz: 88be210ed359bdfbde81eea48ff5e70be1d077ac0859194b440860c0ad7ed533f9449d107dea7c284f95b2505255d306810ccac66d3ab3bf34d4634d8df7d1e4
data/README.md CHANGED
@@ -3,7 +3,7 @@ Null And Void
3
3
 
4
4
  **Create Null Objects with Ease**
5
5
 
6
- <img src="http://cdn.memegenerator.net/instances/300x/34275719.jpg" align="right" />
6
+ <img src="https://dl.dropbox.com/s/3vro4yd2vsa5xga/bad-luck-brian-null-object.jpg" align="right" />
7
7
 
8
8
  Using the Null Object pattern in Ruby is rather easy so why create a gem?
9
9
 
@@ -220,6 +220,13 @@ Will return:
220
220
  NullUser.instance
221
221
  ```
222
222
 
223
+ Other Approaches
224
+ ------
225
+
226
+ If you'd like to try a more builder-centric approach to Null Objects, check out:
227
+
228
+ [Naught](http://github.com/avdi/naught)
229
+
223
230
  Issues
224
231
  ------
225
232
 
@@ -1,4 +1,4 @@
1
- require 'active_support/inflector/methods'
1
+ require 'null_and_void/inflections'
2
2
 
3
3
  module NullAndVoid
4
4
  module Convertible
@@ -51,12 +51,12 @@ module NullAndVoid
51
51
  end
52
52
 
53
53
  def to_model
54
- base_path = ActiveSupport::Inflector.demodulize(self.class.name)
55
- module_path = ActiveSupport::Inflector.deconstantize(self.class.name)
54
+ base_path = NullAndVoid::Inflections.demodulize(self.class.name)
55
+ module_path = NullAndVoid::Inflections.deconstantize(self.class.name)
56
56
  source_model = base_path.gsub(/^Null/, '')
57
57
  source_model_path = "#{module_path}::#{source_model}"
58
58
 
59
- ActiveSupport::Inflector.constantize(source_model_path).new
59
+ NullAndVoid::Inflections.constantize(source_model_path).new
60
60
  end
61
61
  end
62
62
  end
@@ -0,0 +1,47 @@
1
+ module NullAndVoid
2
+ module Inflections
3
+ def self.demodulize(path)
4
+ path = path.to_s
5
+ if i = path.rindex('::')
6
+ path[(i+2)..-1]
7
+ else
8
+ path
9
+ end
10
+ end
11
+
12
+ def self.deconstantize(path)
13
+ path.to_s[0, path.rindex('::') || 0] # implementation based on the one in facets' Module#spacename
14
+ end
15
+
16
+ def self.constantize(camel_cased_word)
17
+ names = camel_cased_word.split('::')
18
+
19
+ # Trigger a builtin NameError exception including the ill-formed constant in the message.
20
+ Object.const_get(camel_cased_word) if names.empty?
21
+
22
+ # Remove the first blank element in case of '::ClassName' notation.
23
+ names.shift if names.size > 1 && names.first.empty?
24
+
25
+ names.inject(Object) do |constant, name|
26
+ if constant == Object
27
+ constant.const_get(name)
28
+ else
29
+ candidate = constant.const_get(name)
30
+ next candidate if constant.const_defined?(name, false)
31
+ next candidate unless Object.const_defined?(name)
32
+
33
+ # Go down the ancestors to check it it's owned
34
+ # directly before we reach Object or the end of ancestors.
35
+ constant = constant.ancestors.inject do |const, ancestor|
36
+ break const if ancestor == Object
37
+ break ancestor if ancestor.const_defined?(name, false)
38
+ const
39
+ end
40
+
41
+ # owner is in Object, so raise
42
+ constant.const_get(name, false)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,16 +1,16 @@
1
- require 'active_support/inflector/methods'
1
+ require 'null_and_void/inflections'
2
2
  require 'null_and_void/null_object'
3
3
 
4
4
  module NullAndVoid
5
5
  module ModelSupport
6
6
  module ClassMethods
7
7
  def as_null_object
8
- base_path = ActiveSupport::Inflector.demodulize(self.name)
9
- module_path = ActiveSupport::Inflector.deconstantize(self.name)
8
+ base_path = NullAndVoid::Inflections.demodulize(self.name)
9
+ module_path = NullAndVoid::Inflections.deconstantize(self.name)
10
10
  null_object_base = "Null#{base_path}"
11
11
  source_model_path = "#{module_path}::#{null_object_base}"
12
12
 
13
- ActiveSupport::Inflector.constantize(source_model_path).instance
13
+ NullAndVoid::Inflections.constantize(source_model_path).instance
14
14
  rescue NameError
15
15
  NullAndVoid::NullObject.instance
16
16
  end
@@ -1,3 +1,3 @@
1
1
  module NullAndVoid
2
- VERSION = '1.2'
2
+ VERSION = '1.3.0'
3
3
  end
metadata CHANGED
@@ -1,62 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: null_and_void
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: '1.2'
4
+ version: 1.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - jfelchner
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-04-17 00:00:00.000000000 Z
11
+ date: 2014-03-01 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- prerelease: false
16
- type: :runtime
17
- name: activesupport
18
- requirement: !ruby/object:Gem::Requirement
19
- none: false
20
- requirements:
21
- - - ~>
22
- - !ruby/object:Gem::Version
23
- version: '3.1'
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: '3.1'
30
- - !ruby/object:Gem::Dependency
31
- prerelease: false
32
- type: :development
33
14
  name: rspec
34
15
  requirement: !ruby/object:Gem::Requirement
35
- none: false
36
16
  requirements:
37
- - - ~>
17
+ - - "~>"
38
18
  - !ruby/object:Gem::Version
39
19
  version: '2.12'
20
+ type: :development
21
+ prerelease: false
40
22
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
23
  requirements:
43
- - - ~>
24
+ - - "~>"
44
25
  - !ruby/object:Gem::Version
45
26
  version: '2.12'
46
27
  - !ruby/object:Gem::Dependency
47
- prerelease: false
48
- type: :development
49
28
  name: rspectacular
50
29
  requirement: !ruby/object:Gem::Requirement
51
- none: false
52
30
  requirements:
53
- - - ~>
31
+ - - "~>"
54
32
  - !ruby/object:Gem::Version
55
33
  version: '0.11'
34
+ type: :development
35
+ prerelease: false
56
36
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
37
  requirements:
59
- - - ~>
38
+ - - "~>"
60
39
  - !ruby/object:Gem::Version
61
40
  version: '0.11'
62
41
  description: Makes generating Null Objects easy.
@@ -66,8 +45,12 @@ extensions: []
66
45
  extra_rdoc_files:
67
46
  - README.md
68
47
  files:
48
+ - README.md
49
+ - Rakefile
50
+ - lib/null_and_void.rb
69
51
  - lib/null_and_void/convertible.rb
70
52
  - lib/null_and_void/falsifiable.rb
53
+ - lib/null_and_void/inflections.rb
71
54
  - lib/null_and_void/introspectable.rb
72
55
  - lib/null_and_void/maybe.rb
73
56
  - lib/null_and_void/model_support.rb
@@ -75,9 +58,6 @@ files:
75
58
  - lib/null_and_void/nullified.rb
76
59
  - lib/null_and_void/stubbable.rb
77
60
  - lib/null_and_void/version.rb
78
- - lib/null_and_void.rb
79
- - Rakefile
80
- - README.md
81
61
  - spec/convertible_spec.rb
82
62
  - spec/falsifiable_spec.rb
83
63
  - spec/introspectable_spec.rb
@@ -89,28 +69,27 @@ files:
89
69
  - spec/stubbable_spec.rb
90
70
  homepage: https://github.com/jfelchner/null_and_void
91
71
  licenses: []
72
+ metadata: {}
92
73
  post_install_message:
93
74
  rdoc_options:
94
- - --charset = UTF-8
75
+ - "--charset = UTF-8"
95
76
  require_paths:
96
77
  - lib
97
78
  required_ruby_version: !ruby/object:Gem::Requirement
98
- none: false
99
79
  requirements:
100
- - - ! '>='
80
+ - - ">="
101
81
  - !ruby/object:Gem::Version
102
82
  version: '0'
103
83
  required_rubygems_version: !ruby/object:Gem::Requirement
104
- none: false
105
84
  requirements:
106
- - - ! '>='
85
+ - - ">="
107
86
  - !ruby/object:Gem::Version
108
87
  version: '0'
109
88
  requirements: []
110
89
  rubyforge_project: null_and_void
111
- rubygems_version: 1.8.25
90
+ rubygems_version: 2.2.0
112
91
  signing_key:
113
- specification_version: 3
92
+ specification_version: 4
114
93
  summary: Easy Null Objects
115
94
  test_files:
116
95
  - spec/convertible_spec.rb