safe_finder 0.1.0 → 0.1.1

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
2
  SHA1:
3
- metadata.gz: 7888a25bfecaee45bf6a1ae510d17f488b195573
4
- data.tar.gz: 5d3dd4b94fabf2d2b3978ae4e74348955c12e4e6
3
+ metadata.gz: 1e21ddcab7d21480ced641a0530ed32e6837d09d
4
+ data.tar.gz: 8ec78514a069609faa307801108f4b480003bd5c
5
5
  SHA512:
6
- metadata.gz: c1c08c62dfee492ff309f3d029e85cb0b31541d83f18aca392c068ad7d31615c6608534efdd1795768772e0a247371e33a4792d9817a07a8bf2016c5b1e4eb7b
7
- data.tar.gz: 3585c85b192eb6b42603948b5ddf5cb843934b50864c347f4b6b1e6d749b428aba8870f1b8f9bac31740de7d869e0287ca45c6d9c75790b891c651fb066fdacb
6
+ metadata.gz: 7349ae3e416784d2a62681b14d190dfd2e8c044edfc07ce026c69b874dee94feb5dc76ef6c21c4c983392fa0f4ef7dd41538df8e9f1c9a189acdda7747fc9cc7
7
+ data.tar.gz: c8af28a85c08425f4ac738c760b58371fda1e2c20b415715a8b72f5637647d1bcc6e8e0123cfab94d8e2147695745fbbb6cf9f92eb3cfe218f94f194301356df
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ *.gem
data/README.md CHANGED
@@ -3,11 +3,11 @@
3
3
  [![Test Coverage](https://codeclimate.com/github/st0012/SafeFinder/badges/coverage.svg)](https://codeclimate.com/github/st0012/SafeFinder/coverage)
4
4
  # SafeFinder
5
5
 
6
- SafeFinder let you define model's null_object through simple DSL, and returns it when you can't find a result.
6
+ SafeFinder lets you define a model's `Null Object` through a simple DSL, and returns that when you don't find an instance of that model.
7
7
 
8
8
  ## Installation
9
9
 
10
- Add this line to your application's Gemfile:
10
+ Add this line to your application's `Gemfile`:
11
11
 
12
12
  ```ruby
13
13
  gem 'safe_finder'
@@ -34,20 +34,20 @@ class Post < ActiveRecord::Base
34
34
  end
35
35
  ```
36
36
 
37
- Now you can query like this, but it doesn't find anything:
37
+ Now you can query like this, and if it doesn't find anything it returns a `Null Object`:
38
38
 
39
39
  ```ruby
40
- # It returns a null_object
41
- null_object = Post.safely.find_by_title("New Post")
40
+ # It returns a Null Object
41
+ null_object = Post.safely.find_by_title("Not Exists")
42
42
 
43
43
  null_object.class # NullPost
44
44
  null_object.title # nil
45
45
  null_object.content # nil
46
46
  ```
47
47
 
48
- ### Custom Attribute & Method
48
+ ### Custom Attributes and Methods
49
49
 
50
- And you can custom null_object's attribute or method using DSL:
50
+ And you can customize the Null Object's attributes or methods using a DSL:
51
51
 
52
52
  ```ruby
53
53
  class Post < ActiveRecord::Base
@@ -60,22 +60,28 @@ class Post < ActiveRecord::Base
60
60
  end
61
61
  ```
62
62
 
63
- ### Get NullObject directly
63
+ ```ruby
64
+ null_object = Post.safely.find_by_title("Not Exists")
65
+ null_object.title # "Null"
66
+ null_object.some_method # "Do Something"
67
+ ```
68
+
69
+ ### Get a Null Object directly
64
70
 
65
71
  Just simply use:
66
72
  ```ruby
67
- Post.null_object => #<NullPost:0x007fa8a4713be0>
73
+ Post.null_object # <NullPost:0x007fa8a4713be0>
68
74
  ```
69
75
 
70
76
  ### Inheritance
71
77
 
72
- All null_object inherits `SafeFinder::NullObject`, so you can add it in
78
+ All `Null Object`s inherit `SafeFinder::NullObject`, so you can add it in
73
79
 
74
80
  ```
75
81
  app/models/safe_finder/null_object.rb
76
82
  ```
77
83
 
78
- to define general methods for every null_object
84
+ to define general methods for every `Null Object`n
79
85
 
80
86
  ```ruby
81
87
  module SafeFinder
@@ -87,10 +93,15 @@ module SafeFinder
87
93
  end
88
94
  ```
89
95
 
96
+ ```ruby
97
+ null_object = Post.null_object
98
+ null_object.hello # "Hello"
99
+ ```
100
+
90
101
 
91
102
  ## TODOs
92
103
 
93
- - Add association support, like `user.post` should also returns null_object when it's nil
104
+ - Add association support, like `user.post` should also returns `Null Object` when it's nil
94
105
  - Add generator for `NullObject` model
95
106
  - More use cases in readme
96
107
 
data/lib/safe_finder.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "safe_finder/generators/model_generator"
1
2
  require "safe_finder/null_object_generator"
2
3
  require "safe_finder/null_object"
3
4
  require "safe_finder/class_wrapper"
@@ -9,7 +9,7 @@ module SafeFinder
9
9
  def method_missing(name, *arguments, &block)
10
10
  result = wrapped_class.send(name, *arguments, &block)
11
11
  result.nil? ? wrapped_class.null_object : result
12
- rescue ActiveRecord::RecordNotFound => e
12
+ rescue ActiveRecord::RecordNotFound
13
13
  wrapped_class.null_object
14
14
  end
15
15
  end
@@ -0,0 +1,13 @@
1
+ require "rails/generators"
2
+
3
+ module SafeFinder
4
+ class ModelGenerator < Rails::Generators::Base
5
+ def self.source_root
6
+ File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
7
+ end
8
+
9
+ def create_model
10
+ template "models/null_object.rb", File.join("app/models", "safe_finder", "null_object.rb")
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ module SafeFinder
2
+ class NullObject
3
+
4
+ end
5
+ end
@@ -33,8 +33,6 @@ module SafeFinder
33
33
  def get_value(column)
34
34
  if value = setted_columns[column.name.to_sym]
35
35
  value
36
- else
37
- nil
38
36
  end
39
37
  end
40
38
 
@@ -1,3 +1,3 @@
1
1
  module SafeFinder
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/safe_finder.gemspec CHANGED
@@ -31,6 +31,8 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency "rake", "~> 10.0"
32
32
  spec.add_development_dependency "rspec"
33
33
  spec.add_development_dependency "sqlite3"
34
+ spec.add_development_dependency "generator_spec"
34
35
 
36
+ spec.add_dependency "rails", ">= 4.0"
35
37
  spec.add_dependency "activerecord", ">= 4.0"
36
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: safe_finder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stan Loe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-09-28 00:00:00.000000000 Z
11
+ date: 2015-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,34 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: generator_spec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '4.0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '4.0'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: activerecord
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -112,6 +140,8 @@ files:
112
140
  - bin/setup
113
141
  - lib/safe_finder.rb
114
142
  - lib/safe_finder/class_wrapper.rb
143
+ - lib/safe_finder/generators/model_generator.rb
144
+ - lib/safe_finder/generators/templates/models/null_object.rb
115
145
  - lib/safe_finder/null_object.rb
116
146
  - lib/safe_finder/null_object_generator.rb
117
147
  - lib/safe_finder/version.rb