schemad 1.2.5 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1479b0fa1d4f80709b1a8cbbed8d71ee60201bd3
4
- data.tar.gz: fa853a747cc4e901bead3b2d8971a44b35eb928b
3
+ metadata.gz: d48d9b403dc5e8cfcfbb150bde2e0144db96bca7
4
+ data.tar.gz: a7017532f492064910b0132665df4b5c3320008c
5
5
  SHA512:
6
- metadata.gz: b33e6555f9aeee54a1be65026a796876f75ac19309a6935f88fe678eb17a2b071e12fb8fda31e689c71aeda4fcd530265da8497c79893b7cbbfcaa296252c147
7
- data.tar.gz: b103e20938c0a2ee01f78d3c10d58dab32d641981bbd4c1f566841fe9e966da4d1fb4fb8e5fdc985a400763943bee4fb05ce1d5c9339ddc00cb729d894bd8458
6
+ metadata.gz: 280241afecc47aeedcc4bcfbd1fd2db1fa9d269534e77fa3d23ba098320d39c88eeb2072d0d1396f0901ef11327d090dda1934bcfed9841afaddcc96f5239960
7
+ data.tar.gz: 4976125bebf023752e7d7f69fdfc92563f9901ff74ce3fcb63fcc1c30ed962fd7da114a5440d9b6c952b0d9599f8983e948fdd9c08940a26c67f5f2173681657
@@ -2,37 +2,59 @@ require 'schemad/extensions'
2
2
  require 'schemad/type_handler'
3
3
 
4
4
  module Schemad
5
- class Entity
5
+ module Entity
6
+ extend ActiveSupport::Concern
6
7
  include Schemad::Extensions
7
8
 
8
- def self.inherited(subclass)
9
- default_attrs = inherited_var(:@attributes, [])
10
- subclass.instance_variable_set(:@attributes, default_attrs)
9
+ included do
10
+ instance_variable_set(:@attributes, [])
11
11
  end
12
12
 
13
- def self.attribute(name, args={}, &block)
14
- attr_accessor name
13
+ module ClassMethods
14
+ def inherited(subclass)
15
+ puts "INHERITED BY #{subclass}"
16
+ default_attrs = inherited_var(:@attributes, [])
17
+ subclass.instance_variable_set(:@attributes, default_attrs)
18
+ end
15
19
 
16
- define_parser_for(name, args, &block)
20
+ def attribute(name, args={}, &block)
21
+ attr_accessor name
17
22
 
18
- @attributes << name
19
- end
23
+ define_parser_for(name, args, &block)
24
+ @attributes << name
25
+ end
26
+
27
+ # expect data hash to have symbol keys at this point
28
+ # normalizer should standardize this
29
+ def from_data(data)
30
+ obj = new
20
31
 
21
- # expect data hash to have symbol keys at this point
22
- # normalizer should standardize this
23
- def self.from_data(data)
24
- obj = new
32
+ @attributes.each do |key|
33
+ value = obj.send "parse_#{key}", data
34
+ obj.send "#{key}=", value
35
+ end
25
36
 
26
- @attributes.each do |key|
27
- value = obj.send "parse_#{key}", data
28
- obj.send "#{key}=", value
37
+ obj
29
38
  end
30
39
 
31
- obj
32
- end
40
+ def attribute_names
41
+ @attributes
42
+ end
43
+
44
+ private
45
+
46
+ def define_parser_for(name, args, &block)
47
+ define_method "parse_#{name}" do |data|
48
+ value = data[name]
49
+ value ||= get_default(args[:default])
33
50
 
34
- def self.attribute_names
35
- @attributes
51
+ self.send "#{name}=", coerce_to_type(value, args[:type])
52
+ end
53
+
54
+ define_method "#{name}?" do
55
+ !!send(name)
56
+ end if args[:type] == :boolean
57
+ end
36
58
  end
37
59
 
38
60
  def attribute_names
@@ -47,23 +69,11 @@ module Schemad
47
69
 
48
70
  hash
49
71
  end
72
+
50
73
  alias_method :attributes, :to_hash
51
74
 
52
75
  private
53
76
 
54
- def self.define_parser_for(name, args, &block)
55
- define_method "parse_#{name}" do |data|
56
- value = data[name]
57
- value ||= get_default(args[:default])
58
-
59
- self.send "#{name}=", coerce_to_type(value, args[:type])
60
- end
61
-
62
- define_method "#{name}?" do
63
- !!send(name)
64
- end if args[:type] == :boolean
65
- end
66
-
67
77
  def get_default(default_provider)
68
78
  return default_provider unless default_provider.is_a? Proc
69
79
  default_provider.call
@@ -1,38 +1,51 @@
1
1
  require 'schemad/extensions'
2
2
 
3
3
  module Schemad
4
- class Normalizer
4
+ module Normalizer
5
+ extend ActiveSupport::Concern
5
6
  include Schemad::Extensions
6
7
 
7
8
  DELIMITER = "/"
8
9
 
9
10
  InvalidPath = Class.new(Exception)
10
11
 
