biller_bot_resource 0.0.9 → 0.0.10

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: 013482625cad396524d55f83235934c23b122c8d
4
- data.tar.gz: 4a555f42da4c28cf549f31e824b3b6bc382cd175
3
+ metadata.gz: 17a99fdcc82deaf4fe33e71de9b3aec0bb5ea116
4
+ data.tar.gz: e5643dee62d2ee1414d33b2d715bb4b66f68ba68
5
5
  SHA512:
6
- metadata.gz: 2433bb16479c84e1f19d371d584179b5e26f10d6552de1cd3eed035861293012f021f348efe1f4eb87016feacf88af98e1fda84c441d1fc015b204b746c9aa90
7
- data.tar.gz: 1bd967e91f658f2a29d93a29e01a75eaf53440006d19103f9c7d3319f01d7451a23e80d97abc7c08df59927f80f044ecb829ba1e8cc40940aed95c832a0a6a5c
6
+ metadata.gz: 5f5295b254d889e4fc7547a664d01d674e4257dde70cf71e72e32d9cb4ea5591ae3619f50a927c53d2151fdb27938a21f3c9de775dd87f8963a1b2d3cab8a3bd
7
+ data.tar.gz: 4b971651e7b962c6e7d3af252f7caf85bb7b0432d4f4ff5552a791b8846d20753f2b4c8e4c7237133f99bb41d01ed89e9075039f3d032317defcfcc60c771bfc
data/Rakefile CHANGED
@@ -1 +1,7 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new("spec")
5
+
6
+ # If you want to make this the default task
7
+ task :default => :spec
@@ -18,7 +18,6 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- # specify any dependencies here; for example:
22
- # s.add_development_dependency "rspec"
23
- # s.add_runtime_dependency "rest-client"
21
+ s.add_dependency "activeresource", "~> 3.2.0"
22
+ s.add_development_dependency "rspec"
24
23
  end
@@ -1,3 +1,5 @@
1
+ require "active_resource"
2
+
1
3
  require "biller_bot_resource/version"
2
4
  require "biller_bot_resource/resource"
3
5
  require "biller_bot_resource/configuration"
@@ -15,6 +15,29 @@ class BillerBotResource::Product < BillerBotResource::Resource
15
15
  # saved independently.
16
16
  def force_persisted
17
17
  @persisted = true
18
+
19
+ # Propogate to all children too.
20
+ contexts.each do |c|
21
+ c.product_id = product_id
22
+ c.force_persisted
23
+ end
24
+ end
25
+
26
+ ##
27
+ # Fetch all the children contexts with the given context type.
28
+ #
29
+ # @param [String] type The type of context to be searching for
30
+ # @return [Array<BillerBotResource::Product::Context] The matching contexts
31
+ def children_with_type(type)
32
+ matches = contexts.select { |c| (c.type.downcase == type.to_s.downcase) }
33
+ end
34
+
35
+ ##
36
+ # Fetch all the child contexts in a flat structure. Also include myself.
37
+ #
38
+ # @return [Array<BillerBotResource::Product::Context>]
39
+ def descendants_with_self
40
+ [self, contexts.map(&:descendants_with_self)].flatten.uniq
18
41
  end
19
42
  end
20
43
 
@@ -31,6 +54,16 @@ class BillerBotResource::Product < BillerBotResource::Resource
31
54
  @attributes[:contexts]
32
55
  end
33
56
 
57
+ def all_contexts
58
+ contexts.map(&:descendants_with_self).flatten
59
+ end
60
+
61
+ def context(id)
62
+ context = all_contexts.select { |c| c.id.try(:to_i) == id.try(:to_i) }.first
63
+ raise ActiveResource::ResourceNotFound.new(nil) if context.nil?
64
+ context
65
+ end
66
+
34
67
  ##
35
68
  # Fetch the root product context for the given account ID.
36
69
  #
@@ -1,3 +1,3 @@
1
1
  module BillerBotResource
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
@@ -0,0 +1,35 @@
1
+ require "spec_helper"
2
+
3
+ describe BillerBotResource::Product::Context do
4
+ let(:context) { BillerBotResource::Product::Context.new(:type => "TimeProductContext", :unit_price => 1.01, :contexts => []) }
5
+
6
+ describe :children_with_type do
7
+ it "returns an empty array when there are no children" do
8
+ context.children_with_type("SomeTestType").should be_empty
9
+ end
10
+
11
+ context "with children" do
12
+ before :each do
13
+ context.contexts << BillerBotResource::Product::Context.new(:type => "TimeProductContext", :unit_price => 1.01, :contexts => [])
14
+ context.contexts.length.should == 1
15
+ end
16
+
17
+ it "returns an empty array when there are no matches" do
18
+ context.children_with_type("SomeTestType").should be_empty
19
+ end
20
+
21
+ it "returns a single result" do
22
+ context.children_with_type(context.contexts.first.type).length.should == 1
23
+ end
24
+
25
+ it "returns multiple results" do
26
+ context.contexts << BillerBotResource::Product::Context.new(:type => context.contexts.first.type)
27
+ context.children_with_type(context.contexts.first.type).length.should == context.contexts.length
28
+ end
29
+
30
+ it "is not case sensitive" do
31
+ context.children_with_type(context.contexts.first.type.downcase).length.should == 1
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,19 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ require "biller_bot_resource"
8
+
9
+ RSpec.configure do |config|
10
+ config.treat_symbols_as_metadata_keys_with_true_values = true
11
+ config.run_all_when_everything_filtered = true
12
+ config.filter_run :focus
13
+
14
+ # Run specs in random order to surface order dependencies. If you find an
15
+ # order dependency and want to debug it, you can fix the order by providing
16
+ # the seed, which is printed after each run.
17
+ # --seed 1234
18
+ config.order = "random"
19
+ end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: biller_bot_resource
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brad Seefeld
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-26 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2013-12-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activeresource
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 3.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 3.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  description: Provides a set of Ruby classes for interacting with the BillerBot API
14
42
  email:
15
43
  - support@dispatchbot.com
@@ -31,6 +59,8 @@ files:
31
59
  - lib/biller_bot_resource/product.rb
32
60
  - lib/biller_bot_resource/resource.rb
33
61
  - lib/biller_bot_resource/version.rb
62
+ - spec/lib/biller_bot_resource/product_context_spec.rb
63
+ - spec/spec_helper.rb
34
64
  homepage: https://github.com/bradseefeld/biller_bot_resource
35
65
  licenses: []
36
66
  metadata: {}
@@ -54,4 +84,6 @@ rubygems_version: 2.1.11
54
84
  signing_key:
55
85
  specification_version: 4
56
86
  summary: Common resources for the BillerBot API
57
- test_files: []
87
+ test_files:
88
+ - spec/lib/biller_bot_resource/product_context_spec.rb
89
+ - spec/spec_helper.rb