decanter 1.0.1 → 1.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: afa1153de833e92615e8897d9ad5a3589f9807bb
4
- data.tar.gz: f8e18271e54e77cf9e3c9549535b3b3324d15de7
3
+ metadata.gz: a061153858121ad20bbdccc2a4c3c746fd426637
4
+ data.tar.gz: a6c3411501306fa3254f3a60ed4305bb0db30b68
5
5
  SHA512:
6
- metadata.gz: 14240a78a4499bfc3a96a048aefb2f8ecfde3084b8e74a7d372fbe2f83dbec46566b94f9d20c9d913f62ad5788e6c35952db0504e800b22e9426978a58b8557f
7
- data.tar.gz: 83e7b7010e57a4c8f0155d674f52fc9fd609b4ff5a82d16ce406ccb8f819f009c9d49058123a558bc63b541dd0d935766910e3a1f808f342178f47065436505b
6
+ metadata.gz: 986160ac735d3b66da3ff09a9c450b343be392bb2d62ced4a33574ee98de4f681bdd477b63d314b7d6e4dd44d0edddc91b69bb8b062f31208bd6f99a450a3975
7
+ data.tar.gz: e0d5fcbedb8d9cd49f626c54be27ce57d95c1cb8956dcac63ad5a7252eb8a535227e90d8445bc644b711990952a8baeb8c991d2572b2fa93b35af61591efc75d
data/Gemfile.lock CHANGED
@@ -27,6 +27,7 @@ GEM
27
27
  thread_safe (~> 0.3, >= 0.3.4)
28
28
  tzinfo (~> 1.1)
29
29
  builder (3.2.3)
30
+ coderay (1.1.2)
30
31
  concurrent-ruby (1.0.5)
31
32
  crass (1.0.3)
32
33
  diff-lcs (1.3)
@@ -39,10 +40,15 @@ GEM
39
40
  loofah (2.1.1)
40
41
  crass (~> 1.0.2)
41
42
  nokogiri (>= 1.5.9)
43
+ method_source (0.8.2)
42
44
  mini_portile2 (2.3.0)
43
45
  minitest (5.10.3)
44
46
  nokogiri (1.8.1)
45
47
  mini_portile2 (~> 2.3.0)
48
+ pry (0.10.4)
49
+ coderay (~> 1.1.0)
50
+ method_source (~> 0.8.1)
51
+ slop (~> 3.4)
46
52
  rack (1.6.8)
47
53
  rack-test (0.6.3)
48
54
  rack (>= 1.0)
@@ -82,6 +88,7 @@ GEM
82
88
  json (>= 1.8, < 3)
83
89
  simplecov-html (~> 0.10.0)
84
90
  simplecov-html (0.10.2)
91
+ slop (3.6.0)
85
92
  thor (0.20.0)
86
93
  thread_safe (0.3.6)
87
94
  tzinfo (1.2.4)
@@ -94,6 +101,7 @@ DEPENDENCIES
94
101
  bundler (~> 1.9)
95
102
  decanter!
96
103
  dotenv
104
+ pry
97
105
  rake (~> 10.0)
98
106
  rspec-rails
99
107
  simplecov (~> 0.15.1)
data/decanter.gemspec CHANGED
@@ -35,4 +35,5 @@ Gem::Specification.new do |spec|
35
35
  spec.add_development_dependency 'rake', '~> 10.0'
36
36
  spec.add_development_dependency 'rspec-rails'
37
37
  spec.add_development_dependency 'dotenv'
38
+ spec.add_development_dependency 'pry'
38
39
  end
@@ -1,7 +1,10 @@
1
+ require_relative 'parser/utils'
2
+
1
3
  module Decanter
2
4
  module Parser
3
-
4
5
  class << self
6
+ include Utils
7
+
5
8
  def parsers_for(klass_or_syms)
6
9
  Array.wrap(klass_or_syms)
7
10
  .map { |klass_or_sym| klass_or_sym_to_str(klass_or_sym) }
@@ -16,7 +19,7 @@ module Decanter
16
19
  when Class
17
20
  klass_or_sym.name
18
21
  when Symbol
19
- klass_or_sym.to_s.singularize.camelize
22
+ symbol_to_string(klass_or_sym)
20
23
  else
21
24
  raise ArgumentError.new("cannot lookup parser for #{klass_or_sym} with class #{klass_or_sym.class}")
22
25
  end.concat('Parser')
@@ -24,9 +27,10 @@ module Decanter
24
27
 
25
28
  # convert from a string to a constant
26
29
  def parser_constantize(parser_str)
30
+ # safe_constantize returns nil if match not found
27
31
  parser_str.safe_constantize ||
28
- "Decanter::Parser::".concat(parser_str).safe_constantize ||
29
- raise(NameError.new("cannot find parser #{parser_str}"))
32
+ concat_str(parser_str).safe_constantize ||
33
+ raise(NameError.new("cannot find parser #{parser_str}"))
30
34
  end
31
35
 
32
36
  # expand to include preparsers
@@ -0,0 +1,31 @@
1
+ module Decanter
2
+ module Parser
3
+ module Utils
4
+ # extract string transformation strategies
5
+ def symbol_to_string(klass_or_sym)
6
+ if singular_class_present?(klass_or_sym)
7
+ singularize_and_camelize_str(klass_or_sym)
8
+ else
9
+ camelize_str(klass_or_sym)
10
+ end
11
+ end
12
+
13
+ def singular_class_present?(klass_or_sym)
14
+ parser_str = singularize_and_camelize_str(klass_or_sym)
15
+ concat_str(parser_str).safe_constantize.present?
16
+ end
17
+
18
+ def singularize_and_camelize_str(klass_or_sym)
19
+ klass_or_sym.to_s.singularize.camelize
20
+ end
21
+
22
+ def camelize_str(klass_or_sym)
23
+ klass_or_sym.to_s.camelize
24
+ end
25
+
26
+ def concat_str(parser_str)
27
+ 'Decanter::Parser::'.concat(parser_str)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,3 @@
1
1
  module Decanter
2
- VERSION = '1.0.1'.freeze
2
+ VERSION = '1.0.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decanter
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Francis
@@ -109,6 +109,20 @@ dependencies:
109
109
  - - ">="
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: pry
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
112
126
  description: Decanter aims to reduce complexity in Rails controllers by creating a
113
127
  place for transforming data before it hits the model and database.
114
128
  email:
@@ -147,6 +161,7 @@ files:
147
161
  - lib/decanter/parser/pass_parser.rb
148
162
  - lib/decanter/parser/phone_parser.rb
149
163
  - lib/decanter/parser/string_parser.rb
164
+ - lib/decanter/parser/utils.rb
150
165
  - lib/decanter/parser/value_parser.rb
151
166
  - lib/decanter/railtie.rb
152
167
  - lib/decanter/version.rb