bodhi-slam 0.5.2 → 0.5.3

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: ae5feb37bac90c1ac538d316c0fb7d2ecc7b18f8
4
- data.tar.gz: dc1850ef0aae5d42a869be2c3dce98e4c8fdb288
3
+ metadata.gz: d37d15d216eee1331997b6c36c8354c96f2a5cc8
4
+ data.tar.gz: 1f718df6ea9586e6af5f3b24c82b3d3a7a54af7a
5
5
  SHA512:
6
- metadata.gz: 4540be38c57de2cf525f0de62f2abb1b52076b3ed4b71edc54bc0be28211df974c99032dc2a783dc909ba3206f3bf65cee515829b2ab815e6de342d085941ce9
7
- data.tar.gz: db46ee061a66b8b24e63fbfefcd30c709a92b2ed1a98c6c5932d91054d9b169bce7b5ba3701e48d23c11f65e038f0f0e1b3ef614e4d3039a4231bab674e35d49
6
+ metadata.gz: 9dd80e02c44454dbb8abf5d813578186e4492fb43fe4bd76ddf60fff63e76f0674689d0cdbe301e5e77c3233ecff49d9a66eac3604eb53b5e73030bb562319ad
7
+ data.tar.gz: a1d883d59e1f0aae13bb8cdff2f86dfa8e30a4891d4bb4f5f872cd169b4de42fad77ae62b9a8627f7cc60a9535ec0d8eb29625c30102733dfcad13cd8c1d2835
data/lib/bodhi-slam.rb CHANGED
@@ -1,15 +1,11 @@
1
+ require "json"
2
+ require "time"
1
3
  require 'faraday'
2
4
  require 'faraday_middleware'
3
5
  require 'net/http/persistent'
4
-
5
- require "json"
6
- require "time"
7
- require "SecureRandom"
8
6
  require 'regexp-examples'
9
- require 'active_model'
10
7
 
11
8
  require 'bodhi-slam/support'
12
-
13
9
  require 'bodhi-slam/validations'
14
10
  require 'bodhi-slam/errors'
15
11
  require 'bodhi-slam/context'
@@ -42,11 +38,41 @@ class BodhiSlam
42
38
  yield bodhi_context
43
39
  end
44
40
 
41
+ def self.define_resources(context, options={})
42
+ # symbolize keys for the options hash
43
+ options = options.reduce({}) do |memo, (k, v)|
44
+ memo.merge({ k.to_sym => v})
45
+ end
46
+
47
+ if context.invalid?
48
+ raise Bodhi::ContextErrors.new(context.errors.messages), context.errors.to_a.to_s
49
+ end
50
+
51
+ enumerations = Bodhi::Enumeration.find_all(context)
52
+
53
+ if options[:include].is_a? Array
54
+ types = Bodhi::Type.where("{name: { $in: #{options[:include].map(&:to_s)} }}").from(context).all
55
+ elsif options[:except].is_a? Array
56
+ types = Bodhi::Type.where("{name: { $nin: #{options[:except].map(&:to_s)} }}").from(context).all
57
+ else
58
+ types = Bodhi::Type.find_all(context)
59
+ end
60
+
61
+ types.collect do |type|
62
+ begin
63
+ Bodhi::Type.create_class_with(type)
64
+ rescue Exception => error
65
+ puts "WARNING: Unable to create class for #{type.name}. The following error was encountered: #{error}"
66
+ end
67
+ end
68
+ end
69
+
45
70
  # Dynamically creates Ruby Classes for each type in the given +context+
46
71
  #
47
72
  # context = Bodhi::Context.new(valid_params)
48
73
  # BodhiSlam.analyze(context) # => [#<Class:0x007fbff403e808 @name="TestType">, #<Class:0x007fbff403e808 @name="TestType2">, ...]
49
74
  def self.analyze(context)
75
+ puts "WARNING: The method BodhiSlam.analyze(context) has been depreciated and will be removed by version 1.0"
50
76
  if context.invalid?
51
77
  raise Bodhi::ContextErrors.new(context.errors.messages), context.errors.to_a.to_s
52
78
  end
@@ -1,8 +1,9 @@
1
1
  module Bodhi
2
2
  class Query
3
- attr_reader :klass, :url, :context, :criteria, :fields, :paging, :sorting
3
+ attr_reader :klass, :controller, :url, :context, :criteria, :fields, :paging, :sorting
4
4
 
5
- def initialize(klass)
5
+ def initialize(klass, controller="resources")
6
+ @controller = controller
6
7
  @klass = Object.const_get(klass.to_s)
7
8
  @criteria = []
8
9
  @fields = []
@@ -20,9 +21,13 @@ module Bodhi
20
21
 
21
22
  def url
22
23
  unless context.nil?
