schemad 1.2.5 → 1.3.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
  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