ixtlan-remote 0.1.4 → 0.1.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.
@@ -31,8 +31,9 @@ module Ixtlan
31
31
  @new_method = new_method || @model.method(:new)
32
32
  end
33
33
 
34
- def create_result_objects( result )
35
- root = @model.to_s.sub(/.*::/, '').underscore.singularize
34
+ def create_result_objects( result )
35
+ # naiv singularize english plural
36
+ root = @model.to_s.sub(/.*::/, '').underscore.sub( /s$/, '')
36
37
  if result.is_a? Array
37
38
  result.collect do |r|
38
39
  new_instance( r[root] || r )
@@ -142,4 +143,4 @@ module Ixtlan
142
143
  end
143
144
  end
144
145
  end
145
- end
146
+ end
@@ -1,3 +1,23 @@
1
+ #
2
+ # ixtlan-remote - helper sync data between miniapps or communicate wth realtime
3
+ # rest-services
4
+ # Copyright (C) 2012 Christian Meier
5
+ #
6
+ # This file is part of ixtlan-remote.
7
+ #
8
+ # ixtlan-remote is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU Affero General Public License as
10
+ # published by the Free Software Foundation, either version 3 of the
11
+ # License, or (at your option) any later version.
12
+ #
13
+ # ixtlan-remote is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU Affero General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU Affero General Public License
19
+ # along with ixtlan-remote. If not, see <http://www.gnu.org/licenses/>.
20
+ #
1
21
  require 'ixtlan/remote/model_helpers'
2
22
  module Ixtlan
3
23
  module Remote
@@ -5,48 +25,42 @@ module Ixtlan
5
25
 
6
26
  include ModelHelpers
7
27
 
8
- def initialize(resource, model_map = {})
28
+ def initialize(resource, model, new_method = nil)
9
29
  @base = resource
10
- @map = model_map
30
+ @model = model
31
+ @new_method = new_method || @model.method(:new)
11
32
  end
12
33
 
34
+ def create_result_objects( result )
35
+ root = @model.to_s.sub(/.*::/, '').underscore.singularize
36
+ if result.is_a? Array
37
+ result.collect do |r|
38
+ new_instance( r[root] || r )
39
+ end
40
+ else
41
+ attr = if result.is_a?( Hash ) && result.size == 1
42
+ result[root]
43
+ end
44
+ new_instance( attr || result )
45
+ end
46
+ end
47
+ private :create_result_objects
48
+
13
49
  def send_it(&block)
14
50
  raise "no method given - call any CRUD method first" unless @method
15
51
  headers = {:content_type => :json, :accept => :json}
16
52
  headers[:params] = @params if @params
53
+ p @resource
17
54
  result =
18
- if @payload
19
- @resource.send @method, @payload.to_json, headers, &block
55
+ if @method != :get
56
+ @resource.send( @method, @payload ? @payload.to_json : '', headers, &block )
20
57
  else
21
- @resource.send @method, headers, &block
22
- end
23
- unless result.blank?
24
- result = JSON.load(result)
25
- if @model
26
- root = @map[ @model ].singular || @model_key
27
- if result.is_a? Array
28
- if result.empty?
29
- []
30
- else
31
- root =
32
- if result[ 1 ].is_a?( Hash ) && result[ 1 ].size == 1
33
- root
34
- end
35
- result.collect do |r|
36
- new_instance( @model, r[root] || r )
37
- end
38
- end
39
- else
40
- attr = if result.is_a?( Hash ) && result.size == 1
41
- result[root]
42
- else
43
- result
44
- end
45
- new_instance(@model, attr)
46
- end
47
- else
48
- result
58
+ @resource.send( @method, headers, &block )
49
59
  end
60
+ if result && result.size > 0
61
+ create_result_objects( JSON.load( result ) )
62
+ else
63
+ nil
50
64
  end
51
65
  end
52
66
 
@@ -55,10 +69,15 @@ module Ixtlan
55
69
  self
56
70
  end
57
71
 
58
- # retrieve(Locale) => GET /locales
59
- # retrieve(Locale, 1) => GET /locales/1
60
- # retrieve(:locales) => GET /locales
61
- # retrieve(:locales, 1) => GET /locales/1
72
+ def last(args)
73
+ if args.last.is_a?(Hash)
74
+ args.reverse!
75
+ l = args.shift
76
+ args.reverse!
77
+ l
78
+ end
79
+ end
80
+
62
81
  def retrieve(*args)
63
82
  @method = :get
64
83
  @params = nil
@@ -67,11 +86,9 @@ module Ixtlan
67
86
  self
68
87
  end
69
88
 
70
- # create(locale) => POST /locales
71
- # create(:locale => {:code => 'en'}) => POST /locales
72
89
  def create(*obj_or_hash)
73
90
  @method = :post
74
- @payload = nil#obj_or_hash.is_a?(Class)? nil : obj_or_hash
91
+ @payload = last(obj_or_hash)
75
92
  @params = nil
