caseblocks_api 0.1.2 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -4,19 +4,20 @@ source "http://rubygems.org"
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
 
6
6
  gem 'httparty'
7
+ gem 'activesupport'
7
8
 
8
9
  group :development, :test do
9
10
  gem 'pry'
10
11
  gem 'webmock'
12
+ gem 'rspec-given'
11
13
  end
12
14
 
13
15
  # Add dependencies to develop your gem here.
14
16
  # Include everything needed to run rake, tests, features, etc.
15
17
  group :development do
16
- gem "rspec", "~> 2.8.0"
18
+ gem "rspec", "~> 2.11"
17
19
  gem "rdoc", "~> 3.12"
18
20
  gem "bundler"
19
21
  gem "jeweler", "~> 1.8.4"
20
22
  gem 'guard-rspec'
21
- gem 'growl'
22
23
  end
data/Gemfile.lock CHANGED
@@ -1,13 +1,15 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ activesupport (3.2.6)
5
+ i18n (~> 0.6)
6
+ multi_json (~> 1.0)
4
7
  addressable (2.2.8)
5
8
  coderay (1.0.7)
6
9
  crack (0.3.1)
7
10
  diff-lcs (1.1.3)
8
11
  ffi (1.0.11)
9
12
  git (1.2.5)
10
- growl (1.0.3)
11
13
  guard (1.2.3)
12
14
  listen (>= 0.4.2)
13
15
  thor (>= 0.14.6)
@@ -16,6 +18,7 @@ GEM
16
18
  httparty (0.8.3)
17
19
  multi_json (~> 1.0)
18
20
  multi_xml
21
+ i18n (0.6.0)
19
22
  jeweler (1.8.4)
20
23
  bundler (~> 1.0)
21
24
  git (>= 1.2.5)
@@ -41,14 +44,16 @@ GEM
41
44
  ffi (>= 0.5.0)
42
45
  rdoc (3.12)
43
46
  json (~> 1.4)
44
- rspec (2.8.0)
45
- rspec-core (~> 2.8.0)
46
- rspec-expectations (~> 2.8.0)
47
- rspec-mocks (~> 2.8.0)
48
- rspec-core (2.8.0)
49
- rspec-expectations (2.8.0)
50
- diff-lcs (~> 1.1.2)
51
- rspec-mocks (2.8.0)
47
+ rspec (2.11.0)
48
+ rspec-core (~> 2.11.0)
49
+ rspec-expectations (~> 2.11.0)
50
+ rspec-mocks (~> 2.11.0)
51
+ rspec-core (2.11.1)
52
+ rspec-expectations (2.11.3)
53
+ diff-lcs (~> 1.1.3)
54
+ rspec-given (2.0.0)
55
+ rspec (> 1.2.8)
56
+ rspec-mocks (2.11.2)
52
57
  slop (2.4.4)
53
58
  thor (0.15.4)
54
59
  webmock (1.8.7)
@@ -59,12 +64,13 @@ PLATFORMS
59
64
  ruby
60
65
 
61
66
  DEPENDENCIES
67
+ activesupport
62
68
  bundler
63
- growl
64
69
  guard-rspec
65
70
  httparty
66
71
  jeweler (~> 1.8.4)
67
72
  pry
68
73
  rdoc (~> 3.12)
69
- rspec (~> 2.8.0)
74
+ rspec (~> 2.11)
75
+ rspec-given
70
76
  webmock
data/README.rdoc CHANGED
@@ -25,3 +25,5 @@ Description goes here.
25
25
  Copyright (c) 2012 EmergeAdapt. See LICENSE.txt for
26
26
  further details.
27
27
 
28
+
29
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.2.2
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "caseblocks_api"
8
- s.version = "0.1.2"
8
+ s.version = "0.2.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Mark Provan"]
12
- s.date = "2012-08-03"
12
+ s.date = "2012-10-09"
13
13
  s.email = "development@emergeadapt.com"
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE.txt",
@@ -28,8 +28,15 @@ Gem::Specification.new do |s|
28
28
  "caseblocks_api.gemspec",
29
29
  "lib/caseblocks_api.rb",
30
30
  "lib/caseblocks_api/authentication_exception.rb",
31
+ "lib/caseblocks_api/bucket_results.rb",
32
+ "lib/caseblocks_api/find_by_property.rb",
33
+ "lib/caseblocks_api/update_case.rb",
31
34
  "spec/caseblocks_api_spec.rb",
