jfoundry 0.1.0.pre
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/LICENSE +746 -0
- data/Rakefile +10 -0
- data/lib/cc_api_stub/applications.rb +53 -0
- data/lib/cc_api_stub/domains.rb +32 -0
- data/lib/cc_api_stub/frameworks.rb +22 -0
- data/lib/cc_api_stub/helper.rb +139 -0
- data/lib/cc_api_stub/login.rb +21 -0
- data/lib/cc_api_stub/organization_users.rb +21 -0
- data/lib/cc_api_stub/organizations.rb +70 -0
- data/lib/cc_api_stub/routes.rb +26 -0
- data/lib/cc_api_stub/runtimes.rb +22 -0
- data/lib/cc_api_stub/service_bindings.rb +22 -0
- data/lib/cc_api_stub/service_instances.rb +22 -0
- data/lib/cc_api_stub/services.rb +21 -0
- data/lib/cc_api_stub/spaces.rb +49 -0
- data/lib/cc_api_stub/users.rb +85 -0
- data/lib/cc_api_stub.rb +16 -0
- data/lib/jfoundry/auth_token.rb +63 -0
- data/lib/jfoundry/baseclient.rb +177 -0
- data/lib/jfoundry/chatty_hash.rb +46 -0
- data/lib/jfoundry/client.rb +39 -0
- data/lib/jfoundry/concerns/proxy_options.rb +17 -0
- data/lib/jfoundry/errors.rb +163 -0
- data/lib/jfoundry/rest_client.rb +331 -0
- data/lib/jfoundry/signature/version.rb +27 -0
- data/lib/jfoundry/signer.rb +13 -0
- data/lib/jfoundry/test_support.rb +3 -0
- data/lib/jfoundry/timer.rb +13 -0
- data/lib/jfoundry/trace_helpers.rb +64 -0
- data/lib/jfoundry/upload_helpers.rb +222 -0
- data/lib/jfoundry/v2/app.rb +357 -0
- data/lib/jfoundry/v2/app_event.rb +13 -0
- data/lib/jfoundry/v2/base.rb +92 -0
- data/lib/jfoundry/v2/client.rb +78 -0
- data/lib/jfoundry/v2/domain.rb +20 -0
- data/lib/jfoundry/v2/managed_service_instance.rb +13 -0
- data/lib/jfoundry/v2/model.rb +209 -0
- data/lib/jfoundry/v2/model_magic/attribute.rb +49 -0
- data/lib/jfoundry/v2/model_magic/client_extensions.rb +170 -0
- data/lib/jfoundry/v2/model_magic/has_summary.rb +49 -0
- data/lib/jfoundry/v2/model_magic/queryable_by.rb +39 -0
- data/lib/jfoundry/v2/model_magic/to_many.rb +138 -0
- data/lib/jfoundry/v2/model_magic/to_one.rb +81 -0
- data/lib/jfoundry/v2/model_magic.rb +93 -0
- data/lib/jfoundry/v2/organization.rb +22 -0
- data/lib/jfoundry/v2/quota_definition.rb +12 -0
- data/lib/jfoundry/v2/route.rb +25 -0
- data/lib/jfoundry/v2/service.rb +20 -0
- data/lib/jfoundry/v2/service_auth_token.rb +10 -0
- data/lib/jfoundry/v2/service_binding.rb +10 -0
- data/lib/jfoundry/v2/service_broker.rb +11 -0
- data/lib/jfoundry/v2/service_instance.rb +13 -0
- data/lib/jfoundry/v2/service_plan.rb +13 -0
- data/lib/jfoundry/v2/space.rb +18 -0
- data/lib/jfoundry/v2/stack.rb +10 -0
- data/lib/jfoundry/v2/user.rb +104 -0
- data/lib/jfoundry/v2/user_provided_service_instance.rb +7 -0
- data/lib/jfoundry/validator.rb +41 -0
- data/lib/jfoundry/version.rb +4 -0
- data/lib/jfoundry/zip.rb +56 -0
- data/lib/jfoundry.rb +5 -0
- data/lib/tasks/gem_release.rake +42 -0
- data/vendor/errors/README.md +3 -0
- data/vendor/errors/v1.yml +189 -0
- data/vendor/errors/v2.yml +470 -0
- metadata +269 -0
@@ -0,0 +1,81 @@
|
|
1
|
+
module JFoundry::V2::ModelMagic
|
2
|
+
module ToOne
|
3
|
+
def to_one(name, opts = {})
|
4
|
+
to_one_relations[name] = opts
|
5
|
+
|
6
|
+
association_name = opts[:as] || name
|
7
|
+
default = opts[:default]
|
8
|
+
|
9
|
+
if has_default = opts.key?(:default)
|
10
|
+
defaults[:"#{name}_guid"] = default
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
# def MODEL
|
15
|
+
#
|
16
|
+
define_method(name) do
|
17
|
+
return @cache[name] if @cache.key?(name)
|
18
|
+
return @client.send(association_name) unless persisted?
|
19
|
+
|
20
|
+
@cache[name] =
|
21
|
+
if @manifest && @manifest[:entity].key?(name)
|
22
|
+
@client.send(:"make_#{association_name}", @manifest[:entity][name])
|
23
|
+
elsif url = send("#{name}_url")
|
24
|
+
@client.send(:"#{association_name}_from", url)
|
25
|
+
else
|
26
|
+
default
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
#
|
31
|
+
# def create_MODEL
|
32
|
+
#
|
33
|
+
define_method("create_#{name}") do |*args|
|
34
|
+
associated_instance = @client.send(:"#{association_name}")
|
35
|
+
args.first.each do |name, value|
|
36
|
+
associated_instance.send("#{name}=", value)
|
37
|
+
end if args.first.is_a? Hash
|
38
|
+
|
39
|
+
associated_instance.create!
|
40
|
+
self.send("#{name}=", associated_instance)
|
41
|
+
end
|
42
|
+
|
43
|
+
#
|
44
|
+
# def MODEL_url
|
45
|
+
#
|
46
|
+
define_method(:"#{name}_url") do
|
47
|
+
manifest[:entity][:"#{name}_url"]
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# def MODEL=
|
52
|
+
#
|
53
|
+
define_method(:"#{name}=") do |assigned_value|
|
54
|
+
klass = self.class.objects[association_name]
|
55
|
+
|
56
|
+
unless has_default && assigned_value == default
|
57
|
+
JFoundry::Validator.validate_type(assigned_value, klass)
|
58
|
+
end
|
59
|
+
|
60
|
+
@manifest ||= {}
|
61
|
+
@manifest[:entity] ||= {}
|
62
|
+
|
63
|
+
old_guid = @manifest[:entity][:"#{name}_guid"]
|
64
|
+
association_guid = assigned_value ? assigned_value.guid : nil
|
65
|
+
|
66
|
+
if old_guid != (association_guid)
|
67
|
+
old_obj =
|
68
|
+
@cache[name] || klass.new(@client, old_guid, @manifest[:entity][name])
|
69
|
+
|
70
|
+
@changes[name] = [old_obj, assigned_value]
|
71
|
+
end
|
72
|
+
|
73
|
+
@cache[name] = assigned_value
|
74
|
+
|
75
|
+
@manifest[:entity][:"#{name}_guid"] = association_guid
|
76
|
+
@diff[:"#{name}_guid"] = association_guid
|
77
|
+
assigned_value
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require "jfoundry/validator"
|
2
|
+
require "jfoundry/v2/model_magic/client_extensions"
|
3
|
+
require "jfoundry/v2/model_magic/has_summary"
|
4
|
+
require "jfoundry/v2/model_magic/attribute"
|
5
|
+
require "jfoundry/v2/model_magic/to_one"
|
6
|
+
require "jfoundry/v2/model_magic/to_many"
|
7
|
+
require "jfoundry/v2/model_magic/queryable_by"
|
8
|
+
|
9
|
+
module JFoundry::V2
|
10
|
+
# object name -> module containing query methods
|
11
|
+
#
|
12
|
+
# e.g. app -> { app_by_name, app_by_space_guid, ... }
|
13
|
+
QUERIES = Hash.new do |h, k|
|
14
|
+
h[k] = Module.new
|
15
|
+
end
|
16
|
+
|
17
|
+
module BaseClientMethods
|
18
|
+
end
|
19
|
+
|
20
|
+
module ClientMethods
|
21
|
+
end
|
22
|
+
|
23
|
+
module ModelMagic
|
24
|
+
include ModelMagic::ClientExtensions
|
25
|
+
include ModelMagic::HasSummary
|
26
|
+
include ModelMagic::Attribute
|
27
|
+
include ModelMagic::ToOne
|
28
|
+
include ModelMagic::ToMany
|
29
|
+
include ModelMagic::QueryableBy
|
30
|
+
|
31
|
+
attr_reader :scoped_organization, :scoped_space
|
32
|
+
|
33
|
+
def object_name
|
34
|
+
@object_name ||=
|
35
|
+
name.split("::").last.gsub(
|
36
|
+
/([a-z])([A-Z])/,
|
37
|
+
'\1_\2').downcase.to_sym
|
38
|
+
end
|
39
|
+
|
40
|
+
def plural_object_name
|
41
|
+
:"#{object_name}s"
|
42
|
+
end
|
43
|
+
|
44
|
+
def defaults
|
45
|
+
@defaults ||= {}
|
46
|
+
end
|
47
|
+
|
48
|
+
def attributes
|
49
|
+
@attributes ||= {}
|
50
|
+
end
|
51
|
+
|
52
|
+
def to_one_relations
|
53
|
+
@to_one_relations ||= {}
|
54
|
+
end
|
55
|
+
|
56
|
+
def to_many_relations
|
57
|
+
@to_many_relations ||= {}
|
58
|
+
end
|
59
|
+
|
60
|
+
def inherited(klass)
|
61
|
+
add_client_methods(klass)
|
62
|
+
has_summary
|
63
|
+
end
|
64
|
+
|
65
|
+
def scoped_to_organization(relation = :organization)
|
66
|
+
@scoped_organization = relation
|
67
|
+
end
|
68
|
+
|
69
|
+
def scoped_to_space(relation = :space)
|
70
|
+
@scoped_space = relation
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.params_from(args)
|
74
|
+
options, _ = args
|
75
|
+
options ||= {}
|
76
|
+
options[:depth] ||= 1
|
77
|
+
|
78
|
+
params = {}
|
79
|
+
options.each do |k, v|
|
80
|
+
case k
|
81
|
+
when :depth
|
82
|
+
params[:"inline-relations-depth"] = v
|
83
|
+
when :query
|
84
|
+
params[:q] = v.join(":")
|
85
|
+
when :user_provided
|
86
|
+
params[:"return_user_provided_service_instances"] = v
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
params
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "jfoundry/v2/model"
|
2
|
+
|
3
|
+
module JFoundry::V2
|
4
|
+
class Organization < Model
|
5
|
+
attribute :name, :string
|
6
|
+
attribute :billing_enabled, :boolean
|
7
|
+
attribute :status, :string
|
8
|
+
#attribute :users, :string
|
9
|
+
|
10
|
+
to_many :spaces
|
11
|
+
to_many :domains
|
12
|
+
to_many :users
|
13
|
+
to_many :managers, :as => :user
|
14
|
+
to_many :billing_managers, :as => :user
|
15
|
+
to_many :auditors, :as => :user
|
16
|
+
|
17
|
+
to_one :quota_definition
|
18
|
+
|
19
|
+
queryable_by :name, :space_guid, :user_guid, :manager_guid,
|
20
|
+
:billing_manager_guid, :auditor_guid
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require "jfoundry/v2/model"
|
2
|
+
|
3
|
+
module JFoundry::V2
|
4
|
+
class QuotaDefinition < Model
|
5
|
+
attribute :name, :string
|
6
|
+
attribute :non_basic_services_allowed, :boolean
|
7
|
+
attribute :total_services, :integer
|
8
|
+
attribute :memory_limit, :integer
|
9
|
+
|
10
|
+
queryable_by :name
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "jfoundry/v2/model"
|
2
|
+
|
3
|
+
module JFoundry::V2
|
4
|
+
class Route < Model
|
5
|
+
attribute :host, :string
|
6
|
+
validates_format_of :host, :with => /\A[a-z]+([a-z0-9\-]*[a-z0-9]+)?\Z/i
|
7
|
+
validates_length_of :host, :maximum => 63
|
8
|
+
validates_presence_of :domain
|
9
|
+
validates_presence_of :space
|
10
|
+
to_one :domain
|
11
|
+
to_one :space
|
12
|
+
|
13
|
+
queryable_by :host, :domain_guid
|
14
|
+
|
15
|
+
def name
|
16
|
+
"#{host}.#{domain.name}"
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def attribute_for_error(error)
|
22
|
+
error.is_a?(JFoundry::RouteHostTaken) ? :host : :base
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "jfoundry/v2/model"
|
2
|
+
|
3
|
+
module JFoundry::V2
|
4
|
+
class Service < Model
|
5
|
+
attribute :label, String
|
6
|
+
attribute :provider, String
|
7
|
+
attribute :url, :url
|
8
|
+
attribute :description, String
|
9
|
+
attribute :version, String
|
10
|
+
attribute :info_url, :url
|
11
|
+
attribute :acls, { "users" => [String], "wildcards" => [String] },
|
12
|
+
:default => nil
|
13
|
+
attribute :timeout, Integer, :default => nil
|
14
|
+
attribute :active, :boolean, :default => false
|
15
|
+
attribute :extra, String
|
16
|
+
to_many :service_plans
|
17
|
+
|
18
|
+
queryable_by :service_plan_guid
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "jfoundry/v2/model"
|
2
|
+
|
3
|
+
module JFoundry::V2
|
4
|
+
class ServiceInstance < Model
|
5
|
+
attribute :name, :string
|
6
|
+
to_one :space
|
7
|
+
to_many :service_bindings
|
8
|
+
|
9
|
+
scoped_to_space
|
10
|
+
|
11
|
+
queryable_by :name, :space_guid, :service_plan_guid, :service_binding_guid, :gateway_name
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "jfoundry/v2/model"
|
2
|
+
|
3
|
+
module JFoundry::V2
|
4
|
+
class ServicePlan < Model
|
5
|
+
attribute :name, :string
|
6
|
+
attribute :description, :string
|
7
|
+
attribute :extra, :string
|
8
|
+
to_one :service
|
9
|
+
to_many :service_instances
|
10
|
+
|
11
|
+
queryable_by :service_guid, :service_instance_guid
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "jfoundry/v2/model"
|
2
|
+
|
3
|
+
module JFoundry::V2
|
4
|
+
class Space < Model
|
5
|
+
attribute :name, :string
|
6
|
+
to_one :organization
|
7
|
+
to_many :developers, :as => :user
|
8
|
+
to_many :managers, :as => :user
|
9
|
+
to_many :auditors, :as => :user
|
10
|
+
to_many :apps
|
11
|
+
to_many :domains
|
12
|
+
to_many :service_instances
|
13
|
+
|
14
|
+
scoped_to_organization
|
15
|
+
|
16
|
+
queryable_by :name, :organization_guid, :developer_guid, :app_guid
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require "jfoundry/v2/model"
|
2
|
+
|
3
|
+
module JFoundry
|
4
|
+
module V2
|
5
|
+
class User < Model
|
6
|
+
to_many :spaces
|
7
|
+
to_many :organizations
|
8
|
+
to_many :managed_organizations, :as => :organization
|
9
|
+
to_many :billing_managed_organizations, :as => :organization
|
10
|
+
to_many :audited_organizations, :as => :organization
|
11
|
+
to_many :managed_spaces, :as => :space
|
12
|
+
to_many :audited_spaces, :as => :space
|
13
|
+
attribute :admin, :boolean
|
14
|
+
to_one :default_space, :as => :space
|
15
|
+
|
16
|
+
attribute :guid, :string # guid is explicitly set for users
|
17
|
+
|
18
|
+
queryable_by :space_guid, :organization_guid, :managed_organization_guid,
|
19
|
+
:billing_managed_organization_guid, :audited_organization_guid,
|
20
|
+
:managed_space_guid, :audited_space_guid
|
21
|
+
|
22
|
+
def guid
|
23
|
+
@guid
|
24
|
+
end
|
25
|
+
|
26
|
+
alias set_guid_attribute guid=
|
27
|
+
|
28
|
+
def guid=(x)
|
29
|
+
@guid = x
|
30
|
+
set_guid_attribute(x)
|
31
|
+
end
|
32
|
+
|
33
|
+
alias :admin? :admin
|
34
|
+
|
35
|
+
# optional metadata from UAA
|
36
|
+
attr_accessor :emails, :name
|
37
|
+
|
38
|
+
def email
|
39
|
+
# if the email collection is nil or empty? collect from UAA
|
40
|
+
#p "email................."
|
41
|
+
return unless @emails && @emails.first
|
42
|
+
@emails.first[:value]
|
43
|
+
=begin
|
44
|
+
get_meta_from_uaa if @emails.nil?
|
45
|
+
|
46
|
+
return unless @emails && @emails.first
|
47
|
+
@emails.first[:value]
|
48
|
+
=end
|
49
|
+
end
|
50
|
+
|
51
|
+
def given_name
|
52
|
+
p "given_name............."
|
53
|
+
=begin
|
54
|
+
get_meta_from_uaa if @name.nil?
|
55
|
+
|
56
|
+
return unless @name && @name[:givenName] != email
|
57
|
+
@name[:givenName]
|
58
|
+
=end
|
59
|
+
end
|
60
|
+
|
61
|
+
def family_name
|
62
|
+
p "family_name............."
|
63
|
+
=begin
|
64
|
+
get_meta_from_uaa if @name.nil?
|
65
|
+
|
66
|
+
return unless @name && @name[:familyName] != email
|
67
|
+
@name[:familyName]
|
68
|
+
=end
|
69
|
+
end
|
70
|
+
|
71
|
+
def full_name
|
72
|
+
if @name && @name[:fullName]
|
73
|
+
@name[:fullName]
|
74
|
+
elsif given_name && family_name
|
75
|
+
"#{given_name} #{family_name}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def delete! (options = {})
|
80
|
+
super(options)
|
81
|
+
#@client.base.uaa.delete_user(guid)
|
82
|
+
p "delete!............"
|
83
|
+
true
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def get_meta_from_uaa
|
89
|
+
p "get_meta_from_uaa......."
|
90
|
+
=begin
|
91
|
+
user = @client.base.uaa.user(guid)
|
92
|
+
return if user.nil?
|
93
|
+
return if not user[:error].nil?
|
94
|
+
|
95
|
+
@emails = user[:emails]
|
96
|
+
@name ||= {}
|
97
|
+
@name[:familyName] = user[:name][:familyname]
|
98
|
+
@name[:givenName] = user[:name][:givenname]
|
99
|
+
=end
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module JFoundry
|
2
|
+
module Validator
|
3
|
+
class << self
|
4
|
+
def value_matches?(val, type)
|
5
|
+
return true if val.nil?
|
6
|
+
|
7
|
+
case type
|
8
|
+
when Class
|
9
|
+
val.is_a?(type)
|
10
|
+
when Regexp
|
11
|
+
val.is_a?(String) && !!(val =~ type)
|
12
|
+
when :url
|
13
|
+
value_matches?(val, URI::regexp(%w(http https)))
|
14
|
+
when :https_url
|
15
|
+
value_matches?(val, URI::regexp("https"))
|
16
|
+
when :boolean
|
17
|
+
val.is_a?(TrueClass) || val.is_a?(FalseClass)
|
18
|
+
when Array
|
19
|
+
val.all? do |x|
|
20
|
+
value_matches?(x, type.first)
|
21
|
+
end
|
22
|
+
when Hash
|
23
|
+
val.is_a?(Hash) &&
|
24
|
+
type.all? { |name, subtype|
|
25
|
+
val.key?(name) && value_matches?(val[name], subtype)
|
26
|
+
}
|
27
|
+
when nil
|
28
|
+
true
|
29
|
+
else
|
30
|
+
val.is_a?(Object.const_get(type.to_s.capitalize))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def validate_type(val, type)
|
35
|
+
unless value_matches?(val, type)
|
36
|
+
raise JFoundry::Mismatch.new(type, val)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/jfoundry/zip.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require "zip/zipfilesystem"
|
2
|
+
|
3
|
+
module JFoundry
|
4
|
+
# Generic Zpi API. Uses rubyzip underneath, but may be changed in the future
|
5
|
+
# to use system zip command if necessary.
|
6
|
+
module Zip
|
7
|
+
# Directory entries to exclude from packing.
|
8
|
+
PACK_EXCLUSION_GLOBS = %w(.. . *~ #*# *.log)
|
9
|
+
|
10
|
+
module_function
|
11
|
+
|
12
|
+
# Get the entries in the zip file. Returns an array of the entire
|
13
|
+
# contents, recursively (not just top-level).
|
14
|
+
def entry_lines(file)
|
15
|
+
entries = []
|
16
|
+
::Zip::ZipFile.foreach(file) do |zentry|
|
17
|
+
entries << zentry
|
18
|
+
end
|
19
|
+
entries
|
20
|
+
end
|
21
|
+
|
22
|
+
# Unpack a zip +file+ to directory +dest+.
|
23
|
+
def unpack(file, dest)
|
24
|
+
::Zip::ZipFile.foreach(file) do |zentry|
|
25
|
+
epath = "#{dest}/#{zentry}"
|
26
|
+
dirname = File.dirname(epath)
|
27
|
+
FileUtils.mkdir_p(dirname) unless File.exists?(dirname)
|
28
|
+
zentry.extract(epath) unless File.exists?(epath)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# Determine what files in +dir+ to pack.
|
33
|
+
def files_to_pack(dir)
|
34
|
+
Dir.glob("#{dir}/**/*", File::FNM_DOTMATCH).select do |f|
|
35
|
+
File.exists?(f) &&
|
36
|
+
PACK_EXCLUSION_GLOBS.none? do |e|
|
37
|
+
File.fnmatch(e, File.basename(f))
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Package directory +dir+ as file +zipfile+.
|
43
|
+
def pack(dir, zipfile)
|
44
|
+
files = files_to_pack(dir)
|
45
|
+
return false if files.empty?
|
46
|
+
|
47
|
+
::Zip::ZipFile.open(zipfile, true) do |zf|
|
48
|
+
files.each do |f|
|
49
|
+
zf.add(f.sub("#{dir}/",''), f)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
true
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/jfoundry.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'active_support/core_ext'
|
2
|
+
|
3
|
+
namespace :gem do
|
4
|
+
desc "Bump gem version, push to RubyGems, push to Github, add release notes"
|
5
|
+
task :release, [:version] do |_, args|
|
6
|
+
version = args[:version] || 'rc'
|
7
|
+
old_version = gem_version
|
8
|
+
|
9
|
+
sh! "gem bump --version #{version} --no-commit"
|
10
|
+
sh! "git add lib/jfoundry/version.rb"
|
11
|
+
|
12
|
+
print_with_purpose "Bumping to version #{gem_version}"
|
13
|
+
generate_release_notes(old_version)
|
14
|
+
sh!("git commit -m 'Bumping to version #{gem_version}.'")
|
15
|
+
sh!("git push")
|
16
|
+
sh!("gem release --tag")
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
def generate_release_notes(old_version)
|
21
|
+
print_with_purpose "Generating release notes..."
|
22
|
+
file_name = "release_#{gem_version}"
|
23
|
+
sh!("anchorman notes --name=#{file_name} --from=v#{old_version}")
|
24
|
+
sh!("git add release_notes")
|
25
|
+
end
|
26
|
+
|
27
|
+
def sh!(cmd)
|
28
|
+
`#{cmd}`
|
29
|
+
raise "borked with #{$?}" unless $?.success?
|
30
|
+
end
|
31
|
+
|
32
|
+
def print_with_purpose(text)
|
33
|
+
puts "\033[34m#{text}\033[0m"
|
34
|
+
end
|
35
|
+
|
36
|
+
def gem_version
|
37
|
+
silence_warnings do
|
38
|
+
load "lib/jfoundry/version.rb"
|
39
|
+
end
|
40
|
+
Gem::Specification.load("jfoundry.gemspec").version.to_s
|
41
|
+
end
|
42
|
+
end
|