jsonapi_compliable 0.6.4 → 0.6.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.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.travis.yml +11 -3
  4. data/.yardopts +1 -0
  5. data/README.md +10 -1
  6. data/Rakefile +1 -0
  7. data/docs/JsonapiCompliable.html +202 -0
  8. data/docs/JsonapiCompliable/Adapters.html +119 -0
  9. data/docs/JsonapiCompliable/Adapters/Abstract.html +2285 -0
  10. data/docs/JsonapiCompliable/Adapters/ActiveRecord.html +2151 -0
  11. data/docs/JsonapiCompliable/Adapters/ActiveRecordSideloading.html +582 -0
  12. data/docs/JsonapiCompliable/Adapters/Null.html +1682 -0
  13. data/docs/JsonapiCompliable/Base.html +1395 -0
  14. data/docs/JsonapiCompliable/Deserializer.html +835 -0
  15. data/docs/JsonapiCompliable/Errors.html +115 -0
  16. data/docs/JsonapiCompliable/Errors/BadFilter.html +124 -0
  17. data/docs/JsonapiCompliable/Errors/StatNotFound.html +266 -0
  18. data/docs/JsonapiCompliable/Errors/UnsupportedPageSize.html +264 -0
  19. data/docs/JsonapiCompliable/Errors/ValidationError.html +124 -0
  20. data/docs/JsonapiCompliable/Extensions.html +117 -0
  21. data/docs/JsonapiCompliable/Extensions/BooleanAttribute.html +212 -0
  22. data/docs/JsonapiCompliable/Extensions/BooleanAttribute/ClassMethods.html +229 -0
  23. data/docs/JsonapiCompliable/Extensions/ExtraAttribute.html +242 -0
  24. data/docs/JsonapiCompliable/Extensions/ExtraAttribute/ClassMethods.html +237 -0
  25. data/docs/JsonapiCompliable/Query.html +1099 -0
  26. data/docs/JsonapiCompliable/Rails.html +211 -0
  27. data/docs/JsonapiCompliable/Resource.html +5241 -0
  28. data/docs/JsonapiCompliable/Scope.html +703 -0
  29. data/docs/JsonapiCompliable/Scoping.html +117 -0
  30. data/docs/JsonapiCompliable/Scoping/Base.html +843 -0
  31. data/docs/JsonapiCompliable/Scoping/DefaultFilter.html +318 -0
  32. data/docs/JsonapiCompliable/Scoping/ExtraFields.html +301 -0
  33. data/docs/JsonapiCompliable/Scoping/Filter.html +313 -0
  34. data/docs/JsonapiCompliable/Scoping/Filterable.html +364 -0
  35. data/docs/JsonapiCompliable/Scoping/Paginate.html +613 -0
  36. data/docs/JsonapiCompliable/Scoping/Sort.html +454 -0
  37. data/docs/JsonapiCompliable/SerializableTempId.html +216 -0
  38. data/docs/JsonapiCompliable/Sideload.html +2484 -0
  39. data/docs/JsonapiCompliable/Stats.html +117 -0
  40. data/docs/JsonapiCompliable/Stats/DSL.html +999 -0
  41. data/docs/JsonapiCompliable/Stats/Payload.html +391 -0
  42. data/docs/JsonapiCompliable/Util.html +117 -0
  43. data/docs/JsonapiCompliable/Util/FieldParams.html +228 -0
  44. data/docs/JsonapiCompliable/Util/Hash.html +471 -0
  45. data/docs/JsonapiCompliable/Util/IncludeParams.html +299 -0
  46. data/docs/JsonapiCompliable/Util/Persistence.html +435 -0
  47. data/docs/JsonapiCompliable/Util/RelationshipPayload.html +563 -0
  48. data/docs/JsonapiCompliable/Util/RenderOptions.html +250 -0
  49. data/docs/JsonapiCompliable/Util/ValidationResponse.html +532 -0
  50. data/docs/_index.html +527 -0
  51. data/docs/class_list.html +51 -0
  52. data/docs/css/common.css +1 -0
  53. data/docs/css/full_list.css +58 -0
  54. data/docs/css/style.css +492 -0
  55. data/docs/file.README.html +99 -0
  56. data/docs/file_list.html +56 -0
  57. data/docs/frames.html +17 -0
  58. data/docs/index.html +99 -0
  59. data/docs/js/app.js +248 -0
  60. data/docs/js/full_list.js +216 -0
  61. data/docs/js/jquery.js +4 -0
  62. data/docs/method_list.html +1731 -0
  63. data/docs/top-level-namespace.html +110 -0
  64. data/gemfiles/rails_5.gemfile +1 -1
  65. data/lib/jsonapi_compliable/adapters/abstract.rb +267 -4
  66. data/lib/jsonapi_compliable/adapters/active_record.rb +23 -1
  67. data/lib/jsonapi_compliable/adapters/null.rb +43 -3
  68. data/lib/jsonapi_compliable/base.rb +182 -33
  69. data/lib/jsonapi_compliable/deserializer.rb +90 -21
  70. data/lib/jsonapi_compliable/extensions/boolean_attribute.rb +12 -0
  71. data/lib/jsonapi_compliable/extensions/extra_attribute.rb +32 -0
  72. data/lib/jsonapi_compliable/extensions/temp_id.rb +11 -0
  73. data/lib/jsonapi_compliable/query.rb +94 -2
  74. data/lib/jsonapi_compliable/rails.rb +8 -0
  75. data/lib/jsonapi_compliable/resource.rb +548 -11
  76. data/lib/jsonapi_compliable/scope.rb +43 -1
  77. data/lib/jsonapi_compliable/scoping/base.rb +59 -8
  78. data/lib/jsonapi_compliable/scoping/default_filter.rb +33 -0
  79. data/lib/jsonapi_compliable/scoping/extra_fields.rb +33 -0
  80. data/lib/jsonapi_compliable/scoping/filter.rb +29 -2
  81. data/lib/jsonapi_compliable/scoping/filterable.rb +4 -0
  82. data/lib/jsonapi_compliable/scoping/paginate.rb +33 -0
  83. data/lib/jsonapi_compliable/scoping/sort.rb +18 -0
  84. data/lib/jsonapi_compliable/sideload.rb +229 -1
  85. data/lib/jsonapi_compliable/stats/dsl.rb +44 -0
  86. data/lib/jsonapi_compliable/stats/payload.rb +20 -0
  87. data/lib/jsonapi_compliable/util/field_params.rb +1 -0
  88. data/lib/jsonapi_compliable/util/hash.rb +18 -0
  89. data/lib/jsonapi_compliable/util/include_params.rb +22 -0
  90. data/lib/jsonapi_compliable/util/persistence.rb +13 -3
  91. data/lib/jsonapi_compliable/util/relationship_payload.rb +2 -0
  92. data/lib/jsonapi_compliable/util/render_options.rb +2 -0
  93. data/lib/jsonapi_compliable/util/validation_response.rb +16 -0
  94. data/lib/jsonapi_compliable/version.rb +1 -1
  95. metadata +60 -5
  96. data/gemfiles/rails_4.gemfile.lock +0 -208
  97. data/gemfiles/rails_5.gemfile.lock +0 -212
  98. data/lib/jsonapi_compliable/write.rb +0 -93
