get 0.1.2.1 → 0.1.3.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.
- checksums.yaml +4 -4
- data/lib/get/builders/base_builder.rb +1 -1
- data/lib/get/builders.rb +1 -1
- data/lib/get/configuration.rb +6 -5
- data/lib/get/db.rb +2 -0
- data/lib/get/entities.rb +1 -1
- data/lib/get.rb +3 -7
- data/spec/get_spec.rb +14 -14
- metadata +7 -11
- data/lib/get/adapters/abstract_adapter.rb +0 -67
- data/lib/get/adapters/active_record.rb +0 -48
- data/lib/get/entities/collection.rb +0 -39
- data/lib/get/entities/single.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 65fd187b7fdf6d925755baa22b7a7ce32cebc00e
|
4
|
+
data.tar.gz: 48fa9d577da086b0a6f90986106aa1c9581e8b40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11e0607221f9bb3c6c42770f55eef24d43a5f2bac228fd6e876bccf648394a28e3ed815005a3179930d88077b74f2a7e403c78bd04e775943986ab3bdd66aec9
|
7
|
+
data.tar.gz: 80f305335e0721add5e78c2879849a1e6fed6eaedc4d2cf2fd4ae1a6d240025923dc4e7d3a14fea37c346b86b3ffef66c99061793de2b8e47c45c02abff6df0f
|
@@ -12,7 +12,7 @@ module Get
|
|
12
12
|
private
|
13
13
|
|
14
14
|
def parse_class_name(class_name)
|
15
|
-
@result_entity, key = class_name.to_s.match(::Get::
|
15
|
+
@result_entity, key = class_name.to_s.match(::Get::GET_CLASS_REGEX).values_at(1, 3)
|
16
16
|
@key = key.present? ? key.symbolize : nil
|
17
17
|
end
|
18
18
|
end
|
data/lib/get/builders.rb
CHANGED
data/lib/get/configuration.rb
CHANGED
@@ -15,16 +15,12 @@ module Get
|
|
15
15
|
|
16
16
|
def adapter
|
17
17
|
raise ::Get::Errors::Base.new('Adapter has not been configured') unless configuration.adapter
|
18
|
-
@adapter ||=
|
18
|
+
@adapter ||= configuration.adapter
|
19
19
|
end
|
20
20
|
|
21
21
|
def entity_for(model)
|
22
22
|
configuration.entity_for(model)
|
23
23
|
end
|
24
|
-
|
25
|
-
def adapter_map
|
26
|
-
@adapter_map ||= ::Get::Adapters::AbstractAdapter.descendants.reduce({}) { |hash, (klass)| hash.merge(klass.name.split('::').last.underscore.to_sym => klass) }
|
27
|
-
end
|
28
24
|
end
|
29
25
|
|
30
26
|
class Config
|
@@ -34,6 +30,11 @@ module Get
|
|
34
30
|
@registered_entities = {}
|
35
31
|
end
|
36
32
|
|
33
|
+
def set_adapter(adapter)
|
34
|
+
Horza.configure { |config| config.adapter = adapter }
|
35
|
+
@adapter = Horza.adapter
|
36
|
+
end
|
37
|
+
|
37
38
|
def entity_for(model)
|
38
39
|
@registered_entities[model]
|
39
40
|
end
|
data/lib/get/db.rb
CHANGED
data/lib/get/entities.rb
CHANGED
@@ -6,7 +6,7 @@ module Get
|
|
6
6
|
def const_missing(name)
|
7
7
|
return super(name) unless name.to_s.match(/^#{CLASS_PREFIX}/)
|
8
8
|
|
9
|
-
parent_klass = name.to_s.plural? ?
|
9
|
+
parent_klass = name.to_s.plural? ? Horza::Entities::Collection : Horza::Entities::Single
|
10
10
|
Get::Entities.const_set(name, Class.new(parent_klass))
|
11
11
|
end
|
12
12
|
end
|
data/lib/get.rb
CHANGED
@@ -1,11 +1,7 @@
|
|
1
|
-
require 'get/adapters/abstract_adapter'
|
2
|
-
require 'get/adapters/active_record'
|
3
1
|
require 'get/builders/base_builder'
|
4
2
|
require 'get/builders/ancestry_builder'
|
5
3
|
require 'get/builders/query_builder'
|
6
4
|
require 'get/core_extensions/string'
|
7
|
-
require 'get/entities/single'
|
8
|
-
require 'get/entities/collection'
|
9
5
|
require 'get/builders'
|
10
6
|
require 'get/configuration'
|
11
7
|
require 'get/db'
|
@@ -13,12 +9,12 @@ require 'get/entities'
|
|
13
9
|
require 'get/entity_factory'
|
14
10
|
require 'get/errors'
|
15
11
|
require 'get/run_methods'
|
12
|
+
require 'horza'
|
16
13
|
|
17
14
|
module Get
|
18
15
|
extend Get::Configuration
|
19
16
|
|
20
|
-
|
21
|
-
|
17
|
+
GET_CLASS_REGEX = /^(.*)(By|From)(.*)/
|
22
18
|
|
23
19
|
class << self
|
24
20
|
attr_writer :configuration
|
@@ -30,7 +26,7 @@ module Get
|
|
30
26
|
end
|
31
27
|
|
32
28
|
def const_missing(name)
|
33
|
-
return super(name) unless name.to_s.match(
|
29
|
+
return super(name) unless name.to_s.match(GET_CLASS_REGEX)
|
34
30
|
Builders.generate_class(name)
|
35
31
|
end
|
36
32
|
end
|
data/spec/get_spec.rb
CHANGED
@@ -38,14 +38,14 @@ describe Get do
|
|
38
38
|
after(:all) { Get.configuration = @system_config }
|
39
39
|
|
40
40
|
# Reset base config with each iteration
|
41
|
-
before { Get.configure { |config| config.adapter
|
41
|
+
before { Get.configure { |config| config.set_adapter(adapter) } }
|
42
42
|
after do
|
43
43
|
GetSpec::User.delete_all
|
44
44
|
GetSpec::Employer.delete_all
|
45
45
|
Get.reset
|
46
46
|
end
|
47
47
|
|
48
|
-
class MyCustomEntity <
|
48
|
+
class MyCustomEntity < Horza::Entities::Collection
|
49
49
|
def east_london_length
|
50
50
|
"#{length}, bruv"
|
51
51
|
end
|
@@ -77,7 +77,7 @@ describe Get do
|
|
77
77
|
context 'when entity has been registered' do
|
78
78
|
before do
|
79
79
|
Get.configure do |config|
|
80
|
-
config.adapter
|
80
|
+
config.set_adapter(adapter)
|
81
81
|
config.register_entity(:users_by_last_name, MyCustomEntity)
|
82
82
|
end
|
83
83
|
end
|
@@ -98,12 +98,12 @@ describe Get do
|
|
98
98
|
context '#adapter' do
|
99
99
|
context 'when the adapter is set' do
|
100
100
|
it 'returns the correct adapter class' do
|
101
|
-
expect(Get.adapter).to eq
|
101
|
+
expect(Get.adapter).to eq Horza::Adapters::ActiveRecord
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
105
105
|
context 'when the adapter is not set' do
|
106
|
-
before { Get.
|
106
|
+
before { Get.reset }
|
107
107
|
after { Get.reset }
|
108
108
|
|
109
109
|
it 'throws error' do
|
@@ -115,7 +115,7 @@ describe Get do
|
|
115
115
|
context '#reset' do
|
116
116
|
before do
|
117
117
|
Get.configure do |config|
|
118
|
-
config.
|
118
|
+
config.set_adapter('my_adapter')
|
119
119
|
config.register_entity(:users_by_last_name, MyCustomEntity)
|
120
120
|
end
|
121
121
|
Get.reset
|
@@ -138,7 +138,7 @@ describe Get do
|
|
138
138
|
end
|
139
139
|
|
140
140
|
it 'returns a dynamically generated response entity' do
|
141
|
-
expect(Get::UserById.run!(user.id).is_a?(
|
141
|
+
expect(Get::UserById.run!(user.id).is_a?(Horza::Entities::Single)).to be true
|
142
142
|
end
|
143
143
|
end
|
144
144
|
|
@@ -149,7 +149,7 @@ describe Get do
|
|
149
149
|
end
|
150
150
|
|
151
151
|
it 'returns a dynamically generated response entity' do
|
152
|
-
expect(Get::UserBy.run!(last_name: last_name).is_a?(
|
152
|
+
expect(Get::UserBy.run!(last_name: last_name).is_a?(Horza::Entities::Single)).to be true
|
153
153
|
end
|
154
154
|
end
|
155
155
|
end
|
@@ -183,7 +183,7 @@ describe Get do
|
|
183
183
|
end
|
184
184
|
|
185
185
|
it 'returns a dynamically generated response entity' do
|
186
|
-
expect(Get::UserById.run(user.id).is_a?(
|
186
|
+
expect(Get::UserById.run(user.id).is_a?(Horza::Entities::Single)).to be true
|
187
187
|
end
|
188
188
|
end
|
189
189
|
|
@@ -194,7 +194,7 @@ describe Get do
|
|
194
194
|
end
|
195
195
|
|
196
196
|
it 'returns a dynamically generated response entity' do
|
197
|
-
expect(Get::UserBy.run(last_name: last_name).is_a?(
|
197
|
+
expect(Get::UserBy.run(last_name: last_name).is_a?(Horza::Entities::Single)).to be true
|
198
198
|
end
|
199
199
|
end
|
200
200
|
end
|
@@ -224,7 +224,7 @@ describe Get do
|
|
224
224
|
end
|
225
225
|
|
226
226
|
it 'returns a dynamically generated response entity' do
|
227
|
-
expect(Get::UsersByLastName.run(last_name).is_a?(
|
227
|
+
expect(Get::UsersByLastName.run(last_name).is_a?(Horza::Entities::Collection)).to be true
|
228
228
|
end
|
229
229
|
end
|
230
230
|
|
@@ -235,7 +235,7 @@ describe Get do
|
|
235
235
|
end
|
236
236
|
|
237
237
|
it 'returns a dynamically generated response entity' do
|
238
|
-
expect(Get::UsersBy.run(last_name: last_name).is_a?(
|
238
|
+
expect(Get::UsersBy.run(last_name: last_name).is_a?(Horza::Entities::Collection)).to be true
|
239
239
|
end
|
240
240
|
end
|
241
241
|
end
|
@@ -314,7 +314,7 @@ end
|
|
314
314
|
describe Get::Builders::AncestryBuilder do
|
315
315
|
let(:name) { 'UserFromEmployer' }
|
316
316
|
|
317
|
-
before { Get.configure { |config| config.
|
317
|
+
before { Get.configure { |config| config.set_adapter(:active_record) } }
|
318
318
|
after { Get.reset }
|
319
319
|
|
320
320
|
subject { Get::Builders::AncestryBuilder.new(name) }
|
@@ -335,7 +335,7 @@ end
|
|
335
335
|
describe Get::Builders::QueryBuilder do
|
336
336
|
let(:name) { 'UserFromEmployer' }
|
337
337
|
|
338
|
-
before { Get.configure { |config| config.
|
338
|
+
before { Get.configure { |config| config.set_adapter(:active_record) } }
|
339
339
|
after { Get.reset }
|
340
340
|
|
341
341
|
subject { Get::Builders::QueryBuilder.new(name) }
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: get
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Turner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: horza
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 0.0.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 0.0.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -117,8 +117,6 @@ files:
|
|
117
117
|
- LICENSE.txt
|
118
118
|
- README.md
|
119
119
|
- lib/get.rb
|
120
|
-
- lib/get/adapters/abstract_adapter.rb
|
121
|
-
- lib/get/adapters/active_record.rb
|
122
120
|
- lib/get/builders.rb
|
123
121
|
- lib/get/builders/ancestry_builder.rb
|
124
122
|
- lib/get/builders/base_builder.rb
|
@@ -127,8 +125,6 @@ files:
|
|
127
125
|
- lib/get/core_extensions/string.rb
|
128
126
|
- lib/get/db.rb
|
129
127
|
- lib/get/entities.rb
|
130
|
-
- lib/get/entities/collection.rb
|
131
|
-
- lib/get/entities/single.rb
|
132
128
|
- lib/get/entity_factory.rb
|
133
129
|
- lib/get/errors.rb
|
134
130
|
- lib/get/run_methods.rb
|
@@ -1,67 +0,0 @@
|
|
1
|
-
module Get
|
2
|
-
module Adapters
|
3
|
-
class AbstractAdapter
|
4
|
-
attr_reader :context
|
5
|
-
|
6
|
-
class << self
|
7
|
-
def expected_errors
|
8
|
-
not_implemented_error
|
9
|
-
end
|
10
|
-
|
11
|
-
def context_for_entity(entity)
|
12
|
-
not_implemented_error
|
13
|
-
end
|
14
|
-
|
15
|
-
def entity_context_map
|
16
|
-
not_implemented_error
|
17
|
-
end
|
18
|
-
|
19
|
-
def not_implemented_error
|
20
|
-
raise ::Get::Errors::MethodNotImplemented, 'You must implement this method in your adapter.'
|
21
|
-
end
|
22
|
-
|
23
|
-
def descendants
|
24
|
-
descendants = []
|
25
|
-
ObjectSpace.each_object(singleton_class) do |k|
|
26
|
-
descendants.unshift k unless k == self
|
27
|
-
end
|
28
|
-
descendants
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def initialize(context)
|
33
|
-
@context = context
|
34
|
-
end
|
35
|
-
|
36
|
-
def get!(options = {})
|
37
|
-
not_implemented_error
|
38
|
-
end
|
39
|
-
|
40
|
-
def find_first(options = {})
|
41
|
-
not_implemented_error
|
42
|
-
end
|
43
|
-
|
44
|
-
def find_all(options = {})
|
45
|
-
not_implemented_error
|
46
|
-
end
|
47
|
-
|
48
|
-
def ancestors(options = {})
|
49
|
-
not_implemented_error
|
50
|
-
end
|
51
|
-
|
52
|
-
def eager_load(options = {})
|
53
|
-
not_implemented_error
|
54
|
-
end
|
55
|
-
|
56
|
-
def to_hash
|
57
|
-
not_implemented_error
|
58
|
-
end
|
59
|
-
|
60
|
-
private
|
61
|
-
|
62
|
-
def not_implemented_error
|
63
|
-
self.class.not_implemented_error
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
module Get
|
2
|
-
module Adapters
|
3
|
-
class ActiveRecord < AbstractAdapter
|
4
|
-
class << self
|
5
|
-
def expected_errors
|
6
|
-
[::ActiveRecord::RecordNotFound]
|
7
|
-
end
|
8
|
-
|
9
|
-
def context_for_entity(entity)
|
10
|
-
entity_context_map[entity]
|
11
|
-
end
|
12
|
-
|
13
|
-
def entity_context_map
|
14
|
-
@map ||= ::ActiveRecord::Base.descendants.reduce({}) { |hash, (klass)| hash.merge(klass.name.split('::').last.underscore.to_sym => klass) }
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def get!(options = {})
|
19
|
-
@context = @context.find(options[:id])
|
20
|
-
end
|
21
|
-
|
22
|
-
def find_first(options = {})
|
23
|
-
@context = find_all(options).limit(1).first!
|
24
|
-
end
|
25
|
-
|
26
|
-
def find_all(options = {})
|
27
|
-
@context = @context.where(options[:conditions]).order('ID DESC')
|
28
|
-
end
|
29
|
-
|
30
|
-
def ancestors(options = {})
|
31
|
-
get!(options)
|
32
|
-
walk_family_tree(options)
|
33
|
-
rescue NoMethodError
|
34
|
-
raise ::Get::Errors::InvalidAncestry.new('Invalid relation. Ensure that the plurality of your associations is correct.')
|
35
|
-
end
|
36
|
-
|
37
|
-
def to_hash
|
38
|
-
@context.attributes
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def walk_family_tree(options)
|
44
|
-
options[:via].push(options[:result_key]).each { |relation| @context = @context.send(relation) }
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
module Get
|
2
|
-
module Entities
|
3
|
-
class Collection
|
4
|
-
def initialize(collection)
|
5
|
-
@collection = collection
|
6
|
-
end
|
7
|
-
|
8
|
-
def each
|
9
|
-
@collection.each do |result|
|
10
|
-
yield singular_entity(result)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def [](index)
|
15
|
-
singular_entity(@collection[index])
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def method_missing(method)
|
21
|
-
if [:length, :size, :empty?, :present?].include? method
|
22
|
-
@collection.send(method)
|
23
|
-
elsif [:first, :last].include? method
|
24
|
-
singular_entity(@collection.send(method))
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def singular_entity(record)
|
29
|
-
singular_entity_class.new(Get.adapter.new(record).to_hash)
|
30
|
-
end
|
31
|
-
|
32
|
-
# Collection classes have the form Get::Entities::TypesMapper
|
33
|
-
# Single output requires the form Get::Entities::TypeMapper
|
34
|
-
def singular_entity_class
|
35
|
-
@singular_entity ||= Kernel.const_get('Get').const_get('Entities').const_get(self.class.name.demodulize.singularize)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|