form_core 0.0.4 → 0.0.5

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: 636ec9a02eefe5cbe6c9d48a1c4f2bcd24993744
4
- data.tar.gz: 15eb6842057b88bdf2852e1f6bd184312efd2989
3
+ metadata.gz: 819b17a80a69cb0746675b706757485d0cc686e8
4
+ data.tar.gz: 046e9e86b856786834df1093ffc7cf572e660520
5
5
  SHA512:
6
- metadata.gz: 3950f8572fc0c8fe2a94537a1fa8a3fa57eb65d13fd1eaf3a6b92b3a7ba06b67ada89cbb943bff69550f54432e79491953072cdb85fb88b041446dc26dad1c27
7
- data.tar.gz: 8b16c5d66290f35a5f503564cd7c27b6d222099a564ea1cf0f91864070c1c6838f497ea9acdaa1c3c30656e9514fe11b432ed099df7a1a5eb5859c08f763566a
6
+ metadata.gz: 62edafb741f3196caa8a69c5d344112d4a5f7695e4955f722f7e9e1f7134a035984aa5fae0dbd8731ab8bc52f64fff3443c8d4aaf7e004e3bae4373ce93983a7
7
+ data.tar.gz: 167d4bf390c740232cf4e88a9e9c5e07828e94770c8affd995964e1967c2847212abe1436abeb7ab178e3c8a08764e52d877c80de65c0dab92e51fd762d91346
@@ -0,0 +1,32 @@
1
+ module FormCore
2
+ class Coder
3
+ attr_reader :object_class
4
+
5
+ def initialize(object_class, strict: false)
6
+ @object_class = object_class
7
+ @strict = strict
8
+ end
9
+
10
+ def strict?
11
+ @strict
12
+ end
13
+
14
+ def dump(_obj)
15
+ raise NotImplementedError
16
+ end
17
+
18
+ def load(_src)
19
+ raise NotImplementedError
20
+ end
21
+
22
+ private
23
+
24
+ def new_or_raise_decoding_error
25
+ if strict?
26
+ raise DecodingDataCorrupted
27
+ else
28
+ object_class.new
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,26 @@
1
+ require "yaml"
2
+
3
+ module FormCore
4
+ class YAMLCoder < FormCore::Coder # :nodoc:
5
+ def dump(obj)
6
+ return YAML.dump({}) unless obj
7
+
8
+ YAML.dump obj.to_h
9
+ end
10
+
11
+ def load(yaml)
12
+ return object_class.new if yaml.blank?
13
+
14
+ unless yaml.is_a?(String) && /^---/.match?(yaml)
15
+ return new_or_raise_decoding_error
16
+ end
17
+
18
+ decoded = YAML.load(yaml)
19
+ unless decoded.is_a? Hash
20
+ return new_or_raise_decoding_error
21
+ end
22
+
23
+ object_class.new decoded
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,10 @@
1
+ module FormCore
2
+ # = Form Core Errors
3
+ #
4
+ # Generic Form Core exception class.
5
+ class FormCoreError < StandardError
6
+ end
7
+
8
+ class DecodingDataCorrupted < FormCoreError
9
+ end
10
+ end
@@ -1,3 +1,3 @@
1
1
  module FormCore
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -2,7 +2,6 @@ require "duck_record"
2
2
 
3
3
  module FormCore
4
4
  class VirtualModel < ::DuckRecord::Base
5
-
6
5
  # Returns the contents of the record as a nicely formatted string.
7
6
  def inspect
8
7
  # We check defined?(@attributes) not to issue warnings if the object is
@@ -21,6 +20,10 @@ module FormCore
21
20
  "#<VirtualModel:#{self.class.name}:#{object_id} #{inspection}>"
22
21
  end
23
22
 
23
+ def dump
24
+ self.class.dump(self)
25
+ end
26
+
24
27
  public_class_method :define_method
25
28
  class << self
26
29
  def name
@@ -34,6 +37,20 @@ module FormCore
34
37
  @_name = value
35
38
  end
36
39
 
40
+ def coder
41
+ @_coder ||= FormCore.virtual_model_coder_class.new(self)
42
+ end
43
+
44
+ def coder=(klass)
45
+ unless klass && klass < Coder
46
+ raise ArgumentError, "#{klass} should be sub-class of #{Coder}."
47
+ end
48
+
49
+ @_coder = klass.new(self)
50
+ end
51
+
52
+ delegate :dump, :load, to: :coder, allow_nil: false
53
+
37
54
  def build(name = nil)
38
55
  klass = Class.new(self)
39
56
  klass.name = name
data/lib/form_core.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  require "form_core/engine"
2
- require "form_core/virtual_model"
2
+ require "form_core/errors"
3
+
4
+ require "form_core/coder"
5
+ require "form_core/coders/yaml_coder"
3
6
 
7
+ require "form_core/virtual_model"
4
8
  require "form_core/concerns/models/form"
5
9
  require "form_core/concerns/models/field"
6
10
 
@@ -15,6 +19,7 @@ module FormCore
15
19
  raise ArgumentError, "#{klass} should be sub-class of #{VirtualModel}."
16
20
  end
17
21
 
22
+ @reserved_names = nil
18
23
  @virtual_model_class = klass
19
24
  end
20
25
 
@@ -24,5 +29,17 @@ module FormCore
24
29
  virtual_model_class.instance_methods(true)
25
30
  )
26
31
  end
32
+
33
+ def virtual_model_coder_class
34
+ @virtual_model_coder_class ||= YAMLCoder
35
+ end
36
+
37
+ def virtual_model_coder_class=(klass)
38
+ unless klass && klass < Coder
39
+ raise ArgumentError, "#{klass} should be sub-class of #{Coder}."
40
+ end
41
+
42
+ @virtual_model_coder_class = klass
43
+ end
27
44
  end
28
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: form_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - jasl
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-28 00:00:00.000000000 Z
11
+ date: 2017-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -56,9 +56,12 @@ files:
56
56
  - db/migrate/20170430190404_create_forms.rb
57
57
  - db/migrate/20170430191336_create_fields.rb
58
58
  - lib/form_core.rb
59
+ - lib/form_core/coder.rb
60
+ - lib/form_core/coders/yaml_coder.rb
59
61
  - lib/form_core/concerns/models/field.rb
60
62
  - lib/form_core/concerns/models/form.rb
61
63
  - lib/form_core/engine.rb
64
+ - lib/form_core/errors.rb
62
65
  - lib/form_core/version.rb
63
66
  - lib/form_core/virtual_model.rb
64
67
  - lib/tasks/form_core_tasks.rake