pears 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e5f72a743be10db15756a0223ec43b75ca764aeeec8271999359324b8df5556
4
- data.tar.gz: ec6603a5cace923b98ea1f80f8f4876c94d94118f4cd6975f63eae3e75fb5991
3
+ metadata.gz: 7abec7354b67f08e28107cfb1fb8c94864d7ac207ff1b7fd64fc916768195544
4
+ data.tar.gz: ecd79dde81cd9964d287aaa12e42bbc6c449403b4eded1f5a23d1d886d735066
5
5
  SHA512:
6
- metadata.gz: 7f78200980505f2f354d87890f02b4ab094e36c1da304c387b8352595a7a9f2e9e74f145f1bc8da3c320f37f56a764c43068a75c6cd6b6e42511d4804acccf66
7
- data.tar.gz: 60259e0a407ff67e0a3301825de82fb45b3f87a6afd08d9e5c2de34743bbe092e3e86a38bd50b99c6cae9ae81e4aab96d9951f21f7091d17febc3fb17ae14387
6
+ metadata.gz: 3e5da3506aa2ae5fd633a8ef815b109bf317d6c9338a4730b0f3d304dce946158cac778e8cdb67c510c9ff02a69dec318f2c35eb6307f9ede9367fcc716cfb2d
7
+ data.tar.gz: edf8f9e02d5c04de51c97400bcf666c362e92a5ce0b91ad8d6820360c0e111e8b83b5d9f155d75e473bf546acb7af8aa945a54cefe8e4f5fd89fb18faf8e0bab
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pears (0.0.11)
4
+ pears (0.1.3)
5
5
  activesupport
6
6
  dry-configurable (>= 0.13.0)
7
7
  redis
@@ -9,25 +9,24 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- activesupport (6.1.4.3)
12
+ activesupport (7.0.2.3)
13
13
  concurrent-ruby (~> 1.0, >= 1.0.2)
14
14
  i18n (>= 1.6, < 2)
15
15
  minitest (>= 5.1)
16
16
  tzinfo (~> 2.0)
17
- zeitwerk (~> 2.3)
18
17
  byebug (11.1.3)
19
- concurrent-ruby (1.1.9)
18
+ concurrent-ruby (1.1.10)
20
19
  diff-lcs (1.4.4)
21
- dry-configurable (0.13.0)
20
+ dry-configurable (0.14.0)
22
21
  concurrent-ruby (~> 1.0)
23
22
  dry-core (~> 0.6)
24
23
  dry-core (0.7.1)
25
24
  concurrent-ruby (~> 1.0)
26
- i18n (1.8.11)
25
+ i18n (1.10.0)
27
26
  concurrent-ruby (~> 1.0)
28
27
  minitest (5.15.0)
29
28
  rake (13.0.6)
30
- redis (4.5.1)
29
+ redis (4.6.0)
31
30
  rspec (3.10.0)
32
31
  rspec-core (~> 3.10.0)
33
32
  rspec-expectations (~> 3.10.0)
@@ -45,7 +44,6 @@ GEM
45
44
  rspec-support (3.10.3)
46
45
  tzinfo (2.0.4)
47
46
  concurrent-ruby (~> 1.0)
48
- zeitwerk (2.5.1)
49
47
 
50
48
  PLATFORMS
51
49
  arm64-darwin-20
@@ -21,9 +21,13 @@ module Pears
21
21
 
22
22
  private
23
23
 
24
- def parse_yaml(yaml_data)
25
- yaml_data = YAML.load(yaml_data)
26
- raise Pears::InvalidProviderData unless yaml_data.is_a? Hash
24
+ def parse_yaml(yaml_string)
25
+ yaml_data = YAML.load(yaml_string)
26
+
27
+ unless yaml_data.respond_to? :with_indifferent_access
28
+ raise Pears::InvalidProviderData
29
+ end
30
+
27
31
  yaml_data.with_indifferent_access
28
32
  rescue Psych::SyntaxError => e
29
33
  logger ||= defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
