blinksale 0.1.0 → 0.2.0

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/Gemfile CHANGED
@@ -2,13 +2,15 @@ source "http://rubygems.org"
2
2
  # Add dependencies required to use your gem here.
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
- gem "rest-client"
6
- gem "nokogiri"
5
+ gem "rest-client", "~> 1.6.3"
6
+ gem "nokogiri", "~> 1.4.6"
7
7
 
8
8
  # Add dependencies to develop your gem here.
9
9
  # Include everything needed to run rake, tests, features, etc.
10
10
  group :development do
11
11
  gem "rspec", "~> 2.3.0"
12
+ gem "mocha", "~> 0.9.12"
12
13
  gem "bundler", "~> 1.0.0"
13
14
  gem "jeweler", "~> 1.6.2"
15
+ gem "simplecov", "~> 0.4.2"
14
16
  end
@@ -8,7 +8,8 @@ GEM
8
8
  git (>= 1.2.5)
9
9
  rake
10
10
  mime-types (1.16)
11
- nokogiri (1.4.4)
11
+ mocha (0.9.12)
12
+ nokogiri (1.4.6)
12
13
  rake (0.9.2)
13
14
  rest-client (1.6.3)
14
15
  mime-types (>= 1.16)
@@ -20,6 +21,9 @@ GEM
20
21
  rspec-expectations (2.3.0)
21
22
  diff-lcs (~> 1.1.2)
22
23
  rspec-mocks (2.3.0)
24
+ simplecov (0.4.2)
25
+ simplecov-html (~> 0.4.4)
26
+ simplecov-html (0.4.4)
23
27
 
24
28
  PLATFORMS
25
29
  ruby
@@ -27,6 +31,8 @@ PLATFORMS
27
31
  DEPENDENCIES
28
32
  bundler (~> 1.0.0)
29
33
  jeweler (~> 1.6.2)
30
- nokogiri
31
- rest-client
34
+ mocha (~> 0.9.12)
35
+ nokogiri (~> 1.4.6)
36
+ rest-client (~> 1.6.3)
32
37
  rspec (~> 2.3.0)
38
+ simplecov (~> 0.4.2)
data/Rakefile CHANGED
@@ -38,8 +38,8 @@ end
38
38
 
39
39
  task :default => :spec
40
40
 
41
- require 'rake/rdoctask'
42
- Rake::RDocTask.new do |rdoc|
41
+ require 'rdoc/task'
42
+ RDoc::Task.new do |rdoc|
43
43
  version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
44
 
45
45
  rdoc.rdoc_dir = 'rdoc'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{blinksale}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tomasz Werbicki"]
12
- s.date = %q{2011-06-27}
12
+ s.date = %q{2011-06-28}
13
13
  s.description = %q{Basic Blinksale invoice fetcher.}
14
14
  s.email = %q{tomasz@werbicki.net}
15
15
  s.extra_rdoc_files = [
@@ -27,7 +27,14 @@ Gem::Specification.new do |s|
27
27
  "VERSION",
28
28
  "blinksale.gemspec",
29
29
  "lib/blinksale.rb",
30
- "lib/invoices.rb"
30
+ "lib/clients.rb",
31
+ "lib/invoices.rb",
32
+ "spec/blinksale_spec.rb",
33
+ "spec/fixtures/invoice_collection.xml",
34
+ "spec/fixtures/invoice_single.xml",
35
+ "spec/invoice_spec.rb",
36
+ "spec/invoices_spec.rb",
37
+ "spec/spec_helper.rb"
31
38
  ]
