parse_resource 1.6.2 → 1.6.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +26 -26
- data/VERSION +1 -1
- data/lib/base.rb +25 -2
- data/lib/parse_resource.rb +1 -0
- data/lib/parse_user.rb +15 -0
- data/lib/query.rb +1 -1
- data/parse_resource.gemspec +3 -2
- data/rdoc/ParseResource.html +1 -3
- data/rdoc/created.rid +5 -6
- data/rdoc/index.html +15 -13
- data/rdoc/lib/parse_resource_rb.html +3 -3
- data/test/test_parse_resource.rb +2 -0
- metadata +24 -23
data/README.md
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
-
ParseResource
|
1
|
+
ParseResource
|
2
2
|
=============
|
3
3
|
|
4
4
|
ParseResource makes it easy to interact with Parse.com's REST API. It adheres to the ActiveRecord pattern. ParceResource is fully ActiveModel compliant, meaning you can use validations and Rails forms.
|
5
5
|
|
6
6
|
Ruby/Rails developers should feel right at home.
|
7
7
|
|
8
|
+
If you're used to `Post.create(:title => "Hello, world", :author => "Octocat")`, then this is for you.
|
9
|
+
|
8
10
|
Features
|
9
11
|
---------------
|
10
12
|
* ActiveRecord-like API, almost no learning curve
|
@@ -17,26 +19,6 @@ Use cases
|
|
17
19
|
* Use the same database for your web and native apps
|
18
20
|
* Pre-collect data for use in iOS and Android apps
|
19
21
|
|
20
|
-
To-do
|
21
|
-
--------------
|
22
|
-
* User authentication
|
23
|
-
* Better documentation
|
24
|
-
* Associations
|
25
|
-
* Callbacks
|
26
|
-
* Push notifications
|
27
|
-
* Better type-casting
|
28
|
-
|
29
|
-
User authentication is my top priority feature. Several people have specifically requested it, and Parse just began exposing [`User` objects in the REST API](https://www.parse.com/docs/rest#users).
|
30
|
-
|
31
|
-
Let me know of any other features you want.
|
32
|
-
|
33
|
-
|
34
|
-
Words of caution
|
35
|
-
---------------
|
36
|
-
|
37
|
-
ParseResource is brand new. Test coverage is decent.
|
38
|
-
|
39
|
-
This is my first gem. Be afraid.
|
40
22
|
|
41
23
|
Installation
|
42
24
|
------------
|
@@ -44,7 +26,7 @@ Installation
|
|
44
26
|
Include in your `Gemfile`:
|
45
27
|
|
46
28
|
```ruby
|
47
|
-
gem "parse_resource", "~> 1.6.
|
29
|
+
gem "parse_resource", "~> 1.6.2"
|
48
30
|
```
|
49
31
|
|
50
32
|
Or just gem install:
|
@@ -142,20 +124,38 @@ posts.map {|p| p.title} #=> ["Unpaid blogger", "Uncrunched"]
|
|
142
124
|
id = "DjiH4Qffke"
|
143
125
|
p = Post.find(id) #simple find by id
|
144
126
|
|
145
|
-
#you can chain method calls, just like in ActiveRecord
|
127
|
+
# you can chain method calls, just like in ActiveRecord
|
146
128
|
Post.where(:param1 => "foo").where(:param2 => "bar").all
|
147
129
|
|
148
|
-
#destroy all objects
|
130
|
+
# destroy all objects
|
149
131
|
Post.destroy_all
|
150
132
|
|
151
|
-
#limit the query
|
133
|
+
# limit the query
|
152
134
|
posts = Post.limit(5).where(:foo => "bar")
|
153
135
|
posts.length #=> 5
|
154
136
|
|
155
|
-
#get a count
|
137
|
+
# get a count
|
156
138
|
Post.where(:bar => "foo").count #=> 1337
|
157
139
|
```
|
158
140
|
|
141
|
+
Documentation
|
142
|
+
-------------
|
143
|
+
[Here](http://rubydoc.info/gems/parse_resource/)
|
144
|
+
|
145
|
+
To-do
|
146
|
+
--------------
|
147
|
+
* User authentication
|
148
|
+
* Better documentation
|
149
|
+
* Associations
|
150
|
+
* Callbacks
|
151
|
+
* Push notifications
|
152
|
+
* Better type-casting
|
153
|
+
* HTTP request error handling
|
154
|
+
|
155
|
+
User authentication is my top priority feature. Several people have specifically requested it, and Parse just began exposing [User objects in the REST API](https://www.parse.com/docs/rest#users).
|
156
|
+
|
157
|
+
Let me know of any other features you want.
|
158
|
+
|
159
159
|
|
160
160
|
Contributing to ParseResource
|
161
161
|
-----------------------------
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.
|
1
|
+
1.6.3
|
data/lib/base.rb
CHANGED
@@ -84,7 +84,14 @@ module ParseResource
|
|
84
84
|
k = k.to_s
|
85
85
|
end
|
86
86
|
|
87
|
-
@attributes[k.to_s]
|
87
|
+
if @attributes[k.to_s].is_a?(Hash) && !@attributes[k.to_s]["__type"].nil?
|
88
|
+
case @attributes[k.to_s]["__type"]
|
89
|
+
when "Date"
|
90
|
+
return result = @attributes[k.to_s]["iso"]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
return @attributes[k.to_s]
|
88
95
|
end
|
89
96
|
end
|
90
97
|
end
|
@@ -101,6 +108,15 @@ module ParseResource
|
|
101
108
|
@@settings = {"app_id" => app_id, "master_key" => master_key}
|
102
109
|
end
|
103
110
|
|
111
|
+
def settings
|
112
|
+
if @@settings.nil?
|
113
|
+
path = "config/parse_resource.yml"
|
114
|
+
environment = defined?(Rails) && Rails.respond_to?(:env) ? Rails.env : ENV["RACK_ENV"]
|
115
|
+
@@settings = YAML.load(ERB.new(File.new(path).read).result)[environment]
|
116
|
+
end
|
117
|
+
@@settings
|
118
|
+
end
|
119
|
+
|
104
120
|
# Creates a RESTful resource
|
105
121
|
# sends requests to [base_uri]/[classname]
|
106
122
|
#
|
@@ -110,7 +126,14 @@ module ParseResource
|
|
110
126
|
environment = defined?(Rails) && Rails.respond_to?(:env) ? Rails.env : ENV["RACK_ENV"]
|
111
127
|
@@settings = YAML.load(ERB.new(File.new(path).read).result)[environment]
|
112
128
|
end
|
113
|
-
|
129
|
+
|
130
|
+
if model_name == "User" #https://parse.com/docs/rest#users-signup
|
131
|
+
base_uri = "https://api.parse.com/1/users"
|
132
|
+
else
|
133
|
+
base_uri = "https://api.parse.com/1/classes/#{model_name}"
|
134
|
+
end
|
135
|
+
|
136
|
+
#refactor to settings['app_id'] etc
|
114
137
|
app_id = @@settings['app_id']
|
115
138
|
master_key = @@settings['master_key']
|
116
139
|
RestClient::Resource.new(base_uri, app_id, master_key)
|
data/lib/parse_resource.rb
CHANGED
data/lib/parse_user.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
class ParseUser < ParseResource::Base
|
2
|
+
fields :username, :password
|
3
|
+
|
4
|
+
def self.login(username, password)
|
5
|
+
base_uri = "https://api.parse.com/1/login"
|
6
|
+
app_id = settings['app_id']
|
7
|
+
master_key = settings['master_key']
|
8
|
+
resource = RestClient::Resource.new(base_uri, app_id, master_key)
|
9
|
+
|
10
|
+
resp = resource.get(:params => {:username => username, :password => password})
|
11
|
+
user = model_name.constantize.new(JSON.parse(resp), false)
|
12
|
+
|
13
|
+
user
|
14
|
+
end
|
15
|
+
end
|
data/lib/query.rb
CHANGED
data/parse_resource.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "parse_resource"
|
8
|
-
s.version = "1.6.
|
8
|
+
s.version = "1.6.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Alan deLevie"]
|
12
|
-
s.date = "2011-12-
|
12
|
+
s.date = "2011-12-16"
|
13
13
|
s.description = ""
|
14
14
|
s.email = "adelevie@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
|
|
26
26
|
"VERSION",
|
27
27
|
"lib/base.rb",
|
28
28
|
"lib/parse_resource.rb",
|
29
|
+
"lib/parse_user.rb",
|
29
30
|
"lib/query.rb",
|
30
31
|
"parse_resource.gemspec",
|
31
32
|
"rdoc/ParseResource.html",
|
data/rdoc/ParseResource.html
CHANGED
@@ -100,9 +100,7 @@
|
|
100
100
|
|
101
101
|
<li><a href="./ParseResource/Base/ClassMethods.html">ParseResource::Base::ClassMethods</a></li>
|
102
102
|
|
103
|
-
<li><a href="./
|
104
|
-
|
105
|
-
<li><a href="./Post.html">Post</a></li>
|
103
|
+
<li><a href="./Query.html">Query</a></li>
|
106
104
|
|
107
105
|
</ul>
|
108
106
|
<div id="no-class-search-results" style="display: none;">No matching classes.</div>
|
data/rdoc/created.rid
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
|
2
|
-
README.md
|
3
|
-
lib/
|
4
|
-
lib/
|
5
|
-
lib/
|
6
|
-
lib/base.rb Thu, 08 Dec 2011 23:22:58 -0500
|
1
|
+
Fri, 09 Dec 2011 18:31:09 -0500
|
2
|
+
README.md Fri, 09 Dec 2011 18:15:16 -0500
|
3
|
+
lib/query.rb Fri, 09 Dec 2011 18:08:24 -0500
|
4
|
+
lib/parse_resource.rb Fri, 09 Dec 2011 17:54:17 -0500
|
5
|
+
lib/base.rb Fri, 09 Dec 2011 17:53:11 -0500
|
data/rdoc/index.html
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
<head>
|
7
7
|
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
|
8
8
|
|
9
|
-
<title>parse_resource 1.6.
|
9
|
+
<title>parse_resource 1.6.2</title>
|
10
10
|
|
11
11
|
<link type="text/css" media="screen" href="rdoc.css" rel="stylesheet" />
|
12
12
|
|
@@ -19,10 +19,10 @@
|
|
19
19
|
<body class="indexpage">
|
20
20
|
|
21
21
|
|
22
|
-
<h1>parse_resource 1.6.
|
22
|
+
<h1>parse_resource 1.6.2</h1>
|
23
23
|
|
24
24
|
|
25
|
-
<p>This is the API documentation for 'parse_resource 1.6.
|
25
|
+
<p>This is the API documentation for 'parse_resource 1.6.2'.</p>
|
26
26
|
|
27
27
|
|
28
28
|
|
@@ -37,9 +37,7 @@
|
|
37
37
|
|
38
38
|
<li class="module"><a href="ParseResource/Base/ClassMethods.html">ParseResource::Base::ClassMethods</a></li>
|
39
39
|
|
40
|
-
<li class="class"><a href="
|
41
|
-
|
42
|
-
<li class="class"><a href="Post.html">Post</a></li>
|
40
|
+
<li class="class"><a href="Query.html">Query</a></li>
|
43
41
|
|
44
42
|
</ul>
|
45
43
|
|
@@ -72,19 +70,19 @@
|
|
72
70
|
|
73
71
|
<li><a href="ParseResource/Base.html#method-c-new">::new — ParseResource::Base</a></li>
|
74
72
|
|
75
|
-
<li><a href="
|
73
|
+
<li><a href="Query.html#method-c-new">::new — Query</a></li>
|
76
74
|
|
77
75
|
<li><a href="ParseResource/Base.html#method-c-resource">::resource — ParseResource::Base</a></li>
|
78
76
|
|
79
77
|
<li><a href="ParseResource/Base.html#method-c-where">::where — ParseResource::Base</a></li>
|
80
78
|
|
81
|
-
<li><a href="
|
79
|
+
<li><a href="Query.html#method-i-all">#all — Query</a></li>
|
82
80
|
|
83
81
|
<li><a href="ParseResource/Base.html#method-i-attributes">#attributes — ParseResource::Base</a></li>
|
84
82
|
|
85
83
|
<li><a href="ParseResource/Base.html#method-i-attributes%3D">#attributes= — ParseResource::Base</a></li>
|
86
84
|
|
87
|
-
<li><a href="
|
85
|
+
<li><a href="Query.html#method-i-count">#count — Query</a></li>
|
88
86
|
|
89
87
|
<li><a href="ParseResource/Base.html#method-i-create">#create — ParseResource::Base</a></li>
|
90
88
|
|
@@ -92,17 +90,19 @@
|
|
92
90
|
|
93
91
|
<li><a href="ParseResource/Base.html#method-i-created_at">#created_at — ParseResource::Base</a></li>
|
94
92
|
|
95
|
-
<li><a href="
|
93
|
+
<li><a href="Query.html#method-i-criteria">#criteria — Query</a></li>
|
96
94
|
|
97
95
|
<li><a href="ParseResource/Base.html#method-i-destroy">#destroy — ParseResource::Base</a></li>
|
98
96
|
|
97
|
+
<li><a href="Query.html#method-i-execute">#execute — Query</a></li>
|
98
|
+
|
99
99
|
<li><a href="ParseResource/Base.html#method-i-id">#id — ParseResource::Base</a></li>
|
100
100
|
|
101
101
|
<li><a href="ParseResource/Base.html#method-i-instance_resource">#instance_resource — ParseResource::Base</a></li>
|
102
102
|
|
103
|
-
<li><a href="
|
103
|
+
<li><a href="Query.html#method-i-limit">#limit — Query</a></li>
|
104
104
|
|
105
|
-
<li><a href="
|
105
|
+
<li><a href="Query.html#method-i-method_missing">#method_missing — Query</a></li>
|
106
106
|
|
107
107
|
<li><a href="ParseResource/Base.html#method-i-new%3F">#new? — ParseResource::Base</a></li>
|
108
108
|
|
@@ -110,6 +110,8 @@
|
|
110
110
|
|
111
111
|
<li><a href="ParseResource/Base.html#method-i-resource">#resource — ParseResource::Base</a></li>
|
112
112
|
|
113
|
+
<li><a href="Query.html#method-i-respond_to%3F">#respond_to? — Query</a></li>
|
114
|
+
|
113
115
|
<li><a href="ParseResource/Base.html#method-i-save">#save — ParseResource::Base</a></li>
|
114
116
|
|
115
117
|
<li><a href="ParseResource/Base.html#method-i-update">#update — ParseResource::Base</a></li>
|
@@ -118,7 +120,7 @@
|
|
118
120
|
|
119
121
|
<li><a href="ParseResource/Base.html#method-i-updated_at">#updated_at — ParseResource::Base</a></li>
|
120
122
|
|
121
|
-
<li><a href="
|
123
|
+
<li><a href="Query.html#method-i-where">#where — Query</a></li>
|
122
124
|
|
123
125
|
</ul>
|
124
126
|
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<head>
|
7
7
|
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
|
8
8
|
|
9
|
-
<title>File: parse_resource.rb [parse_resource 1.6.
|
9
|
+
<title>File: parse_resource.rb [parse_resource 1.6.2]</title>
|
10
10
|
|
11
11
|
<link type="text/css" media="screen" href="../rdoc.css" rel="stylesheet" />
|
12
12
|
|
@@ -24,7 +24,7 @@
|
|
24
24
|
<div id="metadata">
|
25
25
|
<dl>
|
26
26
|
<dt class="modified-date">Last Modified</dt>
|
27
|
-
<dd class="modified-date">2011-12-
|
27
|
+
<dd class="modified-date">2011-12-09 17:54:17 -0500</dd>
|
28
28
|
|
29
29
|
|
30
30
|
<dt class="requires">Requires</dt>
|
@@ -33,7 +33,7 @@
|
|
33
33
|
|
34
34
|
<li>base</li>
|
35
35
|
|
36
|
-
<li>
|
36
|
+
<li>query</li>
|
37
37
|
|
38
38
|
</ul>
|
39
39
|
</dd>
|
data/test/test_parse_resource.rb
CHANGED
@@ -32,9 +32,11 @@ class TestParseResource < Test::Unit::TestCase
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_count
|
35
|
+
Author.destroy_all
|
35
36
|
p1 = Author.create(:name => "bar")
|
36
37
|
p2 = Author.create(:name => "jab")
|
37
38
|
assert_equal Author.count, 2
|
39
|
+
assert_equal Author.where(:name => "jab").count, 1
|
38
40
|
p1.destroy
|
39
41
|
p2.destroy
|
40
42
|
assert_equal Author.count, 0
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parse_resource
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.3
|
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: 2011-12-
|
12
|
+
date: 2011-12-16 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
16
|
-
requirement: &
|
16
|
+
requirement: &79516440 !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: *79516440
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activesupport
|
27
|
-
requirement: &
|
27
|
+
requirement: &79515910 !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: *79515910
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: activemodel
|
38
|
-
requirement: &
|
38
|
+
requirement: &79515450 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *79515450
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
|
-
requirement: &
|
49
|
+
requirement: &79514900 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.0.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *79514900
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: jeweler
|
60
|
-
requirement: &
|
60
|
+
requirement: &79514250 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.6.4
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *79514250
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rcov
|
71
|
-
requirement: &
|
71
|
+
requirement: &79513330 !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: *79513330
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: reek
|
82
|
-
requirement: &
|
82
|
+
requirement: &79512680 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.2.8
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *79512680
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rest-client
|
93
|
-
requirement: &
|
93
|
+
requirement: &79511730 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *79511730
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: activesupport
|
104
|
-
requirement: &
|
104
|
+
requirement: &79510530 !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: *79510530
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: activemodel
|
115
|
-
requirement: &
|
115
|
+
requirement: &79509440 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *79509440
|
124
124
|
description: ''
|
125
125
|
email: adelevie@gmail.com
|
126
126
|
executables: []
|
@@ -138,6 +138,7 @@ files:
|
|
138
138
|
- VERSION
|
139
139
|
- lib/base.rb
|
140
140
|
- lib/parse_resource.rb
|
141
|
+
- lib/parse_user.rb
|
141
142
|
- lib/query.rb
|
142
143
|
- parse_resource.gemspec
|
143
144
|
- rdoc/ParseResource.html
|
@@ -164,7 +165,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
164
165
|
version: '0'
|
165
166
|
segments:
|
166
167
|
- 0
|
167
|
-
hash:
|
168
|
+
hash: 47696225
|
168
169
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
169
170
|
none: false
|
170
171
|
requirements:
|