@@ -7,13 +7,23 @@ module Pears
7
7
  def self.enable_provider(provider, yielder: false)
8
8
  method_name = provider.name.split('::').last.underscore.to_sym
9
9
  if yielder
10
- define_method(method_name) do |*args, &block|
10
+ define_method(method_name) do |*args, **opts, &block|
11
+ # Skip if Rails environment should not use this perticular setting
12
+ if defined?(Rails)
13
+ return if Array.wrap(opts[:skip_env]).include?(Rails.env.to_sym)
14
+ end
15
+
11
16
  pr = provider.new(builder: self, &block)
12
17
  push pr
13
18
  pr
14
19
  end
15
20
  else
16
21
  define_method(method_name) do |*args, **opts, &block|
22
+ # Skip if Rails environment should not use this perticular setting
23
+ if defined?(Rails)
24
+ return if Array.wrap(opts[:skip_env]).include?(Rails.env.to_sym)
25
+ end
26
+
17
27
  pr = provider.new(*args, **opts, &block)
18
28
  push pr
19
29
  pr
@@ -26,6 +36,10 @@ module Pears
26
36
  enable_provider RemoteFile
27
37
  enable_provider Subscription, yielder: true
28
38
 
39
+ if defined?(Rails) == "constant"
40
+ enable_provider RailsConfig
41
+ end
42
+
29
43
  delegate :name, to: :subject
30
44
 
31
45
  def initialize(subject)
@@ -0,0 +1,23 @@
1
+ require 'yaml'
2
+ require 'active_support/core_ext/hash/indifferent_access'
3
+
4
+ module Pears
5
+ module Provider
6
+ # Used for loading simple YAML file locally.
7
+ class RailsConfig < Base
8
+ def initialize(*path_parts, on_failure: :raise)
9
+ file = path_parts.pop
10
+ file_path = Rails.root.join('config', *path_parts, "#{file}.yml")
11
+ yaml_data = File.read(file_path)
12
+ @data = parse_yaml(yaml_data)
13
+ rescue Errno::ENOENT,
14
+ Pears::InvalidProviderData => error
15
+ if on_failure == :null
16
+ @data = {}
17
+ else
18
+ raise error
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -12,7 +12,8 @@ module Pears
12
12
  InvalidProviderData,
13
13
  Errno::ECONNREFUSED,
14
14
  Errno::EHOSTUNREACH,
15
- Errno::EADDRNOTAVAIL => e
15
+ Errno::EADDRNOTAVAIL,
16
+ Net::OpenTimeout => e
16
17
  if on_failure == :null
17
18
  @data = {}
18
19
  else
@@ -1,6 +1,7 @@
1
1
  require_relative "provider/base"
2
2
  require_relative "provider/local_file"
3
3
  require_relative "provider/remote_file"
4
+ require_relative "provider/rails_config"
4
5
  require_relative "provider/subscription"
5
6
  require_relative "provider/env"
6
7
  require_relative "provider/loco"
data/lib/pears/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Pears
4
- VERSION = "0.1.2"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/pears.rb CHANGED
@@ -16,9 +16,10 @@ module Pears
16
16
 
17
17
  # This is the main way of locating a subject.
18
18
  def self.subject(name)
19
+ subjects
19
20
  Subject.new(name).tap do |subject|
20
21
  builder = Provider::Builder.new(subject)
21
- yield(builder)
22
+ @subjects << yield(builder)
22
23
  end
23
24
  end
24
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pears
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Kemp
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-17 00:00:00.000000000 Z
11
+ date: 2022-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-configurable
@@ -92,6 +92,7 @@ files:
92
92
  - lib/pears/provider/hash.rb
93
93
  - lib/pears/provider/local_file.rb
94
94
  - lib/pears/provider/loco.rb
95
+ - lib/pears/provider/rails_config.rb
95
96
  - lib/pears/provider/remote_file.rb
96
97
  - lib/pears/provider/subscription.rb
97
98
  - lib/pears/subject.rb