findable 0.0.3 → 0.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.
@@ -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
-