76
93
  @resource = @base[path(*obj_or_hash)]
77
94
  self
@@ -79,7 +96,7 @@ module Ixtlan
79
96
 
80
97
  def update(*obj_or_hash)
81
98
  @method = :put
82
- @payload = nil#obj_or_hash.is_a?(Class)? nil : obj_or_hash
99
+ @payload = last(obj_or_hash)
83
100
  @params = nil
84
101
  @resource = @base[path(*obj_or_hash)]
85
102
  self
@@ -87,7 +104,7 @@ module Ixtlan
87
104
 
88
105
  def delete(*obj_or_hash)
89
106
  @method = :delete
90
- @payload = nil #obj_or_hash.is_a?(Class)? nil : obj_or_hash
107
+ @payload = last(obj_or_hash)
91
108
  @params = nil
92
109
  @resource = @base[path(*obj_or_hash)]
93
110
  self
@@ -99,54 +116,31 @@ module Ixtlan
99
116
 
100
117
  private
101
118
 
102
- def new_instance( clazz, attributes )
103
- @map[ clazz ].new( attributes )
119
+ def new_instance( attributes )
120
+ @new_method.call( attributes )
104
121
  end
105
122
 
106
123
  def path(*parts)
107
- parts.collect { |p| path_part( p ) }.delete_if { |p| p.nil? } * '/'
108
- end
109
-
110
- def model_set(model)
111
- m = model.singularize.camelize.constantize rescue nil
112
- if m
113
- @model = m
114
- @model_key = model.singularize.underscore
115
- end
124
+ parts.flatten.collect do |part|
125
+ case part
126
+ when Class
127
+ part.to_s.pluralize.underscore
128
+ else
129
+ if part.respond_to? :attributes
130
+ part.class.to_s.pluralize.underscore
131
+ else
132
+ part.to_s
133
+ end
134
+ end
135
+ end * '/'
116
136
  end
117
137
 
118
138
  def path_part(data)
119
- model = to_model_underscore(data)
120
- case data
121
- when Hash
122
- @payload = data
123
- if model_set(model)
124
- model = model.pluralize
125
- else
126
- model = nil
127
- end
128
- when Array
129
- @payload = data
130
- if model_set model
131
- model = model.pluralize
132
- end
133
- when String
134
- model_set model
135
- when Fixnum
136
- model = data.to_s
137
- when Symbol
138
- model_set model
139
- when Class
140
- model_set model
141
- model = @map.member?( model ) ? @map[ model ].path : model.pluralize
142
- else
143
- @payload = data
144
- model_set model
145
- model = model.pluralize
139
+ unless data.is_a?(Hash)
140
+ data = [data] unless data.is_a?(Array)
141
+ data.collect { |d| d.to_s }.join("/")
146
142
  end
147
- model.underscore if model
148
143
  end
149
-
150
144
  end
151
145
  end
152
146
  end
@@ -19,7 +19,6 @@
19
19
  # along with ixtlan-remote. If not, see <http://www.gnu.org/licenses/>.
20
20
  #
21
21
  require 'ixtlan/remote/summary'
22
- require 'active_support/all'
23
22
 
24
23
  module Ixtlan
25
24
  module Remote
@@ -43,18 +42,18 @@ module Ixtlan
43
42
  # max method ORM dependent
44
43
  if defined? ActiveRecord
45
44
  def max(clazz)
46
- (clazz.maximum(:updated_at) || DateTime.new(0)).to_datetime
45
+ ( clazz.maximum( :updated_at ) || DateTime.new( 1 ) ).to_datetime
47
46
  end
48
47
  else
49
48
  def max(clazz)
50
- clazz.max(:updated_at)
49
+ clazz.max(:updated_at) || DateTime.new( 1 )
51
50
  end
52
51
  end
53
52
  private :max
54
53
 
55
54
  # UTC timestamp of last updated record
56
55
  def last_update( clazz )
57
- last_date = ( max( clazz ) || DateTime.new( 0 ) )
56
+ last_date = max( clazz )
58
57
  last_date.strftime( '%Y-%m-%d %H:%M:%S.' ) + ( "%06d" % ( last_date.sec_fraction / NANOSECONDS_IN_DAY / 1000 ) ) + "+0:00"
59
58
  end
60
59
  private :last_update
@@ -101,4 +100,4 @@ module Ixtlan
101
100
  alias :to_s :to_log
102
101
  end
103
102
  end
104
- end
103
+ end
@@ -1,5 +1,4 @@
1
1
  # -*- Coding: utf-8 -*-
2
- require 'ixtlan/user_management/user_model'
3
2
  require 'ixtlan/user_management/user_serializer'
4
3
  require 'ixtlan/user_management/session_model'
5
4
  require 'ixtlan/user_management/session_serializer'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ixtlan-remote
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 4
10
- version: 0.1.4
9
+ - 5
10
+ version: 0.1.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Christian Meier
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2013-01-01 00:00:00 Z
18
+ date: 2013-01-16 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rest-client