11
- def self.inherited(subclass)
12
- default_normalizers = inherited_var(:@normalizers, {})
13
- subclass.instance_variable_set(:@normalizers, default_normalizers)
14
-
15
- default_allowed = inherited_var(:@allowed_attributes, [])
16
- subclass.instance_variable_set(:@allowed_attributes, default_allowed)
12
+ included do
13
+ instance_variable_set(:@normalizers, {})
14
+ instance_variable_set(:@allowed_attributes, [])
17
15
  end
18
16
 
19
- def self.include_fields(*fields)
20
- @allowed_attributes.concat fields
21
- end
17
+ module ClassMethods
18
+ def inherited(subclass)
19
+ default_normalizers = inherited_var(:@normalizers, {})
20
+ subclass.instance_variable_set(:@normalizers, default_normalizers)
21
+
22
+ default_allowed = inherited_var(:@allowed_attributes, [])
23
+ subclass.instance_variable_set(:@allowed_attributes, default_allowed)
24
+ end
25
+
26
+ def include_fields(*fields)
27
+ @allowed_attributes.concat fields
28
+ end
22
29
 
23
- def self.normalize(name, args={}, &block)
24
- lookup = args[:key] || name
25
- method_name = normalizer_method_name(name)
30
+ def normalize(name, args={}, &block)
31
+ lookup = args[:key] || name
32
+ method_name = normalizer_method_name(name)
26
33
 
27
- @normalizers[lookup] = name
28
- @allowed_attributes << lookup
34
+ @normalizers[lookup] = name
35
+ @allowed_attributes << lookup
29
36
 
30
- define_method method_name do |data|
31
- value = find_value lookup, data
32
- return value unless block_given?
37
+ define_method method_name do |data|
38
+ value = find_value lookup, data
39
+ return value unless block_given?
33
40
 
34
- yield value
41
+ yield value
42
+ end
43
+ end
44
+
45
+ def normalizer_method_name(field)
46
+ "normalize_#{field}".to_sym
35
47
  end
48
+
36
49
  end
37
50
 
38
51
  def normalize(data)
@@ -108,10 +121,6 @@ module Schemad
108
121
  search_data steps, data[step]
109
122
  end
110
123
 
111
- def self.normalizer_method_name(field)
112
- "normalize_#{field}".to_sym
113
- end
114
-
115
124
  def normalizer_method_name(field)
116
125
  self.class.normalizer_method_name(field)
117
126
  end
@@ -1,3 +1,3 @@
1
1
  module Schemad
2
- VERSION = "1.2.5"
2
+ VERSION = "1.3.0"
3
3
  end
data/spec/entity_spec.rb CHANGED
@@ -70,7 +70,9 @@ describe Schemad::Entity do
70
70
  end
71
71
 
72
72
  context "inherited entities" do
73
- class Base < Schemad::Entity
73
+ class Base
74
+ include Schemad::Entity
75
+
74
76
  attribute :name
75
77
  end
76
78
 
@@ -1,8 +1,10 @@
1
- class Ent < Schemad::Entity
1
+ class Ent
2
+ include Schemad::Entity
3
+
2
4
  attribute :forest, type: :string, default: "Green"
3
5
  attribute :roads, type: :integer
4
6
  attribute :beasts, type: :integer
5
7
  attribute :world
6
8
  attribute :cool, type: :boolean
7
9
  attribute :created, type: :date_time, default: -> { Time.now }
8
- end
10
+ end
@@ -1,7 +1,9 @@
1
1
  require 'spec_helper'
2
2
  require 'schemad/normalizer'
3
3
 
4
- class Demalizer < Schemad::Normalizer
4
+ class Demalizer
5
+ include Schemad::Normalizer
6
+
5
7
  normalize :world, key: "Middle Earth" do |val|
6
8
  val.upcase
7
9
  end
@@ -72,7 +74,9 @@ describe Schemad::Normalizer do
72
74
  end
73
75
 
74
76
  context "can mine nested properties" do
75
- class BucketNormalizer < Schemad::Normalizer
77
+ class BucketNormalizer
78
+ include Schemad::Normalizer
79
+
76
80
  normalize :answer_to_the_universe, key: "useless_root"
77
81
  normalize :username, key: "author/user/username"
78
82
  normalize :avatar_url, key: "author/user/links/avatar/href"
@@ -81,7 +85,8 @@ describe Schemad::Normalizer do
81
85
  end
82
86
  end
83
87
 
84
- class BadNormalizer < Schemad::Normalizer
88
+ class BadNormalizer
89
+ include Schemad::Normalizer
85
90
  # missing the "links" part of the path
86
91
  normalize :avatar_url, key: "author/user/avatar/href"
87
92
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schemad
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.5
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luke van der Hoeven
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-20 00:00:00.000000000 Z
11
+ date: 2015-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -106,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  version: '0'
107
107
  requirements: []
108
108
  rubyforge_project:
109
- rubygems_version: 2.4.5
109
+ rubygems_version: 2.4.5.1
110
110
  signing_key:
111
111
  specification_version: 4
112
112
  summary: Simple schema DSL for services