@@ -1,8 +1,34 @@
1
1
  module JsonapiCompliable
2
2
  module Stats
3
+ # Provides an easier interface to stats scoping.
4
+ #
5
+ # Used within Resource DSL:
6
+ #
7
+ # allow_stat total: [:count] do
8
+ # # ... eval'd in Stats::DSL context! ...
9
+ # end
10
+ #
11
+ # This allows us to define arbitrary stats:
12
+ #
13
+ # allow_stat total: [:count] do
14
+ # standard_deviation { |scope, attr| ... }
15
+ # end
16
+ #
17
+ # And use convenience methods:
18
+ #
19
+ # allow_stat :rating do
20
+ # count!
21
+ # average!
22
+ # end
23
+ #
24
+ # @see Resource.allow_stat
25
+ # @attr_reader [Symbol] name the stat, e.g. :total
26
+ # @attr_reader [Hash] calculations procs for various metrics
3
27
  class DSL
4
28
  attr_reader :name, :calculations
5
29
 
30
+ # @param [Adapters::Abstract] adapter the Resource adapter
31
+ # @param [Symbol, Hash] config example: +:total+ or +{ total: [:count] }+
6
32
  def initialize(adapter, config)
7
33
  config = { config => [] } if config.is_a?(Symbol)
8
34
 
