mystique 0.10.2 → 1.0.0

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
  SHA256:
3
- metadata.gz: 482f42f03487da63811a81cf4d7165e12da4bdabfa6e407875d967a6a33e2fe4
4
- data.tar.gz: 64d18da6b66829c706916dafc7269732a35f6a4e96750942ae7312dae141bd70
3
+ metadata.gz: d6a1dbb9a3299b3f67616bf2ede3357984a31d59552f6b09994f93d1f100877f
4
+ data.tar.gz: e1bcc1e21a9100e6d7726b6cf669287e11f0490970e6b9c06c8b627d1e76c7af
5
5
  SHA512:
6
- metadata.gz: 3de791b96f273c1043cc9ecffb19af4388b73d1ca1a1e85ce123b32e2432c254c64a434d8acac8f4971a954e5867a140deaaf2ea0b069241ef1dff983540db72
7
- data.tar.gz: 7c7aa58c789cdf9b62a1c6b76f73968f65bd0b55966dc31c0e3a6144279dc92a20f6e6848347a030e0809f43ad0e8319c4b729fc1adf226a4c390fb6db7abc01
6
+ metadata.gz: 29409b10c2b6a53917853cb50f7fca7acb67f956c855facde0a3ae7ac2a9a33b98eb3ff1bdc0461c609093516643aa9749d657a8aeba45adfafff53e1bf50799
7
+ data.tar.gz: 24479c27b05b802d70a80933ef932c7b5c6b10f141a7de29036b2a1fd60a2b601a007f364377cb9d9b973811e501792aad7f797213b39eab9236f94bdf9fd0f6
@@ -3,12 +3,14 @@ require "mystique/version"
3
3
  require "callable"
4
4
 
5
5
  require "mystique/undefined"
6
+ require "mystique/presenter_class"
6
7
  require "mystique/presenter"
7
8
 
8
9
  module Mystique
10
+
9
11
  def self.present(object, with: nil, context: nil, &block)
10
12
  begin
11
- presenter_class = presenter_class_for(object, with)
13
+ presenter_class = PresenterClass.new(object, with).to_class
12
14
  presenter_class.for(object, context, &block)
13
15
  rescue NameError
14
16
  return object
@@ -10,9 +10,9 @@ module Mystique
10
10
  end
11
11
 
12
12
  def self.for(object, context=nil)
13
- self.new(object, context).tap do |presenter|
13
+ new(object, context).tap { |presenter|
14
14
  yield presenter if block_given?
15
- end
15
+ }
16
16
  end
17
17
 
18
18
  def context
@@ -34,18 +34,18 @@ module Mystique
34
34
  def method_missing(method, *args, &block)
35
35
  return target.send(method, *args, &block) if method.to_s.start_with?("to_")
36
36
 
37
- value = target.send(method, *args, &block)
38
-
39
- case
40
- when formatted_method?(method)
41
- format( value )
42
- when presented_method?(method)
43
- Mystique.present(value, context: context)
44
- when presented_collection?(method)
45
- Mystique.present_collection(value, context: context, &block)
46
- else
47
- value
48
- end
37
+ target.send(method, *args, &block).yield_self { |value|
38
+ case
39
+ when formatted_method?(method)
40
+ format( value )
41
+ when presented_method?(method)
42
+ Mystique.present(value, context: context)
43
+ when presented_collection?(method)
44
+ Mystique.present_collection(value, context: context, &block)
45
+ else
46
+ value
47
+ end
48
+ }
49
49
  end
50
50
 
51
51
  def formatted_method?(method)
@@ -61,15 +61,17 @@ module Mystique
61
61
  end
62
62
 
63
63
  def format(value)
64
- result = if __formats__.keys.include?(value)
64
+ result = case
65
+ when __formats__.keys.include?(value)
65
66
  __formats__[value]
66
- elsif __regex_formats__.any? { |regex, _| value =~ regex}
67
+ when __regex_formats__.any? { |regex, _| value =~ regex}
67
68
  __regex_formats__.select { |regex, _| value =~ regex}.first.last
68
- elsif __class_formats__.any? { |klass, _| value.is_a?(klass)}
69
+ when __class_formats__.any? { |klass, _| value.is_a?(klass)}
69
70
  __class_formats__.select { |klass, _| value.is_a?(klass)}.first.last
70
71
  else
71
72
  value
72
73
  end
74
+
73
75
  Mystique.present(Callable(result).call(value, context))
74
76
  end
75
77
 
@@ -94,7 +96,6 @@ module Mystique
94
96
  end
95
97
  end
96
98
 
97
- # TODO: Define this
98
99
  def self.present_collection(matcher)
99
100
  if matcher.is_a?(Symbol)
100
101
  __presented_collections__ << matcher
@@ -0,0 +1,36 @@
1
+ module Mystique
2
+ class PresenterClass
3
+ def initialize(object, with=nil)
4
+ @with = with
5
+ @object = object
6
+ end
7
+
8
+ def to_class
9
+ with || Object.send(:const_get, class_name)
10
+ end
11
+
12
+ def class_name
13
+ return with.to_s if with
14
+
15
+ "#{base_class_name(object)}Presenter"
16
+ end
17
+
18
+ private
19
+
20
+ attr_reader :with
21
+ attr_reader :object
22
+
23
+ def base_class_name(for_object)
24
+ case for_object
25
+ when Symbol, String
26
+ for_object.to_s.split(/_/).map(&:capitalize).join
27
+ when Array
28
+ for_object.map { |current_object|
29
+ base_class_name(current_object)
30
+ }.join("::")
31
+ else
32
+ for_object.class.to_s
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,3 +1,3 @@
1
1
  module Mystique
2
- VERSION = "0.10.2"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -19,8 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.8"
23
- spec.add_development_dependency "rake", "~> 10.0"
22
+ spec.add_development_dependency "bundler", "~> 2.1.4"
23
+ spec.add_development_dependency "rake", ">= 12.3.3"
24
24
  spec.add_development_dependency "rspec"
25
25
  spec.add_development_dependency "pry-byebug"
26
26
  spec.add_runtime_dependency "callable"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mystique
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Federico Iachetti
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-16 00:00:00.000000000 Z
11
+ date: 2020-06-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.8'
19
+ version: 2.1.4
20
20
  type: :development
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: '1.8'
26
+ version: 2.1.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: 12.3.3
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: 12.3.3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -99,6 +99,7 @@ files:
99
99
  - lib/mystique.rb
100
100
  - lib/mystique/null_context.rb
101
101
  - lib/mystique/presenter.rb
102
+ - lib/mystique/presenter_class.rb
102
103
  - lib/mystique/presenters.rb
103
104
  - lib/mystique/presenters/hash_presenter.rb
104
105
  - lib/mystique/undefined.rb
@@ -108,7 +109,7 @@ homepage: https://github.com/iachettifederico/mystique
108
109
  licenses:
109
110
  - MIT
110
111
  metadata: {}
111
- post_install_message:
112
+ post_install_message:
112
113
  rdoc_options: []
113
114
  require_paths:
114
115
  - lib
@@ -123,8 +124,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
124
  - !ruby/object:Gem::Version
124
125
  version: '0'
125
126
  requirements: []
126
- rubygems_version: 3.0.1
127
- signing_key:
127
+ rubygems_version: 3.0.8
128
+ signing_key:
128
129
  specification_version: 4
129
130
  summary: Ruby presenter gem.
130
131
  test_files: []