active_model_serializers-hash_wrapper 0.1.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 +7 -0
- data/.gitignore +10 -0
- data/.travis.yml +9 -0
- data/Gemfile +11 -0
- data/README.md +49 -0
- data/Rakefile +6 -0
- data/active_model_serializers-hash_wrapper.gemspec +26 -0
- data/bin/console +17 -0
- data/bin/setup +8 -0
- data/lib/active_model_serializers/hash_wrapper.rb +55 -0
- data/lib/active_model_serializers/hash_wrapper/version.rb +5 -0
- metadata +123 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6e1f1c0e6d4f7b3969284e27e40714005dd937e6
|
4
|
+
data.tar.gz: c9f0fb6e02f8ff62ae72f8593e2bc0b06ed91264
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 035b14add462b716b704ae998ead81fc4c749f404dfc1e38af5274e3113bb8a9483c68bbf6966e1b9e691da7369d1a7a21f3a9e8cc91a39a68708cfa0786791b
|
7
|
+
data.tar.gz: 3f1072e3be788ad61ed4f06ad2a3af3ab5f2296918449ab185e55e3be27825f725ec90dcc9320298ce624f2bc051d1d7bc5d7d0332ba88cdc31585be9f877621
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# ActiveModelSerializers::HashWrapper
|
2
|
+
|
3
|
+
Automatically create wrapper classes for Hashes so ActiveModelSerializers will serialize your hash!
|
4
|
+
|
5
|
+
[](https://lima.codeclimate.com/github/ptrln/active_model_serializers-hash_wrapper)
|
6
|
+
|
7
|
+
[](https://lima.codeclimate.com/github/ptrln/active_model_serializers-hash_wrapper/coverage)
|
8
|
+
|
9
|
+
[](https://lima.codeclimate.com/github/ptrln/active_model_serializers-hash_wrapper)
|
10
|
+
|
11
|
+
[](https://travis-ci.org/ptrln/active_model_serializers-hash_wrapper)
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
Add this line to your application's Gemfile:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
gem 'active_model_serializers-hash_wrapper'
|
19
|
+
```
|
20
|
+
|
21
|
+
And then execute:
|
22
|
+
|
23
|
+
$ bundle
|
24
|
+
|
25
|
+
Or install it yourself as:
|
26
|
+
|
27
|
+
$ gem install active_model_serializers-hash_wrapper
|
28
|
+
|
29
|
+
## Usage
|
30
|
+
|
31
|
+
Let's say you have a hash, and you would like AMS to serialize it. You can create a wrapper class for your hash like so:
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
item_class = ActiveModelSerializers::HashWrapper.wrapper_class("Item")
|
35
|
+
wrapped_item = item_class.new(hash)
|
36
|
+
```
|
37
|
+
|
38
|
+
Or, for simplicity, you can do all this in one line:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
wrapped_item = ActiveModelSerializers::HashWrapper.create("Item", hash)
|
42
|
+
```
|
43
|
+
|
44
|
+
Wrapper classes created by `ActiveModelSerializers::HashWrapper` pass all AMS lint tests and can safely be used.
|
45
|
+
|
46
|
+
## Contributing
|
47
|
+
|
48
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/ptrln/active_model_serializers-hash_wrapper.
|
49
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'active_model_serializers/hash_wrapper/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "active_model_serializers-hash_wrapper"
|
8
|
+
spec.version = ActiveModelSerializers::HashWrapper::VERSION
|
9
|
+
spec.authors = ["Peter Lin"]
|
10
|
+
spec.email = ["peter@ptrln.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Serialize hashes with ActiveModelSerializers.}
|
13
|
+
spec.homepage = "https://github.com/ptrln/active_model_serializers-hash_wrapper"
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
16
|
+
spec.bindir = "exe"
|
17
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_dependency "active_model_serializers"
|
21
|
+
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
23
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
24
|
+
spec.add_development_dependency "rspec"
|
25
|
+
spec.add_development_dependency "minitest"
|
26
|
+
end
|
data/bin/console
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler'
|
4
|
+
|
5
|
+
Bundler.require(:default, :test)
|
6
|
+
|
7
|
+
require "active_model_serializers/hash_wrapper"
|
8
|
+
|
9
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
10
|
+
# with your gem easier. You can also use a different console, if you like.
|
11
|
+
|
12
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
13
|
+
# require "pry"
|
14
|
+
# Pry.start
|
15
|
+
|
16
|
+
require "irb"
|
17
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require "active_model_serializers/hash_wrapper/version"
|
2
|
+
|
3
|
+
module ActiveModelSerializers
|
4
|
+
module HashWrapper
|
5
|
+
|
6
|
+
class << self
|
7
|
+
|
8
|
+
def wrapper_class(model_name)
|
9
|
+
model_name = model_name.to_s
|
10
|
+
|
11
|
+
Class.new(::ActiveModelSerializers::Model) do
|
12
|
+
|
13
|
+
attr_accessor :source_hash
|
14
|
+
|
15
|
+
delegate :[], to: :source_hash
|
16
|
+
|
17
|
+
define_singleton_method :name do
|
18
|
+
model_name
|
19
|
+
end
|
20
|
+
|
21
|
+
def read_attribute_for_serialization(attr_name)
|
22
|
+
value = source_hash.has_key?(attr_name) ? source_hash[attr_name] : source_hash[attr_name.to_s]
|
23
|
+
|
24
|
+
value = create_nested_wrapper(value, attr_name) if value.is_a?(Hash)
|
25
|
+
|
26
|
+
value = value.map { |v| v.is_a?(Hash) ? create_nested_wrapper(v, attr_name) : v } if value.is_a?(Array)
|
27
|
+
|
28
|
+
value
|
29
|
+
end
|
30
|
+
|
31
|
+
def as_json(*)
|
32
|
+
# fallbacks to dumping the source_hash if AMS cannot infer a serializer,
|
33
|
+
# and an explicit serializer is not specified
|
34
|
+
source_hash
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def create_nested_wrapper(hash, attr_name)
|
40
|
+
model_name = hash[:_hash_wrapper_model_name] || attr_name.to_s.classify
|
41
|
+
::ActiveModelSerializers::HashWrapper.create(model_name, hash)
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def create(model_name, hash)
|
48
|
+
klass = wrapper_class(model_name)
|
49
|
+
klass.new(source_hash: hash)
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
metadata
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: active_model_serializers-hash_wrapper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Peter Lin
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-02-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: active_model_serializers
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.11'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.11'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
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'
|
83
|
+
description:
|
84
|
+
email:
|
85
|
+
- peter@ptrln.com
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- ".gitignore"
|
91
|
+
- ".travis.yml"
|
92
|
+
- Gemfile
|
93
|
+
- README.md
|
94
|
+
- Rakefile
|
95
|
+
- active_model_serializers-hash_wrapper.gemspec
|
96
|
+
- bin/console
|
97
|
+
- bin/setup
|
98
|
+
- lib/active_model_serializers/hash_wrapper.rb
|
99
|
+
- lib/active_model_serializers/hash_wrapper/version.rb
|
100
|
+
homepage: https://github.com/ptrln/active_model_serializers-hash_wrapper
|
101
|
+
licenses: []
|
102
|
+
metadata: {}
|
103
|
+
post_install_message:
|
104
|
+
rdoc_options: []
|
105
|
+
require_paths:
|
106
|
+
- lib
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
requirements: []
|
118
|
+
rubyforge_project:
|
119
|
+
rubygems_version: 2.4.5.1
|
120
|
+
signing_key:
|
121
|
+
specification_version: 4
|
122
|
+
summary: Serialize hashes with ActiveModelSerializers.
|
123
|
+
test_files: []
|