@@ -12,31 +38,49 @@ module JsonapiCompliable
12
38
  Array(config.values.first).each { |c| send(:"#{c}!") }
13
39
  end
14
40
 
41
+ # Used for defining arbitrary stats within the DSL:
42
+ #
43
+ # allow_stat :total do
44
+ # standard_deviation { |scope, attr| ... }
45
+ # end
46
+ #
47
+ # ...will hit +method_missing+ and store the proc for future reference.
48
+ # @api private
15
49
  def method_missing(meth, *args, &blk)
16
50
  @calculations[meth] = blk
17
51
  end
18
52
 
53
+ # Grab a calculation proc. Raises error if no corresponding stat
54
+ # has been configured.
55
+ #
56
+ # @param [String, Symbol] name the name of the calculation, e.g. +:total+
57
+ # @return [Proc] the proc to run the calculation
19
58
  def calculation(name)
20
59
  callable = @calculations[name] || @calculations[name.to_sym]
21
60
  callable || raise(Errors::StatNotFound.new(@name, name))
22
61
  end
23
62
 
63
+ # Convenience method for default :count proc
24
64
  def count!
25
65
  @calculations[:count] = @adapter.method(:count)
26
66
  end
27
67
 
68
+ # Convenience method for default :sum proc
28
69
  def sum!
29
70
  @calculations[:sum] = @adapter.method(:sum)
30
71
  end
31
72
 
73
+ # Convenience method for default :average proc
32
74
  def average!
33
75
  @calculations[:average] = @adapter.method(:average)
34
76
  end
35
77
 
78
+ # Convenience method for default :maximum proc
36
79
  def maximum!
37
80
  @calculations[:maximum] = @adapter.method(:maximum)
38
81
  end
39
82
 
83
+ # Convenience method for default :minimum proc
40
84
  def minimum!
41
85
  @calculations[:minimum] = @adapter.method(:minimum)
42
86
  end
@@ -1,12 +1,32 @@
1
1
  module JsonapiCompliable
2
2
  module Stats
3
+ # Generate the stats payload so we can return it in the response.
4
+ #
5
+ # {
6
+ # data: [...],
7
+ # meta: { stats: the_generated_payload }
8
+ # }
9
+ #
10
+ # For example:
11
+ #
12
+ # {
13
+ # data: [...],
14
+ # meta: { stats: { total: { count: 100 } } }
15
+ # }
3
16
  class Payload
17
+ # @param [Resource] resource the resource instance
18
+ # @param [Hash] query_hash the Query#to_hash for the current resource
19
+ # @param scope the scope we are chaining/modifying
4
20
  def initialize(resource, query_hash, scope)
5
21
  @resource = resource
6
22
  @query_hash = query_hash[:stats]
7
23
  @scope = scope
8
24
  end
9
25
 
26
+ # Generate the payload for +{ meta: { stats: { ... } } }+
27
+ # Loops over all calculations, computes then, and gives back
28
+ # a hash of stats and their results.
29
+ # @return [Hash] the generated payload
10
30
  def generate
11
31
  {}.tap do |stats|
12
32
  @query_hash.each_pair do |name, calculation|
@@ -1,5 +1,6 @@
1
1
  module JsonapiCompliable
2
2
  module Util
3
+ # @api private
3
4
  class FieldParams
4
5
  def self.parse(params)
5
6
  return {} if params.nil?
@@ -1,6 +1,19 @@
1
1
  module JsonapiCompliable
