Class: Feathr::Api::FeathrEndpoint

Inherits:
Object
  • Object
show all
Defined in:
lib/feathr/api/feathr_endpoint.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client: Feathr::Client.default, prepended_path: '') ⇒ FeathrEndpoint

Returns a new instance of FeathrEndpoint.



7
8
9
10
# File 'lib/feathr/api/feathr_endpoint.rb', line 7

def initialize(client: Feathr::Client.default, prepended_path: '')
  @client         = client
  @prepended_path = prepended_path
end

Instance Attribute Details

#clientObject

Returns the value of attribute client.



5
6
7
# File 'lib/feathr/api/feathr_endpoint.rb', line 5

def client
  @client
end

#prepended_pathObject

Returns the value of attribute prepended_path.



5
6
7
# File 'lib/feathr/api/feathr_endpoint.rb', line 5

def prepended_path
  @prepended_path
end

Class Method Details

.api_path(path) ⇒ Object



13
14
15
16
17
18
19
20
# File 'lib/feathr/api/feathr_endpoint.rb', line 13

def api_path(path)
  define_method(:api_path) do
    [
      prepended_path,
      path.gsub(/\/?$/, '/')
    ].join('/').gsub(/^\//,'')
  end
end

.define_allObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/feathr/api/feathr_endpoint.rb', line 34

def define_all
  define_method(:all) do
    client.request(method: :get, path: api_path) do |data|
      data.map do |resource|
        if feathr_object == Feathr::Api::Membership
          feathr_object.new(resource)
        else
          id = resource["url"][/\/(\d*)\/$/, 1]
          feathr_object.new(resource, id)
        end
      end
    end
  end

  define_method(:first) do |count=1|
    count > 1 ? all.first(count) : all.first
  end

  define_method(:last) do |count=1|
    count > 1 ? all.last(count) : all.last
  end
end

.define_createObject



70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/feathr/api/feathr_endpoint.rb', line 70

def define_create
  define_method(:create) do |query|
    client.request(method: :post, path: api_path, query: query) do |data|
      if feathr_object == Feathr::Api::Membership
        feathr_object.new(data)
      else
        id = data["url"][/\/(\d*)\/$/, 1]
        feathr_object.new(data, id)
      end
    end
  end
end

.define_destroyObject



98
99
100
101
102
103
104
105
# File 'lib/feathr/api/feathr_endpoint.rb', line 98

def define_destroy
  define_method(:destroy) do |id|
    path = "#{ api_path }#{ id }/"
    client.request(method: :delete, path: path) do |data|
      data
    end
  end
end

.define_findObject



57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/feathr/api/feathr_endpoint.rb', line 57

def define_find
  define_method(:find) do |id|
    path = "#{ api_path }#{ id }/"
    client.request(method: :get, path: path) do |data|
      if feathr_object == Feathr::Api::Membership
        feathr_object.new(data)
      else
        feathr_object.new(data, id)
      end
    end
  end
end

.define_updateObject



83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/feathr/api/feathr_endpoint.rb', line 83

def define_update
  define_method(:update) do |id, query|
    path = "#{ api_path }#{ id }/"
    client.request(method: :patch, path: path, query: query) do |data|
      if feathr_object == Feathr::Api::Membership
        feathr_object.new(data)
      else
        id = data["url"][/\/(\d*)\/$/, 1]
        feathr_object.new(data, id)
      end

    end
  end
end

.feathr_endpoints(*endpoints) ⇒ Object



28
29
30
31
32
# File 'lib/feathr/api/feathr_endpoint.rb', line 28

def feathr_endpoints(*endpoints)
  endpoints.each do |name|
    self.send("define_#{ name }")
  end
end

.feathr_object(klass) ⇒ Object



22
23
24
25
26
# File 'lib/feathr/api/feathr_endpoint.rb', line 22

def feathr_object(klass)
  define_method(:feathr_object) do
    klass
  end
end