32
- "spec/spec_helper.rb"
35
+ "spec/lib/caseblocks_api/bucket_results_spec.rb",
36
+ "spec/lib/caseblocks_api/find_case_by_property_spec.rb",
37
+ "spec/lib/caseblocks_api/update_case_spec.rb",
38
+ "spec/spec_helper.rb",
39
+ "spec/support/fake_http_party.rb"
33
40
  ]
34
41
  s.homepage = "http://github.com/EmergeAdapt/caseblocks_api"
35
42
  s.licenses = ["MIT"]
@@ -42,35 +49,38 @@ Gem::Specification.new do |s|
42
49
 
43
50
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
44
51
  s.add_runtime_dependency(%q<httparty>, [">= 0"])
52
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
45
53
  s.add_development_dependency(%q<pry>, [">= 0"])
46
54
  s.add_development_dependency(%q<webmock>, [">= 0"])
47
- s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
55
+ s.add_development_dependency(%q<rspec-given>, [">= 0"])
56
+ s.add_development_dependency(%q<rspec>, ["~> 2.11"])
48
57
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
49
58
  s.add_development_dependency(%q<bundler>, [">= 0"])
50
59
  s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
51
60
  s.add_development_dependency(%q<guard-rspec>, [">= 0"])
52
- s.add_development_dependency(%q<growl>, [">= 0"])
53
61
  else
54
62
  s.add_dependency(%q<httparty>, [">= 0"])
63
+ s.add_dependency(%q<activesupport>, [">= 0"])
55
64
  s.add_dependency(%q<pry>, [">= 0"])
56
65
  s.add_dependency(%q<webmock>, [">= 0"])
57
- s.add_dependency(%q<rspec>, ["~> 2.8.0"])
66
+ s.add_dependency(%q<rspec-given>, [">= 0"])
67
+ s.add_dependency(%q<rspec>, ["~> 2.11"])
58
68
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
59
69
  s.add_dependency(%q<bundler>, [">= 0"])
60
70
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
61
71
  s.add_dependency(%q<guard-rspec>, [">= 0"])
62
- s.add_dependency(%q<growl>, [">= 0"])
63
72
  end
64
73
  else
65
74
  s.add_dependency(%q<httparty>, [">= 0"])
75
+ s.add_dependency(%q<activesupport>, [">= 0"])
66
76
  s.add_dependency(%q<pry>, [">= 0"])
67
77
  s.add_dependency(%q<webmock>, [">= 0"])
68
- s.add_dependency(%q<rspec>, ["~> 2.8.0"])
78
+ s.add_dependency(%q<rspec-given>, [">= 0"])
79
+ s.add_dependency(%q<rspec>, ["~> 2.11"])
69
80
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
70
81
  s.add_dependency(%q<bundler>, [">= 0"])
71
82
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
72
83
  s.add_dependency(%q<guard-rspec>, [">= 0"])
73
- s.add_dependency(%q<growl>, [">= 0"])
74
84
  end
75
85
  end
76
86
 
@@ -1,27 +1,32 @@
1
1
  require "httparty"
2
2
  require "json"
3
+ require 'active_support/inflector'
3
4
  require "caseblocks_api/authentication_exception"
4
5
 
5
6
  module CaseblocksAPI
7
+ require 'caseblocks_api/bucket_results'
8
+ require 'caseblocks_api/find_by_property'
9
+ require 'caseblocks_api/update_case'
10
+
6
11
  class Client
7
12
  include HTTParty
8
-
13
+
9
14
  attr_reader :auth_token
10
-
15
+
11
16
  headers "Accept" => "application/json"
12
17
  headers "Content-Type" => "application/json"
13
-
18
+
14
19
  def initialize(email, password, url)
15
20
  self.class.base_uri url
16
- result = self.class.post("/tokens", :body => {email: email, password: password}.to_json)
21
+ result = self.class.post("/tokens", :body => {email: email, password: password}.to_json)
17
22
  if result["message"]
18
23
  raise CaseblocksAPI::AuthenticationException.new(result["message"])
19
24
  else
20
25
  @auth_token = result["token"] if result
21
26
  self.class.default_params("auth_token" => @auth_token)
22
27
  end
23
- end
24
-
28
+ end
29
+
25
30
  def create_case(params, case_type=nil)
26
31
  if case_type