23
- query = "/#{context.namespace}/resources/#{klass}?"
24
+ if @controller == "resources"
25
+ query = "/#{context.namespace}/#{controller}/#{klass}?"
26
+ else
27
+ query = "/#{context.namespace}/#{controller}?"
28
+ end
24
29
  else
25
- query = "/resources/#{klass}?"
30
+ query = "/#{controller}/#{klass}?"
26
31
  end
27
32
  params = []
28
33
 
@@ -69,7 +74,7 @@ module Bodhi
69
74
  end
70
75
 
71
76
  query << params.join('&')
72
- query.gsub(/\s+/, "")
77
+ #query.gsub(/\s+/, "")
73
78
  end
74
79
 
75
80
  def all
@@ -90,7 +95,7 @@ module Bodhi
90
95
  raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
91
96
  end
92
97
 
93
- result.body.map{ |attributes| klass.new(attributes) }
98
+ result.body.map{ |attributes| klass.new(attributes.merge(bodhi_context: context)) }
94
99
  end
95
100
 
96
101
  def first
@@ -111,7 +116,7 @@ module Bodhi
111
116
  raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
112
117
  end
113
118
 
114
- result.body.map{ |attributes| klass.new(attributes) }.first
119
+ result.body.map{ |attributes| klass.new(attributes.merge(bodhi_context: context)) }.first
115
120
  end
116
121
 
117
122
  def last
@@ -132,7 +137,7 @@ module Bodhi
132
137
  raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
133
138
  end
134
139
 
135
- result.body.map{ |attributes| klass.new(attributes) }.last
140
+ result.body.map{ |attributes| klass.new(attributes.merge(bodhi_context: context)) }.last
136
141
  end
137
142
 
138
143
  def from(context)
@@ -366,7 +366,7 @@ module Bodhi
366
366
 
367
367
  def self.included(base)
368
368
  base.extend(ClassMethods)
369
- base.include(InstanceMethods, Bodhi::Validations, Bodhi::Properties, Bodhi::Indexes, Bodhi::Factories, ActiveModel::Model)
369
+ base.include(InstanceMethods, Bodhi::Validations, Bodhi::Properties, Bodhi::Indexes, Bodhi::Factories)
370
370
  base.instance_variable_set(:@embedded, false)
371
371
  end
372
372
  end
@@ -139,6 +139,12 @@ module Bodhi
139
139
  end
140
140
  end
141
141
 
142
+ def self.where(query)
143
+ query_obj = Bodhi::Query.new(Bodhi::Type, "types")
144
+ query_obj.where(query)
145
+ query_obj
146
+ end
147
+
142
148
  # Dynamically defines a new Ruby class for the given +type+
143
149
  # Class validations, factory, and helper methods will also be added
144
150
  #
@@ -164,9 +170,7 @@ module Bodhi
164
170
  attr_properties.delete_if{ |key, value| [:trim, :unique, :default, :isCurrentUser, :toLower].include?(key) }
165
171
 
166
172
  # Do not add factories or validations for system properties
167
- if attr_properties[:system] == true
168
- klass.property attr_name
169
- else
173
+ unless attr_properties[:system] == true
170
174
  klass.field(attr_name, attr_properties)
171
175
  end
172
176
  end
@@ -88,6 +88,34 @@ module Bodhi
88
88
  end
89
89
  end
90
90
 
91
+ def update!(options)
92
+ update_attributes(options)
93
+
94
+ result = bodhi_context.connection.put do |request|
95
+ request.url "/#{bodhi_context.namespace}/users/#{username}"
96
+ request.headers['Content-Type'] = 'application/json'
97
+ request.headers[bodhi_context.credentials_header] = bodhi_context.credentials
98
+ request.body = attributes.to_json
99
+ end
100
+
101
+ if result.status != 204
102
+ raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
103
+ end
104
+ end
105
+
106
+ def patch!(options)
107
+ result = bodhi_context.connection.patch do |request|
108
+ request.url "/#{bodhi_context.namespace}/users/#{username}"
109
+ request.headers['Content-Type'] = 'application/json'
110
+ request.headers[bodhi_context.credentials_header] = bodhi_context.credentials
111
+ request.body = options.to_json
112
+ end
113
+
114
+ if result.status != 204
115
+ raise Bodhi::ApiErrors.new(body: result.body, status: result.status), "status: #{result.status}, body: #{result.body}"
116
+ end
117
+ end
118
+
91
119
  def delete!
92
120
  result = bodhi_context.connection.delete do |request|
93
121
  request.url "/#{bodhi_context.namespace}/users/#{username}"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bodhi-slam
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - willdavis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-19 00:00:00.000000000 Z
11
+ date: 2015-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.1'
83
- - !ruby/object:Gem::Dependency
84
- name: activemodel
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '4.2'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '4.2'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: rspec
99
85
  requirement: !ruby/object:Gem::Requirement