object_field 0.0.1 → 0.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: be3cd0dd7166aabe94e860d0c8b4b19849553731
4
- data.tar.gz: eaffb90af0495c61a3632e8ccfaa9fc73151bdc5
3
+ metadata.gz: 0c025020189aba2a0c4d9cbdd591c98cd390b2f5
4
+ data.tar.gz: 0dedf186e39e0955493d3aaecfaa5b3911240da6
5
5
  SHA512:
6
- metadata.gz: 3126872d032f29e11d5e5ff9e741b4c59f7be65c674a88c588f6c21339d2b1bcb06aad6c042940e072d985edfd0fa928e873d07974a7b70855b2d0ef0858a5c6
7
- data.tar.gz: 0e2288fbaa55a1d4af236e0aa5114b42b70958486f75fbef1362c76724dbc0fa61a5d1d5310a89a0e5ae0d26a782916c8181b53cc130569df2cb6efb5b7d6eb4
6
+ metadata.gz: 349ae8f45cfbc1ff6b03f9987ad3e9d4780e2154753a1fef92924729decfc5b26a193ed7f4e41691f123354c7a46c9eb2e888682db381e7976149a48ca41f028
7
+ data.tar.gz: 74540a02a97c87f6c648f30698146845ddbcf02bf756c1a4bfc4a39053d5bc2b5fc501017218fae27fbdb93ddf3273e9cb56c0276afa29479bb3797f43e11530
data/.coveralls.yml ADDED
@@ -0,0 +1,2 @@
1
+ repo_token: pBPPHGBz5FL9oLMi9kvQrNw8Z3U9BKzjt
2
+
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 2.1.0
5
+ gemfile:
6
+ - Gemfile
7
+ script: bundle exec rake spec
8
+ notifications:
9
+ mails:
10
+ - i2bskn@gmail.com
11
+
data/README.md CHANGED
@@ -1,6 +1,13 @@
1
1
  # ObjectField
2
2
 