27
32
  case_type_id = get_casetype_id(case_type)
@@ -31,7 +36,7 @@ module CaseblocksAPI
31
36
  end
32
37
  self.class.post("/case_blocks/cases", :body => {:case => params}.to_json)
33
38
  end
34
-
39
+
35
40
  def get_casetype_id(case_type_name)
36
41
  response = self.class.get("/case_blocks/case_types")["case_types"]
37
42
  response.each do |case_type|
@@ -41,6 +46,6 @@ module CaseblocksAPI
41
46
  end
42
47
  nil
43
48
  end
44
-
45
- end
46
- end
49
+
50
+ end
51
+ end
@@ -0,0 +1,22 @@
1
+ require 'caseblocks_api'
2
+ require 'active_support/inflector'
3
+
4
+ module CaseblocksAPI
5
+ class BucketResults
6
+ def initialize(client)
7
+ @client = client
8
+ end
9
+
10
+ def execute(bucket_name)
11
+ bucket_slug = bucket_name.gsub(' ', '').underscore
12
+ results = @client.get("/case_blocks/buckets/#{bucket_slug}/results", query: {page_size: 100})
13
+ results
14
+ end
15
+ end
16
+
17
+ class Client
18
+ def bucket_results(bucket_name)
19
+ BucketResults.new(self.class).execute(bucket_name)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ require 'caseblocks_api'
2
+ require 'active_support/inflector'
3
+
4
+ module CaseblocksAPI
5
+ class FindByProperty
6
+ def initialize(client)
7
+ @client = client
8
+ end
9
+
10
+ def execute(case_type, property_name, value)
11
+ @client.get("/case_blocks/#{case_type}", {query: {search: true, property: property_name, value: value}})
12
+ end
13
+ end
14
+
15
+ class Client
16
+ def find_by_property(case_type, property_name, value)
17
+ FindByProperty.new(self.class).execute(case_type, property_name, value)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ require 'caseblocks_api'
2
+ require 'active_support/inflector'
3
+
4
+ module CaseblocksAPI
5
+ class UpdateCase
6
+ def initialize(client)
7
+ @client = client
8
+ end
9
+
10
+ def execute(case_type, id, params)
11
+ case_type_name = case_type.singularize
12
+ url = "/case_blocks/#{case_type_name}/#{id}"
13
+ @client.put(url, {:body => {case_type_name => params}.to_json})
14
+ end
15
+ end
16
+
17
+ class Client
18
+ def update_case(case_type, id, params)
19
+ UpdateCase.new(self.class).execute(case_type, id, params)
20
+ end
21
+ end
22
+ end
@@ -11,7 +11,7 @@ describe "CaseblocksApi" do
11
11
  caseblocks.auth_token.should eql "some_token"
12
12
  end
13
13
  end
14
-
14
+
15
15
  context "when I don't have an account" do
16
16
  it "should raise an error" do
17
17
  CaseblocksAPI::Client.stub(:post).and_return({"message" => "You must have an account to do that"})
@@ -19,7 +19,7 @@ describe "CaseblocksApi" do
19
19
  end
20
20
  end
21
21
  end
22
-
22
+
23
23
  describe "when i'm authorised with caseblocks" do
24
24
  before do
25
25
  CaseblocksAPI::Client.stub(:post).and_return({"token" => "some_token"})
@@ -27,13 +27,13 @@ describe "CaseblocksApi" do
27
27
  password = "password1"
28
28
  @caseblocks = CaseblocksAPI::Client.new(username, password, "http://localhost:3000")
29
29
  end
30
-
30
+
31
31
  it "should return me the requested case type" do
32
32
  @caseblocks.stub(:get_casetype_id).and_return(2)
33
33
  case_type = @caseblocks.get_casetype_id("Some Case type")
34
34
  case_type.should eql 2
35
35
  end
36
-
36
+
37
37
  it "should let me create a case" do
38
38
  CaseblocksAPI::Client.stub(:post).and_return({"token" => "some_token"})
39
39
  params = {"title" => "This is a Case!", "due_at" => Time.now + 1000, "owned_by_id" => 1, "owned_by_type" => "CaseBlocks::User"}
@@ -42,5 +42,4 @@ describe "CaseblocksApi" do
42
42
  response.should include("case")
43
43
  end
44
44
  end
45
-
46
45
  end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe CaseblocksAPI::BucketResults do