32
39
  s.homepage = %q{http://github.com/neaf/blinksale}
33
40
  s.licenses = ["MIT"]
@@ -40,24 +47,30 @@ Gem::Specification.new do |s|
40
47
  s.specification_version = 3
41
48
 
42
49
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
43
- s.add_runtime_dependency(%q<rest-client>, [">= 0"])
44
- s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
50
+ s.add_runtime_dependency(%q<rest-client>, ["~> 1.6.3"])
51
+ s.add_runtime_dependency(%q<nokogiri>, ["~> 1.4.6"])
45
52
  s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
53
+ s.add_development_dependency(%q<mocha>, ["~> 0.9.12"])
46
54
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
47
55
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.2"])
56
+ s.add_development_dependency(%q<simplecov>, ["~> 0.4.2"])
48
57
  else
49
- s.add_dependency(%q<rest-client>, [">= 0"])
50
- s.add_dependency(%q<nokogiri>, [">= 0"])
58
+ s.add_dependency(%q<rest-client>, ["~> 1.6.3"])
59
+ s.add_dependency(%q<nokogiri>, ["~> 1.4.6"])
51
60
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
61
+ s.add_dependency(%q<mocha>, ["~> 0.9.12"])
52
62
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
53
63
  s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
64
+ s.add_dependency(%q<simplecov>, ["~> 0.4.2"])
54
65
  end
55
66
  else
56
- s.add_dependency(%q<rest-client>, [">= 0"])
57
- s.add_dependency(%q<nokogiri>, [">= 0"])
67
+ s.add_dependency(%q<rest-client>, ["~> 1.6.3"])
68
+ s.add_dependency(%q<nokogiri>, ["~> 1.4.6"])
58
69
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
70
+ s.add_dependency(%q<mocha>, ["~> 0.9.12"])
59
71
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
60
72
  s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
73
+ s.add_dependency(%q<simplecov>, ["~> 0.4.2"])
61
74
  end
62
75
  end
63
76
 
@@ -1,25 +1,27 @@
1
1
  require 'rest-client'
2
2
  require 'invoices'
3
+ require 'clients'
3
4
 
4
5
  module Blinksale
5
- class Client
6
+ class Service
6
7
  attr_reader :subdomain, :username, :password, :rest_resource
8
+ attr_reader :invoices, :clients
7
9
 
8
10
  def initialize(subdomain, username, password)
9
11
  @subdomain = subdomain
10
12
  @username = username
11
13
  @password = password
14
+
12
15
  @rest_resource = RestClient::Resource.new(base_url,
13
- username,
14
- password)
16
+ :user => username,
17
+ :password => password)
18
+
19
+ @invoices = Blinksale::Invoices.new(self)
20
+ @clients = Blinksale::Clients.new(self)
15
21
  end
16
22
 
17
23
  def base_url
18
24
  "https://#{ subdomain }.blinksale.com"
19
25
  end
20
-
21
- def invoices
22
- @invoices ||= Blinksale::Invoices.new(self)
23
- end
24
26
  end
25
27
  end
@@ -0,0 +1,57 @@
1
+ require "nokogiri"
2
+
3
+ module Blinksale
4
+ class Client
5
+ attr_accessor :name, :address1, :address2, :city, :state, :zip_code, :country, :phone
6
+
7
+ def self.from_node(node)
8
+ self.new.tap do |i|
9
+ i.id = node.attributes["uri"].content[/\d+$/].to_i
10
+ i.name = node.xpath('xmlns:name').first.content
11
+ i.address1 = node.xpath("xmlns:address1").first.content.to_f
12
+ i.address2 = node.xpath("xmlns:address2").first.content.to_f
13
+ i.city = node.xpath("xmlns:city").first.content.to_f
14
+ i.state = node.xpath("xmlns:state").first.content.to_f
15
+ i.zip_code = node.xpath("xmlns:zip").first.content.to_f
16
+ i.country = node.xpath("xmlns:country").first.content.to_f
17
+ i.phone = node.xpath("xmlns:phone").first.content.to_f
18
+ end
19
+ end
20
+ end
21
+
22
+ class Clients
23
+ attr_reader :service
24
+
25
+ def initialize(service)
26
+ @service = service
27
+ end
28
+
29
+ def all(params = {})
30
+ headers = {
31
+ :content_type => "application/vnd.blinksale+xml",
32
+ :accept => "application/vnd.blinksale+xml"
33
+ }
34
+ xml = service.rest_resource["clients"].get(
35
+ :params => params,
36
+ :headers => headers
37
+ )
38
+ doc = Nokogiri::XML(xml)
39
+ doc.xpath('//xmlns:client').map do |node|
40
+ Client.from_node(node)
41
+ end
42
+ end
43
+
44
+ def get(id, params = {})
45
+ headers = {
46
+ :content_type => "application/vnd.blinksale+xml",
47
+ :accept => "application/vnd.blinksale+xml"
48
+ }
49
+ xml = service.rest_resource["clients/#{ id }"].get(
50
+ :params => params,
51
+ :headers => headers
52
+ )
53
+ doc = Nokogiri::XML(xml)
54
+ Invoice.from_node(doc.xpath('//xmlns:client').first)
55
+ end
56
+ end
57
+ end
@@ -18,10 +18,10 @@ module Blinksale
18
18
  end
19
19
 
20
20
  class Invoices