2
2
  module Util
3
+ # @api private
3
4
  class Hash
5
+ # Grab all keys at any level of the hash.
6
+ #
7
+ # { foo: { bar: { baz: {} } } }
8
+ #
9
+ # Becomes
10
+ #
11
+ # [:foo, :bar, :bar]
12
+ #
13
+ # @param hash the hash we want to process
14
+ # @param [Array<Symbol, String>] collection the memoized collection of keys
15
+ # @return [Array<Symbol, String>] the keys
16
+ # @api private
4
17
  def self.keys(hash, collection = [])
5
18
  hash.each_pair do |key, value|
6
19
  collection << key
@@ -10,11 +23,16 @@ module JsonapiCompliable
10
23
  collection
11
24
  end
12
25
 
26
+ # Like ActiveSupport's #deep_merge
27
+ # @return [Hash] the merged hash
28
+ # @api private
13
29
  def self.deep_merge!(hash, other)
14
30
  merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
15
31
  hash.merge!(other, &merger)
16
32
  end
17
33
 
34
+ # Like ActiveSupport's #deep_dup
35
+ # @api private
18
36
  def self.deep_dup(hash)
19
37
  if hash.respond_to?(:deep_dup)
20
38
  hash.deep_dup
@@ -1,7 +1,29 @@
1
1
  module JsonapiCompliable
2
2
  module Util
3
+ # Utility class for dealing with Include Directives
3
4
  class IncludeParams
4
5
  class << self
6
+ # Let's say the user requested these sideloads:
7
+ #
8
+ # GET /posts?include=comments.author
9
+ #
10
+ # But our resource had this code:
11
+ #
12
+ # sideload_whitelist({ index: [:comments] })
13
+ #
14
+ # We should drop the 'author' sideload from the request.
15
+ #
16
+ # Hashes become 'include directive hashes' within the library. ie
17
+ #
18
+ # [:tags, { comments: :author }]
19
+ #
20
+ # Becomes
21
+ #
22
+ # { tags: {}, comments: { author: {} } }
23
+ #
24
+ # @param [Hash] requested_includes the nested hash the user requested
25
+ # @param [Hash] allowed_includes the nested hash configured via DSL
26
+ # @return [Hash] the scrubbed hash
5
27
  def scrub(requested_includes, allowed_includes)
6
28
  {}.tap do |valid|
7
29
  requested_includes.each_pair do |key, sub_hash|
@@ -1,4 +1,10 @@
1
+ # Save the given Resource#model, and all of its nested relationships.
2
+ # @api private
1
3
  class JsonapiCompliable::Util::Persistence
4
+ # @param [Resource] resource the resource instance
5
+ # @param [Hash] meta see (Deserializer#meta)
6
+ # @param [Hash] attributes see (Deserializer#attributes)
7
+ # @param [Hash] relationships see (Deserializer#relationships)
2
8
  def initialize(resource, meta, attributes, relationships)
3
9
  @resource = resource
4
10
  @meta = meta
@@ -6,9 +12,11 @@ class JsonapiCompliable::Util::Persistence
6
12
  @relationships = relationships
7
13
  end
8
14
 
15
+ # Perform the actual save logic.
16
+ #
9
17
  # belongs_to must be processed before/separately from has_many -
10
18
  # we need to know the primary key value of the parent before
11
- # persisting the child
19
+ # persisting the child.
12
20
  #
13
21
  # Flow:
14
22
  # * process parents
@@ -19,6 +27,8 @@ class JsonapiCompliable::Util::Persistence
19
27
  # * process children
20
28
  # * associate children
21
29
  # * return current object
30
+ #
31
+ # @return the persisted model instance
22
32
  def run
23
33
  parents = process_belongs_to(@relationships)
24
34
  update_foreign_key_for_parents(parents)
@@ -35,6 +45,8 @@ class JsonapiCompliable::Util::Persistence
35
45
  persisted unless @meta[:method] == :destroy
36
46
  end
37
47
 
48
+ private
49
+
38
50
  # The child's attributes should be modified to nil-out the
39
51
  # foreign_key when the parent is being destroyed or disassociated
40
52
  def update_foreign_key(parent_object, attrs, x)
@@ -99,8 +111,6 @@ class JsonapiCompliable::Util::Persistence
99
111
  object.instance_variable_set(:@_jsonapi_temp_id, temp_id)
100
112
  end
101
113
 
102
- private
103
-
104
114
  def iterate(only: [], except: [])
105
115
  opts = {
106
116
  resource: @resource,
@@ -1,5 +1,7 @@
1
1
  module JsonapiCompliable
2
2
  module Util
3
+ # Helper methods for traversing the 'relationships' JSONAPI payloads
4
+ # @api private
3
5
  class RelationshipPayload
4
6
  attr_reader :resource, :payload
5
7
 
@@ -1,5 +1,7 @@
1
1
  module JsonapiCompliable
2
2
  module Util
3
+ # Generate the options we end up passing to {{http://jsonapi-rb.org jsonapi-rb}}
4
+ # @api private
3
5
  class RenderOptions
4
6
  def self.generate(object, query_hash, overrides = {})
5
7
  resolved = object.respond_to?(:resolve) ? object.resolve : object
@@ -1,15 +1,31 @@
1
+ # We need to know two things in the response of a persistence call:
2
+ #
3
+ # * The model we just tried to persist
4
+ # * Was the persistence successful?
5
+ #
6
+ # This object wraps those bits of data. The call is considered
7
+ # unsuccessful when it adheres to the ActiveModel#errors interface,
8
+ # and #errors is not blank. In other words, it is not successful if
9
+ # there were validation errors.
10
+ #
11
+ # @attr_reader object the object we are saving
1
12
  class JsonapiCompliable::Util::ValidationResponse
2
13
  attr_reader :object
3
14
 
15
+ # @param object the model instance we tried to save
16
+ # @param deserialized_params see Base#deserialized_params
4
17
  def initialize(object, deserialized_params)
5
18
  @object = object
6
19
  @deserialized_params = deserialized_params
7
20
  end
8
21
 
22
+ # Check to ensure no validation errors.
23
+ # @return [Boolean] did the persistence call succeed?
9
24
  def success?
10
25
  all_valid?(object, @deserialized_params.relationships)
11
26
  end
12
27
 
28
+ # @return [Array] the object and success state
13
29
  def to_a
14
30
  [object, success?]
15
31
  end
@@ -1,3 +1,3 @@
1
1
  module JsonapiCompliable
2
- VERSION = "0.6.4"
2
+ VERSION = "0.6.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi_compliable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.6.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lee Richmond
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-04-26 00:00:00.000000000 Z
12
+ date: 2017-05-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: jsonapi-serializable
@@ -127,6 +127,7 @@ files:
127
127
  - ".rspec"
128
128
  - ".ruby-version"
129
129
  - ".travis.yml"
130
+ - ".yardopts"
130
131
  - Appraisals
131
132
  - CODE_OF_CONDUCT.md
132
133
  - Gemfile
@@ -138,10 +139,65 @@ files:
138
139
  - bin/console
139
140
  - bin/rspec
140
141
  - bin/setup
142
+ - docs/JsonapiCompliable.html
143
+ - docs/JsonapiCompliable/Adapters.html
144
+ - docs/JsonapiCompliable/Adapters/Abstract.html
145
+ - docs/JsonapiCompliable/Adapters/ActiveRecord.html
146
+ - docs/JsonapiCompliable/Adapters/ActiveRecordSideloading.html
147
+ - docs/JsonapiCompliable/Adapters/Null.html
148
+ - docs/JsonapiCompliable/Base.html
149
+ - docs/JsonapiCompliable/Deserializer.html
150
+ - docs/JsonapiCompliable/Errors.html
151
+ - docs/JsonapiCompliable/Errors/BadFilter.html
152
+ - docs/JsonapiCompliable/Errors/StatNotFound.html
153
+ - docs/JsonapiCompliable/Errors/UnsupportedPageSize.html
154
+ - docs/JsonapiCompliable/Errors/ValidationError.html
155
+ - docs/JsonapiCompliable/Extensions.html
156
+ - docs/JsonapiCompliable/Extensions/BooleanAttribute.html
157
+ - docs/JsonapiCompliable/Extensions/BooleanAttribute/ClassMethods.html
158
+ - docs/JsonapiCompliable/Extensions/ExtraAttribute.html
159
+ - docs/JsonapiCompliable/Extensions/ExtraAttribute/ClassMethods.html
160
+ - docs/JsonapiCompliable/Query.html
161
+ - docs/JsonapiCompliable/Rails.html
162
+ - docs/JsonapiCompliable/Resource.html
163
+ - docs/JsonapiCompliable/Scope.html
164
+ - docs/JsonapiCompliable/Scoping.html
165
+ - docs/JsonapiCompliable/Scoping/Base.html
166
+ - docs/JsonapiCompliable/Scoping/DefaultFilter.html
167
+ - docs/JsonapiCompliable/Scoping/ExtraFields.html
168
+ - docs/JsonapiCompliable/Scoping/Filter.html
169
+ - docs/JsonapiCompliable/Scoping/Filterable.html
170
+ - docs/JsonapiCompliable/Scoping/Paginate.html
171
+ - docs/JsonapiCompliable/Scoping/Sort.html
172
+ - docs/JsonapiCompliable/SerializableTempId.html
173
+ - docs/JsonapiCompliable/Sideload.html
174
+ - docs/JsonapiCompliable/Stats.html
175
+ - docs/JsonapiCompliable/Stats/DSL.html
176
+ - docs/JsonapiCompliable/Stats/Payload.html
177
+ - docs/JsonapiCompliable/Util.html
178
+ - docs/JsonapiCompliable/Util/FieldParams.html
179
+ - docs/JsonapiCompliable/Util/Hash.html
180
+ - docs/JsonapiCompliable/Util/IncludeParams.html
181
+ - docs/JsonapiCompliable/Util/Persistence.html
182
+ - docs/JsonapiCompliable/Util/RelationshipPayload.html
183
+ - docs/JsonapiCompliable/Util/RenderOptions.html
184
+ - docs/JsonapiCompliable/Util/ValidationResponse.html
185
+ - docs/_index.html
186
+ - docs/class_list.html
187
+ - docs/css/common.css
188
+ - docs/css/full_list.css
189
+ - docs/css/style.css
190
+ - docs/file.README.html
191
+ - docs/file_list.html
192
+ - docs/frames.html
193
+ - docs/index.html
194
+ - docs/js/app.js
195
+ - docs/js/full_list.js
196
+ - docs/js/jquery.js
197
+ - docs/method_list.html
198
+ - docs/top-level-namespace.html
141
199
  - gemfiles/rails_4.gemfile
142
- - gemfiles/rails_4.gemfile.lock
143
200
  - gemfiles/rails_5.gemfile
144
- - gemfiles/rails_5.gemfile.lock
145
201
  - jsonapi_compliable.gemspec
146
202
  - lib/jsonapi_compliable.rb
147
203
  - lib/jsonapi_compliable/adapters/abstract.rb
@@ -176,7 +232,6 @@ files:
176
232
  - lib/jsonapi_compliable/util/render_options.rb
177
233
  - lib/jsonapi_compliable/util/validation_response.rb
178
234
  - lib/jsonapi_compliable/version.rb
179
- - lib/jsonapi_compliable/write.rb
180
235
  homepage:
181
236
  licenses:
182
237
  - MIT
@@ -1,208 +0,0 @@
1
- PATH
2
- remote: ..
3
- specs:
4
- jsonapi_compliable (0.6.3)
5
- jsonapi-serializable (~> 0.1)
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- actionmailer (4.2.7.1)
11
- actionpack (= 4.2.7.1)
12
- actionview (= 4.2.7.1)
13
- activejob (= 4.2.7.1)
14
- mail (~> 2.5, >= 2.5.4)
15
- rails-dom-testing (~> 1.0, >= 1.0.5)
16
- actionpack (4.2.7.1)
17
- actionview (= 4.2.7.1)
18
- activesupport (= 4.2.7.1)
19
- rack (~> 1.6)
20
- rack-test (~> 0.6.2)
21
- rails-dom-testing (~> 1.0, >= 1.0.5)
22
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
23
- actionview (4.2.7.1)
24
- activesupport (= 4.2.7.1)
25
- builder (~> 3.1)
26
- erubis (~> 2.7.0)
27
- rails-dom-testing (~> 1.0, >= 1.0.5)
28
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
29
- activejob (4.2.7.1)
30
- activesupport (= 4.2.7.1)
31
- globalid (>= 0.3.0)
32
- activemodel (4.2.7.1)
33
- activesupport (= 4.2.7.1)
34
- builder (~> 3.1)
35
- activerecord (4.2.7.1)
36
- activemodel (= 4.2.7.1)
37
- activesupport (= 4.2.7.1)
38
- arel (~> 6.0)
39
- activesupport (4.2.7.1)
40
- i18n (~> 0.7)
41
- json (~> 1.7, >= 1.7.7)
42
- minitest (~> 5.1)
43
- thread_safe (~> 0.3, >= 0.3.4)
44
- tzinfo (~> 1.1)
45
- appraisal (2.1.0)
46
- bundler
47
- rake
48
- thor (>= 0.14.0)
49
- arel (6.0.3)
50
- builder (3.2.2)
51
- byebug (9.0.6)
52
- coderay (1.1.1)
53
- concurrent-ruby (1.0.4)
54
- database_cleaner (1.5.3)
55
- diff-lcs (1.2.5)
56
- erubis (2.7.0)
57
- ffi (1.9.14)
58
- formatador (0.2.5)
59
- globalid (0.3.7)
60
- activesupport (>= 4.1.0)
61
- guard (2.14.0)
62
- formatador (>= 0.2.4)
63
- listen (>= 2.7, < 4.0)
64
- lumberjack (~> 1.0)
65
- nenv (~> 0.1)
66
- notiffany (~> 0.0)
67
- pry (>= 0.9.12)
68
- shellany (~> 0.0)
69
- thor (>= 0.18.1)
70
- guard-compat (1.2.1)
71
- guard-rspec (4.7.3)
72
- guard (~> 2.1)
73
- guard-compat (~> 1.1)
74
- rspec (>= 2.99.0, < 4.0)
75
- i18n (0.7.0)
76
- json (1.8.3)
77
- jsonapi-deserializable (0.1.1)
78
- jsonapi-parser (= 0.1.1)
79
- jsonapi-parser (0.1.1)
80
- jsonapi-rails (0.1.1)
81
- jsonapi-rb (= 0.1.1)
82
- jsonapi-rb (0.1.1)
83
- jsonapi-deserializable (= 0.1.1)
84
- jsonapi-serializable (= 0.1.1)
85
- jsonapi-renderer (0.1.1)
86
- jsonapi-serializable (0.1.1)
87
- jsonapi-renderer (= 0.1.1)
88
- kaminari (0.17.0)
89
- actionpack (>= 3.0.0)
90
- activesupport (>= 3.0.0)
91
- listen (3.1.5)
92
- rb-fsevent (~> 0.9, >= 0.9.4)
93
- rb-inotify (~> 0.9, >= 0.9.7)
94
- ruby_dep (~> 1.2)
95
- loofah (2.0.3)
96
- nokogiri (>= 1.5.9)
97
- lumberjack (1.0.10)
98
- mail (2.6.4)
99
- mime-types (>= 1.16, < 4)
100
- method_source (0.8.2)
101
- mime-types (3.1)
102
- mime-types-data (~> 3.2015)
103
- mime-types-data (3.2016.0521)
104
- mini_portile2 (2.1.0)
105
- minitest (5.10.1)
106
- nenv (0.3.0)
107
- nokogiri (1.6.8.1)
108
- mini_portile2 (~> 2.1.0)
109
- notiffany (0.1.1)
110
- nenv (~> 0.1)
111
- shellany (~> 0.0)
112
- pry (0.10.4)
113
- coderay (~> 1.1.0)
114
- method_source (~> 0.8.1)
115
- slop (~> 3.4)
116
- pry-byebug (3.4.2)
117
- byebug (~> 9.0)
118
- pry (~> 0.10)
119
- rack (1.6.5)
120
- rack-test (0.6.3)
121
- rack (>= 1.0)
122
- rails (4.2.7.1)
123
- actionmailer (= 4.2.7.1)
124
- actionpack (= 4.2.7.1)
125
- actionview (= 4.2.7.1)
126
- activejob (= 4.2.7.1)
127
- activemodel (= 4.2.7.1)
128
- activerecord (= 4.2.7.1)
129
- activesupport (= 4.2.7.1)
130
- bundler (>= 1.3.0, < 2.0)
131
- railties (= 4.2.7.1)
132
- sprockets-rails
133
- rails-deprecated_sanitizer (1.0.3)
134
- activesupport (>= 4.2.0.alpha)
135
- rails-dom-testing (1.0.7)
136
- activesupport (>= 4.2.0.beta, < 5.0)
137
- nokogiri (~> 1.6.0)
138
- rails-deprecated_sanitizer (>= 1.0.1)
139
- rails-html-sanitizer (1.0.3)
140
- loofah (~> 2.0)
141
- railties (4.2.7.1)
142
- actionpack (= 4.2.7.1)
143
- activesupport (= 4.2.7.1)
144
- rake (>= 0.8.7)
145
- thor (>= 0.18.1, < 2.0)
146
- rake (10.5.0)
147
- rb-fsevent (0.9.8)
148
- rb-inotify (0.9.7)
149
- ffi (>= 0.5.0)
150
- rspec (3.5.0)
151
- rspec-core (~> 3.5.0)
152
- rspec-expectations (~> 3.5.0)
153
- rspec-mocks (~> 3.5.0)
154
- rspec-core (3.5.4)
155
- rspec-support (~> 3.5.0)
156
- rspec-expectations (3.5.0)
157
- diff-lcs (>= 1.2.0, < 2.0)
158
- rspec-support (~> 3.5.0)
159
- rspec-mocks (3.5.0)
160
- diff-lcs (>= 1.2.0, < 2.0)
161
- rspec-support (~> 3.5.0)
162
- rspec-rails (3.5.2)
163
- actionpack (>= 3.0)
164
- activesupport (>= 3.0)
165
- railties (>= 3.0)
166
- rspec-core (~> 3.5.0)
167
- rspec-expectations (~> 3.5.0)
168
- rspec-mocks (~> 3.5.0)
169
- rspec-support (~> 3.5.0)
170
- rspec-support (3.5.0)
171
- ruby_dep (1.5.0)
172
- shellany (0.0.1)
173
- slop (3.6.0)
174
- sprockets (3.7.0)
175
- concurrent-ruby (~> 1.0)
176
- rack (> 1, < 3)
177
- sprockets-rails (3.2.0)
178
- actionpack (>= 4.0)
179
- activesupport (>= 4.0)
180
- sprockets (>= 3.0.0)
181
- sqlite3 (1.3.12)
182
- thor (0.19.4)
183
- thread_safe (0.3.5)
184
- tzinfo (1.2.2)
185
- thread_safe (~> 0.1)
186
-
187
- PLATFORMS
188
- ruby
189
-
190
- DEPENDENCIES
191
- activerecord (>= 4.1, < 6)
192
- appraisal
193
- bundler (~> 1.12)
194
- database_cleaner
195
- guard
196
- guard-rspec
197
- jsonapi-rails (~> 0.1)
198
- jsonapi_compliable!
199
- kaminari (~> 0.17)
200
- pry
201
- pry-byebug
202
- rails (~> 4.1)
203
- rake (~> 10.0)
204
- rspec-rails
205
- sqlite3
206
-
207
- BUNDLED WITH
208
- 1.14.6