logical_model 0.2.10 → 0.2.11
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.
- data/README.rdoc +1 -1
- data/VERSION +1 -1
- data/lib/logical_model.rb +92 -6
- data/logical_model.gemspec +2 -2
- data/spec/client_spec.rb +93 -15
- data/test/typhoeus_mocks.rb +38 -0
- metadata +35 -35
data/README.rdoc
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.11
|
data/lib/logical_model.rb
CHANGED
@@ -62,12 +62,15 @@ class LogicalModel
|
|
62
62
|
DEFAULT_TIMEOUT = 10000
|
63
63
|
|
64
64
|
class << self
|
65
|
-
attr_accessor :host, :hydra, :resource_path, :api_key, :api_key_name, :timeout,
|
65
|
+
attr_accessor :host, :hydra, :resource_path, :api_key, :api_key_name, :timeout,
|
66
|
+
:use_ssl, :use_api_key, :enable_delete_multiple,
|
67
|
+
:json_root, :log_path
|
66
68
|
|
67
69
|
def timeout; @timeout ||= DEFAULT_TIMEOUT; end
|
68
70
|
def use_ssl; @use_ssl ||= false; end
|
69
71
|
def log_path; @log_path ||= "log/logical_model.log"; end
|
70
72
|
def use_api_key; @use_api_key ||= false; end
|
73
|
+
def delete_multiple_enabled?; @enable_delete_multiple ||= false; end
|
71
74
|
|
72
75
|
def validates_associated(*associations)
|
73
76
|
associations.each do |association|
|
@@ -249,8 +252,8 @@ class LogicalModel
|
|
249
252
|
# Usage:
|
250
253
|
# Person.async_paginate(:page => params[:page]){|i| result = i}
|
251
254
|
def self.async_paginate(options={})
|
252
|
-
|
253
|
-
|
255
|
+
options[:page] ||= 1
|
256
|
+
options[:per_page] ||= 20
|
254
257
|
|
255
258
|
options = self.merge_key(options)
|
256
259
|
|
@@ -266,8 +269,8 @@ class LogicalModel
|
|
266
269
|
result_set[:collection],
|
267
270
|
{
|
268
271
|
:total_count=>result_set[:total],
|
269
|
-
:limit => per_page,
|
270
|
-
:offset => per_page * ([page, 1].max - 1)
|
272
|
+
:limit => options[:per_page],
|
273
|
+
:offset => options[:per_page] * ([options[:page], 1].max - 1)
|
271
274
|
}
|
272
275
|
)
|
273
276
|
|
@@ -292,6 +295,52 @@ class LogicalModel
|
|
292
295
|
return nil
|
293
296
|
end
|
294
297
|
|
298
|
+
# Asynchronic Count
|
299
|
+
# This count won't block excecution waiting for result, count will be enqueued in Objectr#hydra.
|
300
|
+
#
|
301
|
+
# Parameters:
|
302
|
+
# @param options [Hash].
|
303
|
+
# Valid options are:
|
304
|
+
# @option options [Integer] :page - indicated what page to return. Defaults to 1.
|
305
|
+
# @option options [Integer] :per_page - indicates how many records to be returned per page. Defauls to 20
|
306
|
+
# @option options [Hash] all other options will be forwarded in :params to WebService
|
307
|
+
#
|
308
|
+
# @example 'Count bobs'
|
309
|
+
# Person.async_count(:when => {:name => 'bob'}}){|i| result = i}
|
310
|
+
def self.async_count(options={})
|
311
|
+
options[:page] = 1
|
312
|
+
options[:per_page] = 1
|
313
|
+
|
314
|
+
options = self.merge_key(options)
|
315
|
+
|
316
|
+
request = Typhoeus::Request.new(resource_uri, :params => options)
|
317
|
+
request.on_complete do |response|
|
318
|
+
if response.code >= 200 && response.code < 400
|
319
|
+
log_ok(response)
|
320
|
+
|
321
|
+
result_set = self.from_json(response.body)
|
322
|
+
|
323
|
+
yield result_set[:total]
|
324
|
+
else
|
325
|
+
log_failed(response)
|
326
|
+
end
|
327
|
+
end
|
328
|
+
self.hydra.queue(request)
|
329
|
+
end
|
330
|
+
|
331
|
+
# synchronic count
|
332
|
+
def self.count(options={})
|
333
|
+
result = nil
|
334
|
+
async_count(options){|i| result = i}
|
335
|
+
Timeout::timeout(self.timeout/1000) do
|
336
|
+
self.hydra.run
|
337
|
+
end
|
338
|
+
result
|
339
|
+
rescue Timeout::Error
|
340
|
+
self.logger.warn("timeout")
|
341
|
+
return nil
|
342
|
+
end
|
343
|
+
|
295
344
|
# Asynchronic Find
|
296
345
|
# This find won't block excecution waiting for result, excecution will be enqueued in Objectr#hydra.
|
297
346
|
#
|
@@ -471,7 +520,7 @@ class LogicalModel
|
|
471
520
|
:timeout => self.timeout
|
472
521
|
)
|
473
522
|
end
|
474
|
-
if response == 200
|
523
|
+
if response.code == 200
|
475
524
|
log_ok(response)
|
476
525
|
return self
|
477
526
|
else
|
@@ -491,10 +540,47 @@ class LogicalModel
|
|
491
540
|
self.class.delete(self.id,params)
|
492
541
|
end
|
493
542
|
|
543
|
+
# Deletes all Objects matching given ids
|
544
|
+
#
|
545
|
+
# This method will make a DELETE request to resource_uri/destroy_multiple
|
546
|
+
#
|
547
|
+
# Returns nil if delete failed
|
548
|
+
#
|
549
|
+
# @param [Array] ids - ids of contacts to be deleted
|
550
|
+
# @param [Hash] params - other params to be sent to WS on request
|
551
|
+
#
|
552
|
+
# Usage:
|
553
|
+
# Person.delete_multiple([1,2,4,5,6])
|
554
|
+
def self.delete_multiple(ids, params={})
|
555
|
+
raise "not-enabled" unless self.delete_multiple_enabled?
|
556
|
+
|
557
|
+
params = self.merge_key(params)
|
558
|
+
params = params.merge({:ids => ids})
|
559
|
+
|
560
|
+
response = nil
|
561
|
+
Timeout::timeout(self.timeout/1000) do
|
562
|
+
response = Typhoeus::Request.delete( self.resource_uri+"/destroy_multiple",
|
563
|
+
:params => params,
|
564
|
+
:timeout => self.timeout
|
565
|
+
)
|
566
|
+
end
|
567
|
+
if response.code == 200
|
568
|
+
log_ok(response)
|
569
|
+
return self
|
570
|
+
else
|
571
|
+
log_failed(response)
|
572
|
+
return nil
|
573
|
+
end
|
574
|
+
rescue Timeout::Error
|
575
|
+
self.logger.warn "timeout"
|
576
|
+
return nil
|
577
|
+
end
|
578
|
+
|
494
579
|
def persisted?
|
495
580
|
false
|
496
581
|
end
|
497
582
|
|
583
|
+
|
498
584
|
# Returns true if a record has not been persisted yet.
|
499
585
|
#
|
500
586
|
# Usage:
|
data/logical_model.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "logical_model"
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.11"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Dwayne Macgowan"]
|
12
|
-
s.date = "2012-01-
|
12
|
+
s.date = "2012-01-17"
|
13
13
|
s.description = "LogicalModel allows to use a resource as a model. It is based on web presentation http://www.slideshare.net/ihower/serviceoriented-design-and-implement-with-rails3"
|
14
14
|
s.email = "dwaynemac@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
data/spec/client_spec.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../client'
|
2
2
|
|
3
|
+
require File.dirname(__FILE__) + '/../test/typhoeus_mocks.rb'
|
4
|
+
include TyphoeusMocks
|
5
|
+
|
3
6
|
# NOTE: to run these specs you must have the service running locally. Do like this:
|
4
7
|
# ruby service.rb -p 3000 -e test
|
5
8
|
|
@@ -10,6 +13,7 @@ describe "LogicalModel User client" do
|
|
10
13
|
describe "#create" do
|
11
14
|
context "with valid attributes" do
|
12
15
|
before(:each) do
|
16
|
+
# TODO mock service
|
13
17
|
@user = User.new({:name => "paul",
|
14
18
|
:email => "paul@pauldix.net",
|
15
19
|
:password => "strongpass",
|
@@ -31,21 +35,12 @@ describe "LogicalModel User client" do
|
|
31
35
|
|
32
36
|
describe "#paginate" do
|
33
37
|
before do
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
collection: [{name:'a',email:'a@m'},
|
40
|
-
{name:'b',email:'b@m'},
|
41
|
-
{name:'c',email:'c@m'}],
|
42
|
-
total: 6
|
43
|
-
}.to_json,
|
44
|
-
request: mock(url:"mockedurl"),
|
45
|
-
time: 1234
|
38
|
+
mock_index(
|
39
|
+
collection: [{name:'a',email:'a@m'},
|
40
|
+
{name:'b',email:'b@m'},
|
41
|
+
{name:'c',email:'c@m'}],
|
42
|
+
total: 6
|
46
43
|
)
|
47
|
-
req.stub(:on_complete).and_yield(response)
|
48
|
-
# <-- service mocked
|
49
44
|
|
50
45
|
@users = User.paginate(page:1, per_page:1)
|
51
46
|
end
|
@@ -56,7 +51,44 @@ describe "LogicalModel User client" do
|
|
56
51
|
@users.total_count.should == 6
|
57
52
|
end
|
58
53
|
end
|
59
|
-
|
54
|
+
|
55
|
+
describe "#count" do
|
56
|
+
before do
|
57
|
+
mock_index(
|
58
|
+
total: 6
|
59
|
+
)
|
60
|
+
end
|
61
|
+
let(:count){User.count}
|
62
|
+
it "should return a Integer" do
|
63
|
+
count.should be_a(Integer)
|
64
|
+
end
|
65
|
+
it "should return total amount of users" do
|
66
|
+
count.should == 6
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "#find" do
|
71
|
+
context "if found" do
|
72
|
+
before do
|
73
|
+
mock_show(
|
74
|
+
attributes: {
|
75
|
+
id: 1,
|
76
|
+
name: 'mocked-username',
|
77
|
+
email: 'mocked@mail',
|
78
|
+
password: '1234',
|
79
|
+
bio: 'asdfasdf'
|
80
|
+
}
|
81
|
+
)
|
82
|
+
|
83
|
+
@user = User.find(1)
|
84
|
+
end
|
85
|
+
it "should set attributes" do
|
86
|
+
@user.id.should == 1
|
87
|
+
@user.email.should == "mocked@mail"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
60
92
|
describe "#https" do
|
61
93
|
context "when use_ssl is tue" do
|
62
94
|
before(:each) do
|
@@ -76,4 +108,50 @@ describe "LogicalModel User client" do
|
|
76
108
|
end
|
77
109
|
end
|
78
110
|
end
|
111
|
+
|
112
|
+
describe "delete_multiple" do
|
113
|
+
before do
|
114
|
+
Typhoeus::Request.stub!(:delete).and_return(mock_response(body: 'ok'))
|
115
|
+
end
|
116
|
+
context "when disabled" do
|
117
|
+
it "should raise exception" do
|
118
|
+
class User < LogicalModel; self.enable_delete_multiple = false; end
|
119
|
+
expect{User.delete_multiple([1,2,4,5])}.to raise_error
|
120
|
+
end
|
121
|
+
end
|
122
|
+
context "when enabled" do
|
123
|
+
it "should raise exception" do
|
124
|
+
class User < LogicalModel; self.enable_delete_multiple = true; end
|
125
|
+
expect{User.delete_multiple([1,2,4,5])}.not_to raise_error
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
describe "#delete_multiple_enabled?" do
|
131
|
+
context "with config: 'enable_multiple_delete = true'" do
|
132
|
+
before do
|
133
|
+
class User < LogicalModel
|
134
|
+
self.enable_delete_multiple = true
|
135
|
+
end
|
136
|
+
end
|
137
|
+
it "should return true" do
|
138
|
+
User.delete_multiple_enabled?.should be_true
|
139
|
+
end
|
140
|
+
end
|
141
|
+
context "with config: 'enable_delete_multiple = false'" do
|
142
|
+
it "should return false" do
|
143
|
+
class User < LogicalModel
|
144
|
+
self.enable_delete_multiple = false
|
145
|
+
end
|
146
|
+
User.delete_multiple_enabled?.should be_false
|
147
|
+
end
|
148
|
+
end
|
149
|
+
context "without config" do
|
150
|
+
it "should default to false" do
|
151
|
+
class AnotherClass < LogicalModel
|
152
|
+
end
|
153
|
+
AnotherClass.delete_multiple_enabled?.should be_false
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
79
157
|
end
|
data/test/typhoeus_mocks.rb
CHANGED
@@ -1,5 +1,43 @@
|
|
1
1
|
module TyphoeusMocks
|
2
2
|
|
3
|
+
# This stubs response of GET /resource
|
4
|
+
#
|
5
|
+
# @param [Hash] options
|
6
|
+
# @option options [Array<Hash>] :collection
|
7
|
+
# @option options [Integer] :total
|
8
|
+
# @option options [String] :url
|
9
|
+
# @option options [Integer] :status - HTTP status
|
10
|
+
def mock_index(options={})
|
11
|
+
req = Typhoeus::Request.any_instance
|
12
|
+
response = mock(
|
13
|
+
code: options[:status] || 200,
|
14
|
+
body: {
|
15
|
+
collection: options[:collection] || [],
|
16
|
+
total: options[:total] || 0
|
17
|
+
}.to_json,
|
18
|
+
request: mock(url: options[:url] || "mockedurl"),
|
19
|
+
time: 1234
|
20
|
+
)
|
21
|
+
req.stub(:on_complete).and_yield(response)
|
22
|
+
end
|
23
|
+
|
24
|
+
# This stubs response of GET /resource/:id
|
25
|
+
#
|
26
|
+
# @param [Hash] options
|
27
|
+
# @option options [Array<Hash>] :attributes
|
28
|
+
# @option options [String] :url
|
29
|
+
# @option options [Integer] :status - HTTP status
|
30
|
+
def mock_show(options={})
|
31
|
+
req = Typhoeus::Request.any_instance
|
32
|
+
response = mock(
|
33
|
+
code: options[:status] || 200,
|
34
|
+
body: options[:attributes].to_json,
|
35
|
+
request: mock(url: options[:url] || "mockedurl"),
|
36
|
+
time: 1234
|
37
|
+
)
|
38
|
+
req.stub(:on_complete).and_yield(response)
|
39
|
+
end
|
40
|
+
|
3
41
|
# Mocks a Typhoeus::Response
|
4
42
|
# @param [Hash] options
|
5
43
|
# @option [Integer] code - http response code. default: 200
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logical_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.11
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-17 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
16
|
-
requirement: &
|
16
|
+
requirement: &79777970 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *79777970
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activesupport
|
27
|
-
requirement: &
|
27
|
+
requirement: &79777350 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *79777350
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: typhoeus
|
38
|
-
requirement: &
|
38
|
+
requirement: &79776880 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.2.4
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *79776880
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: kaminari
|
49
|
-
requirement: &
|
49
|
+
requirement: &79776350 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.13.0
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *79776350
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: activerecord
|
60
|
-
requirement: &
|
60
|
+
requirement: &79775710 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *79775710
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: shoulda
|
71
|
-
requirement: &
|
71
|
+
requirement: &79774980 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *79774980
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: bundler
|
82
|
-
requirement: &
|
82
|
+
requirement: &79774320 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.0.10
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *79774320
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: jeweler
|
93
|
-
requirement: &
|
93
|
+
requirement: &79773570 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 1.6.4
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *79773570
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: rcov
|
104
|
-
requirement: &
|
104
|
+
requirement: &79772870 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *79772870
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: sqlite3-ruby
|
115
|
-
requirement: &
|
115
|
+
requirement: &79743610 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *79743610
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: sinatra
|
126
|
-
requirement: &
|
126
|
+
requirement: &79742900 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ~>
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
version: 1.2.6
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *79742900
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: json
|
137
|
-
requirement: &
|
137
|
+
requirement: &79741620 !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
140
140
|
- - ! '>='
|
@@ -142,10 +142,10 @@ dependencies:
|
|
142
142
|
version: '0'
|
143
143
|
type: :development
|
144
144
|
prerelease: false
|
145
|
-
version_requirements: *
|
145
|
+
version_requirements: *79741620
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: rspec-rails
|
148
|
-
requirement: &
|
148
|
+
requirement: &79740370 !ruby/object:Gem::Requirement
|
149
149
|
none: false
|
150
150
|
requirements:
|
151
151
|
- - ! '>='
|
@@ -153,10 +153,10 @@ dependencies:
|
|
153
153
|
version: '0'
|
154
154
|
type: :development
|
155
155
|
prerelease: false
|
156
|
-
version_requirements: *
|
156
|
+
version_requirements: *79740370
|
157
157
|
- !ruby/object:Gem::Dependency
|
158
158
|
name: guard-rspec
|
159
|
-
requirement: &
|
159
|
+
requirement: &79739390 !ruby/object:Gem::Requirement
|
160
160
|
none: false
|
161
161
|
requirements:
|
162
162
|
- - ! '>='
|
@@ -164,10 +164,10 @@ dependencies:
|
|
164
164
|
version: '0'
|
165
165
|
type: :development
|
166
166
|
prerelease: false
|
167
|
-
version_requirements: *
|
167
|
+
version_requirements: *79739390
|
168
168
|
- !ruby/object:Gem::Dependency
|
169
169
|
name: rb-inotify
|
170
|
-
requirement: &
|
170
|
+
requirement: &79738470 !ruby/object:Gem::Requirement
|
171
171
|
none: false
|
172
172
|
requirements:
|
173
173
|
- - ! '>='
|
@@ -175,10 +175,10 @@ dependencies:
|
|
175
175
|
version: '0'
|
176
176
|
type: :development
|
177
177
|
prerelease: false
|
178
|
-
version_requirements: *
|
178
|
+
version_requirements: *79738470
|
179
179
|
- !ruby/object:Gem::Dependency
|
180
180
|
name: libnotify
|
181
|
-
requirement: &
|
181
|
+
requirement: &79737780 !ruby/object:Gem::Requirement
|
182
182
|
none: false
|
183
183
|
requirements:
|
184
184
|
- - ! '>='
|
@@ -186,7 +186,7 @@ dependencies:
|
|
186
186
|
version: '0'
|
187
187
|
type: :development
|
188
188
|
prerelease: false
|
189
|
-
version_requirements: *
|
189
|
+
version_requirements: *79737780
|
190
190
|
description: LogicalModel allows to use a resource as a model. It is based on web
|
191
191
|
presentation http://www.slideshare.net/ihower/serviceoriented-design-and-implement-with-rails3
|
192
192
|
email: dwaynemac@gmail.com
|
@@ -234,7 +234,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
234
234
|
version: '0'
|
235
235
|
segments:
|
236
236
|
- 0
|
237
|
-
hash:
|
237
|
+
hash: 788754387
|
238
238
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
239
239
|
none: false
|
240
240
|
requirements:
|