AR2H 0.0.0 → 0.0.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 +4 -4
- data/AR2H.gemspec +30 -28
- data/lib/AR2H.rb +4 -4
- data/lib/AR2H/concerns/active_record/base.rb +31 -0
- data/lib/AR2H/concerns/active_record/relation.rb +18 -0
- data/lib/AR2H/executor.rb +16 -16
- data/lib/AR2H/presenters/collection.rb +36 -0
- data/lib/AR2H/{hashers/hasher.rb → presenters/presenter.rb} +2 -2
- metadata +40 -6
- data/lib/AR2H/extensions/base.rb +0 -31
- data/lib/AR2H/extensions/relation.rb +0 -15
- data/lib/AR2H/hashers/collection.rb +0 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78cd604ee19ed84f6cc042874bb82930dc92c408
|
4
|
+
data.tar.gz: 7d3a2974b396088dac1a9af9e969f231013c29e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 595e245e38640802f4156a3b5af38bc6ef73a5ec1c695acc4e381972eaa28ecc8d9433834532448468e3f29b8c4ddbc992d7c19b454502d8b2afbc7f95f55c06
|
7
|
+
data.tar.gz: b84c618822e9105e0992d75e6baa3834356d018b0e8a047cdc7eb15ff04746efd2f01e78f06aa65dc90ac926fbded3ae5fe66fc2f4c79e56fdf0f20c6d2c396d
|
data/AR2H.gemspec
CHANGED
@@ -1,28 +1,30 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
|
5
|
-
Gem::Specification.new do |spec|
|
6
|
-
spec.name = 'AR2H'
|
7
|
-
spec.version = '0.0.
|
8
|
-
spec.authors = ['Eugene Yak']
|
9
|
-
spec.email = ['GeneAYak@gmail.com']
|
10
|
-
|
11
|
-
spec.summary = ''
|
12
|
-
spec.description = ''
|
13
|
-
spec.homepage = 'https://gitlab.com/yak/AR2H'
|
14
|
-
|
15
|
-
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
16
|
-
f.match(%r{^(test|spec|features)/})
|
17
|
-
end
|
18
|
-
spec.bindir = 'exe'
|
19
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
-
spec.require_paths = ['lib']
|
21
|
-
|
22
|
-
spec.add_development_dependency 'bundler', '~> 1.13'
|
23
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
24
|
-
spec.add_development_dependency 'rspec', '~> 3.5'
|
25
|
-
|
26
|
-
spec.
|
27
|
-
|
28
|
-
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'AR2H'
|
7
|
+
spec.version = '0.0.1'
|
8
|
+
spec.authors = ['Eugene Yak']
|
9
|
+
spec.email = ['GeneAYak@gmail.com']
|
10
|
+
|
11
|
+
spec.summary = ''
|
12
|
+
spec.description = ''
|
13
|
+
spec.homepage = 'https://gitlab.com/yak/AR2H'
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
16
|
+
f.match(%r{^(test|spec|features)/})
|
17
|
+
end
|
18
|
+
spec.bindir = 'exe'
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
|
22
|
+
spec.add_development_dependency 'bundler', '~> 1.13'
|
23
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
24
|
+
spec.add_development_dependency 'rspec', '~> 3.5'
|
25
|
+
spec.add_development_dependency 'sqlite3', '~> 1.3', '>= 1.3.12'
|
26
|
+
spec.add_development_dependency 'simplecov', '~> 0.12.0'
|
27
|
+
|
28
|
+
spec.add_runtime_dependency 'activerecord'
|
29
|
+
spec.add_runtime_dependency 'activesupport'
|
30
|
+
end
|
data/lib/AR2H.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'AR2H/executor'
|
2
2
|
|
3
|
-
require 'AR2H/
|
4
|
-
require 'AR2H/
|
3
|
+
require 'AR2H/concerns/active_record/base'
|
4
|
+
require 'AR2H/concerns/active_record/relation'
|
5
5
|
|
6
|
-
require 'AR2H/
|
7
|
-
require 'AR2H/
|
6
|
+
require 'AR2H/presenters/collection'
|
7
|
+
require 'AR2H/presenters/presenter'
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
module AR2H
|
4
|
+
module Concerns
|
5
|
+
module ActiveRecordConcern
|
6
|
+
module Base
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
def present(presenter = :default)
|
10
|
+
Executor.run(self, presenter)
|
11
|
+
end
|
12
|
+
|
13
|
+
def presenters
|
14
|
+
self.class.presenters
|
15
|
+
end
|
16
|
+
|
17
|
+
module ClassMethods
|
18
|
+
def presenter(name = :default, &block)
|
19
|
+
presenters.add Presenters::Presenter.new(name, block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def presenters
|
23
|
+
@presenters ||= Presenters::Collection.new(self.name)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
ActiveRecord::Base.send :include, ActiveRecordConcern::Base
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
module AR2H
|
4
|
+
module Concerns
|
5
|
+
module ActiveRecordConcern
|
6
|
+
module Relation
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
def present(presenter = :default)
|
10
|
+
self.map { |e| Executor.run(e, presenter) }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
ActiveRecord::Relation.send :include, ActiveRecordConcern::Relation
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
data/lib/AR2H/executor.rb
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
module AR2H
|
2
2
|
class Executor
|
3
|
-
def self.run(object,
|
4
|
-
self.new(object,
|
3
|
+
def self.run(object, presenter)
|
4
|
+
self.new(object, presenter).execute
|
5
5
|
end
|
6
6
|
|
7
|
-
def initialize(object,
|
8
|
-
@object
|
9
|
-
@
|
10
|
-
@result
|
7
|
+
def initialize(object, presenter)
|
8
|
+
@object = object
|
9
|
+
@presenter = object.presenters.find presenter
|
10
|
+
@result = Hash.new
|
11
11
|
end
|
12
12
|
|
13
13
|
attr_reader :object
|
14
14
|
|
15
15
|
def execute
|
16
|
-
instance_eval
|
16
|
+
instance_eval(&@presenter.block)
|
17
17
|
@result
|
18
18
|
end
|
19
19
|
|
20
20
|
private
|
21
21
|
|
22
|
-
def attr(attr)
|
23
|
-
@result[attr] =
|
22
|
+
def attr(attr, &block)
|
23
|
+
@result[attr] = block ? block.call : object[attr]
|
24
24
|
end
|
25
25
|
|
26
26
|
def attrs(*attrs)
|
27
27
|
attrs.each { |attr| attr(attr) }
|
28
28
|
end
|
29
29
|
|
30
|
-
def has_one(
|
31
|
-
|
30
|
+
def has_one(model, &block)
|
31
|
+
_has_branch(model, &block)
|
32
32
|
end
|
33
33
|
|
34
|
-
def has_many(
|
35
|
-
|
34
|
+
def has_many(model, &block)
|
35
|
+
_has_branch(model, &block)
|
36
36
|
end
|
37
37
|
|
38
|
-
def
|
39
|
-
|
40
|
-
@result[
|
38
|
+
def _has_branch(child, &block) # :nodoc:
|
39
|
+
child_presenter = block ? block.call : @presenter.name
|
40
|
+
@result[child] = object.send(child).present(child_presenter)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module AR2H
|
2
|
+
module Presenters
|
3
|
+
class Collection
|
4
|
+
def initialize(model_name)
|
5
|
+
@model_name = model_name
|
6
|
+
@presenters = Array.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def add(presenter)
|
10
|
+
if self.include? presenter.name
|
11
|
+
raise Exception.new("#{@model_name}: presenter #{presenter.name} is already exists")
|
12
|
+
else
|
13
|
+
@presenters << presenter
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def all
|
18
|
+
@presenters
|
19
|
+
end
|
20
|
+
|
21
|
+
def list
|
22
|
+
@presenters.map{ |presenter| presenter.name }
|
23
|
+
end
|
24
|
+
|
25
|
+
def include?(name)
|
26
|
+
list.include? name
|
27
|
+
end
|
28
|
+
|
29
|
+
def find(name)
|
30
|
+
presenter = @presenters.find{ |hasher| hasher.name == name }
|
31
|
+
raise Exception.new("#{@model_name}: presenter #{name} not found") unless presenter
|
32
|
+
presenter
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: AR2H
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eugene Yak
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,40 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: sqlite3
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.3'
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 1.3.12
|
65
|
+
type: :development
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - "~>"
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '1.3'
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 1.3.12
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: simplecov
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 0.12.0
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 0.12.0
|
55
89
|
- !ruby/object:Gem::Dependency
|
56
90
|
name: activerecord
|
57
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,11 +129,11 @@ files:
|
|
95
129
|
- bin/console
|
96
130
|
- bin/setup
|
97
131
|
- lib/AR2H.rb
|
132
|
+
- lib/AR2H/concerns/active_record/base.rb
|
133
|
+
- lib/AR2H/concerns/active_record/relation.rb
|
98
134
|
- lib/AR2H/executor.rb
|
99
|
-
- lib/AR2H/
|
100
|
-
- lib/AR2H/
|
101
|
-
- lib/AR2H/hashers/collection.rb
|
102
|
-
- lib/AR2H/hashers/hasher.rb
|
135
|
+
- lib/AR2H/presenters/collection.rb
|
136
|
+
- lib/AR2H/presenters/presenter.rb
|
103
137
|
homepage: https://gitlab.com/yak/AR2H
|
104
138
|
licenses: []
|
105
139
|
metadata: {}
|
data/lib/AR2H/extensions/base.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
module AR2H
|
2
|
-
module Extensions
|
3
|
-
module Base
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
def hasherize(hasher = :default)
|
7
|
-
# require 'AR2H/executor'
|
8
|
-
logger.info { " Hashing #{self.class}" }
|
9
|
-
Executor.run(self, hasher)
|
10
|
-
end
|
11
|
-
|
12
|
-
def hashers
|
13
|
-
self.class.hashers
|
14
|
-
end
|
15
|
-
|
16
|
-
module ClassMethods
|
17
|
-
# require 'AR2H/hashers'
|
18
|
-
|
19
|
-
def hasher(name = :default, &block)
|
20
|
-
hashers.add Hashers::Hasher.new(name, block)
|
21
|
-
end
|
22
|
-
|
23
|
-
def hashers
|
24
|
-
@hashers ||= Hashers::Collection.new(self.name)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
ActiveRecord::Base.send :include, Base
|
30
|
-
end
|
31
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module AR2H
|
2
|
-
module Extensions
|
3
|
-
module Relation
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
def hasherize(hasher = :default)
|
7
|
-
logger.info { " Hashing #{self.model.to_s.pluralize}" }
|
8
|
-
self.map { |e| Executor.run(e, hasher) }
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
ActiveRecord::Relation.send :include, Relation
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
@@ -1,37 +0,0 @@
|
|
1
|
-
module AR2H
|
2
|
-
module Hashers
|
3
|
-
class Collection
|
4
|
-
def initialize(label)
|
5
|
-
@label = label
|
6
|
-
@hashers = Array.new
|
7
|
-
end
|
8
|
-
|
9
|
-
def add(hasher)
|
10
|
-
raise Exception.new('NOT hasher') if hasher.class != Hasher
|
11
|
-
if self.include? hasher.name
|
12
|
-
raise Exception.new('DOUBLING hasher')
|
13
|
-
else
|
14
|
-
@hashers << hasher
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def include?(name)
|
19
|
-
list.include? name
|
20
|
-
end
|
21
|
-
|
22
|
-
def all
|
23
|
-
@hashers
|
24
|
-
end
|
25
|
-
|
26
|
-
def list
|
27
|
-
@hashers.map{ |hasher| hasher.name }
|
28
|
-
end
|
29
|
-
|
30
|
-
def find(name)
|
31
|
-
hasher = @hashers.find{ |hasher| hasher.name == name }
|
32
|
-
raise Exception.new("#{@label}: hasher :#{name} NOT FOUND") unless hasher
|
33
|
-
hasher
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|