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.
@@ -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
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ .ruby-version
@@ -0,0 +1,9 @@
1
+ addons:
2
+ code_climate:
3
+ repo_token: ea2e2f6bb8c4480f4c9fc57becacdf1a891ada9238b08b56865ddb584f2c3a50
4
+ language: ruby
5
+ rvm:
6
+ - 2.2.2
7
+ before_install: gem install bundler -v 1.11.2
8
+ after_success:
9
+ - bundle exec codeclimate-test-reporter
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in active_model_serializers-hash_wrapper.gemspec
4
+ gemspec
5
+
6
+ gem 'active_model_serializers'
7
+
8
+ group :test do
9
+ gem "simplecov"
10
+ gem "codeclimate-test-reporter", "~> 1.0.0"
11
+ end
@@ -0,0 +1,49 @@
1
+ # ActiveModelSerializers::HashWrapper
2
+
3
+ Automatically create wrapper classes for Hashes so ActiveModelSerializers will serialize your hash!
4
+
5
+ [![Code Climate](https://lima.codeclimate.com/github/ptrln/active_model_serializers-hash_wrapper/badges/gpa.svg)](https://lima.codeclimate.com/github/ptrln/active_model_serializers-hash_wrapper)
6
+
7
+ [![Test Coverage](https://lima.codeclimate.com/github/ptrln/active_model_serializers-hash_wrapper/badges/coverage.svg)](https://lima.codeclimate.com/github/ptrln/active_model_serializers-hash_wrapper/coverage)
8
+
9
+ [![Issue Count](https://lima.codeclimate.com/github/ptrln/active_model_serializers-hash_wrapper/badges/issue_count.svg)](https://lima.codeclimate.com/github/ptrln/active_model_serializers-hash_wrapper)
10
+
11
+ [![Build Status](https://travis-ci.org/ptrln/active_model_serializers-hash_wrapper.svg?branch=master)](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
+
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new('spec')
5
+
6
+ task :default => :spec
@@ -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
@@ -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
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -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
@@ -0,0 +1,5 @@
1
+ module ActiveModelSerializers
2
+ module HashWrapper
3
+ VERSION = "0.1.0"
4
+ end
5
+ 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: []