safe_finder 0.1.0 → 0.1.1

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