3
- Support for object persistence.
3
+ [![Gem Version](https://badge.fury.io/rb/object_field.svg)](http://badge.fury.io/rb/object_field)
4
+ [![Build Status](https://travis-ci.org/i2bskn/object_field.svg)](https://travis-ci.org/i2bskn/object_field)
5
+ [![Coverage Status](https://coveralls.io/repos/i2bskn/object_field/badge.png)](https://coveralls.io/r/i2bskn/object_field)
6
+ [![Code Climate](https://codeclimate.com/github/i2bskn/object_field/badges/gpa.svg)](https://codeclimate.com/github/i2bskn/object_field)
7
+ [![Dependency Status](https://gemnasium.com/i2bskn/object_field.svg)](https://gemnasium.com/i2bskn/object_field)
8
+
9
+ Support for object persistence.
10
+ Save the object to data store via instance method.
4
11
 
5
12
  ## Installation
6
13
 
@@ -20,21 +27,57 @@ Or install it yourself as:
20
27
 
21
28
  ## Usage
22
29
 
23
- ```ruby
24
- require "object_field"
30
+ Include `ObjectField::Jsonizer` or `ObjectField::Serializer`.
31
+
32
+ #### Jsonizer
25
33
 
26
- class Example
34
+ `.#jsonize` defines accessor of JSON field.
35
+
36
+ ```ruby
37
+ class InJsonValue
27
38
  include ObjectField::Jsonizer
28
- attr_accessor :field1_json, :field2_json, :field3_json
29
- jsonize :field1_json, :field2_json
39
+ attr_accessor :field1_json, :field2, :field3_json
40
+ jsonize :field1_json, :field2
30
41
  jsonize :field3_json, as: :attributes
31
42
  end
43
+ ```
44
+
45
+ Setter is save the value to JSON.
46
+ Getter returns parsed value.
47
+ Name of accessor can be specified with `as` option.
48
+ It is set `field1`, `field2_as_json` if not specified.
49
+
50
+ ```ruby
51
+ object = InJsonValue.new
52
+ object.field1 = [1, 2, 3]
53
+ p object.field1_json # => "[1,2,3]"
54
+ object.field1.each {|i| p i}
55
+ ```
56
+
57
+ #### Serializer
58
+
59
+ `.#serialize` defines accessor of marshal data field.
60
+ Like marshal option of [redis-object](https://github.com/nateware/redis-objects).
61
+
62
+ ```ruby
63
+ class InSerializedValue
64
+ include ObjectField::Serializer
65
+ attr_accessor :field
66
+ serialize :field
67
+ end
68
+ ```
32
69
 
33
- e = Example.new
34
- e.field1 = [1, 2, 3]
35
- e.attributes = {key: :value}
36
- p e # => #<Example:0x007fa5914ac548 @field1_json="[1,2,3]", @field3_json="{\":key\":\":value\"}">
37
- puts e.attributes[:key] # => value
70
+ Setter is save the serialized value.
71
+ Can not be saved, Proc object and anonymous class. (To raise TypeError)
72
+ Getter returns deserialized value.
73
+ Name of accessor can be specified with `as` option.
74
+ It is set `field_data` if not specified.
75
+
76
+ ```
77
+ class SerializedObject; end
78
+ object = InSerializedValue.new
79
+ object.field_data = SerializedObject.new
80
+ p object.field_data.class # => SerializedObject
38
81
  ```
39
82
 
40
83
  ## Contributing
data/Rakefile CHANGED
@@ -1,2 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ desc "Run all specs"
5
+ RSpec::Core::RakeTask.new(:spec) do |t|
6
+ t.rspec_opts = %w(--color --format documentation)
7
+ end
8
+
9
+ task :default => :spec
2
10
 
data/lib/object_field.rb CHANGED
@@ -1,5 +1,7 @@
1
+ require "zlib"
1
2
  require "oj"
2
3
 
3
4
  require "object_field/version"
4
5
  require "object_field/jsonizer"
6
+ require "object_field/serializer"
5
7
 
@@ -0,0 +1,27 @@
1
+ module ObjectField
2
+ module Serializer
3
+ module ClassMethods
4
+ def serialize(field_name, as: nil, compression: Zlib::DEFAULT_COMPRESSION)
5
+ accessor = as || accessor_name(field_name)
6
+ define_method accessor do |klass=nil|
7
+ object = Marshal.load(Zlib.inflate(self.send(field_name)))
8
+ klass ? klass.new(object) : object
9
+ end
10
+
11
+ define_method "#{accessor}=" do |object|
12
+ self.send "#{field_name}=", Zlib.deflate(Marshal.dump(object), compression)
13
+ end
14
+ end
15
+
16
+ private
17
+ def accessor_name(field_name)
18
+ [field_name, :_data].join.to_sym
19
+ end
20
+ end
21
+
22
+ def self.included(base)
23
+ base.extend ClassMethods
24
+ end
25
+ end
26
+ end
27
+
@@ -1,4 +1,4 @@
1
1
  module ObjectField
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
4
4
 
data/object_field.gemspec CHANGED
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  lib = File.expand_path('../lib', __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'object_field/version'
@@ -19,10 +18,9 @@ Gem::Specification.new do |spec|
19
18
  spec.require_paths = ["lib"]
20
19
 
21
20
  spec.add_dependency "oj"
22
- spec.add_development_dependency "bundler", "~> 1.7"
23
- spec.add_development_dependency "rake", "~> 10.0"
24
- # spec.add_development_dependency "rspec"
25
- # spec.add_development_dependency "coveralls"
26
- # spec.add_development_dependency "simplecov"
21
+ spec.add_development_dependency "bundler"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "coveralls"
27
25
  end
28
26
 
@@ -0,0 +1,49 @@
1
+ require "spec_helper"
2
+
3
+ describe ObjectField::Jsonizer do
4
+ class InJsonValue
5
+ include ObjectField::Jsonizer
6
+ attr_accessor :field1_json, :field2, :field3_json
7
+ jsonize :field1_json, :field2
8
+ jsonize :field3_json, as: :attributes
9
+ end
10
+
11
+ describe ".#included" do
12
+ it "should define singleton method" do
13
+ expect(InJsonValue.respond_to? :jsonize).to be_truthy
14
+ end
15
+ end
16
+
17
+ it "not possible to specify more than one accessor" do
18
+ expect{InJsonValue.jsonize(:field1, :field2, as: :field_name)}.to raise_error(ArgumentError)
19
+ end
20
+
21
+ describe "included class" do
22
+ let(:example) { InJsonValue.new }
23
+ let(:hash) { {key: :value} }
24
+ let(:stored_instance) do
25
+ example.attributes = hash
26
+ example
27
+ end
28
+
29
+ it "should define accessor" do
30
+ expect(example.respond_to? :field1).to be_truthy
31
+ expect(example.respond_to? :field2_as_json).to be_truthy
32
+ expect(example.respond_to? :attributes).to be_truthy
33
+ end
34
+
35
+ it "should save JSON value" do
36
+ expect(stored_instance.field3_json).to eq(Oj.dump(hash))
37
+ end
38
+
39
+ it "should parse JSON value" do
40
+ expect(stored_instance.field3_json).not_to eq(hash)
41
+ expect(stored_instance.attributes).to eq(hash)
42
+ end
43
+
44
+ it "should generate instance with parse JSON value" do
45
+ expect(stored_instance.attributes(Struct.new(:value)).value).to eq(hash)
46
+ end
47
+ end
48
+ end
49
+
@@ -0,0 +1,45 @@
1
+ require "spec_helper"
2
+
3
+ describe ObjectField::Serializer do
4
+ class InSerializedValue
5
+ include ObjectField::Serializer
6
+ attr_accessor :field1, :field2
7
+ serialize :field1
8
+ serialize :field2, as: :attributes
9
+ end
10
+
11
+ class SerializeObject; end
12
+
13
+ describe ".#included" do
14
+ it "should define singleton method" do
15
+ expect(InSerializedValue.respond_to? :serialize).to be_truthy
16
+ end
17
+ end
18
+
19
+ describe "included class" do
20
+ let(:example) { InSerializedValue.new }
21
+ let(:object) { SerializeObject.new }
22
+ let(:stored_instance) do
23
+ example.attributes = object
24
+ example
25
+ end
26
+
27
+ it "should define accessor" do
28
+ expect(example.respond_to? :field1_data).to be_truthy
29
+ expect(example.respond_to? :attributes).to be_truthy
30
+ end
31
+
32
+ it "should save Object" do
33
+ expect(stored_instance.field2).not_to eq(object)
34
+ end
35
+
36
+ it "should parse Object" do
37
+ expect(stored_instance.attributes.class).to eq(SerializeObject)
38
+ end
39
+
40
+ it "should generate instance with parse Object" do
41
+ expect(stored_instance.attributes(Struct.new(:value)).value.class).to eq(SerializeObject)
42
+ end
43
+ end
44
+ end
45
+
@@ -0,0 +1,9 @@
1
+ require "coveralls"
2
+ Coveralls.wear!
3
+
4
+ require "object_field"
5
+
6
+ RSpec.configure do |config|
7
+ config.order = :random
8
+ end
9
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: object_field
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - i2bskn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-25 00:00:00.000000000 Z
11
+ date: 2014-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -28,30 +28,58 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.7'
33
+ version: '0'
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: '1.7'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
- version: '10.0'
61
+ version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - "~>"
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: coveralls
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
53
74
  - !ruby/object:Gem::Version
54
- version: '10.0'
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description: Support for object persistence.
56
84
  email:
57
85
  - i2bskn@gmail.com
@@ -59,15 +87,21 @@ executables: []
59
87
  extensions: []
60
88
  extra_rdoc_files: []
61
89
  files:
90
+ - ".coveralls.yml"
62
91
  - ".gitignore"
92
+ - ".travis.yml"
63
93
  - Gemfile
64
94
  - LICENSE.txt
65
95
  - README.md
66
96
  - Rakefile
67
97
  - lib/object_field.rb
68
98
  - lib/object_field/jsonizer.rb
99
+ - lib/object_field/serializer.rb
69
100
  - lib/object_field/version.rb
70
101
  - object_field.gemspec
102
+ - spec/object_field/jsonizer_spec.rb
103
+ - spec/object_field/serializer_spec.rb
104
+ - spec/spec_helper.rb
71
105
  homepage: https://github.com/i2bskn/object_field
72
106
  licenses:
73
107
  - MIT
@@ -92,4 +126,7 @@ rubygems_version: 2.2.2
92
126
  signing_key:
93
127
  specification_version: 4
94
128
  summary: Support for object persistence.
95
- test_files: []
129
+ test_files:
130
+ - spec/object_field/jsonizer_spec.rb
131
+ - spec/object_field/serializer_spec.rb
132
+ - spec/spec_helper.rb