5
+
6
+ Given(:client){ FakeHttpParty.new }
7
+ Given(:bucket_name){ "A Bucket" }
8
+ Given(:bucket_result){ CaseblocksAPI::BucketResults.new(client) }
9
+ When(:result){ bucket_result.execute(bucket_name) }
10
+ Then{ expect(result).to eql client.result }
11
+ Then{ expect(client.requested_url).to eql '/case_blocks/buckets/a_bucket/results' }
12
+ Then{ expect(client.params).to eql(query: {page_size: 100})}
13
+
14
+ end
15
+
16
+ def test
17
+ [].each { |a| j}
18
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe CaseblocksAPI::FindByProperty do
5
+
6
+ Given(:client){ FakeHttpParty.new }
7
+ Given(:property_name){"order_number"}
8
+ Given(:value){ "2000391" }
9
+ Given(:case_type){'tyre_shopper_order'}
10
+ Given(:find_by_property){ CaseblocksAPI::FindByProperty.new(client) }
11
+ When(:result){ find_by_property.execute(case_type, property_name, value) }
12
+ Then{ expect(result).to eql client.result}
13
+ Then{ expect(client.requested_url).to eql '/case_blocks/tyre_shopper_order' }
14
+ Then{ expect(client.params).to eql({query: {search: true, property: property_name, value: value}}) }
15
+
16
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe CaseblocksAPI::BucketResults do
4
+
5
+ Given(:client){ FakeHttpParty.new }
6
+ Given(:update_case){ CaseblocksAPI::UpdateCase.new(client) }
7
+ Given(:updated_params){ {:current_state => 'yagni' } }
8
+ Given(:case_type){'tyre_shopper_orders'}
9
+ Given(:singular_case_type){'tyre_shopper_orders'.singularize }
10
+ Given(:id){ 'a_id' }
11
+ When{ update_case.execute(case_type, id, updated_params) }
12
+ Then{ expect(client.requested_url).to eql "/case_blocks/#{singular_case_type}/#{id}" }
13
+ Then{ expect(client.params).to eql({body: {tyre_shopper_order: updated_params}.to_json }) }
14
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,13 +1,9 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
- $LOAD_PATH.unshift(File.dirname(__FILE__))
3
1
  require 'rspec'
2
+ require 'rspec/given'
4
3
  require 'caseblocks_api'
5
- #require 'webmock/rspec'
6
4
 
7
- # Requires supporting files with custom matchers and macros, etc,
8
- # in ./support/ and its subdirectories.
9
5
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
10
6
 
11
7
  RSpec.configure do |config|
12
-
8
+
13
9
  end
@@ -0,0 +1,18 @@
1
+ class FakeHttpParty
2
+ attr_reader :requested_url, :params
3
+ def get(url, params={})
4
+ @requested_url = url
5
+ @params = params
6
+ result
7
+ end
8
+
9
+ def put(url, params)
10
+ @requested_url = url
11
+ @params = params
12
+ end
13
+
14
+ def result
15
+ {"title" => "Some special title"}
16
+ end
17
+
18
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caseblocks_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.2
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-08-03 00:00:00.000000000 Z
12
+ date: 2012-10-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
16
- requirement: &70218513689480 !ruby/object:Gem::Requirement
16
+ requirement: &70165094843440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,21 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70218513689480
24
+ version_requirements: *70165094843440
25
+ - !ruby/object:Gem::Dependency
26
+ name: activesupport
27
+ requirement: &70165094842580 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70165094842580
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: pry
27
- requirement: &70218513688760 !ruby/object:Gem::Requirement
38
+ requirement: &70165094841800 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ! '>='
@@ -32,10 +43,21 @@ dependencies:
32
43
  version: '0'
33
44
  type: :development
34
45
  prerelease: false
35
- version_requirements: *70218513688760
46
+ version_requirements: *70165094841800
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: webmock
38
- requirement: &70218513704240 !ruby/object:Gem::Requirement
49
+ requirement: &70165094841040 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70165094841040
58
+ - !ruby/object:Gem::Dependency
59
+ name: rspec-given
60
+ requirement: &70165090595620 !ruby/object:Gem::Requirement
39
61
  none: false
40
62
  requirements:
41
63
  - - ! '>='
@@ -43,21 +65,21 @@ dependencies:
43
65
  version: '0'
44
66
  type: :development
45
67
  prerelease: false