21
- attr_reader :client
21
+ attr_reader :service
22
22
 
23
- def initialize(client)
24
- @client = client
23
+ def initialize(service)
24
+ @service = service
25
25
  end
26
26
 
27
27
  def all(params = {})
@@ -29,7 +29,7 @@ module Blinksale
29
29
  :content_type => "application/vnd.blinksale+xml",
30
30
  :accept => "application/vnd.blinksale+xml"
31
31
  }
32
- xml = client.rest_resource["invoices"].get(
32
+ xml = service.rest_resource["invoices"].get(
33
33
  :params => params,
34
34
  :headers => headers
35
35
  )
@@ -44,7 +44,7 @@ module Blinksale
44
44
  :content_type => "application/vnd.blinksale+xml",
45
45
  :accept => "application/vnd.blinksale+xml"
46
46
  }
47
- xml = client.rest_resource["invoices/#{ id }"].get(
47
+ xml = service.rest_resource["invoices/#{ id }"].get(
48
48
  :params => params,
49
49
  :headers => headers
50
50
  )
@@ -0,0 +1,49 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
2
+
3
+ describe Blinksale::Service do
4
+ let(:service) do
5
+ Blinksale::Service.new("test-host", "test-username", "test-password")
6
+ end
7
+
8
+ describe "#base_url" do
9
+ it "returns full url for given subdomain" do
10
+ service.base_url.should eql("https://test-host.blinksale.com")
11
+ end
12
+ end
13
+
14
+ describe "#rest_resource" do
15
+ it "returns instantiated RestClient resource" do
16
+ service.rest_resource.should be_an_instance_of(RestClient::Resource)
17
+ end
18
+
19
+ describe "resource" do
20
+ let(:resource) { service.rest_resource }
21
+
22
+ it "has proper credentials set" do
23
+ resource.url.should eql(service.base_url)
24
+ resource.options[:user].should eql("test-username")
25
+ resource.options[:password].should eql("test-password")
26
+ end
27
+ end
28
+ end
29
+
30
+ describe "#invoices" do
31
+ it "returns Invoices instance" do
32
+ service.invoices.should be_an_instance_of(Blinksale::Invoices)
33
+ end
34
+
35
+ describe "Invoices instance" do
36
+ let(:invoices) { service.invoices }
37
+
38
+ it "has proper service set" do
39
+ invoices.service.should eql(service)
40
+ end
41
+ end
42
+ end
43
+
44
+ describe "#clients" do
45
+ it "returns Clients instance" do
46
+ service.clients.should be_an_instance_of(Blinksale::Clients)
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <invoices xmlns="http://www.blinksale.com/api">
3
+ <invoice status="open" uri="http://example.blinksale.com/invoices/1" total="20.00" total_due="10.00">
4
+ <client name="Acme">http://example.blinksale.com/clients/1</client>
5
+
6
+ <number>100001</number>
7
+ <date>2006-09-19</date>
8
+ <terms due_date="2006-10-04">15</terms>
9
+ <currency>USD</currency>
10
+
11
+ <tags>brian, consulting</tags>
12
+ </invoice>
13
+ <invoice status="open" uri="http://example.blinksale.com/invoices/1" total="20.00" total_due="10.00">
14
+ <client name="Acme">http://example.blinksale.com/clients/2</client>
15
+
16
+ <number>100002</number>
17
+ <date>2006-09-19</date>
18
+ <terms due_date="2006-10-04">15</terms>
19
+ <currency>USD</currency>
20
+
21
+ <tags>brian, consulting</tags>
22
+ </invoice>
23
+ </invoices>
@@ -0,0 +1,58 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <invoice xmlns="http://www.blinksale.com/api" uri="http://example.blinksale.com/invoices/1"
3
+ status="pastdue" subtotal="20.00" total="20.00" paid="10.00" total_due="10.00"
4
+ surplus="0.00" updated_at="2006-09-20T17:27:48Z" created_at="2006-06-27T22:43:13Z">
5
+ <client name="Acme">http://example.blinksale.com/clients/2</client>
6
+ <number>100001</number>
7
+
8
+ <po_number>123456</po_number>
9
+ <date>2006-06-27</date>
10
+ <terms due_date="2006-07-12">15</terms>
11
+ <currency>USD</currency>
12
+
13
+ <tax amount="0.00">8.75%</tax>
14
+ <freight>0.00</freight>
15
+ <late_fee amount="0.00">0%</late_fee>
16
+ <tags>bob, scott</tags>
17
+
18
+ <lines total="882.00">
19
+ <line>
20
+ <name>French Hens</name>
21
+ <quantity>3.0</quantity>
22
+ <units>Product</units>
23
+
24
+ <unit_price>19.00</unit_price>
25
+ <taxed>false</taxed>
26
+ </line>
27
+ <line>
28
+ <name>Piper-Piping</name>
29
+
30
+ <quantity>11.0</quantity>
31
+ <units>Service</units>
32
+ <unit_price>75.00</unit_price>
33
+ <taxed>false</taxed>
34
+
35
+ </line>
36
+ </lines>
37
+ <deliveries uri="http://example.blinksale.com/invoices/1/deliveries">
38
+ <delivery uri="http://example.blinksale.com/invoices/1/deliveries/3" created_at="2006-09-22T23:51:42Z">
39
+ <body>Here's the invoice for the latest work - thanks!</body>
40
+
41
+ <recipient name="John Doe" email="john@acme.com">http://example.blinksale.com/clients/2/people/2</recipient>
42
+ <recipient name="Bob Smith" email="bob@example.com">http://example.blinksale.com/users/1</recipient>
43
+ </delivery>
44
+ </deliveries>
45
+ <payments uri="http://example.blinksale.com/invoices/1/payments" total="10.00">
46
+
47
+ <payment uri="http://example.blinksale.com/invoices/1/payments/5" created_at="2006-09-25T18:01:33Z">
48
+ <amount>10.00</amount>
49
+ <date>2006-09-25</date>
50
+ <payment_method>Check</method>
51
+
52
+ <number>10001</number>
53
+ </payment>
54
+ </payments>
55
+ <notes>Please reference this invoice number in your check memo.</notes>
56
+ <include_payment_link>true</include_payment_link>
57
+
58
+ </invoice>
@@ -0,0 +1,31 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
2
+
3
+ single_xml = File.read(File.expand_path(File.dirname(__FILE__) + "/fixtures/invoice_single.xml"))
4
+
5
+ describe Blinksale::Invoice do
6
+ describe ".from_node" do
7
+ let(:node) do
8
+ Nokogiri::XML(single_xml).xpath("//xmlns:invoice").first
9
+ end
10
+
11
+ it "returns Invoice instance" do
12
+ Blinksale::Invoice.from_node(node).should be_an_instance_of(Blinksale::Invoice)
13
+ end
14
+
15
+ describe "invoice" do
16
+ let(:invoice) do
17
+ Blinksale::Invoice.from_node(node)
18
+ end
19
+
20
+ it "has proper attributes set" do
21
+ invoice.id.should eql(1)
22
+ invoice.number.should eql("100001")
23
+ invoice.total_amount.should eql(20.0)
24
+ invoice.due_amount.should eql(10.0)
25
+ invoice.issued_on.should eql(Date.new(2006, 6, 27))
26
+ invoice.due_on.should eql(Date.new(2006, 7, 12))
27
+ invoice.currency.should eql("USD")
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,54 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
2
+
3
+ single_xml = File.read(File.expand_path(File.dirname(__FILE__) + "/fixtures/invoice_single.xml"))
4
+ collection_xml = File.read(File.expand_path(File.dirname(__FILE__) + "/fixtures/invoice_collection.xml"))
5
+
6
+ describe Blinksale::Invoices do
7
+ let(:service) do
8
+ Blinksale::Service.new("test-host", "test-username", "test-password")
9
+ end
10
+
11
+ let(:invoices) { service.invoices }
12
+
13
+ it "has proper service set" do
14
+ invoices.service.should eql(service)
15
+ end
16
+
17
+ describe "#all" do
18
+ before(:each) do
19
+ RestClient::Resource.any_instance.stubs(:get).returns(collection_xml)
20
+ end
21
+
22
+ it "returns invoices collection" do
23
+ invoices.all.first.should be_an_instance_of(Blinksale::Invoice)
24
+ end
25
+
26
+ describe "invoices" do
27
+ let(:invoice) { invoices.all.first }
28
+
29
+ it "have proper attributes set" do
30
+ invoice.number = "100001"
31
+ invoice.issued_on = Date.new(2006, 9, 19)
32
+ end
33
+ end
34
+ end
35
+
36
+ describe "#get" do
37
+ before(:each) do
38
+ RestClient::Resource.any_instance.stubs(:get).returns(single_xml)
39
+ end
40
+
41
+ it "returns invoice instance" do
42
+ invoices.get(1).should be_an_instance_of(Blinksale::Invoice)
43
+ end
44
+
45
+ describe "invoice" do
46
+ let(:invoice) { invoices.get(1) }
47
+
48
+ it "have proper attributes set" do
49
+ invoice.number = "100001"
50
+ invoice.issued_on = Date.new(2006, 9, 19)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'blinksale'
5
+
6
+ # Requires supporting files with custom matchers and macros, etc,
7
+ # in ./support/ and its subdirectories.
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+ config.mock_with :mocha
12
+ end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 2
8
8
  - 0
9
- version: 0.1.0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Tomasz Werbicki
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-06-27 00:00:00 +02:00
17
+ date: 2011-06-28 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -22,11 +22,13 @@ dependencies:
22
22
  requirement: &id001 !ruby/object:Gem::Requirement
23
23
  none: false
24
24
  requirements:
25
- - - ">="
25
+ - - ~>
26
26
  - !ruby/object:Gem::Version
27
27
  segments:
28
- - 0
29
- version: "0"
28
+ - 1
29
+ - 6
30
+ - 3
31
+ version: 1.6.3
30
32
  type: :runtime
31
33
  prerelease: false
32
34
  version_requirements: *id001
@@ -35,11 +37,13 @@ dependencies:
35
37
  requirement: &id002 !ruby/object:Gem::Requirement
36
38
  none: false
37
39
  requirements:
38
- - - ">="
40
+ - - ~>
39
41
  - !ruby/object:Gem::Version
40
42
  segments:
41
- - 0
42
- version: "0"
43
+ - 1
44
+ - 4
45
+ - 6
46
+ version: 1.4.6
43
47
  type: :runtime
44
48
  prerelease: false
45
49
  version_requirements: *id002
@@ -59,8 +63,23 @@ dependencies:
59
63
  prerelease: false
60
64
  version_requirements: *id003
61
65
  - !ruby/object:Gem::Dependency
62
- name: bundler
66
+ name: mocha
63
67
  requirement: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ~>
71
+ - !ruby/object:Gem::Version
72
+ segments:
73
+ - 0
74
+ - 9
75
+ - 12
76
+ version: 0.9.12
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *id004
80
+ - !ruby/object:Gem::Dependency
81
+ name: bundler
82
+ requirement: &id005 !ruby/object:Gem::Requirement
64
83
  none: false
65
84
  requirements:
66
85
  - - ~>
@@ -72,10 +91,10 @@ dependencies:
72
91
  version: 1.0.0
73
92
  type: :development
74
93
  prerelease: false
75
- version_requirements: *id004
94
+ version_requirements: *id005
76
95
  - !ruby/object:Gem::Dependency
77
96
  name: jeweler
78
- requirement: &id005 !ruby/object:Gem::Requirement
97
+ requirement: &id006 !ruby/object:Gem::Requirement
79
98
  none: false
80
99
  requirements:
81
100
  - - ~>
@@ -87,7 +106,22 @@ dependencies:
87
106
  version: 1.6.2
88
107
  type: :development
89
108
  prerelease: false
90
- version_requirements: *id005
109
+ version_requirements: *id006
110
+ - !ruby/object:Gem::Dependency
111
+ name: simplecov
112
+ requirement: &id007 !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ segments:
118
+ - 0
119
+ - 4
120
+ - 2
121
+ version: 0.4.2
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: *id007
91
125
  description: Basic Blinksale invoice fetcher.
92
126
  email: tomasz@werbicki.net
93
127
  executables: []
@@ -108,7 +142,14 @@ files:
108
142
  - VERSION
109
143
  - blinksale.gemspec
110
144
  - lib/blinksale.rb
145
+ - lib/clients.rb
111
146
  - lib/invoices.rb
147
+ - spec/blinksale_spec.rb
148
+ - spec/fixtures/invoice_collection.xml
149
+ - spec/fixtures/invoice_single.xml
150
+ - spec/invoice_spec.rb
151
+ - spec/invoices_spec.rb
152
+ - spec/spec_helper.rb
112
153
  has_rdoc: true
113
154
  homepage: http://github.com/neaf/blinksale
114
155
  licenses:
@@ -123,7 +164,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
123
164
  requirements:
124
165
  - - ">="
125
166
  - !ruby/object:Gem::Version
126
- hash: 2365357788582503070
167
+ hash: -1490968728677671447
127
168
  segments:
128
169
  - 0
129
170
  version: "0"