findable 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,71 +0,0 @@
1
- module Findable
2
- module Association
3
- def has_many(name, scope = nil, options = {})
4
- super unless _define_association_methods(:has_many, name, options)
5
- end
6
-
7
- def has_one(name, scope = nil, options = {})
8
- super unless _define_association_methods(:has_one, name, options)
9
- end
10
-
11
- def belongs_to(name, scope = nil, options = {})
12
- super unless _define_association_methods(:belongs_to, name, options)
13
- end
14
-
15
- private
16
- def _define_association_methods(association_type, name, options)
17
- model = _model_for(name, options, true)
18
- if _findable?(model) || _findable?(self)
19
- self.send("_define_findable_#{association_type}", name, options, model)
20
- else
21
- false
22
- end
23
- end
24
-
25
- def _model_for(name, options, _raise = false)
26
- class_name = _class_name_for(name, options)
27
- begin
28
- class_name.constantize
29
- rescue => e
30
- _raise ? (raise Findable::ModelNotFound.new(class_name)) : nil
31
- end
32
- end
33
-
34
- def _class_name_for(name, options)
35
- options[:class].presence || name.to_s.classify
36
- end
37
-
38
- def _foreign_key_for(name, options)
39
- options[:foreign_key].presence || name.to_s.foreign_key
40
- end
41
-
42
- def _findable?(model)
43
- model.ancestors.include?(Findable::Base)
44
- end
45
-
46
- def _define_findable_has_many(name, options, model)
47
- foreign_key = _foreign_key_for(self.model_name.name, options)
48
-
49
- define_method name do
50
- model.where(foreign_key.to_sym => id)
51
- end
52
- end
53
-
54
- def _define_findable_has_one(name, options, model)
55
- foreign_key = _foreign_key_for(self.model_name.name, options)
56
-
57
- define_method name do
58
- model.find_by(foreign_key.to_sym => id)
59
- end
60
- end
61
-
62
- def _define_findable_belongs_to(name, options, model)
63
- foreign_key = _foreign_key_for(name, options)
64
-
65
- define_method name do
66
- model.find(self.send(foreign_key))
67
- end
68
- end
69
- end
70
- end
71
-
@@ -1,25 +0,0 @@
1
- module Findable
2
- module Connection
3
- extend ActiveSupport::Concern
4
-
5
- module ClassMethods
6
- def redis
7
- @_redis ||= generate_redis_connection!
8
- end
9
-
10
- private
11
- def generate_redis_connection!
12
- redis_options ? Redis.new(*redis_options) : Redis.current
13
- end
14
-
15
- def redis_options
16
- Findable.config.redis_options.presence
17
- end
18
- end
19
-
20
- def redis
21
- self.class.redis
22
- end
23
- end
24
- end
25
-
@@ -1,23 +0,0 @@
1
- module Findable
2
- module Namespace
3
- extend ActiveSupport::Concern
4
-
5
- module ClassMethods
6
- def info_key
7
- namespace[:info]
8
- end
9
-
10
- def data_key
11
- namespace[:data]
12
- end
13
-
14
- private
15
- def namespace
16
- %i(info data).each_with_object({}) do |name, obj|
17
- obj[name] = [self.model_name.plural, name].join(":")
18
- end
19
- end
20
- end
21
- end
22
- end
23
-
@@ -1,93 +0,0 @@
1
- module Findable
2
- module Recordable
3
- extend ActiveSupport::Concern
4
- include Serializer
5
-
6
- included do
7
- include ActiveModel::AttributeMethods
8
-
9
- attribute_method_suffix "="
10
- attribute_method_suffix "?"
11
- end
12
-
13
- module ClassMethods
14
- def field(attr, options={})
15
- options.symbolize_keys!
16
- define_accessor(attr.to_sym, options)
17
- end
18
-
19
- def fields(*args)
20
- options = args.extract_options!
21
- args.each {|arg| field(arg, options) }
22
- end
23
-
24
- private
25
- def define_accessor(attr, options)
26
- unless public_method_defined?(attr)
27
- define_attribute_methods attr
28
- define_method attr do
29
- attributes[attr]
30
- end
31
- end
32
- end
33
- end
34
-
35
- def initialize(params={})
36
- params = deserialize(params) if params.is_a?(String)
37
- params.symbolize_keys!
38
- params.keys.each {|attr| self.class.field(attr) }
39
- @_attributes = params
40
- end
41
-
42
- def id
43
- attributes[:id].presence || nil
44
- end
45
- # alias_method :quoted_id, :id
46
-
47
- def id=(_id)
48
- attributes[:id] = _id
49
- end
50
-
51
- def save
52
- self.class.insert(self)
53
- end
54
- alias_method :save!, :save
55
-
56
- def delete
57
- self.class.delete(id)
58
- end
59
- alias_method :destroy, :delete
60
-
61
- def new_record?
62
- id ? !self.class.exists?(self) : true
63
- end
64
-
65
- def persisted?
66
- !new_record?
67
- end
68
-
69
- def to_json(methods: nil)
70
- _attrs = attributes.dup
71
- _attrs.merge!(methods.to_sym => self.send(methods)) if methods
72
- serialize(_attrs)
73
- end
74
-
75
- def hash
76
- id.hash
77
- end
78
-
79
- def attributes
80
- @_attributes ||= {}
81
- end
82
-
83
- private
84
- def attribute=(attr, val)
85
- attributes[attr.to_sym] = val
86
- end
87
-
88
- def attribute?(attr)
89
- attributes[attr.to_sym].present?
90
- end
91
- end
92
- end
93
-
@@ -1,12 +0,0 @@
1
- module Findable
2
- module Serializer
3
- def serialize(string)
4
- Oj.dump(string)
5
- end
6
-
7
- def deserialize(string)
8
- Oj.load(string)
9
- end
10
- end
11
- end
12
-