46
- version_requirements: *70218513704240
68
+ version_requirements: *70165090595620
47
69
  - !ruby/object:Gem::Dependency
48
70
  name: rspec
49
- requirement: &70218513703480 !ruby/object:Gem::Requirement
71
+ requirement: &70165090594780 !ruby/object:Gem::Requirement
50
72
  none: false
51
73
  requirements:
52
74
  - - ~>
53
75
  - !ruby/object:Gem::Version
54
- version: 2.8.0
76
+ version: '2.11'
55
77
  type: :development
56
78
  prerelease: false
57
- version_requirements: *70218513703480
79
+ version_requirements: *70165090594780
58
80
  - !ruby/object:Gem::Dependency
59
81
  name: rdoc
60
- requirement: &70218513702820 !ruby/object:Gem::Requirement
82
+ requirement: &70165090593800 !ruby/object:Gem::Requirement
61
83
  none: false
62
84
  requirements:
63
85
  - - ~>
@@ -65,10 +87,10 @@ dependencies:
65
87
  version: '3.12'
66
88
  type: :development
67
89
  prerelease: false
68
- version_requirements: *70218513702820
90
+ version_requirements: *70165090593800
69
91
  - !ruby/object:Gem::Dependency
70
92
  name: bundler
71
- requirement: &70218513702060 !ruby/object:Gem::Requirement
93
+ requirement: &70165090593240 !ruby/object:Gem::Requirement
72
94
  none: false
73
95
  requirements:
74
96
  - - ! '>='
@@ -76,10 +98,10 @@ dependencies:
76
98
  version: '0'
77
99
  type: :development
78
100
  prerelease: false
79
- version_requirements: *70218513702060
101
+ version_requirements: *70165090593240
80
102
  - !ruby/object:Gem::Dependency
81
103
  name: jeweler
82
- requirement: &70218513701380 !ruby/object:Gem::Requirement
104
+ requirement: &70165090592480 !ruby/object:Gem::Requirement
83
105
  none: false
84
106
  requirements:
85
107
  - - ~>
@@ -87,21 +109,10 @@ dependencies:
87
109
  version: 1.8.4
88
110
  type: :development
89
111
  prerelease: false
90
- version_requirements: *70218513701380
112
+ version_requirements: *70165090592480
91
113
  - !ruby/object:Gem::Dependency
92
114
  name: guard-rspec
93
- requirement: &70218513700520 !ruby/object:Gem::Requirement
94
- none: false
95
- requirements:
96
- - - ! '>='
97
- - !ruby/object:Gem::Version
98
- version: '0'
99
- type: :development
100
- prerelease: false
101
- version_requirements: *70218513700520
102
- - !ruby/object:Gem::Dependency
103
- name: growl
104
- requirement: &70218513698660 !ruby/object:Gem::Requirement
115
+ requirement: &70165090591760 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ! '>='
@@ -109,7 +120,7 @@ dependencies:
109
120
  version: '0'
110
121
  type: :development
111
122
  prerelease: false
112
- version_requirements: *70218513698660
123
+ version_requirements: *70165090591760
113
124
  description:
114
125
  email: development@emergeadapt.com
115
126
  executables: []
@@ -130,8 +141,15 @@ files:
130
141
  - caseblocks_api.gemspec
131
142
  - lib/caseblocks_api.rb
132
143
  - lib/caseblocks_api/authentication_exception.rb
144
+ - lib/caseblocks_api/bucket_results.rb
145
+ - lib/caseblocks_api/find_by_property.rb
146
+ - lib/caseblocks_api/update_case.rb
133
147
  - spec/caseblocks_api_spec.rb
148
+ - spec/lib/caseblocks_api/bucket_results_spec.rb
149
+ - spec/lib/caseblocks_api/find_case_by_property_spec.rb
150
+ - spec/lib/caseblocks_api/update_case_spec.rb
134
151
  - spec/spec_helper.rb
152
+ - spec/support/fake_http_party.rb
135
153
  homepage: http://github.com/EmergeAdapt/caseblocks_api
136
154
  licenses:
137
155
  - MIT
@@ -147,7 +165,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
147
165
  version: '0'
148
166
  segments:
149
167
  - 0
150
- hash: -981333271365330474
168
+ hash: -4358537317869269911
151
169
  required_rubygems_version: !ruby/object:Gem::Requirement
152
170
  none: false
153
171
  requirements: