dayman 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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