serial 0.1.1 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8606568eae4354b244eee0133b643b70b83a8d46
4
- data.tar.gz: 14c06a5dbbc592f84e08f29b4de5394f5b3eb23f
3
+ metadata.gz: 29eb0ebd62982d93650098a3f2f4f54f11879bf3
4
+ data.tar.gz: 6d516f85165f6a46f767925a48c4d40d5a0cb1c9
5
5
  SHA512:
6
- metadata.gz: cac05055fd052f2b838043014f540b697b38e7ee0a7340cf2f48a71e4ff8358cd253c6a0db6986bcd54a9c53c4f9da19177e7b948369bb58a722a87f2ca61af6
7
- data.tar.gz: 49d8597da55ed54ac1b492f000efd29d8e4b3852716f05d158499825e890901bd66abece7c5ff753755cf46784a8905055c8843a2f0f423c56c70895e6f236c0
6
+ metadata.gz: 60d63e4986fc120337231c0ad4e0f1145947d6975e856fe61924c6760f3bb29c60218aafef65899015c19fb1a23241bf83558d81ca6b398a0b10fe7f5123d657
7
+ data.tar.gz: 6922159d7d31c6e77abc2c9e1cc3f4b7b3fc3f1990afc8c6d5c11303e9364ef940ee21f3428a4be577764a476fd5c931b8507be74e673abd9f7b94e3b504f588
data/.rspec CHANGED
@@ -1,3 +1,4 @@
1
1
  --require spec_helper
2
2
  --format documentation
3
3
  --color
4
+ --tty
data/.travis.yml CHANGED
@@ -1,4 +1,11 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.2
3
+ - 2.1
4
+ - 2.2
5
+ - ruby-head
6
+ - jruby
7
+ - rbx-2
4
8
  before_install: gem install bundler -v 1.10.6
9
+ matrix:
10
+ allow_failures:
11
+ - rvm: ruby-head
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ --asset elabs-logo.png
data/CHANGELOG.md ADDED
@@ -0,0 +1,11 @@
1
+ # CHANGELOG
2
+
3
+ ## 0.2.0
4
+
5
+ - Raise an error if serializer is not given a block.
6
+ - Add RailsHelpers.
7
+ - Fix ArrayBuilder#collection taking a key parameter.
8
+
9
+ ## 0.1.0
10
+
11
+ - Initial release.
data/Gemfile CHANGED
@@ -1,4 +1,14 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
- # Specify your gem's dependencies in serial.gemspec
4
3
  gemspec
4
+
5
+ group :development do
6
+ platform :ruby do
7
+ gem "sqlite3"
8
+ end
9
+
10
+ platform :jruby do
11
+ gem "jdbc-sqlite3"
12
+ gem "activerecord-jdbcsqlite3-adapter"
13
+ end
14
+ end
data/README.md CHANGED
@@ -1,64 +1,148 @@
1
1
  # Serial
2
2
 
3
- Serial is a serialization library. Its primary purpose is to generate simple
4
- datastructures from object graphs.
3
+ [![Build Status](https://travis-ci.org/elabs/serial.svg?branch=master)](http://travis-ci.org/elabs/serial)
4
+ [![Dependency Status](https://gemnasium.com/elabs/serial.svg)](https://gemnasium.com/elabs/serial)
5
+ [![Code Climate](https://codeclimate.com/github/elabs/serial/badges/gpa.svg)](https://codeclimate.com/github/elabs/serial)
6
+ [![Gem Version](https://badge.fury.io/rb/serial.svg)](http://badge.fury.io/rb/serial)
7
+ [![Inline docs](http://inch-ci.org/github/elabs/serial.svg?branch=master&style=shields)](http://inch-ci.org/github/elabs/serial)
5
8
 
9
+ *Psst, full documentation can be found at [rubydoc.info/gems/serial](http://www.rubydoc.info/gems/serial)*
10
+
11
+ Serial is a light-weight and simple serialization library. Its primary purpose is to generate primitive
12
+ datastructures from object graphs, in other words to help you serialize your data.
13
+
14
+ Serial is sponsored by [Elabs][].
15
+
16
+ [![elabs logo][]][Elabs]
17
+
18
+ [Elabs]: http://www.elabs.se/
19
+ [elabs logo]: ./elabs-logo.png?raw=true
6
20
 
7
21
  ## Installation
8
22
 
9
23
  Add this line to your application's Gemfile:
10
24
 
11
25
  ```ruby
12
- gem 'serial'
26
+ gem "serial"
13
27
  ```
14
28
 
15
29
  And then execute:
16
30
 
17
31
  $ bundle
18
32
 
19
- Or install it yourself as:
33
+ ## The DSL
20
34
 
21
- $ gem install serial
35
+ *Full reference: [Serial::HashBuilder](http://www.rubydoc.info/gems/serial/Serial/HashBuilder), [Serial::ArrayBuilder](http://www.rubydoc.info/gems/serial/Serial/ArrayBuilder).*
22
36
 
23
- ## Usage
37
+ - All keys are turned into strings.
38
+ - There is no automatic camel-casing. You name your keys the way you want them.
24
39
 
25
- You can set up your serializers like this:
40
+ ### Simple attributes
26
41
 
27
42
  ``` ruby
28
- # app/serializers/person_serializer.rb
29
- PersonSerializer = Serializer.new do |h, person|
30
- h.attribute(:id, person.id)
31
- h.attribute(:name, person.name)
32
- end
33
-
34
- # app/serializers/project_serializer.rb
35
- ProjectSerializer = Serializer.new do |h, project|
43
+ ProjectSerializer = Serial::Serializer.new do |h, project|
36
44
  h.attribute(:id, project.id)
37
- h.attribute(:projectName, project.name)
38
- h.attribute(:description, project.description)
45
+ h.attribute(:displayName, project.display_name)
46
+ end # => { "id" => …, "displayName" => … }
47
+ ```
48
+
49
+ ### Nested attributes
39
50
 
40
- h.attribute(:client, project.client) do |h, client|
41
- h.attribute(:id, client.id)
42
- h.attribute(:name, client.name)
51
+ ``` ruby
52
+ ProjectSerializer = Serial::Serializer.new do |h, project|
53
+ h.attribute(:owner, project.owner) do |h, owner|
54
+ h.attribute(:name, owner.name)
43
55
  end
56
+ end # => { "owner" => { "name" => … } }
57
+ ```
44
58
 
59
+ ### Collections
60
+
61
+ `#map` is a convenient method for serializing lists of items.
62
+
63
+ ``` ruby
64
+ ProjectSerializer = Serial::Serializer.new do |h, project|
45
65
  h.map(:assignments, project.assignments) do |h, assignment|
46
66
  h.attribute(:id, assignment.id)
47
67
  h.attribute(:duration, assignment.duration)
68
+ end
69
+ end # => { "assignments" => [{ "id" => …, "duration" => … }, …] }
70
+ ```
48
71
 
49
- # This is how you compose serializers.
50
- h.attribute(:person, assignment.person, &PersonSerializer)
72
+ The low-level interface powering `#map` is `#collection`.
73
+
74
+ ``` ruby
75
+ ProjectSerializer = Serial::Serializer.new do |h, project|
76
+ h.collection(:indices) do |l|
77
+ l.element { |h| h.attribute(…) }
78
+ l.element { |h| h.attribute(…) }
79
+
80
+ l.collection do |l|
81
+ l.element { … }
82
+ l.element { … }
83
+ end
51
84
  end
85
+ end # => { "indices" => [{…}, {…}, [{…}, {…}]] }
86
+ ```
87
+
88
+ ### Composition
89
+
90
+ You can compose serializers by passing them as blocks to the DSL methods.
52
91
 
92
+ ``` ruby
93
+ PersonSerializer = Serial::Serializer.new do |h, person|
94
+ h.attribute(:name, person.name)
95
+ end # => { "name" => … }
96
+
97
+ ProjectSerializer = Serial::Serializer.new do |h, project|
98
+ h.attribute(:owner, project.owner, &PersonSerializer)
53
99
  h.map(:people, project.people, &PersonSerializer)
54
- end
100
+ end # { "owner" => { "name" => … }, "people" => [{ "name" => … }, …] }
101
+ ```
102
+
103
+ ## Using your serializers
104
+
105
+ *Full reference: [Serial::Serializer](http://www.rubydoc.info/gems/serial/Serial/Serializer).*
106
+
107
+ - The context parameter in the below examples (when using `#call` and `#map`) is optional, if not provided regular block scoping rules apply.
108
+ - Tip: include [Serial::RailsHelpers](http://www.rubydoc.info/gems/serial/Serial/RailsHelpers) in ApplicationController for a convenient `#serialize` method.
109
+
110
+ ### Serializing a single object
111
+
112
+ ``` ruby
113
+ project = Project.find(…)
114
+ context = self
115
+ ProjectSerializer.call(context, project) # => { … }
55
116
  ```
56
117
 
57
- Whenever you need to use them you invoke them like this:
118
+ ### Serializing a list of objects
58
119
 
59
120
  ``` ruby
60
- person = Person.find(1)
61
- render json: PersonSerializer.call(self, person)
121
+ projects = Project.all
122
+ context = self
123
+ ProjectSerializer.map(context, projects) # => [{ … }, …]
124
+ ```
125
+
126
+ ### Using with Rails
127
+
128
+ ``` ruby
129
+ # app/controllers/project_controller.rb
130
+ class ProjectController < ApplicationController
131
+ include Serial::RailsHelpers
132
+
133
+ def show
134
+ project = Project.find(…)
135
+
136
+ # 1. Using helper from RailsHelpers.
137
+ render json: serialize(project)
138
+
139
+ # 2. Explicitly mentioning serializer using helper method.
140
+ render json: serialize(project, &ProjectSerializer)
141
+
142
+ # 3. Explicitly mentioning serializer.
143
+ render json: ProjectSerializer.call(self, project)
144
+ end
145
+ end
62
146
  ```
63
147
 
64
148
  ## Development
data/Rakefile CHANGED
@@ -1,6 +1,11 @@
1
+ task :release => :spec # BEFORE bundler gem tasks.
2
+
1
3
  require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
4
 
5
+ require "rspec/core/rake_task"
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
8
+ require "yard"
9
+ YARD::Rake::YardocTask.new(:doc)
10
+
6
11
  task :default => :spec
data/bin/console CHANGED
@@ -6,9 +6,5 @@ require "serial"
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start
9
+ require "pry"
10
+ Pry.start
data/elabs-logo.png ADDED
Binary file
data/lib/serial.rb CHANGED
@@ -3,6 +3,8 @@ require "serial/serializer"
3
3
  require "serial/builder"
4
4
  require "serial/hash_builder"
5
5
  require "serial/array_builder"
6
+ require "serial/rails_helpers"
6
7
 
8
+ # Serial namespace. See {Serial::Serializer} for reference.
7
9
  module Serial
8
10
  end
@@ -1,18 +1,43 @@
1
1
  module Serial
2
- # @api private
2
+ # A builder for building arrays. You most likely just want to look at the
3
+ # public API methods in this class.
3
4
  class ArrayBuilder < Builder
4
- def initialize(context, &block)
5
+ # @api private
6
+ def initialize(context)
5
7
  @context = context
6
8
  @data = []
7
- yield self
8
9
  end
9
10
 
11
+ # @api public
12
+ # Serializes a hash item in a collection.
13
+ #
14
+ # @example
15
+ # h.collection(…) do |l|
16
+ # l.element do |h|
17
+ # h.attribute(…)
18
+ # end
19
+ # end
20
+ #
21
+ # @yield [builder]
22
+ # @yieldparam builder [HashBuilder]
10
23
  def element(&block)
11
- @data << build(HashBuilder, &block)
24
+ @data << HashBuilder.build(@context, &block)
12
25
  end
13
26
 
14
- def collection(key, &block)
15
- @data << build(ArrayBuilder, &block)
27
+ # @api public
28
+ # Serializes a collection in a collection.
29
+ #
30
+ # @example
31
+ # h.collection(…) do |l|
32
+ # l.collection do |l|
33
+ # l.element { … }
34
+ # end
35
+ # end
36
+ #
37
+ # @yield [builder]
38
+ # @yieldparam builder [ArrayBuilder]
39
+ def collection(&block)
40
+ @data << ArrayBuilder.build(@context, &block)
16
41
  end
17
42
  end
18
43
  end
@@ -1,12 +1,32 @@
1
1
  module Serial
2
2
  # @api private
3
+ #
4
+ # Builder contains common methods to the serializer DSL.
3
5
  class Builder
4
- def self.build(context, &block)
5
- new(context, &block).data
6
+ # Create the builder, execute the block inside it, and return its' data.
7
+ # Any superflous arguments are given to {#exec}.
8
+ #
9
+ # @param context [#instance_exec, nil] the context to execute block inside
10
+ # @yield (see #exec)
11
+ # @yieldparam (see #exec)
12
+ # @return [#data]
13
+ def self.build(context, *args, &block)
14
+ builder = new(context)
15
+ builder.exec(*args, &block)
16
+ builder.data
6
17
  end
7
18
 
19
+ # Builder data, depends on what kind of builder it is.
20
+ #
21
+ # @return [Array, Hash]
8
22
  attr_reader :data
9
23
 
24
+ # Executes a block in the configured context, if there is one, otherwise using regular closure scoping.
25
+ #
26
+ #
27
+ # @yield [self, *args]
28
+ # @yieldparam self [Builder] passes in self as the first parameter.
29
+ # @yieldparam *args superflous arguments are passed to the block.
10
30
  def exec(*args, &block)
11
31
  if @context
12
32
  @context.instance_exec(self, *args, &block)
@@ -14,11 +34,5 @@ module Serial
14
34
  block.call(self, *args)
15
35
  end
16
36
  end
17
-
18
- def build(builder_klass, *args, &block)
19
- builder_klass.build(@context) do |builder|
20
- builder.exec(*args, &block)
21
- end
22
- end
23
37
  end
24
38
  end
@@ -1,26 +1,79 @@
1
1
  module Serial
2
- # @api private
2
+ # A builder for building hashes. You most likely just want to look at the
3
+ # public API methods in this class.
3
4
  class HashBuilder < Builder
4
- def initialize(context, &block)
5
+ # @api private
6
+ def initialize(context)
5
7
  @context = context
6
8
  @data = {}
7
- yield self
8
9
  end
9
10
 
11
+ # @api public
12
+ # Declare an attribute.
13
+ #
14
+ # @example without block
15
+ # h.attribute(:id, 5) # => { "id" => 5 }
16
+ #
17
+ # @example nested attribute, with block
18
+ # h.attribute(:project, project) do |h, project|
19
+ # h.attribute(:name, project.name)
20
+ # end # => { "project" => { "name" => … } }
21
+ #
22
+ # @param key [#to_s]
23
+ # @param value
24
+ # @yield [builder, value] declare nested attribute if block is given
25
+ # @yieldparam builder [HashBuilder] (keep in mind the examples shadow the outer `h` variable)
26
+ # @yieldparam value
10
27
  def attribute(key, value = nil, &block)
11
- value = build(HashBuilder, value, &block) if block
28
+ value = HashBuilder.build(@context, value, &block) if block
12
29
  @data[key.to_s] = value
13
30
  end
14
31
 
32
+ # @api public
33
+ # Declare a collection attribute. This is a low-level method, see {#map} instead.
34
+ #
35
+ # @example
36
+ # h.collection(:people) do |l|
37
+ # l.element do |h|
38
+ # h.attribute(…)
39
+ # end
40
+ # l.element do |h|
41
+ # h.attribute(…)
42
+ # end
43
+ # l.collection do |l|
44
+ # l.element do |h|
45
+ # h.attribute(…)
46
+ # end
47
+ # end
48
+ # end # => { "people" => [{…}, {…}, [{…}]] }
49
+ #
50
+ # @see ArrayBuilder
51
+ # @param key [#to_s]
52
+ # @yieldparam builder [ArrayBuilder]
15
53
  def collection(key, &block)
16
- list = build(ArrayBuilder, &block)
17
- attribute(key, list)
54
+ attribute(key, ArrayBuilder.build(@context, &block))
18
55
  end
19
56
 
57
+ # @api public
58
+ # Declare a collection attribute from a list of values.
59
+ #
60
+ # @example
61
+ # h.map(:people, project.people) do |h, person|
62
+ # h.attribute(:name, person.name)
63
+ # end # => { "people" => [{ "name" => … }] }
64
+ #
65
+ # @see #collection
66
+ # @param key [#to_s]
67
+ # @param list [#each]
68
+ # @yield [builder, value] yields each value from list to build an array of hashes
69
+ # @yieldparam builder [HashBuilder]
70
+ # @yieldparam value
20
71
  def map(key, list, &block)
21
72
  collection(key) do |builder|
22
73
  list.each do |item|
23
- builder.element { |element| element.exec(item, &block) }
74
+ builder.element do |element|
75
+ element.exec(item, &block)
76
+ end
24
77
  end
25
78
  end
26
79
  end
@@ -0,0 +1,31 @@
1
+ module Serial
2
+ # Helpers for using Serial with Rails.
3
+ module RailsHelpers
4
+ # Find the serializer for `model` and serialize it in the context of self.
5
+ #
6
+ # @example serializing a single object
7
+ # render json: { person: serialize(Person.first) }
8
+ #
9
+ # @example serializing multiple objects
10
+ # render json: { people: serialize(Person.all) }
11
+ #
12
+ # @example serializing with explicit context
13
+ # render json: { people: serialize(presenter, Person.all) }
14
+ #
15
+ # @example serializing with explicit serializer
16
+ # render json: { people: serialize(Person.all, &my_serializer) }
17
+ #
18
+ # @param context [#instance_exec]
19
+ # @param model [#model_name, #each?]
20
+ def serialize(context = self, model, &serializer)
21
+ serializer &&= Serializer.new(&serializer)
22
+ serializer ||= "#{model.model_name}Serializer".constantize
23
+
24
+ if model.respond_to?(:map)
25
+ serializer.map(context, model)
26
+ else
27
+ serializer.call(context, model)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,23 +1,111 @@
1
1
  module Serial
2
+ # Using this class you build serializers.
2
3
  class Serializer
4
+ # Create a new Serializer, using the block as instructions.
5
+ #
6
+ # @example
7
+ # # app/serializers/person_serializer.rb
8
+ # PersonSerializer = Serial::Serializer.new do |h, person|
9
+ # h.attribute(:name, person.name)
10
+ # end
11
+ #
12
+ # @yield [builder, value]
13
+ # @yieldparam builder [HashBuilder]
14
+ # @yieldparam value from {#call} or {#map}
3
15
  def initialize(&block)
16
+ unless block_given?
17
+ raise ArgumentError, "instructions (block) is required"
18
+ end
19
+
4
20
  @block = block
21
+ @to_proc = method(:to_proc_implementation).to_proc
22
+ end
23
+
24
+ # Serialize an object with this serializer, optionally within a context.
25
+ #
26
+ # @example with context, the serializer block is evaluated inside the context
27
+ # # app/serializers/person_serializer.rb
28
+ # PersonSerializer = Serial::Serializer.new do |h, person|
29
+ # h.attribute(:id, person.id)
30
+ # h.attribute(:url, people_url(person))
31
+ # end
32
+ #
33
+ # # app/controllers/person_controller.rb
34
+ # def show
35
+ # person = Person.find(…)
36
+ # render json: PersonSerializer.call(self, person)
37
+ # end
38
+ #
39
+ # @example without context, the serializer block is evaluated using normal closure rules
40
+ # # app/models/person.rb
41
+ # class Person
42
+ # Serializer = Serial::Serializer.new do |h, person|
43
+ # h.attribute(:id, person.id)
44
+ # h.attribute(:available_roles, available_roles)
45
+ # end
46
+ #
47
+ # def self.available_roles
48
+ # …
49
+ # end
50
+ # end
51
+ #
52
+ # # app/controllers/person_controller.rb
53
+ # def show
54
+ # person = Person.find(…)
55
+ # render json: Person::Serializer.call(person)
56
+ # end
57
+ #
58
+ # @param context [#instance_exec, nil] context to execute serializer in, or nil to use regular block closure rules.
59
+ # @param value
60
+ # @return [Hash]
61
+ def call(context = nil, value)
62
+ HashBuilder.build(context, value, &@block)
5
63
  end
6
64
 
65
+ # Serialize a list of objects with this serializer, optionally within a context.
66
+ #
67
+ # @example
68
+ # # app/serializers/person_serializer.rb
69
+ # PersonSerializer = Serial::Serializer.new do |h, person|
70
+ # h.attribute(:id, person.id)
71
+ # h.attribute(:url, people_url(person))
72
+ # end
73
+ #
74
+ # # app/controllers/person_controller.rb
75
+ # def index
76
+ # people = Person.all
77
+ # render json: PersonSerializer.map(self, people)
78
+ # end
79
+ #
80
+ # @see #call see #call for an explanation of the context parameter
81
+ # @param context (see #call)
82
+ # @param list [#map]
83
+ # @return [Array<Hash>]
7
84
  def map(context = nil, list)
8
85
  list.map { |item| call(context, item) }
9
86
  end
10
87
 
11
- def call(context = nil, value)
12
- block = @block
13
- HashBuilder.build(context) do |builder|
14
- builder.exec(value, &block)
15
- end
16
- end
88
+ # Serializer composition!
89
+ #
90
+ # @example
91
+ # # app/serializers/person_serializer.rb
92
+ # PersonSerializer = Serial::Serializer.new do |h, person|
93
+ # h.attribute(:name, person.name)
94
+ # end
95
+ #
96
+ # # app/serializers/project_serializer.rb
97
+ # ProjectSerializer = Serial::Serializer.new do |h, project|
98
+ # h.attribute(:owner, project.owner, &PersonSerializer)
99
+ # h.map(:people, project.people, &PersonSerializer)
100
+ # end
101
+ #
102
+ # @return [Proc]
103
+ attr_reader :to_proc
104
+
105
+ private
17
106
 
18
- def to_proc
19
- block = @block
20
- proc { |builder, value| builder.exec(value, &block) }
107
+ def to_proc_implementation(builder, *args)
108
+ builder.exec(*args, &@block)
21
109
  end
22
110
  end
23
111
  end
@@ -1,3 +1,4 @@
1
1
  module Serial
2
- VERSION = "0.1.1"
2
+ # Gem version, uses SemVer.
3
+ VERSION = "0.2.0"
3
4
  end
data/serial.gemspec CHANGED
@@ -6,11 +6,11 @@ require 'serial/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "serial"
8
8
  spec.version = Serial::VERSION
9
- spec.authors = ["Jonas Nicklas", "Kim Burgestrand"]
10
- spec.email = ["jonas@elabs.se", "kim@elabs.se"]
9
+ spec.authors = ["Elabs", "Jonas Nicklas", "Kim Burgestrand"]
10
+ spec.email = ["dev@elabs.se", "jonas@elabs.se", "kim@elabs.se"]
11
11
  spec.license = "MIT"
12
12
 
13
- spec.summary = %q{Plain old Ruby for generating simple data structures from object graphs.}
13
+ spec.summary = %q{Plain old Ruby for generating primitive data structures from object graphs.}
14
14
  spec.homepage = "https://github.com/elabs/serial"
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
@@ -19,7 +19,9 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.10"
22
+ spec.add_development_dependency "pry", "~> 0.10"
22
23
  spec.add_development_dependency "rake", "~> 10.0"
23
24
  spec.add_development_dependency "rspec", "~> 3.2"
24
25
  spec.add_development_dependency "yard", "~> 0.8"
26
+ spec.add_development_dependency "activerecord", "~> 4.0"
25
27
  end
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serial
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
+ - Elabs
7
8
  - Jonas Nicklas
8
9
  - Kim Burgestrand
9
10
  autorequire:
10
11
  bindir: exe
11
12
  cert_chain: []
12
- date: 2015-09-01 00:00:00.000000000 Z
13
+ date: 2015-09-18 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: bundler
@@ -25,6 +26,20 @@ dependencies:
25
26
  - - "~>"
26
27
  - !ruby/object:Gem::Version
27
28
  version: '1.10'
29
+ - !ruby/object:Gem::Dependency
30
+ name: pry
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '0.10'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '0.10'
28
43
  - !ruby/object:Gem::Dependency
29
44
  name: rake
30
45
  requirement: !ruby/object:Gem::Requirement
@@ -67,8 +82,23 @@ dependencies:
67
82
  - - "~>"
68
83
  - !ruby/object:Gem::Version
69
84
  version: '0.8'
85
+ - !ruby/object:Gem::Dependency
86
+ name: activerecord
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '4.0'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - "~>"
97
+ - !ruby/object:Gem::Version
98
+ version: '4.0'
70
99
  description:
71
100
  email:
101
+ - dev@elabs.se
72
102
  - jonas@elabs.se
73
103
  - kim@elabs.se
74
104
  executables: []
@@ -78,15 +108,19 @@ files:
78
108
  - ".gitignore"
79
109
  - ".rspec"
80
110
  - ".travis.yml"
111
+ - ".yardopts"
112
+ - CHANGELOG.md
81
113
  - Gemfile
82
114
  - README.md
83
115
  - Rakefile
84
116
  - bin/console
85
117
  - bin/setup
118
+ - elabs-logo.png
86
119
  - lib/serial.rb
87
120
  - lib/serial/array_builder.rb
88
121
  - lib/serial/builder.rb
89
122
  - lib/serial/hash_builder.rb
123
+ - lib/serial/rails_helpers.rb
90
124
  - lib/serial/serializer.rb
91
125
  - lib/serial/version.rb
92
126
  - serial.gemspec
@@ -113,6 +147,6 @@ rubyforge_project:
113
147
  rubygems_version: 2.4.6
114
148
  signing_key:
115
149
  specification_version: 4
116
- summary: Plain old Ruby for generating simple data structures from object graphs.
150
+ summary: Plain old Ruby for generating primitive data structures from object graphs.
117
151
  test_files: []
118
152
  has_rdoc: