dayman 0.1.1 → 0.1.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: 23ccd4a07729e4665570159b15d4efcc36de7447
4
- data.tar.gz: 4e2a406bd959744267e26a954b2a6bbbc8925a2a
3
+ metadata.gz: 8ce784719c149e5065f26e2c034afc68c5d3ab47
4
+ data.tar.gz: a7df9151bf2342d4cf01f6f21295d4483ea4716f
5
5
  SHA512:
6
- metadata.gz: 0fd8ab23c5663b629f918f8e36e9f34c142da18b7981f169a22b2bf1f874c56099979d6f78be22218020a934b6ac3f9dc2c3884a41a4571b19879c02394b20f0
7
- data.tar.gz: afc86fde581dc7b271a16160554bffc457169de043493d497020992d44cf93d0bb5734f35f82585f7f188bee93fd4ba1130e0e08fcdc7a447d14a5ff32fcc900
6
+ metadata.gz: 957b6870a12abff57610411fed4fa0ebbdf22fe0c2f2c3483f9107f6e35720fd9e51c45e90260a72dcf4c86b556c532bd4683129386416bdd335c4bcd3a0a3a3
7
+ data.tar.gz: 5d842310cbe3ae554c0891485f1387c30338d441380ddc7522623b33c195d9f675b85eb46e1a8cd8b1b1508ff3b259455b1d2c853094ec0aa11900d705159015
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dayman (0.1.1)
4
+ dayman (0.1.2)
5
5
  activesupport
6
6
  faraday
7
7
 
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ![Dayman](http://screenshots.kevinbongart.net/AiJbs.gif)
4
4
 
5
- Yet another JSON API client, heavily inspired by
5
+ Yet another [JSON API](http://jsonapi.org) client, heavily inspired by
6
6
  [json_api_client](https://github.com/chingor13/json_api_client) and
7
7
  [ActiveRecord](http://api.rubyonrails.org/classes/ActiveRecord/Base.html).
8
8
 
@@ -29,7 +29,7 @@ Or install it yourself as:
29
29
  ```ruby
30
30
  module CoolPetsApi
31
31
  class Base < Dayman::Resource
32
- self.site = "http://coolpets.com"
32
+ API_BASE_URL = "http://coolpets.com"
33
33
  end
34
34
 
35
35
  class CoolDog < Base
data/lib/dayman.rb CHANGED
@@ -3,6 +3,7 @@ require 'active_support/all'
3
3
  require 'faraday'
4
4
 
5
5
  require 'dayman/version'
6
+ require 'dayman/class_finder'
6
7
  require 'dayman/parsers/collection_parser'
7
8
  require 'dayman/parsers/member_parser'
8
9
  require 'dayman/request'
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+ # Finds class according to the resource's context:
3
+ #
4
+ # module Foo
5
+ # class TestResource
6
+ # end
7
+ #
8
+ # module Bar
9
+ # class TestResource
10
+ # end
11
+ # end
12
+ # end
13
+ #
14
+ # Using Dayman to fetch a Foo::Bar::TestResource
15
+ # containing a { type: 'test_resources' } object
16
+ # ClassFinder will look for the first TestResource
17
+ # class starting from Foo::Bar::TestResource's nesting.
18
+ # If Foo::Bar::TestResource did not exist, it would find
19
+ # Foo::TestResource instead.
20
+ #
21
+ class ClassFinder
22
+ MODULE_SEPARATOR = '::'
23
+
24
+ def initialize(resource:, type:)
25
+ @resource = resource
26
+ @type = type
27
+ @klass = nil
28
+ end
29
+
30
+ def find
31
+ namespaces = @resource.name.split(MODULE_SEPARATOR)
32
+
33
+ while @klass.blank? && namespaces.present?
34
+ namespaces.pop
35
+ @klass = (namespaces + [@type.classify]).join(MODULE_SEPARATOR).safe_constantize
36
+ end
37
+
38
+ @klass
39
+ end
40
+ end
@@ -20,7 +20,7 @@ module Dayman
20
20
  def resource_class_for(item)
21
21
  return if item.nil?
22
22
 
23
- item[:type].classify.safe_constantize
23
+ ClassFinder.new(resource: @resource, type: item[:type]).find
24
24
  end
25
25
 
26
26
  def response_item_to_object(item)
@@ -56,6 +56,8 @@ module Dayman
56
56
  end
57
57
 
58
58
  def find_included_item(relationship_item)
59
+ return if parsed_response[:included].blank?
60
+
59
61
  parsed_response[:included].find do |e|
60
62
  e.slice(:id, :type) == relationship_item[:data].slice(:id, :type)
61
63
  end
@@ -42,7 +42,7 @@ module Dayman
42
42
  private
43
43
 
44
44
  def connection
45
- Faraday.new(url: resource.site)
45
+ Faraday.new(url: resource::API_BASE_URL)
46
46
  end
47
47
 
48
48
  def query_parameters
@@ -6,8 +6,6 @@ module Dayman
6
6
  class << self
7
7
  extend Forwardable
8
8
 
9
- attr_accessor :site
10
-
11
9
  def_delegators :request,
12
10
  :all,
13
11
  :fields,
@@ -19,7 +17,7 @@ module Dayman
19
17
  :where
20
18
 
21
19
  def path
22
- name.underscore.pluralize
20
+ name.demodulize.underscore.pluralize
23
21
  end
24
22
 
25
23
  def has_one(relationship_name)
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Dayman
3
- VERSION = '0.1.1'
3
+ VERSION = '0.1.2'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dayman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Bongart
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-01 00:00:00.000000000 Z
11
+ date: 2016-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -172,6 +172,7 @@ files:
172
172
  - circle.yml
173
173
  - dayman.gemspec
174
174
  - lib/dayman.rb
175
+ - lib/dayman/class_finder.rb
175
176
  - lib/dayman/parsers/base.rb
176
177
  - lib/dayman/parsers/collection_parser.rb
177
178
  - lib/dayman/parsers/member_parser.rb